Hacked By AnonymousFox
{"version":3,"sources":["<anon>"],"sourcesContent":["/**\n * @license Highcharts JS v12.1.2 (2025-01-09)\n * @module highcharts/modules/networkgraph\n * @requires highcharts\n *\n * Force directed graph module\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(root[\"_Highcharts\"], root[\"_Highcharts\"][\"SVGElement\"], root[\"_Highcharts\"][\"SeriesRegistry\"]);\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"highcharts/modules/networkgraph\", [\"highcharts/highcharts\"], function (amd1) {return factory(amd1,amd1[\"SVGElement\"],amd1[\"SeriesRegistry\"]);});\n\telse if(typeof exports === 'object')\n\t\texports[\"highcharts/modules/networkgraph\"] = factory(root[\"_Highcharts\"], root[\"_Highcharts\"][\"SVGElement\"], root[\"_Highcharts\"][\"SeriesRegistry\"]);\n\telse\n\t\troot[\"Highcharts\"] = factory(root[\"Highcharts\"], root[\"Highcharts\"][\"SVGElement\"], root[\"Highcharts\"][\"SeriesRegistry\"]);\n})(typeof window === 'undefined' ? this : window, (__WEBPACK_EXTERNAL_MODULE__563__, __WEBPACK_EXTERNAL_MODULE__28__, __WEBPACK_EXTERNAL_MODULE__512__) => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 28:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__28__;\n\n/***/ }),\n\n/***/ 512:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__512__;\n\n/***/ }),\n\n/***/ 563:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__563__;\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t(() => {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = (module) => {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\t() => (module['default']) :\n/******/ \t\t\t\t() => (module);\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"default\": () => (/* binding */ networkgraph_src)\n});\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\"],\"commonjs\":[\"highcharts\"],\"commonjs2\":[\"highcharts\"],\"root\":[\"Highcharts\"]}\nvar highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_ = __webpack_require__(563);\nvar highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default = /*#__PURE__*/__webpack_require__.n(highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_);\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"SVGElement\"],\"commonjs\":[\"highcharts\",\"SVGElement\"],\"commonjs2\":[\"highcharts\",\"SVGElement\"],\"root\":[\"Highcharts\",\"SVGElement\"]}\nvar highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_ = __webpack_require__(28);\nvar highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_default = /*#__PURE__*/__webpack_require__.n(highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_);\n;// ./code/es-modules/Series/DragNodesComposition.js\n/* *\n *\n * Networkgraph series\n *\n * (c) 2010-2024 Paweł Fus\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { composed } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent, pushUnique } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n * Functions\n *\n * */\n/**\n * @private\n */\nfunction compose(ChartClass) {\n if (pushUnique(composed, 'DragNodes')) {\n addEvent(ChartClass, 'load', onChartLoad);\n }\n}\n/**\n * Draggable mode:\n * @private\n */\nfunction onChartLoad() {\n const chart = this;\n let mousedownUnbinder, mousemoveUnbinder, mouseupUnbinder;\n if (chart.container) {\n mousedownUnbinder = addEvent(chart.container, 'mousedown', (event) => {\n const point = chart.hoverPoint;\n if (point &&\n point.series &&\n point.series.hasDraggableNodes &&\n point.series.options.draggable) {\n point.series.onMouseDown(point, event);\n mousemoveUnbinder = addEvent(chart.container, 'mousemove', (e) => (point &&\n point.series &&\n point.series.onMouseMove(point, e)));\n mouseupUnbinder = addEvent(chart.container.ownerDocument, 'mouseup', (e) => {\n mousemoveUnbinder();\n mouseupUnbinder();\n return point &&\n point.series &&\n point.series.onMouseUp(point, e);\n });\n }\n });\n }\n addEvent(chart, 'destroy', function () {\n mousedownUnbinder();\n });\n}\n/**\n * Mouse down action, initializing drag&drop mode.\n *\n * @private\n * @param {Highcharts.Point} point\n * The point that event occurred.\n * @param {Highcharts.PointerEventObject} event\n * Browser event, before normalization.\n */\nfunction onMouseDown(point, event) {\n const normalizedEvent = this.chart.pointer?.normalize(event) || event;\n point.fixedPosition = {\n chartX: normalizedEvent.chartX,\n chartY: normalizedEvent.chartY,\n plotX: point.plotX,\n plotY: point.plotY\n };\n point.inDragMode = true;\n}\n/**\n * Mouse move action during drag&drop.\n *\n * @private\n *\n * @param {Highcharts.Point} point\n * The point that event occurred.\n * @param {global.Event} event\n * Browser event, before normalization.\n */\nfunction onMouseMove(point, event) {\n if (point.fixedPosition && point.inDragMode) {\n const series = this, chart = series.chart, normalizedEvent = chart.pointer?.normalize(event) || event, diffX = point.fixedPosition.chartX - normalizedEvent.chartX, diffY = point.fixedPosition.chartY - normalizedEvent.chartY, graphLayoutsLookup = chart.graphLayoutsLookup;\n let newPlotX, newPlotY;\n // At least 5px to apply change (avoids simple click):\n if (Math.abs(diffX) > 5 || Math.abs(diffY) > 5) {\n newPlotX = point.fixedPosition.plotX - diffX;\n newPlotY = point.fixedPosition.plotY - diffY;\n if (chart.isInsidePlot(newPlotX, newPlotY)) {\n point.plotX = newPlotX;\n point.plotY = newPlotY;\n point.hasDragged = true;\n this.redrawHalo(point);\n graphLayoutsLookup.forEach((layout) => {\n layout.restartSimulation();\n });\n }\n }\n }\n}\n/**\n * Mouse up action, finalizing drag&drop.\n *\n * @private\n * @param {Highcharts.Point} point\n * The point that event occurred.\n */\nfunction onMouseUp(point) {\n if (point.fixedPosition) {\n if (point.hasDragged) {\n if (this.layout.enableSimulation) {\n this.layout.start();\n }\n else {\n this.chart.redraw();\n }\n }\n point.inDragMode = point.hasDragged = false;\n if (!this.options.fixedDraggable) {\n delete point.fixedPosition;\n }\n }\n}\n/**\n * Redraw halo on mousemove during the drag&drop action.\n *\n * @private\n * @param {Highcharts.Point} point\n * The point that should show halo.\n */\nfunction redrawHalo(point) {\n if (point && this.halo) {\n this.halo.attr({\n d: point.haloPath(this.options.states.hover.halo.size)\n });\n }\n}\n/* *\n *\n * Default Export\n *\n * */\nconst DragNodesComposition = {\n compose,\n onMouseDown,\n onMouseMove,\n onMouseUp,\n redrawHalo\n};\n/* harmony default export */ const Series_DragNodesComposition = (DragNodesComposition);\n\n;// ./code/es-modules/Series/GraphLayoutComposition.js\n/* *\n *\n * Networkgraph series\n *\n * (c) 2010-2024 Paweł Fus\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { setAnimation } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { composed: GraphLayoutComposition_composed } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent: GraphLayoutComposition_addEvent, pushUnique: GraphLayoutComposition_pushUnique } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n * Constants\n *\n * */\nconst integrations = {};\nconst layouts = {};\n/* *\n *\n * Functions\n *\n * */\n/**\n * @private\n */\nfunction GraphLayoutComposition_compose(ChartClass) {\n if (GraphLayoutComposition_pushUnique(GraphLayoutComposition_composed, 'GraphLayout')) {\n GraphLayoutComposition_addEvent(ChartClass, 'afterPrint', onChartAfterPrint);\n GraphLayoutComposition_addEvent(ChartClass, 'beforePrint', onChartBeforePrint);\n GraphLayoutComposition_addEvent(ChartClass, 'predraw', onChartPredraw);\n GraphLayoutComposition_addEvent(ChartClass, 'render', onChartRender);\n }\n}\n/**\n * Re-enable simulation after print.\n * @private\n */\nfunction onChartAfterPrint() {\n if (this.graphLayoutsLookup) {\n this.graphLayoutsLookup.forEach((layout) => {\n // Return to default simulation\n layout.updateSimulation();\n });\n this.redraw();\n }\n}\n/**\n * Disable simulation before print if enabled.\n * @private\n */\nfunction onChartBeforePrint() {\n if (this.graphLayoutsLookup) {\n this.graphLayoutsLookup.forEach((layout) => {\n layout.updateSimulation(false);\n });\n this.redraw();\n }\n}\n/**\n * Clear previous layouts.\n * @private\n */\nfunction onChartPredraw() {\n if (this.graphLayoutsLookup) {\n this.graphLayoutsLookup.forEach((layout) => {\n layout.stop();\n });\n }\n}\n/**\n * @private\n */\nfunction onChartRender() {\n let systemsStable, afterRender = false;\n const layoutStep = (layout) => {\n if (layout.maxIterations-- &&\n isFinite(layout.temperature) &&\n !layout.isStable() &&\n !layout.enableSimulation) {\n // Hook similar to build-in addEvent, but instead of\n // creating whole events logic, use just a function.\n // It's faster which is important for rAF code.\n // Used e.g. in packed-bubble series for bubble radius\n // calculations\n if (layout.beforeStep) {\n layout.beforeStep();\n }\n layout.step();\n systemsStable = false;\n afterRender = true;\n }\n };\n if (this.graphLayoutsLookup) {\n setAnimation(false, this);\n // Start simulation\n this.graphLayoutsLookup.forEach((layout) => layout.start());\n // Just one sync step, to run different layouts similar to\n // async mode.\n while (!systemsStable) {\n systemsStable = true;\n this.graphLayoutsLookup.forEach(layoutStep);\n }\n if (afterRender) {\n this.series.forEach((series) => {\n if (series && series.layout) {\n series.render();\n }\n });\n }\n }\n}\n/* *\n *\n * Default Export\n *\n * */\nconst GraphLayoutComposition = {\n compose: GraphLayoutComposition_compose,\n integrations,\n layouts\n};\n/* harmony default export */ const Series_GraphLayoutComposition = (GraphLayoutComposition);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"SeriesRegistry\"],\"commonjs\":[\"highcharts\",\"SeriesRegistry\"],\"commonjs2\":[\"highcharts\",\"SeriesRegistry\"],\"root\":[\"Highcharts\",\"SeriesRegistry\"]}\nvar highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_ = __webpack_require__(512);\nvar highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default = /*#__PURE__*/__webpack_require__.n(highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_);\n;// ./code/es-modules/Series/NodesComposition.js\n/* *\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { series: { prototype: seriesProto, prototype: { pointClass: { prototype: pointProto } } } } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default());\n\nconst { defined, extend, find, merge, pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n * Composition\n *\n * */\nvar NodesComposition;\n(function (NodesComposition) {\n /* *\n *\n * Declarations\n *\n * */\n /* *\n *\n * Functions\n *\n * */\n /**\n * @private\n */\n function compose(PointClass, SeriesClass) {\n const pointProto = PointClass.prototype, seriesProto = SeriesClass.prototype;\n pointProto.setNodeState = setNodeState;\n pointProto.setState = setNodeState;\n pointProto.update = updateNode;\n seriesProto.destroy = destroy;\n seriesProto.setData = setData;\n return SeriesClass;\n }\n NodesComposition.compose = compose;\n /**\n * Create a single node that holds information on incoming and outgoing\n * links.\n * @private\n */\n function createNode(id) {\n const PointClass = this.pointClass, findById = (nodes, id) => find(nodes, (node) => node.id === id);\n let node = findById(this.nodes, id), options;\n if (!node) {\n options = this.options.nodes && findById(this.options.nodes, id);\n const newNode = new PointClass(this, extend({\n className: 'highcharts-node',\n isNode: true,\n id: id,\n y: 1 // Pass isNull test\n }, options));\n newNode.linksTo = [];\n newNode.linksFrom = [];\n /**\n * Return the largest sum of either the incoming or outgoing links.\n * @private\n */\n newNode.getSum = function () {\n let sumTo = 0, sumFrom = 0;\n newNode.linksTo.forEach((link) => {\n sumTo += link.weight || 0;\n });\n newNode.linksFrom.forEach((link) => {\n sumFrom += link.weight || 0;\n });\n return Math.max(sumTo, sumFrom);\n };\n /**\n * Get the offset in weight values of a point/link.\n * @private\n */\n newNode.offset = function (point, coll) {\n let offset = 0;\n for (let i = 0; i < newNode[coll].length; i++) {\n if (newNode[coll][i] === point) {\n return offset;\n }\n offset += newNode[coll][i].weight;\n }\n };\n // Return true if the node has a shape, otherwise all links are\n // outgoing.\n newNode.hasShape = function () {\n let outgoing = 0;\n newNode.linksTo.forEach((link) => {\n if (link.outgoing) {\n outgoing++;\n }\n });\n return (!newNode.linksTo.length ||\n outgoing !== newNode.linksTo.length);\n };\n newNode.index = this.nodes.push(newNode) - 1;\n node = newNode;\n }\n node.formatPrefix = 'node';\n // For use in formats\n node.name = node.name || node.options.id || '';\n // Mass is used in networkgraph:\n node.mass = pick(\n // Node:\n node.options.mass, node.options.marker && node.options.marker.radius, \n // Series:\n this.options.marker && this.options.marker.radius, \n // Default:\n 4);\n return node;\n }\n NodesComposition.createNode = createNode;\n /**\n * Destroy all nodes and links.\n * @private\n */\n function destroy() {\n // Nodes must also be destroyed (#8682, #9300)\n this.data = []\n .concat(this.points || [], this.nodes);\n return seriesProto.destroy.apply(this, arguments);\n }\n NodesComposition.destroy = destroy;\n /**\n * Extend generatePoints by adding the nodes, which are Point objects but\n * pushed to the this.nodes array.\n * @private\n */\n function generatePoints() {\n const chart = this.chart, nodeLookup = {};\n seriesProto.generatePoints.call(this);\n if (!this.nodes) {\n this.nodes = []; // List of Point-like node items\n }\n this.colorCounter = 0;\n // Reset links from previous run\n this.nodes.forEach((node) => {\n node.linksFrom.length = 0;\n node.linksTo.length = 0;\n node.level = node.options.level;\n });\n // Create the node list and set up links\n this.points.forEach((point) => {\n if (defined(point.from)) {\n if (!nodeLookup[point.from]) {\n nodeLookup[point.from] = this.createNode(point.from);\n }\n nodeLookup[point.from].linksFrom.push(point);\n point.fromNode = nodeLookup[point.from];\n // Point color defaults to the fromNode's color\n if (chart.styledMode) {\n point.colorIndex = pick(point.options.colorIndex, nodeLookup[point.from].colorIndex);\n }\n else {\n point.color =\n point.options.color || nodeLookup[point.from].color;\n }\n }\n if (defined(point.to)) {\n if (!nodeLookup[point.to]) {\n nodeLookup[point.to] = this.createNode(point.to);\n }\n nodeLookup[point.to].linksTo.push(point);\n point.toNode = nodeLookup[point.to];\n }\n point.name = point.name || point.id; // For use in formats\n }, this);\n // Store lookup table for later use\n this.nodeLookup = nodeLookup;\n }\n NodesComposition.generatePoints = generatePoints;\n /**\n * Destroy all nodes on setting new data\n * @private\n */\n function setData() {\n if (this.nodes) {\n this.nodes.forEach((node) => {\n node.destroy();\n });\n this.nodes.length = 0;\n }\n seriesProto.setData.apply(this, arguments);\n }\n /**\n * When hovering node, highlight all connected links. When hovering a link,\n * highlight all connected nodes.\n * @private\n */\n function setNodeState(state) {\n const args = arguments, others = this.isNode ? this.linksTo.concat(this.linksFrom) :\n [this.fromNode, this.toNode];\n if (state !== 'select') {\n others.forEach((linkOrNode) => {\n if (linkOrNode && linkOrNode.series) {\n pointProto.setState.apply(linkOrNode, args);\n if (!linkOrNode.isNode) {\n if (linkOrNode.fromNode.graphic) {\n pointProto.setState.apply(linkOrNode.fromNode, args);\n }\n if (linkOrNode.toNode && linkOrNode.toNode.graphic) {\n pointProto.setState.apply(linkOrNode.toNode, args);\n }\n }\n }\n });\n }\n pointProto.setState.apply(this, args);\n }\n NodesComposition.setNodeState = setNodeState;\n /**\n * When updating a node, don't update `series.options.data`, but\n * `series.options.nodes`\n * @private\n */\n function updateNode(options, redraw, animation, runEvent) {\n const nodes = this.series.options.nodes, data = this.series.options.data, dataLength = data?.length || 0, linkConfig = data?.[this.index];\n pointProto.update.call(this, options, this.isNode ? false : redraw, // Hold the redraw for nodes\n animation, runEvent);\n if (this.isNode) {\n // `this.index` refers to `series.nodes`, not `options.nodes` array\n const nodeIndex = (nodes || [])\n .reduce(// Array.findIndex needs a polyfill\n (prevIndex, n, index) => (this.id === n.id ? index : prevIndex), -1), \n // Merge old config with new config. New config is stored in\n // options.data, because of default logic in point.update()\n nodeConfig = merge(nodes && nodes[nodeIndex] || {}, data?.[this.index] || {});\n // Restore link config\n if (data) {\n if (linkConfig) {\n data[this.index] = linkConfig;\n }\n else {\n // Remove node from config if there's more nodes than links\n data.length = dataLength;\n }\n }\n // Set node config\n if (nodes) {\n if (nodeIndex >= 0) {\n nodes[nodeIndex] = nodeConfig;\n }\n else {\n nodes.push(nodeConfig);\n }\n }\n else {\n this.series.options.nodes = [nodeConfig];\n }\n if (pick(redraw, true)) {\n this.series.chart.redraw(animation);\n }\n }\n }\n NodesComposition.updateNode = updateNode;\n})(NodesComposition || (NodesComposition = {}));\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ const Series_NodesComposition = (NodesComposition);\n\n;// ./code/es-modules/Series/Networkgraph/NetworkgraphPoint.js\n/* *\n *\n * Networkgraph series\n *\n * (c) 2010-2024 Paweł Fus\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nconst { series: { prototype: NetworkgraphPoint_seriesProto, prototype: { pointClass: Point } } } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default());\n\nconst { addEvent: NetworkgraphPoint_addEvent, css, defined: NetworkgraphPoint_defined, extend: NetworkgraphPoint_extend, pick: NetworkgraphPoint_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n * Class\n *\n * */\nclass NetworkgraphPoint extends Point {\n /* *\n *\n * Functions\n *\n * */\n /**\n * Destroy point. If it's a node, remove all links coming out of this\n * node. Then remove point from the layout.\n * @private\n */\n destroy() {\n if (this.isNode) {\n this.linksFrom.concat(this.linksTo).forEach(function (link) {\n // Removing multiple nodes at the same time\n // will try to remove link between nodes twice\n if (link.destroyElements) {\n link.destroyElements();\n }\n });\n }\n this.series.layout.removeElementFromCollection(this, this.series.layout[this.isNode ? 'nodes' : 'links']);\n return Point.prototype.destroy.apply(this, arguments);\n }\n /**\n * Return degree of a node. If node has no connections, it still has\n * deg=1.\n * @private\n */\n getDegree() {\n const deg = this.isNode ?\n this.linksFrom.length + this.linksTo.length :\n 0;\n return deg === 0 ? 1 : deg;\n }\n /**\n * Get presentational attributes of link connecting two nodes.\n * @private\n */\n getLinkAttributes() {\n const linkOptions = this.series.options.link, pointOptions = this.options;\n return {\n 'stroke-width': NetworkgraphPoint_pick(pointOptions.width, linkOptions.width),\n stroke: (pointOptions.color || linkOptions.color),\n dashstyle: (pointOptions.dashStyle || linkOptions.dashStyle),\n opacity: NetworkgraphPoint_pick(pointOptions.opacity, linkOptions.opacity, 1)\n };\n }\n /**\n * Get link path connecting two nodes.\n * @private\n * @return {Array<Highcharts.SVGPathArray>}\n * Path: `['M', x, y, 'L', x, y]`\n */\n getLinkPath() {\n let left = this.fromNode, right = this.toNode;\n // Start always from left to the right node, to prevent rendering\n // labels upside down\n if (left.plotX > right.plotX) {\n left = this.toNode;\n right = this.fromNode;\n }\n return [\n ['M', left.plotX || 0, left.plotY || 0],\n ['L', right.plotX || 0, right.plotY || 0]\n ];\n /*\n IDEA: different link shapes?\n return [\n 'M',\n from.plotX,\n from.plotY,\n 'Q',\n (to.plotX + from.plotX) / 2,\n (to.plotY + from.plotY) / 2 + 15,\n to.plotX,\n to.plotY\n ];*/\n }\n /**\n * Get mass fraction applied on two nodes connected to each other. By\n * default, when mass is equal to `1`, mass fraction for both nodes\n * equal to 0.5.\n * @private\n * @return {Highcharts.Dictionary<number>}\n * For example `{ fromNode: 0.5, toNode: 0.5 }`\n */\n getMass() {\n const m1 = this.fromNode.mass, m2 = this.toNode.mass, sum = m1 + m2;\n return {\n fromNode: 1 - m1 / sum,\n toNode: 1 - m2 / sum\n };\n }\n /**\n * Basic `point.init()` and additional styles applied when\n * `series.draggable` is enabled.\n * @private\n */\n constructor(series, options, x) {\n super(series, options, x);\n if (this.series.options.draggable &&\n !this.series.chart.styledMode) {\n NetworkgraphPoint_addEvent(this, 'mouseOver', function () {\n css(this.series.chart.container, { cursor: 'move' });\n });\n NetworkgraphPoint_addEvent(this, 'mouseOut', function () {\n css(this.series.chart.container, { cursor: 'default' });\n });\n }\n }\n /**\n * @private\n */\n isValid() {\n return !this.isNode || NetworkgraphPoint_defined(this.id);\n }\n /**\n * Redraw link's path.\n * @private\n */\n redrawLink() {\n const path = this.getLinkPath();\n let attribs;\n if (this.graphic) {\n this.shapeArgs = {\n d: path\n };\n if (!this.series.chart.styledMode) {\n attribs = this.series.pointAttribs(this);\n this.graphic.attr(attribs);\n (this.dataLabels || []).forEach(function (label) {\n if (label) {\n label.attr({\n opacity: attribs.opacity\n });\n }\n });\n }\n this.graphic.animate(this.shapeArgs);\n // Required for dataLabels\n const start = path[0];\n const end = path[1];\n if (start[0] === 'M' && end[0] === 'L') {\n this.plotX = (start[1] + end[1]) / 2;\n this.plotY = (start[2] + end[2]) / 2;\n }\n }\n }\n /**\n * Common method for removing points and nodes in networkgraph. To\n * remove `link`, use `series.data[index].remove()`. To remove `node`\n * with all connections, use `series.nodes[index].remove()`.\n * @private\n * @param {boolean} [redraw=true]\n * Whether to redraw the chart or wait for an explicit call. When\n * doing more operations on the chart, for example running\n * `point.remove()` in a loop, it is best practice to set\n * `redraw` to false and call `chart.redraw()` after.\n * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation=false]\n * Whether to apply animation, and optionally animation\n * configuration.\n */\n remove(redraw, animation) {\n const point = this, series = point.series, nodesOptions = series.options.nodes || [];\n let index, i = nodesOptions.length;\n // For nodes, remove all connected links:\n if (point.isNode) {\n // Temporary disable series.points array, because\n // Series.removePoint() modifies it\n series.points = [];\n // Remove link from all nodes collections:\n []\n .concat(point.linksFrom)\n .concat(point.linksTo)\n .forEach(function (linkFromTo) {\n // Incoming links\n index = linkFromTo.fromNode.linksFrom.indexOf(linkFromTo);\n if (index > -1) {\n linkFromTo.fromNode.linksFrom.splice(index, 1);\n }\n // Outcoming links\n index = linkFromTo.toNode.linksTo.indexOf(linkFromTo);\n if (index > -1) {\n linkFromTo.toNode.linksTo.splice(index, 1);\n }\n // Remove link from data/points collections\n NetworkgraphPoint_seriesProto.removePoint.call(series, series.data.indexOf(linkFromTo), false, false);\n });\n // Restore points array, after links are removed\n series.points = series.data.slice();\n // Proceed with removing node. It's similar to\n // Series.removePoint() method, but doesn't modify other arrays\n series.nodes.splice(series.nodes.indexOf(point), 1);\n // Remove node options from config\n while (i--) {\n if (nodesOptions[i].id === point.options.id) {\n series.options.nodes.splice(i, 1);\n break;\n }\n }\n if (point) {\n point.destroy();\n }\n // Run redraw if requested\n series.isDirty = true;\n series.isDirtyData = true;\n if (redraw) {\n series.chart.redraw(redraw);\n }\n }\n else {\n series.removePoint(series.data.indexOf(point), redraw, animation);\n }\n }\n /**\n * Render link and add it to the DOM.\n * @private\n */\n renderLink() {\n let attribs;\n if (!this.graphic) {\n this.graphic = this.series.chart.renderer\n .path(this.getLinkPath())\n .addClass(this.getClassName(), true)\n .add(this.series.group);\n if (!this.series.chart.styledMode) {\n attribs = this.series.pointAttribs(this);\n this.graphic.attr(attribs);\n (this.dataLabels || []).forEach(function (label) {\n if (label) {\n label.attr({\n opacity: attribs.opacity\n });\n }\n });\n }\n }\n }\n}\nNetworkgraphPoint_extend(NetworkgraphPoint.prototype, {\n setState: Series_NodesComposition.setNodeState\n});\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ const Networkgraph_NetworkgraphPoint = (NetworkgraphPoint);\n\n;// ./code/es-modules/Series/Networkgraph/NetworkgraphSeriesDefaults.js\n/* *\n *\n * Networkgraph series\n *\n * (c) 2010-2024 Paweł Fus\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n * Constants\n *\n * */\n/**\n * A networkgraph is a type of relationship chart, where connnections\n * (links) attracts nodes (points) and other nodes repulse each other.\n *\n * @extends plotOptions.line\n * @product highcharts\n * @sample highcharts/demo/network-graph/\n * Networkgraph\n * @since 7.0.0\n * @excluding boostThreshold, animation, animationLimit, connectEnds,\n * colorAxis, colorKey, connectNulls, cropThreshold, dragDrop,\n * getExtremesFromAll, label, linecap, negativeColor,\n * pointInterval, pointIntervalUnit, pointPlacement,\n * pointStart, softThreshold, stack, stacking, step,\n * threshold, xAxis, yAxis, zoneAxis, dataSorting,\n * boostBlending\n * @requires modules/networkgraph\n * @optionparent plotOptions.networkgraph\n *\n * @private\n */\nconst NetworkgraphSeriesDefaults = {\n stickyTracking: false,\n /**\n * @default true\n * @extends plotOptions.series.inactiveOtherPoints\n * @private\n */\n inactiveOtherPoints: true,\n marker: {\n enabled: true,\n states: {\n /**\n * The opposite state of a hover for a single point node.\n * Applied to all not connected nodes to the hovered one.\n *\n * @declare Highcharts.PointStatesInactiveOptionsObject\n */\n inactive: {\n /**\n * Opacity of inactive markers.\n */\n opacity: 0.3,\n /**\n * Animation when not hovering over the node.\n *\n * @type {boolean|Partial<Highcharts.AnimationOptionsObject>}\n */\n animation: {\n /** @internal */\n duration: 50\n }\n }\n }\n },\n states: {\n /**\n * The opposite state of a hover for a single point link. Applied\n * to all links that are not coming from the hovered node.\n *\n * @declare Highcharts.SeriesStatesInactiveOptionsObject\n */\n inactive: {\n /**\n * Opacity of inactive links.\n */\n linkOpacity: 0.3,\n /**\n * Animation when not hovering over the node.\n *\n * @type {boolean|Partial<Highcharts.AnimationOptionsObject>}\n */\n animation: {\n /** @internal */\n duration: 50\n }\n }\n },\n /**\n * @sample highcharts/series-networkgraph/link-datalabels\n * Networkgraph with labels on links\n * @sample highcharts/series-networkgraph/textpath-datalabels\n * Networkgraph with labels around nodes\n * @sample highcharts/series-networkgraph/link-datalabels\n * Data labels moved into the nodes\n * @sample highcharts/series-networkgraph/link-datalabels\n * Data labels moved under the links\n *\n * @declare Highcharts.SeriesNetworkgraphDataLabelsOptionsObject\n *\n * @private\n */\n dataLabels: {\n /**\n * The\n * [format string](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting)\n * specifying what to show for _node_ in the networkgraph. In v7.0\n * defaults to `{key}`, since v7.1 defaults to `undefined` and\n * `formatter` is used instead.\n *\n * @type {string}\n * @since 7.0.0\n * @apioption plotOptions.networkgraph.dataLabels.format\n */\n // eslint-disable-next-line valid-jsdoc\n /**\n * Callback JavaScript function to format the data label for a node.\n * Note that if a `format` is defined, the format takes precedence\n * and the formatter is ignored.\n *\n * @since 7.0.0\n */\n formatter: function () {\n return String(this.key ?? '');\n },\n /**\n * The\n * [format string](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting)\n * specifying what to show for _links_ in the networkgraph.\n * (Default: `undefined`)\n *\n * @type {string}\n * @since 7.1.0\n * @apioption plotOptions.networkgraph.dataLabels.linkFormat\n */\n // eslint-disable-next-line valid-jsdoc\n /**\n * Callback to format data labels for _links_ in the sankey diagram.\n * The `linkFormat` option takes precedence over the\n * `linkFormatter`.\n *\n * @since 7.1.0\n */\n linkFormatter: function () {\n return (this.fromNode.name +\n '<br>' +\n this.toNode.name);\n },\n /**\n * Options for a _link_ label text which should follow link\n * connection. Border and background are disabled for a label that\n * follows a path.\n *\n * **Note:** Only SVG-based renderer supports this option. Setting\n * `useHTML` to true will disable this option.\n *\n * @extends plotOptions.networkgraph.dataLabels.textPath\n * @since 7.1.0\n */\n linkTextPath: {\n enabled: true\n },\n textPath: {\n enabled: false\n },\n style: {\n transition: 'opacity 2000ms'\n },\n defer: true,\n animation: {\n defer: 1000\n }\n },\n /**\n * Link style options\n * @private\n */\n link: {\n /**\n * A name for the dash style to use for links.\n *\n * @type {string}\n * @apioption plotOptions.networkgraph.link.dashStyle\n */\n /**\n * Opacity of the link between two nodes.\n *\n * @type {number}\n * @default 1\n * @apioption plotOptions.networkgraph.link.opacity\n */\n /**\n * Color of the link between two nodes.\n */\n color: 'rgba(100, 100, 100, 0.5)',\n /**\n * Width (px) of the link between two nodes.\n */\n width: 1\n },\n /**\n * Flag to determine if nodes are draggable or not.\n * @private\n */\n draggable: true,\n layoutAlgorithm: {\n /**\n * Repulsive force applied on a node. Passed are two arguments:\n * - `d` - which is current distance between two nodes\n * - `k` - which is desired distance between two nodes\n *\n * In `verlet` integration, defaults to:\n * `function (d, k) { return (k - d) / d * (k > d ? 1 : 0) }`\n *\n * @see [layoutAlgorithm.integration](#series.networkgraph.layoutAlgorithm.integration)\n *\n * @sample highcharts/series-networkgraph/forces/\n * Custom forces with Euler integration\n * @sample highcharts/series-networkgraph/cuboids/\n * Custom forces with Verlet integration\n *\n * @type {Function}\n * @default function (d, k) { return k * k / d; }\n * @apioption plotOptions.networkgraph.layoutAlgorithm.repulsiveForce\n */\n /**\n * Attraction force applied on a node which is conected to another\n * node by a link. Passed are two arguments:\n * - `d` - which is current distance between two nodes\n * - `k` - which is desired distance between two nodes\n *\n * In `verlet` integration, defaults to:\n * `function (d, k) { return (k - d) / d; }`\n *\n * @see [layoutAlgorithm.integration](#series.networkgraph.layoutAlgorithm.integration)\n *\n * @sample highcharts/series-networkgraph/forces/\n * Custom forces with Euler integration\n * @sample highcharts/series-networkgraph/cuboids/\n * Custom forces with Verlet integration\n *\n * @type {Function}\n * @default function (d, k) { return k * k / d; }\n * @apioption plotOptions.networkgraph.layoutAlgorithm.attractiveForce\n */\n /**\n * Ideal length (px) of the link between two nodes. When not\n * defined, length is calculated as:\n * `Math.pow(availableWidth * availableHeight / nodesLength, 0.4);`\n *\n * Note: Because of the algorithm specification, length of each link\n * might be not exactly as specified.\n *\n * @sample highcharts/series-networkgraph/styled-links/\n * Numerical values\n *\n * @type {number}\n * @apioption plotOptions.networkgraph.layoutAlgorithm.linkLength\n */\n /**\n * Initial layout algorithm for positioning nodes. Can be one of\n * built-in options (\"circle\", \"random\") or a function where\n * positions should be set on each node (`this.nodes`) as\n * `node.plotX` and `node.plotY`\n *\n * @sample highcharts/series-networkgraph/initial-positions/\n * Initial positions with callback\n *\n * @type {\"circle\"|\"random\"|Function}\n */\n initialPositions: 'circle',\n /**\n * When `initialPositions` are set to 'circle',\n * `initialPositionRadius` is a distance from the center of circle,\n * in which nodes are created.\n *\n * @type {number}\n * @default 1\n * @since 7.1.0\n */\n initialPositionRadius: 1,\n /**\n * Experimental. Enables live simulation of the algorithm\n * implementation. All nodes are animated as the forces applies on\n * them.\n *\n * @sample highcharts/demo/network-graph/\n * Live simulation enabled\n */\n enableSimulation: false,\n /**\n * Barnes-Hut approximation only.\n * Deteremines when distance between cell and node is small enough\n * to calculate forces. Value of `theta` is compared directly with\n * quotient `s / d`, where `s` is the size of the cell, and `d` is\n * distance between center of cell's mass and currently compared\n * node.\n *\n * @see [layoutAlgorithm.approximation](#series.networkgraph.layoutAlgorithm.approximation)\n *\n * @since 7.1.0\n */\n theta: 0.5,\n /**\n * Verlet integration only.\n * Max speed that node can get in one iteration. In terms of\n * simulation, it's a maximum translation (in pixels) that node can\n * move (in both, x and y, dimensions). While `friction` is applied\n * on all nodes, max speed is applied only for nodes that move very\n * fast, for example small or disconnected ones.\n *\n * @see [layoutAlgorithm.integration](#series.networkgraph.layoutAlgorithm.integration)\n * @see [layoutAlgorithm.friction](#series.networkgraph.layoutAlgorithm.friction)\n *\n * @since 7.1.0\n */\n maxSpeed: 10,\n /**\n * Approximation used to calculate repulsive forces affecting nodes.\n * By default, when calculating net force, nodes are compared\n * against each other, which gives O(N^2) complexity. Using\n * Barnes-Hut approximation, we decrease this to O(N log N), but the\n * resulting graph will have different layout. Barnes-Hut\n * approximation divides space into rectangles via quad tree, where\n * forces exerted on nodes are calculated directly for nearby cells,\n * and for all others, cells are treated as a separate node with\n * center of mass.\n *\n * @see [layoutAlgorithm.theta](#series.networkgraph.layoutAlgorithm.theta)\n *\n * @sample highcharts/series-networkgraph/barnes-hut-approximation/\n * A graph with Barnes-Hut approximation\n *\n * @type {string}\n * @validvalue [\"barnes-hut\", \"none\"]\n * @since 7.1.0\n */\n approximation: 'none',\n /**\n * Type of the algorithm used when positioning nodes.\n *\n * @type {string}\n * @validvalue [\"reingold-fruchterman\"]\n */\n type: 'reingold-fruchterman',\n /**\n * Integration type. Available options are `'euler'` and `'verlet'`.\n * Integration determines how forces are applied on particles. In\n * Euler integration, force is applied direct as\n * `newPosition += velocity;`.\n * In Verlet integration, new position is based on a previous\n * position without velocity:\n * `newPosition += previousPosition - newPosition`.\n *\n * Note that different integrations give different results as forces\n * are different.\n *\n * In Highcharts v7.0.x only `'euler'` integration was supported.\n *\n * @sample highcharts/series-networkgraph/integration-comparison/\n * Comparison of Verlet and Euler integrations\n *\n * @type {string}\n * @validvalue [\"euler\", \"verlet\"]\n * @since 7.1.0\n */\n integration: 'euler',\n /**\n * Max number of iterations before algorithm will stop. In general,\n * algorithm should find positions sooner, but when rendering huge\n * number of nodes, it is recommended to increase this value as\n * finding perfect graph positions can require more time.\n */\n maxIterations: 1000,\n /**\n * Gravitational const used in the barycenter force of the\n * algorithm.\n *\n * @sample highcharts/series-networkgraph/forces/\n * Custom forces with Euler integration\n */\n gravitationalConstant: 0.0625,\n /**\n * Friction applied on forces to prevent nodes rushing to fast to\n * the desired positions.\n */\n friction: -0.981\n },\n showInLegend: false\n};\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ const Networkgraph_NetworkgraphSeriesDefaults = (NetworkgraphSeriesDefaults);\n/* *\n *\n * API Options\n *\n * */\n/**\n * Fires after the simulation is ended and the layout is stable.\n *\n * @type {Highcharts.NetworkgraphAfterSimulationCallbackFunction}\n * @product highcharts\n * @apioption series.networkgraph.events.afterSimulation\n */\n/**\n * A `networkgraph` series. If the [type](#series.networkgraph.type) option is\n * not specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends series,plotOptions.networkgraph\n * @excluding boostThreshold, animation, animationLimit, connectEnds,\n * connectNulls, cropThreshold, dragDrop, getExtremesFromAll, label,\n * linecap, negativeColor, pointInterval, pointIntervalUnit,\n * pointPlacement, pointStart, softThreshold, stack, stacking,\n * step, threshold, xAxis, yAxis, zoneAxis, dataSorting,\n * boostBlending\n * @product highcharts\n * @requires modules/networkgraph\n * @apioption series.networkgraph\n */\n/**\n * An array of data points for the series. For the `networkgraph` series type,\n * points can be given in the following way:\n *\n * An array of objects with named values. The following snippet shows only a\n * few settings, see the complete options set below. If the total number of\n * data points exceeds the series'\n * [turboThreshold](#series.area.turboThreshold), this option is not available.\n *\n * ```js\n * data: [{\n * from: 'Category1',\n * to: 'Category2'\n * }, {\n * from: 'Category1',\n * to: 'Category3'\n * }]\n * ```\n *\n * @type {Array<Object|Array|number>}\n * @extends series.line.data\n * @excluding drilldown,marker,x,y,dragDrop\n * @sample {highcharts} highcharts/chart/reflow-true/\n * Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n * Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n * Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n * Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n * Config objects\n * @product highcharts\n * @apioption series.networkgraph.data\n */\n/**\n * @type {Highcharts.SeriesNetworkgraphDataLabelsOptionsObject|Array<Highcharts.SeriesNetworkgraphDataLabelsOptionsObject>}\n * @product highcharts\n * @apioption series.networkgraph.data.dataLabels\n */\n/**\n * The node that the link runs from.\n *\n * @type {string}\n * @product highcharts\n * @apioption series.networkgraph.data.from\n */\n/**\n * The node that the link runs to.\n *\n * @type {string}\n * @product highcharts\n * @apioption series.networkgraph.data.to\n */\n/**\n * A collection of options for the individual nodes. The nodes in a\n * networkgraph diagram are auto-generated instances of `Highcharts.Point`,\n * but options can be applied here and linked by the `id`.\n *\n * @sample highcharts/series-networkgraph/data-options/\n * Networkgraph diagram with node options\n *\n * @type {Array<*>}\n * @product highcharts\n * @apioption series.networkgraph.nodes\n */\n/**\n * The id of the auto-generated node, referring to the `from` or `to` setting of\n * the link.\n *\n * @type {string}\n * @product highcharts\n * @apioption series.networkgraph.nodes.id\n */\n/**\n * The color of the auto generated node.\n *\n * @type {Highcharts.ColorString}\n * @product highcharts\n * @apioption series.networkgraph.nodes.color\n */\n/**\n * The color index of the auto generated node, especially for use in styled\n * mode.\n *\n * @type {number}\n * @product highcharts\n * @apioption series.networkgraph.nodes.colorIndex\n */\n/**\n * The name to display for the node in data labels and tooltips. Use this when\n * the name is different from the `id`. Where the id must be unique for each\n * node, this is not necessary for the name.\n *\n * @sample highcharts/series-networkgraph/data-options/\n * Networkgraph diagram with node options\n *\n * @type {string}\n * @product highcharts\n * @apioption series.networkgraph.nodes.name\n */\n/**\n * Mass of the node. By default, each node has mass equal to it's marker radius\n * . Mass is used to determine how two connected nodes should affect\n * each other:\n *\n * Attractive force is multiplied by the ratio of two connected\n * nodes; if a big node has weights twice as the small one, then the small one\n * will move towards the big one twice faster than the big one to the small one\n * .\n *\n * @sample highcharts/series-networkgraph/ragdoll/\n * Mass determined by marker.radius\n *\n * @type {number}\n * @product highcharts\n * @apioption series.networkgraph.nodes.mass\n */\n/**\n * Options for the node markers.\n *\n * @extends plotOptions.networkgraph.marker\n * @apioption series.networkgraph.nodes.marker\n */\n/**\n * Individual data label for each node. The options are the same as\n * the ones for [series.networkgraph.dataLabels](#series.networkgraph.dataLabels).\n *\n * @type {Highcharts.SeriesNetworkgraphDataLabelsOptionsObject|Array<Highcharts.SeriesNetworkgraphDataLabelsOptionsObject>}\n *\n * @apioption series.networkgraph.nodes.dataLabels\n */\n''; // Adds doclets above to transpiled file\n\n;// ./code/es-modules/Series/Networkgraph/EulerIntegration.js\n/* *\n *\n * Networkgraph series\n *\n * (c) 2010-2024 Paweł Fus\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n * Functions\n *\n * */\n/**\n * Attractive force.\n *\n * In Euler integration, force is stored in a node, not changing it's\n * position. Later, in `integrate()` forces are applied on nodes.\n *\n * @private\n * @param {Highcharts.Point} link\n * Link that connects two nodes\n * @param {number} force\n * Force calculated in `repulsiveForceFunction`\n * @param {Highcharts.PositionObject} distanceXY\n * Distance between two nodes e.g. `{x, y}`\n * @param {number} distanceR\n */\nfunction attractive(link, force, distanceXY, distanceR) {\n const massFactor = link.getMass(), translatedX = (distanceXY.x / distanceR) * force, translatedY = (distanceXY.y / distanceR) * force;\n if (!link.fromNode.fixedPosition) {\n link.fromNode.dispX -=\n translatedX * massFactor.fromNode / link.fromNode.degree;\n link.fromNode.dispY -=\n translatedY * massFactor.fromNode / link.fromNode.degree;\n }\n if (!link.toNode.fixedPosition) {\n link.toNode.dispX +=\n translatedX * massFactor.toNode / link.toNode.degree;\n link.toNode.dispY +=\n translatedY * massFactor.toNode / link.toNode.degree;\n }\n}\n/**\n * Attractive force function. Can be replaced by API's\n * `layoutAlgorithm.attractiveForce`\n *\n * Other forces that can be used:\n *\n * basic, not recommended:\n * `function (d, k) { return d / k }`\n *\n * @private\n * @param {number} d current distance between two nodes\n * @param {number} k expected distance between two nodes\n * @return {number} force\n */\nfunction attractiveForceFunction(d, k) {\n return d * d / k;\n}\n/**\n * Barycenter force. Calculate and applys barycenter forces on the\n * nodes. Making them closer to the center of their barycenter point.\n *\n * In Euler integration, force is stored in a node, not changing it's\n * position. Later, in `integrate()` forces are applied on nodes.\n *\n * @private\n */\nfunction barycenter() {\n const gravitationalConstant = this.options.gravitationalConstant, xFactor = this.barycenter.xFactor, yFactor = this.barycenter.yFactor;\n this.nodes.forEach(function (node) {\n if (!node.fixedPosition) {\n const degree = node.getDegree(), phi = degree * (1 + degree / 2);\n node.dispX += ((xFactor - node.plotX) *\n gravitationalConstant *\n phi / node.degree);\n node.dispY += ((yFactor - node.plotY) *\n gravitationalConstant *\n phi / node.degree);\n }\n });\n}\n/**\n * Estimate the best possible distance between two nodes, making graph\n * readable.\n * @private\n */\nfunction getK(layout) {\n return Math.pow(layout.box.width * layout.box.height / layout.nodes.length, 0.3);\n}\n/**\n * Integration method.\n *\n * In Euler integration, force were stored in a node, not changing it's\n * position. Now, in the integrator method, we apply changes.\n *\n * Euler:\n *\n * Basic form: `x(n+1) = x(n) + v(n)`\n *\n * With Rengoild-Fruchterman we get:\n * `x(n+1) = x(n) + v(n) / length(v(n)) * min(v(n), temperature(n))`\n * where:\n * - `x(n+1)`: next position\n * - `x(n)`: current position\n * - `v(n)`: velocity (comes from net force)\n * - `temperature(n)`: current temperature\n *\n * Known issues:\n * Oscillations when force vector has the same magnitude but opposite\n * direction in the next step. Potentially solved by decreasing force by\n * `v * (1 / node.degree)`\n *\n * Note:\n * Actually `min(v(n), temperature(n))` replaces simulated annealing.\n *\n * @private\n * @param {Highcharts.NetworkgraphLayout} layout\n * Layout object\n * @param {Highcharts.Point} node\n * Node that should be translated\n */\nfunction integrate(layout, node) {\n node.dispX +=\n node.dispX * layout.options.friction;\n node.dispY +=\n node.dispY * layout.options.friction;\n const distanceR = node.temperature = layout.vectorLength({\n x: node.dispX,\n y: node.dispY\n });\n if (distanceR !== 0) {\n node.plotX += (node.dispX / distanceR *\n Math.min(Math.abs(node.dispX), layout.temperature));\n node.plotY += (node.dispY / distanceR *\n Math.min(Math.abs(node.dispY), layout.temperature));\n }\n}\n/**\n * Repulsive force.\n *\n * @private\n * @param {Highcharts.Point} node\n * Node that should be translated by force.\n * @param {number} force\n * Force calculated in `repulsiveForceFunction`\n * @param {Highcharts.PositionObject} distanceXY\n * Distance between two nodes e.g. `{x, y}`\n */\nfunction repulsive(node, force, distanceXY, distanceR) {\n node.dispX +=\n (distanceXY.x / distanceR) * force / node.degree;\n node.dispY +=\n (distanceXY.y / distanceR) * force / node.degree;\n}\n/**\n * Repulsive force function. Can be replaced by API's\n * `layoutAlgorithm.repulsiveForce`.\n *\n * Other forces that can be used:\n *\n * basic, not recommended:\n * `function (d, k) { return k / d }`\n *\n * standard:\n * `function (d, k) { return k * k / d }`\n *\n * grid-variant:\n * `function (d, k) { return k * k / d * (2 * k - d > 0 ? 1 : 0) }`\n *\n * @private\n * @param {number} d current distance between two nodes\n * @param {number} k expected distance between two nodes\n * @return {number} force\n */\nfunction repulsiveForceFunction(d, k) {\n return k * k / d;\n}\n/* *\n *\n * Default Export\n *\n * */\nconst EulerIntegration = {\n attractive,\n attractiveForceFunction,\n barycenter,\n getK,\n integrate,\n repulsive,\n repulsiveForceFunction\n};\n/* harmony default export */ const Networkgraph_EulerIntegration = (EulerIntegration);\n\n;// ./code/es-modules/Series/Networkgraph/QuadTreeNode.js\n/* *\n *\n * Networkgraph series\n *\n * (c) 2010-2024 Paweł Fus\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n * Class\n *\n * */\n/**\n * The QuadTree node class. Used in Networkgraph chart as a base for Barnes-Hut\n * approximation.\n *\n * @private\n * @class\n * @name Highcharts.QuadTreeNode\n *\n * @param {Highcharts.Dictionary<number>} box\n * Available space for the node\n */\nclass QuadTreeNode {\n /* *\n *\n * Constructor\n *\n * */\n constructor(box) {\n /* *\n *\n * Properties\n *\n * */\n /**\n * Read only. If QuadTreeNode is an external node, Point is stored in\n * `this.body`.\n *\n * @name Highcharts.QuadTreeNode#body\n * @type {boolean|Highcharts.Point}\n */\n this.body = false;\n /**\n * Read only. Internal nodes when created are empty to reserve the\n * space. If Point is added to this QuadTreeNode, QuadTreeNode is no\n * longer empty.\n *\n * @name Highcharts.QuadTreeNode#isEmpty\n * @type {boolean}\n */\n this.isEmpty = false;\n /**\n * Read only. Flag to determine if QuadTreeNode is internal (and has\n * subnodes with mass and central position) or external (bound to\n * Point).\n *\n * @name Highcharts.QuadTreeNode#isInternal\n * @type {boolean}\n */\n this.isInternal = false;\n /**\n * Read only. Array of subnodes. Empty if QuadTreeNode has just one\n * Point. When added another Point to this QuadTreeNode, array is\n * filled with four subnodes.\n *\n * @name Highcharts.QuadTreeNode#nodes\n * @type {Array<Highcharts.QuadTreeNode>}\n */\n this.nodes = [];\n /**\n * Read only. The available space for node.\n *\n * @name Highcharts.QuadTreeNode#box\n * @type {Highcharts.Dictionary<number>}\n */\n this.box = box;\n /**\n * Read only. The minium of width and height values.\n *\n * @name Highcharts.QuadTreeNode#boxSize\n * @type {number}\n */\n this.boxSize = Math.min(box.width, box.height);\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * When inserting another node into the box, that already hove one node,\n * divide the available space into another four quadrants.\n *\n * Indexes of quadrants are:\n * ```\n * ------------- -------------\n * | | | | |\n * | | | 0 | 1 |\n * | | divide() | | |\n * | 1 | -----------> -------------\n * | | | | |\n * | | | 3 | 2 |\n * | | | | |\n * ------------- -------------\n * ```\n */\n divideBox() {\n const halfWidth = this.box.width / 2, halfHeight = this.box.height / 2;\n // Top left\n this.nodes[0] = new QuadTreeNode({\n left: this.box.left,\n top: this.box.top,\n width: halfWidth,\n height: halfHeight\n });\n // Top right\n this.nodes[1] = new QuadTreeNode({\n left: this.box.left + halfWidth,\n top: this.box.top,\n width: halfWidth,\n height: halfHeight\n });\n // Bottom right\n this.nodes[2] = new QuadTreeNode({\n left: this.box.left + halfWidth,\n top: this.box.top + halfHeight,\n width: halfWidth,\n height: halfHeight\n });\n // Bottom left\n this.nodes[3] = new QuadTreeNode({\n left: this.box.left,\n top: this.box.top + halfHeight,\n width: halfWidth,\n height: halfHeight\n });\n }\n /**\n * Determine which of the quadrants should be used when placing node in\n * the QuadTree. Returned index is always in range `< 0 , 3 >`.\n * @private\n */\n getBoxPosition(point) {\n const left = point.plotX < this.box.left + this.box.width / 2, top = point.plotY < this.box.top + this.box.height / 2;\n let index;\n if (left) {\n if (top) {\n // Top left\n index = 0;\n }\n else {\n // Bottom left\n index = 3;\n }\n }\n else {\n if (top) {\n // Top right\n index = 1;\n }\n else {\n // Bottom right\n index = 2;\n }\n }\n return index;\n }\n /**\n * Insert recursively point(node) into the QuadTree. If the given\n * quadrant is already occupied, divide it into smaller quadrants.\n *\n * @param {Highcharts.Point} point\n * Point/node to be inserted\n * @param {number} depth\n * Max depth of the QuadTree\n */\n insert(point, depth) {\n let newQuadTreeNode;\n if (this.isInternal) {\n // Internal node:\n this.nodes[this.getBoxPosition(point)].insert(point, depth - 1);\n }\n else {\n this.isEmpty = false;\n if (!this.body) {\n // First body in a quadrant:\n this.isInternal = false;\n this.body = point;\n }\n else {\n if (depth) {\n // Every other body in a quadrant:\n this.isInternal = true;\n this.divideBox();\n // Reinsert main body only once:\n if (this.body !== true) {\n this.nodes[this.getBoxPosition(this.body)]\n .insert(this.body, depth - 1);\n this.body = true;\n }\n // Add second body:\n this.nodes[this.getBoxPosition(point)]\n .insert(point, depth - 1);\n }\n else {\n // We are below max allowed depth. That means either:\n // - really huge number of points\n // - falling two points into exactly the same position\n // In this case, create another node in the QuadTree.\n //\n // Alternatively we could add some noise to the\n // position, but that could result in different\n // rendered chart in exporting.\n newQuadTreeNode = new QuadTreeNode({\n top: point.plotX || NaN,\n left: point.plotY || NaN,\n // Width/height below 1px\n width: 0.1,\n height: 0.1\n });\n newQuadTreeNode.body = point;\n newQuadTreeNode.isInternal = false;\n this.nodes.push(newQuadTreeNode);\n }\n }\n }\n }\n /**\n * Each quad node requires it's mass and center position. That mass and\n * position is used to imitate real node in the layout by approximation.\n */\n updateMassAndCenter() {\n let mass = 0, plotX = 0, plotY = 0;\n if (this.isInternal) {\n // Calculate weightened mass of the quad node:\n for (const pointMass of this.nodes) {\n if (!pointMass.isEmpty) {\n mass += pointMass.mass;\n plotX += pointMass.plotX * pointMass.mass;\n plotY += pointMass.plotY * pointMass.mass;\n }\n }\n plotX /= mass;\n plotY /= mass;\n }\n else if (this.body) {\n // Just one node, use coordinates directly:\n mass = this.body.mass;\n plotX = this.body.plotX;\n plotY = this.body.plotY;\n }\n // Store details:\n this.mass = mass;\n this.plotX = plotX;\n this.plotY = plotY;\n }\n}\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ const Networkgraph_QuadTreeNode = (QuadTreeNode);\n\n;// ./code/es-modules/Series/Networkgraph/QuadTree.js\n/* *\n *\n * Networkgraph series\n *\n * (c) 2010-2024 Paweł Fus\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n/* *\n *\n * Class\n *\n * */\n/**\n * The QuadTree class. Used in Networkgraph chart as a base for Barnes-Hut\n * approximation.\n *\n * @private\n * @class\n * @name Highcharts.QuadTree\n *\n * @param {number} x\n * Left position of the plotting area\n * @param {number} y\n * Top position of the plotting area\n * @param {number} width\n * Width of the plotting area\n * @param {number} height\n * Height of the plotting area\n */\nclass QuadTree {\n /* *\n *\n * Constructor\n *\n * */\n constructor(x, y, width, height) {\n // Boundary rectangle:\n this.box = {\n left: x,\n top: y,\n width: width,\n height: height\n };\n this.maxDepth = 25;\n this.root = new Networkgraph_QuadTreeNode(this.box);\n this.root.isInternal = true;\n this.root.isRoot = true;\n this.root.divideBox();\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Calculate mass of the each QuadNode in the tree.\n */\n calculateMassAndCenter() {\n this.visitNodeRecursive(null, null, function (node) {\n node.updateMassAndCenter();\n });\n }\n /**\n * Insert nodes into the QuadTree\n *\n * @param {Array<Highcharts.Point>} points\n * Points as nodes\n */\n insertNodes(points) {\n for (const point of points) {\n this.root.insert(point, this.maxDepth);\n }\n }\n /**\n * Depth first treversal (DFS). Using `before` and `after` callbacks,\n * we can get two results: preorder and postorder traversals, reminder:\n *\n * ```\n * (a)\n * / \\\n * (b) (c)\n * / \\\n * (d) (e)\n * ```\n *\n * DFS (preorder): `a -> b -> d -> e -> c`\n *\n * DFS (postorder): `d -> e -> b -> c -> a`\n *\n * @param {Highcharts.QuadTreeNode|null} node\n * QuadTree node\n * @param {Function} [beforeCallback]\n * Function to be called before visiting children nodes.\n * @param {Function} [afterCallback]\n * Function to be called after visiting children nodes.\n */\n visitNodeRecursive(node, beforeCallback, afterCallback) {\n let goFurther;\n if (!node) {\n node = this.root;\n }\n if (node === this.root && beforeCallback) {\n goFurther = beforeCallback(node);\n }\n if (goFurther === false) {\n return;\n }\n for (const qtNode of node.nodes) {\n if (qtNode.isInternal) {\n if (beforeCallback) {\n goFurther = beforeCallback(qtNode);\n }\n if (goFurther === false) {\n continue;\n }\n this.visitNodeRecursive(qtNode, beforeCallback, afterCallback);\n }\n else if (qtNode.body) {\n if (beforeCallback) {\n beforeCallback(qtNode.body);\n }\n }\n if (afterCallback) {\n afterCallback(qtNode);\n }\n }\n if (node === this.root && afterCallback) {\n afterCallback(node);\n }\n }\n}\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ const Networkgraph_QuadTree = (QuadTree);\n\n;// ./code/es-modules/Series/Networkgraph/VerletIntegration.js\n/* *\n *\n * Networkgraph series\n *\n * (c) 2010-2024 Paweł Fus\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n * Functions\n *\n * */\n/**\n * Attractive force.\n *\n * In Verlet integration, force is applied on a node immediately to it's\n * `plotX` and `plotY` position.\n *\n * @private\n * @param {Highcharts.Point} link\n * Link that connects two nodes\n * @param {number} force\n * Force calculated in `repulsiveForceFunction`\n * @param {Highcharts.PositionObject} distanceXY\n * Distance between two nodes e.g. `{x, y}`\n */\nfunction VerletIntegration_attractive(link, force, distanceXY) {\n const massFactor = link.getMass(), translatedX = -distanceXY.x * force * this.diffTemperature, translatedY = -distanceXY.y * force * this.diffTemperature;\n if (!link.fromNode.fixedPosition) {\n link.fromNode.plotX -=\n translatedX * massFactor.fromNode / link.fromNode.degree;\n link.fromNode.plotY -=\n translatedY * massFactor.fromNode / link.fromNode.degree;\n }\n if (!link.toNode.fixedPosition) {\n link.toNode.plotX +=\n translatedX * massFactor.toNode / link.toNode.degree;\n link.toNode.plotY +=\n translatedY * massFactor.toNode / link.toNode.degree;\n }\n}\n/**\n * Attractive force function. Can be replaced by API's\n * `layoutAlgorithm.attractiveForce`\n *\n * @private\n * @param {number} d current distance between two nodes\n * @param {number} k expected distance between two nodes\n * @return {number} force\n */\nfunction VerletIntegration_attractiveForceFunction(d, k) {\n // Used in API:\n return (k - d) / d;\n}\n/**\n * Barycenter force. Calculate and applys barycenter forces on the\n * nodes. Making them closer to the center of their barycenter point.\n *\n * In Verlet integration, force is applied on a node immediately to it's\n * `plotX` and `plotY` position.\n *\n * @private\n */\nfunction VerletIntegration_barycenter() {\n const gravitationalConstant = this.options.gravitationalConstant || 0, xFactor = (this.barycenter.xFactor -\n (this.box.left + this.box.width) / 2) * gravitationalConstant, yFactor = (this.barycenter.yFactor -\n (this.box.top + this.box.height) / 2) * gravitationalConstant;\n this.nodes.forEach(function (node) {\n if (!node.fixedPosition) {\n node.plotX -=\n xFactor / node.mass / node.degree;\n node.plotY -=\n yFactor / node.mass / node.degree;\n }\n });\n}\n/**\n * Estiamte the best possible distance between two nodes, making graph\n * readable.\n * @private\n */\nfunction VerletIntegration_getK(layout) {\n return Math.pow(layout.box.width * layout.box.height / layout.nodes.length, 0.5);\n}\n/**\n * Integration method.\n *\n * In Verlet integration, forces are applied on node immediately to it's\n * `plotX` and `plotY` position.\n *\n * Verlet without velocity:\n *\n * x(n+1) = 2 * x(n) - x(n-1) + A(T) * deltaT ^ 2\n *\n * where:\n * - x(n+1) - new position\n * - x(n) - current position\n * - x(n-1) - previous position\n *\n * Assuming A(t) = 0 (no acceleration) and (deltaT = 1) we get:\n *\n * x(n+1) = x(n) + (x(n) - x(n-1))\n *\n * where:\n * - (x(n) - x(n-1)) - position change\n *\n * TO DO:\n * Consider Verlet with velocity to support additional\n * forces. Or even Time-Corrected Verlet by Jonathan\n * \"lonesock\" Dummer\n *\n * @private\n * @param {Highcharts.NetworkgraphLayout} layout layout object\n * @param {Highcharts.Point} node node that should be translated\n */\nfunction VerletIntegration_integrate(layout, node) {\n const friction = -layout.options.friction, maxSpeed = layout.options.maxSpeed, prevX = node.prevX, prevY = node.prevY, \n // Apply friction:\n frictionX = ((node.plotX + node.dispX -\n prevX) * friction), frictionY = ((node.plotY + node.dispY -\n prevY) * friction), abs = Math.abs, signX = abs(frictionX) / (frictionX || 1), // Need to deal with 0\n signY = abs(frictionY) / (frictionY || 1), \n // Apply max speed:\n diffX = signX * Math.min(maxSpeed, Math.abs(frictionX)), diffY = signY * Math.min(maxSpeed, Math.abs(frictionY));\n // Store for the next iteration:\n node.prevX = node.plotX + node.dispX;\n node.prevY = node.plotY + node.dispY;\n // Update positions:\n node.plotX += diffX;\n node.plotY += diffY;\n node.temperature = layout.vectorLength({\n x: diffX,\n y: diffY\n });\n}\n/**\n * Repulsive force.\n *\n * In Verlet integration, force is applied on a node immediately to it's\n * `plotX` and `plotY` position.\n *\n * @private\n * @param {Highcharts.Point} node\n * Node that should be translated by force.\n * @param {number} force\n * Force calculated in `repulsiveForceFunction`\n * @param {Highcharts.PositionObject} distanceXY\n * Distance between two nodes e.g. `{x, y}`\n */\nfunction VerletIntegration_repulsive(node, force, distanceXY) {\n const factor = force * this.diffTemperature / node.mass / node.degree;\n if (!node.fixedPosition) {\n node.plotX += distanceXY.x * factor;\n node.plotY += distanceXY.y * factor;\n }\n}\n/**\n * Repulsive force function. Can be replaced by API's\n * `layoutAlgorithm.repulsiveForce`\n *\n * @private\n * @param {number} d current distance between two nodes\n * @param {number} k expected distance between two nodes\n * @return {number} force\n */\nfunction VerletIntegration_repulsiveForceFunction(d, k) {\n // Used in API:\n return (k - d) / d * (k > d ? 1 : 0); // Force only for close nodes\n}\n/* *\n *\n * Default Export\n *\n * */\nconst VerletIntegration = {\n attractive: VerletIntegration_attractive,\n attractiveForceFunction: VerletIntegration_attractiveForceFunction,\n barycenter: VerletIntegration_barycenter,\n getK: VerletIntegration_getK,\n integrate: VerletIntegration_integrate,\n repulsive: VerletIntegration_repulsive,\n repulsiveForceFunction: VerletIntegration_repulsiveForceFunction\n};\n/* harmony default export */ const Networkgraph_VerletIntegration = (VerletIntegration);\n\n;// ./code/es-modules/Series/Networkgraph/ReingoldFruchtermanLayout.js\n/* *\n *\n * Networkgraph series\n *\n * (c) 2010-2024 Paweł Fus\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nconst { win } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\n\nconst { clamp, defined: ReingoldFruchtermanLayout_defined, isFunction, fireEvent, pick: ReingoldFruchtermanLayout_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n/* *\n *\n * Class\n *\n * */\n/**\n * Reingold-Fruchterman algorithm from\n * \"Graph Drawing by Force-directed Placement\" paper.\n * @private\n */\nclass ReingoldFruchtermanLayout {\n constructor() {\n /* *\n *\n * Static Functions\n *\n * */\n this.box = {};\n this.currentStep = 0;\n this.initialRendering = true;\n this.links = [];\n this.nodes = [];\n this.series = [];\n this.simulation = false;\n }\n static compose(ChartClass) {\n Series_GraphLayoutComposition.compose(ChartClass);\n Series_GraphLayoutComposition.integrations.euler = Networkgraph_EulerIntegration;\n Series_GraphLayoutComposition.integrations.verlet = Networkgraph_VerletIntegration;\n Series_GraphLayoutComposition.layouts['reingold-fruchterman'] =\n ReingoldFruchtermanLayout;\n }\n init(options) {\n this.options = options;\n this.nodes = [];\n this.links = [];\n this.series = [];\n this.box = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n this.setInitialRendering(true);\n this.integration =\n Series_GraphLayoutComposition.integrations[options.integration];\n this.enableSimulation = options.enableSimulation;\n this.attractiveForce = ReingoldFruchtermanLayout_pick(options.attractiveForce, this.integration.attractiveForceFunction);\n this.repulsiveForce = ReingoldFruchtermanLayout_pick(options.repulsiveForce, this.integration.repulsiveForceFunction);\n this.approximation = options.approximation;\n }\n updateSimulation(enable) {\n this.enableSimulation = ReingoldFruchtermanLayout_pick(enable, this.options.enableSimulation);\n }\n start() {\n const layout = this, series = this.series, options = this.options;\n layout.currentStep = 0;\n layout.forces = series[0] && series[0].forces || [];\n layout.chart = series[0] && series[0].chart;\n if (layout.initialRendering) {\n layout.initPositions();\n // Render elements in initial positions:\n series.forEach(function (s) {\n s.finishedAnimating = true; // #13169\n s.render();\n });\n }\n layout.setK();\n layout.resetSimulation(options);\n if (layout.enableSimulation) {\n layout.step();\n }\n }\n step() {\n const anyLayout = this, allSeries = this.series;\n // Algorithm:\n this.currentStep++;\n if (this.approximation === 'barnes-hut') {\n this.createQuadTree();\n this.quadTree.calculateMassAndCenter();\n }\n for (const forceName of this.forces || []) {\n anyLayout[forceName + 'Forces'](this.temperature);\n }\n // Limit to the plotting area and cool down:\n this.applyLimits();\n // Cool down the system:\n this.temperature = this.coolDown(this.startTemperature, this.diffTemperature, this.currentStep);\n this.prevSystemTemperature = this.systemTemperature;\n this.systemTemperature = this.getSystemTemperature();\n if (this.enableSimulation) {\n for (const series of allSeries) {\n // Chart could be destroyed during the simulation\n if (series.chart) {\n series.render();\n }\n }\n if (this.maxIterations-- &&\n isFinite(this.temperature) &&\n !this.isStable()) {\n if (this.simulation) {\n win.cancelAnimationFrame(this.simulation);\n }\n this.simulation = win.requestAnimationFrame(() => this.step());\n }\n else {\n this.simulation = false;\n this.series.forEach((s) => {\n fireEvent(s, 'afterSimulation');\n });\n }\n }\n }\n stop() {\n if (this.simulation) {\n win.cancelAnimationFrame(this.simulation);\n }\n }\n setArea(x, y, w, h) {\n this.box = {\n left: x,\n top: y,\n width: w,\n height: h\n };\n }\n setK() {\n // Optimal distance between nodes,\n // available space around the node:\n this.k = this.options.linkLength || this.integration.getK(this);\n }\n addElementsToCollection(elements, collection) {\n for (const element of elements) {\n if (collection.indexOf(element) === -1) {\n collection.push(element);\n }\n }\n }\n removeElementFromCollection(element, collection) {\n const index = collection.indexOf(element);\n if (index !== -1) {\n collection.splice(index, 1);\n }\n }\n clear() {\n this.nodes.length = 0;\n this.links.length = 0;\n this.series.length = 0;\n this.resetSimulation();\n }\n resetSimulation() {\n this.forcedStop = false;\n this.systemTemperature = 0;\n this.setMaxIterations();\n this.setTemperature();\n this.setDiffTemperature();\n }\n restartSimulation() {\n if (!this.simulation) {\n // When dragging nodes, we don't need to calculate\n // initial positions and rendering nodes:\n this.setInitialRendering(false);\n // Start new simulation:\n if (!this.enableSimulation) {\n // Run only one iteration to speed things up:\n this.setMaxIterations(1);\n }\n else {\n this.start();\n }\n if (this.chart) {\n this.chart.redraw();\n }\n // Restore defaults:\n this.setInitialRendering(true);\n }\n else {\n // Extend current simulation:\n this.resetSimulation();\n }\n }\n setMaxIterations(maxIterations) {\n this.maxIterations = ReingoldFruchtermanLayout_pick(maxIterations, this.options.maxIterations);\n }\n setTemperature() {\n this.temperature = this.startTemperature =\n Math.sqrt(this.nodes.length);\n }\n setDiffTemperature() {\n this.diffTemperature = this.startTemperature /\n (this.options.maxIterations + 1);\n }\n setInitialRendering(enable) {\n this.initialRendering = enable;\n }\n createQuadTree() {\n this.quadTree = new Networkgraph_QuadTree(this.box.left, this.box.top, this.box.width, this.box.height);\n this.quadTree.insertNodes(this.nodes);\n }\n initPositions() {\n const initialPositions = this.options.initialPositions;\n if (isFunction(initialPositions)) {\n initialPositions.call(this);\n for (const node of this.nodes) {\n if (!ReingoldFruchtermanLayout_defined(node.prevX)) {\n node.prevX = node.plotX;\n }\n if (!ReingoldFruchtermanLayout_defined(node.prevY)) {\n node.prevY = node.plotY;\n }\n node.dispX = 0;\n node.dispY = 0;\n }\n }\n else if (initialPositions === 'circle') {\n this.setCircularPositions();\n }\n else {\n this.setRandomPositions();\n }\n }\n setCircularPositions() {\n const box = this.box, nodes = this.nodes, nodesLength = nodes.length + 1, angle = 2 * Math.PI / nodesLength, rootNodes = nodes.filter(function (node) {\n return node.linksTo.length === 0;\n }), visitedNodes = {}, radius = this.options.initialPositionRadius, addToNodes = (node) => {\n for (const link of node.linksFrom || []) {\n if (!visitedNodes[link.toNode.id]) {\n visitedNodes[link.toNode.id] = true;\n sortedNodes.push(link.toNode);\n addToNodes(link.toNode);\n }\n }\n };\n let sortedNodes = [];\n // Start with identified root nodes an sort the nodes by their\n // hierarchy. In trees, this ensures that branches don't cross\n // eachother.\n for (const rootNode of rootNodes) {\n sortedNodes.push(rootNode);\n addToNodes(rootNode);\n }\n // Cyclic tree, no root node found\n if (!sortedNodes.length) {\n sortedNodes = nodes;\n // Dangling, cyclic trees\n }\n else {\n for (const node of nodes) {\n if (sortedNodes.indexOf(node) === -1) {\n sortedNodes.push(node);\n }\n }\n }\n let node;\n // Initial positions are laid out along a small circle, appearing\n // as a cluster in the middle\n for (let i = 0, iEnd = sortedNodes.length; i < iEnd; ++i) {\n node = sortedNodes[i];\n node.plotX = node.prevX = ReingoldFruchtermanLayout_pick(node.plotX, box.width / 2 + radius * Math.cos(i * angle));\n node.plotY = node.prevY = ReingoldFruchtermanLayout_pick(node.plotY, box.height / 2 + radius * Math.sin(i * angle));\n node.dispX = 0;\n node.dispY = 0;\n }\n }\n setRandomPositions() {\n const box = this.box, nodes = this.nodes, nodesLength = nodes.length + 1, \n /**\n * Return a repeatable, quasi-random number based on an integer\n * input. For the initial positions\n * @private\n */\n unrandom = (n) => {\n let rand = n * n / Math.PI;\n rand = rand - Math.floor(rand);\n return rand;\n };\n let node;\n // Initial positions:\n for (let i = 0, iEnd = nodes.length; i < iEnd; ++i) {\n node = nodes[i];\n node.plotX = node.prevX = ReingoldFruchtermanLayout_pick(node.plotX, box.width * unrandom(i));\n node.plotY = node.prevY = ReingoldFruchtermanLayout_pick(node.plotY, box.height * unrandom(nodesLength + i));\n node.dispX = 0;\n node.dispY = 0;\n }\n }\n force(name, ...args) {\n this.integration[name].apply(this, args);\n }\n barycenterForces() {\n this.getBarycenter();\n this.force('barycenter');\n }\n getBarycenter() {\n let systemMass = 0, cx = 0, cy = 0;\n for (const node of this.nodes) {\n cx += node.plotX * node.mass;\n cy += node.plotY * node.mass;\n systemMass += node.mass;\n }\n this.barycenter = {\n x: cx,\n y: cy,\n xFactor: cx / systemMass,\n yFactor: cy / systemMass\n };\n return this.barycenter;\n }\n barnesHutApproximation(node, quadNode) {\n const distanceXY = this.getDistXY(node, quadNode), distanceR = this.vectorLength(distanceXY);\n let goDeeper, force;\n if (node !== quadNode && distanceR !== 0) {\n if (quadNode.isInternal) {\n // Internal node:\n if (quadNode.boxSize / distanceR <\n this.options.theta &&\n distanceR !== 0) {\n // Treat as an external node:\n force = this.repulsiveForce(distanceR, this.k);\n this.force('repulsive', node, force * quadNode.mass, distanceXY, distanceR);\n goDeeper = false;\n }\n else {\n // Go deeper:\n goDeeper = true;\n }\n }\n else {\n // External node, direct force:\n force = this.repulsiveForce(distanceR, this.k);\n this.force('repulsive', node, force * quadNode.mass, distanceXY, distanceR);\n }\n }\n return goDeeper;\n }\n repulsiveForces() {\n if (this.approximation === 'barnes-hut') {\n for (const node of this.nodes) {\n this.quadTree.visitNodeRecursive(null, (quadNode) => (this.barnesHutApproximation(node, quadNode)));\n }\n }\n else {\n let force, distanceR, distanceXY;\n for (const node of this.nodes) {\n for (const repNode of this.nodes) {\n if (\n // Node cannot repulse itself:\n node !== repNode &&\n // Only close nodes affect each other:\n // layout.getDistR(node, repNode) < 2 * k &&\n // Not dragged:\n !node.fixedPosition) {\n distanceXY = this.getDistXY(node, repNode);\n distanceR = this.vectorLength(distanceXY);\n if (distanceR !== 0) {\n force = this.repulsiveForce(distanceR, this.k);\n this.force('repulsive', node, force * repNode.mass, distanceXY, distanceR);\n }\n }\n }\n }\n }\n }\n attractiveForces() {\n let distanceXY, distanceR, force;\n for (const link of this.links) {\n if (link.fromNode && link.toNode) {\n distanceXY = this.getDistXY(link.fromNode, link.toNode);\n distanceR = this.vectorLength(distanceXY);\n if (distanceR !== 0) {\n force = this.attractiveForce(distanceR, this.k);\n this.force('attractive', link, force, distanceXY, distanceR);\n }\n }\n }\n }\n applyLimits() {\n const nodes = this.nodes;\n for (const node of nodes) {\n if (node.fixedPosition) {\n continue;\n }\n this.integration.integrate(this, node);\n this.applyLimitBox(node, this.box);\n // Reset displacement:\n node.dispX = 0;\n node.dispY = 0;\n }\n }\n /**\n * External box that nodes should fall. When hitting an edge, node\n * should stop or bounce.\n * @private\n */\n applyLimitBox(node, box) {\n const radius = node.radius;\n /*\n TO DO: Consider elastic collision instead of stopping.\n o' means end position when hitting plotting area edge:\n\n - \"inelastic\":\n o\n \\\n ______\n | o'\n | \\\n | \\\n\n - \"elastic\"/\"bounced\":\n o\n \\\n ______\n | ^\n | / \\\n |o' \\\n\n Euler sample:\n if (plotX < 0) {\n plotX = 0;\n dispX *= -1;\n }\n\n if (plotX > box.width) {\n plotX = box.width;\n dispX *= -1;\n }\n\n */\n // Limit X-coordinates:\n node.plotX = clamp(node.plotX, box.left + radius, box.width - radius);\n // Limit Y-coordinates:\n node.plotY = clamp(node.plotY, box.top + radius, box.height - radius);\n }\n /**\n * From \"A comparison of simulated annealing cooling strategies\" by\n * Nourani and Andresen work.\n * @private\n */\n coolDown(temperature, temperatureStep, currentStep) {\n // Logarithmic:\n /*\n return Math.sqrt(this.nodes.length) -\n Math.log(\n currentStep * layout.diffTemperature\n );\n */\n // Exponential:\n /*\n let alpha = 0.1;\n layout.temperature = Math.sqrt(layout.nodes.length) *\n Math.pow(alpha, layout.diffTemperature);\n */\n // Linear:\n return temperature - temperatureStep * currentStep;\n }\n isStable() {\n return Math.abs(this.systemTemperature -\n this.prevSystemTemperature) < 0.00001 || this.temperature <= 0;\n }\n getSystemTemperature() {\n let value = 0;\n for (const node of this.nodes) {\n value += node.temperature;\n }\n return value;\n }\n vectorLength(vector) {\n return Math.sqrt(vector.x * vector.x + vector.y * vector.y);\n }\n getDistR(nodeA, nodeB) {\n const distance = this.getDistXY(nodeA, nodeB);\n return this.vectorLength(distance);\n }\n getDistXY(nodeA, nodeB) {\n const xDist = nodeA.plotX - nodeB.plotX, yDist = nodeA.plotY - nodeB.plotY;\n return {\n x: xDist,\n y: yDist,\n absX: Math.abs(xDist),\n absY: Math.abs(yDist)\n };\n }\n}\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ const Networkgraph_ReingoldFruchtermanLayout = (ReingoldFruchtermanLayout);\n\n;// ./code/es-modules/Series/SimulationSeriesUtilities.js\n/* *\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { merge: SimulationSeriesUtilities_merge, syncTimeout } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { animObject } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/**\n * Create a setTimeout for the first drawDataLabels()\n * based on the dataLabels.animation.defer value\n * for series which have enabled simulation.\n * @private\n */\nfunction initDataLabelsDefer() {\n const dlOptions = this.options.dataLabels;\n // Method drawDataLabels() fires for the first time after\n // dataLabels.animation.defer time unless\n // the dataLabels.animation = false or dataLabels.defer = false\n // or if the simulation is disabled\n if (!dlOptions?.defer ||\n !this.options.layoutAlgorithm?.enableSimulation) {\n this.deferDataLabels = false;\n }\n else {\n syncTimeout(() => {\n this.deferDataLabels = false;\n }, dlOptions ? animObject(dlOptions.animation).defer : 0);\n }\n}\n/**\n * Initialize the SVG group for the DataLabels with correct opacities\n * and correct styles so that the animation for the series that have\n * simulation enabled works fine.\n * @private\n */\nfunction initDataLabels() {\n const series = this, dlOptions = series.options.dataLabels;\n if (!series.dataLabelsGroup) {\n const dataLabelsGroup = this.initDataLabelsGroup();\n // Apply the dataLabels.style not only to the\n // individual dataLabels but also to the entire group\n if (!series.chart.styledMode && dlOptions?.style) {\n dataLabelsGroup.css(dlOptions.style);\n }\n // Initialize the opacity of the group to 0 (start of animation)\n dataLabelsGroup.attr({ opacity: 0 });\n if (series.visible) { // #2597, #3023, #3024\n dataLabelsGroup.show();\n }\n return dataLabelsGroup;\n }\n // Place it on first and subsequent (redraw) calls\n series.dataLabelsGroup.attr(SimulationSeriesUtilities_merge({ opacity: 1 }, this.getPlotBox('data-labels')));\n return series.dataLabelsGroup;\n}\nconst DataLabelsDeferUtils = {\n initDataLabels,\n initDataLabelsDefer\n};\n/* harmony default export */ const SimulationSeriesUtilities = (DataLabelsDeferUtils);\n\n;// ./code/es-modules/Extensions/TextPath.js\n/* *\n *\n * Highcharts module with textPath functionality.\n *\n * (c) 2009-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nconst { deg2rad } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\nconst { addEvent: TextPath_addEvent, merge: TextPath_merge, uniqueKey, defined: TextPath_defined, extend: TextPath_extend } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/**\n * Set a text path for a `text` or `label` element, allowing the text to\n * flow along a path.\n *\n * In order to unset the path for an existing element, call `setTextPath`\n * with `{ enabled: false }` as the second argument.\n *\n * Text path support is not bundled into `highcharts.js`, and requires the\n * `modules/textpath.js` file. However, it is included in the script files of\n * those series types that use it by default\n *\n * @sample highcharts/members/renderer-textpath/ Text path demonstrated\n *\n * @function Highcharts.SVGElement#setTextPath\n *\n * @param {Highcharts.SVGElement|undefined} path\n * Path to follow. If undefined, it allows changing options for the\n * existing path.\n *\n * @param {Highcharts.DataLabelsTextPathOptionsObject} textPathOptions\n * Options.\n *\n * @return {Highcharts.SVGElement} Returns the SVGElement for chaining.\n */\nfunction setTextPath(path, textPathOptions) {\n // Defaults\n textPathOptions = TextPath_merge(true, {\n enabled: true,\n attributes: {\n dy: -5,\n startOffset: '50%',\n textAnchor: 'middle'\n }\n }, textPathOptions);\n const url = this.renderer.url, textWrapper = this.text || this, textPath = textWrapper.textPath, { attributes, enabled } = textPathOptions;\n path = path || (textPath && textPath.path);\n // Remove previously added event\n if (textPath) {\n textPath.undo();\n }\n if (path && enabled) {\n const undo = TextPath_addEvent(textWrapper, 'afterModifyTree', (e) => {\n if (path && enabled) {\n // Set ID for the path\n let textPathId = path.attr('id');\n if (!textPathId) {\n path.attr('id', textPathId = uniqueKey());\n }\n // Set attributes for the <text>\n const textAttribs = {\n // `dx`/`dy` options must by set on <text> (parent), the\n // rest should be set on <textPath>\n x: 0,\n y: 0\n };\n if (TextPath_defined(attributes.dx)) {\n textAttribs.dx = attributes.dx;\n delete attributes.dx;\n }\n if (TextPath_defined(attributes.dy)) {\n textAttribs.dy = attributes.dy;\n delete attributes.dy;\n }\n textWrapper.attr(textAttribs);\n // Handle label properties\n this.attr({ transform: '' });\n if (this.box) {\n this.box = this.box.destroy();\n }\n // Wrap the nodes in a textPath\n const children = e.nodes.slice(0);\n e.nodes.length = 0;\n e.nodes[0] = {\n tagName: 'textPath',\n attributes: TextPath_extend(attributes, {\n 'text-anchor': attributes.textAnchor,\n href: `${url}#${textPathId}`\n }),\n children\n };\n }\n });\n // Set the reference\n textWrapper.textPath = { path, undo };\n }\n else {\n textWrapper.attr({ dx: 0, dy: 0 });\n delete textWrapper.textPath;\n }\n if (this.added) {\n // Rebuild text after added\n textWrapper.textCache = '';\n this.renderer.buildText(textWrapper);\n }\n return this;\n}\n/**\n * Attach a polygon to a bounding box if the element contains a textPath.\n *\n * @function Highcharts.SVGElement#setPolygon\n *\n * @param {any} event\n * An event containing a bounding box object\n *\n * @return {Highcharts.BBoxObject} Returns the bounding box object.\n */\nfunction setPolygon(event) {\n const bBox = event.bBox, tp = this.element?.querySelector('textPath');\n if (tp) {\n const polygon = [], { b, h } = this.renderer.fontMetrics(this.element), descender = h - b, lineCleanerRegex = new RegExp('(<tspan>|' +\n '<tspan(?!\\\\sclass=\"highcharts-br\")[^>]*>|' +\n '<\\\\/tspan>)', 'g'), lines = tp\n .innerHTML\n .replace(lineCleanerRegex, '')\n .split(/<tspan class=\"highcharts-br\"[^>]*>/), numOfLines = lines.length;\n // Calculate top and bottom coordinates for\n // either the start or the end of a single\n // character, and append it to the polygon.\n const appendTopAndBottom = (charIndex, positionOfChar) => {\n const { x, y } = positionOfChar, rotation = (tp.getRotationOfChar(charIndex) - 90) * deg2rad, cosRot = Math.cos(rotation), sinRot = Math.sin(rotation);\n return [\n [\n x - descender * cosRot,\n y - descender * sinRot\n ],\n [\n x + b * cosRot,\n y + b * sinRot\n ]\n ];\n };\n for (let i = 0, lineIndex = 0; lineIndex < numOfLines; lineIndex++) {\n const line = lines[lineIndex], lineLen = line.length;\n for (let lineCharIndex = 0; lineCharIndex < lineLen; lineCharIndex += 5) {\n try {\n const srcCharIndex = (i +\n lineCharIndex +\n lineIndex), [lower, upper] = appendTopAndBottom(srcCharIndex, tp.getStartPositionOfChar(srcCharIndex));\n if (lineCharIndex === 0) {\n polygon.push(upper);\n polygon.push(lower);\n }\n else {\n if (lineIndex === 0) {\n polygon.unshift(upper);\n }\n if (lineIndex === numOfLines - 1) {\n polygon.push(lower);\n }\n }\n }\n catch (e) {\n // Safari fails on getStartPositionOfChar even if the\n // character is within the `textContent.length`\n break;\n }\n }\n i += lineLen - 1;\n try {\n const srcCharIndex = i + lineIndex, charPos = tp.getEndPositionOfChar(srcCharIndex), [lower, upper] = appendTopAndBottom(srcCharIndex, charPos);\n polygon.unshift(upper);\n polygon.unshift(lower);\n }\n catch (e) {\n // Safari fails on getStartPositionOfChar even if the character\n // is within the `textContent.length`\n break;\n }\n }\n // Close it\n if (polygon.length) {\n polygon.push(polygon[0].slice());\n }\n bBox.polygon = polygon;\n }\n return bBox;\n}\n/**\n * Draw text along a textPath for a dataLabel.\n *\n * @function Highcharts.SVGElement#setTextPath\n *\n * @param {any} event\n * An event containing label options\n *\n * @return {void}\n */\nfunction drawTextPath(event) {\n const labelOptions = event.labelOptions, point = event.point, textPathOptions = (labelOptions[point.formatPrefix + 'TextPath'] ||\n labelOptions.textPath);\n if (textPathOptions && !labelOptions.useHTML) {\n this.setTextPath(point.getDataLabelPath?.(this) || point.graphic, textPathOptions);\n if (point.dataLabelPath &&\n !textPathOptions.enabled) {\n // Clean the DOM\n point.dataLabelPath = (point.dataLabelPath.destroy());\n }\n }\n}\nfunction TextPath_compose(SVGElementClass) {\n TextPath_addEvent(SVGElementClass, 'afterGetBBox', setPolygon);\n TextPath_addEvent(SVGElementClass, 'beforeAddingDataLabel', drawTextPath);\n const svgElementProto = SVGElementClass.prototype;\n if (!svgElementProto.setTextPath) {\n svgElementProto.setTextPath = setTextPath;\n }\n}\nconst TextPath = {\n compose: TextPath_compose\n};\n/* harmony default export */ const Extensions_TextPath = (TextPath);\n\n;// ./code/es-modules/Series/Networkgraph/NetworkgraphSeries.js\n/* *\n *\n * Networkgraph series\n *\n * (c) 2010-2024 Paweł Fus\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\n\n\nconst { noop } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\n\n\n\nconst { series: Series, seriesTypes: { column: { prototype: columnProto }, line: { prototype: lineProto } } } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default());\n\nconst { initDataLabels: NetworkgraphSeries_initDataLabels, initDataLabelsDefer: NetworkgraphSeries_initDataLabelsDefer } = SimulationSeriesUtilities;\n\nconst { addEvent: NetworkgraphSeries_addEvent, defined: NetworkgraphSeries_defined, extend: NetworkgraphSeries_extend, merge: NetworkgraphSeries_merge, pick: NetworkgraphSeries_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nExtensions_TextPath.compose((highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_default()));\n/* *\n *\n * Class\n *\n * */\n/**\n * @private\n * @class\n * @name Highcharts.seriesTypes.networkgraph\n *\n * @extends Highcharts.Series\n */\nclass NetworkgraphSeries extends Series {\n constructor() {\n /* *\n *\n * Static Properties\n *\n * */\n super(...arguments);\n this.deferDataLabels = true;\n }\n /* *\n *\n * Static Functions\n *\n * */\n static compose(ChartClass) {\n Series_DragNodesComposition.compose(ChartClass);\n Networkgraph_ReingoldFruchtermanLayout.compose(ChartClass);\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Defer the layout.\n * Each series first registers all nodes and links, then layout\n * calculates all nodes positions and calls `series.render()` in every\n * simulation step.\n *\n * Note:\n * Animation is done through `requestAnimationFrame` directly, without\n * `Highcharts.animate()` use.\n * @private\n */\n deferLayout() {\n const layoutOptions = this.options.layoutAlgorithm, chartOptions = this.chart.options.chart;\n let layout, graphLayoutsStorage = this.chart.graphLayoutsStorage, graphLayoutsLookup = this.chart.graphLayoutsLookup;\n if (!this.visible) {\n return;\n }\n if (!graphLayoutsStorage) {\n this.chart.graphLayoutsStorage = graphLayoutsStorage = {};\n this.chart.graphLayoutsLookup = graphLayoutsLookup = [];\n }\n layout = graphLayoutsStorage[layoutOptions.type];\n if (!layout) {\n layoutOptions.enableSimulation =\n !NetworkgraphSeries_defined(chartOptions.forExport) ?\n layoutOptions.enableSimulation :\n !chartOptions.forExport;\n graphLayoutsStorage[layoutOptions.type] = layout =\n new Series_GraphLayoutComposition.layouts[layoutOptions.type]();\n layout.init(layoutOptions);\n graphLayoutsLookup.splice(layout.index, 0, layout);\n }\n this.layout = layout;\n layout.setArea(0, 0, this.chart.plotWidth, this.chart.plotHeight);\n layout.addElementsToCollection([this], layout.series);\n layout.addElementsToCollection(this.nodes, layout.nodes);\n layout.addElementsToCollection(this.points, layout.links);\n }\n /**\n * @private\n */\n destroy() {\n if (this.layout) {\n this.layout.removeElementFromCollection(this, this.layout.series);\n }\n Series_NodesComposition.destroy.call(this);\n }\n /**\n * Networkgraph has two separate collections of nodes and lines, render\n * dataLabels for both sets:\n * @private\n */\n drawDataLabels() {\n // We defer drawing the dataLabels\n // until dataLabels.animation.defer time passes\n if (this.deferDataLabels) {\n return;\n }\n const dlOptions = this.options.dataLabels;\n let textPath;\n if (dlOptions?.textPath) {\n textPath = dlOptions.textPath;\n }\n // Render node labels:\n Series.prototype.drawDataLabels.call(this, this.nodes);\n // Render link labels:\n if (dlOptions?.linkTextPath) {\n // If linkTextPath is set, render link labels with linkTextPath\n dlOptions.textPath = dlOptions.linkTextPath;\n }\n Series.prototype.drawDataLabels.call(this, this.data);\n // Go back to textPath for nodes\n if (dlOptions?.textPath) {\n dlOptions.textPath = textPath;\n }\n }\n /**\n * Extend generatePoints by adding the nodes, which are Point objects\n * but pushed to the this.nodes array.\n * @private\n */\n generatePoints() {\n let node, i;\n Series_NodesComposition.generatePoints.apply(this, arguments);\n // In networkgraph, it's fine to define standalone nodes, create\n // them:\n if (this.options.nodes) {\n this.options.nodes.forEach(function (nodeOptions) {\n if (!this.nodeLookup[nodeOptions.id]) {\n this.nodeLookup[nodeOptions.id] =\n this.createNode(nodeOptions.id);\n }\n }, this);\n }\n for (i = this.nodes.length - 1; i >= 0; i--) {\n node = this.nodes[i];\n node.degree = node.getDegree();\n node.radius = NetworkgraphSeries_pick(node.marker && node.marker.radius, this.options.marker && this.options.marker.radius, 0);\n node.key = node.name;\n // If node exists, but it's not available in nodeLookup,\n // then it's leftover from previous runs (e.g. setData)\n if (!this.nodeLookup[node.id]) {\n node.remove();\n }\n }\n this.data.forEach(function (link) {\n link.formatPrefix = 'link';\n });\n this.indexateNodes();\n }\n /**\n * In networkgraph, series.points refers to links,\n * but series.nodes refers to actual points.\n * @private\n */\n getPointsCollection() {\n return this.nodes || [];\n }\n /**\n * Set index for each node. Required for proper `node.update()`.\n * Note that links are indexated out of the box in `generatePoints()`.\n *\n * @private\n */\n indexateNodes() {\n this.nodes.forEach(function (node, index) {\n node.index = index;\n });\n }\n /**\n * Extend init with base event, which should stop simulation during\n * update. After data is updated, `chart.render` resumes the simulation.\n * @private\n */\n init(chart, options) {\n super.init(chart, options);\n NetworkgraphSeries_initDataLabelsDefer.call(this);\n NetworkgraphSeries_addEvent(this, 'updatedData', () => {\n if (this.layout) {\n this.layout.stop();\n }\n });\n NetworkgraphSeries_addEvent(this, 'afterUpdate', () => {\n this.nodes.forEach((node) => {\n if (node && node.series) {\n node.resolveColor();\n }\n });\n });\n // If the dataLabels.animation.defer time is longer than\n // the time it takes for the layout to become stable then\n // drawDataLabels would never be called (that's why we force it here)\n NetworkgraphSeries_addEvent(this, 'afterSimulation', function () {\n this.deferDataLabels = false;\n this.drawDataLabels();\n });\n return this;\n }\n /**\n * Extend the default marker attribs by using a non-rounded X position,\n * otherwise the nodes will jump from pixel to pixel which looks a bit\n * jaggy when approaching equilibrium.\n * @private\n */\n markerAttribs(point, state) {\n const attribs = Series.prototype.markerAttribs.call(this, point, state);\n // Series.render() is called before initial positions are set:\n if (!NetworkgraphSeries_defined(point.plotY)) {\n attribs.y = 0;\n }\n attribs.x = (point.plotX || 0) - (attribs.width || 0) / 2;\n return attribs;\n }\n /**\n * Return the presentational attributes.\n * @private\n */\n pointAttribs(point, state) {\n // By default, only `selected` state is passed on\n const pointState = state || point && point.state || 'normal', stateOptions = this.options.states[pointState];\n let attribs = Series.prototype.pointAttribs.call(this, point, pointState);\n if (point && !point.isNode) {\n attribs = point.getLinkAttributes();\n // For link, get prefixed names:\n if (stateOptions) {\n attribs = {\n // TO DO: API?\n stroke: stateOptions.linkColor || attribs.stroke,\n dashstyle: (stateOptions.linkDashStyle || attribs.dashstyle),\n opacity: NetworkgraphSeries_pick(stateOptions.linkOpacity, attribs.opacity),\n 'stroke-width': stateOptions.linkColor ||\n attribs['stroke-width']\n };\n }\n }\n return attribs;\n }\n /**\n * Extend the render function to also render this.nodes together with\n * the points.\n * @private\n */\n render() {\n const series = this, points = series.points, hoverPoint = series.chart.hoverPoint, dataLabels = [];\n // Render markers:\n series.points = series.nodes;\n lineProto.render.call(this);\n series.points = points;\n points.forEach(function (point) {\n if (point.fromNode && point.toNode) {\n point.renderLink();\n point.redrawLink();\n }\n });\n if (hoverPoint && hoverPoint.series === series) {\n series.redrawHalo(hoverPoint);\n }\n if (series.chart.hasRendered &&\n !series.options.dataLabels.allowOverlap) {\n series.nodes.concat(series.points).forEach(function (node) {\n if (node.dataLabel) {\n dataLabels.push(node.dataLabel);\n }\n });\n series.chart.hideOverlappingLabels(dataLabels);\n }\n }\n /**\n * When state should be passed down to all points, concat nodes and\n * links and apply this state to all of them.\n * @private\n */\n setState(state, inherit) {\n if (inherit) {\n this.points = this.nodes.concat(this.data);\n Series.prototype.setState.apply(this, arguments);\n this.points = this.data;\n }\n else {\n Series.prototype.setState.apply(this, arguments);\n }\n // If simulation is done, re-render points with new states:\n if (!this.layout.simulation && !state) {\n this.render();\n }\n }\n /**\n * Run pre-translation and register nodes&links to the deffered layout.\n * @private\n */\n translate() {\n this.generatePoints();\n this.deferLayout();\n this.nodes.forEach(function (node) {\n // Draw the links from this node\n node.isInside = true;\n node.linksFrom.forEach(function (point) {\n point.shapeType = 'path';\n // Pass test in drawPoints\n point.y = 1;\n });\n });\n }\n}\nNetworkgraphSeries.defaultOptions = NetworkgraphSeries_merge(Series.defaultOptions, Networkgraph_NetworkgraphSeriesDefaults);\nNetworkgraphSeries_extend(NetworkgraphSeries.prototype, {\n pointClass: Networkgraph_NetworkgraphPoint,\n animate: void 0, // Animation is run in `series.simulation`\n directTouch: true,\n drawGraph: void 0,\n forces: ['barycenter', 'repulsive', 'attractive'],\n hasDraggableNodes: true,\n isCartesian: false,\n noSharedTooltip: true,\n pointArrayMap: ['from', 'to'],\n requireSorting: false,\n trackerGroups: ['group', 'markerGroup', 'dataLabelsGroup'],\n initDataLabels: NetworkgraphSeries_initDataLabels,\n buildKDTree: noop,\n createNode: Series_NodesComposition.createNode,\n drawTracker: columnProto.drawTracker,\n onMouseDown: Series_DragNodesComposition.onMouseDown,\n onMouseMove: Series_DragNodesComposition.onMouseMove,\n onMouseUp: Series_DragNodesComposition.onMouseUp,\n redrawHalo: Series_DragNodesComposition.redrawHalo\n});\nhighcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default().registerSeriesType('networkgraph', NetworkgraphSeries);\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ const Networkgraph_NetworkgraphSeries = (NetworkgraphSeries);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Callback that fires after the end of Networkgraph series simulation\n * when the layout is stable.\n *\n * @callback Highcharts.NetworkgraphAfterSimulationCallbackFunction\n *\n * @param {Highcharts.Series} this\n * The series where the event occurred.\n *\n * @param {global.Event} event\n * The event that occurred.\n */\n''; // Detach doclets above\n\n;// ./code/es-modules/masters/modules/networkgraph.src.js\n\n\n\n\nconst G = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\nNetworkgraph_NetworkgraphSeries.compose(G.Chart);\n/* harmony default export */ const networkgraph_src = ((highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()));\n\n__webpack_exports__ = __webpack_exports__[\"default\"];\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});"],"names":["root","factory","exports","module","define","amd","amd1","window","__WEBPACK_EXTERNAL_MODULE__563__","__WEBPACK_EXTERNAL_MODULE__28__","__WEBPACK_EXTERNAL_MODULE__512__","NodesComposition","__webpack_modules__","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","n","getter","__esModule","d","a","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","__webpack_exports__","networkgraph_src","highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_","highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default","highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_","highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_default","composed","addEvent","pushUnique","onChartLoad","mousedownUnbinder","mousemoveUnbinder","mouseupUnbinder","chart","container","event","point","hoverPoint","series","hasDraggableNodes","options","draggable","onMouseDown","e","onMouseMove","ownerDocument","onMouseUp","Series_DragNodesComposition","compose","ChartClass","normalizedEvent","pointer","normalize","fixedPosition","chartX","chartY","plotX","plotY","inDragMode","newPlotX","newPlotY","diffX","diffY","graphLayoutsLookup","Math","abs","isInsidePlot","hasDragged","redrawHalo","forEach","layout","restartSimulation","enableSimulation","start","redraw","fixedDraggable","halo","attr","haloPath","states","hover","size","setAnimation","GraphLayoutComposition_composed","GraphLayoutComposition_addEvent","GraphLayoutComposition_pushUnique","onChartAfterPrint","updateSimulation","onChartBeforePrint","onChartPredraw","stop","onChartRender","systemsStable","afterRender","layoutStep","maxIterations","isFinite","temperature","isStable","beforeStep","step","render","Series_GraphLayoutComposition","integrations","layouts","highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_","highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default","seriesProto","pointClass","pointProto","defined","extend","find","merge","pick","destroy","data","concat","points","nodes","apply","arguments","setData","node","length","setNodeState","state","args","others","isNode","linksTo","linksFrom","fromNode","toNode","linkOrNode","setState","graphic","updateNode","animation","runEvent","dataLength","linkConfig","index","update","nodeIndex","reduce","prevIndex","id","nodeConfig","push","PointClass","SeriesClass","createNode","findById","newNode","className","y","getSum","sumTo","sumFrom","link","weight","max","offset","coll","i","hasShape","outgoing","formatPrefix","name","mass","marker","radius","generatePoints","nodeLookup","colorCounter","level","from","styledMode","colorIndex","color","to","Series_NodesComposition","NetworkgraphPoint_seriesProto","Point","NetworkgraphPoint_addEvent","css","NetworkgraphPoint_defined","NetworkgraphPoint_extend","NetworkgraphPoint_pick","NetworkgraphPoint","destroyElements","removeElementFromCollection","getDegree","deg","getLinkAttributes","linkOptions","pointOptions","width","stroke","dashstyle","dashStyle","opacity","getLinkPath","left","right","getMass","m1","m2","sum","constructor","x","cursor","isValid","redrawLink","attribs","path","shapeArgs","pointAttribs","dataLabels","label","animate","end","remove","nodesOptions","linkFromTo","indexOf","splice","removePoint","slice","isDirty","isDirtyData","renderLink","renderer","addClass","getClassName","add","group","Networkgraph_EulerIntegration","attractive","force","distanceXY","distanceR","massFactor","translatedX","translatedY","dispX","degree","dispY","attractiveForceFunction","k","barycenter","gravitationalConstant","xFactor","yFactor","phi","getK","pow","box","height","integrate","friction","vectorLength","min","repulsive","repulsiveForceFunction","QuadTreeNode","body","isEmpty","isInternal","boxSize","divideBox","halfWidth","halfHeight","top","getBoxPosition","insert","depth","newQuadTreeNode","NaN","updateMassAndCenter","pointMass","Networkgraph_QuadTree","maxDepth","isRoot","calculateMassAndCenter","visitNodeRecursive","insertNodes","beforeCallback","afterCallback","goFurther","qtNode","Networkgraph_VerletIntegration","diffTemperature","maxSpeed","prevX","prevY","frictionX","frictionY","signX","signY","factor","win","clamp","ReingoldFruchtermanLayout_defined","isFunction","fireEvent","ReingoldFruchtermanLayout_pick","ReingoldFruchtermanLayout","currentStep","initialRendering","links","simulation","euler","verlet","init","setInitialRendering","integration","attractiveForce","repulsiveForce","approximation","enable","forces","initPositions","s","finishedAnimating","setK","resetSimulation","allSeries","forceName","createQuadTree","quadTree","anyLayout","applyLimits","coolDown","startTemperature","prevSystemTemperature","systemTemperature","getSystemTemperature","cancelAnimationFrame","requestAnimationFrame","setArea","w","h","linkLength","addElementsToCollection","elements","collection","element","clear","forcedStop","setMaxIterations","setTemperature","setDiffTemperature","sqrt","initialPositions","setCircularPositions","setRandomPositions","angle","PI","rootNodes","filter","visitedNodes","initialPositionRadius","addToNodes","sortedNodes","rootNode","iEnd","cos","sin","nodesLength","unrandom","rand","floor","barycenterForces","getBarycenter","systemMass","cx","cy","barnesHutApproximation","quadNode","goDeeper","getDistXY","theta","repulsiveForces","repNode","attractiveForces","applyLimitBox","temperatureStep","value","vector","getDistR","nodeA","nodeB","distance","xDist","yDist","absX","absY","SimulationSeriesUtilities_merge","syncTimeout","animObject","deg2rad","TextPath_addEvent","TextPath_merge","uniqueKey","TextPath_defined","TextPath_extend","setTextPath","textPathOptions","enabled","attributes","dy","startOffset","textAnchor","url","textWrapper","text","textPath","undo","textPathId","textAttribs","dx","transform","children","tagName","href","added","textCache","buildText","setPolygon","bBox","tp","querySelector","polygon","b","fontMetrics","descender","lineCleanerRegex","RegExp","lines","innerHTML","replace","split","numOfLines","appendTopAndBottom","charIndex","positionOfChar","rotation","getRotationOfChar","cosRot","sinRot","lineIndex","lineLen","line","lineCharIndex","srcCharIndex","lower","upper","getStartPositionOfChar","unshift","charPos","getEndPositionOfChar","drawTextPath","labelOptions","useHTML","getDataLabelPath","dataLabelPath","noop","Series","seriesTypes","column","columnProto","lineProto","initDataLabels","NetworkgraphSeries_initDataLabels","initDataLabelsDefer","NetworkgraphSeries_initDataLabelsDefer","dlOptions","dataLabelsGroup","initDataLabelsGroup","style","visible","show","getPlotBox","defer","layoutAlgorithm","deferDataLabels","NetworkgraphSeries_addEvent","NetworkgraphSeries_defined","NetworkgraphSeries_extend","NetworkgraphSeries_merge","NetworkgraphSeries_pick","Extensions_TextPath","SVGElementClass","svgElementProto","NetworkgraphSeries","Networkgraph_ReingoldFruchtermanLayout","deferLayout","layoutOptions","chartOptions","graphLayoutsStorage","type","forExport","plotWidth","plotHeight","drawDataLabels","linkTextPath","nodeOptions","indexateNodes","getPointsCollection","resolveColor","markerAttribs","pointState","stateOptions","linkColor","linkDashStyle","linkOpacity","hasRendered","allowOverlap","dataLabel","hideOverlappingLabels","inherit","translate","isInside","shapeType","defaultOptions","stickyTracking","inactiveOtherPoints","inactive","duration","formatter","String","linkFormatter","transition","showInLegend","directTouch","drawGraph","isCartesian","noSharedTooltip","pointArrayMap","requireSorting","trackerGroups","buildKDTree","drawTracker","registerSeriesType","G","Networkgraph_NetworkgraphSeries","Chart"],"mappings":"CAWA,AAXA;;;;;;;;;;CAUC,EACA,SAA0CA,CAAI,CAAEC,CAAO,EACpD,AAAmB,UAAnB,OAAOC,SAAwB,AAAkB,UAAlB,OAAOC,OACxCA,OAAOD,OAAO,CAAGD,EAAQD,EAAK,WAAc,CAAEA,EAAK,WAAc,CAAC,UAAa,CAAEA,EAAK,WAAc,CAAC,cAAiB,EAC/G,AAAkB,YAAlB,OAAOI,QAAyBA,OAAOC,GAAG,CACjDD,OAAO,kCAAmC,CAAC,wBAAwB,CAAE,SAAUE,CAAI,EAAG,OAAOL,EAAQK,EAAKA,EAAK,UAAa,CAACA,EAAK,cAAiB,CAAE,GAC9I,AAAmB,UAAnB,OAAOJ,QACdA,OAAO,CAAC,kCAAkC,CAAGD,EAAQD,EAAK,WAAc,CAAEA,EAAK,WAAc,CAAC,UAAa,CAAEA,EAAK,WAAc,CAAC,cAAiB,EAElJA,EAAK,UAAa,CAAGC,EAAQD,EAAK,UAAa,CAAEA,EAAK,UAAa,CAAC,UAAa,CAAEA,EAAK,UAAa,CAAC,cAAiB,CACzH,EAAG,AAAkB,aAAlB,OAAOO,OAAyB,IAAI,CAAGA,OAAQ,CAACC,EAAkCC,EAAiCC,IACtG,AAAC,CAAA,KACP,aACA,IAsZNC,EAtZUC,EAAuB,CAE/B,GACC,AAACT,IAERA,EAAOD,OAAO,CAAGO,CAEX,EAEA,IACC,AAACN,IAERA,EAAOD,OAAO,CAAGQ,CAEX,EAEA,IACC,AAACP,IAERA,EAAOD,OAAO,CAAGM,CAEX,CAEI,EAGIK,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,CAAQ,EAEpC,IAAIC,EAAeH,CAAwB,CAACE,EAAS,CACrD,GAAIC,AAAiBC,KAAAA,IAAjBD,EACH,OAAOA,EAAad,OAAO,CAG5B,IAAIC,EAASU,CAAwB,CAACE,EAAS,CAAG,CAGjDb,QAAS,CAAC,CACX,EAMA,OAHAU,CAAmB,CAACG,EAAS,CAACZ,EAAQA,EAAOD,OAAO,CAAEY,GAG/CX,EAAOD,OAAO,AACtB,CAMCY,EAAoBI,CAAC,CAAG,AAACf,IACxB,IAAIgB,EAAShB,GAAUA,EAAOiB,UAAU,CACvC,IAAOjB,EAAO,OAAU,CACxB,IAAOA,EAER,OADAW,EAAoBO,CAAC,CAACF,EAAQ,CAAEG,EAAGH,CAAO,GACnCA,CACR,EAMAL,EAAoBO,CAAC,CAAG,CAACnB,EAASqB,KACjC,IAAI,IAAIC,KAAOD,EACXT,EAAoBW,CAAC,CAACF,EAAYC,IAAQ,CAACV,EAAoBW,CAAC,CAACvB,EAASsB,IAC5EE,OAAOC,cAAc,CAACzB,EAASsB,EAAK,CAAEI,WAAY,CAAA,EAAMC,IAAKN,CAAU,CAACC,EAAI,AAAC,EAGhF,EAKAV,EAAoBW,CAAC,CAAG,CAACK,EAAKC,IAAUL,OAAOM,SAAS,CAACC,cAAc,CAACC,IAAI,CAACJ,EAAKC,GAI7F,IAAII,EAAsB,CAAC,EAG3BrB,EAAoBO,CAAC,CAACc,EAAqB,CACzC,QAAW,IAAqBC,EAClC,GAGA,IAAIC,EAAuEvB,EAAoB,KAC3FwB,EAA2FxB,EAAoBI,CAAC,CAACmB,GAEjHE,EAAmHzB,EAAoB,IACvI0B,EAAuI1B,EAAoBI,CAAC,CAACqB,GAejK,GAAM,CAAEE,SAAAA,CAAQ,CAAE,CAAIH,IAEhB,CAAEI,SAAAA,CAAQ,CAAEC,WAAAA,CAAU,CAAE,CAAIL,IAkBlC,SAASM,QAEDC,EAAmBC,EAAmBC,EAD1C,IAAMC,EAAQ,IAAI,AAEdA,CAAAA,EAAMC,SAAS,EACfJ,CAAAA,EAAoBH,EAASM,EAAMC,SAAS,CAAE,YAAa,AAACC,IACxD,IAAMC,EAAQH,EAAMI,UAAU,CAC1BD,GACAA,EAAME,MAAM,EACZF,EAAME,MAAM,CAACC,iBAAiB,EAC9BH,EAAME,MAAM,CAACE,OAAO,CAACC,SAAS,GAC9BL,EAAME,MAAM,CAACI,WAAW,CAACN,EAAOD,GAChCJ,EAAoBJ,EAASM,EAAMC,SAAS,CAAE,YAAa,AAACS,GAAOP,GAC/DA,EAAME,MAAM,EACZF,EAAME,MAAM,CAACM,WAAW,CAACR,EAAOO,IACpCX,EAAkBL,EAASM,EAAMC,SAAS,CAACW,aAAa,CAAE,UAAW,AAACF,IAClEZ,IACAC,IACOI,GACHA,EAAME,MAAM,EACZF,EAAME,MAAM,CAACQ,SAAS,CAACV,EAAOO,KAG9C,EAAC,EAELhB,EAASM,EAAO,UAAW,WACvBH,GACJ,EACJ,CAmG6B,IAAMiB,EAPN,CACzBC,QAjIJ,SAAiBC,CAAU,EACnBrB,EAAWF,EAAU,cACrBC,EAASsB,EAAY,OAAQpB,EAErC,EA8HIa,YApFJ,SAAqBN,CAAK,CAAED,CAAK,EAC7B,IAAMe,EAAkB,IAAI,CAACjB,KAAK,CAACkB,OAAO,EAAEC,UAAUjB,IAAUA,CAChEC,CAAAA,EAAMiB,aAAa,CAAG,CAClBC,OAAQJ,EAAgBI,MAAM,CAC9BC,OAAQL,EAAgBK,MAAM,CAC9BC,MAAOpB,EAAMoB,KAAK,CAClBC,MAAOrB,EAAMqB,KAAK,AACtB,EACArB,EAAMsB,UAAU,CAAG,CAAA,CACvB,EA4EId,YAjEJ,SAAqBR,CAAK,CAAED,CAAK,EAC7B,GAAIC,EAAMiB,aAAa,EAAIjB,EAAMsB,UAAU,CAAE,KAErCC,EAAUC,EADd,IAAqB3B,EAAQK,AAAd,IAAI,CAAiBL,KAAK,CAAEiB,EAAkBjB,EAAMkB,OAAO,EAAEC,UAAUjB,IAAUA,EAAO0B,EAAQzB,EAAMiB,aAAa,CAACC,MAAM,CAAGJ,EAAgBI,MAAM,CAAEQ,EAAQ1B,EAAMiB,aAAa,CAACE,MAAM,CAAGL,EAAgBK,MAAM,CAAEQ,EAAqB9B,EAAM8B,kBAAkB,CAG1QC,CAAAA,KAAKC,GAAG,CAACJ,GAAS,GAAKG,KAAKC,GAAG,CAACH,GAAS,CAAA,IACzCH,EAAWvB,EAAMiB,aAAa,CAACG,KAAK,CAAGK,EACvCD,EAAWxB,EAAMiB,aAAa,CAACI,KAAK,CAAGK,EACnC7B,EAAMiC,YAAY,CAACP,EAAUC,KAC7BxB,EAAMoB,KAAK,CAAGG,EACdvB,EAAMqB,KAAK,CAAGG,EACdxB,EAAM+B,UAAU,CAAG,CAAA,EACnB,IAAI,CAACC,UAAU,CAAChC,GAChB2B,EAAmBM,OAAO,CAAC,AAACC,IACxBA,EAAOC,iBAAiB,EAC5B,IAGZ,CACJ,EA+CIzB,UAvCJ,SAAmBV,CAAK,EAChBA,EAAMiB,aAAa,GACfjB,EAAM+B,UAAU,GACZ,IAAI,CAACG,MAAM,CAACE,gBAAgB,CAC5B,IAAI,CAACF,MAAM,CAACG,KAAK,GAGjB,IAAI,CAACxC,KAAK,CAACyC,MAAM,IAGzBtC,EAAMsB,UAAU,CAAGtB,EAAM+B,UAAU,CAAG,CAAA,EACjC,IAAI,CAAC3B,OAAO,CAACmC,cAAc,EAC5B,OAAOvC,EAAMiB,aAAa,CAGtC,EAyBIe,WAjBJ,SAAoBhC,CAAK,EACjBA,GAAS,IAAI,CAACwC,IAAI,EAClB,IAAI,CAACA,IAAI,CAACC,IAAI,CAAC,CACXvE,EAAG8B,EAAM0C,QAAQ,CAAC,IAAI,CAACtC,OAAO,CAACuC,MAAM,CAACC,KAAK,CAACJ,IAAI,CAACK,IAAI,CACzD,EAER,CAYA,EAiBM,CAAEC,aAAAA,CAAY,CAAE,CAAI3D,IAEpB,CAAEG,SAAUyD,CAA+B,CAAE,CAAI5D,IAEjD,CAAEI,SAAUyD,CAA+B,CAAExD,WAAYyD,CAAiC,CAAE,CAAI9D,IA4BtG,SAAS+D,IACD,IAAI,CAACvB,kBAAkB,GACvB,IAAI,CAACA,kBAAkB,CAACM,OAAO,CAAC,AAACC,IAE7BA,EAAOiB,gBAAgB,EAC3B,GACA,IAAI,CAACb,MAAM,GAEnB,CAKA,SAASc,IACD,IAAI,CAACzB,kBAAkB,GACvB,IAAI,CAACA,kBAAkB,CAACM,OAAO,CAAC,AAACC,IAC7BA,EAAOiB,gBAAgB,CAAC,CAAA,EAC5B,GACA,IAAI,CAACb,MAAM,GAEnB,CAKA,SAASe,IACD,IAAI,CAAC1B,kBAAkB,EACvB,IAAI,CAACA,kBAAkB,CAACM,OAAO,CAAC,AAACC,IAC7BA,EAAOoB,IAAI,EACf,EAER,CAIA,SAASC,IACL,IAAIC,EAAeC,EAAc,CAAA,EAC3BC,EAAa,AAACxB,IACZA,EAAOyB,aAAa,IACpBC,SAAS1B,EAAO2B,WAAW,GAC3B,CAAC3B,EAAO4B,QAAQ,IAChB,CAAC5B,EAAOE,gBAAgB,GAMpBF,EAAO6B,UAAU,EACjB7B,EAAO6B,UAAU,GAErB7B,EAAO8B,IAAI,GACXR,EAAgB,CAAA,EAChBC,EAAc,CAAA,EAEtB,EACA,GAAI,IAAI,CAAC9B,kBAAkB,CAAE,CAMzB,IALAmB,EAAa,CAAA,EAAO,IAAI,EAExB,IAAI,CAACnB,kBAAkB,CAACM,OAAO,CAAC,AAACC,GAAWA,EAAOG,KAAK,IAGjD,CAACmB,GACJA,EAAgB,CAAA,EAChB,IAAI,CAAC7B,kBAAkB,CAACM,OAAO,CAACyB,GAEhCD,GACA,IAAI,CAACvD,MAAM,CAAC+B,OAAO,CAAC,AAAC/B,IACbA,GAAUA,EAAOgC,MAAM,EACvBhC,EAAO+D,MAAM,EAErB,EAER,CACJ,CAW6B,IAAMC,EALJ,CAC3BtD,QA5FJ,SAAwCC,CAAU,EAC1CoC,EAAkCF,EAAiC,iBACnEC,EAAgCnC,EAAY,aAAcqC,GAC1DF,EAAgCnC,EAAY,cAAeuC,GAC3DJ,EAAgCnC,EAAY,UAAWwC,GACvDL,EAAgCnC,EAAY,SAAU0C,GAE9D,EAsFIY,aAvGiB,CAAC,EAwGlBC,QAvGY,CAAC,CAwGjB,EAIA,IAAIC,EAAmI1G,EAAoB,KACvJ2G,EAAuJ3G,EAAoBI,CAAC,CAACsG,GASjL,GAAM,CAAEnE,OAAQ,CAAErB,UAAW0F,CAAW,CAAE1F,UAAW,CAAE2F,WAAY,CAAE3F,UAAW4F,CAAU,CAAE,CAAE,CAAE,CAAE,CAAIH,IAEhG,CAAEI,QAAAA,CAAO,CAAEC,OAAAA,CAAM,CAAEC,KAAAA,CAAI,CAAEC,MAAAA,CAAK,CAAEC,KAAAA,CAAI,CAAE,CAAI3F,KAOhD,AAAC,SAAU3B,CAAgB,EAsGvB,SAASuH,IAIL,OAFA,IAAI,CAACC,IAAI,CAAG,EAAE,CACTC,MAAM,CAAC,IAAI,CAACC,MAAM,EAAI,EAAE,CAAE,IAAI,CAACC,KAAK,EAClCZ,EAAYQ,OAAO,CAACK,KAAK,CAAC,IAAI,CAAEC,UAC3C,CAsDA,SAASC,IACD,IAAI,CAACH,KAAK,GACV,IAAI,CAACA,KAAK,CAAClD,OAAO,CAAC,AAACsD,IAChBA,EAAKR,OAAO,EAChB,GACA,IAAI,CAACI,KAAK,CAACK,MAAM,CAAG,GAExBjB,EAAYe,OAAO,CAACF,KAAK,CAAC,IAAI,CAAEC,UACpC,CAMA,SAASI,EAAaC,CAAK,EACvB,IAAMC,EAAON,UAAWO,EAAS,IAAI,CAACC,MAAM,CAAG,IAAI,CAACC,OAAO,CAACb,MAAM,CAAC,IAAI,CAACc,SAAS,EAC7E,CAAC,IAAI,CAACC,QAAQ,CAAE,IAAI,CAACC,MAAM,CAAC,AAClB,CAAA,WAAVP,GACAE,EAAO3D,OAAO,CAAC,AAACiE,IACRA,GAAcA,EAAWhG,MAAM,GAC/BuE,EAAW0B,QAAQ,CAACf,KAAK,CAACc,EAAYP,GAClC,CAACO,EAAWL,MAAM,GACdK,EAAWF,QAAQ,CAACI,OAAO,EAC3B3B,EAAW0B,QAAQ,CAACf,KAAK,CAACc,EAAWF,QAAQ,CAAEL,GAE/CO,EAAWD,MAAM,EAAIC,EAAWD,MAAM,CAACG,OAAO,EAC9C3B,EAAW0B,QAAQ,CAACf,KAAK,CAACc,EAAWD,MAAM,CAAEN,IAI7D,GAEJlB,EAAW0B,QAAQ,CAACf,KAAK,CAAC,IAAI,CAAEO,EACpC,CAOA,SAASU,EAAWjG,CAAO,CAAEkC,CAAM,CAAEgE,CAAS,CAAEC,CAAQ,EACpD,IAAMpB,EAAQ,IAAI,CAACjF,MAAM,CAACE,OAAO,CAAC+E,KAAK,CAAEH,EAAO,IAAI,CAAC9E,MAAM,CAACE,OAAO,CAAC4E,IAAI,CAAEwB,EAAaxB,GAAMQ,QAAU,EAAGiB,EAAazB,GAAM,CAAC,IAAI,CAAC0B,KAAK,CAAC,CAGzI,GAFAjC,EAAWkC,MAAM,CAAC5H,IAAI,CAAC,IAAI,CAAEqB,EAAS,CAAA,IAAI,CAACyF,MAAM,EAAWvD,EAC5DgE,EAAWC,GACP,IAAI,CAACV,MAAM,CAAE,CAEb,IAAMe,EAAY,AAACzB,CAAAA,GAAS,EAAE,AAAD,EACxB0B,MAAM,CACX,CAACC,EAAW/I,EAAG2I,IAAW,IAAI,CAACK,EAAE,GAAKhJ,EAAEgJ,EAAE,CAAGL,EAAQI,EAAY,IAGjEE,EAAanC,EAAMM,GAASA,CAAK,CAACyB,EAAU,EAAI,CAAC,EAAG5B,GAAM,CAAC,IAAI,CAAC0B,KAAK,CAAC,EAAI,CAAC,GAEvE1B,IACIyB,EACAzB,CAAI,CAAC,IAAI,CAAC0B,KAAK,CAAC,CAAGD,EAInBzB,EAAKQ,MAAM,CAAGgB,GAIlBrB,EACIyB,GAAa,EACbzB,CAAK,CAACyB,EAAU,CAAGI,EAGnB7B,EAAM8B,IAAI,CAACD,GAIf,IAAI,CAAC9G,MAAM,CAACE,OAAO,CAAC+E,KAAK,CAAG,CAAC6B,EAAW,CAExClC,EAAKxC,EAAQ,CAAA,IACb,IAAI,CAACpC,MAAM,CAACL,KAAK,CAACyC,MAAM,CAACgE,EAEjC,CACJ,CAxNA9I,EAAiBoD,OAAO,CATxB,SAAiBsG,CAAU,CAAEC,CAAW,EACpC,IAAM1C,EAAayC,EAAWrI,SAAS,CAAE0F,EAAc4C,EAAYtI,SAAS,CAM5E,OALA4F,EAAWgB,YAAY,CAAGA,EAC1BhB,EAAW0B,QAAQ,CAAGV,EACtBhB,EAAWkC,MAAM,CAAGN,EACpB9B,EAAYQ,OAAO,CAAGA,EACtBR,EAAYe,OAAO,CAAGA,EACf6B,CACX,EA2EA3J,EAAiB4J,UAAU,CApE3B,SAAoBL,CAAE,EAClB,IAAMG,EAAa,IAAI,CAAC1C,UAAU,CAAE6C,EAAW,CAAClC,EAAO4B,IAAOnC,EAAKO,EAAO,AAACI,GAASA,EAAKwB,EAAE,GAAKA,GAC5FxB,EAAO8B,EAAS,IAAI,CAAClC,KAAK,CAAE4B,GAAK3G,EACrC,GAAI,CAACmF,EAAM,CACPnF,EAAU,IAAI,CAACA,OAAO,CAAC+E,KAAK,EAAIkC,EAAS,IAAI,CAACjH,OAAO,CAAC+E,KAAK,CAAE4B,GAC7D,IAAMO,EAAU,IAAIJ,EAAW,IAAI,CAAEvC,EAAO,CACxC4C,UAAW,kBACX1B,OAAQ,CAAA,EACRkB,GAAIA,EACJS,EAAG,CACP,EAAGpH,GACHkH,CAAAA,EAAQxB,OAAO,CAAG,EAAE,CACpBwB,EAAQvB,SAAS,CAAG,EAAE,CAKtBuB,EAAQG,MAAM,CAAG,WACb,IAAIC,EAAQ,EAAGC,EAAU,EAOzB,OANAL,EAAQxB,OAAO,CAAC7D,OAAO,CAAC,AAAC2F,IACrBF,GAASE,EAAKC,MAAM,EAAI,CAC5B,GACAP,EAAQvB,SAAS,CAAC9D,OAAO,CAAC,AAAC2F,IACvBD,GAAWC,EAAKC,MAAM,EAAI,CAC9B,GACOjG,KAAKkG,GAAG,CAACJ,EAAOC,EAC3B,EAKAL,EAAQS,MAAM,CAAG,SAAU/H,CAAK,CAAEgI,CAAI,EAClC,IAAID,EAAS,EACb,IAAK,IAAIE,EAAI,EAAGA,EAAIX,CAAO,CAACU,EAAK,CAACxC,MAAM,CAAEyC,IAAK,CAC3C,GAAIX,CAAO,CAACU,EAAK,CAACC,EAAE,GAAKjI,EACrB,OAAO+H,EAEXA,GAAUT,CAAO,CAACU,EAAK,CAACC,EAAE,CAACJ,MAAM,AACrC,CACJ,EAGAP,EAAQY,QAAQ,CAAG,WACf,IAAIC,EAAW,EAMf,OALAb,EAAQxB,OAAO,CAAC7D,OAAO,CAAC,AAAC2F,IACjBA,EAAKO,QAAQ,EACbA,GAER,GACQ,CAACb,EAAQxB,OAAO,CAACN,MAAM,EAC3B2C,IAAab,EAAQxB,OAAO,CAACN,MAAM,AAC3C,EACA8B,EAAQZ,KAAK,CAAG,IAAI,CAACvB,KAAK,CAAC8B,IAAI,CAACK,GAAW,EAC3C/B,EAAO+B,CACX,CAYA,OAXA/B,EAAK6C,YAAY,CAAG,OAEpB7C,EAAK8C,IAAI,CAAG9C,EAAK8C,IAAI,EAAI9C,EAAKnF,OAAO,CAAC2G,EAAE,EAAI,GAE5CxB,EAAK+C,IAAI,CAAGxD,EAEZS,EAAKnF,OAAO,CAACkI,IAAI,CAAE/C,EAAKnF,OAAO,CAACmI,MAAM,EAAIhD,EAAKnF,OAAO,CAACmI,MAAM,CAACC,MAAM,CAEpE,IAAI,CAACpI,OAAO,CAACmI,MAAM,EAAI,IAAI,CAACnI,OAAO,CAACmI,MAAM,CAACC,MAAM,CAEjD,GACOjD,CACX,EAYA/H,EAAiBuH,OAAO,CAAGA,EAgD3BvH,EAAiBiL,cAAc,CA1C/B,WACI,IAAM5I,EAAQ,IAAI,CAACA,KAAK,CAAE6I,EAAa,CAAC,EACxCnE,EAAYkE,cAAc,CAAC1J,IAAI,CAAC,IAAI,EAC/B,IAAI,CAACoG,KAAK,EACX,CAAA,IAAI,CAACA,KAAK,CAAG,EAAE,AAAD,EAElB,IAAI,CAACwD,YAAY,CAAG,EAEpB,IAAI,CAACxD,KAAK,CAAClD,OAAO,CAAC,AAACsD,IAChBA,EAAKQ,SAAS,CAACP,MAAM,CAAG,EACxBD,EAAKO,OAAO,CAACN,MAAM,CAAG,EACtBD,EAAKqD,KAAK,CAAGrD,EAAKnF,OAAO,CAACwI,KAAK,AACnC,GAEA,IAAI,CAAC1D,MAAM,CAACjD,OAAO,CAAC,AAACjC,IACb0E,EAAQ1E,EAAM6I,IAAI,IACbH,CAAU,CAAC1I,EAAM6I,IAAI,CAAC,EACvBH,CAAAA,CAAU,CAAC1I,EAAM6I,IAAI,CAAC,CAAG,IAAI,CAACzB,UAAU,CAACpH,EAAM6I,IAAI,CAAA,EAEvDH,CAAU,CAAC1I,EAAM6I,IAAI,CAAC,CAAC9C,SAAS,CAACkB,IAAI,CAACjH,GACtCA,EAAMgG,QAAQ,CAAG0C,CAAU,CAAC1I,EAAM6I,IAAI,CAAC,CAEnChJ,EAAMiJ,UAAU,CAChB9I,EAAM+I,UAAU,CAAGjE,EAAK9E,EAAMI,OAAO,CAAC2I,UAAU,CAAEL,CAAU,CAAC1I,EAAM6I,IAAI,CAAC,CAACE,UAAU,EAGnF/I,EAAMgJ,KAAK,CACPhJ,EAAMI,OAAO,CAAC4I,KAAK,EAAIN,CAAU,CAAC1I,EAAM6I,IAAI,CAAC,CAACG,KAAK,EAG3DtE,EAAQ1E,EAAMiJ,EAAE,IACXP,CAAU,CAAC1I,EAAMiJ,EAAE,CAAC,EACrBP,CAAAA,CAAU,CAAC1I,EAAMiJ,EAAE,CAAC,CAAG,IAAI,CAAC7B,UAAU,CAACpH,EAAMiJ,EAAE,CAAA,EAEnDP,CAAU,CAAC1I,EAAMiJ,EAAE,CAAC,CAACnD,OAAO,CAACmB,IAAI,CAACjH,GAClCA,EAAMiG,MAAM,CAAGyC,CAAU,CAAC1I,EAAMiJ,EAAE,CAAC,EAEvCjJ,EAAMqI,IAAI,CAAGrI,EAAMqI,IAAI,EAAIrI,EAAM+G,EAAE,AACvC,EAAG,IAAI,EAEP,IAAI,CAAC2B,UAAU,CAAGA,CACtB,EAwCAlL,EAAiBiI,YAAY,CAAGA,EA6ChCjI,EAAiB6I,UAAU,CAAGA,CAClC,EAAG7I,GAAqBA,CAAAA,EAAmB,CAAC,CAAA,GAMf,IAAM0L,EAA2B1L,EAiBxD,CAAE0C,OAAQ,CAAErB,UAAWsK,CAA6B,CAAEtK,UAAW,CAAE2F,WAAY4E,CAAK,CAAE,CAAE,CAAE,CAAI9E,IAE9F,CAAE/E,SAAU8J,CAA0B,CAAEC,IAAAA,CAAG,CAAE5E,QAAS6E,CAAyB,CAAE5E,OAAQ6E,CAAwB,CAAE1E,KAAM2E,CAAsB,CAAE,CAAItK,GAM3J,OAAMuK,UAA0BN,EAW5BrE,SAAU,CAWN,OAVI,IAAI,CAACc,MAAM,EACX,IAAI,CAACE,SAAS,CAACd,MAAM,CAAC,IAAI,CAACa,OAAO,EAAE7D,OAAO,CAAC,SAAU2F,CAAI,EAGlDA,EAAK+B,eAAe,EACpB/B,EAAK+B,eAAe,EAE5B,GAEJ,IAAI,CAACzJ,MAAM,CAACgC,MAAM,CAAC0H,2BAA2B,CAAC,IAAI,CAAE,IAAI,CAAC1J,MAAM,CAACgC,MAAM,CAAC,IAAI,CAAC2D,MAAM,CAAG,QAAU,QAAQ,EACjGuD,EAAMvK,SAAS,CAACkG,OAAO,CAACK,KAAK,CAAC,IAAI,CAAEC,UAC/C,CAMAwE,WAAY,CACR,IAAMC,EAAM,IAAI,CAACjE,MAAM,CACnB,IAAI,CAACE,SAAS,CAACP,MAAM,CAAG,IAAI,CAACM,OAAO,CAACN,MAAM,CAC3C,EACJ,OAAOsE,AAAQ,IAARA,EAAY,EAAIA,CAC3B,CAKAC,mBAAoB,CAChB,IAAMC,EAAc,IAAI,CAAC9J,MAAM,CAACE,OAAO,CAACwH,IAAI,CAAEqC,EAAe,IAAI,CAAC7J,OAAO,CACzE,MAAO,CACH,eAAgBqJ,EAAuBQ,EAAaC,KAAK,CAAEF,EAAYE,KAAK,EAC5EC,OAASF,EAAajB,KAAK,EAAIgB,EAAYhB,KAAK,CAChDoB,UAAYH,EAAaI,SAAS,EAAIL,EAAYK,SAAS,CAC3DC,QAASb,EAAuBQ,EAAaK,OAAO,CAAEN,EAAYM,OAAO,CAAE,EAC/E,CACJ,CAOAC,aAAc,CACV,IAAIC,EAAO,IAAI,CAACxE,QAAQ,CAAEyE,EAAQ,IAAI,CAACxE,MAAM,CAO7C,OAJIuE,EAAKpJ,KAAK,CAAGqJ,EAAMrJ,KAAK,GACxBoJ,EAAO,IAAI,CAACvE,MAAM,CAClBwE,EAAQ,IAAI,CAACzE,QAAQ,EAElB,CACH,CAAC,IAAKwE,EAAKpJ,KAAK,EAAI,EAAGoJ,EAAKnJ,KAAK,EAAI,EAAE,CACvC,CAAC,IAAKoJ,EAAMrJ,KAAK,EAAI,EAAGqJ,EAAMpJ,KAAK,EAAI,EAAE,CAC5C,AAaL,CASAqJ,SAAU,CACN,IAAMC,EAAK,IAAI,CAAC3E,QAAQ,CAACsC,IAAI,CAAEsC,EAAK,IAAI,CAAC3E,MAAM,CAACqC,IAAI,CAAEuC,EAAMF,EAAKC,EACjE,MAAO,CACH5E,SAAU,EAAI2E,EAAKE,EACnB5E,OAAQ,EAAI2E,EAAKC,CACrB,CACJ,CAMAC,YAAY5K,CAAM,CAAEE,CAAO,CAAE2K,CAAC,CAAE,CAC5B,KAAK,CAAC7K,EAAQE,EAAS2K,GACnB,IAAI,CAAC7K,MAAM,CAACE,OAAO,CAACC,SAAS,EAC7B,CAAC,IAAI,CAACH,MAAM,CAACL,KAAK,CAACiJ,UAAU,GAC7BO,EAA2B,IAAI,CAAE,YAAa,WAC1CC,EAAI,IAAI,CAACpJ,MAAM,CAACL,KAAK,CAACC,SAAS,CAAE,CAAEkL,OAAQ,MAAO,EACtD,GACA3B,EAA2B,IAAI,CAAE,WAAY,WACzCC,EAAI,IAAI,CAACpJ,MAAM,CAACL,KAAK,CAACC,SAAS,CAAE,CAAEkL,OAAQ,SAAU,EACzD,GAER,CAIAC,SAAU,CACN,MAAO,CAAC,IAAI,CAACpF,MAAM,EAAI0D,EAA0B,IAAI,CAACxC,EAAE,CAC5D,CAKAmE,YAAa,KAELC,EADJ,IAAMC,EAAO,IAAI,CAACb,WAAW,GAE7B,GAAI,IAAI,CAACnE,OAAO,CAAE,CACd,IAAI,CAACiF,SAAS,CAAG,CACbnN,EAAGkN,CACP,EACK,IAAI,CAAClL,MAAM,CAACL,KAAK,CAACiJ,UAAU,GAC7BqC,EAAU,IAAI,CAACjL,MAAM,CAACoL,YAAY,CAAC,IAAI,EACvC,IAAI,CAAClF,OAAO,CAAC3D,IAAI,CAAC0I,GAClB,AAAC,CAAA,IAAI,CAACI,UAAU,EAAI,EAAE,AAAD,EAAGtJ,OAAO,CAAC,SAAUuJ,CAAK,EACvCA,GACAA,EAAM/I,IAAI,CAAC,CACP6H,QAASa,EAAQb,OAAO,AAC5B,EAER,IAEJ,IAAI,CAAClE,OAAO,CAACqF,OAAO,CAAC,IAAI,CAACJ,SAAS,EAEnC,IAAMhJ,EAAQ+I,CAAI,CAAC,EAAE,CACfM,EAAMN,CAAI,CAAC,EAAE,AACF,CAAA,MAAb/I,CAAK,CAAC,EAAE,EAAYqJ,AAAW,MAAXA,CAAG,CAAC,EAAE,GAC1B,IAAI,CAACtK,KAAK,CAAG,AAACiB,CAAAA,CAAK,CAAC,EAAE,CAAGqJ,CAAG,CAAC,EAAE,AAAD,EAAK,EACnC,IAAI,CAACrK,KAAK,CAAG,AAACgB,CAAAA,CAAK,CAAC,EAAE,CAAGqJ,CAAG,CAAC,EAAE,AAAD,EAAK,EAE3C,CACJ,CAeAC,OAAOrJ,CAAM,CAAEgE,CAAS,CAAE,CACtB,IAAoBpG,EAASF,AAAf,IAAI,CAAiBE,MAAM,CAAE0L,EAAe1L,EAAOE,OAAO,CAAC+E,KAAK,EAAI,EAAE,CAChFuB,EAAOuB,EAAI2D,EAAapG,MAAM,CAElC,GAAIxF,AAHU,IAAI,CAGR6F,MAAM,CAAE,CA4Bd,IAzBA3F,EAAOgF,MAAM,CAAG,EAAE,CAElB,EAAE,CACGD,MAAM,CAACjF,AATF,IAAI,CASI+F,SAAS,EACtBd,MAAM,CAACjF,AAVF,IAAI,CAUI8F,OAAO,EACpB7D,OAAO,CAAC,SAAU4J,CAAU,EAE7BnF,CAAAA,EAAQmF,EAAW7F,QAAQ,CAACD,SAAS,CAAC+F,OAAO,CAACD,EAAU,EAC5C,IACRA,EAAW7F,QAAQ,CAACD,SAAS,CAACgG,MAAM,CAACrF,EAAO,GAGhDA,CAAAA,EAAQmF,EAAW5F,MAAM,CAACH,OAAO,CAACgG,OAAO,CAACD,EAAU,EACxC,IACRA,EAAW5F,MAAM,CAACH,OAAO,CAACiG,MAAM,CAACrF,EAAO,GAG5CyC,EAA8B6C,WAAW,CAACjN,IAAI,CAACmB,EAAQA,EAAO8E,IAAI,CAAC8G,OAAO,CAACD,GAAa,CAAA,EAAO,CAAA,EACnG,GAEA3L,EAAOgF,MAAM,CAAGhF,EAAO8E,IAAI,CAACiH,KAAK,GAGjC/L,EAAOiF,KAAK,CAAC4G,MAAM,CAAC7L,EAAOiF,KAAK,CAAC2G,OAAO,CA7B9B,IAAI,EA6BmC,GAE1C7D,KACH,GAAI2D,CAAY,CAAC3D,EAAE,CAAClB,EAAE,GAAK/G,AAhCrB,IAAI,CAgCuBI,OAAO,CAAC2G,EAAE,CAAE,CACzC7G,EAAOE,OAAO,CAAC+E,KAAK,CAAC4G,MAAM,CAAC9D,EAAG,GAC/B,KACJ,CAnCM,IAAI,EAsCVjI,AAtCM,IAAI,CAsCJ+E,OAAO,GAGjB7E,EAAOgM,OAAO,CAAG,CAAA,EACjBhM,EAAOiM,WAAW,CAAG,CAAA,EACjB7J,GACApC,EAAOL,KAAK,CAACyC,MAAM,CAACA,EAE5B,MAEIpC,EAAO8L,WAAW,CAAC9L,EAAO8E,IAAI,CAAC8G,OAAO,CAhD5B,IAAI,EAgDiCxJ,EAAQgE,EAE/D,CAKA8F,YAAa,CACT,IAAIjB,CACC,CAAA,IAAI,CAAC/E,OAAO,GACb,IAAI,CAACA,OAAO,CAAG,IAAI,CAAClG,MAAM,CAACL,KAAK,CAACwM,QAAQ,CACpCjB,IAAI,CAAC,IAAI,CAACb,WAAW,IACrB+B,QAAQ,CAAC,IAAI,CAACC,YAAY,GAAI,CAAA,GAC9BC,GAAG,CAAC,IAAI,CAACtM,MAAM,CAACuM,KAAK,EACrB,IAAI,CAACvM,MAAM,CAACL,KAAK,CAACiJ,UAAU,GAC7BqC,EAAU,IAAI,CAACjL,MAAM,CAACoL,YAAY,CAAC,IAAI,EACvC,IAAI,CAAClF,OAAO,CAAC3D,IAAI,CAAC0I,GAClB,AAAC,CAAA,IAAI,CAACI,UAAU,EAAI,EAAE,AAAD,EAAGtJ,OAAO,CAAC,SAAUuJ,CAAK,EACvCA,GACAA,EAAM/I,IAAI,CAAC,CACP6H,QAASa,EAAQb,OAAO,AAC5B,EAER,IAGZ,CACJ,CACAd,EAAyBE,EAAkB7K,SAAS,CAAE,CAClDsH,SAAU+C,EAAwBzD,YAAY,AAClD,GAmwB6B,IAAMiH,EATV,CACrBC,WA7JJ,SAAoB/E,CAAI,CAAEgF,CAAK,CAAEC,CAAU,CAAEC,CAAS,EAClD,IAAMC,EAAanF,EAAK8C,OAAO,GAAIsC,EAAc,AAACH,EAAW9B,CAAC,CAAG+B,EAAaF,EAAOK,EAAc,AAACJ,EAAWrF,CAAC,CAAGsF,EAAaF,CAC3HhF,CAAAA,EAAK5B,QAAQ,CAAC/E,aAAa,GAC5B2G,EAAK5B,QAAQ,CAACkH,KAAK,EACfF,EAAcD,EAAW/G,QAAQ,CAAG4B,EAAK5B,QAAQ,CAACmH,MAAM,CAC5DvF,EAAK5B,QAAQ,CAACoH,KAAK,EACfH,EAAcF,EAAW/G,QAAQ,CAAG4B,EAAK5B,QAAQ,CAACmH,MAAM,EAE3DvF,EAAK3B,MAAM,CAAChF,aAAa,GAC1B2G,EAAK3B,MAAM,CAACiH,KAAK,EACbF,EAAcD,EAAW9G,MAAM,CAAG2B,EAAK3B,MAAM,CAACkH,MAAM,CACxDvF,EAAK3B,MAAM,CAACmH,KAAK,EACbH,EAAcF,EAAW9G,MAAM,CAAG2B,EAAK3B,MAAM,CAACkH,MAAM,CAEhE,EAgJIE,wBAjIJ,SAAiCnP,CAAC,CAAEoP,CAAC,EACjC,OAAOpP,EAAIA,EAAIoP,CACnB,EAgIIC,WAtHJ,WACI,IAAMC,EAAwB,IAAI,CAACpN,OAAO,CAACoN,qBAAqB,CAAEC,EAAU,IAAI,CAACF,UAAU,CAACE,OAAO,CAAEC,EAAU,IAAI,CAACH,UAAU,CAACG,OAAO,CACtI,IAAI,CAACvI,KAAK,CAAClD,OAAO,CAAC,SAAUsD,CAAI,EAC7B,GAAI,CAACA,EAAKtE,aAAa,CAAE,CACrB,IAAMkM,EAAS5H,EAAKsE,SAAS,GAAI8D,EAAMR,EAAU,CAAA,EAAIA,EAAS,CAAA,CAC9D5H,CAAAA,EAAK2H,KAAK,EAAK,AAACO,CAAAA,EAAUlI,EAAKnE,KAAK,AAAD,EAC/BoM,EACAG,EAAMpI,EAAK4H,MAAM,CACrB5H,EAAK6H,KAAK,EAAK,AAACM,CAAAA,EAAUnI,EAAKlE,KAAK,AAAD,EAC/BmM,EACAG,EAAMpI,EAAK4H,MAAM,AACzB,CACJ,EACJ,EA0GIS,KApGJ,SAAc1L,CAAM,EAChB,OAAON,KAAKiM,GAAG,CAAC3L,EAAO4L,GAAG,CAAC5D,KAAK,CAAGhI,EAAO4L,GAAG,CAACC,MAAM,CAAG7L,EAAOiD,KAAK,CAACK,MAAM,CAAE,GAChF,EAmGIwI,UAlEJ,SAAmB9L,CAAM,CAAEqD,CAAI,EAC3BA,EAAK2H,KAAK,EACN3H,EAAK2H,KAAK,CAAGhL,EAAO9B,OAAO,CAAC6N,QAAQ,CACxC1I,EAAK6H,KAAK,EACN7H,EAAK6H,KAAK,CAAGlL,EAAO9B,OAAO,CAAC6N,QAAQ,CACxC,IAAMnB,EAAYvH,EAAK1B,WAAW,CAAG3B,EAAOgM,YAAY,CAAC,CACrDnD,EAAGxF,EAAK2H,KAAK,CACb1F,EAAGjC,EAAK6H,KAAK,AACjB,EACkB,CAAA,IAAdN,IACAvH,EAAKnE,KAAK,EAAKmE,EAAK2H,KAAK,CAAGJ,EACxBlL,KAAKuM,GAAG,CAACvM,KAAKC,GAAG,CAAC0D,EAAK2H,KAAK,EAAGhL,EAAO2B,WAAW,EACrD0B,EAAKlE,KAAK,EAAKkE,EAAK6H,KAAK,CAAGN,EACxBlL,KAAKuM,GAAG,CAACvM,KAAKC,GAAG,CAAC0D,EAAK6H,KAAK,EAAGlL,EAAO2B,WAAW,EAE7D,EAoDIuK,UAxCJ,SAAmB7I,CAAI,CAAEqH,CAAK,CAAEC,CAAU,CAAEC,CAAS,EACjDvH,EAAK2H,KAAK,EACN,AAACL,EAAW9B,CAAC,CAAG+B,EAAaF,EAAQrH,EAAK4H,MAAM,CACpD5H,EAAK6H,KAAK,EACN,AAACP,EAAWrF,CAAC,CAAGsF,EAAaF,EAAQrH,EAAK4H,MAAM,AACxD,EAoCIkB,uBAfJ,SAAgCnQ,CAAC,CAAEoP,CAAC,EAChC,OAAOA,EAAIA,EAAIpP,CACnB,CAcA,CAgCA,OAAMoQ,EAMFxD,YAAYgD,CAAG,CAAE,CAab,IAAI,CAACS,IAAI,CAAG,CAAA,EASZ,IAAI,CAACC,OAAO,CAAG,CAAA,EASf,IAAI,CAACC,UAAU,CAAG,CAAA,EASlB,IAAI,CAACtJ,KAAK,CAAG,EAAE,CAOf,IAAI,CAAC2I,GAAG,CAAGA,EAOX,IAAI,CAACY,OAAO,CAAG9M,KAAKuM,GAAG,CAACL,EAAI5D,KAAK,CAAE4D,EAAIC,MAAM,CACjD,CAuBAY,WAAY,CACR,IAAMC,EAAY,IAAI,CAACd,GAAG,CAAC5D,KAAK,CAAG,EAAG2E,EAAa,IAAI,CAACf,GAAG,CAACC,MAAM,CAAG,CAErE,CAAA,IAAI,CAAC5I,KAAK,CAAC,EAAE,CAAG,IAAImJ,EAAa,CAC7B9D,KAAM,IAAI,CAACsD,GAAG,CAACtD,IAAI,CACnBsE,IAAK,IAAI,CAAChB,GAAG,CAACgB,GAAG,CACjB5E,MAAO0E,EACPb,OAAQc,CACZ,GAEA,IAAI,CAAC1J,KAAK,CAAC,EAAE,CAAG,IAAImJ,EAAa,CAC7B9D,KAAM,IAAI,CAACsD,GAAG,CAACtD,IAAI,CAAGoE,EACtBE,IAAK,IAAI,CAAChB,GAAG,CAACgB,GAAG,CACjB5E,MAAO0E,EACPb,OAAQc,CACZ,GAEA,IAAI,CAAC1J,KAAK,CAAC,EAAE,CAAG,IAAImJ,EAAa,CAC7B9D,KAAM,IAAI,CAACsD,GAAG,CAACtD,IAAI,CAAGoE,EACtBE,IAAK,IAAI,CAAChB,GAAG,CAACgB,GAAG,CAAGD,EACpB3E,MAAO0E,EACPb,OAAQc,CACZ,GAEA,IAAI,CAAC1J,KAAK,CAAC,EAAE,CAAG,IAAImJ,EAAa,CAC7B9D,KAAM,IAAI,CAACsD,GAAG,CAACtD,IAAI,CACnBsE,IAAK,IAAI,CAAChB,GAAG,CAACgB,GAAG,CAAGD,EACpB3E,MAAO0E,EACPb,OAAQc,CACZ,EACJ,CAMAE,eAAe/O,CAAK,CAAE,CAClB,IAAMwK,EAAOxK,EAAMoB,KAAK,CAAG,IAAI,CAAC0M,GAAG,CAACtD,IAAI,CAAG,IAAI,CAACsD,GAAG,CAAC5D,KAAK,CAAG,EAAG4E,EAAM9O,EAAMqB,KAAK,CAAG,IAAI,CAACyM,GAAG,CAACgB,GAAG,CAAG,IAAI,CAAChB,GAAG,CAACC,MAAM,CAAG,EAsBpH,OApBIvD,EACIsE,EAEQ,EAIA,EAIRA,EAEQ,EAIA,CAIpB,CAUAE,OAAOhP,CAAK,CAAEiP,CAAK,CAAE,CACjB,IAAIC,CACA,CAAA,IAAI,CAACT,UAAU,CAEf,IAAI,CAACtJ,KAAK,CAAC,IAAI,CAAC4J,cAAc,CAAC/O,GAAO,CAACgP,MAAM,CAAChP,EAAOiP,EAAQ,IAG7D,IAAI,CAACT,OAAO,CAAG,CAAA,EACV,IAAI,CAACD,IAAI,CAMNU,GAEA,IAAI,CAACR,UAAU,CAAG,CAAA,EAClB,IAAI,CAACE,SAAS,GAEI,CAAA,IAAd,IAAI,CAACJ,IAAI,GACT,IAAI,CAACpJ,KAAK,CAAC,IAAI,CAAC4J,cAAc,CAAC,IAAI,CAACR,IAAI,EAAE,CACrCS,MAAM,CAAC,IAAI,CAACT,IAAI,CAAEU,EAAQ,GAC/B,IAAI,CAACV,IAAI,CAAG,CAAA,GAGhB,IAAI,CAACpJ,KAAK,CAAC,IAAI,CAAC4J,cAAc,CAAC/O,GAAO,CACjCgP,MAAM,CAAChP,EAAOiP,EAAQ,KAkB3BC,AAPAA,CAAAA,EAAkB,IAAIZ,EAAa,CAC/BQ,IAAK9O,EAAMoB,KAAK,EAAI+N,IACpB3E,KAAMxK,EAAMqB,KAAK,EAAI8N,IAErBjF,MAAO,GACP6D,OAAQ,EACZ,EAAC,EACeQ,IAAI,CAAGvO,EACvBkP,EAAgBT,UAAU,CAAG,CAAA,EAC7B,IAAI,CAACtJ,KAAK,CAAC8B,IAAI,CAACiI,KApCpB,IAAI,CAACT,UAAU,CAAG,CAAA,EAClB,IAAI,CAACF,IAAI,CAAGvO,GAuCxB,CAKAoP,qBAAsB,CAClB,IAAI9G,EAAO,EAAGlH,EAAQ,EAAGC,EAAQ,EACjC,GAAI,IAAI,CAACoN,UAAU,CAAE,CAEjB,IAAK,IAAMY,KAAa,IAAI,CAAClK,KAAK,CACzBkK,EAAUb,OAAO,GAClBlG,GAAQ+G,EAAU/G,IAAI,CACtBlH,GAASiO,EAAUjO,KAAK,CAAGiO,EAAU/G,IAAI,CACzCjH,GAASgO,EAAUhO,KAAK,CAAGgO,EAAU/G,IAAI,EAGjDlH,GAASkH,EACTjH,GAASiH,CACb,MACS,IAAI,CAACiG,IAAI,GAEdjG,EAAO,IAAI,CAACiG,IAAI,CAACjG,IAAI,CACrBlH,EAAQ,IAAI,CAACmN,IAAI,CAACnN,KAAK,CACvBC,EAAQ,IAAI,CAACkN,IAAI,CAAClN,KAAK,CAG3B,CAAA,IAAI,CAACiH,IAAI,CAAGA,EACZ,IAAI,CAAClH,KAAK,CAAGA,EACb,IAAI,CAACC,KAAK,CAAGA,CACjB,CACJ,CAuJ6B,IAAMiO,EA3GnC,MAMIxE,YAAYC,CAAC,CAAEvD,CAAC,CAAE0C,CAAK,CAAE6D,CAAM,CAAE,CAE7B,IAAI,CAACD,GAAG,CAAG,CACPtD,KAAMO,EACN+D,IAAKtH,EACL0C,MAAOA,EACP6D,OAAQA,CACZ,EACA,IAAI,CAACwB,QAAQ,CAAG,GAChB,IAAI,CAAC1S,IAAI,CAAG,IArD4CyR,EAqDd,IAAI,CAACR,GAAG,EAClD,IAAI,CAACjR,IAAI,CAAC4R,UAAU,CAAG,CAAA,EACvB,IAAI,CAAC5R,IAAI,CAAC2S,MAAM,CAAG,CAAA,EACnB,IAAI,CAAC3S,IAAI,CAAC8R,SAAS,EACvB,CASAc,wBAAyB,CACrB,IAAI,CAACC,kBAAkB,CAAC,KAAM,KAAM,SAAUnK,CAAI,EAC9CA,EAAK6J,mBAAmB,EAC5B,EACJ,CAOAO,YAAYzK,CAAM,CAAE,CAChB,IAAK,IAAMlF,KAASkF,EAChB,IAAI,CAACrI,IAAI,CAACmS,MAAM,CAAChP,EAAO,IAAI,CAACuP,QAAQ,CAE7C,CAwBAG,mBAAmBnK,CAAI,CAAEqK,CAAc,CAAEC,CAAa,CAAE,CACpD,IAAIC,EAOJ,GANKvK,GACDA,CAAAA,EAAO,IAAI,CAAC1I,IAAI,AAAD,EAEf0I,IAAS,IAAI,CAAC1I,IAAI,EAAI+S,GACtBE,CAAAA,EAAYF,EAAerK,EAAI,EAE/BuK,AAAc,CAAA,IAAdA,GAGJ,IAAK,IAAMC,KAAUxK,EAAKJ,KAAK,CAAE,CAC7B,GAAI4K,EAAOtB,UAAU,CAAE,CAInB,GAHImB,GACAE,CAAAA,EAAYF,EAAeG,EAAM,EAEjCD,AAAc,CAAA,IAAdA,EACA,SAEJ,IAAI,CAACJ,kBAAkB,CAACK,EAAQH,EAAgBC,EACpD,MACSE,EAAOxB,IAAI,EACZqB,GACAA,EAAeG,EAAOxB,IAAI,EAG9BsB,GACAA,EAAcE,EAEtB,CACIxK,IAAS,IAAI,CAAC1I,IAAI,EAAIgT,GACtBA,EAActK,GAEtB,CACJ,EAqMmCyK,EATT,CACtBrD,WArJJ,SAAsC/E,CAAI,CAAEgF,CAAK,CAAEC,CAAU,EACzD,IAAME,EAAanF,EAAK8C,OAAO,GAAIsC,EAAc,CAACH,EAAW9B,CAAC,CAAG6B,EAAQ,IAAI,CAACqD,eAAe,CAAEhD,EAAc,CAACJ,EAAWrF,CAAC,CAAGoF,EAAQ,IAAI,CAACqD,eAAe,AACpJrI,CAAAA,EAAK5B,QAAQ,CAAC/E,aAAa,GAC5B2G,EAAK5B,QAAQ,CAAC5E,KAAK,EACf4L,EAAcD,EAAW/G,QAAQ,CAAG4B,EAAK5B,QAAQ,CAACmH,MAAM,CAC5DvF,EAAK5B,QAAQ,CAAC3E,KAAK,EACf4L,EAAcF,EAAW/G,QAAQ,CAAG4B,EAAK5B,QAAQ,CAACmH,MAAM,EAE3DvF,EAAK3B,MAAM,CAAChF,aAAa,GAC1B2G,EAAK3B,MAAM,CAAC7E,KAAK,EACb4L,EAAcD,EAAW9G,MAAM,CAAG2B,EAAK3B,MAAM,CAACkH,MAAM,CACxDvF,EAAK3B,MAAM,CAAC5E,KAAK,EACb4L,EAAcF,EAAW9G,MAAM,CAAG2B,EAAK3B,MAAM,CAACkH,MAAM,CAEhE,EAwIIE,wBA9HJ,SAAmDnP,CAAC,CAAEoP,CAAC,EAEnD,MAAO,AAACA,CAAAA,EAAIpP,CAAAA,EAAKA,CACrB,EA4HIqP,WAlHJ,WACI,IAAMC,EAAwB,IAAI,CAACpN,OAAO,CAACoN,qBAAqB,EAAI,EAAGC,EAAU,AAAC,CAAA,IAAI,CAACF,UAAU,CAACE,OAAO,CACrG,AAAC,CAAA,IAAI,CAACK,GAAG,CAACtD,IAAI,CAAG,IAAI,CAACsD,GAAG,CAAC5D,KAAK,AAAD,EAAK,CAAA,EAAKsD,EAAuBE,EAAU,AAAC,CAAA,IAAI,CAACH,UAAU,CAACG,OAAO,CACjG,AAAC,CAAA,IAAI,CAACI,GAAG,CAACgB,GAAG,CAAG,IAAI,CAAChB,GAAG,CAACC,MAAM,AAAD,EAAK,CAAA,EAAKP,EAC5C,IAAI,CAACrI,KAAK,CAAClD,OAAO,CAAC,SAAUsD,CAAI,EACxBA,EAAKtE,aAAa,GACnBsE,EAAKnE,KAAK,EACNqM,EAAUlI,EAAK+C,IAAI,CAAG/C,EAAK4H,MAAM,CACrC5H,EAAKlE,KAAK,EACNqM,EAAUnI,EAAK+C,IAAI,CAAG/C,EAAK4H,MAAM,CAE7C,EACJ,EAuGIS,KAjGJ,SAAgC1L,CAAM,EAClC,OAAON,KAAKiM,GAAG,CAAC3L,EAAO4L,GAAG,CAAC5D,KAAK,CAAGhI,EAAO4L,GAAG,CAACC,MAAM,CAAG7L,EAAOiD,KAAK,CAACK,MAAM,CAAE,GAChF,EAgGIwI,UAhEJ,SAAqC9L,CAAM,CAAEqD,CAAI,EAC7C,IAAM0I,EAAW,CAAC/L,EAAO9B,OAAO,CAAC6N,QAAQ,CAAEiC,EAAWhO,EAAO9B,OAAO,CAAC8P,QAAQ,CAAEC,EAAQ5K,EAAK4K,KAAK,CAAEC,EAAQ7K,EAAK6K,KAAK,CAErHC,EAAa,AAAC9K,CAAAA,EAAKnE,KAAK,CAAGmE,EAAK2H,KAAK,CACjCiD,CAAI,EAAKlC,EAAWqC,EAAa,AAAC/K,CAAAA,EAAKlE,KAAK,CAAGkE,EAAK6H,KAAK,CACzDgD,CAAI,EAAKnC,EAAWpM,EAAMD,KAAKC,GAAG,CAAE0O,EAAQ1O,EAAIwO,GAAcA,CAAAA,GAAa,CAAA,EAC/EG,EAAQ3O,EAAIyO,GAAcA,CAAAA,GAAa,CAAA,EAEvC7O,EAAQ8O,EAAQ3O,KAAKuM,GAAG,CAAC+B,EAAUtO,KAAKC,GAAG,CAACwO,IAAa3O,EAAQ8O,EAAQ5O,KAAKuM,GAAG,CAAC+B,EAAUtO,KAAKC,GAAG,CAACyO,GAErG/K,CAAAA,EAAK4K,KAAK,CAAG5K,EAAKnE,KAAK,CAAGmE,EAAK2H,KAAK,CACpC3H,EAAK6K,KAAK,CAAG7K,EAAKlE,KAAK,CAAGkE,EAAK6H,KAAK,CAEpC7H,EAAKnE,KAAK,EAAIK,EACd8D,EAAKlE,KAAK,EAAIK,EACd6D,EAAK1B,WAAW,CAAG3B,EAAOgM,YAAY,CAAC,CACnCnD,EAAGtJ,EACH+F,EAAG9F,CACP,EACJ,EA8CI0M,UA/BJ,SAAqC7I,CAAI,CAAEqH,CAAK,CAAEC,CAAU,EACxD,IAAM4D,EAAS7D,EAAQ,IAAI,CAACqD,eAAe,CAAG1K,EAAK+C,IAAI,CAAG/C,EAAK4H,MAAM,AAChE5H,CAAAA,EAAKtE,aAAa,GACnBsE,EAAKnE,KAAK,EAAIyL,EAAW9B,CAAC,CAAG0F,EAC7BlL,EAAKlE,KAAK,EAAIwL,EAAWrF,CAAC,CAAGiJ,EAErC,EA0BIpC,uBAhBJ,SAAkDnQ,CAAC,CAAEoP,CAAC,EAElD,MAAO,AAACA,CAAAA,EAAIpP,CAAAA,EAAKA,EAAKoP,CAAAA,EAAIpP,EAAI,EAAI,CAAA,CACtC,CAcA,EAkBM,CAAEwS,IAAAA,CAAG,CAAE,CAAIvR,IAIX,CAAEwR,MAAAA,CAAK,CAAEjM,QAASkM,CAAiC,CAAEC,WAAAA,CAAU,CAAEC,UAAAA,CAAS,CAAEhM,KAAMiM,CAA8B,CAAE,CAAI5R,GAY5H,OAAM6R,GACFlG,aAAc,CAMV,IAAI,CAACgD,GAAG,CAAG,CAAC,EACZ,IAAI,CAACmD,WAAW,CAAG,EACnB,IAAI,CAACC,gBAAgB,CAAG,CAAA,EACxB,IAAI,CAACC,KAAK,CAAG,EAAE,CACf,IAAI,CAAChM,KAAK,CAAG,EAAE,CACf,IAAI,CAACjF,MAAM,CAAG,EAAE,CAChB,IAAI,CAACkR,UAAU,CAAG,CAAA,CACtB,CACA,OAAOxQ,QAAQC,CAAU,CAAE,CACvBqD,EAA8BtD,OAAO,CAACC,GACtCqD,EAA8BC,YAAY,CAACkN,KAAK,CAAG3E,EACnDxI,EAA8BC,YAAY,CAACmN,MAAM,CAAGtB,EACpD9L,EAA8BE,OAAO,CAAC,uBAAuB,CACzD4M,EACR,CACAO,KAAKnR,CAAO,CAAE,CACV,IAAI,CAACA,OAAO,CAAGA,EACf,IAAI,CAAC+E,KAAK,CAAG,EAAE,CACf,IAAI,CAACgM,KAAK,CAAG,EAAE,CACf,IAAI,CAACjR,MAAM,CAAG,EAAE,CAChB,IAAI,CAAC4N,GAAG,CAAG,CACP/C,EAAG,EACHvD,EAAG,EACH0C,MAAO,EACP6D,OAAQ,CACZ,EACA,IAAI,CAACyD,mBAAmB,CAAC,CAAA,GACzB,IAAI,CAACC,WAAW,CACZvN,EAA8BC,YAAY,CAAC/D,EAAQqR,WAAW,CAAC,CACnE,IAAI,CAACrP,gBAAgB,CAAGhC,EAAQgC,gBAAgB,CAChD,IAAI,CAACsP,eAAe,CAAGX,EAA+B3Q,EAAQsR,eAAe,CAAE,IAAI,CAACD,WAAW,CAACpE,uBAAuB,EACvH,IAAI,CAACsE,cAAc,CAAGZ,EAA+B3Q,EAAQuR,cAAc,CAAE,IAAI,CAACF,WAAW,CAACpD,sBAAsB,EACpH,IAAI,CAACuD,aAAa,CAAGxR,EAAQwR,aAAa,AAC9C,CACAzO,iBAAiB0O,CAAM,CAAE,CACrB,IAAI,CAACzP,gBAAgB,CAAG2O,EAA+Bc,EAAQ,IAAI,CAACzR,OAAO,CAACgC,gBAAgB,CAChG,CACAC,OAAQ,CACJ,IAAqBnC,EAAS,IAAI,CAACA,MAAM,CAAEE,EAAU,IAAI,CAACA,OAAO,AACjE8B,CADe,IAAI,CACZ+O,WAAW,CAAG,EACrB/O,AAFe,IAAI,CAEZ4P,MAAM,CAAG5R,CAAM,CAAC,EAAE,EAAIA,CAAM,CAAC,EAAE,CAAC4R,MAAM,EAAI,EAAE,CACnD5P,AAHe,IAAI,CAGZrC,KAAK,CAAGK,CAAM,CAAC,EAAE,EAAIA,CAAM,CAAC,EAAE,CAACL,KAAK,CACvCqC,AAJW,IAAI,CAIRgP,gBAAgB,GACvBhP,AALW,IAAI,CAKR6P,aAAa,GAEpB7R,EAAO+B,OAAO,CAAC,SAAU+P,CAAC,EACtBA,EAAEC,iBAAiB,CAAG,CAAA,EACtBD,EAAE/N,MAAM,EACZ,IAEJ/B,AAZe,IAAI,CAYZgQ,IAAI,GACXhQ,AAbe,IAAI,CAaZiQ,eAAe,CAAC/R,GACnB8B,AAdW,IAAI,CAcRE,gBAAgB,EACvBF,AAfW,IAAI,CAeR8B,IAAI,EAEnB,CACAA,MAAO,CACH,IAAwBoO,EAAY,IAAI,CAAClS,MAAM,CAO/C,IAAK,IAAMmS,KALX,IAAI,CAACpB,WAAW,GACW,eAAvB,IAAI,CAACW,aAAa,GAClB,IAAI,CAACU,cAAc,GACnB,IAAI,CAACC,QAAQ,CAAC9C,sBAAsB,IAEhB,IAAI,CAACqC,MAAM,EAAI,EAAE,EACrCU,AARc,IAAI,AAQT,CAACH,EAAY,SAAS,CAAC,IAAI,CAACxO,WAAW,EAQpD,GALA,IAAI,CAAC4O,WAAW,GAEhB,IAAI,CAAC5O,WAAW,CAAG,IAAI,CAAC6O,QAAQ,CAAC,IAAI,CAACC,gBAAgB,CAAE,IAAI,CAAC1C,eAAe,CAAE,IAAI,CAACgB,WAAW,EAC9F,IAAI,CAAC2B,qBAAqB,CAAG,IAAI,CAACC,iBAAiB,CACnD,IAAI,CAACA,iBAAiB,CAAG,IAAI,CAACC,oBAAoB,GAC9C,IAAI,CAAC1Q,gBAAgB,CAAE,CACvB,IAAK,IAAMlC,KAAUkS,EAEblS,EAAOL,KAAK,EACZK,EAAO+D,MAAM,EAGjB,CAAA,IAAI,CAACN,aAAa,IAClBC,SAAS,IAAI,CAACC,WAAW,GACzB,CAAC,IAAI,CAACC,QAAQ,IACV,IAAI,CAACsN,UAAU,EACfV,EAAIqC,oBAAoB,CAAC,IAAI,CAAC3B,UAAU,EAE5C,IAAI,CAACA,UAAU,CAAGV,EAAIsC,qBAAqB,CAAC,IAAM,IAAI,CAAChP,IAAI,MAG3D,IAAI,CAACoN,UAAU,CAAG,CAAA,EAClB,IAAI,CAAClR,MAAM,CAAC+B,OAAO,CAAC,AAAC+P,IACjBlB,EAAUkB,EAAG,kBACjB,GAER,CACJ,CACA1O,MAAO,CACC,IAAI,CAAC8N,UAAU,EACfV,EAAIqC,oBAAoB,CAAC,IAAI,CAAC3B,UAAU,CAEhD,CACA6B,QAAQlI,CAAC,CAAEvD,CAAC,CAAE0L,CAAC,CAAEC,CAAC,CAAE,CAChB,IAAI,CAACrF,GAAG,CAAG,CACPtD,KAAMO,EACN+D,IAAKtH,EACL0C,MAAOgJ,EACPnF,OAAQoF,CACZ,CACJ,CACAjB,MAAO,CAGH,IAAI,CAAC5E,CAAC,CAAG,IAAI,CAAClN,OAAO,CAACgT,UAAU,EAAI,IAAI,CAAC3B,WAAW,CAAC7D,IAAI,CAAC,IAAI,CAClE,CACAyF,wBAAwBC,CAAQ,CAAEC,CAAU,CAAE,CAC1C,IAAK,IAAMC,KAAWF,EACkB,KAAhCC,EAAWzH,OAAO,CAAC0H,IACnBD,EAAWtM,IAAI,CAACuM,EAG5B,CACA5J,4BAA4B4J,CAAO,CAAED,CAAU,CAAE,CAC7C,IAAM7M,EAAQ6M,EAAWzH,OAAO,CAAC0H,EACnB,CAAA,KAAV9M,GACA6M,EAAWxH,MAAM,CAACrF,EAAO,EAEjC,CACA+M,OAAQ,CACJ,IAAI,CAACtO,KAAK,CAACK,MAAM,CAAG,EACpB,IAAI,CAAC2L,KAAK,CAAC3L,MAAM,CAAG,EACpB,IAAI,CAACtF,MAAM,CAACsF,MAAM,CAAG,EACrB,IAAI,CAAC2M,eAAe,EACxB,CACAA,iBAAkB,CACd,IAAI,CAACuB,UAAU,CAAG,CAAA,EAClB,IAAI,CAACb,iBAAiB,CAAG,EACzB,IAAI,CAACc,gBAAgB,GACrB,IAAI,CAACC,cAAc,GACnB,IAAI,CAACC,kBAAkB,EAC3B,CACA1R,mBAAoB,CACX,IAAI,CAACiP,UAAU,CAoBhB,IAAI,CAACe,eAAe,IAjBpB,IAAI,CAACX,mBAAmB,CAAC,CAAA,GAEpB,IAAI,CAACpP,gBAAgB,CAKtB,IAAI,CAACC,KAAK,GAHV,IAAI,CAACsR,gBAAgB,CAAC,GAKtB,IAAI,CAAC9T,KAAK,EACV,IAAI,CAACA,KAAK,CAACyC,MAAM,GAGrB,IAAI,CAACkP,mBAAmB,CAAC,CAAA,GAMjC,CACAmC,iBAAiBhQ,CAAa,CAAE,CAC5B,IAAI,CAACA,aAAa,CAAGoN,EAA+BpN,EAAe,IAAI,CAACvD,OAAO,CAACuD,aAAa,CACjG,CACAiQ,gBAAiB,CACb,IAAI,CAAC/P,WAAW,CAAG,IAAI,CAAC8O,gBAAgB,CACpC/Q,KAAKkS,IAAI,CAAC,IAAI,CAAC3O,KAAK,CAACK,MAAM,CACnC,CACAqO,oBAAqB,CACjB,IAAI,CAAC5D,eAAe,CAAG,IAAI,CAAC0C,gBAAgB,CACvC,CAAA,IAAI,CAACvS,OAAO,CAACuD,aAAa,CAAG,CAAA,CACtC,CACA6N,oBAAoBK,CAAM,CAAE,CACxB,IAAI,CAACX,gBAAgB,CAAGW,CAC5B,CACAS,gBAAiB,CACb,IAAI,CAACC,QAAQ,CAAG,IAAIjD,EAAsB,IAAI,CAACxB,GAAG,CAACtD,IAAI,CAAE,IAAI,CAACsD,GAAG,CAACgB,GAAG,CAAE,IAAI,CAAChB,GAAG,CAAC5D,KAAK,CAAE,IAAI,CAAC4D,GAAG,CAACC,MAAM,EACtG,IAAI,CAACwE,QAAQ,CAAC5C,WAAW,CAAC,IAAI,CAACxK,KAAK,CACxC,CACA4M,eAAgB,CACZ,IAAMgC,EAAmB,IAAI,CAAC3T,OAAO,CAAC2T,gBAAgB,CACtD,GAAIlD,EAAWkD,GAEX,IAAK,IAAMxO,KADXwO,EAAiBhV,IAAI,CAAC,IAAI,EACP,IAAI,CAACoG,KAAK,EACpByL,EAAkCrL,EAAK4K,KAAK,GAC7C5K,CAAAA,EAAK4K,KAAK,CAAG5K,EAAKnE,KAAK,AAAD,EAErBwP,EAAkCrL,EAAK6K,KAAK,GAC7C7K,CAAAA,EAAK6K,KAAK,CAAG7K,EAAKlE,KAAK,AAAD,EAE1BkE,EAAK2H,KAAK,CAAG,EACb3H,EAAK6H,KAAK,CAAG,MAGZ2G,AAAqB,WAArBA,EACL,IAAI,CAACC,oBAAoB,GAGzB,IAAI,CAACC,kBAAkB,EAE/B,CACAD,sBAAuB,KAgCfzO,EA/BJ,IAAMuI,EAAM,IAAI,CAACA,GAAG,CAAE3I,EAAQ,IAAI,CAACA,KAAK,CAAkC+O,EAAQ,EAAItS,KAAKuS,EAAE,CAArChP,CAAAA,EAAMK,MAAM,CAAG,CAAA,EAAsC4O,EAAYjP,EAAMkP,MAAM,CAAC,SAAU9O,CAAI,EAChJ,OAAOA,AAAwB,IAAxBA,EAAKO,OAAO,CAACN,MAAM,AAC9B,GAAI8O,EAAe,CAAC,EAAG9L,EAAS,IAAI,CAACpI,OAAO,CAACmU,qBAAqB,CAAEC,EAAa,AAACjP,IAC9E,IAAK,IAAMqC,KAAQrC,EAAKQ,SAAS,EAAI,EAAE,CAC9BuO,CAAY,CAAC1M,EAAK3B,MAAM,CAACc,EAAE,CAAC,GAC7BuN,CAAY,CAAC1M,EAAK3B,MAAM,CAACc,EAAE,CAAC,CAAG,CAAA,EAC/B0N,EAAYxN,IAAI,CAACW,EAAK3B,MAAM,EAC5BuO,EAAW5M,EAAK3B,MAAM,EAGlC,EACIwO,EAAc,EAAE,CAIpB,IAAK,IAAMC,KAAYN,EACnBK,EAAYxN,IAAI,CAACyN,GACjBF,EAAWE,GAGf,GAAKD,EAAYjP,MAAM,CAKnB,IAAK,IAAMD,KAAQJ,EACmB,KAA9BsP,EAAY3I,OAAO,CAACvG,IACpBkP,EAAYxN,IAAI,CAAC1B,QANzBkP,EAActP,EAalB,IAAK,IAAI8C,EAAI,EAAG0M,EAAOF,EAAYjP,MAAM,CAAEyC,EAAI0M,EAAM,EAAE1M,EAEnD1C,AADAA,CAAAA,EAAOkP,CAAW,CAACxM,EAAE,AAAD,EACf7G,KAAK,CAAGmE,EAAK4K,KAAK,CAAGY,EAA+BxL,EAAKnE,KAAK,CAAE0M,EAAI5D,KAAK,CAAG,EAAI1B,EAAS5G,KAAKgT,GAAG,CAAC3M,EAAIiM,IAC3G3O,EAAKlE,KAAK,CAAGkE,EAAK6K,KAAK,CAAGW,EAA+BxL,EAAKlE,KAAK,CAAEyM,EAAIC,MAAM,CAAG,EAAIvF,EAAS5G,KAAKiT,GAAG,CAAC5M,EAAIiM,IAC5G3O,EAAK2H,KAAK,CAAG,EACb3H,EAAK6H,KAAK,CAAG,CAErB,CACA6G,oBAAqB,KAYb1O,EAXJ,IAAMuI,EAAM,IAAI,CAACA,GAAG,CAAE3I,EAAQ,IAAI,CAACA,KAAK,CAAE2P,EAAc3P,EAAMK,MAAM,CAAG,EAMvEuP,EAAW,AAAChX,IACR,IAAIiX,EAAOjX,EAAIA,EAAI6D,KAAKuS,EAAE,CAE1B,OADAa,EAAcpT,KAAKqT,KAAK,CAACD,EAE7B,EAGA,IAAK,IAAI/M,EAAI,EAAG0M,EAAOxP,EAAMK,MAAM,CAAEyC,EAAI0M,EAAM,EAAE1M,EAE7C1C,AADAA,CAAAA,EAAOJ,CAAK,CAAC8C,EAAE,AAAD,EACT7G,KAAK,CAAGmE,EAAK4K,KAAK,CAAGY,EAA+BxL,EAAKnE,KAAK,CAAE0M,EAAI5D,KAAK,CAAG6K,EAAS9M,IAC1F1C,EAAKlE,KAAK,CAAGkE,EAAK6K,KAAK,CAAGW,EAA+BxL,EAAKlE,KAAK,CAAEyM,EAAIC,MAAM,CAAGgH,EAASD,EAAc7M,IACzG1C,EAAK2H,KAAK,CAAG,EACb3H,EAAK6H,KAAK,CAAG,CAErB,CACAR,MAAMvE,CAAI,CAAE,GAAG1C,CAAI,CAAE,CACjB,IAAI,CAAC8L,WAAW,CAACpJ,EAAK,CAACjD,KAAK,CAAC,IAAI,CAAEO,EACvC,CACAuP,kBAAmB,CACf,IAAI,CAACC,aAAa,GAClB,IAAI,CAACvI,KAAK,CAAC,aACf,CACAuI,eAAgB,CACZ,IAAIC,EAAa,EAAGC,EAAK,EAAGC,EAAK,EACjC,IAAK,IAAM/P,KAAQ,IAAI,CAACJ,KAAK,CACzBkQ,GAAM9P,EAAKnE,KAAK,CAAGmE,EAAK+C,IAAI,CAC5BgN,GAAM/P,EAAKlE,KAAK,CAAGkE,EAAK+C,IAAI,CAC5B8M,GAAc7P,EAAK+C,IAAI,CAQ3B,OANA,IAAI,CAACiF,UAAU,CAAG,CACdxC,EAAGsK,EACH7N,EAAG8N,EACH7H,QAAS4H,EAAKD,EACd1H,QAAS4H,EAAKF,CAClB,EACO,IAAI,CAAC7H,UAAU,AAC1B,CACAgI,uBAAuBhQ,CAAI,CAAEiQ,CAAQ,CAAE,KAE/BC,EAAU7I,EADd,IAAMC,EAAa,IAAI,CAAC6I,SAAS,CAACnQ,EAAMiQ,GAAW1I,EAAY,IAAI,CAACoB,YAAY,CAACrB,GAwBjF,OAtBItH,IAASiQ,GAAY1I,AAAc,IAAdA,IACjB0I,EAAS/G,UAAU,CAEf+G,EAAS9G,OAAO,CAAG5B,EACnB,IAAI,CAAC1M,OAAO,CAACuV,KAAK,EAClB7I,AAAc,IAAdA,GAEAF,EAAQ,IAAI,CAAC+E,cAAc,CAAC7E,EAAW,IAAI,CAACQ,CAAC,EAC7C,IAAI,CAACV,KAAK,CAAC,YAAarH,EAAMqH,EAAQ4I,EAASlN,IAAI,CAAEuE,EAAYC,GACjE2I,EAAW,CAAA,GAIXA,EAAW,CAAA,GAKf7I,EAAQ,IAAI,CAAC+E,cAAc,CAAC7E,EAAW,IAAI,CAACQ,CAAC,EAC7C,IAAI,CAACV,KAAK,CAAC,YAAarH,EAAMqH,EAAQ4I,EAASlN,IAAI,CAAEuE,EAAYC,KAGlE2I,CACX,CACAG,iBAAkB,CACd,GAAI,AAAuB,eAAvB,IAAI,CAAChE,aAAa,CAClB,IAAK,IAAMrM,KAAQ,IAAI,CAACJ,KAAK,CACzB,IAAI,CAACoN,QAAQ,CAAC7C,kBAAkB,CAAC,KAAM,AAAC8F,GAAc,IAAI,CAACD,sBAAsB,CAAChQ,EAAMiQ,QAG3F,CACD,IAAI5I,EAAOE,EAAWD,EACtB,IAAK,IAAMtH,KAAQ,IAAI,CAACJ,KAAK,CACzB,IAAK,IAAM0Q,KAAW,IAAI,CAAC1Q,KAAK,CAG5BI,IAASsQ,GAIJtQ,EAAKtE,aAAa,GACnB4L,EAAa,IAAI,CAAC6I,SAAS,CAACnQ,EAAMsQ,GAEhB,IADlB/I,CAAAA,EAAY,IAAI,CAACoB,YAAY,CAACrB,EAAU,IAEpCD,EAAQ,IAAI,CAAC+E,cAAc,CAAC7E,EAAW,IAAI,CAACQ,CAAC,EAC7C,IAAI,CAACV,KAAK,CAAC,YAAarH,EAAMqH,EAAQiJ,EAAQvN,IAAI,CAAEuE,EAAYC,IAKpF,CACJ,CACAgJ,kBAAmB,CACf,IAAIjJ,EAAYC,EAAWF,EAC3B,IAAK,IAAMhF,KAAQ,IAAI,CAACuJ,KAAK,CACrBvJ,EAAK5B,QAAQ,EAAI4B,EAAK3B,MAAM,GAC5B4G,EAAa,IAAI,CAAC6I,SAAS,CAAC9N,EAAK5B,QAAQ,CAAE4B,EAAK3B,MAAM,EAEpC,IADlB6G,CAAAA,EAAY,IAAI,CAACoB,YAAY,CAACrB,EAAU,IAEpCD,EAAQ,IAAI,CAAC8E,eAAe,CAAC5E,EAAW,IAAI,CAACQ,CAAC,EAC9C,IAAI,CAACV,KAAK,CAAC,aAAchF,EAAMgF,EAAOC,EAAYC,IAIlE,CACA2F,aAAc,CAEV,IAAK,IAAMlN,KADG,IAAI,CAACJ,KAAK,CAEhBI,EAAKtE,aAAa,GAGtB,IAAI,CAACwQ,WAAW,CAACzD,SAAS,CAAC,IAAI,CAAEzI,GACjC,IAAI,CAACwQ,aAAa,CAACxQ,EAAM,IAAI,CAACuI,GAAG,EAEjCvI,EAAK2H,KAAK,CAAG,EACb3H,EAAK6H,KAAK,CAAG,EAErB,CAMA2I,cAAcxQ,CAAI,CAAEuI,CAAG,CAAE,CACrB,IAAMtF,EAASjD,EAAKiD,MAAM,AAkC1BjD,CAAAA,EAAKnE,KAAK,CAAGuP,EAAMpL,EAAKnE,KAAK,CAAE0M,EAAItD,IAAI,CAAGhC,EAAQsF,EAAI5D,KAAK,CAAG1B,GAE9DjD,EAAKlE,KAAK,CAAGsP,EAAMpL,EAAKlE,KAAK,CAAEyM,EAAIgB,GAAG,CAAGtG,EAAQsF,EAAIC,MAAM,CAAGvF,EAClE,CAMAkK,SAAS7O,CAAW,CAAEmS,CAAe,CAAE/E,CAAW,CAAE,CAehD,OAAOpN,EAAcmS,EAAkB/E,CAC3C,CACAnN,UAAW,CACP,OAAOlC,AAC2B,KAD3BA,KAAKC,GAAG,CAAC,IAAI,CAACgR,iBAAiB,CAClC,IAAI,CAACD,qBAAqB,GAAe,IAAI,CAAC/O,WAAW,EAAI,CACrE,CACAiP,sBAAuB,CACnB,IAAImD,EAAQ,EACZ,IAAK,IAAM1Q,KAAQ,IAAI,CAACJ,KAAK,CACzB8Q,GAAS1Q,EAAK1B,WAAW,CAE7B,OAAOoS,CACX,CACA/H,aAAagI,CAAM,CAAE,CACjB,OAAOtU,KAAKkS,IAAI,CAACoC,EAAOnL,CAAC,CAAGmL,EAAOnL,CAAC,CAAGmL,EAAO1O,CAAC,CAAG0O,EAAO1O,CAAC,CAC9D,CACA2O,SAASC,CAAK,CAAEC,CAAK,CAAE,CACnB,IAAMC,EAAW,IAAI,CAACZ,SAAS,CAACU,EAAOC,GACvC,OAAO,IAAI,CAACnI,YAAY,CAACoI,EAC7B,CACAZ,UAAUU,CAAK,CAAEC,CAAK,CAAE,CACpB,IAAME,EAAQH,EAAMhV,KAAK,CAAGiV,EAAMjV,KAAK,CAAEoV,EAAQJ,EAAM/U,KAAK,CAAGgV,EAAMhV,KAAK,CAC1E,MAAO,CACH0J,EAAGwL,EACH/O,EAAGgP,EACHC,KAAM7U,KAAKC,GAAG,CAAC0U,GACfG,KAAM9U,KAAKC,GAAG,CAAC2U,EACnB,CACJ,CACJ,CAgBA,GAAM,CAAE3R,MAAO8R,EAA+B,CAAEC,YAAAA,EAAW,CAAE,CAAIzX,IAE3D,CAAE0X,WAAAA,EAAU,CAAE,CAAI1X,IAsElB,CAAE2X,QAAAA,EAAO,CAAE,CAAI3X,IACf,CAAEI,SAAUwX,EAAiB,CAAElS,MAAOmS,EAAc,CAAEC,UAAAA,EAAS,CAAEvS,QAASwS,EAAgB,CAAEvS,OAAQwS,EAAe,CAAE,CAAIhY,IAyB/H,SAASiY,GAAYhM,CAAI,CAAEiM,CAAe,EAEtCA,EAAkBL,GAAe,CAAA,EAAM,CACnCM,QAAS,CAAA,EACTC,WAAY,CACRC,GAAI,GACJC,YAAa,MACbC,WAAY,QAChB,CACJ,EAAGL,GACH,IAAMM,EAAM,IAAI,CAACtL,QAAQ,CAACsL,GAAG,CAAEC,EAAc,IAAI,CAACC,IAAI,EAAI,IAAI,CAAEC,EAAWF,EAAYE,QAAQ,CAAE,CAAEP,WAAAA,CAAU,CAAED,QAAAA,CAAO,CAAE,CAAGD,EAM3H,GALAjM,EAAOA,GAAS0M,GAAYA,EAAS1M,IAAI,CAErC0M,GACAA,EAASC,IAAI,GAEb3M,GAAQkM,EAAS,CACjB,IAAMS,EAAOhB,GAAkBa,EAAa,kBAAmB,AAACrX,IAC5D,GAAI6K,GAAQkM,EAAS,CAEjB,IAAIU,EAAa5M,EAAK3I,IAAI,CAAC,MACtBuV,GACD5M,EAAK3I,IAAI,CAAC,KAAMuV,EAAaf,MAGjC,IAAMgB,EAAc,CAGhBlN,EAAG,EACHvD,EAAG,CACP,EACI0P,GAAiBK,EAAWW,EAAE,IAC9BD,EAAYC,EAAE,CAAGX,EAAWW,EAAE,CAC9B,OAAOX,EAAWW,EAAE,EAEpBhB,GAAiBK,EAAWC,EAAE,IAC9BS,EAAYT,EAAE,CAAGD,EAAWC,EAAE,CAC9B,OAAOD,EAAWC,EAAE,EAExBI,EAAYnV,IAAI,CAACwV,GAEjB,IAAI,CAACxV,IAAI,CAAC,CAAE0V,UAAW,EAAG,GACtB,IAAI,CAACrK,GAAG,EACR,CAAA,IAAI,CAACA,GAAG,CAAG,IAAI,CAACA,GAAG,CAAC/I,OAAO,EAAC,EAGhC,IAAMqT,EAAW7X,EAAE4E,KAAK,CAAC8G,KAAK,CAAC,EAC/B1L,CAAAA,EAAE4E,KAAK,CAACK,MAAM,CAAG,EACjBjF,EAAE4E,KAAK,CAAC,EAAE,CAAG,CACTkT,QAAS,WACTd,WAAYJ,GAAgBI,EAAY,CACpC,cAAeA,EAAWG,UAAU,CACpCY,KAAM,CAAC,EAAEX,EAAI,CAAC,EAAEK,EAAW,CAAC,AAChC,GACAI,SAAAA,CACJ,CACJ,CACJ,EAEAR,CAAAA,EAAYE,QAAQ,CAAG,CAAE1M,KAAAA,EAAM2M,KAAAA,CAAK,CACxC,MAEIH,EAAYnV,IAAI,CAAC,CAAEyV,GAAI,EAAGV,GAAI,CAAE,GAChC,OAAOI,EAAYE,QAAQ,CAO/B,OALI,IAAI,CAACS,KAAK,GAEVX,EAAYY,SAAS,CAAG,GACxB,IAAI,CAACnM,QAAQ,CAACoM,SAAS,CAACb,IAErB,IAAI,AACf,CAWA,SAASc,GAAW3Y,CAAK,EACrB,IAAM4Y,EAAO5Y,EAAM4Y,IAAI,CAAEC,EAAK,IAAI,CAACpF,OAAO,EAAEqF,cAAc,YAC1D,GAAID,EAAI,CACJ,IAAME,EAAU,EAAE,CAAE,CAAEC,EAAAA,CAAC,CAAE5F,EAAAA,CAAC,CAAE,CAAG,IAAI,CAAC9G,QAAQ,CAAC2M,WAAW,CAAC,IAAI,CAACxF,OAAO,EAAGyF,EAAY9F,EAAI4F,EAAGG,EAAmB,AAAIC,OAAO,gEAEtG,KAAMC,EAAQR,EAC5BS,SAAS,CACTC,OAAO,CAACJ,EAAkB,IAC1BK,KAAK,CAAC,sCAAuCC,EAAaJ,EAAM5T,MAAM,CAIrEiU,EAAqB,CAACC,EAAWC,KACnC,GAAM,CAAE5O,EAAAA,CAAC,CAAEvD,EAAAA,CAAC,CAAE,CAAGmS,EAAgBC,EAAW,AAAChB,CAAAA,EAAGiB,iBAAiB,CAACH,GAAa,EAAC,EAAK5C,GAASgD,EAASlY,KAAKgT,GAAG,CAACgF,GAAWG,EAASnY,KAAKiT,GAAG,CAAC+E,GAC7I,MAAO,CACH,CACI7O,EAAIkO,EAAYa,EAChBtS,EAAIyR,EAAYc,EACnB,CACD,CACIhP,EAAIgO,EAAIe,EACRtS,EAAIuR,EAAIgB,EACX,CACJ,AACL,EACA,IAAK,IAAI9R,EAAI,EAAG+R,EAAY,EAAGA,EAAYR,EAAYQ,IAAa,CAChE,IAA+BC,EAAUC,AAA5Bd,CAAK,CAACY,EAAU,CAAiBxU,MAAM,CACpD,IAAK,IAAI2U,EAAgB,EAAGA,EAAgBF,EAASE,GAAiB,EAClE,GAAI,CACA,IAAMC,EAAgBnS,EAClBkS,EACAH,EAAY,CAACK,EAAOC,EAAM,CAAGb,EAAmBW,EAAcxB,EAAG2B,sBAAsB,CAACH,GACxFD,AAAkB,CAAA,IAAlBA,GACArB,EAAQ7R,IAAI,CAACqT,GACbxB,EAAQ7R,IAAI,CAACoT,KAGK,IAAdL,GACAlB,EAAQ0B,OAAO,CAACF,GAEhBN,IAAcR,EAAa,GAC3BV,EAAQ7R,IAAI,CAACoT,GAGzB,CACA,MAAO9Z,EAAG,CAGN,KACJ,CAEJ0H,GAAKgS,EAAU,EACf,GAAI,CACA,IAAMG,EAAenS,EAAI+R,EAAWS,EAAU7B,EAAG8B,oBAAoB,CAACN,GAAe,CAACC,EAAOC,EAAM,CAAGb,EAAmBW,EAAcK,GACvI3B,EAAQ0B,OAAO,CAACF,GAChBxB,EAAQ0B,OAAO,CAACH,EACpB,CACA,MAAO9Z,EAAG,CAGN,KACJ,CACJ,CAEIuY,EAAQtT,MAAM,EACdsT,EAAQ7R,IAAI,CAAC6R,CAAO,CAAC,EAAE,CAAC7M,KAAK,IAEjC0M,EAAKG,OAAO,CAAGA,CACnB,CACA,OAAOH,CACX,CAWA,SAASgC,GAAa5a,CAAK,EACvB,IAAM6a,EAAe7a,EAAM6a,YAAY,CAAE5a,EAAQD,EAAMC,KAAK,CAAEqX,EAAmBuD,CAAY,CAAC5a,EAAMoI,YAAY,CAAG,WAAW,EAC1HwS,EAAa9C,QAAQ,CACrBT,GAAmB,CAACuD,EAAaC,OAAO,GACxC,IAAI,CAACzD,WAAW,CAACpX,EAAM8a,gBAAgB,GAAG,IAAI,GAAK9a,EAAMoG,OAAO,CAAEiR,GAC9DrX,EAAM+a,aAAa,EACnB,CAAC1D,EAAgBC,OAAO,EAExBtX,CAAAA,EAAM+a,aAAa,CAAI/a,EAAM+a,aAAa,CAAChW,OAAO,EAAE,EAGhE,CA+BA,GAAM,CAAEiW,KAAAA,EAAI,CAAE,CAAI7b,IAMZ,CAAEe,OAAQ+a,EAAM,CAAEC,YAAa,CAAEC,OAAQ,CAAEtc,UAAWuc,EAAW,CAAE,CAAElB,KAAM,CAAErb,UAAWwc,EAAS,CAAE,CAAE,CAAE,CAAI/W,IAE3G,CAAEgX,eAAgBC,EAAiC,CAAEC,oBAAqBC,EAAsC,CAAE,CApQ3F,CACzBH,eArBJ,WACI,IAAqBI,EAAYxb,AAAlB,IAAI,CAAqBE,OAAO,CAACmL,UAAU,CAC1D,GAAI,CAACrL,AADU,IAAI,CACPyb,eAAe,CAAE,CACzB,IAAMA,EAAkB,IAAI,CAACC,mBAAmB,GAWhD,MARI,CAAC1b,AALM,IAAI,CAKHL,KAAK,CAACiJ,UAAU,EAAI4S,GAAWG,OACvCF,EAAgBrS,GAAG,CAACoS,EAAUG,KAAK,EAGvCF,EAAgBlZ,IAAI,CAAC,CAAE6H,QAAS,CAAE,GAC9BpK,AAVO,IAAI,CAUJ4b,OAAO,EACdH,EAAgBI,IAAI,GAEjBJ,CACX,CAGA,OADAzb,AAhBe,IAAI,CAgBZyb,eAAe,CAAClZ,IAAI,CAACkU,GAAgC,CAAErM,QAAS,CAAE,EAAG,IAAI,CAAC0R,UAAU,CAAC,iBACrF9b,AAjBQ,IAAI,CAiBLyb,eAAe,AACjC,EAGIH,oBA5CJ,WACI,IAAME,EAAY,IAAI,CAACtb,OAAO,CAACmL,UAAU,AAKrC,CAACmQ,GAAWO,OACX,IAAI,CAAC7b,OAAO,CAAC8b,eAAe,EAAE9Z,iBAI/BwU,GAAY,KACR,IAAI,CAACuF,eAAe,CAAG,CAAA,CAC3B,EAAGT,EAAY7E,GAAW6E,EAAUpV,SAAS,EAAE2V,KAAK,CAAG,GALvD,IAAI,CAACE,eAAe,CAAG,CAAA,CAO/B,CA8BA,EAmQM,CAAE5c,SAAU6c,EAA2B,CAAE1X,QAAS2X,EAA0B,CAAE1X,OAAQ2X,EAAyB,CAAEzX,MAAO0X,EAAwB,CAAEzX,KAAM0X,EAAuB,CAAE,CAAIrd,IAE3Lsd,AAlCiB,CAAA,CACb7b,QATJ,SAA0B8b,CAAe,EACrC3F,GAAkB2F,EAAiB,eAAgBhE,IACnD3B,GAAkB2F,EAAiB,wBAAyB/B,IAC5D,IAAMgC,EAAkBD,EAAgB7d,SAAS,AAC5C8d,CAAAA,EAAgBvF,WAAW,EAC5BuF,CAAAA,EAAgBvF,WAAW,CAAGA,EAAU,CAEhD,CAGA,CAAA,EAgCoBxW,OAAO,CAAEvB,IAa7B,OAAMud,WAA2B3B,GAC7BnQ,aAAc,CAMV,KAAK,IAAIzF,WACT,IAAI,CAAC8W,eAAe,CAAG,CAAA,CAC3B,CAMA,OAAOvb,QAAQC,CAAU,CAAE,CACvBF,EAA4BC,OAAO,CAACC,GACpCgc,AAnWqE7L,GAmW9BpQ,OAAO,CAACC,EACnD,CAiBAic,aAAc,CACV,IAAMC,EAAgB,IAAI,CAAC3c,OAAO,CAAC8b,eAAe,CAAEc,EAAe,IAAI,CAACnd,KAAK,CAACO,OAAO,CAACP,KAAK,CACvFqC,EAAQ+a,EAAsB,IAAI,CAACpd,KAAK,CAACod,mBAAmB,CAAEtb,EAAqB,IAAI,CAAC9B,KAAK,CAAC8B,kBAAkB,AAC/G,CAAA,IAAI,CAACma,OAAO,GAGZmB,IACD,IAAI,CAACpd,KAAK,CAACod,mBAAmB,CAAGA,EAAsB,CAAC,EACxD,IAAI,CAACpd,KAAK,CAAC8B,kBAAkB,CAAGA,EAAqB,EAAE,EAE3DO,CAAAA,EAAS+a,CAAmB,CAACF,EAAcG,IAAI,CAAC,AAAD,IAE3CH,EAAc3a,gBAAgB,CAC1B,AAACia,GAA2BW,EAAaG,SAAS,EAE9C,CAACH,EAAaG,SAAS,CADvBJ,EAAc3a,gBAAgB,CAEtC6a,CAAmB,CAACF,EAAcG,IAAI,CAAC,CAAGhb,EACtC,IAAIgC,EAA8BE,OAAO,CAAC2Y,EAAcG,IAAI,CAAC,CACjEhb,EAAOqP,IAAI,CAACwL,GACZpb,EAAmBoK,MAAM,CAAC7J,EAAOwE,KAAK,CAAE,EAAGxE,IAE/C,IAAI,CAACA,MAAM,CAAGA,EACdA,EAAO+Q,OAAO,CAAC,EAAG,EAAG,IAAI,CAACpT,KAAK,CAACud,SAAS,CAAE,IAAI,CAACvd,KAAK,CAACwd,UAAU,EAChEnb,EAAOmR,uBAAuB,CAAC,CAAC,IAAI,CAAC,CAAEnR,EAAOhC,MAAM,EACpDgC,EAAOmR,uBAAuB,CAAC,IAAI,CAAClO,KAAK,CAAEjD,EAAOiD,KAAK,EACvDjD,EAAOmR,uBAAuB,CAAC,IAAI,CAACnO,MAAM,CAAEhD,EAAOiP,KAAK,EAC5D,CAIApM,SAAU,CACF,IAAI,CAAC7C,MAAM,EACX,IAAI,CAACA,MAAM,CAAC0H,2BAA2B,CAAC,IAAI,CAAE,IAAI,CAAC1H,MAAM,CAAChC,MAAM,EAEpEgJ,EAAwBnE,OAAO,CAAChG,IAAI,CAAC,IAAI,CAC7C,CAMAue,gBAAiB,KAOTxF,EAJJ,GAAI,IAAI,CAACqE,eAAe,CACpB,OAEJ,IAAMT,EAAY,IAAI,CAACtb,OAAO,CAACmL,UAAU,CAErCmQ,GAAW5D,UACXA,CAAAA,EAAW4D,EAAU5D,QAAQ,AAAD,EAGhCmD,GAAOpc,SAAS,CAACye,cAAc,CAACve,IAAI,CAAC,IAAI,CAAE,IAAI,CAACoG,KAAK,EAEjDuW,GAAW6B,cAEX7B,CAAAA,EAAU5D,QAAQ,CAAG4D,EAAU6B,YAAY,AAAD,EAE9CtC,GAAOpc,SAAS,CAACye,cAAc,CAACve,IAAI,CAAC,IAAI,CAAE,IAAI,CAACiG,IAAI,EAEhD0W,GAAW5D,UACX4D,CAAAA,EAAU5D,QAAQ,CAAGA,CAAO,CAEpC,CAMArP,gBAAiB,CACb,IAAIlD,EAAM0C,EAYV,IAXAiB,EAAwBT,cAAc,CAACrD,KAAK,CAAC,IAAI,CAAEC,WAG/C,IAAI,CAACjF,OAAO,CAAC+E,KAAK,EAClB,IAAI,CAAC/E,OAAO,CAAC+E,KAAK,CAAClD,OAAO,CAAC,SAAUub,CAAW,EACvC,IAAI,CAAC9U,UAAU,CAAC8U,EAAYzW,EAAE,CAAC,EAChC,CAAA,IAAI,CAAC2B,UAAU,CAAC8U,EAAYzW,EAAE,CAAC,CAC3B,IAAI,CAACK,UAAU,CAACoW,EAAYzW,EAAE,CAAA,CAE1C,EAAG,IAAI,EAENkB,EAAI,IAAI,CAAC9C,KAAK,CAACK,MAAM,CAAG,EAAGyC,GAAK,EAAGA,IAEpC1C,AADAA,CAAAA,EAAO,IAAI,CAACJ,KAAK,CAAC8C,EAAE,AAAD,EACdkF,MAAM,CAAG5H,EAAKsE,SAAS,GAC5BtE,EAAKiD,MAAM,CAAGgU,GAAwBjX,EAAKgD,MAAM,EAAIhD,EAAKgD,MAAM,CAACC,MAAM,CAAE,IAAI,CAACpI,OAAO,CAACmI,MAAM,EAAI,IAAI,CAACnI,OAAO,CAACmI,MAAM,CAACC,MAAM,CAAE,GAC5HjD,EAAKlH,GAAG,CAAGkH,EAAK8C,IAAI,CAGf,IAAI,CAACK,UAAU,CAACnD,EAAKwB,EAAE,CAAC,EACzBxB,EAAKoG,MAAM,GAGnB,IAAI,CAAC3G,IAAI,CAAC/C,OAAO,CAAC,SAAU2F,CAAI,EAC5BA,EAAKQ,YAAY,CAAG,MACxB,GACA,IAAI,CAACqV,aAAa,EACtB,CAMAC,qBAAsB,CAClB,OAAO,IAAI,CAACvY,KAAK,EAAI,EAAE,AAC3B,CAOAsY,eAAgB,CACZ,IAAI,CAACtY,KAAK,CAAClD,OAAO,CAAC,SAAUsD,CAAI,CAAEmB,CAAK,EACpCnB,EAAKmB,KAAK,CAAGA,CACjB,EACJ,CAMA6K,KAAK1R,CAAK,CAAEO,CAAO,CAAE,CAsBjB,OArBA,KAAK,CAACmR,KAAK1R,EAAOO,GAClBqb,GAAuC1c,IAAI,CAAC,IAAI,EAChDqd,GAA4B,IAAI,CAAE,cAAe,KACzC,IAAI,CAACla,MAAM,EACX,IAAI,CAACA,MAAM,CAACoB,IAAI,EAExB,GACA8Y,GAA4B,IAAI,CAAE,cAAe,KAC7C,IAAI,CAACjX,KAAK,CAAClD,OAAO,CAAC,AAACsD,IACZA,GAAQA,EAAKrF,MAAM,EACnBqF,EAAKoY,YAAY,EAEzB,EACJ,GAIAvB,GAA4B,IAAI,CAAE,kBAAmB,WACjD,IAAI,CAACD,eAAe,CAAG,CAAA,EACvB,IAAI,CAACmB,cAAc,EACvB,GACO,IAAI,AACf,CAOAM,cAAc5d,CAAK,CAAE0F,CAAK,CAAE,CACxB,IAAMyF,EAAU8P,GAAOpc,SAAS,CAAC+e,aAAa,CAAC7e,IAAI,CAAC,IAAI,CAAEiB,EAAO0F,GAMjE,OAJK2W,GAA2Brc,EAAMqB,KAAK,GACvC8J,CAAAA,EAAQ3D,CAAC,CAAG,CAAA,EAEhB2D,EAAQJ,CAAC,CAAG,AAAC/K,CAAAA,EAAMoB,KAAK,EAAI,CAAA,EAAK,AAAC+J,CAAAA,EAAQjB,KAAK,EAAI,CAAA,EAAK,EACjDiB,CACX,CAKAG,aAAatL,CAAK,CAAE0F,CAAK,CAAE,CAEvB,IAAMmY,EAAanY,GAAS1F,GAASA,EAAM0F,KAAK,EAAI,SAAUoY,EAAe,IAAI,CAAC1d,OAAO,CAACuC,MAAM,CAACkb,EAAW,CACxG1S,EAAU8P,GAAOpc,SAAS,CAACyM,YAAY,CAACvM,IAAI,CAAC,IAAI,CAAEiB,EAAO6d,GAe9D,OAdI7d,GAAS,CAACA,EAAM6F,MAAM,GACtBsF,EAAUnL,EAAM+J,iBAAiB,GAE7B+T,GACA3S,CAAAA,EAAU,CAENhB,OAAQ2T,EAAaC,SAAS,EAAI5S,EAAQhB,MAAM,CAChDC,UAAY0T,EAAaE,aAAa,EAAI7S,EAAQf,SAAS,CAC3DE,QAASkS,GAAwBsB,EAAaG,WAAW,CAAE9S,EAAQb,OAAO,EAC1E,eAAgBwT,EAAaC,SAAS,EAClC5S,CAAO,CAAC,eAAe,AAC/B,CAAA,GAGDA,CACX,CAMAlH,QAAS,CACL,IAAqBiB,EAAShF,AAAf,IAAI,CAAkBgF,MAAM,CAAEjF,EAAaC,AAA3C,IAAI,CAA8CL,KAAK,CAACI,UAAU,CAAEsL,EAAa,EAAE,AAElGrL,CAFe,IAAI,CAEZgF,MAAM,CAAGhF,AAFD,IAAI,CAEIiF,KAAK,CAC5BkW,GAAUpX,MAAM,CAAClF,IAAI,CAAC,IAAI,EAC1BmB,AAJe,IAAI,CAIZgF,MAAM,CAAGA,EAChBA,EAAOjD,OAAO,CAAC,SAAUjC,CAAK,EACtBA,EAAMgG,QAAQ,EAAIhG,EAAMiG,MAAM,GAC9BjG,EAAMoM,UAAU,GAChBpM,EAAMkL,UAAU,GAExB,GACIjL,GAAcA,EAAWC,MAAM,GAXpB,IAAI,EAYfA,AAZW,IAAI,CAYR8B,UAAU,CAAC/B,GAElBC,AAdW,IAAI,CAcRL,KAAK,CAACqe,WAAW,EACxB,CAAChe,AAfU,IAAI,CAePE,OAAO,CAACmL,UAAU,CAAC4S,YAAY,GACvCje,AAhBW,IAAI,CAgBRiF,KAAK,CAACF,MAAM,CAAC/E,AAhBT,IAAI,CAgBYgF,MAAM,EAAEjD,OAAO,CAAC,SAAUsD,CAAI,EACjDA,EAAK6Y,SAAS,EACd7S,EAAWtE,IAAI,CAAC1B,EAAK6Y,SAAS,CAEtC,GACAle,AArBW,IAAI,CAqBRL,KAAK,CAACwe,qBAAqB,CAAC9S,GAE3C,CAMApF,SAAST,CAAK,CAAE4Y,CAAO,CAAE,CACjBA,GACA,IAAI,CAACpZ,MAAM,CAAG,IAAI,CAACC,KAAK,CAACF,MAAM,CAAC,IAAI,CAACD,IAAI,EACzCiW,GAAOpc,SAAS,CAACsH,QAAQ,CAACf,KAAK,CAAC,IAAI,CAAEC,WACtC,IAAI,CAACH,MAAM,CAAG,IAAI,CAACF,IAAI,EAGvBiW,GAAOpc,SAAS,CAACsH,QAAQ,CAACf,KAAK,CAAC,IAAI,CAAEC,WAGrC,IAAI,CAACnD,MAAM,CAACkP,UAAU,EAAK1L,GAC5B,IAAI,CAACzB,MAAM,EAEnB,CAKAsa,WAAY,CACR,IAAI,CAAC9V,cAAc,GACnB,IAAI,CAACqU,WAAW,GAChB,IAAI,CAAC3X,KAAK,CAAClD,OAAO,CAAC,SAAUsD,CAAI,EAE7BA,EAAKiZ,QAAQ,CAAG,CAAA,EAChBjZ,EAAKQ,SAAS,CAAC9D,OAAO,CAAC,SAAUjC,CAAK,EAClCA,EAAMye,SAAS,CAAG,OAElBze,EAAMwH,CAAC,CAAG,CACd,EACJ,EACJ,CACJ,CACAoV,GAAmB8B,cAAc,CAAGnC,GAAyBtB,GAAOyD,cAAc,CAp6E/C,CAC/BC,eAAgB,CAAA,EAMhBC,oBAAqB,CAAA,EACrBrW,OAAQ,CACJ+O,QAAS,CAAA,EACT3U,OAAQ,CAOJkc,SAAU,CAINvU,QAAS,GAMThE,UAAW,CAEPwY,SAAU,EACd,CACJ,CACJ,CACJ,EACAnc,OAAQ,CAOJkc,SAAU,CAINZ,YAAa,GAMb3X,UAAW,CAEPwY,SAAU,EACd,CACJ,CACJ,EAeAvT,WAAY,CAoBRwT,UAAW,WACP,OAAOC,OAAO,IAAI,CAAC3gB,GAAG,EAAI,GAC9B,EAmBA4gB,cAAe,WACX,OAAQ,IAAI,CAACjZ,QAAQ,CAACqC,IAAI,CACtB,OACA,IAAI,CAACpC,MAAM,CAACoC,IAAI,AACxB,EAYAkV,aAAc,CACVjG,QAAS,CAAA,CACb,EACAQ,SAAU,CACNR,QAAS,CAAA,CACb,EACAuE,MAAO,CACHqD,WAAY,gBAChB,EACAjD,MAAO,CAAA,EACP3V,UAAW,CACP2V,MAAO,GACX,CACJ,EAKArU,KAAM,CAiBFoB,MAAO,2BAIPkB,MAAO,CACX,EAKA7J,UAAW,CAAA,EACX6b,gBAAiB,CAiEbnI,iBAAkB,SAUlBQ,sBAAuB,EASvBnS,iBAAkB,CAAA,EAalBuT,MAAO,GAcPzF,SAAU,GAqBV0B,cAAe,OAOfsL,KAAM,uBAsBNzL,YAAa,QAOb9N,cAAe,IAQf6J,sBAAuB,MAKvBS,SAAU,KACd,EACAkR,aAAc,CAAA,CAClB,GA+jEA7C,GAA0BM,GAAmB/d,SAAS,CAAE,CACpD2F,WA/8EiEkF,EAg9EjE+B,QAAS,KAAK,EACd2T,YAAa,CAAA,EACbC,UAAW,KAAK,EAChBvN,OAAQ,CAAC,aAAc,YAAa,aAAa,CACjD3R,kBAAmB,CAAA,EACnBmf,YAAa,CAAA,EACbC,gBAAiB,CAAA,EACjBC,cAAe,CAAC,OAAQ,KAAK,CAC7BC,eAAgB,CAAA,EAChBC,cAAe,CAAC,QAAS,cAAe,kBAAkB,CAC1DpE,eAAgBC,GAChBoE,YAAa3E,GACb5T,WAAY8B,EAAwB9B,UAAU,CAC9CwY,YAAaxE,GAAYwE,WAAW,CACpCtf,YAAaK,EAA4BL,WAAW,CACpDE,YAAaG,EAA4BH,WAAW,CACpDE,UAAWC,EAA4BD,SAAS,CAChDsB,WAAYrB,EAA4BqB,UAAU,AACtD,GACAsC,IAA0Iub,kBAAkB,CAAC,eAAgBjD,IA+B7K,IAAMkD,GAAK3gB,IACX4gB,AA1BsEnD,GA0BtChc,OAAO,CAACkf,GAAEE,KAAK,EAClB,IAAM/gB,GAAqBE,IAG9C,OADYH,EAAoB,OAAU,AAE3C,CAAA"}
Hacked By AnonymousFox1.0, Coded By AnonymousFox