Hacked By AnonymousFox

Current Path : C:/AppServ/www/financial/stacked/code/modules/
Upload File :
Current File : C:/AppServ/www/financial/stacked/code/modules/boost-canvas.js.map

{"version":3,"sources":["<anon>"],"sourcesContent":["/**\n * @license Highcharts JS v12.1.2 (2025-01-09)\n * @module highcharts/modules/boost-canvas\n * @requires highcharts\n *\n * Boost module\n *\n * (c) 2010-2024 Highsoft AS\n * Author: Torstein Honsi\n *\n * License: www.highcharts.com/license\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(root[\"_Highcharts\"], root[\"_Highcharts\"][\"Color\"]);\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"highcharts/modules/boost-canvas\", [\"highcharts/highcharts\"], function (amd1) {return factory(amd1,amd1[\"Color\"]);});\n\telse if(typeof exports === 'object')\n\t\texports[\"highcharts/modules/boost-canvas\"] = factory(root[\"_Highcharts\"], root[\"_Highcharts\"][\"Color\"]);\n\telse\n\t\troot[\"Highcharts\"] = factory(root[\"Highcharts\"], root[\"Highcharts\"][\"Color\"]);\n})(typeof window === 'undefined' ? this : window, (__WEBPACK_EXTERNAL_MODULE__944__, __WEBPACK_EXTERNAL_MODULE__620__) => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 620:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__620__;\n\n/***/ }),\n\n/***/ 944:\n/***/ ((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(() => {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = (module) => {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\t() => (module['default']) :\n/******/ \t\t\t\t() => (module);\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  \"default\": () => (/* binding */ boost_canvas_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/es-modules/Extensions/Boost/Boostables.js\n/* *\n *\n *  (c) 2019-2024 Highsoft AS\n *\n *  Boost module: stripped-down renderer for higher performance\n *\n *  License: highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  Constants\n *\n * */\n// These are the series we allow boosting for.\nconst Boostables = [\n    'area',\n    'areaspline',\n    'arearange',\n    'column',\n    'columnrange',\n    'bar',\n    'line',\n    'scatter',\n    'heatmap',\n    'bubble',\n    'treemap'\n];\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Boost_Boostables = (Boostables);\n\n;// ./code/es-modules/Extensions/Boost/BoostableMap.js\n/* *\n *\n *  (c) 2019-2024 Highsoft AS\n *\n *  Boost module: stripped-down renderer for higher performance\n *\n *  License: highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  Imports\n *\n * */\n\n/* *\n *\n *  Constants\n *\n * */\n// These are the series we allow boosting for.\nconst BoostableMap = {};\nBoost_Boostables.forEach((item) => {\n    BoostableMap[item] = true;\n});\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Boost_BoostableMap = (BoostableMap);\n\n;// ./code/es-modules/Extensions/Boost/BoostChart.js\n/* *\n *\n *  (c) 2019-2024 Highsoft AS\n *\n *  Boost module: stripped-down renderer for higher performance\n *\n *  License: highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nconst { composed } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent, pick, pushUnique } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction compose(ChartClass, wglMode) {\n    if (wglMode && pushUnique(composed, 'Boost.Chart')) {\n        ChartClass.prototype.callbacks.push(onChartCallback);\n    }\n    return ChartClass;\n}\n/**\n * Get the clip rectangle for a target, either a series or the chart.\n * For the chart, we need to consider the maximum extent of its Y axes,\n * in case of Highcharts Stock panes and navigator.\n *\n * @private\n * @function Highcharts.Chart#getBoostClipRect\n */\nfunction getBoostClipRect(chart, target) {\n    const navigator = chart.navigator;\n    let clipBox = {\n        x: chart.plotLeft,\n        y: chart.plotTop,\n        width: chart.plotWidth,\n        height: chart.plotHeight\n    };\n    if (navigator && chart.inverted) { // #17820, #20936\n        clipBox.width += navigator.top + navigator.height;\n        if (!navigator.opposite) {\n            clipBox.x = navigator.left;\n        }\n    }\n    else if (navigator && !chart.inverted) {\n        clipBox.height = navigator.top + navigator.height - chart.plotTop;\n    }\n    // Clipping of individual series (#11906, #19039).\n    if (target.getClipBox) {\n        const { xAxis, yAxis } = target;\n        clipBox = target.getClipBox();\n        if (chart.inverted) {\n            const lateral = clipBox.width;\n            clipBox.width = clipBox.height;\n            clipBox.height = lateral;\n            clipBox.x = yAxis.pos;\n            clipBox.y = xAxis.pos;\n        }\n        else {\n            clipBox.x = xAxis.pos;\n            clipBox.y = yAxis.pos;\n        }\n    }\n    if (target === chart) {\n        const verticalAxes = chart.inverted ? chart.xAxis : chart.yAxis; // #14444\n        if (verticalAxes.length <= 1) {\n            clipBox.y = Math.min(verticalAxes[0].pos, clipBox.y);\n            clipBox.height = (verticalAxes[0].pos -\n                chart.plotTop +\n                verticalAxes[0].len);\n        }\n    }\n    return clipBox;\n}\n/**\n * Returns true if the chart is in series boost mode.\n * @private\n * @param {Highcharts.Chart} chart\n * Chart to check.\n * @return {boolean}\n * `true` if the chart is in series boost mode.\n */\nfunction isChartSeriesBoosting(chart) {\n    const allSeries = chart.series, boost = chart.boost = chart.boost || {}, boostOptions = chart.options.boost || {}, threshold = pick(boostOptions.seriesThreshold, 50);\n    if (allSeries.length >= threshold) {\n        return true;\n    }\n    if (allSeries.length === 1) {\n        return false;\n    }\n    let allowBoostForce = boostOptions.allowForce;\n    if (typeof allowBoostForce === 'undefined') {\n        allowBoostForce = true;\n        for (const axis of chart.xAxis) {\n            if (pick(axis.min, -Infinity) > pick(axis.dataMin, -Infinity) ||\n                pick(axis.max, Infinity) < pick(axis.dataMax, Infinity)) {\n                allowBoostForce = false;\n                break;\n            }\n        }\n    }\n    if (typeof boost.forceChartBoost !== 'undefined') {\n        if (allowBoostForce) {\n            return boost.forceChartBoost;\n        }\n        boost.forceChartBoost = void 0;\n    }\n    // If there are more than five series currently boosting,\n    // we should boost the whole chart to avoid running out of webgl contexts.\n    let canBoostCount = 0, needBoostCount = 0, seriesOptions;\n    for (const series of allSeries) {\n        seriesOptions = series.options;\n        // Don't count series with boostThreshold set to 0\n        // See #8950\n        // Also don't count if the series is hidden.\n        // See #9046\n        if (seriesOptions.boostThreshold === 0 ||\n            series.visible === false) {\n            continue;\n        }\n        // Don't count heatmap series as they are handled differently.\n        // In the future we should make the heatmap/treemap path compatible\n        // with forcing. See #9636.\n        if (series.type === 'heatmap') {\n            continue;\n        }\n        if (Boost_BoostableMap[series.type]) {\n            ++canBoostCount;\n        }\n        if (patientMax(series.getColumn('x', true), seriesOptions.data, \n        /// series.xData,\n        series.points) >= (seriesOptions.boostThreshold || Number.MAX_VALUE)) {\n            ++needBoostCount;\n        }\n    }\n    boost.forceChartBoost = allowBoostForce && ((\n    // Even when the series that need a boost are less than or equal\n    // to 5, force a chart boost when all series are to be boosted.\n    // See #18815\n    canBoostCount === allSeries.length &&\n        needBoostCount === canBoostCount) ||\n        needBoostCount > 5);\n    return boost.forceChartBoost;\n}\n/**\n * Take care of the canvas blitting\n * @private\n */\nfunction onChartCallback(chart) {\n    /**\n     * Convert chart-level canvas to image.\n     * @private\n     */\n    function canvasToSVG() {\n        if (chart.boost &&\n            chart.boost.wgl &&\n            isChartSeriesBoosting(chart)) {\n            chart.boost.wgl.render(chart);\n        }\n    }\n    /**\n     * Clear chart-level canvas.\n     * @private\n     */\n    function preRender() {\n        // Reset force state\n        chart.boost = chart.boost || {};\n        chart.boost.forceChartBoost = void 0;\n        chart.boosted = false;\n        // Clear the canvas\n        if (!chart.axes.some((axis) => axis.isPanning)) {\n            chart.boost.clear?.();\n        }\n        if (chart.boost.canvas &&\n            chart.boost.wgl &&\n            isChartSeriesBoosting(chart)) {\n            // Allocate\n            chart.boost.wgl.allocateBuffer(chart);\n        }\n        // See #6518 + #6739\n        if (chart.boost.markerGroup &&\n            chart.xAxis &&\n            chart.xAxis.length > 0 &&\n            chart.yAxis &&\n            chart.yAxis.length > 0) {\n            chart.boost.markerGroup.translate(chart.xAxis[0].pos, chart.yAxis[0].pos);\n        }\n    }\n    addEvent(chart, 'predraw', preRender);\n    // Use the load event rather than redraw, otherwise user load events will\n    // fire too early (#18755)\n    addEvent(chart, 'load', canvasToSVG, { order: -1 });\n    addEvent(chart, 'redraw', canvasToSVG);\n    let prevX = -1;\n    let prevY = -1;\n    addEvent(chart.pointer, 'afterGetHoverData', (e) => {\n        const series = e.hoverPoint?.series;\n        chart.boost = chart.boost || {};\n        if (chart.boost.markerGroup && series) {\n            const xAxis = chart.inverted ? series.yAxis : series.xAxis;\n            const yAxis = chart.inverted ? series.xAxis : series.yAxis;\n            if ((xAxis && xAxis.pos !== prevX) ||\n                (yAxis && yAxis.pos !== prevY)) {\n                // #21176: If the axis is changed, hide teh halo without\n                // animation  to prevent flickering of halos sharing the\n                // same marker group\n                chart.series.forEach((s) => {\n                    s.halo?.hide();\n                });\n                // #10464: Keep the marker group position in sync with the\n                // position of the hovered series axes since there is only\n                // one shared marker group when boosting.\n                chart.boost.markerGroup.translate(xAxis.pos, yAxis.pos);\n                prevX = xAxis.pos;\n                prevY = yAxis.pos;\n            }\n        }\n    });\n}\n/**\n * Tolerant max() function.\n *\n * @private\n * @param {...Array<Array<unknown>>} args\n * Max arguments\n * @return {number}\n * Max value\n */\nfunction patientMax(...args) {\n    let r = -Number.MAX_VALUE;\n    args.forEach((t) => {\n        if (typeof t !== 'undefined' &&\n            t !== null &&\n            typeof t.length !== 'undefined') {\n            if (t.length > 0) {\n                r = t.length;\n                return true;\n            }\n        }\n    });\n    return r;\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst BoostChart = {\n    compose,\n    getBoostClipRect,\n    isChartSeriesBoosting\n};\n/* harmony default export */ const Boost_BoostChart = (BoostChart);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"Color\"],\"commonjs\":[\"highcharts\",\"Color\"],\"commonjs2\":[\"highcharts\",\"Color\"],\"root\":[\"Highcharts\",\"Color\"]}\nvar highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_ = __webpack_require__(620);\nvar highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default = /*#__PURE__*/__webpack_require__.n(highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_);\n;// ./code/es-modules/Extensions/Boost/WGLDrawMode.js\n/* *\n *\n *  (c) 2019-2024 Highsoft AS\n *\n *  Boost module: stripped-down renderer for higher performance\n *\n *  License: highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  Constants\n *\n * */\nconst WGLDrawMode = {\n    'area': 'LINES',\n    'arearange': 'LINES',\n    'areaspline': 'LINES',\n    'column': 'LINES',\n    'columnrange': 'LINES',\n    'bar': 'LINES',\n    'line': 'LINE_STRIP',\n    'scatter': 'POINTS',\n    'heatmap': 'TRIANGLES',\n    'treemap': 'TRIANGLES',\n    'bubble': 'POINTS'\n};\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Boost_WGLDrawMode = (WGLDrawMode);\n\n;// ./code/es-modules/Extensions/Boost/WGLShader.js\n/* *\n *\n *  (c) 2019-2024 Highsoft AS\n *\n *  Boost module: stripped-down renderer for higher performance\n *\n *  License: highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { clamp, error, pick: WGLShader_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Constants\n *\n * */\nconst fragmentShader = [\n    /* eslint-disable max-len, @typescript-eslint/indent */\n    'precision highp float;',\n    'uniform vec4 fillColor;',\n    'varying highp vec2 position;',\n    'varying highp vec4 vColor;',\n    'uniform sampler2D uSampler;',\n    'uniform bool isCircle;',\n    'uniform bool hasColor;',\n    // 'vec4 toColor(float value, vec2 point) {',\n    //     'return vec4(0.0, 0.0, 0.0, 0.0);',\n    // '}',\n    'void main(void) {',\n    'vec4 col = fillColor;',\n    'vec4 tcol = texture2D(uSampler, gl_PointCoord.st);',\n    'if (hasColor) {',\n    'col = vColor;',\n    '}',\n    'if (isCircle) {',\n    'col *= tcol;',\n    'if (tcol.r < 0.0) {',\n    'discard;',\n    '} else {',\n    'gl_FragColor = col;',\n    '}',\n    '} else {',\n    'gl_FragColor = col;',\n    '}',\n    '}'\n    /* eslint-enable max-len, @typescript-eslint/indent */\n].join('\\n');\nconst vertexShader = [\n    /* eslint-disable max-len, @typescript-eslint/indent */\n    '#version 100',\n    '#define LN10 2.302585092994046',\n    'precision highp float;',\n    'attribute vec4 aVertexPosition;',\n    'attribute vec4 aColor;',\n    'varying highp vec2 position;',\n    'varying highp vec4 vColor;',\n    'uniform mat4 uPMatrix;',\n    'uniform float pSize;',\n    'uniform float translatedThreshold;',\n    'uniform bool hasThreshold;',\n    'uniform bool skipTranslation;',\n    'uniform float xAxisTrans;',\n    'uniform float xAxisMin;',\n    'uniform float xAxisMinPad;',\n    'uniform float xAxisPointRange;',\n    'uniform float xAxisLen;',\n    'uniform bool  xAxisPostTranslate;',\n    'uniform float xAxisOrdinalSlope;',\n    'uniform float xAxisOrdinalOffset;',\n    'uniform float xAxisPos;',\n    'uniform bool  xAxisCVSCoord;',\n    'uniform bool  xAxisIsLog;',\n    'uniform bool  xAxisReversed;',\n    'uniform float yAxisTrans;',\n    'uniform float yAxisMin;',\n    'uniform float yAxisMinPad;',\n    'uniform float yAxisPointRange;',\n    'uniform float yAxisLen;',\n    'uniform bool  yAxisPostTranslate;',\n    'uniform float yAxisOrdinalSlope;',\n    'uniform float yAxisOrdinalOffset;',\n    'uniform float yAxisPos;',\n    'uniform bool  yAxisCVSCoord;',\n    'uniform bool  yAxisIsLog;',\n    'uniform bool  yAxisReversed;',\n    'uniform bool  isBubble;',\n    'uniform bool  bubbleSizeByArea;',\n    'uniform float bubbleZMin;',\n    'uniform float bubbleZMax;',\n    'uniform float bubbleZThreshold;',\n    'uniform float bubbleMinSize;',\n    'uniform float bubbleMaxSize;',\n    'uniform bool  bubbleSizeAbs;',\n    'uniform bool  isInverted;',\n    'float bubbleRadius(){',\n    'float value = aVertexPosition.w;',\n    'float zMax = bubbleZMax;',\n    'float zMin = bubbleZMin;',\n    'float radius = 0.0;',\n    'float pos = 0.0;',\n    'float zRange = zMax - zMin;',\n    'if (bubbleSizeAbs){',\n    'value = value - bubbleZThreshold;',\n    'zMax = max(zMax - bubbleZThreshold, zMin - bubbleZThreshold);',\n    'zMin = 0.0;',\n    '}',\n    'if (value < zMin){',\n    'radius = bubbleZMin / 2.0 - 1.0;',\n    '} else {',\n    'pos = zRange > 0.0 ? (value - zMin) / zRange : 0.5;',\n    'if (bubbleSizeByArea && pos > 0.0){',\n    'pos = sqrt(pos);',\n    '}',\n    'radius = ceil(bubbleMinSize + pos * (bubbleMaxSize - bubbleMinSize)) / 2.0;',\n    '}',\n    'return radius * 2.0;',\n    '}',\n    'float translate(float val,',\n    'float pointPlacement,',\n    'float localA,',\n    'float localMin,',\n    'float minPixelPadding,',\n    'float pointRange,',\n    'float len,',\n    'bool  cvsCoord,',\n    'bool  isLog,',\n    'bool  reversed',\n    '){',\n    'float sign = 1.0;',\n    'float cvsOffset = 0.0;',\n    'if (cvsCoord) {',\n    'sign *= -1.0;',\n    'cvsOffset = len;',\n    '}',\n    'if (isLog) {',\n    'val = log(val) / LN10;',\n    '}',\n    'if (reversed) {',\n    'sign *= -1.0;',\n    'cvsOffset -= sign * len;',\n    '}',\n    'return sign * (val - localMin) * localA + cvsOffset + ',\n    '(sign * minPixelPadding);', // ' + localA * pointPlacement * pointRange;',\n    '}',\n    'float xToPixels(float value) {',\n    'if (skipTranslation){',\n    'return value;// + xAxisPos;',\n    '}',\n    'return translate(value, 0.0, xAxisTrans, xAxisMin, xAxisMinPad, xAxisPointRange, xAxisLen, xAxisCVSCoord, xAxisIsLog, xAxisReversed);// + xAxisPos;',\n    '}',\n    'float yToPixels(float value, float checkTreshold) {',\n    'float v;',\n    'if (skipTranslation){',\n    'v = value;// + yAxisPos;',\n    '} else {',\n    'v = translate(value, 0.0, yAxisTrans, yAxisMin, yAxisMinPad, yAxisPointRange, yAxisLen, yAxisCVSCoord, yAxisIsLog, yAxisReversed);// + yAxisPos;',\n    'if (v > yAxisLen) {',\n    'v = yAxisLen;',\n    '}',\n    '}',\n    'if (checkTreshold > 0.0 && hasThreshold) {',\n    'v = min(v, translatedThreshold);',\n    '}',\n    'return v;',\n    '}',\n    'void main(void) {',\n    'if (isBubble){',\n    'gl_PointSize = bubbleRadius();',\n    '} else {',\n    'gl_PointSize = pSize;',\n    '}',\n    // 'gl_PointSize = 10.0;',\n    'vColor = aColor;',\n    'if (skipTranslation && isInverted) {',\n    // If we get translated values from JS, just swap them (x, y)\n    'gl_Position = uPMatrix * vec4(aVertexPosition.y + yAxisPos, aVertexPosition.x + xAxisPos, 0.0, 1.0);',\n    '} else if (isInverted) {',\n    // But when calculating pixel positions directly,\n    // swap axes and values (x, y)\n    'gl_Position = uPMatrix * vec4(yToPixels(aVertexPosition.y, aVertexPosition.z) + yAxisPos, xToPixels(aVertexPosition.x) + xAxisPos, 0.0, 1.0);',\n    '} else {',\n    'gl_Position = uPMatrix * vec4(xToPixels(aVertexPosition.x) + xAxisPos, yToPixels(aVertexPosition.y, aVertexPosition.z) + yAxisPos, 0.0, 1.0);',\n    '}',\n    // 'gl_Position = uPMatrix * vec4(aVertexPosition.x, aVertexPosition.y, 0.0, 1.0);',\n    '}'\n    /* eslint-enable max-len, @typescript-eslint/indent */\n].join('\\n');\n/* *\n *\n *  Class\n *\n * */\n/* eslint-disable valid-jsdoc */\n/**\n * A static shader mimicing axis translation functions found in Core/Axis\n *\n * @private\n *\n * @param {WebGLContext} gl\n * the context in which the shader is active\n */\nclass WGLShader {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    constructor(gl) {\n        // Error stack\n        this.errors = [];\n        this.uLocations = {};\n        this.gl = gl;\n        if (gl && !this.createShader()) {\n            return void 0;\n        }\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Bind the shader.\n     * This makes the shader the active one until another one is bound,\n     * or until 0 is bound.\n     * @private\n     */\n    bind() {\n        if (this.gl && this.shaderProgram) {\n            this.gl.useProgram(this.shaderProgram);\n        }\n    }\n    /**\n     * Create the shader.\n     * Loads the shader program statically defined above\n     * @private\n     */\n    createShader() {\n        const v = this.stringToProgram(vertexShader, 'vertex'), f = this.stringToProgram(fragmentShader, 'fragment'), uloc = (n) => (this.gl.getUniformLocation(this.shaderProgram, n));\n        if (!v || !f) {\n            this.shaderProgram = false;\n            this.handleErrors();\n            return false;\n        }\n        this.shaderProgram = this.gl.createProgram();\n        this.gl.attachShader(this.shaderProgram, v);\n        this.gl.attachShader(this.shaderProgram, f);\n        this.gl.linkProgram(this.shaderProgram);\n        if (!this.gl.getProgramParameter(this.shaderProgram, this.gl.LINK_STATUS)) {\n            this.errors.push(this.gl.getProgramInfoLog(this.shaderProgram));\n            this.handleErrors();\n            this.shaderProgram = false;\n            return false;\n        }\n        this.gl.useProgram(this.shaderProgram);\n        this.gl.bindAttribLocation(this.shaderProgram, 0, 'aVertexPosition');\n        this.pUniform = uloc('uPMatrix');\n        this.psUniform = uloc('pSize');\n        this.fcUniform = uloc('fillColor');\n        this.isBubbleUniform = uloc('isBubble');\n        this.bubbleSizeAbsUniform = uloc('bubbleSizeAbs');\n        this.bubbleSizeAreaUniform = uloc('bubbleSizeByArea');\n        this.uSamplerUniform = uloc('uSampler');\n        this.skipTranslationUniform = uloc('skipTranslation');\n        this.isCircleUniform = uloc('isCircle');\n        this.isInverted = uloc('isInverted');\n        return true;\n    }\n    /**\n     * Handle errors accumulated in errors stack\n     * @private\n     */\n    handleErrors() {\n        if (this.errors.length) {\n            error('[highcharts boost] shader error - ' +\n                this.errors.join('\\n'));\n        }\n    }\n    /**\n     * String to shader program\n     * @private\n     * @param {string} str\n     * Program source\n     * @param {string} type\n     * Program type: either `vertex` or `fragment`\n     */\n    stringToProgram(str, type) {\n        const shader = this.gl.createShader(type === 'vertex' ? this.gl.VERTEX_SHADER : this.gl.FRAGMENT_SHADER);\n        this.gl.shaderSource(shader, str);\n        this.gl.compileShader(shader);\n        if (!this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS)) {\n            this.errors.push('when compiling ' +\n                type +\n                ' shader:\\n' +\n                this.gl.getShaderInfoLog(shader));\n            return false;\n        }\n        return shader;\n    }\n    /**\n     * Destroy the shader\n     * @private\n     */\n    destroy() {\n        if (this.gl && this.shaderProgram) {\n            this.gl.deleteProgram(this.shaderProgram);\n            this.shaderProgram = false;\n        }\n    }\n    fillColorUniform() {\n        return this.fcUniform;\n    }\n    /**\n     * Get the shader program handle\n     * @private\n     * @return {WebGLProgram}\n     * The handle for the program\n     */\n    getProgram() {\n        return this.shaderProgram;\n    }\n    pointSizeUniform() {\n        return this.psUniform;\n    }\n    perspectiveUniform() {\n        return this.pUniform;\n    }\n    /**\n     * Flush\n     * @private\n     */\n    reset() {\n        if (this.gl && this.shaderProgram) {\n            this.gl.uniform1i(this.isBubbleUniform, 0);\n            this.gl.uniform1i(this.isCircleUniform, 0);\n        }\n    }\n    /**\n     * Set bubble uniforms\n     * @private\n     * @param {Highcharts.Series} series\n     * Series to use\n     */\n    setBubbleUniforms(series, zCalcMin, zCalcMax, pixelRatio = 1) {\n        const seriesOptions = series.options;\n        let zMin = Number.MAX_VALUE, zMax = -Number.MAX_VALUE;\n        if (this.gl && this.shaderProgram && series.is('bubble')) {\n            const pxSizes = series.getPxExtremes();\n            zMin = WGLShader_pick(seriesOptions.zMin, clamp(zCalcMin, seriesOptions.displayNegative === false ?\n                seriesOptions.zThreshold : -Number.MAX_VALUE, zMin));\n            zMax = WGLShader_pick(seriesOptions.zMax, Math.max(zMax, zCalcMax));\n            this.gl.uniform1i(this.isBubbleUniform, 1);\n            this.gl.uniform1i(this.isCircleUniform, 1);\n            this.gl.uniform1i(this.bubbleSizeAreaUniform, (series.options.sizeBy !== 'width'));\n            this.gl.uniform1i(this.bubbleSizeAbsUniform, series.options\n                .sizeByAbsoluteValue);\n            this.setUniform('bubbleMinSize', pxSizes.minPxSize * pixelRatio);\n            this.setUniform('bubbleMaxSize', pxSizes.maxPxSize * pixelRatio);\n            this.setUniform('bubbleZMin', zMin);\n            this.setUniform('bubbleZMax', zMax);\n            this.setUniform('bubbleZThreshold', series.options.zThreshold);\n        }\n    }\n    /**\n     * Set the Color uniform.\n     * @private\n     * @param {Array<number>} color\n     * Array with RGBA values.\n     */\n    setColor(color) {\n        if (this.gl && this.shaderProgram) {\n            this.gl.uniform4f(this.fcUniform, color[0] / 255.0, color[1] / 255.0, color[2] / 255.0, color[3]);\n        }\n    }\n    /**\n     * Enable/disable circle drawing\n     * @private\n     */\n    setDrawAsCircle(flag) {\n        if (this.gl && this.shaderProgram) {\n            this.gl.uniform1i(this.isCircleUniform, flag ? 1 : 0);\n        }\n    }\n    /**\n     * Set if inversion state\n     * @private\n     * @param {number} flag\n     * Inversion flag\n     */\n    setInverted(flag) {\n        if (this.gl && this.shaderProgram) {\n            this.gl.uniform1i(this.isInverted, flag);\n        }\n    }\n    /**\n     * Set the perspective matrix\n     * @private\n     * @param {Float32List} m\n     * Matrix 4 x 4\n     */\n    setPMatrix(m) {\n        if (this.gl && this.shaderProgram) {\n            this.gl.uniformMatrix4fv(this.pUniform, false, m);\n        }\n    }\n    /**\n     * Set the point size.\n     * @private\n     * @param {number} p\n     * Point size\n     */\n    setPointSize(p) {\n        if (this.gl && this.shaderProgram) {\n            this.gl.uniform1f(this.psUniform, p);\n        }\n    }\n    /**\n     * Set skip translation\n     * @private\n     */\n    setSkipTranslation(flag) {\n        if (this.gl && this.shaderProgram) {\n            this.gl.uniform1i(this.skipTranslationUniform, flag === true ? 1 : 0);\n        }\n    }\n    /**\n     * Set the active texture\n     * @private\n     * @param {number} texture\n     * Texture to activate\n     */\n    setTexture(texture) {\n        if (this.gl && this.shaderProgram) {\n            this.gl.uniform1i(this.uSamplerUniform, texture);\n        }\n    }\n    /**\n     * Set a uniform value.\n     * This uses a hash map to cache uniform locations.\n     * @private\n     * @param {string} name\n     * Name of the uniform to set.\n     * @param {number} val\n     * Value to set\n     */\n    setUniform(name, val) {\n        if (this.gl && this.shaderProgram) {\n            const u = this.uLocations[name] = (this.uLocations[name] ||\n                this.gl.getUniformLocation(this.shaderProgram, name));\n            this.gl.uniform1f(u, val);\n        }\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Boost_WGLShader = (WGLShader);\n\n;// ./code/es-modules/Extensions/Boost/WGLVertexBuffer.js\n/* *\n *\n *  (c) 2019-2024 Highsoft AS\n *\n *  Boost module: stripped-down renderer for higher performance\n *\n *  License: highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  Class\n *\n * */\n/**\n * Vertex Buffer abstraction.\n * A vertex buffer is a set of vertices which are passed to the GPU\n * in a single call.\n *\n * @private\n * @class\n * @name WGLVertexBuffer\n *\n * @param {WebGLContext} gl\n * Context in which to create the buffer.\n * @param {WGLShader} shader\n * Shader to use.\n */\nclass WGLVertexBuffer {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    constructor(gl, shader, dataComponents\n    /* , type */\n    ) {\n        /* *\n         *\n         *  Properties\n         *\n         * */\n        this.buffer = false;\n        this.iterator = 0;\n        this.preAllocated = false;\n        this.vertAttribute = false;\n        this.components = dataComponents || 2;\n        this.dataComponents = dataComponents;\n        this.gl = gl;\n        this.shader = shader;\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Note about pre-allocated buffers:\n     *     - This is slower for charts with many series\n     * @private\n     */\n    allocate(size) {\n        this.iterator = -1;\n        this.preAllocated = new Float32Array(size * 4);\n    }\n    /**\n     * Bind the buffer\n     * @private\n     */\n    bind() {\n        if (!this.buffer) {\n            return false;\n        }\n        /// gl.bindAttribLocation(shader.program(), 0, 'aVertexPosition');\n        // gl.enableVertexAttribArray(vertAttribute);\n        // gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n        this.gl.vertexAttribPointer(this.vertAttribute, this.components, this.gl.FLOAT, false, 0, 0);\n        /// gl.enableVertexAttribArray(vertAttribute);\n    }\n    /**\n     * Build the buffer\n     * @private\n     * @param {Array<number>} dataIn\n     * Zero padded array of indices\n     * @param {string} attrib\n     * Name of the Attribute to bind the buffer to\n     * @param {number} dataComponents\n     * Number of components per. indice\n     */\n    build(dataIn, attrib, dataComponents) {\n        let farray;\n        this.data = dataIn || [];\n        if ((!this.data || this.data.length === 0) && !this.preAllocated) {\n            /// console.error('trying to render empty vbuffer');\n            this.destroy();\n            return false;\n        }\n        this.components = dataComponents || this.components;\n        if (this.buffer) {\n            this.gl.deleteBuffer(this.buffer);\n        }\n        if (!this.preAllocated) {\n            farray = new Float32Array(this.data);\n        }\n        this.buffer = this.gl.createBuffer();\n        this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.buffer);\n        this.gl.bufferData(this.gl.ARRAY_BUFFER, this.preAllocated || farray, this.gl.STATIC_DRAW);\n        /// gl.bindAttribLocation(shader.program(), 0, 'aVertexPosition');\n        this.vertAttribute = this.gl\n            .getAttribLocation(this.shader.getProgram(), attrib);\n        this.gl.enableVertexAttribArray(this.vertAttribute);\n        // Trigger cleanup\n        farray = false;\n        return true;\n    }\n    /**\n     * @private\n     */\n    destroy() {\n        if (this.buffer) {\n            this.gl.deleteBuffer(this.buffer);\n            this.buffer = false;\n            this.vertAttribute = false;\n        }\n        this.iterator = 0;\n        this.components = this.dataComponents || 2;\n        this.data = [];\n    }\n    /**\n     * Adds data to the pre-allocated buffer.\n     * @private\n     * @param {number} x\n     * X data\n     * @param {number} y\n     * Y data\n     * @param {number} a\n     * A data\n     * @param {number} b\n     * B data\n     */\n    push(x, y, a, b) {\n        if (this.preAllocated) { // && iterator <= preAllocated.length - 4) {\n            this.preAllocated[++this.iterator] = x;\n            this.preAllocated[++this.iterator] = y;\n            this.preAllocated[++this.iterator] = a;\n            this.preAllocated[++this.iterator] = b;\n        }\n    }\n    /**\n     * Render the buffer\n     *\n     * @private\n     * @param {number} from\n     * Start indice.\n     * @param {number} to\n     * End indice.\n     * @param {WGLDrawModeValue} drawMode\n     * Draw mode.\n     */\n    render(from, to, drawMode) {\n        const length = this.preAllocated ?\n            this.preAllocated.length : this.data.length;\n        if (!this.buffer) {\n            return false;\n        }\n        if (!length) {\n            return false;\n        }\n        if (!from || from > length || from < 0) {\n            from = 0;\n        }\n        if (!to || to > length) {\n            to = length;\n        }\n        if (from >= to) {\n            return false;\n        }\n        drawMode = drawMode || 'POINTS';\n        this.gl.drawArrays(this.gl[drawMode], from / this.components, (to - from) / this.components);\n        return true;\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Boost_WGLVertexBuffer = (WGLVertexBuffer);\n\n;// ./code/es-modules/Extensions/Boost/WGLRenderer.js\n/* *\n *\n *  (c) 2019-2024 Highsoft AS\n *\n *  Boost module: stripped-down renderer for higher performance\n *\n *  License: highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { parse: color } = (highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default());\n\nconst { doc, win } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { isNumber, isObject, merge, objectEach, pick: WGLRenderer_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\n\n/* *\n *\n *  Constants\n *\n * */\n// Things to draw as \"rectangles\" (i.e lines)\nconst asBar = {\n    'column': true,\n    'columnrange': true,\n    'bar': true,\n    'area': true,\n    'areaspline': true,\n    'arearange': true\n};\nconst asCircle = {\n    'scatter': true,\n    'bubble': true\n};\nconst contexts = [\n    'webgl',\n    'experimental-webgl',\n    'moz-webgl',\n    'webkit-3d'\n];\n/* *\n *\n *  Class\n *\n * */\n/* eslint-disable valid-jsdoc */\n/**\n * Main renderer. Used to render series.\n *\n * Notes to self:\n * - May be able to build a point map by rendering to a separate canvas and\n *   encoding values in the color data.\n * - Need to figure out a way to transform the data quicker\n *\n * @private\n *\n * @param {Function} postRenderCallback\n */\nclass WGLRenderer {\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * Returns an orthographic perspective matrix\n     * @private\n     * @param {number} width\n     * the width of the viewport in pixels\n     * @param {number} height\n     * the height of the viewport in pixels\n     */\n    static orthoMatrix(width, height) {\n        const near = 0, far = 1;\n        return [\n            2 / width, 0, 0, 0,\n            0, -(2 / height), 0, 0,\n            0, 0, -2 / (far - near), 0,\n            -1, 1, -(far + near) / (far - near), 1\n        ];\n    }\n    /**\n     * @private\n     */\n    static seriesPointCount(series) {\n        let isStacked, xData, s;\n        if (series.boosted) {\n            isStacked = !!series.options.stacking;\n            xData = ((series.getColumn('x').length ?\n                series.getColumn('x') :\n                void 0) ||\n                series.options.xData ||\n                series.getColumn('x', true));\n            s = (isStacked ? series.data : (xData || series.options.data))\n                .length;\n            if (series.type === 'treemap') {\n                s *= 12;\n            }\n            else if (series.type === 'heatmap') {\n                s *= 6;\n            }\n            else if (asBar[series.type]) {\n                s *= 2;\n            }\n            return s;\n        }\n        return 0;\n    }\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    constructor(postRenderCallback) {\n        /**\n         * The data to render - array of coordinates.\n         * Repeating sequence of [x, y, checkThreshold, pointSize].\n         */\n        this.data = [];\n        // Height of our viewport in pixels\n        this.height = 0;\n        // Is it inited?\n        this.isInited = false;\n        // The marker data\n        this.markerData = [];\n        // The series stack\n        this.series = [];\n        // Texture handles\n        this.textureHandles = {};\n        // Width of our viewport in pixels\n        this.width = 0;\n        this.postRenderCallback = postRenderCallback;\n        this.settings = {\n            pointSize: 1,\n            lineWidth: 1,\n            fillColor: '#AA00AA',\n            useAlpha: true,\n            usePreallocated: false,\n            useGPUTranslations: false,\n            debug: {\n                timeRendering: false,\n                timeSeriesProcessing: false,\n                timeSetup: false,\n                timeBufferCopy: false,\n                timeKDTree: false,\n                showSkipSummary: false\n            }\n        };\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    getPixelRatio() {\n        return this.settings.pixelRatio || win.devicePixelRatio || 1;\n    }\n    /**\n     * @private\n     */\n    setOptions(options) {\n        // The pixelRatio defaults to 1. This is an antipattern, we should\n        // refactor the Boost options to include an object of default options as\n        // base for the merge, like other components.\n        if (!('pixelRatio' in options)) {\n            options.pixelRatio = 1;\n        }\n        merge(true, this.settings, options);\n    }\n    /**\n     * Allocate a float buffer to fit all series\n     * @private\n     */\n    allocateBuffer(chart) {\n        const vbuffer = this.vbuffer;\n        let s = 0;\n        if (!this.settings.usePreallocated) {\n            return;\n        }\n        chart.series.forEach((series) => {\n            if (series.boosted) {\n                s += WGLRenderer.seriesPointCount(series);\n            }\n        });\n        vbuffer && vbuffer.allocate(s);\n    }\n    /**\n     * @private\n     */\n    allocateBufferForSingleSeries(series) {\n        const vbuffer = this.vbuffer;\n        let s = 0;\n        if (!this.settings.usePreallocated) {\n            return;\n        }\n        if (series.boosted) {\n            s = WGLRenderer.seriesPointCount(series);\n        }\n        vbuffer && vbuffer.allocate(s);\n    }\n    /**\n     * Clear the depth and color buffer\n     * @private\n     */\n    clear() {\n        const gl = this.gl;\n        gl && gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n    }\n    /**\n     * Push data for a single series\n     * This calculates additional vertices and transforms the data to be\n     * aligned correctly in memory\n     * @private\n     */\n    pushSeriesData(series, inst) {\n        const data = this.data, settings = this.settings, vbuffer = this.vbuffer, isRange = (series.pointArrayMap &&\n            series.pointArrayMap.join(',') === 'low,high'), { chart, options, sorted, xAxis, yAxis } = series, isStacked = !!options.stacking, rawData = options.data, xExtremes = series.xAxis.getExtremes(), \n        // Taking into account the offset of the min point #19497\n        xMin = xExtremes.min - (series.xAxis.minPointOffset || 0), xMax = xExtremes.max + (series.xAxis.minPointOffset || 0), yExtremes = series.yAxis.getExtremes(), yMin = yExtremes.min - (series.yAxis.minPointOffset || 0), yMax = yExtremes.max + (series.yAxis.minPointOffset || 0), xData = (series.getColumn('x').length ? series.getColumn('x') : void 0) || options.xData || series.getColumn('x', true), yData = (series.getColumn('y').length ? series.getColumn('y') : void 0) || options.yData || series.getColumn('y', true), zData = (series.getColumn('z').length ? series.getColumn('z') : void 0) || options.zData || series.getColumn('z', true), useRaw = !xData || xData.length === 0, \n        /// threshold = options.threshold,\n        // yBottom = chart.yAxis[0].getThreshold(threshold),\n        // hasThreshold = isNumber(threshold),\n        // colorByPoint = series.options.colorByPoint,\n        // This is required for color by point, so make sure this is\n        // uncommented if enabling that\n        // colorIndex = 0,\n        // Required for color axis support\n        // caxis,\n        connectNulls = options.connectNulls, \n        // For some reason eslint/TypeScript don't pick up that this is\n        // actually used: --- bre1470: it is never read, just set\n        // maxVal: (number|undefined), // eslint-disable-line no-unused-vars\n        points = series.points || false, sdata = isStacked ? series.data : (xData || rawData), closestLeft = { x: Number.MAX_VALUE, y: 0 }, closestRight = { x: -Number.MAX_VALUE, y: 0 }, cullXThreshold = 1, cullYThreshold = 1, chartDestroyed = typeof chart.index === 'undefined', drawAsBar = asBar[series.type], zoneAxis = options.zoneAxis || 'y', zones = options.zones || false, threshold = options.threshold, pixelRatio = this.getPixelRatio();\n        let plotWidth = series.chart.plotWidth, lastX = false, lastY = false, minVal, scolor, \n        //\n        skipped = 0, hadPoints = false, \n        // The following are used in the builder while loop\n        x, y, d, z, i = -1, px = false, nx = false, low, nextInside = false, prevInside = false, pcolor = false, isXInside = false, isYInside = true, firstPoint = true, zoneColors, zoneDefColor = false, gapSize = false, vlen = 0;\n        if (options.boostData && options.boostData.length > 0) {\n            return;\n        }\n        if (options.gapSize) {\n            gapSize = options.gapUnit !== 'value' ?\n                options.gapSize * series.closestPointRange :\n                options.gapSize;\n        }\n        if (zones) {\n            zoneColors = [];\n            zones.forEach((zone, i) => {\n                if (zone.color) {\n                    const zoneColor = color(zone.color).rgba;\n                    zoneColor[0] /= 255.0;\n                    zoneColor[1] /= 255.0;\n                    zoneColor[2] /= 255.0;\n                    zoneColors[i] = zoneColor;\n                    if (!zoneDefColor && typeof zone.value === 'undefined') {\n                        zoneDefColor = zoneColor;\n                    }\n                }\n            });\n            if (!zoneDefColor) {\n                const seriesColor = ((series.pointAttribs && series.pointAttribs().fill) ||\n                    series.color);\n                zoneDefColor = color(seriesColor).rgba;\n                zoneDefColor[0] /= 255.0;\n                zoneDefColor[1] /= 255.0;\n                zoneDefColor[2] /= 255.0;\n            }\n        }\n        if (chart.inverted) {\n            plotWidth = series.chart.plotHeight;\n        }\n        series.closestPointRangePx = Number.MAX_VALUE;\n        /**\n         * Push color to color buffer - need to do this per vertex.\n         * @private\n         */\n        const pushColor = (color) => {\n            if (color) {\n                inst.colorData.push(color[0]);\n                inst.colorData.push(color[1]);\n                inst.colorData.push(color[2]);\n                inst.colorData.push(color[3]);\n            }\n        };\n        /**\n         * Push a vertice to the data buffer.\n         * @private\n         */\n        const vertice = (x, y, checkTreshold, pointSize = 1, color) => {\n            pushColor(color);\n            // Correct for pixel ratio\n            if (pixelRatio !== 1 && (!settings.useGPUTranslations ||\n                inst.skipTranslation)) {\n                x *= pixelRatio;\n                y *= pixelRatio;\n                pointSize *= pixelRatio;\n            }\n            if (settings.usePreallocated && vbuffer) {\n                vbuffer.push(x, y, checkTreshold ? 1 : 0, pointSize);\n                vlen += 4;\n            }\n            else {\n                data.push(x);\n                data.push(y);\n                data.push(checkTreshold ? pixelRatio : 0);\n                data.push(pointSize);\n            }\n        };\n        /**\n         * @private\n         */\n        const closeSegment = () => {\n            if (inst.segments.length) {\n                inst.segments[inst.segments.length - 1].to = data.length || vlen;\n            }\n        };\n        /**\n         * Create a new segment for the current set.\n         * @private\n         */\n        const beginSegment = () => {\n            // Insert a segment on the series.\n            // A segment is just a start indice.\n            // When adding a segment, if one exists from before, it should\n            // set the previous segment's end\n            if (inst.segments.length &&\n                inst.segments[inst.segments.length - 1].from === (data.length || vlen)) {\n                return;\n            }\n            closeSegment();\n            inst.segments.push({\n                from: data.length || vlen\n            });\n        };\n        /**\n         * Push a rectangle to the data buffer.\n         * @private\n         */\n        const pushRect = (x, y, w, h, color) => {\n            pushColor(color);\n            vertice(x + w, y);\n            pushColor(color);\n            vertice(x, y);\n            pushColor(color);\n            vertice(x, y + h);\n            pushColor(color);\n            vertice(x, y + h);\n            pushColor(color);\n            vertice(x + w, y + h);\n            pushColor(color);\n            vertice(x + w, y);\n        };\n        // Create the first segment\n        beginSegment();\n        // Special case for point shapes\n        if (points && points.length > 0) {\n            // If we're doing points, we assume that the points are already\n            // translated, so we skip the shader translation.\n            inst.skipTranslation = true;\n            // Force triangle draw mode\n            inst.drawMode = 'TRIANGLES';\n            // We don't have a z component in the shader, so we need to sort.\n            if (points[0].node && points[0].node.levelDynamic) {\n                points.sort((a, b) => {\n                    if (a.node) {\n                        if (a.node.levelDynamic >\n                            b.node.levelDynamic) {\n                            return 1;\n                        }\n                        if (a.node.levelDynamic <\n                            b.node.levelDynamic) {\n                            return -1;\n                        }\n                    }\n                    return 0;\n                });\n            }\n            points.forEach((point) => {\n                const plotY = point.plotY;\n                let swidth, pointAttr;\n                if (typeof plotY !== 'undefined' &&\n                    !isNaN(plotY) &&\n                    point.y !== null &&\n                    point.shapeArgs) {\n                    let { x = 0, y = 0, width = 0, height = 0 } = point.shapeArgs;\n                    pointAttr = chart.styledMode ?\n                        point.series\n                            .colorAttribs(point) :\n                        pointAttr = point.series.pointAttribs(point);\n                    swidth = pointAttr['stroke-width'] || 0;\n                    // Handle point colors\n                    pcolor = color(pointAttr.fill).rgba;\n                    pcolor[0] /= 255.0;\n                    pcolor[1] /= 255.0;\n                    pcolor[2] /= 255.0;\n                    // So there are two ways of doing this. Either we can\n                    // create a rectangle of two triangles, or we can do a\n                    // point and use point size. Latter is faster, but\n                    // only supports squares. So we're doing triangles.\n                    // We could also use one color per. vertice to get\n                    // better color interpolation.\n                    // If there's stroking, we do an additional rect\n                    if (series.is('treemap')) {\n                        swidth = swidth || 1;\n                        scolor = color(pointAttr.stroke).rgba;\n                        scolor[0] /= 255.0;\n                        scolor[1] /= 255.0;\n                        scolor[2] /= 255.0;\n                        pushRect(x, y, width, height, scolor);\n                        swidth /= 2;\n                    }\n                    // } else {\n                    //     swidth = 0;\n                    // }\n                    // Fixes issues with inverted heatmaps (see #6981). The root\n                    // cause is that the coordinate system is flipped. In other\n                    // words, instead of [0,0] being top-left, it's\n                    // bottom-right. This causes a vertical and horizontal flip\n                    // in the resulting image, making it rotated 180 degrees.\n                    if (series.is('heatmap') && chart.inverted) {\n                        x = xAxis.len - x;\n                        y = yAxis.len - y;\n                        width = -width;\n                        height = -height;\n                    }\n                    pushRect(x + swidth, y + swidth, width - (swidth * 2), height - (swidth * 2), pcolor);\n                }\n            });\n            closeSegment();\n            return;\n        }\n        // Extract color axis\n        // (chart.axes || []).forEach((a): void => {\n        //     if (H.ColorAxis && a instanceof H.ColorAxis) {\n        //         caxis = a;\n        //     }\n        // });\n        while (i < sdata.length - 1) {\n            d = sdata[++i];\n            if (typeof d === 'undefined') {\n                continue;\n            }\n            /// px = x = y = z = nx = low = false;\n            // chartDestroyed = typeof chart.index === 'undefined';\n            // nextInside = prevInside = pcolor = isXInside = isYInside = false;\n            // drawAsBar = asBar[series.type];\n            if (chartDestroyed) {\n                break;\n            }\n            // Uncomment this to enable color by point.\n            // This currently left disabled as the charts look really ugly\n            // when enabled and there's a lot of points.\n            // Leaving in for the future (tm).\n            // if (colorByPoint) {\n            //     colorIndex = ++colorIndex %\n            //         series.chart.options.colors.length;\n            //     pcolor = toRGBAFast(series.chart.options.colors[colorIndex]);\n            //     pcolor[0] /= 255.0;\n            //     pcolor[1] /= 255.0;\n            //     pcolor[2] /= 255.0;\n            // }\n            // Handle the point.color option (#5999)\n            const pointOptions = rawData && rawData[i];\n            if (!useRaw && isObject(pointOptions, true)) {\n                if (pointOptions.color) {\n                    pcolor = color(pointOptions.color).rgba;\n                    pcolor[0] /= 255.0;\n                    pcolor[1] /= 255.0;\n                    pcolor[2] /= 255.0;\n                }\n            }\n            if (useRaw) {\n                x = d[0];\n                y = d[1];\n                if (sdata[i + 1]) {\n                    nx = sdata[i + 1][0];\n                }\n                if (sdata[i - 1]) {\n                    px = sdata[i - 1][0];\n                }\n                if (d.length >= 3) {\n                    z = d[2];\n                    if (d[2] > inst.zMax) {\n                        inst.zMax = d[2];\n                    }\n                    if (d[2] < inst.zMin) {\n                        inst.zMin = d[2];\n                    }\n                }\n            }\n            else {\n                x = d;\n                y = yData?.[i];\n                if (sdata[i + 1]) {\n                    nx = sdata[i + 1];\n                }\n                if (sdata[i - 1]) {\n                    px = sdata[i - 1];\n                }\n                if (zData && zData.length) {\n                    z = zData[i];\n                    if (zData[i] > inst.zMax) {\n                        inst.zMax = zData[i];\n                    }\n                    if (zData[i] < inst.zMin) {\n                        inst.zMin = zData[i];\n                    }\n                }\n            }\n            if (!connectNulls && (x === null || y === null)) {\n                beginSegment();\n                continue;\n            }\n            if (nx && nx >= xMin && nx <= xMax) {\n                nextInside = true;\n            }\n            if (px && px >= xMin && px <= xMax) {\n                prevInside = true;\n            }\n            if (isRange) {\n                if (useRaw) {\n                    y = d.slice(1, 3);\n                }\n                low = series.getColumn('low', true)?.[i];\n                y = series.getColumn('high', true)?.[i] || 0;\n            }\n            else if (isStacked) {\n                x = d.x;\n                y = d.stackY;\n                low = y - d.y;\n            }\n            if (yMin !== null &&\n                typeof yMin !== 'undefined' &&\n                yMax !== null &&\n                typeof yMax !== 'undefined') {\n                isYInside = y >= yMin && y <= yMax;\n            }\n            // Do not render points outside the zoomed range (#19701)\n            if (!sorted && !isYInside) {\n                continue;\n            }\n            if (x > xMax && closestRight.x < xMax) {\n                closestRight.x = x;\n                closestRight.y = y;\n            }\n            if (x < xMin && closestLeft.x > xMin) {\n                closestLeft.x = x;\n                closestLeft.y = y;\n            }\n            if (y === null && connectNulls) {\n                continue;\n            }\n            // Cull points outside the extremes\n            if (y === null || (!isYInside && !nextInside && !prevInside)) {\n                beginSegment();\n                continue;\n            }\n            // The first point before and first after extremes should be\n            // rendered (#9962, 19701)\n            // Make sure series with a single point are rendered (#21897)\n            if (sorted && ((nx >= xMin || x >= xMin) &&\n                (px <= xMax || x <= xMax)) ||\n                !sorted && ((x >= xMin) && (x <= xMax))) {\n                isXInside = true;\n            }\n            if (!isXInside && !nextInside && !prevInside) {\n                continue;\n            }\n            if (gapSize && x - px > gapSize) {\n                beginSegment();\n            }\n            // Note: Boost requires that zones are sorted!\n            if (zones) {\n                let zoneColor;\n                zones.some((// eslint-disable-line no-loop-func\n                zone, i) => {\n                    const last = zones[i - 1];\n                    if (zoneAxis === 'x') {\n                        if (typeof zone.value !== 'undefined' &&\n                            x <= zone.value) {\n                            if (zoneColors[i] &&\n                                (!last || x >= last.value)) {\n                                zoneColor = zoneColors[i];\n                            }\n                            return true;\n                        }\n                        return false;\n                    }\n                    if (typeof zone.value !== 'undefined' && y <= zone.value) {\n                        if (zoneColors[i] &&\n                            (!last || y >= last.value)) {\n                            zoneColor = zoneColors[i];\n                        }\n                        return true;\n                    }\n                    return false;\n                });\n                pcolor = zoneColor || zoneDefColor || pcolor;\n            }\n            // Skip translations - temporary floating point fix\n            if (!settings.useGPUTranslations) {\n                inst.skipTranslation = true;\n                x = xAxis.toPixels(x, true);\n                y = yAxis.toPixels(y, true);\n                // Make sure we're not drawing outside of the chart area.\n                // See #6594. Update: this is no longer required as far as I\n                // can tell. Leaving in for git blame in case there are edge\n                // cases I've not found. Having this in breaks #10246.\n                // if (y > plotHeight) {\n                // y = plotHeight;\n                // }\n                if (x > plotWidth) {\n                    // If this is rendered as a point, just skip drawing it\n                    // entirely, as we're not dependant on lineTo'ing to it.\n                    // See #8197\n                    if (inst.drawMode === 'POINTS') {\n                        continue;\n                    }\n                    // Having this here will clamp markers and make the angle\n                    // of the last line wrong. See 9166.\n                    // x = plotWidth;\n                }\n            }\n            // No markers on out of bounds things.\n            // Out of bound things are shown if and only if the next\n            // or previous point is inside the rect.\n            if (inst.hasMarkers && isXInside) {\n                /// x = Highcharts.correctFloat(\n                //     Math.min(Math.max(-1e5, xAxis.translate(\n                //         x,\n                //         0,\n                //         0,\n                //         0,\n                //         1,\n                //         0.5,\n                //         false\n                //     )), 1e5)\n                // );\n                if (lastX !== false) {\n                    series.closestPointRangePx = Math.min(series.closestPointRangePx, Math.abs(x - lastX));\n                }\n            }\n            // If the last _drawn_ point is closer to this point than the\n            // threshold, skip it. Shaves off 20-100ms in processing.\n            if (!settings.useGPUTranslations &&\n                !settings.usePreallocated &&\n                (lastX && Math.abs(x - lastX) < cullXThreshold) &&\n                (lastY && Math.abs(y - lastY) < cullYThreshold)) {\n                if (settings.debug.showSkipSummary) {\n                    ++skipped;\n                }\n                continue;\n            }\n            if (drawAsBar) {\n                minVal = low || 0;\n                if (low === false || typeof low === 'undefined') {\n                    if (y < 0) {\n                        minVal = y;\n                    }\n                    else {\n                        minVal = 0;\n                    }\n                }\n                if ((!isRange && !isStacked) ||\n                    yAxis.logarithmic // #16850\n                ) {\n                    minVal = Math.max(threshold === null ? yMin : threshold, // #5268\n                    yMin); // #8731\n                }\n                if (!settings.useGPUTranslations) {\n                    minVal = yAxis.toPixels(minVal, true);\n                }\n                // Need to add an extra point here\n                vertice(x, minVal, 0, 0, pcolor);\n            }\n            // Do step line if enabled.\n            // Draws an additional point at the old Y at the new X.\n            // See #6976.\n            if (options.step && !firstPoint) {\n                vertice(x, lastY, 0, 2, pcolor);\n            }\n            vertice(x, y, 0, series.type === 'bubble' ? (z || 1) : 2, pcolor);\n            // Uncomment this to support color axis.\n            // if (caxis) {\n            //     pcolor = color(caxis.toColor(y)).rgba;\n            //     inst.colorData.push(color[0] / 255.0);\n            //     inst.colorData.push(color[1] / 255.0);\n            //     inst.colorData.push(color[2] / 255.0);\n            //     inst.colorData.push(color[3]);\n            // }\n            lastX = x;\n            lastY = y;\n            hadPoints = true;\n            firstPoint = false;\n        }\n        if (settings.debug.showSkipSummary) {\n            console.log('skipped points:', skipped); // eslint-disable-line no-console\n        }\n        const pushSupplementPoint = (point, atStart) => {\n            if (!settings.useGPUTranslations) {\n                inst.skipTranslation = true;\n                point.x = xAxis.toPixels(point.x, true);\n                point.y = yAxis.toPixels(point.y, true);\n            }\n            // We should only do this for lines, and we should ignore markers\n            // since there's no point here that would have a marker.\n            if (atStart) {\n                this.data = [point.x, point.y, 0, 2].concat(this.data);\n                return;\n            }\n            vertice(point.x, point.y, 0, 2);\n        };\n        if (!hadPoints &&\n            connectNulls !== false &&\n            series.drawMode === 'line_strip') {\n            if (closestLeft.x < Number.MAX_VALUE) {\n                // We actually need to push this *before* the complete buffer.\n                pushSupplementPoint(closestLeft, true);\n            }\n            if (closestRight.x > -Number.MAX_VALUE) {\n                pushSupplementPoint(closestRight);\n            }\n        }\n        closeSegment();\n    }\n    /**\n     * Push a series to the renderer\n     * If we render the series immediately, we don't have to loop later\n     * @private\n     * @param {Highchart.Series} s\n     * The series to push.\n     */\n    pushSeries(s) {\n        const markerData = this.markerData, series = this.series, settings = this.settings;\n        if (series.length > 0) {\n            if (series[series.length - 1].hasMarkers) {\n                series[series.length - 1].markerTo = markerData.length;\n            }\n        }\n        if (settings.debug.timeSeriesProcessing) {\n            console.time('building ' + s.type + ' series'); // eslint-disable-line no-console\n        }\n        const obj = {\n            segments: [],\n            markerFrom: markerData.length,\n            // Push RGBA values to this array to use per. point coloring.\n            // It should be 0-padded, so each component should be pushed in\n            // succession.\n            colorData: [],\n            series: s,\n            zMin: Number.MAX_VALUE,\n            zMax: -Number.MAX_VALUE,\n            hasMarkers: s.options.marker ?\n                s.options.marker.enabled !== false :\n                false,\n            showMarkers: true,\n            drawMode: Boost_WGLDrawMode[s.type] || 'LINE_STRIP'\n        };\n        if (s.index >= series.length) {\n            series.push(obj);\n        }\n        else {\n            series[s.index] = obj;\n        }\n        // Add the series data to our buffer(s)\n        this.pushSeriesData(s, obj);\n        if (settings.debug.timeSeriesProcessing) {\n            console.timeEnd('building ' + s.type + ' series'); // eslint-disable-line no-console\n        }\n    }\n    /**\n     * Flush the renderer.\n     * This removes pushed series and vertices.\n     * Should be called after clearing and before rendering\n     * @private\n     */\n    flush() {\n        const vbuffer = this.vbuffer;\n        this.data = [];\n        this.markerData = [];\n        this.series = [];\n        if (vbuffer) {\n            vbuffer.destroy();\n        }\n    }\n    /**\n     * Pass x-axis to shader\n     * @private\n     * @param {Highcharts.Axis} axis\n     * The x-axis.\n     */\n    setXAxis(axis) {\n        const shader = this.shader;\n        if (!shader) {\n            return;\n        }\n        const pixelRatio = this.getPixelRatio();\n        shader.setUniform('xAxisTrans', axis.transA * pixelRatio);\n        shader.setUniform('xAxisMin', axis.min);\n        shader.setUniform('xAxisMinPad', axis.minPixelPadding * pixelRatio);\n        shader.setUniform('xAxisPointRange', axis.pointRange);\n        shader.setUniform('xAxisLen', axis.len * pixelRatio);\n        shader.setUniform('xAxisPos', axis.pos * pixelRatio);\n        shader.setUniform('xAxisCVSCoord', (!axis.horiz));\n        shader.setUniform('xAxisIsLog', (!!axis.logarithmic));\n        shader.setUniform('xAxisReversed', (!!axis.reversed));\n    }\n    /**\n     * Pass y-axis to shader\n     * @private\n     * @param {Highcharts.Axis} axis\n     * The y-axis.\n     */\n    setYAxis(axis) {\n        const shader = this.shader;\n        if (!shader) {\n            return;\n        }\n        const pixelRatio = this.getPixelRatio();\n        shader.setUniform('yAxisTrans', axis.transA * pixelRatio);\n        shader.setUniform('yAxisMin', axis.min);\n        shader.setUniform('yAxisMinPad', axis.minPixelPadding * pixelRatio);\n        shader.setUniform('yAxisPointRange', axis.pointRange);\n        shader.setUniform('yAxisLen', axis.len * pixelRatio);\n        shader.setUniform('yAxisPos', axis.pos * pixelRatio);\n        shader.setUniform('yAxisCVSCoord', (!axis.horiz));\n        shader.setUniform('yAxisIsLog', (!!axis.logarithmic));\n        shader.setUniform('yAxisReversed', (!!axis.reversed));\n    }\n    /**\n     * Set the translation threshold\n     * @private\n     * @param {boolean} has\n     * Has threshold flag.\n     * @param {numbe} translation\n     * The threshold.\n     */\n    setThreshold(has, translation) {\n        const shader = this.shader;\n        if (!shader) {\n            return;\n        }\n        shader.setUniform('hasThreshold', has);\n        shader.setUniform('translatedThreshold', translation);\n    }\n    /**\n     * Render the data\n     * This renders all pushed series.\n     * @private\n     */\n    renderChart(chart) {\n        const gl = this.gl, settings = this.settings, shader = this.shader, vbuffer = this.vbuffer;\n        const pixelRatio = this.getPixelRatio();\n        if (chart) {\n            this.width = chart.chartWidth * pixelRatio;\n            this.height = chart.chartHeight * pixelRatio;\n        }\n        else {\n            return false;\n        }\n        const height = this.height, width = this.width;\n        if (!gl || !shader || !width || !height) {\n            return false;\n        }\n        if (settings.debug.timeRendering) {\n            console.time('gl rendering'); // eslint-disable-line no-console\n        }\n        gl.canvas.width = width;\n        gl.canvas.height = height;\n        shader.bind();\n        gl.viewport(0, 0, width, height);\n        shader.setPMatrix(WGLRenderer.orthoMatrix(width, height));\n        if (settings.lineWidth > 1 && !(highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isMS) {\n            gl.lineWidth(settings.lineWidth);\n        }\n        if (vbuffer) {\n            vbuffer.build(this.data, 'aVertexPosition', 4);\n            vbuffer.bind();\n        }\n        shader.setInverted(chart.inverted);\n        // Render the series\n        this.series.forEach((s, si) => {\n            const options = s.series.options, shapeOptions = options.marker, lineWidth = (typeof options.lineWidth !== 'undefined' ?\n                options.lineWidth :\n                1), threshold = options.threshold, hasThreshold = isNumber(threshold), yBottom = s.series.yAxis.getThreshold(threshold), translatedThreshold = yBottom, showMarkers = WGLRenderer_pick(options.marker ? options.marker.enabled : null, s.series.xAxis.isRadial ? true : null, s.series.closestPointRangePx >\n                2 * ((options.marker ?\n                    options.marker.radius :\n                    10) || 10)), shapeTexture = this.textureHandles[(shapeOptions && shapeOptions.symbol) ||\n                s.series.symbol] || this.textureHandles.circle;\n            let sindex, cbuffer, fillColor, scolor = [];\n            if (s.segments.length === 0 ||\n                s.segments[0].from === s.segments[0].to) {\n                return;\n            }\n            if (shapeTexture.isReady) {\n                gl.bindTexture(gl.TEXTURE_2D, shapeTexture.handle);\n                shader.setTexture(shapeTexture.handle);\n            }\n            if (chart.styledMode) {\n                if (s.series.markerGroup === s.series.chart.boost?.markerGroup) {\n                    // Create a temporary markerGroup to get the fill color\n                    delete s.series.markerGroup;\n                    s.series.markerGroup = s.series.plotGroup('markerGroup', 'markers', 'visible', 1, chart.seriesGroup).addClass('highcharts-tracker');\n                    fillColor = s.series.markerGroup.getStyle('fill');\n                    s.series.markerGroup.destroy();\n                    s.series.markerGroup = s.series.chart.boost?.markerGroup;\n                }\n                else {\n                    fillColor = s.series.markerGroup?.getStyle('fill');\n                }\n            }\n            else {\n                fillColor =\n                    (s.drawMode === 'POINTS' && // #14260\n                        s.series.pointAttribs &&\n                        s.series.pointAttribs().fill) ||\n                        s.series.color;\n                if (options.colorByPoint) {\n                    fillColor = s.series.chart.options.colors[si];\n                }\n            }\n            if (s.series.fillOpacity && options.fillOpacity) {\n                fillColor = new (highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default())(fillColor).setOpacity(WGLRenderer_pick(options.fillOpacity, 1.0)).get();\n            }\n            scolor = color(fillColor).rgba;\n            if (!settings.useAlpha) {\n                scolor[3] = 1.0;\n            }\n            // Blending\n            if (options.boostBlending === 'add') {\n                gl.blendFunc(gl.SRC_ALPHA, gl.ONE);\n                gl.blendEquation(gl.FUNC_ADD);\n            }\n            else if (options.boostBlending === 'mult' ||\n                options.boostBlending === 'multiply') {\n                gl.blendFunc(gl.DST_COLOR, gl.ZERO);\n            }\n            else if (options.boostBlending === 'darken') {\n                gl.blendFunc(gl.ONE, gl.ONE);\n                gl.blendEquation(gl.FUNC_MIN);\n            }\n            else {\n                /// gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n                // gl.blendEquation(gl.FUNC_ADD);\n                gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n            }\n            shader.reset();\n            // If there are entries in the colorData buffer, build and bind it.\n            if (s.colorData.length > 0) {\n                shader.setUniform('hasColor', 1);\n                cbuffer = new Boost_WGLVertexBuffer(gl, shader);\n                cbuffer.build(\n                // The color array attribute for vertex is assigned from 0,\n                // so it needs to be shifted to be applied to further\n                // segments. #18858\n                Array(s.segments[0].from).concat(s.colorData), 'aColor', 4);\n                cbuffer.bind();\n            }\n            else {\n                // Set the hasColor uniform to false (0) when the series\n                // contains no colorData buffer points. #18858\n                shader.setUniform('hasColor', 0);\n                // #15869, a buffer with fewer points might already be bound by\n                // a different series/chart causing out of range errors\n                gl.disableVertexAttribArray(gl.getAttribLocation(shader.getProgram(), 'aColor'));\n            }\n            // Set series specific uniforms\n            shader.setColor(scolor);\n            this.setXAxis(s.series.xAxis);\n            this.setYAxis(s.series.yAxis);\n            this.setThreshold(hasThreshold, translatedThreshold);\n            if (s.drawMode === 'POINTS') {\n                shader.setPointSize(WGLRenderer_pick(options.marker && options.marker.radius, 0.5) * 2 * pixelRatio);\n            }\n            // If set to true, the toPixels translations in the shader\n            // is skipped, i.e it's assumed that the value is a pixel coord.\n            shader.setSkipTranslation(s.skipTranslation);\n            if (s.series.type === 'bubble') {\n                shader.setBubbleUniforms(s.series, s.zMin, s.zMax, pixelRatio);\n            }\n            shader.setDrawAsCircle(asCircle[s.series.type] || false);\n            if (!vbuffer) {\n                return;\n            }\n            // Do the actual rendering\n            // If the line width is < 0, skip rendering of the lines. See #7833.\n            if (lineWidth > 0 || s.drawMode !== 'LINE_STRIP') {\n                for (sindex = 0; sindex < s.segments.length; sindex++) {\n                    vbuffer.render(s.segments[sindex].from, s.segments[sindex].to, s.drawMode);\n                }\n            }\n            if (s.hasMarkers && showMarkers) {\n                shader.setPointSize(WGLRenderer_pick(options.marker && options.marker.radius, 5) * 2 * pixelRatio);\n                shader.setDrawAsCircle(true);\n                for (sindex = 0; sindex < s.segments.length; sindex++) {\n                    vbuffer.render(s.segments[sindex].from, s.segments[sindex].to, 'POINTS');\n                }\n            }\n        });\n        if (settings.debug.timeRendering) {\n            console.timeEnd('gl rendering'); // eslint-disable-line no-console\n        }\n        if (this.postRenderCallback) {\n            this.postRenderCallback(this);\n        }\n        this.flush();\n    }\n    /**\n     * Render the data when ready\n     * @private\n     */\n    render(chart) {\n        this.clear();\n        if (chart.renderer.forExport) {\n            return this.renderChart(chart);\n        }\n        if (this.isInited) {\n            this.renderChart(chart);\n        }\n        else {\n            setTimeout(() => {\n                this.render(chart);\n            }, 1);\n        }\n    }\n    /**\n     * Set the viewport size in pixels\n     * Creates an orthographic perspective matrix and applies it.\n     * @private\n     */\n    setSize(width, height) {\n        const shader = this.shader;\n        // Skip if there's no change, or if we have no valid shader\n        if (!shader || (this.width === width && this.height === height)) {\n            return;\n        }\n        this.width = width;\n        this.height = height;\n        shader.bind();\n        shader.setPMatrix(WGLRenderer.orthoMatrix(width, height));\n    }\n    /**\n     * Init OpenGL\n     * @private\n     */\n    init(canvas, noFlush) {\n        const settings = this.settings;\n        this.isInited = false;\n        if (!canvas) {\n            return false;\n        }\n        if (settings.debug.timeSetup) {\n            console.time('gl setup'); // eslint-disable-line no-console\n        }\n        for (let i = 0; i < contexts.length; ++i) {\n            this.gl = canvas.getContext(contexts[i], {\n            //    /premultipliedAlpha: false\n            });\n            if (this.gl) {\n                break;\n            }\n        }\n        const gl = this.gl;\n        if (gl) {\n            if (!noFlush) {\n                this.flush();\n            }\n        }\n        else {\n            return false;\n        }\n        gl.enable(gl.BLEND);\n        /// gl.blendFunc(gl.SRC_ALPHA, gl.ONE);\n        gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n        gl.disable(gl.DEPTH_TEST);\n        /// gl.depthMask(gl.FALSE);\n        gl.depthFunc(gl.LESS);\n        const shader = this.shader = new Boost_WGLShader(gl);\n        if (!shader) {\n            // We need to abort, there's no shader context\n            return false;\n        }\n        this.vbuffer = new Boost_WGLVertexBuffer(gl, shader);\n        const createTexture = (name, fn) => {\n            const props = {\n                isReady: false,\n                texture: doc.createElement('canvas'),\n                handle: gl.createTexture()\n            }, ctx = props.texture.getContext('2d');\n            this.textureHandles[name] = props;\n            props.texture.width = 512;\n            props.texture.height = 512;\n            ctx.mozImageSmoothingEnabled = false;\n            ctx.webkitImageSmoothingEnabled = false;\n            ctx.msImageSmoothingEnabled = false;\n            ctx.imageSmoothingEnabled = false;\n            ctx.strokeStyle = 'rgba(255, 255, 255, 0)';\n            ctx.fillStyle = '#FFF';\n            fn(ctx);\n            try {\n                gl.activeTexture(gl.TEXTURE0);\n                gl.bindTexture(gl.TEXTURE_2D, props.handle);\n                /// gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);\n                gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, props.texture);\n                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n                /// gl.generateMipmap(gl.TEXTURE_2D);\n                gl.bindTexture(gl.TEXTURE_2D, null);\n                props.isReady = true;\n            }\n            catch (e) {\n                // Silent error\n            }\n        };\n        // Circle shape\n        createTexture('circle', (ctx) => {\n            ctx.beginPath();\n            ctx.arc(256, 256, 256, 0, 2 * Math.PI);\n            ctx.stroke();\n            ctx.fill();\n        });\n        // Square shape\n        createTexture('square', (ctx) => {\n            ctx.fillRect(0, 0, 512, 512);\n        });\n        // Diamond shape\n        createTexture('diamond', (ctx) => {\n            ctx.beginPath();\n            ctx.moveTo(256, 0);\n            ctx.lineTo(512, 256);\n            ctx.lineTo(256, 512);\n            ctx.lineTo(0, 256);\n            ctx.lineTo(256, 0);\n            ctx.fill();\n        });\n        // Triangle shape\n        createTexture('triangle', (ctx) => {\n            ctx.beginPath();\n            ctx.moveTo(0, 512);\n            ctx.lineTo(256, 0);\n            ctx.lineTo(512, 512);\n            ctx.lineTo(0, 512);\n            ctx.fill();\n        });\n        // Triangle shape (rotated)\n        createTexture('triangle-down', (ctx) => {\n            ctx.beginPath();\n            ctx.moveTo(0, 0);\n            ctx.lineTo(256, 512);\n            ctx.lineTo(512, 0);\n            ctx.lineTo(0, 0);\n            ctx.fill();\n        });\n        this.isInited = true;\n        if (settings.debug.timeSetup) {\n            console.timeEnd('gl setup'); // eslint-disable-line no-console\n        }\n        return true;\n    }\n    /**\n     * @private\n     * @todo use it\n     */\n    destroy() {\n        const gl = this.gl, shader = this.shader, vbuffer = this.vbuffer;\n        this.flush();\n        if (vbuffer) {\n            vbuffer.destroy();\n        }\n        if (shader) {\n            shader.destroy();\n        }\n        if (gl) {\n            objectEach(this.textureHandles, (texture) => {\n                if (texture.handle) {\n                    gl.deleteTexture(texture.handle);\n                }\n            });\n            gl.canvas.width = 1;\n            gl.canvas.height = 1;\n        }\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Boost_WGLRenderer = (WGLRenderer);\n\n;// ./code/es-modules/Extensions/Boost/BoostSeries.js\n/* *\n *\n *  (c) 2019-2024 Highsoft AS\n *\n *  Boost module: stripped-down renderer for higher performance\n *\n *  License: highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\n\nconst { getBoostClipRect: BoostSeries_getBoostClipRect, isChartSeriesBoosting: BoostSeries_isChartSeriesBoosting } = Boost_BoostChart;\n\nconst { getOptions } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { composed: BoostSeries_composed, doc: BoostSeries_doc, noop, win: BoostSeries_win } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent: BoostSeries_addEvent, destroyObjectProperties, error: BoostSeries_error, extend, fireEvent, isArray, isNumber: BoostSeries_isNumber, pick: BoostSeries_pick, pushUnique: BoostSeries_pushUnique, wrap, defined } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n/* *\n *\n *  Constants\n *\n * */\nconst CHUNK_SIZE = 3000;\n/* *\n *\n *  Variables\n *\n * */\nlet index, mainCanvas;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction allocateIfNotSeriesBoosting(renderer, series) {\n    const boost = series.boost;\n    if (renderer &&\n        boost &&\n        boost.target &&\n        boost.canvas &&\n        !BoostSeries_isChartSeriesBoosting(series.chart)) {\n        renderer.allocateBufferForSingleSeries(series);\n    }\n}\n/**\n * Return true if ths boost.enabled option is true\n *\n * @private\n * @param {Highcharts.Chart} chart\n * The chart\n * @return {boolean}\n * True, if boost is enabled.\n */\nfunction boostEnabled(chart) {\n    return BoostSeries_pick((chart &&\n        chart.options &&\n        chart.options.boost &&\n        chart.options.boost.enabled), true);\n}\n/**\n * @private\n */\nfunction BoostSeries_compose(SeriesClass, seriesTypes, wglMode) {\n    if (BoostSeries_pushUnique(BoostSeries_composed, 'Boost.Series')) {\n        const plotOptions = getOptions().plotOptions, seriesProto = SeriesClass.prototype;\n        BoostSeries_addEvent(SeriesClass, 'destroy', onSeriesDestroy);\n        BoostSeries_addEvent(SeriesClass, 'hide', onSeriesHide);\n        if (wglMode) {\n            seriesProto.renderCanvas = seriesRenderCanvas;\n        }\n        wrap(seriesProto, 'getExtremes', wrapSeriesGetExtremes);\n        wrap(seriesProto, 'processData', wrapSeriesProcessData);\n        wrap(seriesProto, 'searchPoint', wrapSeriesSearchPoint);\n        [\n            'translate',\n            'generatePoints',\n            'drawTracker',\n            'drawPoints',\n            'render'\n        ].forEach((method) => wrapSeriesFunctions(seriesProto, seriesTypes, method));\n        // Set default options\n        Boost_Boostables.forEach((type) => {\n            const typePlotOptions = plotOptions[type];\n            if (typePlotOptions) {\n                typePlotOptions.boostThreshold = 5000;\n                typePlotOptions.boostData = [];\n                seriesTypes[type].prototype.fillOpacity = true;\n            }\n        });\n        if (wglMode) {\n            const { area: AreaSeries, areaspline: AreaSplineSeries, bubble: BubbleSeries, column: ColumnSeries, heatmap: HeatmapSeries, scatter: ScatterSeries, treemap: TreemapSeries } = seriesTypes;\n            if (AreaSeries) {\n                extend(AreaSeries.prototype, {\n                    fill: true,\n                    fillOpacity: true,\n                    sampling: true\n                });\n            }\n            if (AreaSplineSeries) {\n                extend(AreaSplineSeries.prototype, {\n                    fill: true,\n                    fillOpacity: true,\n                    sampling: true\n                });\n            }\n            if (BubbleSeries) {\n                const bubbleProto = BubbleSeries.prototype;\n                // By default, the bubble series does not use the KD-tree, so\n                // force it to.\n                delete bubbleProto.buildKDTree;\n                // SeriesTypes.bubble.prototype.directTouch = false;\n                // Needed for markers to work correctly\n                wrap(bubbleProto, 'markerAttribs', function (proceed) {\n                    if (this.boosted) {\n                        return false;\n                    }\n                    return proceed.apply(this, [].slice.call(arguments, 1));\n                });\n            }\n            if (ColumnSeries) {\n                extend(ColumnSeries.prototype, {\n                    fill: true,\n                    sampling: true\n                });\n            }\n            if (ScatterSeries) {\n                ScatterSeries.prototype.fill = true;\n            }\n            // We need to handle heatmaps separately, since we can't perform the\n            // size/color calculations in the shader easily.\n            // @todo This likely needs future optimization.\n            [HeatmapSeries, TreemapSeries].forEach((SC) => {\n                if (SC) {\n                    wrap(SC.prototype, 'drawPoints', wrapSeriesDrawPoints);\n                }\n            });\n        }\n    }\n    return SeriesClass;\n}\n/**\n * Create a canvas + context and attach it to the target\n *\n * @private\n * @function createAndAttachRenderer\n *\n * @param {Highcharts.Chart} chart\n * the chart\n *\n * @param {Highcharts.Series} series\n * the series\n *\n * @return {Highcharts.BoostGLRenderer}\n * the canvas renderer\n */\nfunction createAndAttachRenderer(chart, series) {\n    const ChartClass = chart.constructor, targetGroup = chart.seriesGroup || series.group, alpha = 1;\n    let width = chart.chartWidth, height = chart.chartHeight, target = chart, foSupported = typeof SVGForeignObjectElement !== 'undefined', hasClickHandler = false;\n    if (BoostSeries_isChartSeriesBoosting(chart)) {\n        target = chart;\n    }\n    else {\n        target = series;\n        hasClickHandler = Boolean(series.options.events?.click ||\n            series.options.point?.events?.click);\n    }\n    const boost = target.boost =\n        target.boost ||\n            {};\n    // Support for foreignObject is flimsy as best.\n    // IE does not support it, and Chrome has a bug which messes up\n    // the canvas draw order.\n    // As such, we force the Image fallback for now, but leaving the\n    // actual Canvas path in-place in case this changes in the future.\n    foSupported = false;\n    if (!mainCanvas) {\n        mainCanvas = BoostSeries_doc.createElement('canvas');\n    }\n    if (!boost.target) {\n        boost.canvas = mainCanvas;\n        // Fall back to image tag if foreignObject isn't supported,\n        // or if we're exporting.\n        if (chart.renderer.forExport || !foSupported) {\n            target.renderTarget = boost.target = chart.renderer.image('', 0, 0, width, height)\n                .addClass('highcharts-boost-canvas')\n                .add(targetGroup);\n            boost.clear = function () {\n                boost.target.attr({\n                    // Insert a blank pixel (#17182)\n                    /* eslint-disable-next-line max-len*/\n                    href: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII='\n                });\n            };\n            boost.copy = function () {\n                boost.resize();\n                boost.target.attr({\n                    href: boost.canvas.toDataURL('image/png')\n                });\n            };\n        }\n        else {\n            boost.targetFo = chart.renderer\n                .createElement('foreignObject')\n                .add(targetGroup);\n            target.renderTarget = boost.target =\n                BoostSeries_doc.createElement('canvas');\n            boost.targetCtx = boost.target.getContext('2d');\n            boost.targetFo.element.appendChild(boost.target);\n            boost.clear = function () {\n                boost.target.width = boost.canvas.width;\n                boost.target.height = boost.canvas.height;\n            };\n            boost.copy = function () {\n                boost.target.width = boost.canvas.width;\n                boost.target.height = boost.canvas.height;\n                boost.targetCtx.drawImage(boost.canvas, 0, 0);\n            };\n        }\n        boost.resize = function () {\n            width = chart.chartWidth;\n            height = chart.chartHeight;\n            (boost.targetFo || boost.target)\n                .attr({\n                x: 0,\n                y: 0,\n                width,\n                height\n            })\n                .css({\n                pointerEvents: hasClickHandler ? void 0 : 'none',\n                mixedBlendMode: 'normal',\n                opacity: alpha\n            })\n                .addClass(hasClickHandler ? 'highcharts-tracker' : '');\n            if (target instanceof ChartClass) {\n                target.boost?.markerGroup?.translate(chart.plotLeft, chart.plotTop);\n            }\n        };\n        boost.clipRect = chart.renderer.clipRect();\n        (boost.targetFo || boost.target)\n            .attr({\n            // Set the z index of the boost target to that of the last\n            // series using it. This logic is not perfect, as it will not\n            // handle interleaved series with boost enabled or disabled. But\n            // it will cover the most common use case of one or more\n            // successive boosted or non-boosted series (#9819).\n            zIndex: series.options.zIndex\n        });\n        if (target instanceof ChartClass) {\n            target.boost.markerGroup = target.renderer\n                .g()\n                .add(targetGroup)\n                .translate(series.xAxis.pos, series.yAxis.pos);\n        }\n    }\n    boost.canvas.width = width;\n    boost.canvas.height = height;\n    if (boost.clipRect) {\n        const box = BoostSeries_getBoostClipRect(chart, target), \n        // When using panes, the image itself must be clipped. When not\n        // using panes, it is better to clip the target group, because then\n        // we preserve clipping on touch- and mousewheel zoom preview.\n        clippedElement = (box.width === chart.clipBox.width &&\n            box.height === chart.clipBox.height) ? targetGroup :\n            (boost.targetFo || boost.target);\n        boost.clipRect.attr(box);\n        clippedElement?.clip(boost.clipRect);\n    }\n    boost.resize();\n    boost.clear();\n    if (!boost.wgl) {\n        boost.wgl = new Boost_WGLRenderer((wgl) => {\n            if (wgl.settings.debug.timeBufferCopy) {\n                console.time('buffer copy'); // eslint-disable-line no-console\n            }\n            boost.copy();\n            if (wgl.settings.debug.timeBufferCopy) {\n                console.timeEnd('buffer copy'); // eslint-disable-line no-console\n            }\n        });\n        if (!boost.wgl.init(boost.canvas)) {\n            // The OGL renderer couldn't be inited. This likely means a shader\n            // error as we wouldn't get to this point if there was no WebGL\n            // support.\n            BoostSeries_error('[highcharts boost] - unable to init WebGL renderer');\n        }\n        boost.wgl.setOptions(chart.options.boost || {});\n        if (target instanceof ChartClass) {\n            boost.wgl.allocateBuffer(chart);\n        }\n    }\n    boost.wgl.setSize(width, height);\n    return boost.wgl;\n}\n/**\n * If implemented in the core, parts of this can probably be\n * shared with other similar methods in Highcharts.\n * @private\n * @function Highcharts.Series#destroyGraphics\n */\nfunction destroyGraphics(series) {\n    const points = series.points;\n    if (points) {\n        let point, i;\n        for (i = 0; i < points.length; i = i + 1) {\n            point = points[i];\n            if (point && point.destroyElements) {\n                point.destroyElements(); // #7557\n            }\n        }\n    }\n    ['graph', 'area', 'tracker'].forEach((prop) => {\n        const seriesProp = series[prop];\n        if (seriesProp) {\n            series[prop] = seriesProp.destroy();\n        }\n    });\n    for (const zone of series.zones) {\n        destroyObjectProperties(zone, void 0, true);\n    }\n}\n/**\n * An \"async\" foreach loop. Uses a setTimeout to keep the loop from blocking the\n * UI thread.\n *\n * @private\n * @param {Array<unknown>} arr\n * The array to loop through.\n * @param {Function} fn\n * The callback to call for each item.\n * @param {Function} finalFunc\n * The callback to call when done.\n * @param {number} [chunkSize]\n * The number of iterations per timeout.\n * @param {number} [i]\n * The current index.\n * @param {boolean} [noTimeout]\n * Set to true to skip timeouts.\n */\nfunction eachAsync(arr, fn, finalFunc, chunkSize, i, noTimeout) {\n    i = i || 0;\n    chunkSize = chunkSize || CHUNK_SIZE;\n    const threshold = i + chunkSize;\n    let proceed = true;\n    while (proceed && i < threshold && i < arr.length) {\n        proceed = fn(arr[i], i);\n        ++i;\n    }\n    if (proceed) {\n        if (i < arr.length) {\n            if (noTimeout) {\n                eachAsync(arr, fn, finalFunc, chunkSize, i, noTimeout);\n            }\n            else if (BoostSeries_win.requestAnimationFrame) {\n                // If available, do requestAnimationFrame - shaves off a few ms\n                BoostSeries_win.requestAnimationFrame(function () {\n                    eachAsync(arr, fn, finalFunc, chunkSize, i);\n                });\n            }\n            else {\n                setTimeout(eachAsync, 0, arr, fn, finalFunc, chunkSize, i);\n            }\n        }\n        else if (finalFunc) {\n            finalFunc();\n        }\n    }\n}\n/**\n * Enter boost mode and apply boost-specific properties.\n * @private\n * @function Highcharts.Series#enterBoost\n */\nfunction enterBoost(series) {\n    series.boost = series.boost || {\n        // Faster than a series bind:\n        getPoint: ((bp) => getPoint(series, bp))\n    };\n    const alteredByBoost = series.boost.altered = [];\n    // Save the original values, including whether it was an own\n    // property or inherited from the prototype.\n    ['allowDG', 'directTouch', 'stickyTracking'].forEach((prop) => {\n        alteredByBoost.push({\n            prop: prop,\n            val: series[prop],\n            own: Object.hasOwnProperty.call(series, prop)\n        });\n    });\n    series.allowDG = false;\n    series.directTouch = false;\n    series.stickyTracking = true;\n    // Prevent animation when zooming in on boosted series(#13421).\n    series.finishedAnimating = true;\n    // Hide series label if any\n    if (series.labelBySeries) {\n        series.labelBySeries = series.labelBySeries.destroy();\n    }\n    // Destroy existing points after zoom out\n    if (series.is('scatter') &&\n        !series.is('treemap') &&\n        series.data.length) {\n        for (const point of series.data) {\n            point?.destroy?.();\n        }\n        series.data.length = 0;\n        series.points.length = 0;\n        delete series.processedData;\n    }\n}\n/**\n * Exit from boost mode and restore non-boost properties.\n * @private\n * @function Highcharts.Series#exitBoost\n */\nfunction exitBoost(series) {\n    const boost = series.boost, chart = series.chart, chartBoost = chart.boost;\n    if (chartBoost?.markerGroup) {\n        chartBoost.markerGroup.destroy();\n        chartBoost.markerGroup = void 0;\n        for (const s of chart.series) {\n            s.markerGroup = void 0;\n            s.markerGroup = s.plotGroup('markerGroup', 'markers', 'visible', 1, chart.seriesGroup).addClass('highcharts-tracker');\n        }\n    }\n    // Reset instance properties and/or delete instance properties and go back\n    // to prototype\n    if (boost) {\n        (boost.altered || []).forEach((setting) => {\n            if (setting.own) {\n                series[setting.prop] = setting.val;\n            }\n            else {\n                // Revert to prototype\n                delete series[setting.prop];\n            }\n        });\n        // Clear previous run\n        if (boost.clear) {\n            boost.clear();\n        }\n    }\n    // #21106, clean up boost clipping on the series groups.\n    (chart.seriesGroup || series.group)?.clip();\n}\n/**\n * @private\n * @function Highcharts.Series#hasExtremes\n */\nfunction hasExtremes(series, checkX) {\n    const options = series.options, dataLength = series.dataTable.modified.rowCount, xAxis = series.xAxis && series.xAxis.options, yAxis = series.yAxis && series.yAxis.options, colorAxis = series.colorAxis && series.colorAxis.options;\n    return dataLength > (options.boostThreshold || Number.MAX_VALUE) &&\n        // Defined yAxis extremes\n        BoostSeries_isNumber(yAxis.min) &&\n        BoostSeries_isNumber(yAxis.max) &&\n        // Defined (and required) xAxis extremes\n        (!checkX ||\n            (BoostSeries_isNumber(xAxis.min) && BoostSeries_isNumber(xAxis.max))) &&\n        // Defined (e.g. heatmap) colorAxis extremes\n        (!colorAxis ||\n            (BoostSeries_isNumber(colorAxis.min) && BoostSeries_isNumber(colorAxis.max)));\n}\n/**\n * Used multiple times. In processData first on this.options.data, the second\n * time it runs the check again after processedXData is built.\n * If the data is going to be grouped, the series shouldn't be boosted.\n * @private\n */\nconst getSeriesBoosting = (series, data) => {\n    // Check if will be grouped.\n    if (series.forceCrop) {\n        return false;\n    }\n    return (BoostSeries_isChartSeriesBoosting(series.chart) ||\n        ((data ? data.length : 0) >=\n            (series.options.boostThreshold || Number.MAX_VALUE)));\n};\n/**\n * Extend series.destroy to also remove the fake k-d-tree points (#5137).\n * Normally this is handled by Series.destroy that calls Point.destroy,\n * but the fake search points are not registered like that.\n * @private\n */\nfunction onSeriesDestroy() {\n    const series = this, chart = series.chart;\n    if (chart.boost &&\n        chart.boost.markerGroup === series.markerGroup) {\n        series.markerGroup = null;\n    }\n    if (chart.hoverPoints) {\n        chart.hoverPoints = chart.hoverPoints.filter(function (point) {\n            return point.series === series;\n        });\n    }\n    if (chart.hoverPoint && chart.hoverPoint.series === series) {\n        chart.hoverPoint = null;\n    }\n}\n/**\n * @private\n */\nfunction onSeriesHide() {\n    const boost = this.boost;\n    if (boost && boost.canvas && boost.target) {\n        if (boost.wgl) {\n            boost.wgl.clear();\n        }\n        if (boost.clear) {\n            boost.clear();\n        }\n    }\n}\n/**\n * Performs the actual render if the renderer is\n * attached to the series.\n * @private\n */\nfunction renderIfNotSeriesBoosting(series) {\n    const boost = series.boost;\n    if (boost &&\n        boost.canvas &&\n        boost.target &&\n        boost.wgl &&\n        !BoostSeries_isChartSeriesBoosting(series.chart)) {\n        boost.wgl.render(series.chart);\n    }\n}\n/**\n * Return a full Point object based on the index.\n * The boost module uses stripped point objects for performance reasons.\n * @private\n * @param {object|Highcharts.Point} boostPoint\n *        A stripped-down point object\n * @return {Highcharts.Point}\n *         A Point object as per https://api.highcharts.com/highcharts#Point\n */\nfunction getPoint(series, boostPoint) {\n    const seriesOptions = series.options, xAxis = series.xAxis, PointClass = series.pointClass;\n    if (boostPoint instanceof PointClass) {\n        return boostPoint;\n    }\n    const isScatter = series.is('scatter'), xData = ((isScatter && series.getColumn('x', true).length ?\n        series.getColumn('x', true) :\n        void 0) ||\n        (series.getColumn('x').length ? series.getColumn('x') : void 0) ||\n        seriesOptions.xData ||\n        series.getColumn('x', true) ||\n        false), yData = (series.getColumn('y', true) ||\n        seriesOptions.yData ||\n        false), point = new PointClass(series, (isScatter && xData && yData) ?\n        [xData[boostPoint.i], yData[boostPoint.i]] :\n        (isArray(series.options.data) ? series.options.data : [])[boostPoint.i], xData ? xData[boostPoint.i] : void 0);\n    point.category = BoostSeries_pick(xAxis.categories ?\n        xAxis.categories[point.x] :\n        point.x, // @todo simplify\n    point.x);\n    point.key = point.name ?? point.category;\n    point.dist = boostPoint.dist;\n    point.distX = boostPoint.distX;\n    point.plotX = boostPoint.plotX;\n    point.plotY = boostPoint.plotY;\n    point.index = boostPoint.i;\n    point.percentage = boostPoint.percentage;\n    point.isInside = series.isPointInside(point);\n    return point;\n}\n/**\n * @private\n */\nfunction scatterProcessData(force) {\n    const series = this, { options, xAxis, yAxis } = series;\n    // Process only on changes\n    if (!series.isDirty &&\n        !xAxis.isDirty &&\n        !yAxis.isDirty &&\n        !force) {\n        return false;\n    }\n    // Required to get tick-based zoom ranges that take options into account\n    // like `minPadding`, `maxPadding`, `startOnTick`, `endOnTick`.\n    series.yAxis.setTickInterval();\n    const boostThreshold = options.boostThreshold || 0, cropThreshold = options.cropThreshold, xData = series.getColumn('x'), xExtremes = xAxis.getExtremes(), xMax = xExtremes.max ?? Number.MAX_VALUE, xMin = xExtremes.min ?? -Number.MAX_VALUE, yData = series.getColumn('y'), yExtremes = yAxis.getExtremes(), yMax = yExtremes.max ?? Number.MAX_VALUE, yMin = yExtremes.min ?? -Number.MAX_VALUE;\n    // Skip processing in non-boost zoom\n    if (!series.boosted &&\n        xAxis.old &&\n        yAxis.old &&\n        xMin >= (xAxis.old.min ?? -Number.MAX_VALUE) &&\n        xMax <= (xAxis.old.max ?? Number.MAX_VALUE) &&\n        yMin >= (yAxis.old.min ?? -Number.MAX_VALUE) &&\n        yMax <= (yAxis.old.max ?? Number.MAX_VALUE)) {\n        series.dataTable.modified.setColumns({\n            x: xData,\n            y: yData\n        });\n        return true;\n    }\n    // Without thresholds just assign data\n    const dataLength = series.dataTable.rowCount;\n    if (!boostThreshold ||\n        dataLength < boostThreshold ||\n        (cropThreshold &&\n            !series.forceCrop &&\n            !series.getExtremesFromAll &&\n            !options.getExtremesFromAll &&\n            dataLength < cropThreshold)) {\n        series.dataTable.modified.setColumns({\n            x: xData,\n            y: yData\n        });\n        return true;\n    }\n    // Filter unsorted scatter data for ranges\n    const processedData = [], processedXData = [], processedYData = [], xRangeNeeded = !(BoostSeries_isNumber(xExtremes.max) || BoostSeries_isNumber(xExtremes.min)), yRangeNeeded = !(BoostSeries_isNumber(yExtremes.max) || BoostSeries_isNumber(yExtremes.min));\n    let cropped = false, x, xDataMax = xData[0], xDataMin = xData[0], y, yDataMax = yData?.[0], yDataMin = yData?.[0];\n    for (let i = 0, iEnd = xData.length; i < iEnd; ++i) {\n        x = xData[i];\n        y = yData?.[i];\n        if (x >= xMin && x <= xMax &&\n            y >= yMin && y <= yMax) {\n            processedData.push({ x, y });\n            processedXData.push(x);\n            processedYData.push(y);\n            if (xRangeNeeded) {\n                xDataMax = Math.max(xDataMax, x);\n                xDataMin = Math.min(xDataMin, x);\n            }\n            if (yRangeNeeded) {\n                yDataMax = Math.max(yDataMax, y);\n                yDataMin = Math.min(yDataMin, y);\n            }\n        }\n        else {\n            cropped = true;\n        }\n    }\n    if (xRangeNeeded) {\n        xAxis.dataMax = Math.max(xDataMax, xAxis.dataMax || 0);\n        xAxis.dataMin = Math.min(xDataMin, xAxis.dataMin || 0);\n    }\n    if (yRangeNeeded) {\n        yAxis.dataMax = Math.max(yDataMax, yAxis.dataMax || 0);\n        yAxis.dataMin = Math.min(yDataMin, yAxis.dataMin || 0);\n    }\n    // Set properties as base processData\n    series.cropped = cropped;\n    series.cropStart = 0;\n    // For boosted points rendering\n    series.dataTable.modified.setColumns({\n        x: processedXData,\n        y: processedYData\n    });\n    if (!getSeriesBoosting(series, processedXData)) {\n        series.processedData = processedData; // For un-boosted points rendering\n    }\n    return true;\n}\n/**\n * @private\n * @function Highcharts.Series#renderCanvas\n */\nfunction seriesRenderCanvas() {\n    const options = this.options || {}, chart = this.chart, chartBoost = chart.boost, seriesBoost = this.boost, xAxis = this.xAxis, yAxis = this.yAxis, xData = options.xData || this.getColumn('x', true), yData = options.yData || this.getColumn('y', true), lowData = this.getColumn('low', true), highData = this.getColumn('high', true), rawData = this.processedData || options.data, xExtremes = xAxis.getExtremes(), \n    // Taking into account the offset of the min point #19497\n    xMin = xExtremes.min - (xAxis.minPointOffset || 0), xMax = xExtremes.max + (xAxis.minPointOffset || 0), yExtremes = yAxis.getExtremes(), yMin = yExtremes.min - (yAxis.minPointOffset || 0), yMax = yExtremes.max + (yAxis.minPointOffset || 0), pointTaken = {}, sampling = !!this.sampling, enableMouseTracking = options.enableMouseTracking, threshold = options.threshold, isRange = this.pointArrayMap &&\n        this.pointArrayMap.join(',') === 'low,high', isStacked = !!options.stacking, cropStart = this.cropStart || 0, requireSorting = this.requireSorting, useRaw = !xData, compareX = options.findNearestPointBy === 'x', xDataFull = ((this.getColumn('x', true).length ?\n        this.getColumn('x', true) :\n        void 0) ||\n        this.options.xData ||\n        this.getColumn('x', true)), lineWidth = BoostSeries_pick(options.lineWidth, 1);\n    let renderer = false, lastClientX, yBottom = yAxis.getThreshold(threshold), minVal, maxVal, minI, maxI;\n    // When touch-zooming or mouse-panning, re-rendering the canvas would not\n    // perform fast enough. Instead, let the axes redraw, but not the series.\n    // The series is scale-translated in an event handler for an approximate\n    // preview.\n    if (xAxis.isPanning || yAxis.isPanning) {\n        return;\n    }\n    // Get or create the renderer\n    renderer = createAndAttachRenderer(chart, this);\n    chart.boosted = true;\n    if (!this.visible) {\n        return;\n    }\n    // If we are zooming out from SVG mode, destroy the graphics\n    if (this.points || this.graph) {\n        destroyGraphics(this);\n    }\n    // If we're rendering per. series we should create the marker groups\n    // as usual.\n    if (!BoostSeries_isChartSeriesBoosting(chart)) {\n        // If all series were boosting, but are not anymore\n        // restore private markerGroup\n        if (this.markerGroup === chartBoost?.markerGroup) {\n            this.markerGroup = void 0;\n        }\n        this.markerGroup = this.plotGroup('markerGroup', 'markers', 'visible', 1, chart.seriesGroup).addClass('highcharts-tracker');\n    }\n    else {\n        // If series has a private markerGroup, remove that\n        // and use common markerGroup\n        if (this.markerGroup &&\n            this.markerGroup !== chartBoost?.markerGroup) {\n            this.markerGroup.destroy();\n        }\n        // Use a single group for the markers\n        this.markerGroup = chartBoost?.markerGroup;\n        // When switching from chart boosting mode, destroy redundant\n        // series boosting targets\n        if (seriesBoost && seriesBoost.target) {\n            this.renderTarget =\n                seriesBoost.target =\n                    seriesBoost.target.destroy();\n        }\n    }\n    const points = this.points = [], addKDPoint = (clientX, plotY, i, percentage) => {\n        const x = xDataFull ? xDataFull[cropStart + i] : false, pushPoint = (plotX) => {\n            if (chart.inverted) {\n                plotX = xAxis.len - plotX;\n                plotY = yAxis.len - plotY;\n            }\n            points.push({\n                destroy: noop,\n                x: x,\n                clientX: plotX,\n                plotX: plotX,\n                plotY: plotY,\n                i: cropStart + i,\n                percentage: percentage\n            });\n        };\n        // We need to do ceil on the clientX to make things\n        // snap to pixel values. The renderer will frequently\n        // draw stuff on \"sub-pixels\".\n        clientX = Math.ceil(clientX);\n        // Shaves off about 60ms compared to repeated concatenation\n        index = compareX ? clientX : clientX + ',' + plotY;\n        // The k-d tree requires series points.\n        // Reduce the amount of points, since the time to build the\n        // tree increases exponentially.\n        if (enableMouseTracking) {\n            if (!pointTaken[index]) {\n                pointTaken[index] = true;\n                pushPoint(clientX);\n            }\n            else if (x === xDataFull[xDataFull.length - 1]) {\n                // If the last point is on the same pixel as the last\n                // tracked point, swap them. (#18856)\n                points.length--;\n                pushPoint(clientX);\n            }\n        }\n    };\n    // Do not start building while drawing\n    this.buildKDTree = noop;\n    fireEvent(this, 'renderCanvas');\n    if (this.is('line') &&\n        lineWidth > 1 &&\n        seriesBoost?.target &&\n        chartBoost &&\n        !chartBoost.lineWidthFilter) {\n        chartBoost.lineWidthFilter = chart.renderer.definition({\n            tagName: 'filter',\n            children: [\n                {\n                    tagName: 'feMorphology',\n                    attributes: {\n                        operator: 'dilate',\n                        radius: 0.25 * lineWidth\n                    }\n                }\n            ],\n            attributes: { id: 'linewidth' }\n        });\n        seriesBoost.target.attr({\n            filter: 'url(#linewidth)'\n        });\n    }\n    if (renderer) {\n        allocateIfNotSeriesBoosting(renderer, this);\n        renderer.pushSeries(this);\n        // Perform the actual renderer if we're on series level\n        renderIfNotSeriesBoosting(this);\n    }\n    /**\n     * This builds the KD-tree\n     * @private\n     */\n    function processPoint(d, i) {\n        const chartDestroyed = typeof chart.index === 'undefined';\n        let x, y, clientX, plotY, percentage, low = false, isYInside = true;\n        if (!defined(d)) {\n            return true;\n        }\n        if (!chartDestroyed) {\n            if (useRaw) {\n                x = d[0];\n                y = d[1];\n            }\n            else {\n                x = d;\n                y = yData?.[i];\n            }\n            // Resolve low and high for range series\n            if (isRange) {\n                if (useRaw) {\n                    y = d.slice(1, 3);\n                }\n                low = lowData[i];\n                y = highData[i];\n            }\n            else if (isStacked) {\n                x = d.x;\n                y = d.stackY;\n                low = y - d.y;\n                percentage = d.percentage;\n            }\n            // Optimize for scatter zooming\n            if (!requireSorting) {\n                isYInside = (y || 0) >= yMin && y <= yMax;\n            }\n            if (y !== null && x >= xMin && x <= xMax && isYInside) {\n                clientX = xAxis.toPixels(x, true);\n                if (sampling) {\n                    if (typeof minI === 'undefined' ||\n                        clientX === lastClientX) {\n                        if (!isRange) {\n                            low = y;\n                        }\n                        if (typeof maxI === 'undefined' ||\n                            y > maxVal) {\n                            maxVal = y;\n                            maxI = i;\n                        }\n                        if (typeof minI === 'undefined' ||\n                            low < minVal) {\n                            minVal = low;\n                            minI = i;\n                        }\n                    }\n                    // Add points and reset\n                    if (!compareX || clientX !== lastClientX) {\n                        // `maxI` is number too:\n                        if (typeof minI !== 'undefined') {\n                            plotY =\n                                yAxis.toPixels(maxVal, true);\n                            yBottom =\n                                yAxis.toPixels(minVal, true);\n                            addKDPoint(clientX, plotY, maxI, percentage);\n                            if (yBottom !== plotY) {\n                                addKDPoint(clientX, yBottom, minI, percentage);\n                            }\n                        }\n                        minI = maxI = void 0;\n                        lastClientX = clientX;\n                    }\n                }\n                else {\n                    plotY = Math.ceil(yAxis.toPixels(y, true));\n                    addKDPoint(clientX, plotY, i, percentage);\n                }\n            }\n        }\n        return !chartDestroyed;\n    }\n    /**\n     * @private\n     */\n    const boostOptions = renderer.settings, doneProcessing = () => {\n        fireEvent(this, 'renderedCanvas');\n        // Go back to prototype, ready to build\n        delete this.buildKDTree;\n        // Check that options exist, as async processing\n        // could mean the series is removed at this point (#19895)\n        if (this.options) {\n            this.buildKDTree();\n        }\n        if (boostOptions.debug.timeKDTree) {\n            console.timeEnd('kd tree building'); // eslint-disable-line no-console\n        }\n    };\n    // Loop over the points to build the k-d tree - skip this if\n    // exporting\n    if (!chart.renderer.forExport) {\n        if (boostOptions.debug.timeKDTree) {\n            console.time('kd tree building'); // eslint-disable-line no-console\n        }\n        eachAsync(isStacked ?\n            this.data.slice(cropStart) :\n            (xData || rawData), processPoint, doneProcessing);\n    }\n}\n/**\n * Used for treemap|heatmap.drawPoints\n * @private\n */\nfunction wrapSeriesDrawPoints(proceed) {\n    let enabled = true;\n    if (this.chart.options && this.chart.options.boost) {\n        enabled = typeof this.chart.options.boost.enabled === 'undefined' ?\n            true :\n            this.chart.options.boost.enabled;\n    }\n    if (!enabled || !this.boosted) {\n        return proceed.call(this);\n    }\n    this.chart.boosted = true;\n    // Make sure we have a valid OGL context\n    const renderer = createAndAttachRenderer(this.chart, this);\n    if (renderer) {\n        allocateIfNotSeriesBoosting(renderer, this);\n        renderer.pushSeries(this);\n    }\n    renderIfNotSeriesBoosting(this);\n}\n/**\n * Override a bunch of methods the same way. If the number of points is\n * below the threshold, run the original method. If not, check for a\n * canvas version or do nothing.\n *\n * Note that we're not overriding any of these for heatmaps.\n */\nfunction wrapSeriesFunctions(seriesProto, seriesTypes, method) {\n    /**\n     * @private\n     */\n    function branch(proceed) {\n        const letItPass = this.options.stacking &&\n            (method === 'translate' || method === 'generatePoints');\n        if (!this.boosted ||\n            letItPass ||\n            !boostEnabled(this.chart) ||\n            this.type === 'heatmap' ||\n            this.type === 'treemap' ||\n            !Boost_BoostableMap[this.type] ||\n            this.options.boostThreshold === 0) {\n            proceed.call(this);\n            // Run canvas version of method, like renderCanvas(), if it exists\n        }\n        else if (method === 'render' && this.renderCanvas) {\n            this.renderCanvas();\n        }\n    }\n    wrap(seriesProto, method, branch);\n    // Special case for some types, when translate method is already wrapped\n    if (method === 'translate') {\n        for (const type of [\n            'column',\n            'arearange',\n            'columnrange',\n            'heatmap',\n            'treemap'\n        ]) {\n            if (seriesTypes[type]) {\n                wrap(seriesTypes[type].prototype, method, branch);\n            }\n        }\n    }\n}\n/**\n * Do not compute extremes when min and max are set. If we use this in the\n * core, we can add the hook to hasExtremes to the methods directly.\n * @private\n */\nfunction wrapSeriesGetExtremes(proceed) {\n    if (this.boosted) {\n        if (hasExtremes(this)) {\n            return {};\n        }\n        if (this.xAxis.isPanning || this.yAxis.isPanning) {\n            // Do not re-compute the extremes during panning, because looping\n            // the data is expensive. The `this` contains the `dataMin` and\n            // `dataMax` to use.\n            return this;\n        }\n    }\n    return proceed.apply(this, [].slice.call(arguments, 1));\n}\n/**\n * If the series is a heatmap or treemap, or if the series is not boosting\n * do the default behaviour. Otherwise, process if the series has no\n * extremes.\n * @private\n */\nfunction wrapSeriesProcessData(proceed) {\n    let dataToMeasure = this.options.data;\n    if (boostEnabled(this.chart) && Boost_BoostableMap[this.type]) {\n        const series = this, \n        // Flag for code that should run for ScatterSeries and its\n        // subclasses, apart from the enlisted exceptions.\n        isScatter = series.is('scatter') &&\n            !series.is('bubble') &&\n            !series.is('treemap') &&\n            !series.is('heatmap');\n        // If there are no extremes given in the options, we also need to\n        // process the data to read the data extremes. If this is a heatmap,\n        // do default behaviour.\n        if (\n        // First pass with options.data:\n        !getSeriesBoosting(series, dataToMeasure) ||\n            isScatter ||\n            series.is('treemap') ||\n            // Use processedYData for the stack (#7481):\n            series.options.stacking ||\n            !hasExtremes(series, true)) {\n            // Do nothing until the panning stops\n            if (series.boosted && (series.xAxis?.isPanning || series.yAxis?.isPanning)) {\n                return;\n            }\n            // Extra check for zoomed scatter data\n            if (isScatter && !series.yAxis.treeGrid) {\n                scatterProcessData.call(series, arguments[1]);\n            }\n            else {\n                proceed.apply(series, [].slice.call(arguments, 1));\n            }\n            dataToMeasure = series.getColumn('x', true);\n        }\n        // Set the isBoosting flag, second pass with processedXData to\n        // see if we have zoomed.\n        series.boosted = getSeriesBoosting(series, dataToMeasure);\n        // Enter or exit boost mode\n        if (series.boosted) {\n            // Force turbo-mode:\n            let firstPoint;\n            if (series.options.data?.length) {\n                firstPoint = series.getFirstValidPoint(series.options.data);\n                if (!BoostSeries_isNumber(firstPoint) &&\n                    !isArray(firstPoint) &&\n                    !series.is('treemap')) {\n                    BoostSeries_error(12, false, series.chart);\n                }\n            }\n            enterBoost(series);\n        }\n        else {\n            exitBoost(series);\n        }\n        // The series type is not boostable\n    }\n    else {\n        proceed.apply(this, [].slice.call(arguments, 1));\n    }\n}\n/**\n * Return a point instance from the k-d-tree\n * @private\n */\nfunction wrapSeriesSearchPoint(proceed) {\n    const result = proceed.apply(this, [].slice.call(arguments, 1));\n    if (this.boost && result) {\n        return this.boost.getPoint(result);\n    }\n    return result;\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst BoostSeries = {\n    compose: BoostSeries_compose,\n    destroyGraphics,\n    eachAsync,\n    getPoint\n};\n/* harmony default export */ const Boost_BoostSeries = (BoostSeries);\n\n;// ./code/es-modules/Extensions/BoostCanvas.js\n/* *\n *\n *  License: www.highcharts.com/license\n *  Author: Torstein Honsi, Christer Vasseng\n *\n *  This module serves as a fallback for the Boost module in IE9 and IE10. Newer\n *  browsers support WebGL which is faster.\n *\n *  It is recommended to include this module in conditional comments targeting\n *  IE9 and IE10.\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { getBoostClipRect: BoostCanvas_getBoostClipRect, isChartSeriesBoosting: BoostCanvas_isChartSeriesBoosting } = Boost_BoostChart;\n\nconst { destroyGraphics: BoostCanvas_destroyGraphics } = Boost_BoostSeries;\n\nconst { parse: BoostCanvas_color } = (highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default());\n\nconst { doc: BoostCanvas_doc, noop: BoostCanvas_noop } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent: BoostCanvas_addEvent, fireEvent: BoostCanvas_fireEvent, isNumber: BoostCanvas_isNumber, merge: BoostCanvas_merge, pick: BoostCanvas_pick, wrap: BoostCanvas_wrap } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Namespace\n *\n * */\nvar BoostCanvas;\n(function (BoostCanvas) {\n    /* *\n     *\n     *  Constants\n     *\n     * */\n    // Use a blank pixel for clearing canvas (#17182)\n    const b64BlankPixel = ('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAw' +\n        'CAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=');\n    const CHUNK_SIZE = 50000;\n    /* *\n     *\n     *  Variables\n     *\n     * */\n    let ChartConstructor;\n    let destroyLoadingDiv;\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    function areaCvsDrawPoint(ctx, clientX, plotY, yBottom, lastPoint) {\n        if (lastPoint && clientX !== lastPoint.clientX) {\n            ctx.moveTo(lastPoint.clientX, lastPoint.yBottom);\n            ctx.lineTo(lastPoint.clientX, lastPoint.plotY);\n            ctx.lineTo(clientX, plotY);\n            ctx.lineTo(clientX, yBottom);\n        }\n    }\n    /**\n     * @private\n     */\n    function bubbleCvsMarkerCircle(ctx, clientX, plotY, r, i) {\n        ctx.moveTo(clientX, plotY);\n        ctx.arc(clientX, plotY, this.radii && this.radii[i], 0, 2 * Math.PI, false);\n    }\n    /**\n     * @private\n     */\n    function columnCvsDrawPoint(ctx, clientX, plotY, yBottom) {\n        ctx.rect(clientX - 1, plotY, 1, yBottom - plotY);\n    }\n    /**\n     * @private\n     */\n    function compose(ChartClass, SeriesClass, seriesTypes) {\n        const seriesProto = SeriesClass.prototype;\n        if (!seriesProto.renderCanvas) {\n            const { area: AreaSeries, bubble: BubbleSeries, column: ColumnSeries, heatmap: HeatmapSeries, scatter: ScatterSeries } = seriesTypes;\n            ChartConstructor = ChartClass;\n            ChartClass.prototype.callbacks.push((chart) => {\n                BoostCanvas_addEvent(chart, 'predraw', onChartClear);\n                BoostCanvas_addEvent(chart, 'render', onChartCanvasToSVG);\n            });\n            seriesProto.canvasToSVG = seriesCanvasToSVG;\n            seriesProto.cvsLineTo = seriesCvsLineTo;\n            seriesProto.getContext = seriesGetContext;\n            seriesProto.renderCanvas = seriesRenderCanvas;\n            if (AreaSeries) {\n                const areaProto = AreaSeries.prototype;\n                areaProto.cvsDrawPoint = areaCvsDrawPoint;\n                areaProto.fill = true;\n                areaProto.fillOpacity = true;\n                areaProto.sampling = true;\n            }\n            if (BubbleSeries) {\n                const bubbleProto = BubbleSeries.prototype;\n                bubbleProto.cvsMarkerCircle = bubbleCvsMarkerCircle;\n                bubbleProto.cvsStrokeBatch = 1;\n            }\n            if (ColumnSeries) {\n                const columnProto = ColumnSeries.prototype;\n                columnProto.cvsDrawPoint = columnCvsDrawPoint;\n                columnProto.fill = true;\n                columnProto.sampling = true;\n            }\n            if (HeatmapSeries) {\n                const heatmapProto = HeatmapSeries.prototype;\n                BoostCanvas_wrap(heatmapProto, 'drawPoints', wrapHeatmapDrawPoints);\n            }\n            if (ScatterSeries) {\n                const scatterProto = ScatterSeries.prototype;\n                scatterProto.cvsMarkerCircle = scatterCvsMarkerCircle;\n                scatterProto.cvsMarkerSquare = scatterCvsMarkerSquare;\n                scatterProto.fill = true;\n            }\n        }\n    }\n    BoostCanvas.compose = compose;\n    /**\n     * @private\n     */\n    function onChartCanvasToSVG() {\n        if (this.boost && this.boost.copy) {\n            this.boost.copy();\n        }\n    }\n    /**\n     * @private\n     */\n    function onChartClear() {\n        const boost = this.boost || {};\n        if (boost.target) {\n            boost.target.attr({ href: b64BlankPixel });\n        }\n        if (boost.canvas) {\n            boost.canvas.getContext('2d').clearRect(0, 0, boost.canvas.width, boost.canvas.height);\n        }\n    }\n    /**\n     * Draw the canvas image inside an SVG image\n     *\n     * @private\n     * @function Highcharts.Series#canvasToSVG\n     */\n    function seriesCanvasToSVG() {\n        if (!BoostCanvas_isChartSeriesBoosting(this.chart)) {\n            if (this.boost && this.boost.copy) {\n                this.boost.copy();\n            }\n            else if (this.chart.boost && this.chart.boost.copy) {\n                this.chart.boost.copy();\n            }\n        }\n        else if (this.boost && this.boost.clear) {\n            this.boost.clear();\n        }\n    }\n    /**\n     * @private\n     */\n    function seriesCvsLineTo(ctx, clientX, plotY) {\n        ctx.lineTo(clientX, plotY);\n    }\n    /**\n     * Create a hidden canvas to draw the graph on. The contents is later\n     * copied over to an SVG image element.\n     *\n     * @private\n     * @function Highcharts.Series#getContext\n     */\n    function seriesGetContext() {\n        const chart = this.chart, target = BoostCanvas_isChartSeriesBoosting(chart) ? chart : this, targetGroup = (target === chart ?\n            chart.seriesGroup :\n            chart.seriesGroup || this.group), width = chart.chartWidth, height = chart.chartHeight, swapXY = function (proceed, x, y, a, b, c, d) {\n            proceed.call(this, y, x, a, b, c, d);\n        };\n        let ctx;\n        const boost = target.boost =\n            target.boost ||\n                {};\n        ctx = boost.targetCtx;\n        if (!boost.canvas) {\n            boost.canvas = BoostCanvas_doc.createElement('canvas');\n            boost.target = chart.renderer\n                .image('', 0, 0, width, height)\n                .addClass('highcharts-boost-canvas')\n                .add(targetGroup);\n            ctx = boost.targetCtx =\n                boost.canvas.getContext('2d');\n            if (chart.inverted) {\n                ['moveTo', 'lineTo', 'rect', 'arc'].forEach((fn) => {\n                    BoostCanvas_wrap(ctx, fn, swapXY);\n                });\n            }\n            boost.copy = function () {\n                boost.target.attr({\n                    href: boost.canvas.toDataURL('image/png')\n                });\n            };\n            boost.clear = function () {\n                ctx.clearRect(0, 0, boost.canvas.width, boost.canvas.height);\n                if (target === boost.target) {\n                    boost.target.attr({\n                        href: b64BlankPixel\n                    });\n                }\n            };\n            boost.clipRect = chart.renderer.clipRect();\n            boost.target.clip(boost.clipRect);\n        }\n        else if (!(target instanceof ChartConstructor)) {\n            ///  ctx.clearRect(0, 0, width, height);\n        }\n        if (boost.canvas.width !== width) {\n            boost.canvas.width = width;\n        }\n        if (boost.canvas.height !== height) {\n            boost.canvas.height = height;\n        }\n        boost.target.attr({\n            x: 0,\n            y: 0,\n            width: width,\n            height: height,\n            style: 'pointer-events: none',\n            href: b64BlankPixel\n        });\n        if (boost.clipRect) {\n            boost.clipRect.attr(BoostCanvas_getBoostClipRect(chart, target));\n        }\n        return ctx;\n    }\n    /**\n     * @private\n     */\n    function seriesRenderCanvas() {\n        const series = this, options = series.options, chart = series.chart, xAxis = series.xAxis, yAxis = series.yAxis, activeBoostSettings = chart.options.boost || {}, boostSettings = {\n            timeRendering: activeBoostSettings.timeRendering || false,\n            timeSeriesProcessing: activeBoostSettings.timeSeriesProcessing || false,\n            timeSetup: activeBoostSettings.timeSetup || false\n        }, xData = series.getColumn('x', true), yData = series.getColumn('y', true), rawData = options.data, xExtremes = xAxis.getExtremes(), xMin = xExtremes.min, xMax = xExtremes.max, yExtremes = yAxis.getExtremes(), yMin = yExtremes.min, yMax = yExtremes.max, pointTaken = {}, sampling = !!series.sampling, r = options.marker && options.marker.radius, strokeBatch = series.cvsStrokeBatch || 1000, enableMouseTracking = options.enableMouseTracking, threshold = options.threshold, hasThreshold = BoostCanvas_isNumber(threshold), translatedThreshold = yAxis.getThreshold(threshold), doFill = series.fill, isRange = (series.pointArrayMap &&\n            series.pointArrayMap.join(',') === 'low,high'), isStacked = !!options.stacking, cropStart = series.cropStart || 0, loadingOptions = chart.options.loading, requireSorting = series.requireSorting, connectNulls = options.connectNulls, useRaw = !xData, sdata = (isStacked ?\n            series.data :\n            (xData || rawData)), fillColor = (series.fillOpacity ?\n            highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default().parse(series.color).setOpacity(BoostCanvas_pick(options.fillOpacity, 0.75)).get() :\n            series.color), compareX = options.findNearestPointBy === 'x', boost = this.boost || {}, cvsDrawPoint = series.cvsDrawPoint, cvsLineTo = options.lineWidth ? series.cvsLineTo : void 0, cvsMarker = (r && r <= 1 ?\n            series.cvsMarkerSquare :\n            series.cvsMarkerCircle);\n        if (boost.target) {\n            boost.target.attr({ href: b64BlankPixel });\n        }\n        // If we are zooming out from SVG mode, destroy the graphics\n        if (series.points || series.graph) {\n            BoostCanvas_destroyGraphics(series);\n        }\n        // The group\n        series.plotGroup('group', 'series', series.visible ? 'visible' : 'hidden', options.zIndex, chart.seriesGroup);\n        series.markerGroup = series.group;\n        BoostCanvas_addEvent(series, 'destroy', function () {\n            // Prevent destroy twice\n            series.markerGroup = null;\n        });\n        const points = this.points = [], ctx = this.getContext();\n        series.buildKDTree = BoostCanvas_noop; // Do not start building while drawing\n        if (boost.clear) {\n            boost.clear();\n        }\n        // If (series.canvas) {\n        //     ctx.clearRect(\n        //         0,\n        //         0,\n        //         series.canvas.width,\n        //         series.canvas.height\n        //     );\n        // }\n        if (!series.visible) {\n            return;\n        }\n        // Display a loading indicator\n        if (rawData.length > 99999) {\n            chart.options.loading = BoostCanvas_merge(loadingOptions, {\n                labelStyle: {\n                    backgroundColor: BoostCanvas_color(\"#ffffff\" /* Palette.backgroundColor */).setOpacity(0.75).get(),\n                    padding: '1em',\n                    borderRadius: '0.5em'\n                },\n                style: {\n                    backgroundColor: 'none',\n                    opacity: 1\n                }\n            });\n            highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default().clearTimeout(destroyLoadingDiv);\n            chart.showLoading('Drawing...');\n            chart.options.loading = loadingOptions; // Reset\n        }\n        if (boostSettings.timeRendering) {\n            console.time('canvas rendering'); // eslint-disable-line no-console\n        }\n        // Loop variables\n        let c = 0, lastClientX, lastPoint, yBottom = translatedThreshold, wasNull, minVal, maxVal, minI, maxI, index;\n        // Loop helpers\n        const stroke = function () {\n            if (doFill) {\n                ctx.fillStyle = fillColor;\n                ctx.fill();\n            }\n            else {\n                ctx.strokeStyle = series.color;\n                ctx.lineWidth = options.lineWidth;\n                ctx.stroke();\n            }\n        }, \n        //\n        drawPoint = function (clientX, plotY, yBottom, i) {\n            if (c === 0) {\n                ctx.beginPath();\n                if (cvsLineTo) {\n                    ctx.lineJoin = 'round';\n                }\n            }\n            if (chart.scroller &&\n                series.options.className ===\n                    'highcharts-navigator-series') {\n                plotY += chart.scroller.top;\n                if (yBottom) {\n                    yBottom += chart.scroller.top;\n                }\n            }\n            else {\n                plotY += chart.plotTop;\n            }\n            clientX += chart.plotLeft;\n            if (wasNull) {\n                ctx.moveTo(clientX, plotY);\n            }\n            else {\n                if (cvsDrawPoint) {\n                    cvsDrawPoint(ctx, clientX, plotY, yBottom, lastPoint);\n                }\n                else if (cvsLineTo) {\n                    cvsLineTo(ctx, clientX, plotY);\n                }\n                else if (cvsMarker) {\n                    cvsMarker.call(series, ctx, clientX, plotY, r, i);\n                }\n            }\n            // We need to stroke the line for every 1000 pixels. It will\n            // crash the browser memory use if we stroke too\n            // infrequently.\n            c = c + 1;\n            if (c === strokeBatch) {\n                stroke();\n                c = 0;\n            }\n            // Area charts need to keep track of the last point\n            lastPoint = {\n                clientX: clientX,\n                plotY: plotY,\n                yBottom: yBottom\n            };\n        }, xDataFull = ((this.getColumn('x').length ? this.getColumn('x') : void 0) ||\n            this.options.xData ||\n            (this.getColumn('x', true).length ?\n                this.getColumn('x', true) :\n                false)), \n        //\n        addKDPoint = function (clientX, plotY, i) {\n            // Shaves off about 60ms compared to repeated concatenation\n            index = compareX ? clientX : clientX + ',' + plotY;\n            // The k-d tree requires series points.\n            // Reduce the amount of points, since the time to build the\n            // tree increases exponentially.\n            if (enableMouseTracking && !pointTaken[index]) {\n                pointTaken[index] = true;\n                if (chart.inverted) {\n                    clientX = xAxis.len - clientX;\n                    plotY = yAxis.len - plotY;\n                }\n                points.push({\n                    x: xDataFull ?\n                        xDataFull[cropStart + i] :\n                        false,\n                    clientX: clientX,\n                    plotX: clientX,\n                    plotY: plotY,\n                    i: cropStart + i\n                });\n            }\n        };\n        // Loop over the points\n        Boost_BoostSeries.eachAsync(sdata, (d, i) => {\n            const chartDestroyed = typeof chart.index === 'undefined';\n            let x, y, clientX, plotY, isNull, low, isNextInside = false, isPrevInside = false, nx = NaN, px = NaN, isYInside = true;\n            if (!chartDestroyed) {\n                if (useRaw) {\n                    x = d[0];\n                    y = d[1];\n                    if (sdata[i + 1]) {\n                        nx = sdata[i + 1][0];\n                    }\n                    if (sdata[i - 1]) {\n                        px = sdata[i - 1][0];\n                    }\n                }\n                else {\n                    x = d;\n                    y = yData[i];\n                    if (sdata[i + 1]) {\n                        nx = sdata[i + 1];\n                    }\n                    if (sdata[i - 1]) {\n                        px = sdata[i - 1];\n                    }\n                }\n                if (nx && nx >= xMin && nx <= xMax) {\n                    isNextInside = true;\n                }\n                if (px && px >= xMin && px <= xMax) {\n                    isPrevInside = true;\n                }\n                // Resolve low and high for range series\n                if (isRange) {\n                    if (useRaw) {\n                        y = d.slice(1, 3);\n                    }\n                    low = y[0];\n                    y = y[1];\n                }\n                else if (isStacked) {\n                    x = d.x;\n                    y = d.stackY;\n                    low = y - d.y;\n                }\n                isNull = y === null;\n                // Optimize for scatter zooming\n                if (!requireSorting) {\n                    isYInside = y >= yMin && y <= yMax;\n                }\n                if (!isNull &&\n                    ((x >= xMin && x <= xMax && isYInside) ||\n                        (isNextInside || isPrevInside))) {\n                    clientX = Math.round(xAxis.toPixels(x, true));\n                    if (sampling) {\n                        if (typeof minI === 'undefined' ||\n                            clientX === lastClientX) {\n                            if (!isRange) {\n                                low = y;\n                            }\n                            if (typeof maxI === 'undefined' || y > maxVal) {\n                                maxVal = y;\n                                maxI = i;\n                            }\n                            if (typeof minI === 'undefined' ||\n                                low < minVal) {\n                                minVal = low;\n                                minI = i;\n                            }\n                        }\n                        // Add points and reset\n                        if (clientX !== lastClientX) {\n                            // `maxI` also a number:\n                            if (typeof minI !== 'undefined') {\n                                plotY = yAxis.toPixels(maxVal, true);\n                                yBottom = yAxis.toPixels(minVal, true);\n                                drawPoint(clientX, hasThreshold ?\n                                    Math.min(plotY, translatedThreshold) : plotY, hasThreshold ?\n                                    Math.max(yBottom, translatedThreshold) : yBottom, i);\n                                addKDPoint(clientX, plotY, maxI);\n                                if (yBottom !== plotY) {\n                                    addKDPoint(clientX, yBottom, minI);\n                                }\n                            }\n                            minI = maxI = void 0;\n                            lastClientX = clientX;\n                        }\n                    }\n                    else {\n                        plotY = Math.round(yAxis.toPixels(y, true));\n                        drawPoint(clientX, plotY, yBottom, i);\n                        addKDPoint(clientX, plotY, i);\n                    }\n                }\n                wasNull = isNull && !connectNulls;\n                if (i % CHUNK_SIZE === 0) {\n                    if (series.boost &&\n                        series.boost.copy) {\n                        series.boost.copy();\n                    }\n                    else if (series.chart.boost &&\n                        series.chart.boost.copy) {\n                        series.chart.boost.copy();\n                    }\n                }\n            }\n            return !chartDestroyed;\n        }, function () {\n            const loadingDiv = chart.loadingDiv, loadingShown = chart.loadingShown;\n            stroke();\n            // If (series.boostCopy || series.chart.boostCopy) {\n            //     (series.boostCopy || series.chart.boostCopy)();\n            // }\n            series.canvasToSVG();\n            if (boostSettings.timeRendering) {\n                console.timeEnd('canvas rendering'); // eslint-disable-line no-console\n            }\n            BoostCanvas_fireEvent(series, 'renderedCanvas');\n            // Do not use chart.hideLoading, as it runs JS animation and\n            // will be blocked by buildKDTree. CSS animation looks good, but\n            // then it must be deleted in timeout. If we add the module to\n            // core, change hideLoading so we can skip this block.\n            if (loadingShown) {\n                loadingDiv.style.transition = 'opacity 250ms';\n                loadingDiv.opacity = 0;\n                chart.loadingShown = false;\n                destroyLoadingDiv = setTimeout(function () {\n                    if (loadingDiv.parentNode) { // In exporting it is falsy\n                        loadingDiv.parentNode.removeChild(loadingDiv);\n                    }\n                    chart.loadingDiv = chart.loadingSpan = null;\n                }, 250);\n            }\n            // Go back to prototype, ready to build\n            delete series.buildKDTree;\n            series.buildKDTree();\n            // Don't do async on export, the exportChart, getSVGForExport and\n            // getSVG methods are not chained for it.\n        }, chart.renderer.forExport ? Number.MAX_VALUE : void 0);\n    }\n    /**\n     * @private\n     */\n    function scatterCvsMarkerCircle(ctx, clientX, plotY, r) {\n        ctx.moveTo(clientX, plotY);\n        ctx.arc(clientX, plotY, r, 0, 2 * Math.PI, false);\n    }\n    /**\n     * Rect is twice as fast as arc, should be used for small markers.\n     * @private\n     */\n    function scatterCvsMarkerSquare(ctx, clientX, plotY, r) {\n        ctx.rect(clientX - r, plotY - r, r * 2, r * 2);\n    }\n    /**\n     * @private\n     */\n    function wrapHeatmapDrawPoints() {\n        const chart = this.chart, ctx = this.getContext(), inverted = this.chart.inverted, xAxis = this.xAxis, yAxis = this.yAxis;\n        if (ctx) {\n            // Draw the columns\n            this.points.forEach((point) => {\n                const plotY = point.plotY;\n                let pointAttr;\n                if (typeof plotY !== 'undefined' &&\n                    !isNaN(plotY) &&\n                    point.y !== null &&\n                    ctx) {\n                    const { x = 0, y = 0, width = 0, height = 0 } = point.shapeArgs || {};\n                    if (!chart.styledMode) {\n                        pointAttr = point.series.pointAttribs(point);\n                    }\n                    else {\n                        pointAttr = point.series.colorAttribs(point);\n                    }\n                    ctx.fillStyle = pointAttr.fill;\n                    if (inverted) {\n                        ctx.fillRect(yAxis.len - y + xAxis.left, xAxis.len - x + yAxis.top, -height, -width);\n                    }\n                    else {\n                        ctx.fillRect(x + xAxis.left, y + yAxis.top, width, height);\n                    }\n                }\n            });\n            this.canvasToSVG();\n        }\n        else {\n            this.chart.showLoading('Your browser doesn\\'t support HTML5 canvas, <br>' +\n                'please use a modern browser');\n        }\n    }\n})(BoostCanvas || (BoostCanvas = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Extensions_BoostCanvas = (BoostCanvas);\n\n;// ./code/es-modules/masters/modules/boost-canvas.src.js\n\n\n\n\nconst G = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/**\n * Initialize the canvas boost.\n *\n * @function Highcharts.initCanvasBoost\n */\nG.initCanvasBoost = function () {\n    Extensions_BoostCanvas.compose(G.Chart, G.Series, G.seriesTypes);\n};\n/* harmony default export */ const boost_canvas_src = ((highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()));\n\n__webpack_exports__ = __webpack_exports__[\"default\"];\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});"],"names":["root","factory","exports","module","define","amd","amd1","window","__WEBPACK_EXTERNAL_MODULE__944__","__WEBPACK_EXTERNAL_MODULE__620__","index","mainCanvas","BoostCanvas","__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__","boost_canvas_src","highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_","highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default","Boost_Boostables","BoostableMap","forEach","item","composed","addEvent","pick","pushUnique","isChartSeriesBoosting","chart","allSeries","series","boost","boostOptions","options","threshold","seriesThreshold","length","allowBoostForce","allowForce","axis","xAxis","min","Infinity","dataMin","max","dataMax","forceChartBoost","canBoostCount","needBoostCount","seriesOptions","boostThreshold","visible","type","Boost_BoostableMap","patientMax","args","r","Number","MAX_VALUE","t","getColumn","data","points","onChartCallback","canvasToSVG","wgl","render","boosted","axes","some","isPanning","clear","canvas","allocateBuffer","markerGroup","yAxis","translate","pos","order","prevX","prevY","pointer","e","hoverPoint","inverted","s","halo","hide","Boost_BoostChart","compose","ChartClass","wglMode","callbacks","push","getBoostClipRect","target","navigator","clipBox","x","plotLeft","y","plotTop","width","plotWidth","height","plotHeight","top","opposite","left","getClipBox","lateral","verticalAxes","Math","len","highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_","highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default","Boost_WGLDrawMode","clamp","error","WGLShader_pick","Boost_WGLShader","constructor","gl","errors","uLocations","createShader","bind","shaderProgram","useProgram","v","stringToProgram","f","uloc","getUniformLocation","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","bindAttribLocation","pUniform","psUniform","fcUniform","isBubbleUniform","bubbleSizeAbsUniform","bubbleSizeAreaUniform","uSamplerUniform","skipTranslationUniform","isCircleUniform","isInverted","getProgramInfoLog","handleErrors","join","str","shader","VERTEX_SHADER","FRAGMENT_SHADER","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","destroy","deleteProgram","fillColorUniform","getProgram","pointSizeUniform","perspectiveUniform","reset","uniform1i","setBubbleUniforms","zCalcMin","zCalcMax","pixelRatio","zMin","zMax","is","pxSizes","getPxExtremes","displayNegative","zThreshold","sizeBy","sizeByAbsoluteValue","setUniform","minPxSize","maxPxSize","setColor","color","uniform4f","setDrawAsCircle","flag","setInverted","setPMatrix","m","uniformMatrix4fv","setPointSize","p","uniform1f","setSkipTranslation","setTexture","texture","name","val","u","Boost_WGLVertexBuffer","dataComponents","buffer","iterator","preAllocated","vertAttribute","components","allocate","size","Float32Array","vertexAttribPointer","FLOAT","build","dataIn","attrib","farray","deleteBuffer","createBuffer","bindBuffer","ARRAY_BUFFER","bufferData","STATIC_DRAW","getAttribLocation","enableVertexAttribArray","b","from","to","drawMode","drawArrays","parse","doc","win","isNumber","isObject","merge","objectEach","WGLRenderer_pick","asBar","asCircle","contexts","WGLRenderer","orthoMatrix","seriesPointCount","isStacked","xData","stacking","postRenderCallback","isInited","markerData","textureHandles","settings","pointSize","lineWidth","fillColor","useAlpha","usePreallocated","useGPUTranslations","debug","timeRendering","timeSeriesProcessing","timeSetup","timeBufferCopy","timeKDTree","showSkipSummary","getPixelRatio","devicePixelRatio","setOptions","vbuffer","allocateBufferForSingleSeries","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","pushSeriesData","inst","isRange","pointArrayMap","sorted","rawData","xExtremes","getExtremes","xMin","minPointOffset","xMax","yExtremes","yMin","yMax","yData","zData","useRaw","connectNulls","sdata","closestLeft","closestRight","chartDestroyed","drawAsBar","zoneAxis","zones","lastX","lastY","minVal","scolor","skipped","hadPoints","z","i","px","nx","low","nextInside","prevInside","pcolor","isXInside","isYInside","firstPoint","zoneColors","zoneDefColor","gapSize","vlen","boostData","gapUnit","closestPointRange","zone","zoneColor","rgba","value","pointAttribs","fill","closestPointRangePx","pushColor","colorData","vertice","checkTreshold","skipTranslation","closeSegment","segments","beginSegment","pushRect","w","h","node","levelDynamic","sort","point","swidth","pointAttr","plotY","isNaN","shapeArgs","styledMode","colorAttribs","stroke","pointOptions","slice","stackY","last","toPixels","hasMarkers","abs","logarithmic","step","console","log","pushSupplementPoint","atStart","concat","pushSeries","markerTo","time","markerFrom","marker","enabled","showMarkers","timeEnd","flush","setXAxis","transA","minPixelPadding","pointRange","horiz","reversed","setYAxis","setThreshold","has","translation","renderChart","chartWidth","chartHeight","viewport","isMS","si","shapeOptions","hasThreshold","yBottom","getThreshold","isRadial","radius","shapeTexture","symbol","circle","sindex","cbuffer","isReady","bindTexture","TEXTURE_2D","handle","plotGroup","seriesGroup","addClass","getStyle","colorByPoint","colors","fillOpacity","setOpacity","boostBlending","blendFunc","SRC_ALPHA","ONE","blendEquation","FUNC_ADD","DST_COLOR","ZERO","FUNC_MIN","blendFuncSeparate","ONE_MINUS_SRC_ALPHA","Array","disableVertexAttribArray","renderer","forExport","setTimeout","setSize","init","noFlush","getContext","enable","BLEND","disable","DEPTH_TEST","depthFunc","LESS","createTexture","fn","props","createElement","ctx","mozImageSmoothingEnabled","webkitImageSmoothingEnabled","msImageSmoothingEnabled","imageSmoothingEnabled","strokeStyle","fillStyle","activeTexture","TEXTURE0","texImage2D","RGBA","UNSIGNED_BYTE","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","TEXTURE_MAG_FILTER","LINEAR","TEXTURE_MIN_FILTER","beginPath","arc","PI","fillRect","moveTo","lineTo","deleteTexture","BoostSeries_getBoostClipRect","BoostSeries_isChartSeriesBoosting","getOptions","BoostSeries_composed","BoostSeries_doc","noop","BoostSeries_win","BoostSeries_addEvent","destroyObjectProperties","BoostSeries_error","extend","fireEvent","isArray","BoostSeries_isNumber","BoostSeries_pick","BoostSeries_pushUnique","wrap","defined","allocateIfNotSeriesBoosting","boostEnabled","createAndAttachRenderer","targetGroup","group","foSupported","SVGForeignObjectElement","hasClickHandler","Boolean","events","click","renderTarget","image","add","attr","href","copy","resize","toDataURL","targetFo","targetCtx","element","appendChild","drawImage","css","pointerEvents","mixedBlendMode","opacity","clipRect","zIndex","g","box","clippedElement","clip","destroyGraphics","destroyElements","seriesProp","eachAsync","arr","finalFunc","chunkSize","noTimeout","proceed","requestAnimationFrame","hasExtremes","checkX","dataLength","dataTable","modified","rowCount","colorAxis","getSeriesBoosting","forceCrop","onSeriesDestroy","hoverPoints","filter","onSeriesHide","renderIfNotSeriesBoosting","getPoint","boostPoint","PointClass","pointClass","isScatter","category","categories","dist","distX","plotX","percentage","isInside","isPointInside","scatterProcessData","force","isDirty","setTickInterval","cropThreshold","old","setColumns","getExtremesFromAll","processedData","processedXData","processedYData","xRangeNeeded","yRangeNeeded","cropped","xDataMax","xDataMin","yDataMax","yDataMin","iEnd","cropStart","seriesRenderCanvas","chartBoost","seriesBoost","lowData","highData","pointTaken","sampling","enableMouseTracking","requireSorting","compareX","findNearestPointBy","xDataFull","lastClientX","maxVal","minI","maxI","graph","addKDPoint","clientX","pushPoint","ceil","buildKDTree","lineWidthFilter","tagName","children","attributes","operator","id","wrapSeriesDrawPoints","wrapSeriesGetExtremes","apply","arguments","wrapSeriesProcessData","dataToMeasure","treeGrid","getFirstValidPoint","enterBoost","bp","alteredByBoost","altered","own","allowDG","directTouch","stickyTracking","finishedAnimating","labelBySeries","exitBoost","setting","wrapSeriesSearchPoint","result","Boost_BoostSeries","SeriesClass","seriesTypes","plotOptions","seriesProto","renderCanvas","method","wrapSeriesFunctions","branch","letItPass","typePlotOptions","area","AreaSeries","areaspline","AreaSplineSeries","bubble","BubbleSeries","column","ColumnSeries","heatmap","HeatmapSeries","scatter","ScatterSeries","treemap","TreemapSeries","bubbleProto","SC","BoostCanvas_getBoostClipRect","BoostCanvas_isChartSeriesBoosting","BoostCanvas_destroyGraphics","BoostCanvas_color","BoostCanvas_doc","BoostCanvas_noop","BoostCanvas_addEvent","BoostCanvas_fireEvent","BoostCanvas_isNumber","BoostCanvas_merge","BoostCanvas_pick","BoostCanvas_wrap","destroyLoadingDiv","b64BlankPixel","areaCvsDrawPoint","lastPoint","bubbleCvsMarkerCircle","radii","columnCvsDrawPoint","rect","onChartCanvasToSVG","onChartClear","clearRect","seriesCanvasToSVG","seriesCvsLineTo","seriesGetContext","swapXY","c","style","activeBoostSettings","boostSettings","strokeBatch","cvsStrokeBatch","translatedThreshold","doFill","loadingOptions","loading","cvsDrawPoint","cvsLineTo","cvsMarker","cvsMarkerSquare","cvsMarkerCircle","labelStyle","backgroundColor","padding","borderRadius","clearTimeout","showLoading","wasNull","drawPoint","lineJoin","scroller","className","isNull","isNextInside","isPrevInside","NaN","round","loadingDiv","loadingShown","transition","parentNode","removeChild","loadingSpan","scatterCvsMarkerCircle","scatterCvsMarkerSquare","wrapHeatmapDrawPoints","areaProto","columnProto","scatterProto","Extensions_BoostCanvas","G","initCanvasBoost","Chart","Series"],"mappings":"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"}

Hacked By AnonymousFox1.0, Coded By AnonymousFox