Hacked By AnonymousFox
{"version":3,"sources":["<anon>"],"sourcesContent":["/**\n * @license Highcharts JS v12.1.2 (2025-01-09)\n * @module highcharts/modules/marker-clusters\n * @requires highcharts\n *\n * Marker clusters module for Highcharts\n *\n * (c) 2010-2024 Wojciech Chmiel\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(require(\"highcharts\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"highcharts/modules/marker-clusters\", [[\"highcharts/highcharts\"]], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"highcharts/modules/marker-clusters\"] = factory(require(\"highcharts\"));\n\telse\n\t\troot[\"Highcharts\"] = factory(root[\"Highcharts\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE__944__) {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 944:\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__944__;\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!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return 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!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(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!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return 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\": function() { return /* binding */ marker_clusters_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__(944);\nvar highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default = /*#__PURE__*/__webpack_require__.n(highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_);\n;// ./code/es5/es-modules/Extensions/MarkerClusters/MarkerClusterDefaults.js\n/* *\n *\n * Marker clusters module.\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * Author: Wojciech Chmiel\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n * API Options\n *\n * */\n/**\n * Options for marker clusters, the concept of sampling the data\n * values into larger blocks in order to ease readability and\n * increase performance of the JavaScript charts.\n *\n * Note: marker clusters module is not working with `boost`\n * and `draggable-points` modules.\n *\n * The marker clusters feature requires the marker-clusters.js\n * file to be loaded, found in the modules directory of the download\n * package, or online at [code.highcharts.com/modules/marker-clusters.js\n * ](code.highcharts.com/modules/marker-clusters.js).\n *\n * @sample maps/marker-clusters/europe\n * Maps marker clusters\n * @sample highcharts/marker-clusters/basic\n * Scatter marker clusters\n * @sample maps/marker-clusters/optimized-kmeans\n * Marker clusters with colorAxis\n *\n * @product highcharts highmaps\n * @since 8.0.0\n * @optionparent plotOptions.scatter.cluster\n *\n * @private\n */\nvar cluster = {\n /**\n * Whether to enable the marker-clusters module.\n *\n * @sample maps/marker-clusters/basic\n * Maps marker clusters\n * @sample highcharts/marker-clusters/basic\n * Scatter marker clusters\n */\n enabled: false,\n /**\n * When set to `false` prevent cluster overlapping - this option\n * works only when `layoutAlgorithm.type = \"grid\"`.\n *\n * @sample highcharts/marker-clusters/grid\n * Prevent overlapping\n */\n allowOverlap: true,\n /**\n * Options for the cluster marker animation.\n * @type {boolean|Partial<Highcharts.AnimationOptionsObject>}\n * @default { \"duration\": 500 }\n */\n animation: {\n /** @ignore-option */\n duration: 500\n },\n /**\n * Zoom the plot area to the cluster points range when a cluster is clicked.\n */\n drillToCluster: true,\n /**\n * The minimum amount of points to be combined into a cluster.\n * This value has to be greater or equal to 2.\n *\n * @sample highcharts/marker-clusters/basic\n * At least three points in the cluster\n */\n minimumClusterSize: 2,\n /**\n * Options for layout algorithm. Inside there\n * are options to change the type of the algorithm, gridSize,\n * distance or iterations.\n */\n layoutAlgorithm: {\n /**\n * Type of the algorithm used to combine points into a cluster.\n * There are three available algorithms:\n *\n * 1) `grid` - grid-based clustering technique. Points are assigned\n * to squares of set size depending on their position on the plot\n * area. Points inside the grid square are combined into a cluster.\n * The grid size can be controlled by `gridSize` property\n * (grid size changes at certain zoom levels).\n *\n * 2) `kmeans` - based on K-Means clustering technique. In the\n * first step, points are divided using the grid method (distance\n * property is a grid size) to find the initial amount of clusters.\n * Next, each point is classified by computing the distance between\n * each cluster center and that point. When the closest cluster\n * distance is lower than distance property set by a user the point\n * is added to this cluster otherwise is classified as `noise`. The\n * algorithm is repeated until each cluster center not change its\n * previous position more than one pixel. This technique is more\n * accurate but also more time consuming than the `grid` algorithm,\n * especially for big datasets.\n *\n * 3) `optimizedKmeans` - based on K-Means clustering technique. This\n * algorithm uses k-means algorithm only on the chart initialization\n * or when chart extremes have greater range than on initialization.\n * When a chart is redrawn the algorithm checks only clustered points\n * distance from the cluster center and rebuild it when the point is\n * spaced enough to be outside the cluster. It provides performance\n * improvement and more stable clusters position yet can be used rather\n * on small and sparse datasets.\n *\n * By default, the algorithm depends on visible quantity of points\n * and `kmeansThreshold`. When there are more visible points than the\n * `kmeansThreshold` the `grid` algorithm is used, otherwise `kmeans`.\n *\n * The custom clustering algorithm can be added by assigning a callback\n * function as the type property. This function takes an array of\n * `processedXData`, `processedYData`, `processedXData` indexes and\n * `layoutAlgorithm` options as arguments and should return an object\n * with grouped data.\n *\n * The algorithm should return an object like that:\n * <pre>{\n * clusterId1: [{\n * x: 573,\n * y: 285,\n * index: 1 // point index in the data array\n * }, {\n * x: 521,\n * y: 197,\n * index: 2\n * }],\n * clusterId2: [{\n * ...\n * }]\n * ...\n * }</pre>\n *\n * `clusterId` (example above - unique id of a cluster or noise)\n * is an array of points belonging to a cluster. If the\n * array has only one point or fewer points than set in\n * `cluster.minimumClusterSize` it won't be combined into a cluster.\n *\n * @sample maps/marker-clusters/optimized-kmeans\n * Optimized K-Means algorithm\n * @sample highcharts/marker-clusters/kmeans\n * K-Means algorithm\n * @sample highcharts/marker-clusters/grid\n * Grid algorithm\n * @sample maps/marker-clusters/custom-alg\n * Custom algorithm\n *\n * @type {string|Function}\n * @see [cluster.minimumClusterSize](#plotOptions.scatter.cluster.minimumClusterSize)\n * @apioption plotOptions.scatter.cluster.layoutAlgorithm.type\n */\n /**\n * When `type` is set to the `grid`,\n * `gridSize` is a size of a grid square element either as a number\n * defining pixels, or a percentage defining a percentage\n * of the plot area width.\n *\n * @type {number|string}\n */\n gridSize: 50,\n /**\n * When `type` is set to `kmeans`,\n * `iterations` are the number of iterations that this algorithm will be\n * repeated to find clusters positions.\n *\n * @type {number}\n * @apioption plotOptions.scatter.cluster.layoutAlgorithm.iterations\n */\n /**\n * When `type` is set to `kmeans`,\n * `distance` is a maximum distance between point and cluster center\n * so that this point will be inside the cluster. The distance\n * is either a number defining pixels or a percentage\n * defining a percentage of the plot area width.\n *\n * @type {number|string}\n */\n distance: 40,\n /**\n * When `type` is set to `undefined` and there are more visible points\n * than the kmeansThreshold the `grid` algorithm is used to find\n * clusters, otherwise `kmeans`. It ensures good performance on\n * large datasets and better clusters arrangement after the zoom.\n */\n kmeansThreshold: 100\n },\n /**\n * Options for the cluster marker.\n * @type {Highcharts.PointMarkerOptionsObject}\n * @extends plotOptions.series.marker\n * @excluding enabledThreshold, states\n */\n marker: {\n /** @internal */\n symbol: 'cluster',\n /** @internal */\n radius: 15,\n /** @internal */\n lineWidth: 0,\n /** @internal */\n lineColor: \"#ffffff\" /* Palette.backgroundColor */\n },\n /**\n * Fires when the cluster point is clicked and `drillToCluster` is enabled.\n * One parameter, `event`, is passed to the function. The default action\n * is to zoom to the cluster points range. This can be prevented\n * by calling `event.preventDefault()`.\n *\n * @type {Highcharts.MarkerClusterDrillCallbackFunction}\n * @product highcharts highmaps\n * @see [cluster.drillToCluster](#plotOptions.scatter.cluster.drillToCluster)\n * @apioption plotOptions.scatter.cluster.events.drillToCluster\n */\n /**\n * An array defining zones within marker clusters.\n *\n * In styled mode, the color zones are styled with the\n * `.highcharts-cluster-zone-{n}` class, or custom\n * classed from the `className`\n * option.\n *\n * @sample highcharts/marker-clusters/basic\n * Marker clusters zones\n * @sample maps/marker-clusters/custom-alg\n * Zones on maps\n *\n * @type {Array<*>}\n * @product highcharts highmaps\n * @apioption plotOptions.scatter.cluster.zones\n */\n /**\n * Styled mode only. A custom class name for the zone.\n *\n * @sample highcharts/css/color-zones/\n * Zones styled by class name\n *\n * @type {string}\n * @apioption plotOptions.scatter.cluster.zones.className\n */\n /**\n * Settings for the cluster marker belonging to the zone.\n *\n * @see [cluster.marker](#plotOptions.scatter.cluster.marker)\n * @extends plotOptions.scatter.cluster.marker\n * @product highcharts highmaps\n * @apioption plotOptions.scatter.cluster.zones.marker\n */\n /**\n * The value where the zone starts.\n *\n * @type {number}\n * @product highcharts highmaps\n * @apioption plotOptions.scatter.cluster.zones.from\n */\n /**\n * The value where the zone ends.\n *\n * @type {number}\n * @product highcharts highmaps\n * @apioption plotOptions.scatter.cluster.zones.to\n */\n /**\n * The fill color of the cluster marker in hover state. When\n * `undefined`, the series' or point's fillColor for normal\n * state is used.\n *\n * @type {Highcharts.ColorType}\n * @apioption plotOptions.scatter.cluster.states.hover.fillColor\n */\n /**\n * Options for the cluster data labels.\n * @type {Highcharts.DataLabelsOptions}\n */\n dataLabels: {\n /** @internal */\n enabled: true,\n /** @internal */\n format: '{point.clusterPointsAmount}',\n /** @internal */\n verticalAlign: 'middle',\n /** @internal */\n align: 'center',\n /** @internal */\n style: {\n color: 'contrast'\n },\n /** @internal */\n inside: true\n }\n};\nvar tooltip = {\n /**\n * The HTML of the cluster point's in the tooltip. Works only with\n * marker-clusters module and analogously to\n * [pointFormat](#tooltip.pointFormat).\n *\n * The cluster tooltip can be also formatted using\n * `tooltip.formatter` callback function and `point.isCluster` flag.\n *\n * @sample highcharts/marker-clusters/grid\n * Format tooltip for cluster points.\n *\n * @sample maps/marker-clusters/europe/\n * Format tooltip for clusters using tooltip.formatter\n *\n * @type {string}\n * @default Clustered points: {point.clusterPointsAmount}\n * @apioption tooltip.clusterFormat\n */\n clusterFormat: '<span>Clustered points: ' +\n '{point.clusterPointsAmount}</span><br/>'\n};\n/* *\n *\n * Default Export\n *\n * */\nvar MarkerClusterDefaults = {\n cluster: cluster,\n tooltip: tooltip\n};\n/* harmony default export */ var MarkerClusters_MarkerClusterDefaults = (MarkerClusterDefaults);\n\n;// ./code/es5/es-modules/Data/DataTableCore.js\n/* *\n *\n * (c) 2009-2024 Highsoft AS\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * Authors:\n * - Sophie Bremer\n * - Gøran Slettemark\n * - Torstein Hønsi\n *\n * */\n\n\nvar fireEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).fireEvent, isArray = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isArray, objectEach = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).objectEach, uniqueKey = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).uniqueKey;\n/* *\n *\n * Class\n *\n * */\n/**\n * Class to manage columns and rows in a table structure. It provides methods\n * to add, remove, and manipulate columns and rows, as well as to retrieve data\n * from specific cells.\n *\n * @class\n * @name Highcharts.DataTable\n *\n * @param {Highcharts.DataTableOptions} [options]\n * Options to initialize the new DataTable instance.\n */\nvar DataTableCore = /** @class */ (function () {\n /**\n * Constructs an instance of the DataTable class.\n *\n * @example\n * const dataTable = new Highcharts.DataTableCore({\n * columns: {\n * year: [2020, 2021, 2022, 2023],\n * cost: [11, 13, 12, 14],\n * revenue: [12, 15, 14, 18]\n * }\n * });\n\n *\n * @param {Highcharts.DataTableOptions} [options]\n * Options to initialize the new DataTable instance.\n */\n function DataTableCore(options) {\n if (options === void 0) { options = {}; }\n var _this = this;\n /**\n * Whether the ID was automatic generated or given in the constructor.\n *\n * @name Highcharts.DataTable#autoId\n * @type {boolean}\n */\n this.autoId = !options.id;\n this.columns = {};\n /**\n * ID of the table for indentification purposes.\n *\n * @name Highcharts.DataTable#id\n * @type {string}\n */\n this.id = (options.id || uniqueKey());\n this.modified = this;\n this.rowCount = 0;\n this.versionTag = uniqueKey();\n var rowCount = 0;\n objectEach(options.columns || {}, function (column, columnName) {\n _this.columns[columnName] = column.slice();\n rowCount = Math.max(rowCount, column.length);\n });\n this.applyRowCount(rowCount);\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Applies a row count to the table by setting the `rowCount` property and\n * adjusting the length of all columns.\n *\n * @private\n * @param {number} rowCount The new row count.\n */\n DataTableCore.prototype.applyRowCount = function (rowCount) {\n this.rowCount = rowCount;\n objectEach(this.columns, function (column) {\n if (isArray(column)) { // Not on typed array\n column.length = rowCount;\n }\n });\n };\n /**\n * Fetches the given column by the canonical column name. Simplified version\n * of the full `DataTable.getRow` method, always returning by reference.\n *\n * @param {string} columnName\n * Name of the column to get.\n *\n * @return {Highcharts.DataTableColumn|undefined}\n * A copy of the column, or `undefined` if not found.\n */\n DataTableCore.prototype.getColumn = function (columnName, \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n asReference) {\n return this.columns[columnName];\n };\n /**\n * Retrieves all or the given columns. Simplified version of the full\n * `DataTable.getColumns` method, always returning by reference.\n *\n * @param {Array<string>} [columnNames]\n * Column names to retrieve.\n *\n * @return {Highcharts.DataTableColumnCollection}\n * Collection of columns. If a requested column was not found, it is\n * `undefined`.\n */\n DataTableCore.prototype.getColumns = function (columnNames, \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n asReference) {\n var _this = this;\n return (columnNames || Object.keys(this.columns)).reduce(function (columns, columnName) {\n columns[columnName] = _this.columns[columnName];\n return columns;\n }, {});\n };\n /**\n * Retrieves the row at a given index.\n *\n * @param {number} rowIndex\n * Row index to retrieve. First row has index 0.\n *\n * @param {Array<string>} [columnNames]\n * Column names to retrieve.\n *\n * @return {Record<string, number|string|undefined>|undefined}\n * Returns the row values, or `undefined` if not found.\n */\n DataTableCore.prototype.getRow = function (rowIndex, columnNames) {\n var _this = this;\n return (columnNames || Object.keys(this.columns)).map(function (key) { var _a; return (_a = _this.columns[key]) === null || _a === void 0 ? void 0 : _a[rowIndex]; });\n };\n /**\n * Sets cell values for a column. Will insert a new column, if not found.\n *\n * @param {string} columnName\n * Column name to set.\n *\n * @param {Highcharts.DataTableColumn} [column]\n * Values to set in the column.\n *\n * @param {number} [rowIndex=0]\n * Index of the first row to change. (Default: 0)\n *\n * @param {Record<string, (boolean|number|string|null|undefined)>} [eventDetail]\n * Custom information for pending events.\n *\n * @emits #setColumns\n * @emits #afterSetColumns\n */\n DataTableCore.prototype.setColumn = function (columnName, column, rowIndex, eventDetail) {\n var _a;\n if (column === void 0) { column = []; }\n if (rowIndex === void 0) { rowIndex = 0; }\n this.setColumns((_a = {}, _a[columnName] = column, _a), rowIndex, eventDetail);\n };\n /**\n * * Sets cell values for multiple columns. Will insert new columns, if not\n * found. Simplified version of the full `DataTable.setColumns`, limited to\n * full replacement of the columns (undefined `rowIndex`).\n *\n * @param {Highcharts.DataTableColumnCollection} columns\n * Columns as a collection, where the keys are the column names.\n *\n * @param {number} [rowIndex]\n * Index of the first row to change. Keep undefined to reset.\n *\n * @param {Record<string, (boolean|number|string|null|undefined)>} [eventDetail]\n * Custom information for pending events.\n *\n * @emits #setColumns\n * @emits #afterSetColumns\n */\n DataTableCore.prototype.setColumns = function (columns, rowIndex, eventDetail) {\n var _this = this;\n var rowCount = this.rowCount;\n objectEach(columns, function (column, columnName) {\n _this.columns[columnName] = column.slice();\n rowCount = column.length;\n });\n this.applyRowCount(rowCount);\n if (!(eventDetail === null || eventDetail === void 0 ? void 0 : eventDetail.silent)) {\n fireEvent(this, 'afterSetColumns');\n this.versionTag = uniqueKey();\n }\n };\n /**\n * Sets cell values of a row. Will insert a new row if no index was\n * provided, or if the index is higher than the total number of table rows.\n * A simplified version of the full `DateTable.setRow`, limited to objects.\n *\n * @param {Record<string, number|string|undefined>} row\n * Cell values to set.\n *\n * @param {number} [rowIndex]\n * Index of the row to set. Leave `undefind` to add as a new row.\n *\n * @param {boolean} [insert]\n * Whether to insert the row at the given index, or to overwrite the row.\n *\n * @param {Record<string, (boolean|number|string|null|undefined)>} [eventDetail]\n * Custom information for pending events.\n *\n * @emits #afterSetRows\n */\n DataTableCore.prototype.setRow = function (row, rowIndex, insert, eventDetail) {\n if (rowIndex === void 0) { rowIndex = this.rowCount; }\n var columns = this.columns,\n indexRowCount = insert ? this.rowCount + 1 : rowIndex + 1;\n objectEach(row, function (cellValue, columnName) {\n var column = columns[columnName] ||\n (eventDetail === null || eventDetail === void 0 ? void 0 : eventDetail.addColumns) !== false && new Array(indexRowCount);\n if (column) {\n if (insert) {\n column.splice(rowIndex, 0, cellValue);\n }\n else {\n column[rowIndex] = cellValue;\n }\n columns[columnName] = column;\n }\n });\n if (indexRowCount > this.rowCount) {\n this.applyRowCount(indexRowCount);\n }\n if (!(eventDetail === null || eventDetail === void 0 ? void 0 : eventDetail.silent)) {\n fireEvent(this, 'afterSetRows');\n this.versionTag = uniqueKey();\n }\n };\n return DataTableCore;\n}());\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Data_DataTableCore = (DataTableCore);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * A column of values in a data table.\n * @typedef {Array<boolean|null|number|string|undefined>} Highcharts.DataTableColumn\n */ /**\n* A collection of data table columns defined by a object where the key is the\n* column name and the value is an array of the column values.\n* @typedef {Record<string, Highcharts.DataTableColumn>} Highcharts.DataTableColumnCollection\n*/\n/**\n * Options for the `DataTable` or `DataTableCore` classes.\n * @interface Highcharts.DataTableOptions\n */ /**\n* The column options for the data table. The columns are defined by an object\n* where the key is the column ID and the value is an array of the column\n* values.\n*\n* @name Highcharts.DataTableOptions.columns\n* @type {Highcharts.DataTableColumnCollection|undefined}\n*/ /**\n* Custom ID to identify the new DataTable instance.\n*\n* @name Highcharts.DataTableOptions.id\n* @type {string|undefined}\n*/\n(''); // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Extensions/MarkerClusters/MarkerClusterScatter.js\n/* *\n *\n * Marker clusters module.\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * Author: Wojciech Chmiel\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar animObject = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).animObject;\n\n\nvar clusterDefaults = MarkerClusters_MarkerClusterDefaults.cluster;\n\nvar addEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).addEvent, defined = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defined, error = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).error, MarkerClusterScatter_isArray = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isArray, isFunction = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isFunction, isObject = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isObject, isNumber = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isNumber, merge = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).merge, MarkerClusterScatter_objectEach = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).objectEach, relativeLength = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).relativeLength, syncTimeout = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).syncTimeout;\n/* *\n *\n * Constants\n *\n * */\nvar markerClusterAlgorithms = {\n grid: function (dataX, dataY, dataIndexes, options) {\n var _a;\n var series = this,\n grid = {},\n gridOffset = series.getGridOffset(),\n scaledGridSize = series.getScaledGridSize(options);\n var x,\n y,\n gridX,\n gridY,\n key,\n i;\n for (i = 0; i < dataX.length; i++) {\n var p = valuesToPixels(series, { x: dataX[i],\n y: dataY[i] });\n x = p.x - gridOffset.plotLeft;\n y = p.y - gridOffset.plotTop;\n gridX = Math.floor(x / scaledGridSize);\n gridY = Math.floor(y / scaledGridSize);\n key = gridY + ':' + gridX;\n (_a = grid[key]) !== null && _a !== void 0 ? _a : (grid[key] = []);\n grid[key].push({\n dataIndex: dataIndexes[i],\n x: dataX[i],\n y: dataY[i]\n });\n }\n return grid;\n },\n kmeans: function (dataX, dataY, dataIndexes, options) {\n var series = this,\n clusters = [],\n noise = [],\n group = {},\n pointMaxDistance = options.processedDistance ||\n clusterDefaults.layoutAlgorithm.distance,\n iterations = options.iterations, \n // Max pixel difference beetwen new and old cluster position.\n maxClusterShift = 1;\n var currentIteration = 0,\n repeat = true,\n pointX = 0,\n pointY = 0,\n tempPos,\n pointClusterDistance = [];\n options.processedGridSize = options.processedDistance;\n // Use grid method to get groupedData object.\n var groupedData = series.markerClusterAlgorithms ?\n series.markerClusterAlgorithms.grid.call(series,\n dataX,\n dataY,\n dataIndexes,\n options) : {};\n // Find clusters amount and its start positions\n // based on grid grouped data.\n for (var key in groupedData) {\n if (groupedData[key].length > 1) {\n tempPos = getClusterPosition(groupedData[key]);\n clusters.push({\n posX: tempPos.x,\n posY: tempPos.y,\n oldX: 0,\n oldY: 0,\n startPointsLen: groupedData[key].length,\n points: []\n });\n }\n }\n // Start kmeans iteration process.\n while (repeat) {\n for (var _i = 0, clusters_1 = clusters; _i < clusters_1.length; _i++) {\n var c = clusters_1[_i];\n c.points.length = 0;\n }\n noise.length = 0;\n for (var i = 0; i < dataX.length; i++) {\n pointX = dataX[i];\n pointY = dataY[i];\n pointClusterDistance = series.getClusterDistancesFromPoint(clusters, pointX, pointY);\n if (pointClusterDistance.length &&\n pointClusterDistance[0].distance < pointMaxDistance) {\n clusters[pointClusterDistance[0].clusterIndex].points.push({\n x: pointX,\n y: pointY,\n dataIndex: dataIndexes[i]\n });\n }\n else {\n noise.push({\n x: pointX,\n y: pointY,\n dataIndex: dataIndexes[i]\n });\n }\n }\n // When cluster points array has only one point the\n // point should be classified again.\n for (var i = 0; i < clusters.length; i++) {\n if (clusters[i].points.length === 1) {\n pointClusterDistance = series.getClusterDistancesFromPoint(clusters, clusters[i].points[0].x, clusters[i].points[0].y);\n if (pointClusterDistance[1].distance < pointMaxDistance) {\n // Add point to the next closest cluster.\n clusters[pointClusterDistance[1].clusterIndex].points\n .push(clusters[i].points[0]);\n // Clear points array.\n clusters[pointClusterDistance[0].clusterIndex]\n .points.length = 0;\n }\n }\n }\n // Compute a new clusters position and check if it\n // is different than the old one.\n repeat = false;\n for (var i = 0; i < clusters.length; i++) {\n tempPos = getClusterPosition(clusters[i].points);\n clusters[i].oldX = clusters[i].posX;\n clusters[i].oldY = clusters[i].posY;\n clusters[i].posX = tempPos.x;\n clusters[i].posY = tempPos.y;\n // Repeat the algorithm if at least one cluster\n // is shifted more than maxClusterShift property.\n if (clusters[i].posX > clusters[i].oldX + maxClusterShift ||\n clusters[i].posX < clusters[i].oldX - maxClusterShift ||\n clusters[i].posY > clusters[i].oldY + maxClusterShift ||\n clusters[i].posY < clusters[i].oldY - maxClusterShift) {\n repeat = true;\n }\n }\n // If iterations property is set repeat the algorithm\n // specified amount of times.\n if (iterations) {\n repeat = currentIteration < iterations - 1;\n }\n currentIteration++;\n }\n for (var i = 0, iEnd = clusters.length; i < iEnd; ++i) {\n group['cluster' + i] = clusters[i].points;\n }\n for (var i = 0, iEnd = noise.length; i < iEnd; ++i) {\n group['noise' + i] = [noise[i]];\n }\n return group;\n },\n optimizedKmeans: function (processedXData, processedYData, dataIndexes, options) {\n var _a,\n _b,\n _c;\n var series = this,\n pointMaxDistance = options.processedDistance ||\n clusterDefaults.layoutAlgorithm.gridSize,\n extremes = series.getRealExtremes(),\n clusterMarkerOptions = (series.options.cluster || {}).marker;\n var distance,\n group = {},\n offset,\n radius;\n if (!series.markerClusterInfo || (series.initMaxX && series.initMaxX < extremes.maxX ||\n series.initMinX && series.initMinX > extremes.minX ||\n series.initMaxY && series.initMaxY < extremes.maxY ||\n series.initMinY && series.initMinY > extremes.minY)) {\n series.initMaxX = extremes.maxX;\n series.initMinX = extremes.minX;\n series.initMaxY = extremes.maxY;\n series.initMinY = extremes.minY;\n group = series.markerClusterAlgorithms ?\n series.markerClusterAlgorithms.kmeans.call(series, processedXData, processedYData, dataIndexes, options) : {};\n series.baseClusters = null;\n }\n else {\n (_a = series.baseClusters) !== null && _a !== void 0 ? _a : (series.baseClusters = {\n clusters: series.markerClusterInfo.clusters,\n noise: series.markerClusterInfo.noise\n });\n for (var _i = 0, _d = series.baseClusters.clusters; _i < _d.length; _i++) {\n var cluster = _d[_i];\n cluster.pointsOutside = [];\n cluster.pointsInside = [];\n for (var _e = 0, _f = cluster.data; _e < _f.length; _e++) {\n var dataPoint = _f[_e];\n var dataPointPx = valuesToPixels(series,\n dataPoint),\n clusterPx = valuesToPixels(series,\n cluster);\n distance = Math.sqrt(Math.pow(dataPointPx.x - clusterPx.x, 2) +\n Math.pow(dataPointPx.y - clusterPx.y, 2));\n if ((_c = (_b = cluster.clusterZone) === null || _b === void 0 ? void 0 : _b.marker) === null || _c === void 0 ? void 0 : _c.radius) {\n radius = cluster.clusterZone.marker.radius;\n }\n else if (clusterMarkerOptions === null || clusterMarkerOptions === void 0 ? void 0 : clusterMarkerOptions.radius) {\n radius = clusterMarkerOptions.radius;\n }\n else {\n radius = clusterDefaults.marker.radius;\n }\n offset = pointMaxDistance - radius >= 0 ?\n pointMaxDistance - radius : radius;\n if (distance > radius + offset &&\n defined(cluster.pointsOutside)) {\n cluster.pointsOutside.push(dataPoint);\n }\n else if (defined(cluster.pointsInside)) {\n cluster.pointsInside.push(dataPoint);\n }\n }\n if (cluster.pointsInside.length) {\n group[cluster.id] = cluster.pointsInside;\n }\n var i = 0;\n for (var _g = 0, _h = cluster.pointsOutside; _g < _h.length; _g++) {\n var p = _h[_g];\n group[cluster.id + '_noise' + i++] = [p];\n }\n }\n for (var _j = 0, _k = series.baseClusters.noise; _j < _k.length; _j++) {\n var noise = _k[_j];\n group[noise.id] = noise.data;\n }\n }\n return group;\n }\n};\n/* *\n *\n * Variables\n *\n * */\nvar baseGeneratePoints, \n/**\n * Points that ids are included in the oldPointsStateId array are hidden\n * before animation. Other ones are destroyed.\n * @private\n */\noldPointsStateId = [], stateIdCounter = 0;\n/* *\n *\n * Functions\n *\n * */\n/** @private */\nfunction compose(highchartsDefaultOptions, ScatterSeriesClass) {\n var scatterProto = ScatterSeriesClass.prototype;\n if (!scatterProto.markerClusterAlgorithms) {\n baseGeneratePoints = scatterProto.generatePoints;\n scatterProto.markerClusterAlgorithms = markerClusterAlgorithms;\n scatterProto.animateClusterPoint = seriesAnimateClusterPoint;\n scatterProto.destroyClusteredData = seriesDestroyClusteredData;\n scatterProto.generatePoints = seriesGeneratePoints;\n scatterProto.getClusterDistancesFromPoint =\n seriesGetClusterDistancesFromPoint;\n scatterProto.getClusteredData = seriesGetClusteredData;\n scatterProto.getGridOffset = seriesGetGridOffset;\n scatterProto.getPointsState = seriesGetPointsState;\n scatterProto.getRealExtremes = seriesGetRealExtremes;\n scatterProto.getScaledGridSize = seriesGetScaledGridSize;\n scatterProto.hideClusteredData = seriesHideClusteredData;\n scatterProto.isValidGroupedDataObject = seriesIsValidGroupedDataObject;\n scatterProto.preventClusterCollisions = seriesPreventClusterCollisions;\n // Destroy grouped data on series destroy.\n addEvent(ScatterSeriesClass, 'destroy', scatterProto.destroyClusteredData);\n if (highchartsDefaultOptions.plotOptions) {\n highchartsDefaultOptions.plotOptions.series = merge(highchartsDefaultOptions.plotOptions.series, MarkerClusters_MarkerClusterDefaults);\n }\n }\n}\n/**\n * Util function.\n * @private\n */\nfunction destroyOldPoints(oldState) {\n var _a,\n _b;\n for (var _i = 0, _c = Object.keys(oldState); _i < _c.length; _i++) {\n var key = _c[_i];\n (_b = (_a = oldState[key].point) === null || _a === void 0 ? void 0 : _a.destroy) === null || _b === void 0 ? void 0 : _b.call(_a);\n }\n}\n/**\n * Util function.\n * @private\n */\nfunction fadeInElement(elem, opacity, animation) {\n elem.attr({ opacity: opacity }).animate({ opacity: 1 }, animation);\n}\n/**\n * Util function.\n * @private\n */\nfunction fadeInNewPointAndDestoryOld(newPointObj, oldPoints, animation, opacity) {\n var _a,\n _b;\n // Fade in new point.\n fadeInStatePoint(newPointObj, opacity, animation, true, true);\n // Destroy old animated points.\n for (var _i = 0, oldPoints_1 = oldPoints; _i < oldPoints_1.length; _i++) {\n var p = oldPoints_1[_i];\n (_b = (_a = p.point) === null || _a === void 0 ? void 0 : _a.destroy) === null || _b === void 0 ? void 0 : _b.call(_a);\n }\n}\n/**\n * Util function.\n * @private\n */\nfunction fadeInStatePoint(stateObj, opacity, animation, fadeinGraphic, fadeinDataLabel) {\n if (stateObj.point) {\n if (fadeinGraphic && stateObj.point.graphic) {\n stateObj.point.graphic.show();\n fadeInElement(stateObj.point.graphic, opacity, animation);\n }\n if (fadeinDataLabel && stateObj.point.dataLabel) {\n stateObj.point.dataLabel.show();\n fadeInElement(stateObj.point.dataLabel, opacity, animation);\n }\n }\n}\n/**\n * Util function.\n * @private\n */\nfunction getClusterPosition(points) {\n var pointsLen = points.length;\n var sumX = 0,\n sumY = 0;\n for (var i = 0; i < pointsLen; i++) {\n sumX += points[i].x;\n sumY += points[i].y;\n }\n return {\n x: sumX / pointsLen,\n y: sumY / pointsLen\n };\n}\n/**\n * Util function.Prepare array with sorted data objects to be compared in\n * getPointsState method.\n * @private\n */\nfunction getDataState(clusteredData, stateDataLen) {\n var state = [];\n state.length = stateDataLen;\n clusteredData.clusters.forEach(function (cluster) {\n cluster.data.forEach(function (elem) {\n state[elem.dataIndex] = elem;\n });\n });\n clusteredData.noise.forEach(function (noise) {\n state[noise.data[0].dataIndex] = noise.data[0];\n });\n return state;\n}\n/**\n * Util function. Generate unique stateId for a state element.\n * @private\n */\nfunction getStateId() {\n return Math.random().toString(36).substring(2, 7) + '-' + stateIdCounter++;\n}\n/**\n * Util function.\n * @private\n */\nfunction hideStatePoint(stateObj, hideGraphic, hideDataLabel) {\n if (stateObj.point) {\n if (hideGraphic && stateObj.point.graphic) {\n stateObj.point.graphic.hide();\n }\n if (hideDataLabel && stateObj.point.dataLabel) {\n stateObj.point.dataLabel.hide();\n }\n }\n}\n/** @private */\nfunction onPointDrillToCluster(event) {\n var point = event.point || event.target;\n point.firePointEvent('drillToCluster', event, function (e) {\n var _a,\n _b,\n _c;\n var _d;\n var point = e.point || e.target,\n series = point.series,\n xAxis = series.xAxis,\n yAxis = series.yAxis,\n chart = series.chart,\n inverted = chart.inverted,\n mapView = chart.mapView,\n pointer = chart.pointer,\n drillToCluster = (_d = series.options.cluster) === null || _d === void 0 ? void 0 : _d.drillToCluster;\n if (drillToCluster && point.clusteredData) {\n var sortedDataX = point.clusteredData\n .map(function (data) { return data.x; })\n .sort(function (a,\n b) { return a - b; }),\n sortedDataY = point.clusteredData\n .map(function (data) { return data.y; })\n .sort(function (a,\n b) { return a - b; }),\n minX = sortedDataX[0],\n maxX = sortedDataX[sortedDataX.length - 1],\n minY = sortedDataY[0],\n maxY = sortedDataY[sortedDataY.length - 1],\n offsetX = Math.abs((maxX - minX) * 0.1),\n offsetY = Math.abs((maxY - minY) * 0.1),\n x1 = Math.min(minX,\n maxX) - offsetX,\n x2 = Math.max(minX,\n maxX) + offsetX,\n y1 = Math.min(minY,\n maxY) - offsetY,\n y2 = Math.max(minY,\n maxY) + offsetY;\n if (mapView) {\n mapView.fitToBounds({ x1: x1, x2: x2, y1: y1, y2: y2 });\n }\n else if (xAxis && yAxis) {\n var x1Px = xAxis.toPixels(x1),\n x2Px = xAxis.toPixels(x2),\n y1Px = yAxis.toPixels(y1),\n y2Px = yAxis.toPixels(y2);\n if (inverted) {\n _a = [y1Px, y2Px, x1Px, x2Px], x1Px = _a[0], x2Px = _a[1], y1Px = _a[2], y2Px = _a[3];\n }\n if (x1Px > x2Px) {\n _b = [x2Px, x1Px], x1Px = _b[0], x2Px = _b[1];\n }\n if (y1Px > y2Px) {\n _c = [y2Px, y1Px], y1Px = _c[0], y2Px = _c[1];\n }\n if (pointer) {\n pointer.zoomX = true;\n pointer.zoomY = true;\n }\n chart.transform({\n from: {\n x: x1Px,\n y: y1Px,\n width: x2Px - x1Px,\n height: y2Px - y1Px\n }\n });\n }\n }\n });\n}\n/**\n * Util function.\n * @private\n */\nfunction pixelsToValues(series, pos) {\n var chart = series.chart,\n xAxis = series.xAxis,\n yAxis = series.yAxis;\n if (chart.mapView) {\n return chart.mapView.pixelsToProjectedUnits(pos);\n }\n return {\n x: xAxis ? xAxis.toValue(pos.x) : 0,\n y: yAxis ? yAxis.toValue(pos.y) : 0\n };\n}\n/** @private */\nfunction seriesAnimateClusterPoint(clusterObj) {\n var _a,\n _b,\n _c,\n _d,\n _e,\n _f,\n _g;\n var series = this,\n chart = series.chart,\n mapView = chart.mapView,\n animation = animObject((_a = series.options.cluster) === null || _a === void 0 ? void 0 : _a.animation),\n animDuration = animation.duration || 500,\n pointsState = (_b = series.markerClusterInfo) === null || _b === void 0 ? void 0 : _b.pointsState,\n newState = pointsState === null || pointsState === void 0 ? void 0 : pointsState.newState,\n oldState = pointsState === null || pointsState === void 0 ? void 0 : pointsState.oldState,\n oldPoints = [];\n var parentId,\n oldPointObj,\n newPointObj,\n newPointBBox,\n offset = 0,\n newX = 0,\n newY = 0,\n isOldPointGrahic = false,\n isCbHandled = false;\n if (oldState && newState) {\n newPointObj = newState[clusterObj.stateId];\n var newPos = valuesToPixels(series,\n newPointObj);\n newX = newPos.x - (mapView ? 0 : chart.plotLeft);\n newY = newPos.y - (mapView ? 0 : chart.plotTop);\n // Point has one ancestor.\n if (newPointObj.parentsId.length === 1) {\n parentId = newState === null || newState === void 0 ? void 0 : newState[clusterObj.stateId].parentsId[0];\n oldPointObj = oldState[parentId];\n // If old and new positions are the same do not animate.\n if (((_c = newPointObj.point) === null || _c === void 0 ? void 0 : _c.graphic) &&\n ((_d = oldPointObj.point) === null || _d === void 0 ? void 0 : _d.plotX) &&\n oldPointObj.point.plotY &&\n (oldPointObj.point.plotX !== newPointObj.point.plotX ||\n oldPointObj.point.plotY !== newPointObj.point.plotY)) {\n newPointBBox = newPointObj.point.graphic.getBBox();\n // Marker image does not have the offset (#14342).\n offset = ((_e = newPointObj.point.graphic) === null || _e === void 0 ? void 0 : _e.isImg) ?\n 0 : newPointBBox.width / 2;\n newPointObj.point.graphic.attr({\n x: oldPointObj.point.plotX - offset,\n y: oldPointObj.point.plotY - offset\n });\n newPointObj.point.graphic.animate({\n x: newX - (newPointObj.point.graphic.radius || 0),\n y: newY - (newPointObj.point.graphic.radius || 0)\n }, animation, function () {\n var _a,\n _b;\n isCbHandled = true;\n // Destroy old point.\n (_b = (_a = oldPointObj.point) === null || _a === void 0 ? void 0 : _a.destroy) === null || _b === void 0 ? void 0 : _b.call(_a);\n });\n // Data label animation.\n if (((_f = newPointObj.point.dataLabel) === null || _f === void 0 ? void 0 : _f.alignAttr) &&\n ((_g = oldPointObj.point.dataLabel) === null || _g === void 0 ? void 0 : _g.alignAttr)) {\n newPointObj.point.dataLabel.attr({\n x: oldPointObj.point.dataLabel.alignAttr.x,\n y: oldPointObj.point.dataLabel.alignAttr.y\n });\n newPointObj.point.dataLabel.animate({\n x: newPointObj.point.dataLabel.alignAttr.x,\n y: newPointObj.point.dataLabel.alignAttr.y\n }, animation);\n }\n }\n }\n else if (newPointObj.parentsId.length === 0) {\n // Point has no ancestors - new point.\n // Hide new point.\n hideStatePoint(newPointObj, true, true);\n syncTimeout(function () {\n // Fade in new point.\n fadeInStatePoint(newPointObj, 0.1, animation, true, true);\n }, animDuration / 2);\n }\n else {\n // Point has many ancestors.\n // Hide new point before animation.\n hideStatePoint(newPointObj, true, true);\n newPointObj.parentsId.forEach(function (elem) {\n var _a,\n _b,\n _c;\n if (oldState === null || oldState === void 0 ? void 0 : oldState[elem]) {\n oldPointObj = oldState[elem];\n oldPoints.push(oldPointObj);\n if ((_a = oldPointObj.point) === null || _a === void 0 ? void 0 : _a.graphic) {\n isOldPointGrahic = true;\n oldPointObj.point.graphic.show();\n oldPointObj.point.graphic.animate({\n x: newX - (oldPointObj.point.graphic.radius || 0),\n y: newY - (oldPointObj.point.graphic.radius || 0),\n opacity: 0.4\n }, animation, function () {\n isCbHandled = true;\n fadeInNewPointAndDestoryOld(newPointObj, oldPoints, animation, 0.7);\n });\n if (oldPointObj.point.dataLabel &&\n oldPointObj.point.dataLabel.y !== -9999 &&\n ((_c = (_b = newPointObj.point) === null || _b === void 0 ? void 0 : _b.dataLabel) === null || _c === void 0 ? void 0 : _c.alignAttr)) {\n oldPointObj.point.dataLabel.show();\n oldPointObj.point.dataLabel.animate({\n x: newPointObj.point.dataLabel.alignAttr.x,\n y: newPointObj.point.dataLabel.alignAttr.y,\n opacity: 0.4\n }, animation);\n }\n }\n }\n });\n // Make sure point is faded in.\n syncTimeout(function () {\n if (!isCbHandled) {\n fadeInNewPointAndDestoryOld(newPointObj, oldPoints, animation, 0.85);\n }\n }, animDuration);\n if (!isOldPointGrahic) {\n syncTimeout(function () {\n fadeInNewPointAndDestoryOld(newPointObj, oldPoints, animation, 0.1);\n }, animDuration / 2);\n }\n }\n }\n}\n/**\n * Destroy clustered data points.\n * @private\n */\nfunction seriesDestroyClusteredData() {\n var _a;\n // Clear previous groups.\n (_a = this.markerClusterSeriesData) === null || _a === void 0 ? void 0 : _a.forEach(function (point) {\n var _a;\n (_a = point === null || point === void 0 ? void 0 : point.destroy) === null || _a === void 0 ? void 0 : _a.call(point);\n });\n this.markerClusterSeriesData = null;\n}\n/**\n * Override the generatePoints method by adding a reference to grouped data.\n * @private\n */\nfunction seriesGeneratePoints() {\n var _a,\n _b,\n _c,\n _d,\n _e;\n var series = this, chart = series.chart, mapView = chart.mapView, xData = series.getColumn('x'), yData = series.getColumn('y'), clusterOptions = series.options.cluster, realExtremes = series.getRealExtremes(), visibleXData = [], visibleYData = [], visibleDataIndexes = [];\n var oldPointsState,\n oldDataLen,\n oldMarkerClusterInfo,\n kmeansThreshold,\n cropDataOffsetX,\n cropDataOffsetY,\n seriesMinX,\n seriesMaxX,\n seriesMinY,\n seriesMaxY,\n type,\n algorithm,\n clusteredData,\n groupedData,\n layoutAlgOptions,\n point;\n // For map point series, we need to resolve lon, lat and geometry options\n // and project them on the plane in order to get x and y. In the regular\n // series flow, this is not done until the `translate` method because the\n // resulting [x, y] position depends on inset positions in the MapView.\n if (mapView && series.is('mappoint') && xData && yData) {\n (_a = series.options.data) === null || _a === void 0 ? void 0 : _a.forEach(function (p, i) {\n var xy = series.projectPoint(p);\n if (xy) {\n xData[i] = xy.x;\n yData[i] = xy.y;\n }\n });\n }\n if ((clusterOptions === null || clusterOptions === void 0 ? void 0 : clusterOptions.enabled) &&\n (xData === null || xData === void 0 ? void 0 : xData.length) &&\n (yData === null || yData === void 0 ? void 0 : yData.length) &&\n !chart.polar) {\n type = clusterOptions.layoutAlgorithm.type;\n layoutAlgOptions = clusterOptions.layoutAlgorithm;\n // Get processed algorithm properties.\n layoutAlgOptions.processedGridSize = relativeLength(layoutAlgOptions.gridSize ||\n clusterDefaults.layoutAlgorithm.gridSize, chart.plotWidth);\n layoutAlgOptions.processedDistance = relativeLength(layoutAlgOptions.distance ||\n clusterDefaults.layoutAlgorithm.distance, chart.plotWidth);\n kmeansThreshold = layoutAlgOptions.kmeansThreshold ||\n clusterDefaults.layoutAlgorithm.kmeansThreshold;\n // Offset to prevent cluster size changes.\n var halfGrid = layoutAlgOptions.processedGridSize / 2,\n p1 = pixelsToValues(series, { x: 0,\n y: 0 }),\n p2 = pixelsToValues(series, { x: halfGrid,\n y: halfGrid });\n cropDataOffsetX = Math.abs(p1.x - p2.x);\n cropDataOffsetY = Math.abs(p1.y - p2.y);\n // Get only visible data.\n for (var i = 0; i < xData.length; i++) {\n if (!series.dataMaxX) {\n if (!defined(seriesMaxX) ||\n !defined(seriesMinX) ||\n !defined(seriesMaxY) ||\n !defined(seriesMinY)) {\n seriesMaxX = seriesMinX = xData[i];\n seriesMaxY = seriesMinY = yData[i];\n }\n else if (isNumber(yData[i]) &&\n isNumber(seriesMaxY) &&\n isNumber(seriesMinY)) {\n seriesMaxX = Math.max(xData[i], seriesMaxX);\n seriesMinX = Math.min(xData[i], seriesMinX);\n seriesMaxY = Math.max(yData[i] || seriesMaxY, seriesMaxY);\n seriesMinY = Math.min(yData[i] || seriesMinY, seriesMinY);\n }\n }\n // Crop data to visible ones with appropriate offset to prevent\n // cluster size changes on the edge of the plot area.\n if (xData[i] >= (realExtremes.minX - cropDataOffsetX) &&\n xData[i] <= (realExtremes.maxX + cropDataOffsetX) &&\n (yData[i] || realExtremes.minY) >=\n (realExtremes.minY - cropDataOffsetY) &&\n (yData[i] || realExtremes.maxY) <=\n (realExtremes.maxY + cropDataOffsetY)) {\n visibleXData.push(xData[i]);\n visibleYData.push(yData[i]);\n visibleDataIndexes.push(i);\n }\n }\n // Save data max values.\n if (defined(seriesMaxX) && defined(seriesMinX) &&\n isNumber(seriesMaxY) && isNumber(seriesMinY)) {\n series.dataMaxX = seriesMaxX;\n series.dataMinX = seriesMinX;\n series.dataMaxY = seriesMaxY;\n series.dataMinY = seriesMinY;\n }\n if (isFunction(type)) {\n algorithm = type;\n }\n else if (series.markerClusterAlgorithms) {\n if (type && series.markerClusterAlgorithms[type]) {\n algorithm = series.markerClusterAlgorithms[type];\n }\n else {\n algorithm = visibleXData.length < kmeansThreshold ?\n series.markerClusterAlgorithms.kmeans :\n series.markerClusterAlgorithms.grid;\n }\n }\n else {\n algorithm = function () { return false; };\n }\n groupedData = algorithm.call(this, visibleXData, visibleYData, visibleDataIndexes, layoutAlgOptions);\n clusteredData = groupedData ? series.getClusteredData(groupedData, clusterOptions) : groupedData;\n // When animation is enabled get old points state.\n if (clusterOptions.animation &&\n ((_c = (_b = series.markerClusterInfo) === null || _b === void 0 ? void 0 : _b.pointsState) === null || _c === void 0 ? void 0 : _c.oldState)) {\n // Destroy old points.\n destroyOldPoints(series.markerClusterInfo.pointsState.oldState);\n oldPointsState = series.markerClusterInfo.pointsState.newState;\n }\n else {\n oldPointsState = {};\n }\n // Save points old state info.\n oldDataLen = xData.length;\n oldMarkerClusterInfo = series.markerClusterInfo;\n if (clusteredData) {\n series.dataTable.modified = new Data_DataTableCore({\n columns: {\n x: clusteredData.groupedXData,\n y: clusteredData.groupedYData\n }\n });\n series.hasGroupedData = true;\n series.markerClusterInfo = clusteredData;\n series.groupMap = clusteredData.groupMap;\n }\n baseGeneratePoints.apply(this);\n if (clusteredData && series.markerClusterInfo) {\n // Mark cluster points. Safe point reference in the cluster object.\n (_d = series.markerClusterInfo.clusters) === null || _d === void 0 ? void 0 : _d.forEach(function (cluster) {\n point = series.points[cluster.index];\n point.isCluster = true;\n point.clusteredData = cluster.data;\n point.clusterPointsAmount = cluster.data.length;\n cluster.point = point;\n // Add zoom to cluster range.\n addEvent(point, 'click', onPointDrillToCluster);\n });\n // Safe point reference in the noise object.\n (_e = series.markerClusterInfo.noise) === null || _e === void 0 ? void 0 : _e.forEach(function (noise) {\n noise.point = series.points[noise.index];\n });\n // When animation is enabled save points state.\n if (clusterOptions.animation &&\n series.markerClusterInfo) {\n series.markerClusterInfo.pointsState = {\n oldState: oldPointsState,\n newState: series.getPointsState(clusteredData, oldMarkerClusterInfo, oldDataLen)\n };\n }\n // Record grouped data in order to let it be destroyed the next time\n // processData runs.\n if (!clusterOptions.animation) {\n this.destroyClusteredData();\n }\n else {\n this.hideClusteredData();\n }\n this.markerClusterSeriesData =\n this.hasGroupedData ? this.points : null;\n }\n }\n else {\n baseGeneratePoints.apply(this);\n }\n}\n/** @private */\nfunction seriesGetClusterDistancesFromPoint(clusters, pointX, pointY) {\n var pointClusterDistance = [];\n for (var clusterIndex = 0; clusterIndex < clusters.length; clusterIndex++) {\n var p1 = valuesToPixels(this, { x: pointX,\n y: pointY }),\n p2 = valuesToPixels(this, {\n x: clusters[clusterIndex].posX,\n y: clusters[clusterIndex].posY\n }),\n distance = Math.sqrt(Math.pow(p1.x - p2.x, 2) +\n Math.pow(p1.y - p2.y, 2));\n pointClusterDistance.push({ clusterIndex: clusterIndex, distance: distance });\n }\n return pointClusterDistance.sort(function (a, b) { return a.distance - b.distance; });\n}\n/** @private */\nfunction seriesGetClusteredData(groupedData, options) {\n var series = this,\n data = series.options.data,\n groupedXData = [],\n groupedYData = [],\n clusters = [], // Container for clusters.\n noise = [], // Container for points not belonging to any cluster.\n groupMap = [], \n // Prevent minimumClusterSize lower than 2.\n minimumClusterSize = Math.max(2,\n options.minimumClusterSize || 2);\n var index = 0,\n stateId,\n point,\n points,\n pointUserOptions,\n pointsLen,\n marker,\n clusterPos,\n pointOptions,\n clusterTempPos,\n zoneOptions,\n clusterZone,\n clusterZoneClassName;\n // Check if groupedData is valid when user uses a custom algorithm.\n if (isFunction(options.layoutAlgorithm.type) &&\n !series.isValidGroupedDataObject(groupedData)) {\n error('Highcharts marker-clusters module: ' +\n 'The custom algorithm result is not valid!', false, series.chart);\n return false;\n }\n for (var k in groupedData) {\n if (groupedData[k].length >= minimumClusterSize) {\n points = groupedData[k];\n stateId = getStateId();\n pointsLen = points.length;\n // Get zone options for cluster.\n if (options.zones) {\n for (var i = 0; i < options.zones.length; i++) {\n if (pointsLen >= options.zones[i].from &&\n pointsLen <= options.zones[i].to) {\n clusterZone = options.zones[i];\n clusterZone.zoneIndex = i;\n zoneOptions = options.zones[i].marker;\n clusterZoneClassName = options.zones[i].className;\n }\n }\n }\n clusterTempPos = getClusterPosition(points);\n if (options.layoutAlgorithm.type === 'grid' &&\n !options.allowOverlap) {\n marker = series.options.marker || {};\n clusterPos = series.preventClusterCollisions({\n x: clusterTempPos.x,\n y: clusterTempPos.y,\n key: k,\n groupedData: groupedData,\n gridSize: series.getScaledGridSize(options.layoutAlgorithm),\n defaultRadius: marker.radius || 3 + (marker.lineWidth || 0),\n clusterRadius: (zoneOptions && zoneOptions.radius) ?\n zoneOptions.radius :\n (options.marker || {}).radius ||\n clusterDefaults.marker.radius\n });\n }\n else {\n clusterPos = {\n x: clusterTempPos.x,\n y: clusterTempPos.y\n };\n }\n for (var i = 0; i < pointsLen; i++) {\n points[i].parentStateId = stateId;\n }\n clusters.push({\n x: clusterPos.x,\n y: clusterPos.y,\n id: k,\n stateId: stateId,\n index: index,\n data: points,\n clusterZone: clusterZone,\n clusterZoneClassName: clusterZoneClassName\n });\n groupedXData.push(clusterPos.x);\n groupedYData.push(clusterPos.y);\n groupMap.push({\n options: {\n formatPrefix: 'cluster',\n dataLabels: options.dataLabels,\n marker: merge(options.marker, {\n states: options.states\n }, zoneOptions || {})\n }\n });\n // Save cluster data points options.\n if (data === null || data === void 0 ? void 0 : data.length) {\n for (var i = 0; i < pointsLen; i++) {\n if (isObject(data[points[i].dataIndex])) {\n points[i].options = data[points[i].dataIndex];\n }\n }\n }\n index++;\n zoneOptions = null;\n }\n else {\n for (var i = 0; i < groupedData[k].length; i++) {\n // Points not belonging to any cluster.\n point = groupedData[k][i];\n stateId = getStateId();\n pointOptions = null;\n pointUserOptions = data === null || data === void 0 ? void 0 : data[point.dataIndex];\n groupedXData.push(point.x);\n groupedYData.push(point.y);\n point.parentStateId = stateId;\n noise.push({\n x: point.x,\n y: point.y,\n id: k,\n stateId: stateId,\n index: index,\n data: groupedData[k]\n });\n if (pointUserOptions &&\n typeof pointUserOptions === 'object' &&\n !MarkerClusterScatter_isArray(pointUserOptions)) {\n pointOptions = merge(pointUserOptions, { x: point.x, y: point.y });\n }\n else {\n pointOptions = {\n userOptions: pointUserOptions,\n x: point.x,\n y: point.y\n };\n }\n groupMap.push({ options: pointOptions });\n index++;\n }\n }\n }\n return {\n clusters: clusters,\n noise: noise,\n groupedXData: groupedXData,\n groupedYData: groupedYData,\n groupMap: groupMap\n };\n}\n/** @private */\nfunction seriesGetGridOffset() {\n var series = this,\n chart = series.chart,\n xAxis = series.xAxis,\n yAxis = series.yAxis;\n var plotLeft = 0,\n plotTop = 0;\n if (xAxis && series.dataMinX && series.dataMaxX) {\n plotLeft = xAxis.reversed ?\n xAxis.toPixels(series.dataMaxX) : xAxis.toPixels(series.dataMinX);\n }\n else {\n plotLeft = chart.plotLeft;\n }\n if (yAxis && series.dataMinY && series.dataMaxY) {\n plotTop = yAxis.reversed ?\n yAxis.toPixels(series.dataMinY) : yAxis.toPixels(series.dataMaxY);\n }\n else {\n plotTop = chart.plotTop;\n }\n return { plotLeft: plotLeft, plotTop: plotTop };\n}\n/**\n * Point state used when animation is enabled to compare and bind old points\n * with new ones.\n * @private\n */\nfunction seriesGetPointsState(clusteredData, oldMarkerClusterInfo, dataLength) {\n var _a;\n var oldDataStateArr = oldMarkerClusterInfo ?\n getDataState(oldMarkerClusterInfo,\n dataLength) : [],\n newDataStateArr = getDataState(clusteredData,\n dataLength),\n state = {};\n // Clear global array before populate with new ids.\n oldPointsStateId = [];\n // Build points state structure.\n clusteredData.clusters.forEach(function (cluster) {\n state[cluster.stateId] = {\n x: cluster.x,\n y: cluster.y,\n id: cluster.stateId,\n point: cluster.point,\n parentsId: []\n };\n });\n clusteredData.noise.forEach(function (noise) {\n state[noise.stateId] = {\n x: noise.x,\n y: noise.y,\n id: noise.stateId,\n point: noise.point,\n parentsId: []\n };\n });\n var newState,\n oldState;\n // Bind new and old state.\n for (var i = 0; i < newDataStateArr.length; i++) {\n newState = newDataStateArr[i];\n oldState = oldDataStateArr[i];\n if ((newState === null || newState === void 0 ? void 0 : newState.parentStateId) &&\n (oldState === null || oldState === void 0 ? void 0 : oldState.parentStateId) &&\n ((_a = state[newState.parentStateId]) === null || _a === void 0 ? void 0 : _a.parentsId.indexOf(oldState.parentStateId)) === -1) {\n state[newState.parentStateId].parentsId.push(oldState.parentStateId);\n if (oldPointsStateId.indexOf(oldState.parentStateId) === -1) {\n oldPointsStateId.push(oldState.parentStateId);\n }\n }\n }\n return state;\n}\n/** @private */\nfunction seriesGetRealExtremes() {\n var chart = this.chart,\n x = chart.mapView ? 0 : chart.plotLeft,\n y = chart.mapView ? 0 : chart.plotTop,\n p1 = pixelsToValues(this, {\n x: x,\n y: y\n }),\n p2 = pixelsToValues(this, {\n x: x + chart.plotWidth,\n y: x + chart.plotHeight\n }),\n realMinX = p1.x,\n realMaxX = p2.x,\n realMinY = p1.y,\n realMaxY = p2.y;\n return {\n minX: Math.min(realMinX, realMaxX),\n maxX: Math.max(realMinX, realMaxX),\n minY: Math.min(realMinY, realMaxY),\n maxY: Math.max(realMinY, realMaxY)\n };\n}\n/** @private */\nfunction seriesGetScaledGridSize(options) {\n var series = this,\n xAxis = series.xAxis,\n mapView = series.chart.mapView,\n processedGridSize = options.processedGridSize ||\n clusterDefaults.layoutAlgorithm.gridSize;\n var search = true,\n k = 1,\n divider = 1;\n if (!series.gridValueSize) {\n if (mapView) {\n series.gridValueSize = processedGridSize / mapView.getScale();\n }\n else {\n series.gridValueSize = Math.abs(xAxis.toValue(processedGridSize) - xAxis.toValue(0));\n }\n }\n var gridSize = mapView ?\n series.gridValueSize * mapView.getScale() :\n xAxis.toPixels(series.gridValueSize) - xAxis.toPixels(0);\n var scale = +(processedGridSize / gridSize).toFixed(14);\n // Find the level and its divider.\n while (search && scale !== 1) {\n var level = Math.pow(2,\n k);\n if (scale > 0.75 && scale < 1.25) {\n search = false;\n }\n else if (scale >= (1 / level) && scale < 2 * (1 / level)) {\n search = false;\n divider = level;\n }\n else if (scale <= level && scale > level / 2) {\n search = false;\n divider = 1 / level;\n }\n k++;\n }\n return (processedGridSize / divider) / scale;\n}\n/**\n * Hide clustered data points.\n * @private\n */\nfunction seriesHideClusteredData() {\n var _a,\n _b;\n var clusteredSeriesData = this.markerClusterSeriesData,\n oldState = (_b = (_a = this.markerClusterInfo) === null || _a === void 0 ? void 0 : _a.pointsState) === null || _b === void 0 ? void 0 : _b.oldState,\n oldPointsId = oldPointsStateId.map(function (elem) { var _a; return ((_a = oldState === null || oldState === void 0 ? void 0 : oldState[elem].point) === null || _a === void 0 ? void 0 : _a.id) || ''; });\n clusteredSeriesData === null || clusteredSeriesData === void 0 ? void 0 : clusteredSeriesData.forEach(function (point) {\n var _a;\n // If an old point is used in animation hide it, otherwise destroy.\n if (point &&\n oldPointsId.indexOf(point.id) !== -1) {\n if (point.graphic) {\n point.graphic.hide();\n }\n if (point.dataLabel) {\n point.dataLabel.hide();\n }\n }\n else {\n (_a = point === null || point === void 0 ? void 0 : point.destroy) === null || _a === void 0 ? void 0 : _a.call(point);\n }\n });\n}\n/**\n * Check if user algorithm result is valid groupedDataObject.\n * @private\n */\nfunction seriesIsValidGroupedDataObject(groupedData) {\n var result = false;\n if (!isObject(groupedData)) {\n return false;\n }\n MarkerClusterScatter_objectEach(groupedData, function (elem) {\n result = true;\n if (!MarkerClusterScatter_isArray(elem) || !elem.length) {\n result = false;\n return;\n }\n for (var i = 0; i < elem.length; i++) {\n if (!isObject(elem[i]) || (!elem[i].x || !elem[i].y)) {\n result = false;\n return;\n }\n }\n });\n return result;\n}\n/** @private */\nfunction seriesPreventClusterCollisions(props) {\n var _a;\n var _b,\n _c,\n _d;\n var series = this,\n _e = props.key.split(':').map(parseFloat),\n gridY = _e[0],\n gridX = _e[1],\n gridSize = props.gridSize,\n groupedData = props.groupedData,\n defaultRadius = props.defaultRadius,\n clusterRadius = props.clusterRadius,\n gridXPx = gridX * gridSize,\n gridYPx = gridY * gridSize,\n propsPx = valuesToPixels(series,\n props),\n gridsToCheckCollision = [],\n clusterMarkerOptions = (_b = series.options.cluster) === null || _b === void 0 ? void 0 : _b.marker,\n zoneOptions = (_c = series.options.cluster) === null || _c === void 0 ? void 0 : _c.zones,\n gridOffset = series.getGridOffset();\n var xPixel = propsPx.x,\n yPixel = propsPx.y,\n pointsLen = 0,\n radius = 0,\n nextXPixel,\n nextYPixel,\n signX,\n signY,\n cornerGridX,\n cornerGridY,\n j,\n itemX,\n itemY,\n nextClusterPos,\n maxDist,\n keys;\n // Distance to the grid start.\n xPixel -= gridOffset.plotLeft;\n yPixel -= gridOffset.plotTop;\n for (var i = 1; i < 5; i++) {\n signX = i % 2 ? -1 : 1;\n signY = i < 3 ? -1 : 1;\n cornerGridX = Math.floor((xPixel + signX * clusterRadius) / gridSize);\n cornerGridY = Math.floor((yPixel + signY * clusterRadius) / gridSize);\n keys = [\n cornerGridY + ':' + cornerGridX,\n cornerGridY + ':' + gridX,\n gridY + ':' + cornerGridX\n ];\n for (j = 0; j < keys.length; j++) {\n if (gridsToCheckCollision.indexOf(keys[j]) === -1 &&\n keys[j] !== props.key) {\n gridsToCheckCollision.push(keys[j]);\n }\n }\n }\n for (var _i = 0, gridsToCheckCollision_1 = gridsToCheckCollision; _i < gridsToCheckCollision_1.length; _i++) {\n var item = gridsToCheckCollision_1[_i];\n if (groupedData[item]) {\n // Cluster or noise position is already computed.\n if (!groupedData[item].posX) {\n nextClusterPos = getClusterPosition(groupedData[item]);\n groupedData[item].posX = nextClusterPos.x;\n groupedData[item].posY = nextClusterPos.y;\n }\n var pos_1 = valuesToPixels(series, {\n x: groupedData[item].posX || 0,\n y: groupedData[item].posY || 0\n });\n nextXPixel = pos_1.x - gridOffset.plotLeft;\n nextYPixel = pos_1.y - gridOffset.plotTop;\n _a = item.split(':').map(parseFloat), itemY = _a[0], itemX = _a[1];\n if (zoneOptions) {\n pointsLen = groupedData[item].length;\n for (var i = 0; i < zoneOptions.length; i++) {\n if (pointsLen >= zoneOptions[i].from &&\n pointsLen <= zoneOptions[i].to) {\n if (defined((_d = zoneOptions[i].marker) === null || _d === void 0 ? void 0 : _d.radius)) {\n radius = zoneOptions[i].marker.radius || 0;\n }\n else if (clusterMarkerOptions === null || clusterMarkerOptions === void 0 ? void 0 : clusterMarkerOptions.radius) {\n radius = clusterMarkerOptions.radius;\n }\n else {\n radius = clusterDefaults.marker.radius;\n }\n }\n }\n }\n if (groupedData[item].length > 1 &&\n radius === 0 &&\n (clusterMarkerOptions === null || clusterMarkerOptions === void 0 ? void 0 : clusterMarkerOptions.radius)) {\n radius = clusterMarkerOptions.radius;\n }\n else if (groupedData[item].length === 1) {\n radius = defaultRadius;\n }\n maxDist = clusterRadius + radius;\n radius = 0;\n if (itemX !== gridX &&\n Math.abs(xPixel - nextXPixel) < maxDist) {\n xPixel = itemX - gridX < 0 ? gridXPx + clusterRadius :\n gridXPx + gridSize - clusterRadius;\n }\n if (itemY !== gridY &&\n Math.abs(yPixel - nextYPixel) < maxDist) {\n yPixel = itemY - gridY < 0 ? gridYPx + clusterRadius :\n gridYPx + gridSize - clusterRadius;\n }\n }\n }\n var pos = pixelsToValues(series, {\n x: xPixel + gridOffset.plotLeft,\n y: yPixel + gridOffset.plotTop\n });\n groupedData[props.key].posX = pos.x;\n groupedData[props.key].posY = pos.y;\n return pos;\n}\n/**\n * Util function.\n * @private\n */\nfunction valuesToPixels(series, pos) {\n var chart = series.chart,\n xAxis = series.xAxis,\n yAxis = series.yAxis;\n if (chart.mapView) {\n return chart.mapView.projectedUnitsToPixels(pos);\n }\n return {\n x: xAxis ? xAxis.toPixels(pos.x) : 0,\n y: yAxis ? yAxis.toPixels(pos.y) : 0\n };\n}\n/* *\n *\n * Default Export\n *\n * */\nvar MarkerClusterScatter = {\n compose: compose\n};\n/* harmony default export */ var MarkerClusters_MarkerClusterScatter = (MarkerClusterScatter);\n\n;// ./code/es5/es-modules/Extensions/MarkerClusters/MarkerClusters.js\n/* *\n *\n * Marker clusters module.\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * Author: Wojciech Chmiel\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar MarkerClusters_animObject = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).animObject;\n\nvar defaultOptions = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defaultOptions;\n\nvar composed = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).composed;\n\n\n\nvar MarkerClusters_addEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).addEvent, MarkerClusters_defined = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defined, MarkerClusters_error = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).error, MarkerClusters_isFunction = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isFunction, MarkerClusters_merge = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).merge, pushUnique = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pushUnique, MarkerClusters_syncTimeout = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).syncTimeout;\n/* *\n *\n * Constants\n *\n * */\n(defaultOptions.plotOptions || {}).series = MarkerClusters_merge((defaultOptions.plotOptions || {}).series, MarkerClusters_MarkerClusterDefaults);\n/* *\n *\n * Functions\n *\n * */\n/** @private */\nfunction MarkerClusters_compose(AxisClass, ChartClass, highchartsDefaultOptions, SeriesClass) {\n if (pushUnique(composed, 'MarkerClusters')) {\n var PointClass = SeriesClass.prototype.pointClass,\n ScatterSeries = SeriesClass.types.scatter;\n MarkerClusters_addEvent(AxisClass, 'setExtremes', onAxisSetExtremes);\n MarkerClusters_addEvent(ChartClass, 'render', onChartRender);\n MarkerClusters_addEvent(PointClass, 'drillToCluster', MarkerClusters_onPointDrillToCluster);\n MarkerClusters_addEvent(PointClass, 'update', onPointUpdate);\n MarkerClusters_addEvent(SeriesClass, 'afterRender', onSeriesAfterRender);\n if (ScatterSeries) {\n MarkerClusters_MarkerClusterScatter\n .compose(highchartsDefaultOptions, ScatterSeries);\n }\n }\n}\n/**\n * Destroy the old tooltip after zoom.\n * @private\n */\nfunction onAxisSetExtremes() {\n var chart = this.chart;\n var animationDuration = 0;\n for (var _i = 0, _a = chart.series; _i < _a.length; _i++) {\n var series = _a[_i];\n if (series.markerClusterInfo) {\n animationDuration = (MarkerClusters_animObject((series.options.cluster || {}).animation).duration ||\n 0);\n }\n }\n MarkerClusters_syncTimeout(function () {\n if (chart.tooltip) {\n chart.tooltip.destroy();\n }\n }, animationDuration);\n}\n/**\n * Handle animation.\n * @private\n */\nfunction onChartRender() {\n var _a;\n var chart = this;\n for (var _i = 0, _b = (chart.series || []); _i < _b.length; _i++) {\n var series = _b[_i];\n if (series.markerClusterInfo) {\n var options = series.options.cluster,\n pointsState = (series.markerClusterInfo || {}).pointsState,\n oldState = (pointsState || {}).oldState;\n if ((options || {}).animation &&\n series.markerClusterInfo &&\n (((_a = series.chart.pointer) === null || _a === void 0 ? void 0 : _a.pinchDown) || []).length === 0 &&\n ((series.xAxis || {}).eventArgs || {}).trigger !== 'pan' &&\n oldState &&\n Object.keys(oldState).length) {\n for (var _c = 0, _d = series.markerClusterInfo.clusters; _c < _d.length; _c++) {\n var cluster = _d[_c];\n series.animateClusterPoint(cluster);\n }\n for (var _e = 0, _f = series.markerClusterInfo.noise; _e < _f.length; _e++) {\n var noise = _f[_e];\n series.animateClusterPoint(noise);\n }\n }\n }\n }\n}\n/** @private */\nfunction MarkerClusters_onPointDrillToCluster(event) {\n var point = event.point || event.target,\n series = point.series,\n clusterOptions = series.options.cluster,\n onDrillToCluster = ((clusterOptions || {}).events || {}).drillToCluster;\n if (MarkerClusters_isFunction(onDrillToCluster)) {\n onDrillToCluster.call(this, event);\n }\n}\n/**\n * Override point prototype to throw a warning when trying to update\n * clustered point.\n * @private\n */\nfunction onPointUpdate() {\n var point = this;\n if (point.dataGroup) {\n MarkerClusters_error('Highcharts marker-clusters module: ' +\n 'Running `Point.update` when point belongs to clustered series' +\n ' is not supported.', false, point.series.chart);\n return false;\n }\n}\n/**\n * Add classes, change mouse cursor.\n * @private\n */\nfunction onSeriesAfterRender() {\n var series = this,\n clusterZoomEnabled = (series.options.cluster || {}).drillToCluster;\n if (series.markerClusterInfo && series.markerClusterInfo.clusters) {\n for (var _i = 0, _a = series.markerClusterInfo.clusters; _i < _a.length; _i++) {\n var cluster = _a[_i];\n if (cluster.point && cluster.point.graphic) {\n cluster.point.graphic.addClass('highcharts-cluster-point');\n // Change cursor to pointer when drillToCluster is enabled.\n if (clusterZoomEnabled && cluster.point) {\n cluster.point.graphic.css({\n cursor: 'pointer'\n });\n if (cluster.point.dataLabel) {\n cluster.point.dataLabel.css({\n cursor: 'pointer'\n });\n }\n }\n if (MarkerClusters_defined(cluster.clusterZone)) {\n cluster.point.graphic.addClass(cluster.clusterZoneClassName ||\n 'highcharts-cluster-zone-' +\n cluster.clusterZone.zoneIndex);\n }\n }\n }\n }\n}\n/* *\n *\n * Default Export\n *\n * */\nvar MarkerClusters = {\n compose: MarkerClusters_compose\n};\n/* harmony default export */ var MarkerClusters_MarkerClusters = (MarkerClusters);\n/* *\n *\n * API Options\n *\n * */\n/**\n * Function callback when a cluster is clicked.\n *\n * @callback Highcharts.MarkerClusterDrillCallbackFunction\n *\n * @param {Highcharts.Point} this\n * The point where the event occurred.\n *\n * @param {Highcharts.PointClickEventObject} event\n * Event arguments.\n */\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Extensions/MarkerClusters/MarkerClusterSymbols.js\n/* *\n *\n * Marker clusters module.\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * Author: Wojciech Chmiel\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n * Variables\n *\n * */\nvar symbols;\n/* *\n *\n * Functions\n *\n * */\n/**\n * Cluster symbol.\n * @private\n */\nfunction MarkerClusterSymbols_cluster(x, y, width, height) {\n var w = width / 2, h = height / 2, outerWidth = 1, space = 1, inner = symbols.arc(x + w, y + h, w - space * 4, h - space * 4, {\n start: Math.PI * 0.5,\n end: Math.PI * 2.5,\n open: false\n }), outer1 = symbols.arc(x + w, y + h, w - space * 3, h - space * 3, {\n start: Math.PI * 0.5,\n end: Math.PI * 2.5,\n innerR: w - outerWidth * 2,\n open: false\n }), outer2 = symbols.arc(x + w, y + h, w - space, h - space, {\n start: Math.PI * 0.5,\n end: Math.PI * 2.5,\n innerR: w,\n open: false\n });\n return outer2.concat(outer1, inner);\n}\n/**\n * @private\n */\nfunction MarkerClusterSymbols_compose(SVGRendererClass) {\n symbols = SVGRendererClass.prototype.symbols;\n symbols.cluster = MarkerClusterSymbols_cluster;\n}\n/* *\n *\n * Default Export\n *\n * */\nvar MarkerClusterSymbols = {\n compose: MarkerClusterSymbols_compose\n};\n/* harmony default export */ var MarkerClusters_MarkerClusterSymbols = (MarkerClusterSymbols);\n\n;// ./code/es5/es-modules/masters/modules/marker-clusters.src.js\n\n\n\n\n\nvar G = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\nMarkerClusters_MarkerClusters.compose(G.Axis, G.Chart, G.defaultOptions, G.Series);\nMarkerClusters_MarkerClusterSymbols.compose(G.SVGRenderer);\n/* harmony default export */ var marker_clusters_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","require","define","amd","__WEBPACK_EXTERNAL_MODULE__944__","symbols","__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__","marker_clusters_src","baseGeneratePoints","highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_","highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default","MarkerClusters_MarkerClusterDefaults","cluster","enabled","allowOverlap","animation","duration","drillToCluster","minimumClusterSize","layoutAlgorithm","gridSize","distance","kmeansThreshold","marker","symbol","radius","lineWidth","lineColor","dataLabels","format","verticalAlign","align","style","color","inside","tooltip","clusterFormat","fireEvent","isArray","objectEach","uniqueKey","DataTableCore","options","_this","autoId","id","columns","modified","rowCount","versionTag","column","columnName","slice","Math","max","length","applyRowCount","getColumn","asReference","getColumns","columnNames","keys","reduce","getRow","rowIndex","map","_a","setColumn","eventDetail","setColumns","silent","setRow","row","insert","indexRowCount","cellValue","addColumns","Array","splice","animObject","clusterDefaults","addEvent","defined","error","MarkerClusterScatter_isArray","isFunction","isObject","isNumber","merge","MarkerClusterScatter_objectEach","relativeLength","syncTimeout","markerClusterAlgorithms","grid","dataX","dataY","dataIndexes","x","y","gridX","i","gridOffset","series","getGridOffset","scaledGridSize","getScaledGridSize","p","valuesToPixels","plotLeft","plotTop","floor","gridY","push","dataIndex","kmeans","tempPos","clusters","noise","group","pointMaxDistance","processedDistance","iterations","currentIteration","repeat","pointX","pointY","pointClusterDistance","processedGridSize","groupedData","getClusterPosition","posX","posY","oldX","oldY","startPointsLen","points","_i","clusters_1","c","getClusterDistancesFromPoint","clusterIndex","iEnd","optimizedKmeans","processedXData","processedYData","_b","_c","offset","extremes","getRealExtremes","clusterMarkerOptions","markerClusterInfo","initMaxX","maxX","initMinX","minX","initMaxY","maxY","initMinY","minY","baseClusters","_d","pointsOutside","pointsInside","_e","_f","data","dataPoint","dataPointPx","clusterPx","sqrt","pow","clusterZone","_g","_h","_j","_k","oldPointsStateId","stateIdCounter","fadeInElement","elem","opacity","attr","animate","fadeInNewPointAndDestoryOld","newPointObj","oldPoints","fadeInStatePoint","oldPoints_1","point","destroy","stateObj","fadeinGraphic","fadeinDataLabel","graphic","show","dataLabel","pointsLen","sumX","sumY","getDataState","clusteredData","stateDataLen","state","forEach","getStateId","random","toString","substring","hideStatePoint","hideGraphic","hideDataLabel","hide","onPointDrillToCluster","event","target","firePointEvent","e","xAxis","yAxis","chart","inverted","mapView","pointer","sortedDataX","sort","b","sortedDataY","offsetX","abs","offsetY","x1","min","x2","y1","y2","fitToBounds","x1Px","toPixels","x2Px","y1Px","y2Px","zoomX","zoomY","transform","from","width","height","pixelsToValues","pos","pixelsToProjectedUnits","toValue","seriesAnimateClusterPoint","clusterObj","oldPointObj","newPointBBox","animDuration","pointsState","newState","oldState","newX","newY","isOldPointGrahic","isCbHandled","newPos","stateId","parentsId","plotX","plotY","getBBox","isImg","alignAttr","seriesDestroyClusteredData","markerClusterSeriesData","seriesGeneratePoints","oldPointsState","oldDataLen","oldMarkerClusterInfo","cropDataOffsetX","cropDataOffsetY","seriesMinX","seriesMaxX","seriesMinY","seriesMaxY","type","layoutAlgOptions","xData","yData","clusterOptions","realExtremes","visibleXData","visibleYData","visibleDataIndexes","is","xy","projectPoint","polar","plotWidth","halfGrid","p1","p2","dataMaxX","dataMinX","dataMaxY","dataMinY","algorithm","getClusteredData","destroyOldPoints","dataTable","groupedXData","groupedYData","hasGroupedData","groupMap","apply","index","isCluster","clusterPointsAmount","getPointsState","hideClusteredData","destroyClusteredData","seriesGetClusterDistancesFromPoint","seriesGetClusteredData","pointUserOptions","clusterPos","pointOptions","clusterTempPos","zoneOptions","clusterZoneClassName","isValidGroupedDataObject","k","zones","to","zoneIndex","className","preventClusterCollisions","defaultRadius","clusterRadius","parentStateId","formatPrefix","states","userOptions","seriesGetGridOffset","reversed","seriesGetPointsState","dataLength","oldDataStateArr","newDataStateArr","indexOf","seriesGetRealExtremes","plotHeight","realMinX","realMaxX","realMinY","realMaxY","seriesGetScaledGridSize","search","divider","gridValueSize","getScale","scale","toFixed","level","seriesHideClusteredData","clusteredSeriesData","oldPointsId","seriesIsValidGroupedDataObject","result","seriesPreventClusterCollisions","props","nextXPixel","nextYPixel","signX","signY","cornerGridX","cornerGridY","j","itemX","itemY","nextClusterPos","maxDist","split","parseFloat","gridXPx","gridYPx","propsPx","gridsToCheckCollision","xPixel","yPixel","gridsToCheckCollision_1","item","pos_1","projectedUnitsToPixels","MarkerClusters_MarkerClusterScatter","compose","highchartsDefaultOptions","ScatterSeriesClass","scatterProto","generatePoints","animateClusterPoint","plotOptions","MarkerClusters_animObject","defaultOptions","composed","MarkerClusters_addEvent","MarkerClusters_defined","MarkerClusters_error","MarkerClusters_isFunction","MarkerClusters_merge","pushUnique","MarkerClusters_syncTimeout","onAxisSetExtremes","animationDuration","onChartRender","pinchDown","eventArgs","trigger","MarkerClusters_onPointDrillToCluster","onDrillToCluster","events","onPointUpdate","dataGroup","onSeriesAfterRender","clusterZoomEnabled","addClass","css","cursor","MarkerClusterSymbols_cluster","w","h","inner","arc","space","start","PI","end","open","outer1","innerR","outerWidth","outer2","concat","G","MarkerClusters_MarkerClusters","AxisClass","ChartClass","SeriesClass","PointClass","pointClass","ScatterSeries","types","scatter","Axis","Chart","Series","MarkerClusters_MarkerClusterSymbols","SVGRendererClass","SVGRenderer"],"mappings":"CAWA,AAXA;;;;;;;;;;CAUC,EACA,SAA0CA,CAAI,CAAEC,CAAO,EACpD,AAAmB,UAAnB,OAAOC,SAAwB,AAAkB,UAAlB,OAAOC,OACxCA,OAAOD,OAAO,CAAGD,EAAQG,QAAQ,eAC1B,AAAkB,YAAlB,OAAOC,QAAyBA,OAAOC,GAAG,CACjDD,OAAO,qCAAsC,CAAC,CAAC,wBAAwB,CAAC,CAAEJ,GACnE,AAAmB,UAAnB,OAAOC,QACdA,OAAO,CAAC,qCAAqC,CAAGD,EAAQG,QAAQ,eAEhEJ,EAAK,UAAa,CAAGC,EAAQD,EAAK,UAAa,CACjD,EAAG,IAAI,CAAE,SAASO,CAAgC,EAClD,OAAgB,AAAC,WACP,aACA,IAorENC,EAprEUC,EAAuB,CAE/B,IACC,SAASN,CAAM,EAEtBA,EAAOD,OAAO,CAAGK,CAEX,CAEI,EAGIG,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,CAAQ,EAEpC,IAAIC,EAAeH,CAAwB,CAACE,EAAS,CACrD,GAAIC,AAAiBC,KAAAA,IAAjBD,EACH,OAAOA,EAAaX,OAAO,CAG5B,IAAIC,EAASO,CAAwB,CAACE,EAAS,CAAG,CAGjDV,QAAS,CAAC,CACX,EAMA,OAHAO,CAAmB,CAACG,EAAS,CAACT,EAAQA,EAAOD,OAAO,CAAES,GAG/CR,EAAOD,OAAO,AACtB,CAMCS,EAAoBI,CAAC,CAAG,SAASZ,CAAM,EACtC,IAAIa,EAASb,GAAUA,EAAOc,UAAU,CACvC,WAAa,OAAOd,EAAO,OAAU,AAAE,EACvC,WAAa,OAAOA,CAAQ,EAE7B,OADAQ,EAAoBO,CAAC,CAACF,EAAQ,CAAEG,EAAGH,CAAO,GACnCA,CACR,EAMAL,EAAoBO,CAAC,CAAG,SAAShB,CAAO,CAAEkB,CAAU,EACnD,IAAI,IAAIC,KAAOD,EACXT,EAAoBW,CAAC,CAACF,EAAYC,IAAQ,CAACV,EAAoBW,CAAC,CAACpB,EAASmB,IAC5EE,OAAOC,cAAc,CAACtB,EAASmB,EAAK,CAAEI,WAAY,CAAA,EAAMC,IAAKN,CAAU,CAACC,EAAI,AAAC,EAGhF,EAKAV,EAAoBW,CAAC,CAAG,SAASK,CAAG,CAAEC,CAAI,EAAI,OAAOL,OAAOM,SAAS,CAACC,cAAc,CAACC,IAAI,CAACJ,EAAKC,EAAO,EAIjH,IAAII,EAAsB,CAAC,EAG3BrB,EAAoBO,CAAC,CAACc,EAAqB,CACzC,QAAW,WAAa,OAAqBC,EAAqB,CACpE,GAGA,IAk3BIC,EAl3BAC,EAAuExB,EAAoB,KAC3FyB,EAA2FzB,EAAoBI,CAAC,CAACoB,GAkVpFE,EAJL,CACxBC,QAhSU,CASVC,QAAS,CAAA,EAQTC,aAAc,CAAA,EAMdC,UAAW,CAEPC,SAAU,GACd,EAIAC,eAAgB,CAAA,EAQhBC,mBAAoB,EAMpBC,gBAAiB,CAqFbC,SAAU,GAkBVC,SAAU,GAOVC,gBAAiB,GACrB,EAOAC,OAAQ,CAEJC,OAAQ,UAERC,OAAQ,GAERC,UAAW,EAEXC,UAAW,SACf,EAwEAC,WAAY,CAERf,QAAS,CAAA,EAETgB,OAAQ,8BAERC,cAAe,SAEfC,MAAO,SAEPC,MAAO,CACHC,MAAO,UACX,EAEAC,OAAQ,CAAA,CACZ,CACJ,EA8BIC,QA7BU,CAmBVC,cAAe,iEAEnB,CASA,EAoBIC,EAAY,AAAC3B,IAA+E2B,SAAS,CAAEC,EAAU,AAAC5B,IAA+E4B,OAAO,CAAEC,EAAa,AAAC7B,IAA+E6B,UAAU,CAAEC,EAAY,AAAC9B,IAA+E8B,SAAS,CAiBxZC,EAA+B,WAiB/B,SAASA,EAAcC,CAAO,EACV,KAAK,IAAjBA,GAAsBA,CAAAA,EAAU,CAAC,CAAA,EACrC,IAAIC,EAAQ,IAAI,AAOhB,CAAA,IAAI,CAACC,MAAM,CAAG,CAACF,EAAQG,EAAE,CACzB,IAAI,CAACC,OAAO,CAAG,CAAC,EAOhB,IAAI,CAACD,EAAE,CAAIH,EAAQG,EAAE,EAAIL,IACzB,IAAI,CAACO,QAAQ,CAAG,IAAI,CACpB,IAAI,CAACC,QAAQ,CAAG,EAChB,IAAI,CAACC,UAAU,CAAGT,IAClB,IAAIQ,EAAW,EACfT,EAAWG,EAAQI,OAAO,EAAI,CAAC,EAAG,SAAUI,CAAM,CAAEC,CAAU,EAC1DR,EAAMG,OAAO,CAACK,EAAW,CAAGD,EAAOE,KAAK,GACxCJ,EAAWK,KAAKC,GAAG,CAACN,EAAUE,EAAOK,MAAM,CAC/C,GACA,IAAI,CAACC,aAAa,CAACR,EACvB,CA0KA,OA7JAP,EAActC,SAAS,CAACqD,aAAa,CAAG,SAAUR,CAAQ,EACtD,IAAI,CAACA,QAAQ,CAAGA,EAChBT,EAAW,IAAI,CAACO,OAAO,CAAE,SAAUI,CAAM,EACjCZ,EAAQY,IACRA,CAAAA,EAAOK,MAAM,CAAGP,CAAO,CAE/B,EACJ,EAWAP,EAActC,SAAS,CAACsD,SAAS,CAAG,SAAUN,CAAU,CAExDO,CAAW,EACP,OAAO,IAAI,CAACZ,OAAO,CAACK,EAAW,AACnC,EAYAV,EAActC,SAAS,CAACwD,UAAU,CAAG,SAAUC,CAAW,CAE1DF,CAAW,EACP,IAAIf,EAAQ,IAAI,CAChB,MAAO,AAACiB,CAAAA,GAAe/D,OAAOgE,IAAI,CAAC,IAAI,CAACf,OAAO,CAAA,EAAGgB,MAAM,CAAC,SAAUhB,CAAO,CAAEK,CAAU,EAElF,OADAL,CAAO,CAACK,EAAW,CAAGR,EAAMG,OAAO,CAACK,EAAW,CACxCL,CACX,EAAG,CAAC,EACR,EAaAL,EAActC,SAAS,CAAC4D,MAAM,CAAG,SAAUC,CAAQ,CAAEJ,CAAW,EAC5D,IAAIjB,EAAQ,IAAI,CAChB,MAAO,AAACiB,CAAAA,GAAe/D,OAAOgE,IAAI,CAAC,IAAI,CAACf,OAAO,CAAA,EAAGmB,GAAG,CAAC,SAAUtE,CAAG,EAAI,IAAIuE,EAAI,OAAO,AAA8B,OAA7BA,CAAAA,EAAKvB,EAAMG,OAAO,CAACnD,EAAI,AAAD,GAAeuE,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,CAAE,CAACF,EAAS,AAAE,EACvK,EAmBAvB,EAActC,SAAS,CAACgE,SAAS,CAAG,SAAUhB,CAAU,CAAED,CAAM,CAAEc,CAAQ,CAAEI,CAAW,EACnF,IAAIF,CACW,MAAK,IAAhBhB,GAAqBA,CAAAA,EAAS,EAAE,AAAD,EAClB,KAAK,IAAlBc,GAAuBA,CAAAA,EAAW,CAAA,EACtC,IAAI,CAACK,UAAU,CAAEH,CAAAA,AAASA,CAATA,EAAK,CAAC,CAAA,CAAK,CAACf,EAAW,CAAGD,EAAQgB,CAAC,EAAIF,EAAUI,EACtE,EAkBA3B,EAActC,SAAS,CAACkE,UAAU,CAAG,SAAUvB,CAAO,CAAEkB,CAAQ,CAAEI,CAAW,EACzE,IAAIzB,EAAQ,IAAI,CACZK,EAAW,IAAI,CAACA,QAAQ,CAC5BT,EAAWO,EAAS,SAAUI,CAAM,CAAEC,CAAU,EAC5CR,EAAMG,OAAO,CAACK,EAAW,CAAGD,EAAOE,KAAK,GACxCJ,EAAWE,EAAOK,MAAM,AAC5B,GACA,IAAI,CAACC,aAAa,CAACR,GACboB,CAAAA,MAAAA,EAAiD,KAAK,EAAIA,EAAYE,MAAM,AAAD,IAC7EjC,EAAU,IAAI,CAAE,mBAChB,IAAI,CAACY,UAAU,CAAGT,IAE1B,EAoBAC,EAActC,SAAS,CAACoE,MAAM,CAAG,SAAUC,CAAG,CAAER,CAAQ,CAAES,CAAM,CAAEL,CAAW,EACxD,KAAK,IAAlBJ,GAAuBA,CAAAA,EAAW,IAAI,CAAChB,QAAQ,AAAD,EAClD,IAAIF,EAAU,IAAI,CAACA,OAAO,CACtB4B,EAAgBD,EAAS,IAAI,CAACzB,QAAQ,CAAG,EAAIgB,EAAW,EAC5DzB,EAAWiC,EAAK,SAAUG,CAAS,CAAExB,CAAU,EAC3C,IAAID,EAASJ,CAAO,CAACK,EAAW,EACxB,AAACiB,CAAAA,MAAAA,EAAiD,KAAK,EAAIA,EAAYQ,UAAU,AAAD,IAAO,CAAA,GAAS,AAAIC,MAAMH,GAC9GxB,IACIuB,EACAvB,EAAO4B,MAAM,CAACd,EAAU,EAAGW,GAG3BzB,CAAM,CAACc,EAAS,CAAGW,EAEvB7B,CAAO,CAACK,EAAW,CAAGD,EAE9B,GACIwB,EAAgB,IAAI,CAAC1B,QAAQ,EAC7B,IAAI,CAACQ,aAAa,CAACkB,GAEjBN,CAAAA,MAAAA,EAAiD,KAAK,EAAIA,EAAYE,MAAM,AAAD,IAC7EjC,EAAU,IAAI,CAAE,gBAChB,IAAI,CAACY,UAAU,CAAGT,IAE1B,EACOC,CACX,IAsDIsC,EAAa,AAACrE,IAA+EqE,UAAU,CAGvGC,EAAkBrE,EAAqCC,OAAO,CAE9DqE,EAAW,AAACvE,IAA+EuE,QAAQ,CAAEC,EAAU,AAACxE,IAA+EwE,OAAO,CAAEC,EAAQ,AAACzE,IAA+EyE,KAAK,CAAEC,EAA+B,AAAC1E,IAA+E4B,OAAO,CAAE+C,EAAa,AAAC3E,IAA+E2E,UAAU,CAAEC,EAAW,AAAC5E,IAA+E4E,QAAQ,CAAEC,EAAW,AAAC7E,IAA+E6E,QAAQ,CAAEC,EAAQ,AAAC9E,IAA+E8E,KAAK,CAAEC,EAAkC,AAAC/E,IAA+E6B,UAAU,CAAEmD,EAAiB,AAAChF,IAA+EgF,cAAc,CAAEC,EAAc,AAACjF,IAA+EiF,WAAW,CAMzoCC,EAA0B,CAC1BC,KAAM,SAAUC,CAAK,CAAEC,CAAK,CAAEC,CAAW,CAAEtD,CAAO,EAE9C,IADIwB,EAKA+B,EACAC,EACAC,EAEAxG,EACAyG,EARAP,EAAO,CAAC,EACRQ,EAAaC,AAFJ,IAAI,CAEOC,aAAa,GACjCC,EAAiBF,AAHR,IAAI,CAGWG,iBAAiB,CAAC/D,GAO9C,IAAK0D,EAAI,EAAGA,EAAIN,EAAMvC,MAAM,CAAE6C,IAAK,CAC/B,IAAIM,EAAIC,EAXC,IAAI,CAWkB,CAAEV,EAAGH,CAAK,CAACM,EAAE,CACxCF,EAAGH,CAAK,CAACK,EAAE,AAAC,GAChBH,EAAIS,EAAET,CAAC,CAAGI,EAAWO,QAAQ,CAC7BV,EAAIQ,EAAER,CAAC,CAAGG,EAAWQ,OAAO,CAC5BV,EAAQ9C,KAAKyD,KAAK,CAACb,EAAIO,GAGvB,AAAqB,OAApBtC,CAAAA,EAAK2B,CAAI,CADVlG,EAAMoH,AADE1D,KAAKyD,KAAK,CAACZ,EAAIM,GACT,IAAML,EACL,AAAD,GAAejC,AAAO,KAAK,IAAZA,GAAsB2B,CAAAA,CAAI,CAAClG,EAAI,CAAG,EAAE,AAAD,EAChEkG,CAAI,CAAClG,EAAI,CAACqH,IAAI,CAAC,CACXC,UAAWjB,CAAW,CAACI,EAAE,CACzBH,EAAGH,CAAK,CAACM,EAAE,CACXF,EAAGH,CAAK,CAACK,EAAE,AACf,EACJ,CACA,OAAOP,CACX,EACAqB,OAAQ,SAAUpB,CAAK,CAAEC,CAAK,CAAEC,CAAW,CAAEtD,CAAO,EAChD,IAaIyE,EAZAC,EAAW,EAAE,CACbC,EAAQ,EAAE,CACVC,EAAQ,CAAC,EACTC,EAAmB7E,EAAQ8E,iBAAiB,EACxCxC,EAAgB7D,eAAe,CAACE,QAAQ,CAC5CoG,EAAa/E,EAAQ+E,UAAU,CAG/BC,EAAmB,EACnBC,EAAS,CAAA,EACTC,EAAS,EACTC,EAAS,EAETC,EAAuB,EAAE,AAC7BpF,CAAAA,EAAQqF,iBAAiB,CAAGrF,EAAQ8E,iBAAiB,CAErD,IAAIQ,EAAc1B,AAjBL,IAAI,CAiBQV,uBAAuB,CACxCU,AAlBK,IAAI,CAkBFV,uBAAuB,CAACC,IAAI,CAACxF,IAAI,CAlBnC,IAAI,CAmBbyF,EACAC,EACAC,EACAtD,GAAW,CAAC,EAGhB,IAAK,IAAI/C,KAAOqI,EACRA,CAAW,CAACrI,EAAI,CAAC4D,MAAM,CAAG,IAC1B4D,EAAUc,EAAmBD,CAAW,CAACrI,EAAI,EAC7CyH,EAASJ,IAAI,CAAC,CACVkB,KAAMf,EAAQlB,CAAC,CACfkC,KAAMhB,EAAQjB,CAAC,CACfkC,KAAM,EACNC,KAAM,EACNC,eAAgBN,CAAW,CAACrI,EAAI,CAAC4D,MAAM,CACvCgF,OAAQ,EAAE,AACd,IAIR,KAAOZ,GAAQ,CACX,IAAK,IAAIa,EAAK,EAA0BA,EAAKC,AAAfrB,EAA0B7D,MAAM,CAAEiF,IAE5DE,AADQD,AADkBrB,CACR,CAACoB,EAAG,CACpBD,MAAM,CAAChF,MAAM,CAAG,CAEtB8D,CAAAA,EAAM9D,MAAM,CAAG,EACf,IAAK,IAAI6C,EAAI,EAAGA,EAAIN,EAAMvC,MAAM,CAAE6C,IAC9BwB,EAAS9B,CAAK,CAACM,EAAE,CACjByB,EAAS9B,CAAK,CAACK,EAAE,CAEb0B,AADJA,CAAAA,EAAuBxB,AAhDlB,IAAI,CAgDqBqC,4BAA4B,CAACvB,EAAUQ,EAAQC,EAAM,EAC1DtE,MAAM,EAC3BuE,CAAoB,CAAC,EAAE,CAACzG,QAAQ,CAAGkG,EACnCH,CAAQ,CAACU,CAAoB,CAAC,EAAE,CAACc,YAAY,CAAC,CAACL,MAAM,CAACvB,IAAI,CAAC,CACvDf,EAAG2B,EACH1B,EAAG2B,EACHZ,UAAWjB,CAAW,CAACI,EAAE,AAC7B,GAGAiB,EAAML,IAAI,CAAC,CACPf,EAAG2B,EACH1B,EAAG2B,EACHZ,UAAWjB,CAAW,CAACI,EAAE,AAC7B,GAKR,IAAK,IAAIA,EAAI,EAAGA,EAAIgB,EAAS7D,MAAM,CAAE6C,IACC,IAA9BgB,CAAQ,CAAChB,EAAE,CAACmC,MAAM,CAAChF,MAAM,EAErBuE,AADJA,CAAAA,EAAuBxB,AArEtB,IAAI,CAqEyBqC,4BAA4B,CAACvB,EAAUA,CAAQ,CAAChB,EAAE,CAACmC,MAAM,CAAC,EAAE,CAACtC,CAAC,CAAEmB,CAAQ,CAAChB,EAAE,CAACmC,MAAM,CAAC,EAAE,CAACrC,CAAC,CAAA,CAC7F,CAAC,EAAE,CAAC7E,QAAQ,CAAGkG,IAEnCH,CAAQ,CAACU,CAAoB,CAAC,EAAE,CAACc,YAAY,CAAC,CAACL,MAAM,CAChDvB,IAAI,CAACI,CAAQ,CAAChB,EAAE,CAACmC,MAAM,CAAC,EAAE,EAE/BnB,CAAQ,CAACU,CAAoB,CAAC,EAAE,CAACc,YAAY,CAAC,CACzCL,MAAM,CAAChF,MAAM,CAAG,GAMjCoE,EAAS,CAAA,EACT,IAAK,IAAIvB,EAAI,EAAGA,EAAIgB,EAAS7D,MAAM,CAAE6C,IACjCe,EAAUc,EAAmBb,CAAQ,CAAChB,EAAE,CAACmC,MAAM,EAC/CnB,CAAQ,CAAChB,EAAE,CAACgC,IAAI,CAAGhB,CAAQ,CAAChB,EAAE,CAAC8B,IAAI,CACnCd,CAAQ,CAAChB,EAAE,CAACiC,IAAI,CAAGjB,CAAQ,CAAChB,EAAE,CAAC+B,IAAI,CACnCf,CAAQ,CAAChB,EAAE,CAAC8B,IAAI,CAAGf,EAAQlB,CAAC,CAC5BmB,CAAQ,CAAChB,EAAE,CAAC+B,IAAI,CAAGhB,EAAQjB,CAAC,CAGxBkB,CAAAA,CAAQ,CAAChB,EAAE,CAAC8B,IAAI,CAAGd,CAAQ,CAAChB,EAAE,CAACgC,IAAI,CAnFzB,GAoFVhB,CAAQ,CAAChB,EAAE,CAAC8B,IAAI,CAAGd,CAAQ,CAAChB,EAAE,CAACgC,IAAI,CApFzB,GAqFVhB,CAAQ,CAAChB,EAAE,CAAC+B,IAAI,CAAGf,CAAQ,CAAChB,EAAE,CAACiC,IAAI,CArFzB,GAsFVjB,CAAQ,CAAChB,EAAE,CAAC+B,IAAI,CAAGf,CAAQ,CAAChB,EAAE,CAACiC,IAAI,CAtFzB,CAsF0C,GACpDV,CAAAA,EAAS,CAAA,CAAG,EAKhBF,GACAE,CAAAA,EAASD,EAAmBD,EAAa,CAAA,EAE7CC,GACJ,CACA,IAAK,IAAItB,EAAI,EAAGyC,EAAOzB,EAAS7D,MAAM,CAAE6C,EAAIyC,EAAM,EAAEzC,EAChDkB,CAAK,CAAC,UAAYlB,EAAE,CAAGgB,CAAQ,CAAChB,EAAE,CAACmC,MAAM,CAE7C,IAAK,IAAInC,EAAI,EAAGyC,EAAOxB,EAAM9D,MAAM,CAAE6C,EAAIyC,EAAM,EAAEzC,EAC7CkB,CAAK,CAAC,QAAUlB,EAAE,CAAG,CAACiB,CAAK,CAACjB,EAAE,CAAC,CAEnC,OAAOkB,CACX,EACAwB,gBAAiB,SAAUC,CAAc,CAAEC,CAAc,CAAEhD,CAAW,CAAEtD,CAAO,EAI3E,IAHIwB,EACA+E,EACAC,EAMA7H,EAEA8H,EACA1H,EAPA8F,EAAmB7E,EAAQ8E,iBAAiB,EACxCxC,EAAgB7D,eAAe,CAACC,QAAQ,CAC5CgI,EAAW9C,AAHF,IAAI,CAGK+C,eAAe,GACjCC,EAAuB,AAAChD,CAAAA,AAJf,IAAI,CAIkB5D,OAAO,CAAC9B,OAAO,EAAI,CAAC,CAAA,EAAGW,MAAM,CAE5D+F,EAAQ,CAAC,EAGb,GAAI,CAAChB,AATQ,IAAI,CASLiD,iBAAiB,EAAKjD,AATrB,IAAI,CASwBkD,QAAQ,EAAIlD,AATxC,IAAI,CAS2CkD,QAAQ,CAAGJ,EAASK,IAAI,EAChFnD,AAVS,IAAI,CAUNoD,QAAQ,EAAIpD,AAVV,IAAI,CAUaoD,QAAQ,CAAGN,EAASO,IAAI,EAClDrD,AAXS,IAAI,CAWNsD,QAAQ,EAAItD,AAXV,IAAI,CAWasD,QAAQ,CAAGR,EAASS,IAAI,EAClDvD,AAZS,IAAI,CAYNwD,QAAQ,EAAIxD,AAZV,IAAI,CAYawD,QAAQ,CAAGV,EAASW,IAAI,CAClDzD,AAbS,IAAI,CAaNkD,QAAQ,CAAGJ,EAASK,IAAI,CAC/BnD,AAdS,IAAI,CAcNoD,QAAQ,CAAGN,EAASO,IAAI,CAC/BrD,AAfS,IAAI,CAeNsD,QAAQ,CAAGR,EAASS,IAAI,CAC/BvD,AAhBS,IAAI,CAgBNwD,QAAQ,CAAGV,EAASW,IAAI,CAC/BzC,EAAQhB,AAjBC,IAAI,CAiBEV,uBAAuB,CAClCU,AAlBK,IAAI,CAkBFV,uBAAuB,CAACsB,MAAM,CAAC7G,IAAI,CAlBrC,IAAI,CAkB0C0I,EAAgBC,EAAgBhD,EAAatD,GAAW,CAAC,EAChH4D,AAnBS,IAAI,CAmBN0D,YAAY,CAAG,SAErB,CACD,AAA+B,OAA9B9F,CAAAA,EAAKoC,AAtBG,IAAI,CAsBA0D,YAAY,AAAD,GAAe9F,AAAO,KAAK,IAAZA,GAAsBoC,CAAAA,AAtBpD,IAAI,CAsBuD0D,YAAY,CAAG,CAC/E5C,SAAUd,AAvBL,IAAI,CAuBQiD,iBAAiB,CAACnC,QAAQ,CAC3CC,MAAOf,AAxBF,IAAI,CAwBKiD,iBAAiB,CAAClC,KAAK,AACzC,CAAA,EACA,IAAK,IAAImB,EAAK,EAAGyB,EAAK3D,AA1Bb,IAAI,CA0BgB0D,YAAY,CAAC5C,QAAQ,CAAEoB,EAAKyB,EAAG1G,MAAM,CAAEiF,IAAM,CACtE,IAAI5H,EAAUqJ,CAAE,CAACzB,EAAG,AACpB5H,CAAAA,EAAQsJ,aAAa,CAAG,EAAE,CAC1BtJ,EAAQuJ,YAAY,CAAG,EAAE,CACzB,IAAK,IAAIC,EAAK,EAAGC,EAAKzJ,EAAQ0J,IAAI,CAAEF,EAAKC,EAAG9G,MAAM,CAAE6G,IAAM,CACtD,IAAIG,EAAYF,CAAE,CAACD,EAAG,CAClBI,EAAc7D,EAhCjB,IAAI,CAiCD4D,GACAE,EAAY9D,EAlCf,IAAI,CAmCD/F,GACJS,EAAWgC,KAAKqH,IAAI,CAACrH,KAAKsH,GAAG,CAACH,EAAYvE,CAAC,CAAGwE,EAAUxE,CAAC,CAAE,GACvD5C,KAAKsH,GAAG,CAACH,EAAYtE,CAAC,CAAGuE,EAAUvE,CAAC,CAAE,IAU1CiD,EAAS5B,GARL9F,EADA,CAAA,AAAqF,OAApFyH,CAAAA,EAAK,AAA+B,OAA9BD,CAAAA,EAAKrI,EAAQgK,WAAW,AAAD,GAAe3B,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,EAAG1H,MAAM,AAAD,GAAe2H,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,EAAGzH,MAAM,AAAD,EACrHb,EAAQgK,WAAW,CAACrJ,MAAM,CAACE,MAAM,CAErC6H,CAAAA,MAAAA,EAAmE,KAAK,EAAIA,EAAqB7H,MAAM,AAAD,EAClG6H,EAAqB7H,MAAM,CAG3BuD,EAAgBzD,MAAM,CAACE,MAAM,GAEJ,EAClC8F,EAAmB9F,EAASA,EAC5BJ,EAAWI,EAAS0H,GACpBjE,EAAQtE,EAAQsJ,aAAa,EAC7BtJ,EAAQsJ,aAAa,CAAClD,IAAI,CAACuD,GAEtBrF,EAAQtE,EAAQuJ,YAAY,GACjCvJ,EAAQuJ,YAAY,CAACnD,IAAI,CAACuD,EAElC,CACI3J,EAAQuJ,YAAY,CAAC5G,MAAM,EAC3B+D,CAAAA,CAAK,CAAC1G,EAAQiC,EAAE,CAAC,CAAGjC,EAAQuJ,YAAY,AAAD,EAG3C,IAAK,IADD/D,EAAI,EACCyE,EAAK,EAAGC,EAAKlK,EAAQsJ,aAAa,CAAEW,EAAKC,EAAGvH,MAAM,CAAEsH,IAAM,CAC/D,IAAInE,EAAIoE,CAAE,CAACD,EAAG,AACdvD,CAAAA,CAAK,CAAC1G,EAAQiC,EAAE,CAAG,SAAWuD,IAAI,CAAG,CAACM,EAAE,AAC5C,CACJ,CACA,IAAK,IAAIqE,EAAK,EAAGC,EAAK1E,AAlEb,IAAI,CAkEgB0D,YAAY,CAAC3C,KAAK,CAAE0D,EAAKC,EAAGzH,MAAM,CAAEwH,IAAM,CACnE,IAAI1D,EAAQ2D,CAAE,CAACD,EAAG,AAClBzD,CAAAA,CAAK,CAACD,EAAMxE,EAAE,CAAC,CAAGwE,EAAMiD,IAAI,AAChC,CACJ,CACA,OAAOhD,CACX,CACJ,EAYA2D,EAAmB,EAAE,CAAEC,EAAiB,EAgDxC,SAASC,EAAcC,CAAI,CAAEC,CAAO,CAAEtK,CAAS,EAC3CqK,EAAKE,IAAI,CAAC,CAAED,QAASA,CAAQ,GAAGE,OAAO,CAAC,CAAEF,QAAS,CAAE,EAAGtK,EAC5D,CAKA,SAASyK,EAA4BC,CAAW,CAAEC,CAAS,CAAE3K,CAAS,CAAEsK,CAAO,EAC3E,IAAInH,EACA+E,EAEJ0C,EAAiBF,EAAaJ,EAAStK,EAAW,CAAA,EAAM,CAAA,GAExD,IAAK,IAAIyH,EAAK,EAA4BA,EAAKoD,AAAhBF,EAA4BnI,MAAM,CAAEiF,IAE/D,AAA0E,OAAzES,CAAAA,EAAK,AAAmB,OAAlB/E,CAAAA,EAAKwC,AADJkF,AADmBF,CACR,CAAClD,EAAG,CACTqD,KAAK,AAAD,GAAe3H,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,EAAG4H,OAAO,AAAD,GAAe7C,AAAO,KAAK,IAAZA,GAAyBA,EAAG5I,IAAI,CAAC6D,EAE3H,CAKA,SAASyH,EAAiBI,CAAQ,CAAEV,CAAO,CAAEtK,CAAS,CAAEiL,CAAa,CAAEC,CAAe,EAC9EF,EAASF,KAAK,GACVG,GAAiBD,EAASF,KAAK,CAACK,OAAO,GACvCH,EAASF,KAAK,CAACK,OAAO,CAACC,IAAI,GAC3BhB,EAAcY,EAASF,KAAK,CAACK,OAAO,CAAEb,EAAStK,IAE/CkL,GAAmBF,EAASF,KAAK,CAACO,SAAS,GAC3CL,EAASF,KAAK,CAACO,SAAS,CAACD,IAAI,GAC7BhB,EAAcY,EAASF,KAAK,CAACO,SAAS,CAAEf,EAAStK,IAG7D,CAKA,SAASkH,EAAmBM,CAAM,EAI9B,IAAK,IAHD8D,EAAY9D,EAAOhF,MAAM,CACzB+I,EAAO,EACPC,EAAO,EACFnG,EAAI,EAAGA,EAAIiG,EAAWjG,IAC3BkG,GAAQ/D,CAAM,CAACnC,EAAE,CAACH,CAAC,CACnBsG,GAAQhE,CAAM,CAACnC,EAAE,CAACF,CAAC,CAEvB,MAAO,CACHD,EAAGqG,EAAOD,EACVnG,EAAGqG,EAAOF,CACd,CACJ,CAMA,SAASG,EAAaC,CAAa,CAAEC,CAAY,EAC7C,IAAIC,EAAQ,EAAE,CAUd,OATAA,EAAMpJ,MAAM,CAAGmJ,EACfD,EAAcrF,QAAQ,CAACwF,OAAO,CAAC,SAAUhM,CAAO,EAC5CA,EAAQ0J,IAAI,CAACsC,OAAO,CAAC,SAAUxB,CAAI,EAC/BuB,CAAK,CAACvB,EAAKnE,SAAS,CAAC,CAAGmE,CAC5B,EACJ,GACAqB,EAAcpF,KAAK,CAACuF,OAAO,CAAC,SAAUvF,CAAK,EACvCsF,CAAK,CAACtF,EAAMiD,IAAI,CAAC,EAAE,CAACrD,SAAS,CAAC,CAAGI,EAAMiD,IAAI,CAAC,EAAE,AAClD,GACOqC,CACX,CAKA,SAASE,IACL,OAAOxJ,KAAKyJ,MAAM,GAAGC,QAAQ,CAAC,IAAIC,SAAS,CAAC,EAAG,GAAK,IAAM9B,GAC9D,CAKA,SAAS+B,EAAelB,CAAQ,CAAEmB,CAAW,CAAEC,CAAa,EACpDpB,EAASF,KAAK,GACVqB,GAAenB,EAASF,KAAK,CAACK,OAAO,EACrCH,EAASF,KAAK,CAACK,OAAO,CAACkB,IAAI,GAE3BD,GAAiBpB,EAASF,KAAK,CAACO,SAAS,EACzCL,EAASF,KAAK,CAACO,SAAS,CAACgB,IAAI,GAGzC,CAEA,SAASC,EAAsBC,CAAK,EAEhCzB,AADYyB,CAAAA,EAAMzB,KAAK,EAAIyB,EAAMC,MAAM,AAAD,EAChCC,cAAc,CAAC,iBAAkBF,EAAO,SAAUG,CAAC,EAKrD,IAJIvJ,EACA+E,EACAC,EACAe,EACA4B,EAAQ4B,EAAE5B,KAAK,EAAI4B,EAAEF,MAAM,CAC3BjH,EAASuF,EAAMvF,MAAM,CACrBoH,EAAQpH,EAAOoH,KAAK,CACpBC,EAAQrH,EAAOqH,KAAK,CACpBC,EAAQtH,EAAOsH,KAAK,CACpBC,EAAWD,EAAMC,QAAQ,CACzBC,EAAUF,EAAME,OAAO,CACvBC,EAAUH,EAAMG,OAAO,CAE3B,GAAI9M,AADiB,CAAA,AAAkC,OAAjCgJ,CAAAA,EAAK3D,EAAO5D,OAAO,CAAC9B,OAAO,AAAD,GAAeqJ,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,EAAGhJ,cAAc,AAAD,GAClF4K,EAAMY,aAAa,CAAE,CACvC,IAAIuB,EAAcnC,EAAMY,aAAa,CAC5BxI,GAAG,CAAC,SAAUqG,CAAI,EAAI,OAAOA,EAAKrE,CAAC,AAAE,GACrCgI,IAAI,CAAC,SAAUxO,CAAC,CACrByO,CAAC,EAAI,OAAOzO,EAAIyO,CAAG,GACnBC,EAActC,EAAMY,aAAa,CAC5BxI,GAAG,CAAC,SAAUqG,CAAI,EAAI,OAAOA,EAAKpE,CAAC,AAAE,GACrC+H,IAAI,CAAC,SAAUxO,CAAC,CACrByO,CAAC,EAAI,OAAOzO,EAAIyO,CAAG,GACnBvE,EAAOqE,CAAW,CAAC,EAAE,CACrBvE,EAAOuE,CAAW,CAACA,EAAYzK,MAAM,CAAG,EAAE,CAC1CwG,EAAOoE,CAAW,CAAC,EAAE,CACrBtE,EAAOsE,CAAW,CAACA,EAAY5K,MAAM,CAAG,EAAE,CAC1C6K,EAAU/K,KAAKgL,GAAG,CAAC,AAAC5E,CAAAA,EAAOE,CAAG,EAAK,IACnC2E,EAAUjL,KAAKgL,GAAG,CAAC,AAACxE,CAAAA,EAAOE,CAAG,EAAK,IACnCwE,EAAKlL,KAAKmL,GAAG,CAAC7E,EACdF,GAAQ2E,EACRK,EAAKpL,KAAKC,GAAG,CAACqG,EACdF,GAAQ2E,EACRM,EAAKrL,KAAKmL,GAAG,CAACzE,EACdF,GAAQyE,EACRK,EAAKtL,KAAKC,GAAG,CAACyG,EACdF,GAAQyE,EACZ,GAAIR,EACAA,EAAQc,WAAW,CAAC,CAAEL,GAAIA,EAAIE,GAAIA,EAAIC,GAAIA,EAAIC,GAAIA,CAAG,QAEpD,GAAIjB,GAASC,EAAO,CACrB,IAAIkB,EAAOnB,EAAMoB,QAAQ,CAACP,GACtBQ,EAAOrB,EAAMoB,QAAQ,CAACL,GACtBO,EAAOrB,EAAMmB,QAAQ,CAACJ,GACtBO,EAAOtB,EAAMmB,QAAQ,CAACH,GACtBd,GACA3J,CAAAA,AAA+B2K,EAAO3K,AAAtCA,CAAAA,EAAK,CAAC8K,EAAMC,EAAMJ,EAAME,EAAK,AAAD,CAAY,CAAC,EAAE,CAAEA,EAAO7K,CAAE,CAAC,EAAE,CAAE8K,EAAO9K,CAAE,CAAC,EAAE,CAAE+K,EAAO/K,CAAE,CAAC,EAAE,AAAD,EAEpF2K,EAAOE,GACP9F,CAAAA,AAAmB4F,EAAO5F,AAA1BA,CAAAA,EAAK,CAAC8F,EAAMF,EAAK,AAAD,CAAY,CAAC,EAAE,CAAEE,EAAO9F,CAAE,CAAC,EAAE,AAAD,EAE5C+F,EAAOC,GACP/F,CAAAA,AAAmB8F,EAAO9F,AAA1BA,CAAAA,EAAK,CAAC+F,EAAMD,EAAK,AAAD,CAAY,CAAC,EAAE,CAAEC,EAAO/F,CAAE,CAAC,EAAE,AAAD,EAE5C6E,IACAA,EAAQmB,KAAK,CAAG,CAAA,EAChBnB,EAAQoB,KAAK,CAAG,CAAA,GAEpBvB,EAAMwB,SAAS,CAAC,CACZC,KAAM,CACFpJ,EAAG4I,EACH3I,EAAG8I,EACHM,MAAOP,EAAOF,EACdU,OAAQN,EAAOD,CACnB,CACJ,EACJ,CACJ,CACJ,EACJ,CAKA,SAASQ,EAAelJ,CAAM,CAAEmJ,CAAG,EAC/B,IAAI7B,EAAQtH,EAAOsH,KAAK,CACpBF,EAAQpH,EAAOoH,KAAK,CACpBC,EAAQrH,EAAOqH,KAAK,QACxB,AAAIC,EAAME,OAAO,CACNF,EAAME,OAAO,CAAC4B,sBAAsB,CAACD,GAEzC,CACHxJ,EAAGyH,EAAQA,EAAMiC,OAAO,CAACF,EAAIxJ,CAAC,EAAI,EAClCC,EAAGyH,EAAQA,EAAMgC,OAAO,CAACF,EAAIvJ,CAAC,EAAI,CACtC,CACJ,CAEA,SAAS0J,EAA0BC,CAAU,EAQzC,IAPI3L,EACA+E,EACAC,EACAe,EACAG,EACAC,EACAQ,EAWAiF,EACArE,EACAsE,EAXAnC,EAAQtH,AADC,IAAI,CACEsH,KAAK,CACpBE,EAAUF,EAAME,OAAO,CACvB/M,EAAYgE,EAAW,AAAkC,OAAjCb,CAAAA,EAAKoC,AAHpB,IAAI,CAGuB5D,OAAO,CAAC9B,OAAO,AAAD,GAAesD,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,EAAGnD,SAAS,EACtGiP,EAAejP,EAAUC,QAAQ,EAAI,IACrCiP,EAAc,AAAoC,OAAnChH,CAAAA,EAAK3C,AALX,IAAI,CAKciD,iBAAiB,AAAD,GAAeN,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,EAAGgH,WAAW,CACjGC,EAAWD,MAAAA,EAAiD,KAAK,EAAIA,EAAYC,QAAQ,CACzFC,EAAWF,MAAAA,EAAiD,KAAK,EAAIA,EAAYE,QAAQ,CACzFzE,EAAY,EAAE,CAKdvC,EAAS,EACTiH,EAAO,EACPC,EAAO,EACPC,EAAmB,CAAA,EACnBC,EAAc,CAAA,EAClB,GAAIJ,GAAYD,EAAU,CAEtB,IAAIM,EAAS7J,EApBJ,IAAI,CAmBb8E,EAAcyE,CAAQ,CAACL,EAAWY,OAAO,CAAC,EAG1CL,EAAOI,EAAOvK,CAAC,CAAI6H,CAAAA,EAAU,EAAIF,EAAMhH,QAAQ,AAAD,EAC9CyJ,EAAOG,EAAOtK,CAAC,CAAI4H,CAAAA,EAAU,EAAIF,EAAM/G,OAAO,AAAD,EAEzC4E,AAAiC,IAAjCA,EAAYiF,SAAS,CAACnN,MAAM,EAE5BuM,EAAcK,CAAQ,CADXD,MAAAA,EAA2C,KAAK,EAAIA,CAAQ,CAACL,EAAWY,OAAO,CAAC,CAACC,SAAS,CAAC,EAAE,CACxE,CAE3B,CAAA,AAA6B,OAA5BxH,CAAAA,EAAKuC,EAAYI,KAAK,AAAD,GAAe3C,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,EAAGgD,OAAO,AAAD,GACvE,CAAA,AAA6B,OAA5BjC,CAAAA,EAAK6F,EAAYjE,KAAK,AAAD,GAAe5B,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,EAAG0G,KAAK,AAAD,GACtEb,EAAYjE,KAAK,CAAC+E,KAAK,EACtBd,CAAAA,EAAYjE,KAAK,CAAC8E,KAAK,GAAKlF,EAAYI,KAAK,CAAC8E,KAAK,EAChDb,EAAYjE,KAAK,CAAC+E,KAAK,GAAKnF,EAAYI,KAAK,CAAC+E,KAAK,AAAD,IACtDb,EAAetE,EAAYI,KAAK,CAACK,OAAO,CAAC2E,OAAO,GAEhD1H,EAAS,AAAC,CAAA,AAAqC,OAApCiB,CAAAA,EAAKqB,EAAYI,KAAK,CAACK,OAAO,AAAD,GAAe9B,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,EAAG0G,KAAK,AAAD,EACnF,EAAIf,EAAaT,KAAK,CAAG,EAC7B7D,EAAYI,KAAK,CAACK,OAAO,CAACZ,IAAI,CAAC,CAC3BrF,EAAG6J,EAAYjE,KAAK,CAAC8E,KAAK,CAAGxH,EAC7BjD,EAAG4J,EAAYjE,KAAK,CAAC+E,KAAK,CAAGzH,CACjC,GACAsC,EAAYI,KAAK,CAACK,OAAO,CAACX,OAAO,CAAC,CAC9BtF,EAAGmK,EAAQ3E,CAAAA,EAAYI,KAAK,CAACK,OAAO,CAACzK,MAAM,EAAI,CAAA,EAC/CyE,EAAGmK,EAAQ5E,CAAAA,EAAYI,KAAK,CAACK,OAAO,CAACzK,MAAM,EAAI,CAAA,CACnD,EAAGV,EAAW,WACV,IAAImD,EACA+E,EACJsH,EAAc,CAAA,EAEd,AAAoF,OAAnFtH,CAAAA,EAAK,AAA6B,OAA5B/E,CAAAA,EAAK4L,EAAYjE,KAAK,AAAD,GAAe3H,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,EAAG4H,OAAO,AAAD,GAAe7C,AAAO,KAAK,IAAZA,GAAyBA,EAAG5I,IAAI,CAAC6D,EACjI,GAEK,CAAA,AAAuC,OAAtCmG,CAAAA,EAAKoB,EAAYI,KAAK,CAACO,SAAS,AAAD,GAAe/B,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,EAAG0G,SAAS,AAAD,GACnF,CAAA,AAAuC,OAAtClG,CAAAA,EAAKiF,EAAYjE,KAAK,CAACO,SAAS,AAAD,GAAevB,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,EAAGkG,SAAS,AAAD,IACpFtF,EAAYI,KAAK,CAACO,SAAS,CAACd,IAAI,CAAC,CAC7BrF,EAAG6J,EAAYjE,KAAK,CAACO,SAAS,CAAC2E,SAAS,CAAC9K,CAAC,CAC1CC,EAAG4J,EAAYjE,KAAK,CAACO,SAAS,CAAC2E,SAAS,CAAC7K,CAAC,AAC9C,GACAuF,EAAYI,KAAK,CAACO,SAAS,CAACb,OAAO,CAAC,CAChCtF,EAAGwF,EAAYI,KAAK,CAACO,SAAS,CAAC2E,SAAS,CAAC9K,CAAC,CAC1CC,EAAGuF,EAAYI,KAAK,CAACO,SAAS,CAAC2E,SAAS,CAAC7K,CAAC,AAC9C,EAAGnF,MAIN0K,AAAiC,IAAjCA,EAAYiF,SAAS,CAACnN,MAAM,EAGjC0J,EAAexB,EAAa,CAAA,EAAM,CAAA,GAClC9F,EAAY,WAERgG,EAAiBF,EAAa,GAAK1K,EAAW,CAAA,EAAM,CAAA,EACxD,EAAGiP,EAAe,KAKlB/C,EAAexB,EAAa,CAAA,EAAM,CAAA,GAClCA,EAAYiF,SAAS,CAAC9D,OAAO,CAAC,SAAUxB,CAAI,EACxC,IAAIlH,EACA+E,EACAC,EACAiH,CAAAA,MAAAA,EAA2C,KAAK,EAAIA,CAAQ,CAAC/E,EAAK,AAAD,IACjE0E,EAAcK,CAAQ,CAAC/E,EAAK,CAC5BM,EAAU1E,IAAI,CAAC8I,GACX,CAAA,AAA6B,OAA5B5L,CAAAA,EAAK4L,EAAYjE,KAAK,AAAD,GAAe3H,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,EAAGgI,OAAO,AAAD,IACvEoE,EAAmB,CAAA,EACnBR,EAAYjE,KAAK,CAACK,OAAO,CAACC,IAAI,GAC9B2D,EAAYjE,KAAK,CAACK,OAAO,CAACX,OAAO,CAAC,CAC9BtF,EAAGmK,EAAQN,CAAAA,EAAYjE,KAAK,CAACK,OAAO,CAACzK,MAAM,EAAI,CAAA,EAC/CyE,EAAGmK,EAAQP,CAAAA,EAAYjE,KAAK,CAACK,OAAO,CAACzK,MAAM,EAAI,CAAA,EAC/C4J,QAAS,EACb,EAAGtK,EAAW,WACVwP,EAAc,CAAA,EACd/E,EAA4BC,EAAaC,EAAW3K,EAAW,GACnE,GACI+O,EAAYjE,KAAK,CAACO,SAAS,EAC3B0D,AAAkC,QAAlCA,EAAYjE,KAAK,CAACO,SAAS,CAAClG,CAAC,EAC5B,CAAA,AAAsF,OAArFgD,CAAAA,EAAK,AAA6B,OAA5BD,CAAAA,EAAKwC,EAAYI,KAAK,AAAD,GAAe5C,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,EAAGmD,SAAS,AAAD,GAAelD,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,EAAG6H,SAAS,AAAD,IACnIjB,EAAYjE,KAAK,CAACO,SAAS,CAACD,IAAI,GAChC2D,EAAYjE,KAAK,CAACO,SAAS,CAACb,OAAO,CAAC,CAChCtF,EAAGwF,EAAYI,KAAK,CAACO,SAAS,CAAC2E,SAAS,CAAC9K,CAAC,CAC1CC,EAAGuF,EAAYI,KAAK,CAACO,SAAS,CAAC2E,SAAS,CAAC7K,CAAC,CAC1CmF,QAAS,EACb,EAAGtK,KAInB,GAEA4E,EAAY,WACH4K,GACD/E,EAA4BC,EAAaC,EAAW3K,EAAW,IAEvE,EAAGiP,GACEM,GACD3K,EAAY,WACR6F,EAA4BC,EAAaC,EAAW3K,EAAW,GACnE,EAAGiP,EAAe,GAG9B,CACJ,CAKA,SAASgB,IACL,IAAI9M,CAEJ,AAAwC,QAAvCA,CAAAA,EAAK,IAAI,CAAC+M,uBAAuB,AAAD,GAAe/M,AAAO,KAAK,IAAZA,GAAyBA,EAAG0I,OAAO,CAAC,SAAUf,CAAK,EAC/F,IAAI3H,CACJ,AAAuE,QAAtEA,CAAAA,EAAK2H,MAAAA,EAAqC,KAAK,EAAIA,EAAMC,OAAO,AAAD,GAAe5H,AAAO,KAAK,IAAZA,GAAyBA,EAAG7D,IAAI,CAACwL,EACpH,GACA,IAAI,CAACoF,uBAAuB,CAAG,IACnC,CAKA,SAASC,IAML,IALIhN,EACA+E,EACAC,EACAe,EACAG,EAEA+G,EACAC,EACAC,EACA/P,EACAgQ,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAEAnF,EACAzE,EACA6J,EACAhG,EAhBAvF,EAAS,IAAI,CAAEsH,EAAQtH,EAAOsH,KAAK,CAAEE,EAAUF,EAAME,OAAO,CAAEgE,EAAQxL,EAAO7C,SAAS,CAAC,KAAMsO,EAAQzL,EAAO7C,SAAS,CAAC,KAAMuO,EAAiB1L,EAAO5D,OAAO,CAAC9B,OAAO,CAAEqR,EAAe3L,EAAO+C,eAAe,GAAI6I,EAAe,EAAE,CAAEC,EAAe,EAAE,CAAEC,EAAqB,EAAE,CA8B/Q,GATItE,GAAWxH,EAAO+L,EAAE,CAAC,aAAeP,GAASC,GAC7C,CAAA,AAA+B,OAA9B7N,CAAAA,EAAKoC,EAAO5D,OAAO,CAAC4H,IAAI,AAAD,GAAepG,AAAO,KAAK,IAAZA,GAAyBA,EAAG0I,OAAO,CAAC,SAAUlG,CAAC,CAAEN,CAAC,EACrF,IAAIkM,EAAKhM,EAAOiM,YAAY,CAAC7L,GACzB4L,IACAR,CAAK,CAAC1L,EAAE,CAAGkM,EAAGrM,CAAC,CACf8L,CAAK,CAAC3L,EAAE,CAAGkM,EAAGpM,CAAC,CAEvB,EAAC,EAED,AAAC8L,CAAAA,MAAAA,EAAuD,KAAK,EAAIA,EAAenR,OAAO,AAAD,GACrFiR,CAAAA,MAAAA,EAAqC,KAAK,EAAIA,EAAMvO,MAAM,AAAD,GACzDwO,CAAAA,MAAAA,EAAqC,KAAK,EAAIA,EAAMxO,MAAM,AAAD,GAC1D,CAACqK,EAAM4E,KAAK,CAAE,CACdZ,EAAOI,EAAe7Q,eAAe,CAACyQ,IAAI,CAG1CC,AAFAA,CAAAA,EAAmBG,EAAe7Q,eAAe,AAAD,EAE/B4G,iBAAiB,CAAGrC,EAAemM,EAAiBzQ,QAAQ,EACzE4D,EAAgB7D,eAAe,CAACC,QAAQ,CAAEwM,EAAM6E,SAAS,EAC7DZ,EAAiBrK,iBAAiB,CAAG9B,EAAemM,EAAiBxQ,QAAQ,EACzE2D,EAAgB7D,eAAe,CAACE,QAAQ,CAAEuM,EAAM6E,SAAS,EAC7DnR,EAAkBuQ,EAAiBvQ,eAAe,EAC9C0D,EAAgB7D,eAAe,CAACG,eAAe,CAEnD,IAAIoR,EAAWb,EAAiB9J,iBAAiB,CAAG,EAChD4K,EAAKnD,EAAelJ,EAAQ,CAAEL,EAAG,EACjCC,EAAG,CAAE,GACL0M,EAAKpD,EAAelJ,EAAQ,CAAEL,EAAGyM,EACjCxM,EAAGwM,CAAS,GAChBpB,EAAkBjO,KAAKgL,GAAG,CAACsE,EAAG1M,CAAC,CAAG2M,EAAG3M,CAAC,EACtCsL,EAAkBlO,KAAKgL,GAAG,CAACsE,EAAGzM,CAAC,CAAG0M,EAAG1M,CAAC,EAEtC,IAAK,IAAIE,EAAI,EAAGA,EAAI0L,EAAMvO,MAAM,CAAE6C,IAC1B,CAACE,EAAOuM,QAAQ,GACZ,AAAC3N,EAAQuM,IACRvM,EAAQsM,IACRtM,EAAQyM,IACRzM,EAAQwM,GAIJnM,EAASwM,CAAK,CAAC3L,EAAE,GACtBb,EAASoM,IACTpM,EAASmM,KACTD,EAAapO,KAAKC,GAAG,CAACwO,CAAK,CAAC1L,EAAE,CAAEqL,GAChCD,EAAanO,KAAKmL,GAAG,CAACsD,CAAK,CAAC1L,EAAE,CAAEoL,GAChCG,EAAatO,KAAKC,GAAG,CAACyO,CAAK,CAAC3L,EAAE,EAAIuL,EAAYA,GAC9CD,EAAarO,KAAKmL,GAAG,CAACuD,CAAK,CAAC3L,EAAE,EAAIsL,EAAYA,KAT9CD,EAAaD,EAAaM,CAAK,CAAC1L,EAAE,CAClCuL,EAAaD,EAAaK,CAAK,CAAC3L,EAAE,GAatC0L,CAAK,CAAC1L,EAAE,EAAK6L,EAAatI,IAAI,CAAG2H,GACjCQ,CAAK,CAAC1L,EAAE,EAAK6L,EAAaxI,IAAI,CAAG6H,GACjC,AAACS,CAAAA,CAAK,CAAC3L,EAAE,EAAI6L,EAAalI,IAAI,AAAD,GACxBkI,EAAalI,IAAI,CAAGwH,GACzB,AAACQ,CAAAA,CAAK,CAAC3L,EAAE,EAAI6L,EAAapI,IAAI,AAAD,GACxBoI,EAAapI,IAAI,CAAG0H,IACzBW,EAAalL,IAAI,CAAC8K,CAAK,CAAC1L,EAAE,EAC1B+L,EAAanL,IAAI,CAAC+K,CAAK,CAAC3L,EAAE,EAC1BgM,EAAmBpL,IAAI,CAACZ,IAI5BlB,EAAQuM,IAAevM,EAAQsM,IAC/BjM,EAASoM,IAAepM,EAASmM,KACjCpL,EAAOuM,QAAQ,CAAGpB,EAClBnL,EAAOwM,QAAQ,CAAGtB,EAClBlL,EAAOyM,QAAQ,CAAGpB,EAClBrL,EAAO0M,QAAQ,CAAGtB,GAmBtBjF,EAAgBzE,AADhBA,CAAAA,EAAciL,CAhBV5N,EAAWuM,GACCA,EAEPtL,EAAOV,uBAAuB,CAC/BgM,GAAQtL,EAAOV,uBAAuB,CAACgM,EAAK,CAChCtL,EAAOV,uBAAuB,CAACgM,EAAK,CAGpCM,EAAa3O,MAAM,CAAGjC,EAC9BgF,EAAOV,uBAAuB,CAACsB,MAAM,CACrCZ,EAAOV,uBAAuB,CAACC,IAAI,CAI/B,WAAc,MAAO,CAAA,CAAO,GAEpBxF,IAAI,CAAC,IAAI,CAAE6R,EAAcC,EAAcC,EAAoBP,EAAgB,EACrEvL,EAAO4M,gBAAgB,CAAClL,EAAagK,GAAkBhK,EAEjFgK,EAAejR,SAAS,EACvB,CAAA,AAA+F,OAA9FmI,CAAAA,EAAK,AAAoC,OAAnCD,CAAAA,EAAK3C,EAAOiD,iBAAiB,AAAD,GAAeN,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,EAAGgH,WAAW,AAAD,GAAe/G,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,EAAGiH,QAAQ,AAAD,GAE3IgD,AA5cZ,SAA0BhD,CAAQ,EAG9B,IAAK,IAFDjM,EACA+E,EACKT,EAAK,EAAGU,EAAKrJ,OAAOgE,IAAI,CAACsM,GAAW3H,EAAKU,EAAG3F,MAAM,CAAEiF,IAEzD,AAAsF,OAArFS,CAAAA,EAAK,AAA+B,OAA9B/E,CAAAA,EAAKiM,CAAQ,CADVjH,CAAE,CAACV,EAAG,CACS,CAACqD,KAAK,AAAD,GAAe3H,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,EAAG4H,OAAO,AAAD,GAAe7C,AAAO,KAAK,IAAZA,GAAyBA,EAAG5I,IAAI,CAAC6D,EAEvI,EAqc6BoC,EAAOiD,iBAAiB,CAAC0G,WAAW,CAACE,QAAQ,EAC9DgB,EAAiB7K,EAAOiD,iBAAiB,CAAC0G,WAAW,CAACC,QAAQ,EAG9DiB,EAAiB,CAAC,EAGtBC,EAAaU,EAAMvO,MAAM,CACzB8N,EAAuB/K,EAAOiD,iBAAiB,CAC3CkD,IACAnG,EAAO8M,SAAS,CAACrQ,QAAQ,CAAG,IA9xBeN,EA8xBQ,CAC/CK,QAAS,CACLmD,EAAGwG,EAAc4G,YAAY,CAC7BnN,EAAGuG,EAAc6G,YAAY,AACjC,CACJ,GACAhN,EAAOiN,cAAc,CAAG,CAAA,EACxBjN,EAAOiD,iBAAiB,CAAGkD,EAC3BnG,EAAOkN,QAAQ,CAAG/G,EAAc+G,QAAQ,EAE5ChT,EAAmBiT,KAAK,CAAC,IAAI,EACzBhH,GAAiBnG,EAAOiD,iBAAiB,GAEzC,AAA6C,OAA5CU,CAAAA,EAAK3D,EAAOiD,iBAAiB,CAACnC,QAAQ,AAAD,GAAe6C,AAAO,KAAK,IAAZA,GAAyBA,EAAG2C,OAAO,CAAC,SAAUhM,CAAO,EAEtGiL,AADAA,CAAAA,EAAQvF,EAAOiC,MAAM,CAAC3H,EAAQ8S,KAAK,CAAC,AAAD,EAC7BC,SAAS,CAAG,CAAA,EAClB9H,EAAMY,aAAa,CAAG7L,EAAQ0J,IAAI,CAClCuB,EAAM+H,mBAAmB,CAAGhT,EAAQ0J,IAAI,CAAC/G,MAAM,CAC/C3C,EAAQiL,KAAK,CAAGA,EAEhB5G,EAAS4G,EAAO,QAASwB,EAC7B,GAEA,AAA0C,OAAzCjD,CAAAA,EAAK9D,EAAOiD,iBAAiB,CAAClC,KAAK,AAAD,GAAe+C,AAAO,KAAK,IAAZA,GAAyBA,EAAGwC,OAAO,CAAC,SAAUvF,CAAK,EACjGA,EAAMwE,KAAK,CAAGvF,EAAOiC,MAAM,CAAClB,EAAMqM,KAAK,CAAC,AAC5C,GAEI1B,EAAejR,SAAS,EACxBuF,EAAOiD,iBAAiB,EACxBjD,CAAAA,EAAOiD,iBAAiB,CAAC0G,WAAW,CAAG,CACnCE,SAAUgB,EACVjB,SAAU5J,EAAOuN,cAAc,CAACpH,EAAe4E,EAAsBD,EACzE,CAAA,EAICY,EAAejR,SAAS,CAIzB,IAAI,CAAC+S,iBAAiB,GAHtB,IAAI,CAACC,oBAAoB,GAK7B,IAAI,CAAC9C,uBAAuB,CACxB,IAAI,CAACsC,cAAc,CAAG,IAAI,CAAChL,MAAM,CAAG,KAEhD,MAEI/H,EAAmBiT,KAAK,CAAC,IAAI,CAErC,CAEA,SAASO,EAAmC5M,CAAQ,CAAEQ,CAAM,CAAEC,CAAM,EAEhE,IAAK,IADDC,EAAuB,EAAE,CACpBc,EAAe,EAAGA,EAAexB,EAAS7D,MAAM,CAAEqF,IAAgB,CACvE,IAAI+J,EAAKhM,EAAe,IAAI,CAAE,CAAEV,EAAG2B,EAC/B1B,EAAG2B,CAAO,GACV+K,EAAKjM,EAAe,IAAI,CAAE,CACtBV,EAAGmB,CAAQ,CAACwB,EAAa,CAACV,IAAI,CAC9BhC,EAAGkB,CAAQ,CAACwB,EAAa,CAACT,IAAI,AAClC,GACA9G,EAAWgC,KAAKqH,IAAI,CAACrH,KAAKsH,GAAG,CAACgI,EAAG1M,CAAC,CAAG2M,EAAG3M,CAAC,CAAE,GACvC5C,KAAKsH,GAAG,CAACgI,EAAGzM,CAAC,CAAG0M,EAAG1M,CAAC,CAAE,IAC9B4B,EAAqBd,IAAI,CAAC,CAAE4B,aAAcA,EAAcvH,SAAUA,CAAS,EAC/E,CACA,OAAOyG,EAAqBmG,IAAI,CAAC,SAAUxO,CAAC,CAAEyO,CAAC,EAAI,OAAOzO,EAAE4B,QAAQ,CAAG6M,EAAE7M,QAAQ,AAAE,EACvF,CAEA,SAAS4S,EAAuBjM,CAAW,CAAEtF,CAAO,EAChD,IAWI+N,EACA5E,EACAtD,EACA2L,EACA7H,EACA9K,EACA4S,EACAC,EACAC,EACAC,EACA1J,EACA2J,EArBAjK,EAAOhE,AADE,IAAI,CACC5D,OAAO,CAAC4H,IAAI,CAC1B+I,EAAe,EAAE,CACjBC,EAAe,EAAE,CACjBlM,EAAW,EAAE,CACbC,EAAQ,EAAE,CACVmM,EAAW,EAAE,CAEbtS,EAAqBmC,KAAKC,GAAG,CAAC,EAC9BZ,EAAQxB,kBAAkB,EAAI,GAC9BwS,EAAQ,EAcZ,GAAIrO,EAAW3C,EAAQvB,eAAe,CAACyQ,IAAI,GACvC,CAACtL,AAzBQ,IAAI,CAyBLkO,wBAAwB,CAACxM,GAGjC,OAFA7C,EAAM,+EAC2C,CAAA,EAAOmB,AA3B/C,IAAI,CA2BkDsH,KAAK,EAC7D,CAAA,EAEX,IAAK,IAAI6G,KAAKzM,EACV,GAAIA,CAAW,CAACyM,EAAE,CAAClR,MAAM,EAAIrC,EAAoB,CAK7C,GAJAqH,EAASP,CAAW,CAACyM,EAAE,CACvBhE,EAAU5D,IACVR,EAAY9D,EAAOhF,MAAM,CAErBb,EAAQgS,KAAK,CACb,IAAK,IAAItO,EAAI,EAAGA,EAAI1D,EAAQgS,KAAK,CAACnR,MAAM,CAAE6C,IAClCiG,GAAa3J,EAAQgS,KAAK,CAACtO,EAAE,CAACiJ,IAAI,EAClChD,GAAa3J,EAAQgS,KAAK,CAACtO,EAAE,CAACuO,EAAE,GAEhC/J,AADAA,CAAAA,EAAclI,EAAQgS,KAAK,CAACtO,EAAE,AAAD,EACjBwO,SAAS,CAAGxO,EACxBkO,EAAc5R,EAAQgS,KAAK,CAACtO,EAAE,CAAC7E,MAAM,CACrCgT,EAAuB7R,EAAQgS,KAAK,CAACtO,EAAE,CAACyO,SAAS,EAI7DR,EAAiBpM,EAAmBM,GAChC7F,AAAiC,SAAjCA,EAAQvB,eAAe,CAACyQ,IAAI,EAC3BlP,EAAQ5B,YAAY,CAgBrBqT,EAAa,CACTlO,EAAGoO,EAAepO,CAAC,CACnBC,EAAGmO,EAAenO,CAAC,AACvB,GAlBA3E,EAAS+E,AAlDR,IAAI,CAkDW5D,OAAO,CAACnB,MAAM,EAAI,CAAC,EACnC4S,EAAa7N,AAnDZ,IAAI,CAmDewO,wBAAwB,CAAC,CACzC7O,EAAGoO,EAAepO,CAAC,CACnBC,EAAGmO,EAAenO,CAAC,CACnBvG,IAAK8U,EACLzM,YAAaA,EACb5G,SAAUkF,AAxDb,IAAI,CAwDgBG,iBAAiB,CAAC/D,EAAQvB,eAAe,EAC1D4T,cAAexT,EAAOE,MAAM,EAAI,EAAKF,CAAAA,EAAOG,SAAS,EAAI,CAAA,EACzDsT,cAAe,AAACV,GAAeA,EAAY7S,MAAM,CAC7C6S,EAAY7S,MAAM,CAClB,AAACiB,CAAAA,EAAQnB,MAAM,EAAI,CAAC,CAAA,EAAGE,MAAM,EACzBuD,EAAgBzD,MAAM,CAACE,MAAM,AACzC,IAQJ,IAAK,IAAI2E,EAAI,EAAGA,EAAIiG,EAAWjG,IAC3BmC,CAAM,CAACnC,EAAE,CAAC6O,aAAa,CAAGxE,EAwB9B,GAtBArJ,EAASJ,IAAI,CAAC,CACVf,EAAGkO,EAAWlO,CAAC,CACfC,EAAGiO,EAAWjO,CAAC,CACfrD,GAAI4R,EACJhE,QAASA,EACTiD,MAAOA,EACPpJ,KAAM/B,EACNqC,YAAaA,EACb2J,qBAAsBA,CAC1B,GACAlB,EAAarM,IAAI,CAACmN,EAAWlO,CAAC,EAC9BqN,EAAatM,IAAI,CAACmN,EAAWjO,CAAC,EAC9BsN,EAASxM,IAAI,CAAC,CACVtE,QAAS,CACLwS,aAAc,UACdtT,WAAYc,EAAQd,UAAU,CAC9BL,OAAQiE,EAAM9C,EAAQnB,MAAM,CAAE,CAC1B4T,OAAQzS,EAAQyS,MAAM,AAC1B,EAAGb,GAAe,CAAC,EACvB,CACJ,GAEIhK,MAAAA,EAAmC,KAAK,EAAIA,EAAK/G,MAAM,CACvD,IAAK,IAAI6C,EAAI,EAAGA,EAAIiG,EAAWjG,IACvBd,EAASgF,CAAI,CAAC/B,CAAM,CAACnC,EAAE,CAACa,SAAS,CAAC,GAClCsB,CAAAA,CAAM,CAACnC,EAAE,CAAC1D,OAAO,CAAG4H,CAAI,CAAC/B,CAAM,CAACnC,EAAE,CAACa,SAAS,CAAC,AAAD,CAIxDyM,CAAAA,IACAY,EAAc,IAClB,MAEI,IAAK,IAAIlO,EAAI,EAAGA,EAAI4B,CAAW,CAACyM,EAAE,CAAClR,MAAM,CAAE6C,IAEvCyF,EAAQ7D,CAAW,CAACyM,EAAE,CAACrO,EAAE,CACzBqK,EAAU5D,IACVuH,EAAe,KACfF,EAAmB5J,MAAAA,EAAmC,KAAK,EAAIA,CAAI,CAACuB,EAAM5E,SAAS,CAAC,CACpFoM,EAAarM,IAAI,CAAC6E,EAAM5F,CAAC,EACzBqN,EAAatM,IAAI,CAAC6E,EAAM3F,CAAC,EACzB2F,EAAMoJ,aAAa,CAAGxE,EACtBpJ,EAAML,IAAI,CAAC,CACPf,EAAG4F,EAAM5F,CAAC,CACVC,EAAG2F,EAAM3F,CAAC,CACVrD,GAAI4R,EACJhE,QAASA,EACTiD,MAAOA,EACPpJ,KAAMtC,CAAW,CAACyM,EAAE,AACxB,GAIIL,EAHAF,GACA,AAA4B,UAA5B,OAAOA,GACP,CAAC9O,EAA6B8O,GACf1O,EAAM0O,EAAkB,CAAEjO,EAAG4F,EAAM5F,CAAC,CAAEC,EAAG2F,EAAM3F,CAAC,AAAC,GAGjD,CACXkP,YAAalB,EACbjO,EAAG4F,EAAM5F,CAAC,CACVC,EAAG2F,EAAM3F,CAAC,AACd,EAEJsN,EAASxM,IAAI,CAAC,CAAEtE,QAAS0R,CAAa,GACtCV,IAIZ,MAAO,CACHtM,SAAUA,EACVC,MAAOA,EACPgM,aAAcA,EACdC,aAAcA,EACdE,SAAUA,CACd,CACJ,CAEA,SAAS6B,IACL,IACIzH,EAAQtH,AADC,IAAI,CACEsH,KAAK,CACpBF,EAAQpH,AAFC,IAAI,CAEEoH,KAAK,CACpBC,EAAQrH,AAHC,IAAI,CAGEqH,KAAK,CACpB/G,EAAW,EAgBf,OAASA,QAAQ,CAdb8G,GAASpH,AANA,IAAI,CAMGwM,QAAQ,EAAIxM,AANnB,IAAI,CAMsBuM,QAAQ,CAChCnF,EAAM4H,QAAQ,CACrB5H,EAAMoB,QAAQ,CAACxI,AARV,IAAI,CAQauM,QAAQ,EAAInF,EAAMoB,QAAQ,CAACxI,AAR5C,IAAI,CAQ+CwM,QAAQ,EAGzDlF,EAAMhH,QAAQ,CASAC,OAAO,CAPhC8G,GAASrH,AAbA,IAAI,CAaG0M,QAAQ,EAAI1M,AAbnB,IAAI,CAasByM,QAAQ,CACjCpF,EAAM2H,QAAQ,CACpB3H,EAAMmB,QAAQ,CAACxI,AAfV,IAAI,CAea0M,QAAQ,EAAIrF,EAAMmB,QAAQ,CAACxI,AAf5C,IAAI,CAe+CyM,QAAQ,EAG1DnF,EAAM/G,OAAO,CAG/B,CAMA,SAAS0O,EAAqB9I,CAAa,CAAE4E,CAAoB,CAAEmE,CAAU,EAEzE,IADItR,EA4BAgM,EACAC,EA5BAsF,EAAkBpE,EACd7E,EAAa6E,EACjBmE,GAAc,EAAE,CAChBE,EAAkBlJ,EAAaC,EAC/B+I,GACA7I,EAAQ,CAAC,EAEb1B,EAAmB,EAAE,CAErBwB,EAAcrF,QAAQ,CAACwF,OAAO,CAAC,SAAUhM,CAAO,EAC5C+L,CAAK,CAAC/L,EAAQ6P,OAAO,CAAC,CAAG,CACrBxK,EAAGrF,EAAQqF,CAAC,CACZC,EAAGtF,EAAQsF,CAAC,CACZrD,GAAIjC,EAAQ6P,OAAO,CACnB5E,MAAOjL,EAAQiL,KAAK,CACpB6E,UAAW,EAAE,AACjB,CACJ,GACAjE,EAAcpF,KAAK,CAACuF,OAAO,CAAC,SAAUvF,CAAK,EACvCsF,CAAK,CAACtF,EAAMoJ,OAAO,CAAC,CAAG,CACnBxK,EAAGoB,EAAMpB,CAAC,CACVC,EAAGmB,EAAMnB,CAAC,CACVrD,GAAIwE,EAAMoJ,OAAO,CACjB5E,MAAOxE,EAAMwE,KAAK,CAClB6E,UAAW,EAAE,AACjB,CACJ,GAIA,IAAK,IAAItK,EAAI,EAAGA,EAAIsP,EAAgBnS,MAAM,CAAE6C,IACxC8J,EAAWwF,CAAe,CAACtP,EAAE,CAC7B+J,EAAWsF,CAAe,CAACrP,EAAE,CACxB8J,CAAAA,MAAAA,EAA2C,KAAK,EAAIA,EAAS+E,aAAa,AAAD,GACzE9E,CAAAA,MAAAA,EAA2C,KAAK,EAAIA,EAAS8E,aAAa,AAAD,GAC1E,AAAC,CAAA,AAAyC,OAAxC/Q,CAAAA,EAAKyI,CAAK,CAACuD,EAAS+E,aAAa,CAAC,AAAD,GAAe/Q,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,EAAGwM,SAAS,CAACiF,OAAO,CAACxF,EAAS8E,aAAa,CAAA,IAAO,KAC7HtI,CAAK,CAACuD,EAAS+E,aAAa,CAAC,CAACvE,SAAS,CAAC1J,IAAI,CAACmJ,EAAS8E,aAAa,EACV,KAArDhK,EAAiB0K,OAAO,CAACxF,EAAS8E,aAAa,GAC/ChK,EAAiBjE,IAAI,CAACmJ,EAAS8E,aAAa,GAIxD,OAAOtI,CACX,CAEA,SAASiJ,IACL,IAAIhI,EAAQ,IAAI,CAACA,KAAK,CAClB3H,EAAI2H,EAAME,OAAO,CAAG,EAAIF,EAAMhH,QAAQ,CAEtC+L,EAAKnD,EAAe,IAAI,CAAE,CACtBvJ,EAAGA,EACHC,EAHA0H,EAAME,OAAO,CAAG,EAAIF,EAAM/G,OAAO,AAIrC,GACA+L,EAAKpD,EAAe,IAAI,CAAE,CACtBvJ,EAAGA,EAAI2H,EAAM6E,SAAS,CACtBvM,EAAGD,EAAI2H,EAAMiI,UAAU,AAC3B,GACAC,EAAWnD,EAAG1M,CAAC,CACf8P,EAAWnD,EAAG3M,CAAC,CACf+P,EAAWrD,EAAGzM,CAAC,CACf+P,EAAWrD,EAAG1M,CAAC,CACnB,MAAO,CACHyD,KAAMtG,KAAKmL,GAAG,CAACsH,EAAUC,GACzBtM,KAAMpG,KAAKC,GAAG,CAACwS,EAAUC,GACzBhM,KAAM1G,KAAKmL,GAAG,CAACwH,EAAUC,GACzBpM,KAAMxG,KAAKC,GAAG,CAAC0S,EAAUC,EAC7B,CACJ,CAEA,SAASC,EAAwBxT,CAAO,EACpC,IACIgL,EAAQpH,AADC,IAAI,CACEoH,KAAK,CACpBI,EAAUxH,AAFD,IAAI,CAEIsH,KAAK,CAACE,OAAO,CAC9B/F,EAAoBrF,EAAQqF,iBAAiB,EACzC/C,EAAgB7D,eAAe,CAACC,QAAQ,CAC5C+U,EAAS,CAAA,EACT1B,EAAI,EACJ2B,EAAU,CACT9P,CARQ,IAAI,CAQL+P,aAAa,GACjBvI,EACAxH,AAVK,IAAI,CAUF+P,aAAa,CAAGtO,EAAoB+F,EAAQwI,QAAQ,GAG3DhQ,AAbK,IAAI,CAaF+P,aAAa,CAAGhT,KAAKgL,GAAG,CAACX,EAAMiC,OAAO,CAAC5H,GAAqB2F,EAAMiC,OAAO,CAAC,KAQzF,IAFA,IAAI4G,EAAQ,CAAC,AAACxO,CAAAA,EAHC+F,CAAAA,EACPxH,AAjBK,IAAI,CAiBF+P,aAAa,CAAGvI,EAAQwI,QAAQ,GACvC5I,EAAMoB,QAAQ,CAACxI,AAlBV,IAAI,CAkBa+P,aAAa,EAAI3I,EAAMoB,QAAQ,CAAC,EAAC,CACtB,EAAG0H,OAAO,CAAC,IAE7CL,GAAUI,AAAU,IAAVA,GAAa,CAC1B,IAAIE,EAAQpT,KAAKsH,GAAG,CAAC,EACjB8J,EACA8B,CAAAA,EAAQ,KAAQA,EAAQ,KACxBJ,EAAS,CAAA,EAEJI,GAAU,EAAIE,GAAUF,EAAQ,AAAK,EAAIE,EAAT,GACrCN,EAAS,CAAA,EACTC,EAAUK,GAELF,GAASE,GAASF,EAAQE,EAAQ,IACvCN,EAAS,CAAA,EACTC,EAAU,EAAIK,GAElBhC,GACJ,CACA,OAAO,AAAC1M,EAAoBqO,EAAWG,CAC3C,CAKA,SAASG,IAGL,IAFIxS,EACA+E,EACA0N,EAAsB,IAAI,CAAC1F,uBAAuB,CAClDd,EAAW,AAA6F,OAA5FlH,CAAAA,EAAK,AAAkC,OAAjC/E,CAAAA,EAAK,IAAI,CAACqF,iBAAiB,AAAD,GAAerF,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,EAAG+L,WAAW,AAAD,GAAehH,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,EAAGkH,QAAQ,CACpJyG,EAAc3L,EAAiBhH,GAAG,CAAC,SAAUmH,CAAI,EAAI,IAAIlH,EAAI,MAAO,AAAC,CAAA,AAAoF,OAAnFA,CAAAA,EAAKiM,MAAAA,EAA2C,KAAK,EAAIA,CAAQ,CAAC/E,EAAK,CAACS,KAAK,AAAD,GAAe3H,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,EAAGrB,EAAE,AAAD,GAAM,EAAI,EAC5M8T,OAAAA,GAA0EA,EAAoB/J,OAAO,CAAC,SAAUf,CAAK,EACjH,IAAI3H,CAEA2H,CAAAA,GACA+K,AAAkC,KAAlCA,EAAYjB,OAAO,CAAC9J,EAAMhJ,EAAE,GACxBgJ,EAAMK,OAAO,EACbL,EAAMK,OAAO,CAACkB,IAAI,GAElBvB,EAAMO,SAAS,EACfP,EAAMO,SAAS,CAACgB,IAAI,IAIxB,AAAuE,OAAtElJ,CAAAA,EAAK2H,MAAAA,EAAqC,KAAK,EAAIA,EAAMC,OAAO,AAAD,GAAe5H,AAAO,KAAK,IAAZA,GAAyBA,EAAG7D,IAAI,CAACwL,EAExH,EACJ,CAKA,SAASgL,EAA+B7O,CAAW,EAC/C,IAAI8O,EAAS,CAAA,QACb,EAAKxR,EAAS0C,KAGdvC,EAAgCuC,EAAa,SAAUoD,CAAI,EAEvD,GADA0L,EAAS,CAAA,EACL,CAAC1R,EAA6BgG,IAAS,CAACA,EAAK7H,MAAM,CAAE,CACrDuT,EAAS,CAAA,EACT,MACJ,CACA,IAAK,IAAI1Q,EAAI,EAAGA,EAAIgF,EAAK7H,MAAM,CAAE6C,IAC7B,GAAI,CAACd,EAAS8F,CAAI,CAAChF,EAAE,GAAM,CAACgF,CAAI,CAAChF,EAAE,CAACH,CAAC,EAAI,CAACmF,CAAI,CAAChF,EAAE,CAACF,CAAC,CAAG,CAClD4Q,EAAS,CAAA,EACT,MACJ,CAER,GACOA,EACX,CAEA,SAASC,EAA+BC,CAAK,EAKzC,IAJI9S,EACA+E,EACAC,EACAe,EAqBAgN,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA9T,EA9BAuG,EAAK4M,EAAMrX,GAAG,CAACiY,KAAK,CAAC,KAAK3T,GAAG,CAAC4T,YAC9B9Q,EAAQqD,CAAE,CAAC,EAAE,CACbjE,EAAQiE,CAAE,CAAC,EAAE,CACbhJ,EAAW4V,EAAM5V,QAAQ,CACzB4G,EAAcgP,EAAMhP,WAAW,CAC/B+M,EAAgBiC,EAAMjC,aAAa,CACnCC,EAAgBgC,EAAMhC,aAAa,CACnC8C,EAAU3R,EAAQ/E,EAClB2W,EAAUhR,EAAQ3F,EAClB4W,EAAUrR,EAVD,IAAI,CAWbqQ,GACAiB,EAAwB,EAAE,CAC1B3O,EAAuB,AAAkC,OAAjCL,CAAAA,EAAK3C,AAbpB,IAAI,CAauB5D,OAAO,CAAC9B,OAAO,AAAD,GAAeqI,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,EAAG1H,MAAM,CACnG+S,EAAc,AAAkC,OAAjCpL,CAAAA,EAAK5C,AAdX,IAAI,CAcc5D,OAAO,CAAC9B,OAAO,AAAD,GAAesI,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,EAAGwL,KAAK,CACzFrO,EAAaC,AAfJ,IAAI,CAeOC,aAAa,GACjC2R,EAASF,EAAQ/R,CAAC,CAClBkS,EAASH,EAAQ9R,CAAC,CAClBmG,EAAY,EACZ5K,EAAS,EAcbyW,GAAU7R,EAAWO,QAAQ,CAC7BuR,GAAU9R,EAAWQ,OAAO,CAC5B,IAAK,IAAIT,EAAI,EAAGA,EAAI,EAAGA,IAUnB,IAAKmR,EAAI,EATTJ,EAAQ/Q,EAAI,EAAI,GAAK,EACrBgR,EAAQhR,EAAI,EAAI,GAAK,EACrBiR,EAAchU,KAAKyD,KAAK,CAAC,AAACoR,CAAAA,EAASf,EAAQnC,CAAY,EAAK5T,GAE5DyC,EAAO,CACHyT,AAFJA,CAAAA,EAAcjU,KAAKyD,KAAK,CAAC,AAACqR,CAAAA,EAASf,EAAQpC,CAAY,EAAK5T,EAAQ,EAElD,IAAMiW,EACpBC,EAAc,IAAMnR,EACpBY,EAAQ,IAAMsQ,EACjB,CACWE,EAAI1T,EAAKN,MAAM,CAAEgU,IACsB,KAA3CU,EAAsBtC,OAAO,CAAC9R,CAAI,CAAC0T,EAAE,GACrC1T,CAAI,CAAC0T,EAAE,GAAKP,EAAMrX,GAAG,EACrBsY,EAAsBjR,IAAI,CAACnD,CAAI,CAAC0T,EAAE,EAI9C,IAAK,IAAI/O,EAAK,EAAoDA,EAAK4P,AAA5BH,EAAoD1U,MAAM,CAAEiF,IAAM,CACzG,IAAI6P,EAAOD,AAD4BH,CACL,CAACzP,EAAG,CACtC,GAAIR,CAAW,CAACqQ,EAAK,CAAE,CAEdrQ,CAAW,CAACqQ,EAAK,CAACnQ,IAAI,GACvBwP,EAAiBzP,EAAmBD,CAAW,CAACqQ,EAAK,EACrDrQ,CAAW,CAACqQ,EAAK,CAACnQ,IAAI,CAAGwP,EAAezR,CAAC,CACzC+B,CAAW,CAACqQ,EAAK,CAAClQ,IAAI,CAAGuP,EAAexR,CAAC,EAE7C,IAAIoS,EAAQ3R,EA7DP,IAAI,CA6D0B,CAC3BV,EAAG+B,CAAW,CAACqQ,EAAK,CAACnQ,IAAI,EAAI,EAC7BhC,EAAG8B,CAAW,CAACqQ,EAAK,CAAClQ,IAAI,EAAI,CACjC,GAIJ,GAHA8O,EAAaqB,EAAMrS,CAAC,CAAGI,EAAWO,QAAQ,CAC1CsQ,EAAaoB,EAAMpS,CAAC,CAAGG,EAAWQ,OAAO,CACH4Q,EAAQvT,AAA9CA,CAAAA,EAAKmU,EAAKT,KAAK,CAAC,KAAK3T,GAAG,CAAC4T,WAAU,CAAa,CAAC,EAAE,CAAEL,EAAQtT,CAAE,CAAC,EAAE,CAC9DoQ,EAAa,CACbjI,EAAYrE,CAAW,CAACqQ,EAAK,CAAC9U,MAAM,CACpC,IAAK,IAAI6C,EAAI,EAAGA,EAAIkO,EAAY/Q,MAAM,CAAE6C,IAChCiG,GAAaiI,CAAW,CAAClO,EAAE,CAACiJ,IAAI,EAChChD,GAAaiI,CAAW,CAAClO,EAAE,CAACuO,EAAE,GAE1BlT,EADAyD,EAAQ,AAAiC,OAAhC+E,CAAAA,EAAKqK,CAAW,CAAClO,EAAE,CAAC7E,MAAM,AAAD,GAAe0I,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,EAAGxI,MAAM,EAC1E6S,CAAW,CAAClO,EAAE,CAAC7E,MAAM,CAACE,MAAM,EAAI,EAEpC6H,CAAAA,MAAAA,EAAmE,KAAK,EAAIA,EAAqB7H,MAAM,AAAD,EAClG6H,EAAqB7H,MAAM,CAG3BuD,EAAgBzD,MAAM,CAACE,MAAM,CAItD,CACIuG,CAAW,CAACqQ,EAAK,CAAC9U,MAAM,CAAG,GAC3B9B,AAAW,IAAXA,GACC6H,CAAAA,MAAAA,EAAmE,KAAK,EAAIA,EAAqB7H,MAAM,AAAD,EACvGA,EAAS6H,EAAqB7H,MAAM,CAEF,IAA7BuG,CAAW,CAACqQ,EAAK,CAAC9U,MAAM,EAC7B9B,CAAAA,EAASsT,CAAY,EAEzB4C,EAAU3C,EAAgBvT,EAC1BA,EAAS,EACL+V,IAAUrR,GACV9C,KAAKgL,GAAG,CAAC6J,EAASjB,GAAcU,GAChCO,CAAAA,EAASV,EAAQrR,EAAQ,EAAI2R,EAAU9C,EACnC8C,EAAU1W,EAAW4T,CAAY,EAErCyC,IAAU1Q,GACV1D,KAAKgL,GAAG,CAAC8J,EAASjB,GAAcS,GAChCQ,CAAAA,EAASV,EAAQ1Q,EAAQ,EAAIgR,EAAU/C,EACnC+C,EAAU3W,EAAW4T,CAAY,CAE7C,CACJ,CACA,IAAIvF,EAAMD,EA3GG,IAAI,CA2GgB,CACzBvJ,EAAGiS,EAAS7R,EAAWO,QAAQ,CAC/BV,EAAGiS,EAAS9R,EAAWQ,OAAO,AAClC,GAGJ,OAFAmB,CAAW,CAACgP,EAAMrX,GAAG,CAAC,CAACuI,IAAI,CAAGuH,EAAIxJ,CAAC,CACnC+B,CAAW,CAACgP,EAAMrX,GAAG,CAAC,CAACwI,IAAI,CAAGsH,EAAIvJ,CAAC,CAC5BuJ,CACX,CAKA,SAAS9I,EAAeL,CAAM,CAAEmJ,CAAG,EAC/B,IAAI7B,EAAQtH,EAAOsH,KAAK,CACpBF,EAAQpH,EAAOoH,KAAK,CACpBC,EAAQrH,EAAOqH,KAAK,QACxB,AAAIC,EAAME,OAAO,CACNF,EAAME,OAAO,CAACyK,sBAAsB,CAAC9I,GAEzC,CACHxJ,EAAGyH,EAAQA,EAAMoB,QAAQ,CAACW,EAAIxJ,CAAC,EAAI,EACnCC,EAAGyH,EAAQA,EAAMmB,QAAQ,CAACW,EAAIvJ,CAAC,EAAI,CACvC,CACJ,CAS6B,IAAIsS,EAHN,CACvBC,QAzhCJ,SAAiBC,CAAwB,CAAEC,CAAkB,EACzD,IAAIC,EAAeD,EAAmBxY,SAAS,AAC3C,EAACyY,EAAahT,uBAAuB,GACrCpF,EAAqBoY,EAAaC,cAAc,CAChDD,EAAahT,uBAAuB,CAAGA,EACvCgT,EAAaE,mBAAmB,CAAGlJ,EACnCgJ,EAAa7E,oBAAoB,CAAG/C,EACpC4H,EAAaC,cAAc,CAAG3H,EAC9B0H,EAAajQ,4BAA4B,CACrCqL,EACJ4E,EAAa1F,gBAAgB,CAAGe,EAChC2E,EAAarS,aAAa,CAAG8O,EAC7BuD,EAAa/E,cAAc,CAAG0B,EAC9BqD,EAAavP,eAAe,CAAGuM,EAC/BgD,EAAanS,iBAAiB,CAAGyP,EACjC0C,EAAa9E,iBAAiB,CAAG4C,EACjCkC,EAAapE,wBAAwB,CAAGqC,EACxC+B,EAAa9D,wBAAwB,CAAGiC,EAExC9R,EAAS0T,EAAoB,UAAWC,EAAa7E,oBAAoB,EACrE2E,EAAyBK,WAAW,EACpCL,CAAAA,EAAyBK,WAAW,CAACzS,MAAM,CAAGd,EAAMkT,EAAyBK,WAAW,CAACzS,MAAM,CAAE3F,EAAoC,EAGjJ,CAkgCA,EAmBIqY,GAA4B,AAACtY,IAA+EqE,UAAU,CAEtHkU,GAAiB,AAACvY,IAA+EuY,cAAc,CAE/GC,GAAW,AAACxY,IAA+EwY,QAAQ,CAInGC,GAA0B,AAACzY,IAA+EuE,QAAQ,CAAEmU,GAAyB,AAAC1Y,IAA+EwE,OAAO,CAAEmU,GAAuB,AAAC3Y,IAA+EyE,KAAK,CAAEmU,GAA4B,AAAC5Y,IAA+E2E,UAAU,CAAEkU,GAAuB,AAAC7Y,IAA+E8E,KAAK,CAAEgU,GAAa,AAAC9Y,IAA+E8Y,UAAU,CAAEC,GAA6B,AAAC/Y,IAA+EiF,WAAW,CAgC/xB,SAAS+T,KAGL,IAAK,IAFD9L,EAAQ,IAAI,CAACA,KAAK,CAClB+L,EAAoB,EACfnR,EAAK,EAAGtE,EAAK0J,EAAMtH,MAAM,CAAEkC,EAAKtE,EAAGX,MAAM,CAAEiF,IAAM,CACtD,IAAIlC,EAASpC,CAAE,CAACsE,EAAG,AACflC,CAAAA,EAAOiD,iBAAiB,EACxBoQ,CAAAA,EAAqBX,GAA0B,AAAC1S,CAAAA,EAAO5D,OAAO,CAAC9B,OAAO,EAAI,CAAC,CAAA,EAAGG,SAAS,EAAEC,QAAQ,EAC7F,CAAC,CAEb,CACAyY,GAA2B,WACnB7L,EAAMzL,OAAO,EACbyL,EAAMzL,OAAO,CAAC2J,OAAO,EAE7B,EAAG6N,EACP,CAKA,SAASC,KAGL,IAAK,IAFD1V,EAEKsE,EAAK,EAAGS,EAAM2E,AADX,IAAI,CACatH,MAAM,EAAI,EAAE,CAAGkC,EAAKS,EAAG1F,MAAM,CAAEiF,IAAM,CAC9D,IAAIlC,EAAS2C,CAAE,CAACT,EAAG,CACnB,GAAIlC,EAAOiD,iBAAiB,CAAE,CAC1B,IAAI7G,EAAU4D,EAAO5D,OAAO,CAAC9B,OAAO,CAEhCuP,EAAW,AAACF,CAAAA,AADE,AAAC3J,CAAAA,EAAOiD,iBAAiB,EAAI,CAAC,CAAA,EAAG0G,WAAW,EAC/B,CAAC,CAAA,EAAGE,QAAQ,CAC3C,GAAI,AAACzN,CAAAA,GAAW,CAAC,CAAA,EAAG3B,SAAS,EACzBuF,EAAOiD,iBAAiB,EACxB,AAAmG,IAAnG,AAAC,CAAA,AAAC,CAAA,AAAgC,OAA/BrF,CAAAA,EAAKoC,EAAOsH,KAAK,CAACG,OAAO,AAAD,GAAe7J,AAAO,KAAK,IAAZA,EAAgB,KAAK,EAAIA,EAAG2V,SAAS,AAAD,GAAM,EAAE,AAAD,EAAGtW,MAAM,EAC9F,AAAmD,QAAnD,AAAC,CAAA,AAAC+C,CAAAA,EAAOoH,KAAK,EAAI,CAAC,CAAA,EAAGoM,SAAS,EAAI,CAAC,CAAA,EAAGC,OAAO,EAC9C5J,GACAtQ,OAAOgE,IAAI,CAACsM,GAAU5M,MAAM,CAAE,CAC9B,IAAK,IAAI2F,EAAK,EAAGe,EAAK3D,EAAOiD,iBAAiB,CAACnC,QAAQ,CAAE8B,EAAKe,EAAG1G,MAAM,CAAE2F,IAAM,CAC3E,IAAItI,EAAUqJ,CAAE,CAACf,EAAG,CACpB5C,EAAOwS,mBAAmB,CAAClY,EAC/B,CACA,IAAK,IAAIwJ,EAAK,EAAGC,EAAK/D,EAAOiD,iBAAiB,CAAClC,KAAK,CAAE+C,EAAKC,EAAG9G,MAAM,CAAE6G,IAAM,CACxE,IAAI/C,EAAQgD,CAAE,CAACD,EAAG,CAClB9D,EAAOwS,mBAAmB,CAACzR,EAC/B,CACJ,CACJ,CACJ,CACJ,CAEA,SAAS2S,GAAqC1M,CAAK,EAC/C,IAGI2M,EAAmB,AAAC,CAAA,AAACjI,CAAAA,AADJ1L,AADRuF,AADDyB,CAAAA,EAAMzB,KAAK,EAAIyB,EAAMC,MAAM,AAAD,EACnBjH,MAAM,CACG5D,OAAO,CAAC9B,OAAO,EACA,CAAC,CAAA,EAAGsZ,MAAM,EAAI,CAAC,CAAA,EAAGjZ,cAAc,CACvEqY,GAA0BW,IAC1BA,EAAiB5Z,IAAI,CAAC,IAAI,CAAEiN,EAEpC,CAMA,SAAS6M,KAEL,GAAItO,AADQ,IAAI,CACNuO,SAAS,CAIf,OAHAf,GAAqB,qHAEK,CAAA,EAAOxN,AAJzB,IAAI,CAI2BvF,MAAM,CAACsH,KAAK,EAC5C,CAAA,CAEf,CAKA,SAASyM,KACL,IACIC,EAAqB,AAAChU,CAAAA,AADb,IAAI,CACgB5D,OAAO,CAAC9B,OAAO,EAAI,CAAC,CAAA,EAAGK,cAAc,CACtE,GAAIqF,AAFS,IAAI,CAENiD,iBAAiB,EAAIjD,AAFnB,IAAI,CAEsBiD,iBAAiB,CAACnC,QAAQ,CAC7D,IAAK,IAAIoB,EAAK,EAAGtE,EAAKoC,AAHb,IAAI,CAGgBiD,iBAAiB,CAACnC,QAAQ,CAAEoB,EAAKtE,EAAGX,MAAM,CAAEiF,IAAM,CAC3E,IAAI5H,EAAUsD,CAAE,CAACsE,EAAG,AAChB5H,CAAAA,EAAQiL,KAAK,EAAIjL,EAAQiL,KAAK,CAACK,OAAO,GACtCtL,EAAQiL,KAAK,CAACK,OAAO,CAACqO,QAAQ,CAAC,4BAE3BD,GAAsB1Z,EAAQiL,KAAK,GACnCjL,EAAQiL,KAAK,CAACK,OAAO,CAACsO,GAAG,CAAC,CACtBC,OAAQ,SACZ,GACI7Z,EAAQiL,KAAK,CAACO,SAAS,EACvBxL,EAAQiL,KAAK,CAACO,SAAS,CAACoO,GAAG,CAAC,CACxBC,OAAQ,SACZ,IAGJrB,GAAuBxY,EAAQgK,WAAW,GAC1ChK,EAAQiL,KAAK,CAACK,OAAO,CAACqO,QAAQ,CAAC3Z,EAAQ2T,oBAAoB,EACvD,2BACI3T,EAAQgK,WAAW,CAACgK,SAAS,EAGjD,CAER,CA0DA,SAAS8F,GAA6BzU,CAAC,CAAEC,CAAC,CAAEoJ,CAAK,CAAEC,CAAM,EACrD,IAAIoL,EAAIrL,EAAQ,EAAGsL,EAAIrL,EAAS,EAA8BsL,EAAQ/b,EAAQgc,GAAG,CAAC7U,EAAI0U,EAAGzU,EAAI0U,EAAGD,EAAII,EAAWH,EAAIG,EAAW,CACtHC,MAAO3X,AAAU,GAAVA,KAAK4X,EAAE,CACdC,IAAK7X,AAAU,IAAVA,KAAK4X,EAAE,CACZE,KAAM,CAAA,CACV,GAAIC,EAAStc,EAAQgc,GAAG,CAAC7U,EAAI0U,EAAGzU,EAAI0U,EAAGD,EAAII,EAAWH,EAAIG,EAAW,CACjEC,MAAO3X,AAAU,GAAVA,KAAK4X,EAAE,CACdC,IAAK7X,AAAU,IAAVA,KAAK4X,EAAE,CACZI,OAAQV,EAAIW,EACZH,KAAM,CAAA,CACV,GAMJ,OAAOI,AANUzc,EAAQgc,GAAG,CAAC7U,EAAI0U,EAAGzU,EAAI0U,EAAGD,EATgB,EASLC,EATK,EASM,CACzDI,MAAO3X,AAAU,GAAVA,KAAK4X,EAAE,CACdC,IAAK7X,AAAU,IAAVA,KAAK4X,EAAE,CACZI,OAAQV,EACRQ,KAAM,CAAA,CACV,GACUK,MAAM,CAACJ,EAAQP,EACjC,CA3MA,AAAC5B,CAAAA,GAAeF,WAAW,EAAI,CAAC,CAAA,EAAGzS,MAAM,CAAGiT,GAAqB,AAACN,CAAAA,GAAeF,WAAW,EAAI,CAAC,CAAA,EAAGzS,MAAM,CAAE3F,GAmO5G,IAAI8a,GAAK/a,IACTgb,AA9FqB,CAAA,CACjBjD,QAhIJ,SAAgCkD,CAAS,CAAEC,CAAU,CAAElD,CAAwB,CAAEmD,CAAW,EACxF,GAAIrC,GAAWN,GAAU,kBAAmB,CACxC,IAAI4C,EAAaD,EAAY1b,SAAS,CAAC4b,UAAU,CAC7CC,EAAgBH,EAAYI,KAAK,CAACC,OAAO,CAC7C/C,GAAwBwC,EAAW,cAAejC,IAClDP,GAAwByC,EAAY,SAAUhC,IAC9CT,GAAwB2C,EAAY,iBAAkB9B,IACtDb,GAAwB2C,EAAY,SAAU3B,IAC9ChB,GAAwB0C,EAAa,cAAexB,IAChD2B,GACAxD,EACKC,OAAO,CAACC,EAA0BsD,EAE/C,CACJ,CAmHA,CAAA,EA4F8BvD,OAAO,CAACgD,GAAEU,IAAI,CAAEV,GAAEW,KAAK,CAAEX,GAAExC,cAAc,CAAEwC,GAAEY,MAAM,EACjFC,AAb2B,CAAA,CACvB7D,QAVJ,SAAsC8D,CAAgB,EAElDzd,AADAA,CAAAA,EAAUyd,EAAiBpc,SAAS,CAACrB,OAAO,AAAD,EACnC8B,OAAO,CAAG8Z,EACtB,CAQA,CAAA,EAWoCjC,OAAO,CAACgD,GAAEe,WAAW,EAC5B,IAAIjc,GAAwBG,IAG/C,OADYJ,EAAoB,OAAU,AAE3C,GAET"}
Hacked By AnonymousFox1.0, Coded By AnonymousFox