/*
 Highcharts JS v8.2.0 (2020-08-20)

 (c) 2009-2018 Torstein Honsi

 License: www.highcharts.com/license
*/
(function (T, O) {
  "object" === typeof module && module.exports
    ? ((O["default"] = O), (module.exports = T.document ? O(T) : O))
    : "function" === typeof define && define.amd
    ? define("highcharts/highcharts", function () {
        return O(T);
      })
    : (T.Highcharts && T.Highcharts.error(16, !0), (T.Highcharts = O(T)));
})("undefined" !== typeof window ? window : this, function (T) {
  function O(f, a, S, y) {
    f.hasOwnProperty(a) || (f[a] = y.apply(null, S));
  }
  var n = {};
  O(n, "Core/Globals.js", [], function () {
    var f =
        "undefined" !== typeof T
          ? T
          : "undefined" !== typeof window
          ? window
          : {},
      a = f.document,
      S = (f.navigator && f.navigator.userAgent) || "",
      y =
        a &&
        a.createElementNS &&
        !!a.createElementNS("http://www.w3.org/2000/svg", "svg").createSVGRect,
      n = /(edge|msie|trident)/i.test(S) && !f.opera,
      G = -1 !== S.indexOf("Firefox"),
      C = -1 !== S.indexOf("Chrome"),
      J = G && 4 > parseInt(S.split("Firefox/")[1], 10);
    return {
      product: "Highcharts",
      version: "8.2.0",
      deg2rad: (2 * Math.PI) / 360,
      doc: a,
      hasBidiBug: J,
      hasTouch: !!f.TouchEvent,
      isMS: n,
      isWebKit: -1 !== S.indexOf("AppleWebKit"),
      isFirefox: G,
      isChrome: C,
      isSafari: !C && -1 !== S.indexOf("Safari"),
      isTouchDevice: /(Mobile|Android|Windows Phone)/.test(S),
      SVG_NS: "http://www.w3.org/2000/svg",
      chartCount: 0,
      seriesTypes: {},
      symbolSizes: {},
      svg: y,
      win: f,
      marginNames: ["plotTop", "marginRight", "marginBottom", "plotLeft"],
      noop: function () {},
      charts: [],
      dateFormats: {},
    };
  });
  O(n, "Core/Utilities.js", [n["Core/Globals.js"]], function (f) {
    function a(b, c, e, d) {
      var z = c ? "Highcharts error" : "Highcharts warning";
      32 === b && (b = z + ": Deprecated member");
      var w = I(b),
        g = w
          ? z + " #" + b + ": www.highcharts.com/errors/" + b + "/"
          : b.toString();
      z = function () {
        if (c) throw Error(g);
        v.console && -1 === a.messages.indexOf(g) && console.log(g);
      };
      if ("undefined" !== typeof d) {
        var k = "";
        w && (g += "?");
        U(d, function (b, c) {
          k += "\n - " + c + ": " + b;
          w && (g += encodeURI(c) + "=" + encodeURI(b));
        });
        g += k;
      }
      e ? ea(e, "displayError", { code: b, message: g, params: d }, z) : z();
      a.messages.push(g);
    }
    function S() {
      var b,
        c = arguments,
        e = {},
        d = function (b, c) {
          "object" !== typeof b && (b = {});
          U(c, function (e, z) {
            !y(e, !0) || t(e) || p(e)
              ? (b[z] = c[z])
              : (b[z] = d(b[z] || {}, e));
          });
          return b;
        };
      !0 === c[0] && ((e = c[1]), (c = Array.prototype.slice.call(c, 2)));
      var z = c.length;
      for (b = 0; b < z; b++) e = d(e, c[b]);
      return e;
    }
    function y(b, c) {
      return !!b && "object" === typeof b && (!c || !E(b));
    }
    function n(b, c, e) {
      var d;
      K(c)
        ? m(e)
          ? b.setAttribute(c, e)
          : b &&
            b.getAttribute &&
            ((d = b.getAttribute(c)) ||
              "class" !== c ||
              (d = b.getAttribute(c + "Name")))
        : U(c, function (c, e) {
            b.setAttribute(e, c);
          });
      return d;
    }
    function G() {
      for (var b = arguments, c = b.length, e = 0; e < c; e++) {
        var d = b[e];
        if ("undefined" !== typeof d && null !== d) return d;
      }
    }
    function C(b, c) {
      if (!b) return c;
      var e = b.split(".").reverse();
      if (1 === e.length) return c[b];
      for (
        b = e.pop();
        "undefined" !== typeof b && "undefined" !== typeof c && null !== c;

      )
        (c = c[b]), (b = e.pop());
      return c;
    }
    f.timers = [];
    var J = f.charts,
      H = f.doc,
      v = f.win;
    (a || (a = {})).messages = [];
    f.error = a;
    var L = (function () {
      function b(b, c, e) {
        this.options = c;
        this.elem = b;
        this.prop = e;
      }
      b.prototype.dSetter = function () {
        var b = this.paths,
          c = b && b[0];
        b = b && b[1];
        var e = [],
          d = this.now || 0;
        if (1 !== d && c && b)
          if (c.length === b.length && 1 > d)
            for (var z = 0; z < b.length; z++) {
              for (var w = c[z], g = b[z], k = [], h = 0; h < g.length; h++) {
                var P = w[h],
                  l = g[h];
                k[h] =
                  "number" === typeof P &&
                  "number" === typeof l &&
                  ("A" !== g[0] || (4 !== h && 5 !== h))
                    ? P + d * (l - P)
                    : l;
              }
              e.push(k);
            }
          else e = b;
        else e = this.toD || [];
        this.elem.attr("d", e, void 0, !0);
      };
      b.prototype.update = function () {
        var b = this.elem,
          c = this.prop,
          e = this.now,
          d = this.options.step;
        if (this[c + "Setter"]) this[c + "Setter"]();
        else
          b.attr
            ? b.element && b.attr(c, e, null, !0)
            : (b.style[c] = e + this.unit);
        d && d.call(b, e, this);
      };
      b.prototype.run = function (b, c, e) {
        var d = this,
          z = d.options,
          w = function (b) {
            return w.stopped ? !1 : d.step(b);
          },
          g =
            v.requestAnimationFrame ||
            function (b) {
              setTimeout(b, 13);
            },
          h = function () {
            for (var b = 0; b < f.timers.length; b++)
              f.timers[b]() || f.timers.splice(b--, 1);
            f.timers.length && g(h);
          };
        b !== c || this.elem["forceAnimate:" + this.prop]
          ? ((this.startTime = +new Date()),
            (this.start = b),
            (this.end = c),
            (this.unit = e),
            (this.now = this.start),
            (this.pos = 0),
            (w.elem = this.elem),
            (w.prop = this.prop),
            w() && 1 === f.timers.push(w) && g(h))
          : (delete z.curAnim[this.prop],
            z.complete &&
              0 === Object.keys(z.curAnim).length &&
              z.complete.call(this.elem));
      };
      b.prototype.step = function (b) {
        var c = +new Date(),
          e = this.options,
          d = this.elem,
          z = e.complete,
          w = e.duration,
          g = e.curAnim;
        if (d.attr && !d.element) b = !1;
        else if (b || c >= w + this.startTime) {
          this.now = this.end;
          this.pos = 1;
          this.update();
          var h = (g[this.prop] = !0);
          U(g, function (b) {
            !0 !== b && (h = !1);
          });
          h && z && z.call(d);
          b = !1;
        } else
          (this.pos = e.easing((c - this.startTime) / w)),
            (this.now = this.start + (this.end - this.start) * this.pos),
            this.update(),
            (b = !0);
        return b;
      };
      b.prototype.initPath = function (b, c, e) {
        function d(b, c) {
          for (; b.length < r; ) {
            var e = b[0],
              d = c[r - b.length];
            d &&
              "M" === e[0] &&
              (b[0] =
                "C" === d[0]
                  ? ["C", e[1], e[2], e[1], e[2], e[1], e[2]]
                  : ["L", e[1], e[2]]);
            b.unshift(e);
            h && b.push(b[b.length - 1]);
          }
        }
        function z(b, c) {
          for (; b.length < r; )
            if (
              ((c = b[b.length / k - 1].slice()),
              "C" === c[0] && ((c[1] = c[5]), (c[2] = c[6])),
              h)
            ) {
              var e = b[b.length / k].slice();
              b.splice(b.length / 2, 0, c, e);
            } else b.push(c);
        }
        var w = b.startX,
          g = b.endX;
        c = c && c.slice();
        e = e.slice();
        var h = b.isArea,
          k = h ? 2 : 1;
        if (!c) return [e, e];
        if (w && g) {
          for (b = 0; b < w.length; b++)
            if (w[b] === g[0]) {
              var P = b;
              break;
            } else if (w[0] === g[g.length - w.length + b]) {
              P = b;
              var l = !0;
              break;
            } else if (w[w.length - 1] === g[g.length - w.length + b]) {
              P = w.length - b;
              break;
            }
          "undefined" === typeof P && (c = []);
        }
        if (c.length && I(P)) {
          var r = e.length + P * k;
          l ? (d(c, e), z(e, c)) : (d(e, c), z(c, e));
        }
        return [c, e];
      };
      b.prototype.fillSetter = function () {
        b.prototype.strokeSetter.apply(this, arguments);
      };
      b.prototype.strokeSetter = function () {
        this.elem.attr(
          this.prop,
          f.color(this.start).tweenTo(f.color(this.end), this.pos),
          null,
          !0
        );
      };
      return b;
    })();
    f.Fx = L;
    f.merge = S;
    var q = (f.pInt = function (b, c) {
        return parseInt(b, c || 10);
      }),
      K = (f.isString = function (b) {
        return "string" === typeof b;
      }),
      E = (f.isArray = function (b) {
        b = Object.prototype.toString.call(b);
        return "[object Array]" === b || "[object Array Iterator]" === b;
      });
    f.isObject = y;
    var p = (f.isDOMElement = function (b) {
        return y(b) && "number" === typeof b.nodeType;
      }),
      t = (f.isClass = function (b) {
        var c = b && b.constructor;
        return !(!y(b, !0) || p(b) || !c || !c.name || "Object" === c.name);
      }),
      I = (f.isNumber = function (b) {
        return (
          "number" === typeof b && !isNaN(b) && Infinity > b && -Infinity < b
        );
      }),
      u = (f.erase = function (b, c) {
        for (var e = b.length; e--; )
          if (b[e] === c) {
            b.splice(e, 1);
            break;
          }
      }),
      m = (f.defined = function (b) {
        return "undefined" !== typeof b && null !== b;
      });
    f.attr = n;
    var h = (f.splat = function (b) {
        return E(b) ? b : [b];
      }),
      l = (f.syncTimeout = function (b, c, e) {
        if (0 < c) return setTimeout(b, c, e);
        b.call(0, e);
        return -1;
      }),
      k = (f.clearTimeout = function (b) {
        m(b) && clearTimeout(b);
      }),
      g = (f.extend = function (b, c) {
        var e;
        b || (b = {});
        for (e in c) b[e] = c[e];
        return b;
      });
    f.pick = G;
    var d = (f.css = function (b, c) {
        f.isMS &&
          !f.svg &&
          c &&
          "undefined" !== typeof c.opacity &&
          (c.filter = "alpha(opacity=" + 100 * c.opacity + ")");
        g(b.style, c);
      }),
      x = (f.createElement = function (b, c, e, z, w) {
        b = H.createElement(b);
        c && g(b, c);
        w && d(b, { padding: "0", border: "none", margin: "0" });
        e && d(b, e);
        z && z.appendChild(b);
        return b;
      }),
      r = (f.extendClass = function (b, c) {
        var e = function () {};
        e.prototype = new b();
        g(e.prototype, c);
        return e;
      }),
      A = (f.pad = function (b, c, e) {
        return (
          Array((c || 2) + 1 - String(b).replace("-", "").length).join(
            e || "0"
          ) + b
        );
      }),
      N = (f.relativeLength = function (b, c, e) {
        return /%$/.test(b)
          ? (c * parseFloat(b)) / 100 + (e || 0)
          : parseFloat(b);
      }),
      B = (f.wrap = function (b, c, e) {
        var d = b[c];
        b[c] = function () {
          var b = Array.prototype.slice.call(arguments),
            c = arguments,
            z = this;
          z.proceed = function () {
            d.apply(z, arguments.length ? arguments : c);
          };
          b.unshift(d);
          b = e.apply(this, b);
          z.proceed = null;
          return b;
        };
      }),
      M = (f.format = function (b, c, e) {
        var d = "{",
          z = !1,
          w = [],
          g = /f$/,
          h = /\.([0-9])/,
          k = f.defaultOptions.lang,
          P = (e && e.time) || f.time;
        for (e = (e && e.numberFormatter) || X; b; ) {
          var l = b.indexOf(d);
          if (-1 === l) break;
          var r = b.slice(0, l);
          if (z) {
            r = r.split(":");
            d = C(r.shift() || "", c);
            if (r.length && "number" === typeof d)
              if (((r = r.join(":")), g.test(r))) {
                var m = parseInt((r.match(h) || ["", "-1"])[1], 10);
                null !== d &&
                  (d = e(
                    d,
                    m,
                    k.decimalPoint,
                    -1 < r.indexOf(",") ? k.thousandsSep : ""
                  ));
              } else d = P.dateFormat(r, d);
            w.push(d);
          } else w.push(r);
          b = b.slice(l + 1);
          d = (z = !z) ? "}" : "{";
        }
        w.push(b);
        return w.join("");
      }),
      R = (f.getMagnitude = function (b) {
        return Math.pow(10, Math.floor(Math.log(b) / Math.LN10));
      }),
      F = (f.normalizeTickInterval = function (b, c, e, d, z) {
        var w = b;
        e = G(e, 1);
        var g = b / e;
        c ||
          ((c = z
            ? [1, 1.2, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10]
            : [1, 2, 2.5, 5, 10]),
          !1 === d &&
            (1 === e
              ? (c = c.filter(function (b) {
                  return 0 === b % 1;
                }))
              : 0.1 >= e && (c = [1 / e])));
        for (
          d = 0;
          d < c.length &&
          !((w = c[d]),
          (z && w * e >= b) || (!z && g <= (c[d] + (c[d + 1] || c[d])) / 2));
          d++
        );
        return (w = P(w * e, -Math.round(Math.log(0.001) / Math.LN10)));
      }),
      e = (f.stableSort = function (b, c) {
        var e = b.length,
          d,
          z;
        for (z = 0; z < e; z++) b[z].safeI = z;
        b.sort(function (b, e) {
          d = c(b, e);
          return 0 === d ? b.safeI - e.safeI : d;
        });
        for (z = 0; z < e; z++) delete b[z].safeI;
      }),
      c = (f.arrayMin = function (b) {
        for (var c = b.length, e = b[0]; c--; ) b[c] < e && (e = b[c]);
        return e;
      }),
      b = (f.arrayMax = function (b) {
        for (var c = b.length, e = b[0]; c--; ) b[c] > e && (e = b[c]);
        return e;
      }),
      z = (f.destroyObjectProperties = function (b, c) {
        U(b, function (e, d) {
          e && e !== c && e.destroy && e.destroy();
          delete b[d];
        });
      }),
      w = (f.discardElement = function (b) {
        var c = f.garbageBin;
        c || (c = x("div"));
        b && c.appendChild(b);
        c.innerHTML = "";
      }),
      P = (f.correctFloat = function (b, c) {
        return parseFloat(b.toPrecision(c || 14));
      }),
      Z = (f.setAnimation = function (b, c) {
        c.renderer.globalAnimation = G(b, c.options.chart.animation, !0);
      }),
      W = (f.animObject = function (b) {
        return y(b)
          ? f.merge({ duration: 500, defer: 0 }, b)
          : { duration: b ? 500 : 0, defer: 0 };
      }),
      aa = (f.timeUnits = {
        millisecond: 1,
        second: 1e3,
        minute: 6e4,
        hour: 36e5,
        day: 864e5,
        week: 6048e5,
        month: 24192e5,
        year: 314496e5,
      }),
      X = (f.numberFormat = function (b, c, e, d) {
        b = +b || 0;
        c = +c;
        var z = f.defaultOptions.lang,
          w = (b.toString().split(".")[1] || "").split("e")[0].length,
          g = b.toString().split("e");
        if (-1 === c) c = Math.min(w, 20);
        else if (!I(c)) c = 2;
        else if (c && g[1] && 0 > g[1]) {
          var h = c + +g[1];
          0 <= h
            ? ((g[0] = (+g[0]).toExponential(h).split("e")[0]), (c = h))
            : ((g[0] = g[0].split(".")[0] || 0),
              (b = 20 > c ? (g[0] * Math.pow(10, g[1])).toFixed(c) : 0),
              (g[1] = 0));
        }
        var k = (
          Math.abs(g[1] ? g[0] : b) + Math.pow(10, -Math.max(c, w) - 1)
        ).toFixed(c);
        w = String(q(k));
        h = 3 < w.length ? w.length % 3 : 0;
        e = G(e, z.decimalPoint);
        d = G(d, z.thousandsSep);
        b = (0 > b ? "-" : "") + (h ? w.substr(0, h) + d : "");
        b += w.substr(h).replace(/(\d{3})(?=\d)/g, "$1" + d);
        c && (b += e + k.slice(-c));
        g[1] && 0 !== +b && (b += "e" + g[1]);
        return b;
      });
    Math.easeInOutSine = function (b) {
      return -0.5 * (Math.cos(Math.PI * b) - 1);
    };
    var ba = (f.getStyle = function (b, c, e) {
        if ("width" === c)
          return (
            (c = Math.min(b.offsetWidth, b.scrollWidth)),
            (e = b.getBoundingClientRect && b.getBoundingClientRect().width),
            e < c && e >= c - 1 && (c = Math.floor(e)),
            Math.max(
              0,
              c - f.getStyle(b, "padding-left") - f.getStyle(b, "padding-right")
            )
          );
        if ("height" === c)
          return Math.max(
            0,
            Math.min(b.offsetHeight, b.scrollHeight) -
              f.getStyle(b, "padding-top") -
              f.getStyle(b, "padding-bottom")
          );
        v.getComputedStyle || a(27, !0);
        if ((b = v.getComputedStyle(b, void 0)))
          (b = b.getPropertyValue(c)), G(e, "opacity" !== c) && (b = q(b));
        return b;
      }),
      ca = (f.getDeferredAnimation = function (b, c, e) {
        var d = W(c),
          z = 0,
          w = 0;
        (e ? [e] : b.series).forEach(function (b) {
          b = W(b.options.animation);
          z = c && m(c.defer) ? d.defer : Math.max(z, b.duration + b.defer);
          w = Math.min(d.duration, b.duration);
        });
        b.renderer.forExport && (z = 0);
        return { defer: Math.max(0, z - w), duration: Math.min(z, w) };
      }),
      Y = (f.inArray = function (b, c, e) {
        a(32, !1, void 0, { "Highcharts.inArray": "use Array.indexOf" });
        return c.indexOf(b, e);
      }),
      V = (f.find = Array.prototype.find
        ? function (b, c) {
            return b.find(c);
          }
        : function (b, c) {
            var e,
              d = b.length;
            for (e = 0; e < d; e++) if (c(b[e], e)) return b[e];
          });
    f.keys = function (b) {
      a(32, !1, void 0, { "Highcharts.keys": "use Object.keys" });
      return Object.keys(b);
    };
    var Q = (f.offset = function (b) {
        var c = H.documentElement;
        b =
          b.parentElement || b.parentNode
            ? b.getBoundingClientRect()
            : { top: 0, left: 0 };
        return {
          top: b.top + (v.pageYOffset || c.scrollTop) - (c.clientTop || 0),
          left: b.left + (v.pageXOffset || c.scrollLeft) - (c.clientLeft || 0),
        };
      }),
      fa = (f.stop = function (b, c) {
        for (var e = f.timers.length; e--; )
          f.timers[e].elem !== b ||
            (c && c !== f.timers[e].prop) ||
            (f.timers[e].stopped = !0);
      }),
      U = (f.objectEach = function (b, c, e) {
        for (var d in b)
          Object.hasOwnProperty.call(b, d) && c.call(e || b[d], b[d], d, b);
      });
    U(
      {
        map: "map",
        each: "forEach",
        grep: "filter",
        reduce: "reduce",
        some: "some",
      },
      function (b, c) {
        f[c] = function (e) {
          var d;
          a(
            32,
            !1,
            void 0,
            ((d = {}), (d["Highcharts." + c] = "use Array." + b), d)
          );
          return Array.prototype[b].apply(e, [].slice.call(arguments, 1));
        };
      }
    );
    var ja = (f.addEvent = function (b, c, e, d) {
        void 0 === d && (d = {});
        var z = b.addEventListener || f.addEventListenerPolyfill;
        var w =
          "function" === typeof b && b.prototype
            ? (b.prototype.protoEvents = b.prototype.protoEvents || {})
            : (b.hcEvents = b.hcEvents || {});
        f.Point &&
          b instanceof f.Point &&
          b.series &&
          b.series.chart &&
          (b.series.chart.runTrackerClick = !0);
        z && z.call(b, c, e, !1);
        w[c] || (w[c] = []);
        w[c].push({
          fn: e,
          order: "number" === typeof d.order ? d.order : Infinity,
        });
        w[c].sort(function (b, c) {
          return b.order - c.order;
        });
        return function () {
          ha(b, c, e);
        };
      }),
      ha = (f.removeEvent = function (b, c, e) {
        function d(c, e) {
          var d = b.removeEventListener || f.removeEventListenerPolyfill;
          d && d.call(b, c, e, !1);
        }
        function z(e) {
          var z;
          if (b.nodeName) {
            if (c) {
              var w = {};
              w[c] = !0;
            } else w = e;
            U(w, function (b, c) {
              if (e[c]) for (z = e[c].length; z--; ) d(c, e[c][z].fn);
            });
          }
        }
        var w;
        ["protoEvents", "hcEvents"].forEach(function (g, h) {
          var k = (h = h ? b : b.prototype) && h[g];
          k &&
            (c
              ? ((w = k[c] || []),
                e
                  ? ((k[c] = w.filter(function (b) {
                      return e !== b.fn;
                    })),
                    d(c, e))
                  : (z(k), (k[c] = [])))
              : (z(k), (h[g] = {})));
        });
      }),
      ea = (f.fireEvent = function (b, c, e, d) {
        var z;
        e = e || {};
        if (H.createEvent && (b.dispatchEvent || b.fireEvent)) {
          var w = H.createEvent("Events");
          w.initEvent(c, !0, !0);
          g(w, e);
          b.dispatchEvent ? b.dispatchEvent(w) : b.fireEvent(c, w);
        } else
          e.target ||
            g(e, {
              preventDefault: function () {
                e.defaultPrevented = !0;
              },
              target: b,
              type: c,
            }),
            (function (c, d) {
              void 0 === c && (c = []);
              void 0 === d && (d = []);
              var w = 0,
                g = 0,
                h = c.length + d.length;
              for (z = 0; z < h; z++)
                !1 ===
                  (c[w]
                    ? d[g]
                      ? c[w].order <= d[g].order
                        ? c[w++]
                        : d[g++]
                      : c[w++]
                    : d[g++]
                  ).fn.call(b, e) && e.preventDefault();
            })(b.protoEvents && b.protoEvents[c], b.hcEvents && b.hcEvents[c]);
        d && !e.defaultPrevented && d.call(b, e);
      }),
      ka = (f.animate = function (b, c, e) {
        var d,
          z = "",
          w,
          g;
        if (!y(e)) {
          var h = arguments;
          e = { duration: h[2], easing: h[3], complete: h[4] };
        }
        I(e.duration) || (e.duration = 400);
        e.easing =
          "function" === typeof e.easing
            ? e.easing
            : Math[e.easing] || Math.easeInOutSine;
        e.curAnim = S(c);
        U(c, function (h, k) {
          fa(b, k);
          g = new L(b, e, k);
          w = null;
          "d" === k && E(c.d)
            ? ((g.paths = g.initPath(b, b.pathArray, c.d)),
              (g.toD = c.d),
              (d = 0),
              (w = 1))
            : b.attr
            ? (d = b.attr(k))
            : ((d = parseFloat(ba(b, k)) || 0), "opacity" !== k && (z = "px"));
          w || (w = h);
          w && w.match && w.match("px") && (w = w.replace(/px/g, ""));
          g.run(d, w, z);
        });
      }),
      la = (f.seriesType = function (b, c, e, d, z) {
        var w = ia(),
          g = f.seriesTypes;
        w.plotOptions[b] = S(w.plotOptions[c], e);
        g[b] = r(g[c] || function () {}, d);
        g[b].prototype.type = b;
        z && (g[b].prototype.pointClass = r(f.Point, z));
        return g[b];
      }),
      da,
      ma = (f.uniqueKey = (function () {
        var b = Math.random().toString(36).substring(2, 9) + "-",
          c = 0;
        return function () {
          return "highcharts-" + (da ? "" : b) + c++;
        };
      })()),
      O = (f.useSerialIds = function (b) {
        return (da = G(b, da));
      }),
      na = (f.isFunction = function (b) {
        return "function" === typeof b;
      }),
      ia = (f.getOptions = function () {
        return f.defaultOptions;
      }),
      oa = (f.setOptions = function (b) {
        f.defaultOptions = S(!0, f.defaultOptions, b);
        (b.time || b.global) &&
          f.time.update(
            S(f.defaultOptions.global, f.defaultOptions.time, b.global, b.time)
          );
        return f.defaultOptions;
      });
    v.jQuery &&
      (v.jQuery.fn.highcharts = function () {
        var b = [].slice.call(arguments);
        if (this[0])
          return b[0]
            ? (new f[K(b[0]) ? b.shift() : "Chart"](this[0], b[0], b[1]), this)
            : J[n(this[0], "data-highcharts-chart")];
      });
    return {
      Fx: f.Fx,
      addEvent: ja,
      animate: ka,
      animObject: W,
      arrayMax: b,
      arrayMin: c,
      attr: n,
      clamp: function (b, c, e) {
        return b > c ? (b < e ? b : e) : c;
      },
      clearTimeout: k,
      correctFloat: P,
      createElement: x,
      css: d,
      defined: m,
      destroyObjectProperties: z,
      discardElement: w,
      erase: u,
      error: a,
      extend: g,
      extendClass: r,
      find: V,
      fireEvent: ea,
      format: M,
      getDeferredAnimation: ca,
      getMagnitude: R,
      getNestedProperty: C,
      getOptions: ia,
      getStyle: ba,
      inArray: Y,
      isArray: E,
      isClass: t,
      isDOMElement: p,
      isFunction: na,
      isNumber: I,
      isObject: y,
      isString: K,
      merge: S,
      normalizeTickInterval: F,
      numberFormat: X,
      objectEach: U,
      offset: Q,
      pad: A,
      pick: G,
      pInt: q,
      relativeLength: N,
      removeEvent: ha,
      seriesType: la,
      setAnimation: Z,
      setOptions: oa,
      splat: h,
      stableSort: e,
      stop: fa,
      syncTimeout: l,
      timeUnits: aa,
      uniqueKey: ma,
      useSerialIds: O,
      wrap: B,
    };
  });
  O(
    n,
    "Core/Color.js",
    [n["Core/Globals.js"], n["Core/Utilities.js"]],
    function (f, a) {
      var S = a.isNumber,
        y = a.merge,
        n = a.pInt;
      a = (function () {
        function a(f) {
          this.parsers = [
            {
              regex: /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/,
              parse: function (a) {
                return [n(a[1]), n(a[2]), n(a[3]), parseFloat(a[4], 10)];
              },
            },
            {
              regex: /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/,
              parse: function (a) {
                return [n(a[1]), n(a[2]), n(a[3]), 1];
              },
            },
          ];
          this.rgba = [];
          if (!(this instanceof a)) return new a(f);
          this.init(f);
        }
        a.parse = function (f) {
          return new a(f);
        };
        a.prototype.init = function (f) {
          var J, H;
          if (
            (this.input = f =
              a.names[f && f.toLowerCase ? f.toLowerCase() : ""] || f) &&
            f.stops
          )
            this.stops = f.stops.map(function (q) {
              return new a(q[1]);
            });
          else {
            if (f && f.charAt && "#" === f.charAt()) {
              var v = f.length;
              f = parseInt(f.substr(1), 16);
              7 === v
                ? (J = [(f & 16711680) >> 16, (f & 65280) >> 8, f & 255, 1])
                : 4 === v &&
                  (J = [
                    ((f & 3840) >> 4) | ((f & 3840) >> 8),
                    ((f & 240) >> 4) | (f & 240),
                    ((f & 15) << 4) | (f & 15),
                    1,
                  ]);
            }
            if (!J)
              for (H = this.parsers.length; H-- && !J; ) {
                var L = this.parsers[H];
                (v = L.regex.exec(f)) && (J = L.parse(v));
              }
          }
          this.rgba = J || [];
        };
        a.prototype.get = function (a) {
          var f = this.input,
            H = this.rgba;
          if ("undefined" !== typeof this.stops) {
            var v = y(f);
            v.stops = [].concat(v.stops);
            this.stops.forEach(function (f, q) {
              v.stops[q] = [v.stops[q][0], f.get(a)];
            });
          } else
            v =
              H && S(H[0])
                ? "rgb" === a || (!a && 1 === H[3])
                  ? "rgb(" + H[0] + "," + H[1] + "," + H[2] + ")"
                  : "a" === a
                  ? H[3]
                  : "rgba(" + H.join(",") + ")"
                : f;
          return v;
        };
        a.prototype.brighten = function (a) {
          var f,
            H = this.rgba;
          if (this.stops)
            this.stops.forEach(function (f) {
              f.brighten(a);
            });
          else if (S(a) && 0 !== a)
            for (f = 0; 3 > f; f++)
              (H[f] += n(255 * a)),
                0 > H[f] && (H[f] = 0),
                255 < H[f] && (H[f] = 255);
          return this;
        };
        a.prototype.setOpacity = function (a) {
          this.rgba[3] = a;
          return this;
        };
        a.prototype.tweenTo = function (a, f) {
          var H = this.rgba,
            v = a.rgba;
          v.length && H && H.length
            ? ((a = 1 !== v[3] || 1 !== H[3]),
              (f =
                (a ? "rgba(" : "rgb(") +
                Math.round(v[0] + (H[0] - v[0]) * (1 - f)) +
                "," +
                Math.round(v[1] + (H[1] - v[1]) * (1 - f)) +
                "," +
                Math.round(v[2] + (H[2] - v[2]) * (1 - f)) +
                (a ? "," + (v[3] + (H[3] - v[3]) * (1 - f)) : "") +
                ")"))
            : (f = a.input || "none");
          return f;
        };
        a.names = { white: "#ffffff", black: "#000000" };
        return a;
      })();
      f.Color = a;
      f.color = a.parse;
      return f.Color;
    }
  );
  O(
    n,
    "Core/Renderer/SVG/SVGElement.js",
    [n["Core/Color.js"], n["Core/Globals.js"], n["Core/Utilities.js"]],
    function (f, a, n) {
      var y = a.deg2rad,
        D = a.doc,
        G = a.hasTouch,
        C = a.isFirefox,
        J = a.noop,
        H = a.svg,
        v = a.SVG_NS,
        L = a.win,
        q = n.animate,
        K = n.animObject,
        E = n.attr,
        p = n.createElement,
        t = n.css,
        I = n.defined,
        u = n.erase,
        m = n.extend,
        h = n.fireEvent,
        l = n.isArray,
        k = n.isFunction,
        g = n.isNumber,
        d = n.isString,
        x = n.merge,
        r = n.objectEach,
        A = n.pick,
        N = n.pInt,
        B = n.stop,
        M = n.syncTimeout,
        R = n.uniqueKey;
      ("");
      n = (function () {
        function F() {
          this.height = this.element = void 0;
          this.opacity = 1;
          this.renderer = void 0;
          this.SVG_NS = v;
          this.symbolCustomAttribs = "x y width height r start end innerR anchorX anchorY rounded".split(
            " "
          );
          this.width = void 0;
        }
        F.prototype._defaultGetter = function (e) {
          e = A(
            this[e + "Value"],
            this[e],
            this.element ? this.element.getAttribute(e) : null,
            0
          );
          /^[\-0-9\.]+$/.test(e) && (e = parseFloat(e));
          return e;
        };
        F.prototype._defaultSetter = function (e, c, b) {
          b.setAttribute(c, e);
        };
        F.prototype.add = function (e) {
          var c = this.renderer,
            b = this.element;
          e && (this.parentGroup = e);
          this.parentInverted = e && e.inverted;
          "undefined" !== typeof this.textStr &&
            "text" === this.element.nodeName &&
            c.buildText(this);
          this.added = !0;
          if (!e || e.handleZ || this.zIndex) var d = this.zIndexSetter();
          d || (e ? e.element : c.box).appendChild(b);
          if (this.onAdd) this.onAdd();
          return this;
        };
        F.prototype.addClass = function (e, c) {
          var b = c ? "" : this.attr("class") || "";
          e = (e || "")
            .split(/ /g)
            .reduce(
              function (c, e) {
                -1 === b.indexOf(e) && c.push(e);
                return c;
              },
              b ? [b] : []
            )
            .join(" ");
          e !== b && this.attr("class", e);
          return this;
        };
        F.prototype.afterSetters = function () {
          this.doTransform && (this.updateTransform(), (this.doTransform = !1));
        };
        F.prototype.align = function (e, c, b) {
          var z,
            w = {};
          var g = this.renderer;
          var h = g.alignedObjects;
          var k, l;
          if (e) {
            if (
              ((this.alignOptions = e), (this.alignByTranslate = c), !b || d(b))
            )
              (this.alignTo = z = b || "renderer"),
                u(h, this),
                h.push(this),
                (b = void 0);
          } else
            (e = this.alignOptions),
              (c = this.alignByTranslate),
              (z = this.alignTo);
          b = A(b, g[z], g);
          z = e.align;
          g = e.verticalAlign;
          h = (b.x || 0) + (e.x || 0);
          var r = (b.y || 0) + (e.y || 0);
          "right" === z ? (k = 1) : "center" === z && (k = 2);
          k && (h += (b.width - (e.width || 0)) / k);
          w[c ? "translateX" : "x"] = Math.round(h);
          "bottom" === g ? (l = 1) : "middle" === g && (l = 2);
          l && (r += (b.height - (e.height || 0)) / l);
          w[c ? "translateY" : "y"] = Math.round(r);
          this[this.placed ? "animate" : "attr"](w);
          this.placed = !0;
          this.alignAttr = w;
          return this;
        };
        F.prototype.alignSetter = function (e) {
          var c = { left: "start", center: "middle", right: "end" };
          c[e] &&
            ((this.alignValue = e),
            this.element.setAttribute("text-anchor", c[e]));
        };
        F.prototype.animate = function (e, c, b) {
          var d = this,
            w = K(A(c, this.renderer.globalAnimation, !0));
          c = w.defer;
          A(D.hidden, D.msHidden, D.webkitHidden, !1) && (w.duration = 0);
          0 !== w.duration
            ? (b && (w.complete = b),
              M(function () {
                d.element && q(d, e, w);
              }, c))
            : (this.attr(e, void 0, b),
              r(
                e,
                function (b, c) {
                  w.step && w.step.call(this, b, { prop: c, pos: 1 });
                },
                this
              ));
          return this;
        };
        F.prototype.applyTextOutline = function (e) {
          var c = this.element,
            b;
          -1 !== e.indexOf("contrast") &&
            (e = e.replace(
              /contrast/g,
              this.renderer.getContrast(c.style.fill)
            ));
          e = e.split(" ");
          var d = e[e.length - 1];
          if ((b = e[0]) && "none" !== b && a.svg) {
            this.fakeTS = !0;
            e = [].slice.call(c.getElementsByTagName("tspan"));
            this.ySetter = this.xSetter;
            b = b.replace(/(^[\d\.]+)(.*?)$/g, function (b, c, e) {
              return 2 * c + e;
            });
            this.removeTextOutline(e);
            var w = c.textContent
              ? /^[\u0591-\u065F\u066A-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC]/.test(
                  c.textContent
                )
              : !1;
            var g = c.firstChild;
            e.forEach(function (e, z) {
              0 === z &&
                (e.setAttribute("x", c.getAttribute("x")),
                (z = c.getAttribute("y")),
                e.setAttribute("y", z || 0),
                null === z && c.setAttribute("y", 0));
              z = e.cloneNode(!0);
              E(w && !C ? e : z, {
                class: "highcharts-text-outline",
                fill: d,
                stroke: d,
                "stroke-width": b,
                "stroke-linejoin": "round",
              });
              c.insertBefore(z, g);
            });
            w &&
              C &&
              e[0] &&
              ((e = e[0].cloneNode(!0)),
              (e.textContent = " "),
              c.insertBefore(e, g));
          }
        };
        F.prototype.attr = function (e, c, b, d) {
          var z = this.element,
            g,
            h = this,
            k,
            l,
            m = this.symbolCustomAttribs;
          if ("string" === typeof e && "undefined" !== typeof c) {
            var x = e;
            e = {};
            e[x] = c;
          }
          "string" === typeof e
            ? (h = (this[e + "Getter"] || this._defaultGetter).call(this, e, z))
            : (r(
                e,
                function (b, c) {
                  k = !1;
                  d || B(this, c);
                  this.symbolName &&
                    -1 !== m.indexOf(c) &&
                    (g || (this.symbolAttr(e), (g = !0)), (k = !0));
                  !this.rotation ||
                    ("x" !== c && "y" !== c) ||
                    (this.doTransform = !0);
                  k ||
                    ((l = this[c + "Setter"] || this._defaultSetter),
                    l.call(this, b, c, z),
                    !this.styledMode &&
                      this.shadows &&
                      /^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(
                        c
                      ) &&
                      this.updateShadows(c, b, l));
                },
                this
              ),
              this.afterSetters());
          b && b.call(this);
          return h;
        };
        F.prototype.clip = function (e) {
          return this.attr(
            "clip-path",
            e ? "url(" + this.renderer.url + "#" + e.id + ")" : "none"
          );
        };
        F.prototype.crisp = function (e, c) {
          c = c || e.strokeWidth || 0;
          var b = (Math.round(c) % 2) / 2;
          e.x = Math.floor(e.x || this.x || 0) + b;
          e.y = Math.floor(e.y || this.y || 0) + b;
          e.width = Math.floor((e.width || this.width || 0) - 2 * b);
          e.height = Math.floor((e.height || this.height || 0) - 2 * b);
          I(e.strokeWidth) && (e.strokeWidth = c);
          return e;
        };
        F.prototype.complexColor = function (e, c, b) {
          var d = this.renderer,
            w,
            g,
            k,
            m,
            p,
            B,
            t,
            A,
            u,
            M,
            Q = [],
            F;
          h(this.renderer, "complexColor", { args: arguments }, function () {
            e.radialGradient
              ? (g = "radialGradient")
              : e.linearGradient && (g = "linearGradient");
            if (g) {
              k = e[g];
              p = d.gradients;
              B = e.stops;
              u = b.radialReference;
              l(k) &&
                (e[g] = k = {
                  x1: k[0],
                  y1: k[1],
                  x2: k[2],
                  y2: k[3],
                  gradientUnits: "userSpaceOnUse",
                });
              "radialGradient" === g &&
                u &&
                !I(k.gradientUnits) &&
                ((m = k),
                (k = x(k, d.getRadialAttr(u, m), {
                  gradientUnits: "userSpaceOnUse",
                })));
              r(k, function (b, c) {
                "id" !== c && Q.push(c, b);
              });
              r(B, function (b) {
                Q.push(b);
              });
              Q = Q.join(",");
              if (p[Q]) M = p[Q].attr("id");
              else {
                k.id = M = R();
                var z = (p[Q] = d.createElement(g).attr(k).add(d.defs));
                z.radAttr = m;
                z.stops = [];
                B.forEach(function (b) {
                  0 === b[1].indexOf("rgba")
                    ? ((w = f.parse(b[1])),
                      (t = w.get("rgb")),
                      (A = w.get("a")))
                    : ((t = b[1]), (A = 1));
                  b = d
                    .createElement("stop")
                    .attr({ offset: b[0], "stop-color": t, "stop-opacity": A })
                    .add(z);
                  z.stops.push(b);
                });
              }
              F = "url(" + d.url + "#" + M + ")";
              b.setAttribute(c, F);
              b.gradient = Q;
              e.toString = function () {
                return F;
              };
            }
          });
        };
        F.prototype.css = function (e) {
          var c = this.styles,
            b = {},
            d = this.element,
            w = "",
            g = !c,
            k = ["textOutline", "textOverflow", "width"];
          e && e.color && (e.fill = e.color);
          c &&
            r(e, function (e, d) {
              c && c[d] !== e && ((b[d] = e), (g = !0));
            });
          if (g) {
            c && (e = m(c, b));
            if (e)
              if (null === e.width || "auto" === e.width) delete this.textWidth;
              else if ("text" === d.nodeName.toLowerCase() && e.width)
                var h = (this.textWidth = N(e.width));
            this.styles = e;
            h && !H && this.renderer.forExport && delete e.width;
            if (d.namespaceURI === this.SVG_NS) {
              var l = function (b, c) {
                return "-" + c.toLowerCase();
              };
              r(e, function (b, c) {
                -1 === k.indexOf(c) &&
                  (w += c.replace(/([A-Z])/g, l) + ":" + b + ";");
              });
              w && E(d, "style", w);
            } else t(d, e);
            this.added &&
              ("text" === this.element.nodeName &&
                this.renderer.buildText(this),
              e && e.textOutline && this.applyTextOutline(e.textOutline));
          }
          return this;
        };
        F.prototype.dashstyleSetter = function (e) {
          var c = this["stroke-width"];
          "inherit" === c && (c = 1);
          if ((e = e && e.toLowerCase())) {
            var b = e
              .replace("shortdashdotdot", "3,1,1,1,1,1,")
              .replace("shortdashdot", "3,1,1,1")
              .replace("shortdot", "1,1,")
              .replace("shortdash", "3,1,")
              .replace("longdash", "8,3,")
              .replace(/dot/g, "1,3,")
              .replace("dash", "4,3,")
              .replace(/,$/, "")
              .split(",");
            for (e = b.length; e--; ) b[e] = "" + N(b[e]) * A(c, NaN);
            e = b.join(",").replace(/NaN/g, "none");
            this.element.setAttribute("stroke-dasharray", e);
          }
        };
        F.prototype.destroy = function () {
          var e = this,
            c = e.element || {},
            b = e.renderer,
            d = (b.isSVG && "SPAN" === c.nodeName && e.parentGroup) || void 0,
            w = c.ownerSVGElement;
          c.onclick = c.onmouseout = c.onmouseover = c.onmousemove = c.point = null;
          B(e);
          if (e.clipPath && w) {
            var g = e.clipPath;
            [].forEach.call(
              w.querySelectorAll("[clip-path],[CLIP-PATH]"),
              function (b) {
                -1 < b.getAttribute("clip-path").indexOf(g.element.id) &&
                  b.removeAttribute("clip-path");
              }
            );
            e.clipPath = g.destroy();
          }
          if (e.stops) {
            for (w = 0; w < e.stops.length; w++) e.stops[w].destroy();
            e.stops.length = 0;
            e.stops = void 0;
          }
          e.safeRemoveChild(c);
          for (
            b.styledMode || e.destroyShadows();
            d && d.div && 0 === d.div.childNodes.length;

          )
            (c = d.parentGroup),
              e.safeRemoveChild(d.div),
              delete d.div,
              (d = c);
          e.alignTo && u(b.alignedObjects, e);
          r(e, function (b, c) {
            e[c] && e[c].parentGroup === e && e[c].destroy && e[c].destroy();
            delete e[c];
          });
        };
        F.prototype.destroyShadows = function () {
          (this.shadows || []).forEach(function (e) {
            this.safeRemoveChild(e);
          }, this);
          this.shadows = void 0;
        };
        F.prototype.destroyTextPath = function (e, c) {
          var b = e.getElementsByTagName("text")[0];
          if (b) {
            if (
              (b.removeAttribute("dx"),
              b.removeAttribute("dy"),
              c.element.setAttribute("id", ""),
              this.textPathWrapper && b.getElementsByTagName("textPath").length)
            ) {
              for (e = this.textPathWrapper.element.childNodes; e.length; )
                b.appendChild(e[0]);
              b.removeChild(this.textPathWrapper.element);
            }
          } else if (e.getAttribute("dx") || e.getAttribute("dy"))
            e.removeAttribute("dx"), e.removeAttribute("dy");
          this.textPathWrapper &&
            (this.textPathWrapper = this.textPathWrapper.destroy());
        };
        F.prototype.dSetter = function (e, c, b) {
          l(e) &&
            ("string" === typeof e[0] && (e = this.renderer.pathToSegments(e)),
            (this.pathArray = e),
            (e = e.reduce(function (b, c, e) {
              return c && c.join
                ? (e ? b + " " : "") + c.join(" ")
                : (c || "").toString();
            }, "")));
          /(NaN| {2}|^$)/.test(e) && (e = "M 0 0");
          this[c] !== e && (b.setAttribute(c, e), (this[c] = e));
        };
        F.prototype.fadeOut = function (e) {
          var c = this;
          c.animate(
            { opacity: 0 },
            {
              duration: A(e, 150),
              complete: function () {
                c.attr({ y: -9999 }).hide();
              },
            }
          );
        };
        F.prototype.fillSetter = function (e, c, b) {
          "string" === typeof e
            ? b.setAttribute(c, e)
            : e && this.complexColor(e, c, b);
        };
        F.prototype.getBBox = function (e, c) {
          var b,
            d = this.renderer,
            w = this.element,
            g = this.styles,
            h = this.textStr,
            l = d.cache,
            r = d.cacheKeys,
            x = w.namespaceURI === this.SVG_NS;
          c = A(c, this.rotation, 0);
          var p = d.styledMode
            ? w && F.prototype.getStyle.call(w, "font-size")
            : g && g.fontSize;
          if (I(h)) {
            var B = h.toString();
            -1 === B.indexOf("<") && (B = B.replace(/[0-9]/g, "0"));
            B += [
              "",
              c,
              p,
              this.textWidth,
              g && g.textOverflow,
              g && g.fontWeight,
            ].join();
          }
          B && !e && (b = l[B]);
          if (!b) {
            if (x || d.forExport) {
              try {
                var t =
                  this.fakeTS &&
                  function (b) {
                    [].forEach.call(
                      w.querySelectorAll(".highcharts-text-outline"),
                      function (c) {
                        c.style.display = b;
                      }
                    );
                  };
                k(t) && t("none");
                b = w.getBBox
                  ? m({}, w.getBBox())
                  : { width: w.offsetWidth, height: w.offsetHeight };
                k(t) && t("");
              } catch (V) {
                ("");
              }
              if (!b || 0 > b.width) b = { width: 0, height: 0 };
            } else b = this.htmlGetBBox();
            d.isSVG &&
              ((e = b.width),
              (d = b.height),
              x &&
                (b.height = d =
                  { "11px,17": 14, "13px,20": 16 }[
                    g && g.fontSize + "," + Math.round(d)
                  ] || d),
              c &&
                ((g = c * y),
                (b.width =
                  Math.abs(d * Math.sin(g)) + Math.abs(e * Math.cos(g))),
                (b.height =
                  Math.abs(d * Math.cos(g)) + Math.abs(e * Math.sin(g)))));
            if (B && 0 < b.height) {
              for (; 250 < r.length; ) delete l[r.shift()];
              l[B] || r.push(B);
              l[B] = b;
            }
          }
          return b;
        };
        F.prototype.getStyle = function (e) {
          return L.getComputedStyle(this.element || this, "").getPropertyValue(
            e
          );
        };
        F.prototype.hasClass = function (e) {
          return -1 !== ("" + this.attr("class")).split(" ").indexOf(e);
        };
        F.prototype.hide = function (e) {
          e ? this.attr({ y: -9999 }) : this.attr({ visibility: "hidden" });
          return this;
        };
        F.prototype.htmlGetBBox = function () {
          return { height: 0, width: 0, x: 0, y: 0 };
        };
        F.prototype.init = function (e, c) {
          this.element =
            "span" === c ? p(c) : D.createElementNS(this.SVG_NS, c);
          this.renderer = e;
          h(this, "afterInit");
        };
        F.prototype.invert = function (e) {
          this.inverted = e;
          this.updateTransform();
          return this;
        };
        F.prototype.on = function (e, c) {
          var b,
            d,
            w = this.element,
            g;
          G && "click" === e
            ? ((w.ontouchstart = function (c) {
                b = c.touches[0].clientX;
                d = c.touches[0].clientY;
              }),
              (w.ontouchend = function (e) {
                (b &&
                  4 <=
                    Math.sqrt(
                      Math.pow(b - e.changedTouches[0].clientX, 2) +
                        Math.pow(d - e.changedTouches[0].clientY, 2)
                    )) ||
                  c.call(w, e);
                g = !0;
                e.preventDefault();
              }),
              (w.onclick = function (b) {
                g || c.call(w, b);
              }))
            : (w["on" + e] = c);
          return this;
        };
        F.prototype.opacitySetter = function (e, c, b) {
          this[c] = e;
          b.setAttribute(c, e);
        };
        F.prototype.removeClass = function (e) {
          return this.attr(
            "class",
            ("" + this.attr("class"))
              .replace(d(e) ? new RegExp("(^| )" + e + "( |$)") : e, " ")
              .replace(/ +/g, " ")
              .trim()
          );
        };
        F.prototype.removeTextOutline = function (e) {
          for (var c = e.length, b; c--; )
            (b = e[c]),
              "highcharts-text-outline" === b.getAttribute("class") &&
                u(e, this.element.removeChild(b));
        };
        F.prototype.safeRemoveChild = function (e) {
          var c = e.parentNode;
          c && c.removeChild(e);
        };
        F.prototype.setRadialReference = function (e) {
          var c =
            this.element.gradient &&
            this.renderer.gradients[this.element.gradient];
          this.element.radialReference = e;
          c &&
            c.radAttr &&
            c.animate(this.renderer.getRadialAttr(e, c.radAttr));
          return this;
        };
        F.prototype.setTextPath = function (e, c) {
          var b = this.element,
            d = { textAnchor: "text-anchor" },
            w = !1,
            k = this.textPathWrapper,
            h = !k;
          c = x(
            !0,
            {
              enabled: !0,
              attributes: { dy: -5, startOffset: "50%", textAnchor: "middle" },
            },
            c
          );
          var l = c.attributes;
          if (e && c && c.enabled) {
            k && null === k.element.parentNode
              ? ((h = !0), (k = k.destroy()))
              : k &&
                this.removeTextOutline.call(
                  k.parentGroup,
                  [].slice.call(b.getElementsByTagName("tspan"))
                );
            this.options &&
              this.options.padding &&
              (l.dx = -this.options.padding);
            k ||
              ((this.textPathWrapper = k = this.renderer.createElement(
                "textPath"
              )),
              (w = !0));
            var m = k.element;
            (c = e.element.getAttribute("id")) ||
              e.element.setAttribute("id", (c = R()));
            if (h)
              for (e = b.getElementsByTagName("tspan"); e.length; )
                e[0].setAttribute("y", 0),
                  g(l.dx) && e[0].setAttribute("x", -l.dx),
                  m.appendChild(e[0]);
            w && k && k.add({ element: this.text ? this.text.element : b });
            m.setAttributeNS(
              "http://www.w3.org/1999/xlink",
              "href",
              this.renderer.url + "#" + c
            );
            I(l.dy) && (m.parentNode.setAttribute("dy", l.dy), delete l.dy);
            I(l.dx) && (m.parentNode.setAttribute("dx", l.dx), delete l.dx);
            r(l, function (b, c) {
              m.setAttribute(d[c] || c, b);
            });
            b.removeAttribute("transform");
            this.removeTextOutline.call(
              k,
              [].slice.call(b.getElementsByTagName("tspan"))
            );
            this.text &&
              !this.renderer.styledMode &&
              this.attr({ fill: "none", "stroke-width": 0 });
            this.applyTextOutline = this.updateTransform = J;
          } else
            k &&
              (delete this.updateTransform,
              delete this.applyTextOutline,
              this.destroyTextPath(b, e),
              this.updateTransform(),
              this.options &&
                this.options.rotation &&
                this.applyTextOutline(this.options.style.textOutline));
          return this;
        };
        F.prototype.shadow = function (e, c, b) {
          var d = [],
            g = this.element,
            k = !1,
            h = this.oldShadowOptions;
          var l = {
            color: "#000000",
            offsetX: 1,
            offsetY: 1,
            opacity: 0.15,
            width: 3,
          };
          var x;
          !0 === e ? (x = l) : "object" === typeof e && (x = m(l, e));
          x &&
            (x &&
              h &&
              r(x, function (b, c) {
                b !== h[c] && (k = !0);
              }),
            k && this.destroyShadows(),
            (this.oldShadowOptions = x));
          if (!x) this.destroyShadows();
          else if (!this.shadows) {
            var p = x.opacity / x.width;
            var B = this.parentInverted
              ? "translate(-1,-1)"
              : "translate(" + x.offsetX + ", " + x.offsetY + ")";
            for (l = 1; l <= x.width; l++) {
              var t = g.cloneNode(!1);
              var A = 2 * x.width + 1 - 2 * l;
              E(t, {
                stroke: e.color || "#000000",
                "stroke-opacity": p * l,
                "stroke-width": A,
                transform: B,
                fill: "none",
              });
              t.setAttribute(
                "class",
                (t.getAttribute("class") || "") + " highcharts-shadow"
              );
              b &&
                (E(t, "height", Math.max(E(t, "height") - A, 0)),
                (t.cutHeight = A));
              c
                ? c.element.appendChild(t)
                : g.parentNode && g.parentNode.insertBefore(t, g);
              d.push(t);
            }
            this.shadows = d;
          }
          return this;
        };
        F.prototype.show = function (e) {
          return this.attr({ visibility: e ? "inherit" : "visible" });
        };
        F.prototype.strokeSetter = function (e, c, b) {
          this[c] = e;
          this.stroke && this["stroke-width"]
            ? (F.prototype.fillSetter.call(this, this.stroke, "stroke", b),
              b.setAttribute("stroke-width", this["stroke-width"]),
              (this.hasStroke = !0))
            : "stroke-width" === c && 0 === e && this.hasStroke
            ? (b.removeAttribute("stroke"), (this.hasStroke = !1))
            : this.renderer.styledMode &&
              this["stroke-width"] &&
              (b.setAttribute("stroke-width", this["stroke-width"]),
              (this.hasStroke = !0));
        };
        F.prototype.strokeWidth = function () {
          if (!this.renderer.styledMode) return this["stroke-width"] || 0;
          var e = this.getStyle("stroke-width"),
            c = 0;
          if (e.indexOf("px") === e.length - 2) c = N(e);
          else if ("" !== e) {
            var b = D.createElementNS(v, "rect");
            E(b, { width: e, "stroke-width": 0 });
            this.element.parentNode.appendChild(b);
            c = b.getBBox().width;
            b.parentNode.removeChild(b);
          }
          return c;
        };
        F.prototype.symbolAttr = function (e) {
          var c = this;
          "x y r start end width height innerR anchorX anchorY clockwise"
            .split(" ")
            .forEach(function (b) {
              c[b] = A(e[b], c[b]);
            });
          c.attr({
            d: c.renderer.symbols[c.symbolName](c.x, c.y, c.width, c.height, c),
          });
        };
        F.prototype.textSetter = function (e) {
          e !== this.textStr &&
            (delete this.textPxLength,
            (this.textStr = e),
            this.added && this.renderer.buildText(this));
        };
        F.prototype.titleSetter = function (e) {
          var c = this.element.getElementsByTagName("title")[0];
          c ||
            ((c = D.createElementNS(this.SVG_NS, "title")),
            this.element.appendChild(c));
          c.firstChild && c.removeChild(c.firstChild);
          c.appendChild(
            D.createTextNode(
              String(A(e, ""))
                .replace(/<[^>]*>/g, "")
                .replace(/&lt;/g, "<")
                .replace(/&gt;/g, ">")
            )
          );
        };
        F.prototype.toFront = function () {
          var e = this.element;
          e.parentNode.appendChild(e);
          return this;
        };
        F.prototype.translate = function (e, c) {
          return this.attr({ translateX: e, translateY: c });
        };
        F.prototype.updateShadows = function (e, c, b) {
          var d = this.shadows;
          if (d)
            for (var g = d.length; g--; )
              b.call(
                d[g],
                "height" === e
                  ? Math.max(c - (d[g].cutHeight || 0), 0)
                  : "d" === e
                  ? this.d
                  : c,
                e,
                d[g]
              );
        };
        F.prototype.updateTransform = function () {
          var e = this.translateX || 0,
            c = this.translateY || 0,
            b = this.scaleX,
            d = this.scaleY,
            g = this.inverted,
            k = this.rotation,
            h = this.matrix,
            l = this.element;
          g && ((e += this.width), (c += this.height));
          e = ["translate(" + e + "," + c + ")"];
          I(h) && e.push("matrix(" + h.join(",") + ")");
          g
            ? e.push("rotate(90) scale(-1,1)")
            : k &&
              e.push(
                "rotate(" +
                  k +
                  " " +
                  A(this.rotationOriginX, l.getAttribute("x"), 0) +
                  " " +
                  A(this.rotationOriginY, l.getAttribute("y") || 0) +
                  ")"
              );
          (I(b) || I(d)) && e.push("scale(" + A(b, 1) + " " + A(d, 1) + ")");
          e.length && l.setAttribute("transform", e.join(" "));
        };
        F.prototype.visibilitySetter = function (e, c, b) {
          "inherit" === e
            ? b.removeAttribute(c)
            : this[c] !== e && b.setAttribute(c, e);
          this[c] = e;
        };
        F.prototype.xGetter = function (e) {
          "circle" === this.element.nodeName &&
            ("x" === e ? (e = "cx") : "y" === e && (e = "cy"));
          return this._defaultGetter(e);
        };
        F.prototype.zIndexSetter = function (e, c) {
          var b = this.renderer,
            d = this.parentGroup,
            g = (d || b).element || b.box,
            k = this.element,
            h = !1;
          b = g === b.box;
          var l = this.added;
          var r;
          I(e)
            ? (k.setAttribute("data-z-index", e),
              (e = +e),
              this[c] === e && (l = !1))
            : I(this[c]) && k.removeAttribute("data-z-index");
          this[c] = e;
          if (l) {
            (e = this.zIndex) && d && (d.handleZ = !0);
            c = g.childNodes;
            for (r = c.length - 1; 0 <= r && !h; r--) {
              d = c[r];
              l = d.getAttribute("data-z-index");
              var m = !I(l);
              if (d !== k)
                if (0 > e && m && !b && !r) g.insertBefore(k, c[r]), (h = !0);
                else if (N(l) <= e || (m && (!I(e) || 0 <= e)))
                  g.insertBefore(k, c[r + 1] || null), (h = !0);
            }
            h || (g.insertBefore(k, c[b ? 3 : 0] || null), (h = !0));
          }
          return h;
        };
        return F;
      })();
      n.prototype["stroke-widthSetter"] = n.prototype.strokeSetter;
      n.prototype.yGetter = n.prototype.xGetter;
      n.prototype.matrixSetter = n.prototype.rotationOriginXSetter = n.prototype.rotationOriginYSetter = n.prototype.rotationSetter = n.prototype.scaleXSetter = n.prototype.scaleYSetter = n.prototype.translateXSetter = n.prototype.translateYSetter = n.prototype.verticalAlignSetter = function (
        d,
        e
      ) {
        this[e] = d;
        this.doTransform = !0;
      };
      a.SVGElement = n;
      return a.SVGElement;
    }
  );
  O(
    n,
    "Core/Renderer/SVG/SVGLabel.js",
    [n["Core/Renderer/SVG/SVGElement.js"], n["Core/Utilities.js"]],
    function (f, a) {
      var n =
          (this && this.__extends) ||
          (function () {
            var a = function (f, L) {
              a =
                Object.setPrototypeOf ||
                ({ __proto__: [] } instanceof Array &&
                  function (a, f) {
                    a.__proto__ = f;
                  }) ||
                function (a, f) {
                  for (var q in f) f.hasOwnProperty(q) && (a[q] = f[q]);
                };
              return a(f, L);
            };
            return function (f, L) {
              function q() {
                this.constructor = f;
              }
              a(f, L);
              f.prototype =
                null === L
                  ? Object.create(L)
                  : ((q.prototype = L.prototype), new q());
            };
          })(),
        y = a.defined,
        D = a.extend,
        G = a.isNumber,
        C = a.merge,
        J = a.removeEvent;
      return (function (a) {
        function v(f, q, H, E, p, t, I, u, m, h) {
          var l = a.call(this) || this;
          l.init(f, "g");
          l.textStr = q;
          l.x = H;
          l.y = E;
          l.anchorX = t;
          l.anchorY = I;
          l.baseline = m;
          l.className = h;
          "button" !== h && l.addClass("highcharts-label");
          h && l.addClass("highcharts-" + h);
          l.text = f.text("", 0, 0, u).attr({ zIndex: 1 });
          if ("string" === typeof p) {
            var k = /^url\((.*?)\)$/.test(p);
            if (l.renderer.symbols[p] || k) l.symbolKey = p;
          }
          l.bBox = v.emptyBBox;
          l.padding = 3;
          l.paddingLeft = 0;
          l.baselineOffset = 0;
          l.needsBox = f.styledMode || k;
          l.deferredAttr = {};
          l.alignFactor = 0;
          return l;
        }
        n(v, a);
        v.prototype.alignSetter = function (a) {
          a = { left: 0, center: 0.5, right: 1 }[a];
          a !== this.alignFactor &&
            ((this.alignFactor = a),
            this.bBox && G(this.xSetting) && this.attr({ x: this.xSetting }));
        };
        v.prototype.anchorXSetter = function (a, f) {
          this.anchorX = a;
          this.boxAttr(
            f,
            Math.round(a) - this.getCrispAdjust() - this.xSetting
          );
        };
        v.prototype.anchorYSetter = function (a, f) {
          this.anchorY = a;
          this.boxAttr(f, a - this.ySetting);
        };
        v.prototype.boxAttr = function (a, f) {
          this.box ? this.box.attr(a, f) : (this.deferredAttr[a] = f);
        };
        v.prototype.css = function (a) {
          if (a) {
            var q = {};
            a = C(a);
            v.textProps.forEach(function (f) {
              "undefined" !== typeof a[f] && ((q[f] = a[f]), delete a[f]);
            });
            this.text.css(q);
            var L = "fontSize" in q || "fontWeight" in q;
            if ("width" in q || L)
              this.updateBoxSize(), L && this.updateTextPadding();
          }
          return f.prototype.css.call(this, a);
        };
        v.prototype.destroy = function () {
          J(this.element, "mouseenter");
          J(this.element, "mouseleave");
          this.text && this.text.destroy();
          this.box && (this.box = this.box.destroy());
          f.prototype.destroy.call(this);
        };
        v.prototype.fillSetter = function (a, f) {
          a && (this.needsBox = !0);
          this.fill = a;
          this.boxAttr(f, a);
        };
        v.prototype.getBBox = function () {
          var a = this.bBox,
            f = this.padding;
          return {
            width: a.width + 2 * f,
            height: a.height + 2 * f,
            x: a.x - f,
            y: a.y - f,
          };
        };
        v.prototype.getCrispAdjust = function () {
          return this.renderer.styledMode && this.box
            ? (this.box.strokeWidth() % 2) / 2
            : ((this["stroke-width"] ? parseInt(this["stroke-width"], 10) : 0) %
                2) /
                2;
        };
        v.prototype.heightSetter = function (a) {
          this.heightSetting = a;
        };
        v.prototype.on = function (a, q) {
          var v = this,
            E = v.text,
            p = E && "SPAN" === E.element.tagName ? E : void 0;
          if (p) {
            var t = function (t) {
              (("mouseenter" === a || "mouseleave" === a) &&
                t.relatedTarget instanceof Element &&
                (v.element.contains(t.relatedTarget) ||
                  p.element.contains(t.relatedTarget))) ||
                q.call(v.element, t);
            };
            p.on(a, t);
          }
          f.prototype.on.call(v, a, t || q);
          return v;
        };
        v.prototype.onAdd = function () {
          var a = this.textStr;
          this.text.add(this);
          this.attr({ text: y(a) ? a : "", x: this.x, y: this.y });
          this.box &&
            y(this.anchorX) &&
            this.attr({ anchorX: this.anchorX, anchorY: this.anchorY });
        };
        v.prototype.paddingSetter = function (a) {
          y(a) &&
            a !== this.padding &&
            ((this.padding = a), this.updateTextPadding());
        };
        v.prototype.paddingLeftSetter = function (a) {
          y(a) &&
            a !== this.paddingLeft &&
            ((this.paddingLeft = a), this.updateTextPadding());
        };
        v.prototype.rSetter = function (a, f) {
          this.boxAttr(f, a);
        };
        v.prototype.shadow = function (a) {
          a &&
            !this.renderer.styledMode &&
            (this.updateBoxSize(), this.box && this.box.shadow(a));
          return this;
        };
        v.prototype.strokeSetter = function (a, f) {
          this.stroke = a;
          this.boxAttr(f, a);
        };
        v.prototype["stroke-widthSetter"] = function (a, f) {
          a && (this.needsBox = !0);
          this["stroke-width"] = a;
          this.boxAttr(f, a);
        };
        v.prototype["text-alignSetter"] = function (a) {
          this.textAlign = a;
        };
        v.prototype.textSetter = function (a) {
          "undefined" !== typeof a && this.text.attr({ text: a });
          this.updateBoxSize();
          this.updateTextPadding();
        };
        v.prototype.updateBoxSize = function () {
          var a = this.text.element.style,
            f = {},
            H = this.padding,
            E = this.paddingLeft,
            p =
              (G(this.widthSetting) &&
                G(this.heightSetting) &&
                !this.textAlign) ||
              !y(this.text.textStr)
                ? v.emptyBBox
                : this.text.getBBox();
          this.width = (this.widthSetting || p.width || 0) + 2 * H + E;
          this.height = (this.heightSetting || p.height || 0) + 2 * H;
          this.baselineOffset =
            H +
            Math.min(
              this.renderer.fontMetrics(a && a.fontSize, this.text).b,
              p.height || Infinity
            );
          this.needsBox &&
            (this.box ||
              ((a = this.box = this.symbolKey
                ? this.renderer.symbol(this.symbolKey)
                : this.renderer.rect()),
              a.addClass(
                ("button" === this.className ? "" : "highcharts-label-box") +
                  (this.className
                    ? " highcharts-" + this.className + "-box"
                    : "")
              ),
              a.add(this),
              (a = this.getCrispAdjust()),
              (f.x = a),
              (f.y = (this.baseline ? -this.baselineOffset : 0) + a)),
            (f.width = Math.round(this.width)),
            (f.height = Math.round(this.height)),
            this.box.attr(D(f, this.deferredAttr)),
            (this.deferredAttr = {}));
          this.bBox = p;
        };
        v.prototype.updateTextPadding = function () {
          var a = this.text,
            f = this.baseline ? 0 : this.baselineOffset,
            v = this.paddingLeft + this.padding;
          y(this.widthSetting) &&
            this.bBox &&
            ("center" === this.textAlign || "right" === this.textAlign) &&
            (v +=
              { center: 0.5, right: 1 }[this.textAlign] *
              (this.widthSetting - this.bBox.width));
          if (v !== a.x || f !== a.y)
            a.attr("x", v),
              a.hasBoxWidthChanged &&
                ((this.bBox = a.getBBox(!0)), this.updateBoxSize()),
              "undefined" !== typeof f && a.attr("y", f);
          a.x = v;
          a.y = f;
        };
        v.prototype.widthSetter = function (a) {
          this.widthSetting = G(a) ? a : void 0;
        };
        v.prototype.xSetter = function (a) {
          this.x = a;
          this.alignFactor &&
            ((a -=
              this.alignFactor *
              ((this.widthSetting || this.bBox.width) + 2 * this.padding)),
            (this["forceAnimate:x"] = !0));
          this.xSetting = Math.round(a);
          this.attr("translateX", this.xSetting);
        };
        v.prototype.ySetter = function (a) {
          this.ySetting = this.y = Math.round(a);
          this.attr("translateY", this.ySetting);
        };
        v.emptyBBox = { width: 0, height: 0, x: 0, y: 0 };
        v.textProps = "color cursor direction fontFamily fontSize fontStyle fontWeight lineHeight textAlign textDecoration textOutline textOverflow width".split(
          " "
        );
        return v;
      })(f);
    }
  );
  O(
    n,
    "Core/Renderer/SVG/SVGRenderer.js",
    [
      n["Core/Color.js"],
      n["Core/Globals.js"],
      n["Core/Renderer/SVG/SVGElement.js"],
      n["Core/Renderer/SVG/SVGLabel.js"],
      n["Core/Utilities.js"],
    ],
    function (f, a, n, y, D) {
      var G = D.addEvent,
        C = D.attr,
        J = D.createElement,
        H = D.css,
        v = D.defined,
        L = D.destroyObjectProperties,
        q = D.extend,
        K = D.isArray,
        E = D.isNumber,
        p = D.isObject,
        t = D.isString,
        I = D.merge,
        u = D.objectEach,
        m = D.pick,
        h = D.pInt,
        l = D.splat,
        k = D.uniqueKey,
        g = a.charts,
        d = a.deg2rad,
        x = a.doc,
        r = a.isFirefox,
        A = a.isMS,
        N = a.isWebKit;
      D = a.noop;
      var B = a.svg,
        M = a.SVG_NS,
        R = a.symbolSizes,
        F = a.win,
        e = (function () {
          function c(b, c, e, d, g, k, h) {
            this.width = this.url = this.style = this.isSVG = this.imgCount = this.height = this.gradients = this.globalAnimation = this.defs = this.chartIndex = this.cacheKeys = this.cache = this.boxWrapper = this.box = this.alignedObjects = void 0;
            this.init(b, c, e, d, g, k, h);
          }
          c.prototype.init = function (b, c, e, d, g, k, h) {
            var w = this.createElement("svg").attr({
              version: "1.1",
              class: "highcharts-root",
            });
            h || w.css(this.getStyle(d));
            d = w.element;
            b.appendChild(d);
            C(b, "dir", "ltr");
            -1 === b.innerHTML.indexOf("xmlns") && C(d, "xmlns", this.SVG_NS);
            this.isSVG = !0;
            this.box = d;
            this.boxWrapper = w;
            this.alignedObjects = [];
            this.url =
              (r || N) && x.getElementsByTagName("base").length
                ? F.location.href
                    .split("#")[0]
                    .replace(/<[^>]*>/g, "")
                    .replace(/([\('\)])/g, "\\$1")
                    .replace(/ /g, "%20")
                : "";
            this.createElement("desc")
              .add()
              .element.appendChild(
                x.createTextNode("Created with Highcharts 8.2.0")
              );
            this.defs = this.createElement("defs").add();
            this.allowHTML = k;
            this.forExport = g;
            this.styledMode = h;
            this.gradients = {};
            this.cache = {};
            this.cacheKeys = [];
            this.imgCount = 0;
            this.setSize(c, e, !1);
            var z;
            r &&
              b.getBoundingClientRect &&
              ((c = function () {
                H(b, { left: 0, top: 0 });
                z = b.getBoundingClientRect();
                H(b, {
                  left: Math.ceil(z.left) - z.left + "px",
                  top: Math.ceil(z.top) - z.top + "px",
                });
              }),
              c(),
              (this.unSubPixelFix = G(F, "resize", c)));
          };
          c.prototype.definition = function (b) {
            function c(b, d) {
              var g;
              l(b).forEach(function (b) {
                var w = e.createElement(b.tagName),
                  z = {};
                u(b, function (b, c) {
                  "tagName" !== c &&
                    "children" !== c &&
                    "textContent" !== c &&
                    (z[c] = b);
                });
                w.attr(z);
                w.add(d || e.defs);
                b.textContent &&
                  w.element.appendChild(x.createTextNode(b.textContent));
                c(b.children || [], w);
                g = w;
              });
              return g;
            }
            var e = this;
            return c(b);
          };
          c.prototype.getStyle = function (b) {
            return (this.style = q(
              {
                fontFamily:
                  '"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif',
                fontSize: "12px",
              },
              b
            ));
          };
          c.prototype.setStyle = function (b) {
            this.boxWrapper.css(this.getStyle(b));
          };
          c.prototype.isHidden = function () {
            return !this.boxWrapper.getBBox().width;
          };
          c.prototype.destroy = function () {
            var b = this.defs;
            this.box = null;
            this.boxWrapper = this.boxWrapper.destroy();
            L(this.gradients || {});
            this.gradients = null;
            b && (this.defs = b.destroy());
            this.unSubPixelFix && this.unSubPixelFix();
            return (this.alignedObjects = null);
          };
          c.prototype.createElement = function (b) {
            var c = new this.Element();
            c.init(this, b);
            return c;
          };
          c.prototype.getRadialAttr = function (b, c) {
            return {
              cx: b[0] - b[2] / 2 + c.cx * b[2],
              cy: b[1] - b[2] / 2 + c.cy * b[2],
              r: c.r * b[2],
            };
          };
          c.prototype.truncate = function (b, c, e, d, g, k, h) {
            var w = this,
              z = b.rotation,
              l,
              r = d ? 1 : 0,
              m = (e || d).length,
              P = m,
              p = [],
              t = function (b) {
                c.firstChild && c.removeChild(c.firstChild);
                b && c.appendChild(x.createTextNode(b));
              },
              B = function (z, k) {
                k = k || z;
                if ("undefined" === typeof p[k])
                  if (c.getSubStringLength)
                    try {
                      p[k] = g + c.getSubStringLength(0, d ? k + 1 : k);
                    } catch (da) {
                      ("");
                    }
                  else
                    w.getSpanWidth &&
                      (t(h(e || d, z)), (p[k] = g + w.getSpanWidth(b, c)));
                return p[k];
              },
              a;
            b.rotation = 0;
            var A = B(c.textContent.length);
            if ((a = g + A > k)) {
              for (; r <= m; )
                (P = Math.ceil((r + m) / 2)),
                  d && (l = h(d, P)),
                  (A = B(P, l && l.length - 1)),
                  r === m ? (r = m + 1) : A > k ? (m = P - 1) : (r = P);
              0 === m
                ? t("")
                : (e && m === e.length - 1) || t(l || h(e || d, P));
            }
            d && d.splice(0, P);
            b.actualWidth = A;
            b.rotation = z;
            return a;
          };
          c.prototype.buildText = function (b) {
            var c = b.element,
              e = this,
              d = e.forExport,
              g = m(b.textStr, "").toString(),
              k = -1 !== g.indexOf("<"),
              l = c.childNodes,
              r,
              p = C(c, "x"),
              a = b.styles,
              A = b.textWidth,
              I = a && a.lineHeight,
              Q = a && a.textOutline,
              f = a && "ellipsis" === a.textOverflow,
              F = a && "nowrap" === a.whiteSpace,
              N = a && a.fontSize,
              q,
              E = l.length;
            a = A && !b.added && this.box;
            var v = function (b) {
                var d;
                e.styledMode ||
                  (d = /(px|em)$/.test(b && b.style.fontSize)
                    ? b.style.fontSize
                    : N || e.style.fontSize || 12);
                return I
                  ? h(I)
                  : e.fontMetrics(d, b.getAttribute("style") ? b : c).h;
              },
              R = function (b, c) {
                u(e.escapes, function (e, d) {
                  (c && -1 !== c.indexOf(e)) ||
                    (b = b.toString().replace(new RegExp(e, "g"), d));
                });
                return b;
              },
              n = function (b, c) {
                var e = b.indexOf("<");
                b = b.substring(e, b.indexOf(">") - e);
                e = b.indexOf(c + "=");
                if (
                  -1 !== e &&
                  ((e = e + c.length + 1),
                  (c = b.charAt(e)),
                  '"' === c || "'" === c)
                )
                  return (b = b.substring(e + 1)), b.substring(0, b.indexOf(c));
              },
              K = /<br.*?>/g;
            var J = [g, f, F, I, Q, N, A].join();
            if (J !== b.textCache) {
              for (b.textCache = J; E--; ) c.removeChild(l[E]);
              k || Q || f || A || (-1 !== g.indexOf(" ") && (!F || K.test(g)))
                ? (a && a.appendChild(c),
                  k
                    ? ((g = e.styledMode
                        ? g
                            .replace(
                              /<(b|strong)>/g,
                              '<span class="highcharts-strong">'
                            )
                            .replace(
                              /<(i|em)>/g,
                              '<span class="highcharts-emphasized">'
                            )
                        : g
                            .replace(
                              /<(b|strong)>/g,
                              '<span style="font-weight:bold">'
                            )
                            .replace(
                              /<(i|em)>/g,
                              '<span style="font-style:italic">'
                            )),
                      (g = g
                        .replace(/<a/g, "<span")
                        .replace(/<\/(b|strong|i|em|a)>/g, "</span>")
                        .split(K)))
                    : (g = [g]),
                  (g = g.filter(function (b) {
                    return "" !== b;
                  })),
                  g.forEach(function (g, w) {
                    var k = 0,
                      z = 0;
                    g = g
                      .replace(/^\s+|\s+$/g, "")
                      .replace(/<span/g, "|||<span")
                      .replace(/<\/span>/g, "</span>|||");
                    var h = g.split("|||");
                    h.forEach(function (g) {
                      if ("" !== g || 1 === h.length) {
                        var l = {},
                          m = x.createElementNS(e.SVG_NS, "tspan"),
                          P,
                          a;
                        (P = n(g, "class")) && C(m, "class", P);
                        if ((P = n(g, "style")))
                          (P = P.replace(/(;| |^)color([ :])/, "$1fill$2")),
                            C(m, "style", P);
                        if (
                          (a = n(g, "href")) &&
                          !d &&
                          -1 ===
                            a.split(":")[0].toLowerCase().indexOf("javascript")
                        ) {
                          var t = x.createElementNS(e.SVG_NS, "a");
                          C(t, "href", a);
                          C(m, "class", "highcharts-anchor");
                          t.appendChild(m);
                          e.styledMode || H(m, { cursor: "pointer" });
                        }
                        g = R(g.replace(/<[a-zA-Z\/](.|\n)*?>/g, "") || " ");
                        if (" " !== g) {
                          m.appendChild(x.createTextNode(g));
                          k ? (l.dx = 0) : w && null !== p && (l.x = p);
                          C(m, l);
                          c.appendChild(t || m);
                          !k &&
                            q &&
                            (!B && d && H(m, { display: "block" }),
                            C(m, "dy", v(m)));
                          if (A) {
                            var Q = g.replace(/([^\^])-/g, "$1- ").split(" ");
                            l = !F && (1 < h.length || w || 1 < Q.length);
                            t = 0;
                            a = v(m);
                            if (f)
                              r = e.truncate(
                                b,
                                m,
                                g,
                                void 0,
                                0,
                                Math.max(0, A - parseInt(N || 12, 10)),
                                function (b, c) {
                                  return b.substring(0, c) + "\u2026";
                                }
                              );
                            else if (l)
                              for (; Q.length; )
                                Q.length &&
                                  !F &&
                                  0 < t &&
                                  ((m = x.createElementNS(M, "tspan")),
                                  C(m, { dy: a, x: p }),
                                  P && C(m, "style", P),
                                  m.appendChild(
                                    x.createTextNode(
                                      Q.join(" ").replace(/- /g, "-")
                                    )
                                  ),
                                  c.appendChild(m)),
                                  e.truncate(
                                    b,
                                    m,
                                    null,
                                    Q,
                                    0 === t ? z : 0,
                                    A,
                                    function (b, c) {
                                      return Q.slice(0, c)
                                        .join(" ")
                                        .replace(/- /g, "-");
                                    }
                                  ),
                                  (z = b.actualWidth),
                                  t++;
                          }
                          k++;
                        }
                      }
                    });
                    q = q || c.childNodes.length;
                  }),
                  f &&
                    r &&
                    b.attr("title", R(b.textStr || "", ["&lt;", "&gt;"])),
                  a && a.removeChild(c),
                  t(Q) && b.applyTextOutline && b.applyTextOutline(Q))
                : c.appendChild(x.createTextNode(R(g)));
            }
          };
          c.prototype.getContrast = function (b) {
            b = f.parse(b).rgba;
            b[0] *= 1;
            b[1] *= 1.2;
            b[2] *= 0.5;
            return 459 < b[0] + b[1] + b[2] ? "#000000" : "#FFFFFF";
          };
          c.prototype.button = function (b, c, e, d, g, k, h, l, r, m) {
            var w = this.label(b, c, e, r, void 0, void 0, m, void 0, "button"),
              z = 0,
              x = this.styledMode;
            b = ((g = g ? I(g) : g) && g.style) || {};
            g && g.style && delete g.style;
            w.attr(I({ padding: 8, r: 2 }, g));
            if (!x) {
              g = I(
                {
                  fill: "#f7f7f7",
                  stroke: "#cccccc",
                  "stroke-width": 1,
                  style: {
                    color: "#333333",
                    cursor: "pointer",
                    fontWeight: "normal",
                  },
                },
                { style: b },
                g
              );
              var P = g.style;
              delete g.style;
              k = I(g, { fill: "#e6e6e6" }, k);
              var t = k.style;
              delete k.style;
              h = I(
                g,
                {
                  fill: "#e6ebf5",
                  style: { color: "#000000", fontWeight: "bold" },
                },
                h
              );
              var a = h.style;
              delete h.style;
              l = I(g, { style: { color: "#cccccc" } }, l);
              var p = l.style;
              delete l.style;
            }
            G(w.element, A ? "mouseover" : "mouseenter", function () {
              3 !== z && w.setState(1);
            });
            G(w.element, A ? "mouseout" : "mouseleave", function () {
              3 !== z && w.setState(z);
            });
            w.setState = function (b) {
              1 !== b && (w.state = z = b);
              w.removeClass(
                /highcharts-button-(normal|hover|pressed|disabled)/
              ).addClass(
                "highcharts-button-" +
                  ["normal", "hover", "pressed", "disabled"][b || 0]
              );
              x || w.attr([g, k, h, l][b || 0]).css([P, t, a, p][b || 0]);
            };
            x || w.attr(g).css(q({ cursor: "default" }, P));
            return w.on("click", function (b) {
              3 !== z && d.call(w, b);
            });
          };
          c.prototype.crispLine = function (b, c, e) {
            void 0 === e && (e = "round");
            var d = b[0],
              g = b[1];
            d[1] === g[1] && (d[1] = g[1] = Math[e](d[1]) - (c % 2) / 2);
            d[2] === g[2] && (d[2] = g[2] = Math[e](d[2]) + (c % 2) / 2);
            return b;
          };
          c.prototype.path = function (b) {
            var c = this.styledMode ? {} : { fill: "none" };
            K(b) ? (c.d = b) : p(b) && q(c, b);
            return this.createElement("path").attr(c);
          };
          c.prototype.circle = function (b, c, e) {
            b = p(b) ? b : "undefined" === typeof b ? {} : { x: b, y: c, r: e };
            c = this.createElement("circle");
            c.xSetter = c.ySetter = function (b, c, e) {
              e.setAttribute("c" + c, b);
            };
            return c.attr(b);
          };
          c.prototype.arc = function (b, c, e, d, g, k) {
            p(b)
              ? ((d = b), (c = d.y), (e = d.r), (b = d.x))
              : (d = { innerR: d, start: g, end: k });
            b = this.symbol("arc", b, c, e, e, d);
            b.r = e;
            return b;
          };
          c.prototype.rect = function (b, c, e, d, g, k) {
            g = p(b) ? b.r : g;
            var w = this.createElement("rect");
            b = p(b)
              ? b
              : "undefined" === typeof b
              ? {}
              : { x: b, y: c, width: Math.max(e, 0), height: Math.max(d, 0) };
            this.styledMode ||
              ("undefined" !== typeof k &&
                ((b.strokeWidth = k), (b = w.crisp(b))),
              (b.fill = "none"));
            g && (b.r = g);
            w.rSetter = function (b, c, e) {
              w.r = b;
              C(e, { rx: b, ry: b });
            };
            w.rGetter = function () {
              return w.r;
            };
            return w.attr(b);
          };
          c.prototype.setSize = function (b, c, e) {
            var d = this.alignedObjects,
              g = d.length;
            this.width = b;
            this.height = c;
            for (
              this.boxWrapper.animate(
                { width: b, height: c },
                {
                  step: function () {
                    this.attr({
                      viewBox:
                        "0 0 " + this.attr("width") + " " + this.attr("height"),
                    });
                  },
                  duration: m(e, !0) ? void 0 : 0,
                }
              );
              g--;

            )
              d[g].align();
          };
          c.prototype.g = function (b) {
            var c = this.createElement("g");
            return b ? c.attr({ class: "highcharts-" + b }) : c;
          };
          c.prototype.image = function (b, c, e, d, g, k) {
            var w = { preserveAspectRatio: "none" },
              h = function (b, c) {
                b.setAttributeNS
                  ? b.setAttributeNS("http://www.w3.org/1999/xlink", "href", c)
                  : b.setAttribute("hc-svg-href", c);
              },
              z = function (c) {
                h(l.element, b);
                k.call(l, c);
              };
            1 < arguments.length && q(w, { x: c, y: e, width: d, height: g });
            var l = this.createElement("image").attr(w);
            k
              ? (h(
                  l.element,
                  "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="
                ),
                (w = new F.Image()),
                G(w, "load", z),
                (w.src = b),
                w.complete && z({}))
              : h(l.element, b);
            return l;
          };
          c.prototype.symbol = function (b, c, e, d, k, h) {
            var w = this,
              z = /^url\((.*?)\)$/,
              l = z.test(b),
              r = !l && (this.symbols[b] ? b : "circle"),
              P = r && this.symbols[r],
              t;
            if (P) {
              "number" === typeof c &&
                (t = P.call(
                  this.symbols,
                  Math.round(c || 0),
                  Math.round(e || 0),
                  d || 0,
                  k || 0,
                  h
                ));
              var a = this.path(t);
              w.styledMode || a.attr("fill", "none");
              q(a, { symbolName: r, x: c, y: e, width: d, height: k });
              h && q(a, h);
            } else if (l) {
              var p = b.match(z)[1];
              a = this.image(p);
              a.imgwidth = m(R[p] && R[p].width, h && h.width);
              a.imgheight = m(R[p] && R[p].height, h && h.height);
              var B = function () {
                a.attr({ width: a.width, height: a.height });
              };
              ["width", "height"].forEach(function (b) {
                a[b + "Setter"] = function (b, c) {
                  var e = {},
                    d = this["img" + c],
                    g = "width" === c ? "translateX" : "translateY";
                  this[c] = b;
                  v(d) &&
                    (h &&
                      "within" === h.backgroundSize &&
                      this.width &&
                      this.height &&
                      (d = Math.round(
                        d *
                          Math.min(
                            this.width / this.imgwidth,
                            this.height / this.imgheight
                          )
                      )),
                    this.element && this.element.setAttribute(c, d),
                    this.alignByTranslate ||
                      ((e[g] = ((this[c] || 0) - d) / 2), this.attr(e)));
                };
              });
              v(c) && a.attr({ x: c, y: e });
              a.isImg = !0;
              v(a.imgwidth) && v(a.imgheight)
                ? B()
                : (a.attr({ width: 0, height: 0 }),
                  J("img", {
                    onload: function () {
                      var b = g[w.chartIndex];
                      0 === this.width &&
                        (H(this, { position: "absolute", top: "-999em" }),
                        x.body.appendChild(this));
                      R[p] = { width: this.width, height: this.height };
                      a.imgwidth = this.width;
                      a.imgheight = this.height;
                      a.element && B();
                      this.parentNode && this.parentNode.removeChild(this);
                      w.imgCount--;
                      if (!w.imgCount && b && !b.hasLoaded) b.onload();
                    },
                    src: p,
                  }),
                  this.imgCount++);
            }
            return a;
          };
          c.prototype.clipRect = function (b, c, e, d) {
            var g = k() + "-",
              w = this.createElement("clipPath").attr({ id: g }).add(this.defs);
            b = this.rect(b, c, e, d, 0).add(w);
            b.id = g;
            b.clipPath = w;
            b.count = 0;
            return b;
          };
          c.prototype.text = function (b, c, e, d) {
            var g = {};
            if (d && (this.allowHTML || !this.forExport))
              return this.html(b, c, e);
            g.x = Math.round(c || 0);
            e && (g.y = Math.round(e));
            v(b) && (g.text = b);
            b = this.createElement("text").attr(g);
            d ||
              (b.xSetter = function (b, c, e) {
                var d = e.getElementsByTagName("tspan"),
                  g = e.getAttribute(c),
                  k;
                for (k = 0; k < d.length; k++) {
                  var w = d[k];
                  w.getAttribute(c) === g && w.setAttribute(c, b);
                }
                e.setAttribute(c, b);
              });
            return b;
          };
          c.prototype.fontMetrics = function (b, c) {
            b =
              (!this.styledMode && /px/.test(b)) || !F.getComputedStyle
                ? b ||
                  (c && c.style && c.style.fontSize) ||
                  (this.style && this.style.fontSize)
                : c && n.prototype.getStyle.call(c, "font-size");
            b = /px/.test(b) ? h(b) : 12;
            c = 24 > b ? b + 3 : Math.round(1.2 * b);
            return { h: c, b: Math.round(0.8 * c), f: b };
          };
          c.prototype.rotCorr = function (b, c, e) {
            var g = b;
            c && e && (g = Math.max(g * Math.cos(c * d), 4));
            return { x: (-b / 3) * Math.sin(c * d), y: g };
          };
          c.prototype.pathToSegments = function (b) {
            for (
              var c = [],
                e = [],
                d = { A: 8, C: 7, H: 2, L: 3, M: 3, Q: 5, S: 5, T: 3, V: 2 },
                g = 0;
              g < b.length;
              g++
            )
              t(e[0]) &&
                E(b[g]) &&
                e.length === d[e[0].toUpperCase()] &&
                b.splice(g, 0, e[0].replace("M", "L").replace("m", "l")),
                "string" === typeof b[g] &&
                  (e.length && c.push(e.slice(0)), (e.length = 0)),
                e.push(b[g]);
            c.push(e.slice(0));
            return c;
          };
          c.prototype.label = function (b, c, e, d, g, k, h, l, r) {
            return new y(this, b, c, e, d, g, k, h, l, r);
          };
          return c;
        })();
      e.prototype.Element = n;
      e.prototype.SVG_NS = M;
      e.prototype.draw = D;
      e.prototype.escapes = {
        "&": "&amp;",
        "<": "&lt;",
        ">": "&gt;",
        "'": "&#39;",
        '"': "&quot;",
      };
      e.prototype.symbols = {
        circle: function (c, b, e, d) {
          return this.arc(c + e / 2, b + d / 2, e / 2, d / 2, {
            start: 0.5 * Math.PI,
            end: 2.5 * Math.PI,
            open: !1,
          });
        },
        square: function (c, b, e, d) {
          return [
            ["M", c, b],
            ["L", c + e, b],
            ["L", c + e, b + d],
            ["L", c, b + d],
            ["Z"],
          ];
        },
        triangle: function (c, b, e, d) {
          return [
            ["M", c + e / 2, b],
            ["L", c + e, b + d],
            ["L", c, b + d],
            ["Z"],
          ];
        },
        "triangle-down": function (c, b, e, d) {
          return [["M", c, b], ["L", c + e, b], ["L", c + e / 2, b + d], ["Z"]];
        },
        diamond: function (c, b, e, d) {
          return [
            ["M", c + e / 2, b],
            ["L", c + e, b + d / 2],
            ["L", c + e / 2, b + d],
            ["L", c, b + d / 2],
            ["Z"],
          ];
        },
        arc: function (c, b, e, d, g) {
          var k = [];
          if (g) {
            var h = g.start || 0,
              w = g.end || 0,
              z = g.r || e;
            e = g.r || d || e;
            var l = 0.001 > Math.abs(w - h - 2 * Math.PI);
            w -= 0.001;
            d = g.innerR;
            l = m(g.open, l);
            var r = Math.cos(h),
              x = Math.sin(h),
              a = Math.cos(w),
              P = Math.sin(w);
            h = m(g.longArc, 0.001 > w - h - Math.PI ? 0 : 1);
            k.push(
              ["M", c + z * r, b + e * x],
              ["A", z, e, 0, h, m(g.clockwise, 1), c + z * a, b + e * P]
            );
            v(d) &&
              k.push(
                l ? ["M", c + d * a, b + d * P] : ["L", c + d * a, b + d * P],
                [
                  "A",
                  d,
                  d,
                  0,
                  h,
                  v(g.clockwise) ? 1 - g.clockwise : 0,
                  c + d * r,
                  b + d * x,
                ]
              );
            l || k.push(["Z"]);
          }
          return k;
        },
        callout: function (c, b, e, d, g) {
          var k = Math.min((g && g.r) || 0, e, d),
            h = k + 6,
            w = (g && g.anchorX) || 0;
          g = (g && g.anchorY) || 0;
          var l = [
            ["M", c + k, b],
            ["L", c + e - k, b],
            ["C", c + e, b, c + e, b, c + e, b + k],
            ["L", c + e, b + d - k],
            ["C", c + e, b + d, c + e, b + d, c + e - k, b + d],
            ["L", c + k, b + d],
            ["C", c, b + d, c, b + d, c, b + d - k],
            ["L", c, b + k],
            ["C", c, b, c, b, c + k, b],
          ];
          w && w > e
            ? g > b + h && g < b + d - h
              ? l.splice(
                  3,
                  1,
                  ["L", c + e, g - 6],
                  ["L", c + e + 6, g],
                  ["L", c + e, g + 6],
                  ["L", c + e, b + d - k]
                )
              : l.splice(
                  3,
                  1,
                  ["L", c + e, d / 2],
                  ["L", w, g],
                  ["L", c + e, d / 2],
                  ["L", c + e, b + d - k]
                )
            : w && 0 > w
            ? g > b + h && g < b + d - h
              ? l.splice(
                  7,
                  1,
                  ["L", c, g + 6],
                  ["L", c - 6, g],
                  ["L", c, g - 6],
                  ["L", c, b + k]
                )
              : l.splice(
                  7,
                  1,
                  ["L", c, d / 2],
                  ["L", w, g],
                  ["L", c, d / 2],
                  ["L", c, b + k]
                )
            : g && g > d && w > c + h && w < c + e - h
            ? l.splice(
                5,
                1,
                ["L", w + 6, b + d],
                ["L", w, b + d + 6],
                ["L", w - 6, b + d],
                ["L", c + k, b + d]
              )
            : g &&
              0 > g &&
              w > c + h &&
              w < c + e - h &&
              l.splice(
                1,
                1,
                ["L", w - 6, b],
                ["L", w, b - 6],
                ["L", w + 6, b],
                ["L", e - k, b]
              );
          return l;
        },
      };
      a.SVGRenderer = e;
      a.Renderer = a.SVGRenderer;
      return a.Renderer;
    }
  );
  O(
    n,
    "Core/Renderer/HTML/HTML.js",
    [
      n["Core/Globals.js"],
      n["Core/Renderer/SVG/SVGElement.js"],
      n["Core/Renderer/SVG/SVGRenderer.js"],
      n["Core/Utilities.js"],
    ],
    function (f, a, n, y) {
      var D = y.attr,
        G = y.createElement,
        C = y.css,
        J = y.defined,
        H = y.extend,
        v = y.pick,
        L = y.pInt,
        q = f.isFirefox,
        K = f.isMS,
        E = f.isWebKit,
        p = f.win;
      H(a.prototype, {
        htmlCss: function (a) {
          var p = "SPAN" === this.element.tagName && a && "width" in a,
            t = v(p && a.width, void 0);
          if (p) {
            delete a.width;
            this.textWidth = t;
            var m = !0;
          }
          a &&
            "ellipsis" === a.textOverflow &&
            ((a.whiteSpace = "nowrap"), (a.overflow = "hidden"));
          this.styles = H(this.styles, a);
          C(this.element, a);
          m && this.htmlUpdateTransform();
          return this;
        },
        htmlGetBBox: function () {
          var a = this.element;
          return {
            x: a.offsetLeft,
            y: a.offsetTop,
            width: a.offsetWidth,
            height: a.offsetHeight,
          };
        },
        htmlUpdateTransform: function () {
          if (this.added) {
            var a = this.renderer,
              p = this.element,
              u = this.translateX || 0,
              m = this.translateY || 0,
              h = this.x || 0,
              l = this.y || 0,
              k = this.textAlign || "left",
              g = { left: 0, center: 0.5, right: 1 }[k],
              d = this.styles,
              x = d && d.whiteSpace;
            C(p, { marginLeft: u, marginTop: m });
            !a.styledMode &&
              this.shadows &&
              this.shadows.forEach(function (d) {
                C(d, { marginLeft: u + 1, marginTop: m + 1 });
              });
            this.inverted &&
              [].forEach.call(p.childNodes, function (d) {
                a.invertChild(d, p);
              });
            if ("SPAN" === p.tagName) {
              d = this.rotation;
              var r = this.textWidth && L(this.textWidth),
                A = [d, k, p.innerHTML, this.textWidth, this.textAlign].join(),
                f;
              (f = r !== this.oldTextWidth) &&
                !(f = r > this.oldTextWidth) &&
                ((f = this.textPxLength) ||
                  (C(p, { width: "", whiteSpace: x || "nowrap" }),
                  (f = p.offsetWidth)),
                (f = f > r));
              f &&
              (/[ \-]/.test(p.textContent || p.innerText) ||
                "ellipsis" === p.style.textOverflow)
                ? (C(p, {
                    width: r + "px",
                    display: "block",
                    whiteSpace: x || "normal",
                  }),
                  (this.oldTextWidth = r),
                  (this.hasBoxWidthChanged = !0))
                : (this.hasBoxWidthChanged = !1);
              A !== this.cTT &&
                ((x = a.fontMetrics(p.style.fontSize, p).b),
                !J(d) ||
                  (d === (this.oldRotation || 0) && k === this.oldAlign) ||
                  this.setSpanRotation(d, g, x),
                this.getSpanCorrection(
                  (!J(d) && this.textPxLength) || p.offsetWidth,
                  x,
                  g,
                  d,
                  k
                ));
              C(p, {
                left: h + (this.xCorr || 0) + "px",
                top: l + (this.yCorr || 0) + "px",
              });
              this.cTT = A;
              this.oldRotation = d;
              this.oldAlign = k;
            }
          } else this.alignOnAdd = !0;
        },
        setSpanRotation: function (a, p, u) {
          var m = {},
            h = this.renderer.getTransformKey();
          m[h] = m.transform = "rotate(" + a + "deg)";
          m[h + (q ? "Origin" : "-origin")] = m.transformOrigin =
            100 * p + "% " + u + "px";
          C(this.element, m);
        },
        getSpanCorrection: function (a, p, u) {
          this.xCorr = -a * u;
          this.yCorr = -p;
        },
      });
      H(n.prototype, {
        getTransformKey: function () {
          return K && !/Edge/.test(p.navigator.userAgent)
            ? "-ms-transform"
            : E
            ? "-webkit-transform"
            : q
            ? "MozTransform"
            : p.opera
            ? "-o-transform"
            : "";
        },
        html: function (p, f, u) {
          var m = this.createElement("span"),
            h = m.element,
            l = m.renderer,
            k = l.isSVG,
            g = function (d, g) {
              ["opacity", "visibility"].forEach(function (k) {
                d[k + "Setter"] = function (h, l, r) {
                  var m = d.div ? d.div.style : g;
                  a.prototype[k + "Setter"].call(this, h, l, r);
                  m && (m[l] = h);
                };
              });
              d.addedSetters = !0;
            };
          m.textSetter = function (d) {
            d !== h.innerHTML && (delete this.bBox, delete this.oldTextWidth);
            this.textStr = d;
            h.innerHTML = v(d, "");
            m.doTransform = !0;
          };
          k && g(m, m.element.style);
          m.xSetter = m.ySetter = m.alignSetter = m.rotationSetter = function (
            d,
            g
          ) {
            "align" === g ? (m.alignValue = m.textAlign = d) : (m[g] = d);
            m.doTransform = !0;
          };
          m.afterSetters = function () {
            this.doTransform &&
              (this.htmlUpdateTransform(), (this.doTransform = !1));
          };
          m.attr({ text: p, x: Math.round(f), y: Math.round(u) }).css({
            position: "absolute",
          });
          l.styledMode ||
            m.css({
              fontFamily: this.style.fontFamily,
              fontSize: this.style.fontSize,
            });
          h.style.whiteSpace = "nowrap";
          m.css = m.htmlCss;
          k &&
            (m.add = function (d) {
              var k = l.box.parentNode,
                r = [];
              if ((this.parentGroup = d)) {
                var a = d.div;
                if (!a) {
                  for (; d; ) r.push(d), (d = d.parentGroup);
                  r.reverse().forEach(function (d) {
                    function h(g, e) {
                      d[e] = g;
                      "translateX" === e
                        ? (x.left = g + "px")
                        : (x.top = g + "px");
                      d.doTransform = !0;
                    }
                    var l = D(d.element, "class");
                    a = d.div =
                      d.div ||
                      G(
                        "div",
                        l ? { className: l } : void 0,
                        {
                          position: "absolute",
                          left: (d.translateX || 0) + "px",
                          top: (d.translateY || 0) + "px",
                          display: d.display,
                          opacity: d.opacity,
                          pointerEvents: d.styles && d.styles.pointerEvents,
                        },
                        a || k
                      );
                    var x = a.style;
                    H(d, {
                      classSetter: (function (d) {
                        return function (e) {
                          this.element.setAttribute("class", e);
                          d.className = e;
                        };
                      })(a),
                      on: function () {
                        r[0].div &&
                          m.on.apply({ element: r[0].div }, arguments);
                        return d;
                      },
                      translateXSetter: h,
                      translateYSetter: h,
                    });
                    d.addedSetters || g(d);
                  });
                }
              } else a = k;
              a.appendChild(h);
              m.added = !0;
              m.alignOnAdd && m.htmlUpdateTransform();
              return m;
            });
          return m;
        },
      });
    }
  );
  O(
    n,
    "Core/Axis/Tick.js",
    [n["Core/Globals.js"], n["Core/Utilities.js"]],
    function (f, a) {
      var n = a.clamp,
        y = a.correctFloat,
        D = a.defined,
        G = a.destroyObjectProperties,
        C = a.extend,
        J = a.fireEvent,
        H = a.isNumber,
        v = a.merge,
        L = a.objectEach,
        q = a.pick,
        K = f.deg2rad;
      a = (function () {
        function a(a, t, f, u, m) {
          this.isNewLabel = this.isNew = !0;
          this.axis = a;
          this.pos = t;
          this.type = f || "";
          this.parameters = m || {};
          this.tickmarkOffset = this.parameters.tickmarkOffset;
          this.options = this.parameters.options;
          J(this, "init");
          f || u || this.addLabel();
        }
        a.prototype.addLabel = function () {
          var a = this,
            t = a.axis,
            f = t.options,
            u = t.chart,
            m = t.categories,
            h = t.logarithmic,
            l = t.names,
            k = a.pos,
            g = q(a.options && a.options.labels, f.labels),
            d = t.tickPositions,
            x = k === d[0],
            r = k === d[d.length - 1];
          l = this.parameters.category || (m ? q(m[k], l[k], k) : k);
          var A = a.label;
          m = (!g.step || 1 === g.step) && 1 === t.tickInterval;
          d = d.info;
          var N, B;
          if (t.dateTime && d) {
            var M = u.time.resolveDTLFormat(
              f.dateTimeLabelFormats[
                (!f.grid && d.higherRanks[k]) || d.unitName
              ]
            );
            var v = M.main;
          }
          a.isFirst = x;
          a.isLast = r;
          a.formatCtx = {
            axis: t,
            chart: u,
            isFirst: x,
            isLast: r,
            dateTimeLabelFormat: v,
            tickPositionInfo: d,
            value: h ? y(h.lin2log(l)) : l,
            pos: k,
          };
          f = t.labelFormatter.call(a.formatCtx, this.formatCtx);
          if ((B = M && M.list))
            a.shortenLabel = function () {
              for (N = 0; N < B.length; N++)
                if (
                  (A.attr({
                    text: t.labelFormatter.call(
                      C(a.formatCtx, { dateTimeLabelFormat: B[N] })
                    ),
                  }),
                  A.getBBox().width < t.getSlotWidth(a) - 2 * q(g.padding, 5))
                )
                  return;
              A.attr({ text: "" });
            };
          m && t._addedPlotLB && a.moveLabel(f, g);
          D(A) || a.movedLabel
            ? A &&
              A.textStr !== f &&
              !m &&
              (!A.textWidth ||
                (g.style && g.style.width) ||
                A.styles.width ||
                A.css({ width: null }),
              A.attr({ text: f }),
              (A.textPxLength = A.getBBox().width))
            : ((a.label = A = a.createLabel({ x: 0, y: 0 }, f, g)),
              (a.rotation = 0));
        };
        a.prototype.createLabel = function (a, t, f) {
          var p = this.axis,
            m = p.chart;
          if (
            (a =
              D(t) && f.enabled
                ? m.renderer.text(t, a.x, a.y, f.useHTML).add(p.labelGroup)
                : null)
          )
            m.styledMode || a.css(v(f.style)),
              (a.textPxLength = a.getBBox().width);
          return a;
        };
        a.prototype.destroy = function () {
          G(this, this.axis);
        };
        a.prototype.getPosition = function (a, t, f, u) {
          var m = this.axis,
            h = m.chart,
            l = (u && h.oldChartHeight) || h.chartHeight;
          a = {
            x: a
              ? y(m.translate(t + f, null, null, u) + m.transB)
              : m.left +
                m.offset +
                (m.opposite
                  ? ((u && h.oldChartWidth) || h.chartWidth) - m.right - m.left
                  : 0),
            y: a
              ? l - m.bottom + m.offset - (m.opposite ? m.height : 0)
              : y(l - m.translate(t + f, null, null, u) - m.transB),
          };
          a.y = n(a.y, -1e5, 1e5);
          J(this, "afterGetPosition", { pos: a });
          return a;
        };
        a.prototype.getLabelPosition = function (a, t, f, u, m, h, l, k) {
          var g = this.axis,
            d = g.transA,
            x =
              g.isLinked && g.linkedParent
                ? g.linkedParent.reversed
                : g.reversed,
            r = g.staggerLines,
            p = g.tickRotCorr || { x: 0, y: 0 },
            I = m.y,
            B =
              u || g.reserveSpaceDefault
                ? 0
                : -g.labelOffset * ("center" === g.labelAlign ? 0.5 : 1),
            M = {};
          D(I) ||
            (I =
              0 === g.side
                ? f.rotation
                  ? -8
                  : -f.getBBox().height
                : 2 === g.side
                ? p.y + 8
                : Math.cos(f.rotation * K) *
                  (p.y - f.getBBox(!1, 0).height / 2));
          a = a + m.x + B + p.x - (h && u ? h * d * (x ? -1 : 1) : 0);
          t = t + I - (h && !u ? h * d * (x ? 1 : -1) : 0);
          r &&
            ((f = (l / (k || 1)) % r),
            g.opposite && (f = r - f - 1),
            (t += (g.labelOffset / r) * f));
          M.x = a;
          M.y = Math.round(t);
          J(this, "afterGetLabelPosition", {
            pos: M,
            tickmarkOffset: h,
            index: l,
          });
          return M;
        };
        a.prototype.getLabelSize = function () {
          return this.label
            ? this.label.getBBox()[this.axis.horiz ? "height" : "width"]
            : 0;
        };
        a.prototype.getMarkPath = function (a, t, f, u, m, h) {
          return h.crispLine(
            [
              ["M", a, t],
              ["L", a + (m ? 0 : -f), t + (m ? f : 0)],
            ],
            u
          );
        };
        a.prototype.handleOverflow = function (a) {
          var p = this.axis,
            f = p.options.labels,
            u = a.x,
            m = p.chart.chartWidth,
            h = p.chart.spacing,
            l = q(p.labelLeft, Math.min(p.pos, h[3]));
          h = q(
            p.labelRight,
            Math.max(p.isRadial ? 0 : p.pos + p.len, m - h[1])
          );
          var k = this.label,
            g = this.rotation,
            d = { left: 0, center: 0.5, right: 1 }[
              p.labelAlign || k.attr("align")
            ],
            x = k.getBBox().width,
            r = p.getSlotWidth(this),
            A = r,
            N = 1,
            B,
            M = {};
          if (g || "justify" !== q(f.overflow, "justify"))
            0 > g && u - d * x < l
              ? (B = Math.round(u / Math.cos(g * K) - l))
              : 0 < g &&
                u + d * x > h &&
                (B = Math.round((m - u) / Math.cos(g * K)));
          else if (
            ((m = u + (1 - d) * x),
            u - d * x < l
              ? (A = a.x + A * (1 - d) - l)
              : m > h && ((A = h - a.x + A * d), (N = -1)),
            (A = Math.min(r, A)),
            A < r &&
              "center" === p.labelAlign &&
              (a.x += N * (r - A - d * (r - Math.min(x, A)))),
            x > A || (p.autoRotation && (k.styles || {}).width))
          )
            B = A;
          B &&
            (this.shortenLabel
              ? this.shortenLabel()
              : ((M.width = Math.floor(B) + "px"),
                (f.style || {}).textOverflow || (M.textOverflow = "ellipsis"),
                k.css(M)));
        };
        a.prototype.moveLabel = function (a, t) {
          var p = this,
            f = p.label,
            m = !1,
            h = p.axis,
            l = h.reversed;
          f && f.textStr === a
            ? ((p.movedLabel = f), (m = !0), delete p.label)
            : L(h.ticks, function (g) {
                m ||
                  g.isNew ||
                  g === p ||
                  !g.label ||
                  g.label.textStr !== a ||
                  ((p.movedLabel = g.label),
                  (m = !0),
                  (g.labelPos = p.movedLabel.xy),
                  delete g.label);
              });
          if (!m && (p.labelPos || f)) {
            var k = p.labelPos || f.xy;
            f = h.horiz ? (l ? 0 : h.width + h.left) : k.x;
            h = h.horiz ? k.y : l ? h.width + h.left : 0;
            p.movedLabel = p.createLabel({ x: f, y: h }, a, t);
            p.movedLabel && p.movedLabel.attr({ opacity: 0 });
          }
        };
        a.prototype.render = function (a, t, f) {
          var p = this.axis,
            m = p.horiz,
            h = this.pos,
            l = q(this.tickmarkOffset, p.tickmarkOffset);
          h = this.getPosition(m, h, l, t);
          l = h.x;
          var k = h.y;
          p = (m && l === p.pos + p.len) || (!m && k === p.pos) ? -1 : 1;
          f = q(f, 1);
          this.isActive = !0;
          this.renderGridLine(t, f, p);
          this.renderMark(h, f, p);
          this.renderLabel(h, t, f, a);
          this.isNew = !1;
          J(this, "afterRender");
        };
        a.prototype.renderGridLine = function (a, t, f) {
          var p = this.axis,
            m = p.options,
            h = this.gridLine,
            l = {},
            k = this.pos,
            g = this.type,
            d = q(this.tickmarkOffset, p.tickmarkOffset),
            x = p.chart.renderer,
            r = g ? g + "Grid" : "grid",
            A = m[r + "LineWidth"],
            N = m[r + "LineColor"];
          m = m[r + "LineDashStyle"];
          h ||
            (p.chart.styledMode ||
              ((l.stroke = N), (l["stroke-width"] = A), m && (l.dashstyle = m)),
            g || (l.zIndex = 1),
            a && (t = 0),
            (this.gridLine = h = x
              .path()
              .attr(l)
              .addClass("highcharts-" + (g ? g + "-" : "") + "grid-line")
              .add(p.gridGroup)));
          if (
            h &&
            (f = p.getPlotLinePath({
              value: k + d,
              lineWidth: h.strokeWidth() * f,
              force: "pass",
              old: a,
            }))
          )
            h[a || this.isNew ? "attr" : "animate"]({ d: f, opacity: t });
        };
        a.prototype.renderMark = function (a, t, f) {
          var p = this.axis,
            m = p.options,
            h = p.chart.renderer,
            l = this.type,
            k = l ? l + "Tick" : "tick",
            g = p.tickSize(k),
            d = this.mark,
            x = !d,
            r = a.x;
          a = a.y;
          var A = q(m[k + "Width"], !l && p.isXAxis ? 1 : 0);
          m = m[k + "Color"];
          g &&
            (p.opposite && (g[0] = -g[0]),
            x &&
              ((this.mark = d = h
                .path()
                .addClass("highcharts-" + (l ? l + "-" : "") + "tick")
                .add(p.axisGroup)),
              p.chart.styledMode || d.attr({ stroke: m, "stroke-width": A })),
            d[x ? "attr" : "animate"]({
              d: this.getMarkPath(r, a, g[0], d.strokeWidth() * f, p.horiz, h),
              opacity: t,
            }));
        };
        a.prototype.renderLabel = function (a, f, I, u) {
          var m = this.axis,
            h = m.horiz,
            l = m.options,
            k = this.label,
            g = l.labels,
            d = g.step;
          m = q(this.tickmarkOffset, m.tickmarkOffset);
          var x = !0,
            r = a.x;
          a = a.y;
          k &&
            H(r) &&
            ((k.xy = a = this.getLabelPosition(r, a, k, h, g, m, u, d)),
            (this.isFirst && !this.isLast && !q(l.showFirstLabel, 1)) ||
            (this.isLast && !this.isFirst && !q(l.showLastLabel, 1))
              ? (x = !1)
              : !h ||
                g.step ||
                g.rotation ||
                f ||
                0 === I ||
                this.handleOverflow(a),
            d && u % d && (x = !1),
            x && H(a.y)
              ? ((a.opacity = I),
                k[this.isNewLabel ? "attr" : "animate"](a),
                (this.isNewLabel = !1))
              : (k.attr("y", -9999), (this.isNewLabel = !0)));
        };
        a.prototype.replaceMovedLabel = function () {
          var a = this.label,
            f = this.axis,
            q = f.reversed;
          if (a && !this.isNew) {
            var u = f.horiz ? (q ? f.left : f.width + f.left) : a.xy.x;
            q = f.horiz ? a.xy.y : q ? f.width + f.top : f.top;
            a.animate({ x: u, y: q, opacity: 0 }, void 0, a.destroy);
            delete this.label;
          }
          f.isDirty = !0;
          this.label = this.movedLabel;
          delete this.movedLabel;
        };
        return a;
      })();
      f.Tick = a;
      return f.Tick;
    }
  );
  O(
    n,
    "Core/Time.js",
    [n["Core/Globals.js"], n["Core/Utilities.js"]],
    function (f, a) {
      var n = a.defined,
        y = a.error,
        D = a.extend,
        G = a.isObject,
        C = a.merge,
        J = a.objectEach,
        H = a.pad,
        v = a.pick,
        L = a.splat,
        q = a.timeUnits,
        K = f.win;
      a = (function () {
        function a(a) {
          this.options = {};
          this.variableTimezone = this.useUTC = !1;
          this.Date = K.Date;
          this.getTimezoneOffset = this.timezoneOffsetFunction();
          this.update(a);
        }
        a.prototype.get = function (a, f) {
          if (this.variableTimezone || this.timezoneOffset) {
            var p = f.getTime(),
              t = p - this.getTimezoneOffset(f);
            f.setTime(t);
            a = f["getUTC" + a]();
            f.setTime(p);
            return a;
          }
          return this.useUTC ? f["getUTC" + a]() : f["get" + a]();
        };
        a.prototype.set = function (a, f, q) {
          if (this.variableTimezone || this.timezoneOffset) {
            if ("Milliseconds" === a || "Seconds" === a || "Minutes" === a)
              return f["setUTC" + a](q);
            var p = this.getTimezoneOffset(f);
            p = f.getTime() - p;
            f.setTime(p);
            f["setUTC" + a](q);
            a = this.getTimezoneOffset(f);
            p = f.getTime() + a;
            return f.setTime(p);
          }
          return this.useUTC ? f["setUTC" + a](q) : f["set" + a](q);
        };
        a.prototype.update = function (a) {
          var f = v(a && a.useUTC, !0);
          this.options = a = C(!0, this.options || {}, a);
          this.Date = a.Date || K.Date || Date;
          this.timezoneOffset = (this.useUTC = f) && a.timezoneOffset;
          this.getTimezoneOffset = this.timezoneOffsetFunction();
          this.variableTimezone = !(f && !a.getTimezoneOffset && !a.timezone);
        };
        a.prototype.makeTime = function (a, t, q, u, m, h) {
          if (this.useUTC) {
            var l = this.Date.UTC.apply(0, arguments);
            var k = this.getTimezoneOffset(l);
            l += k;
            var g = this.getTimezoneOffset(l);
            k !== g
              ? (l += g - k)
              : k - 36e5 !== this.getTimezoneOffset(l - 36e5) ||
                f.isSafari ||
                (l -= 36e5);
          } else
            l = new this.Date(
              a,
              t,
              v(q, 1),
              v(u, 0),
              v(m, 0),
              v(h, 0)
            ).getTime();
          return l;
        };
        a.prototype.timezoneOffsetFunction = function () {
          var a = this,
            f = this.options,
            q = f.moment || K.moment;
          if (!this.useUTC)
            return function (a) {
              return 6e4 * new Date(a.toString()).getTimezoneOffset();
            };
          if (f.timezone) {
            if (q)
              return function (a) {
                return 6e4 * -q.tz(a, f.timezone).utcOffset();
              };
            y(25);
          }
          return this.useUTC && f.getTimezoneOffset
            ? function (a) {
                return 6e4 * f.getTimezoneOffset(a.valueOf());
              }
            : function () {
                return 6e4 * (a.timezoneOffset || 0);
              };
        };
        a.prototype.dateFormat = function (a, t, q) {
          var p;
          if (!n(t) || isNaN(t))
            return (
              (null === (p = f.defaultOptions.lang) || void 0 === p
                ? void 0
                : p.invalidDate) || ""
            );
          a = v(a, "%Y-%m-%d %H:%M:%S");
          var m = this;
          p = new this.Date(t);
          var h = this.get("Hours", p),
            l = this.get("Day", p),
            k = this.get("Date", p),
            g = this.get("Month", p),
            d = this.get("FullYear", p),
            x = f.defaultOptions.lang,
            r = null === x || void 0 === x ? void 0 : x.weekdays,
            A = null === x || void 0 === x ? void 0 : x.shortWeekdays;
          p = D(
            {
              a: A ? A[l] : r[l].substr(0, 3),
              A: r[l],
              d: H(k),
              e: H(k, 2, " "),
              w: l,
              b: x.shortMonths[g],
              B: x.months[g],
              m: H(g + 1),
              o: g + 1,
              y: d.toString().substr(2, 2),
              Y: d,
              H: H(h),
              k: h,
              I: H(h % 12 || 12),
              l: h % 12 || 12,
              M: H(this.get("Minutes", p)),
              p: 12 > h ? "AM" : "PM",
              P: 12 > h ? "am" : "pm",
              S: H(p.getSeconds()),
              L: H(Math.floor(t % 1e3), 3),
            },
            f.dateFormats
          );
          J(p, function (d, g) {
            for (; -1 !== a.indexOf("%" + g); )
              a = a.replace(
                "%" + g,
                "function" === typeof d ? d.call(m, t) : d
              );
          });
          return q ? a.substr(0, 1).toUpperCase() + a.substr(1) : a;
        };
        a.prototype.resolveDTLFormat = function (a) {
          return G(a, !0)
            ? a
            : ((a = L(a)), { main: a[0], from: a[1], to: a[2] });
        };
        a.prototype.getTimeTicks = function (a, f, I, u) {
          var m = this,
            h = [],
            l = {};
          var k = new m.Date(f);
          var g = a.unitRange,
            d = a.count || 1,
            x;
          u = v(u, 1);
          if (n(f)) {
            m.set(
              "Milliseconds",
              k,
              g >= q.second ? 0 : d * Math.floor(m.get("Milliseconds", k) / d)
            );
            g >= q.second &&
              m.set(
                "Seconds",
                k,
                g >= q.minute ? 0 : d * Math.floor(m.get("Seconds", k) / d)
              );
            g >= q.minute &&
              m.set(
                "Minutes",
                k,
                g >= q.hour ? 0 : d * Math.floor(m.get("Minutes", k) / d)
              );
            g >= q.hour &&
              m.set(
                "Hours",
                k,
                g >= q.day ? 0 : d * Math.floor(m.get("Hours", k) / d)
              );
            g >= q.day &&
              m.set(
                "Date",
                k,
                g >= q.month
                  ? 1
                  : Math.max(1, d * Math.floor(m.get("Date", k) / d))
              );
            if (g >= q.month) {
              m.set(
                "Month",
                k,
                g >= q.year ? 0 : d * Math.floor(m.get("Month", k) / d)
              );
              var r = m.get("FullYear", k);
            }
            g >= q.year && m.set("FullYear", k, r - (r % d));
            g === q.week &&
              ((r = m.get("Day", k)),
              m.set("Date", k, m.get("Date", k) - r + u + (r < u ? -7 : 0)));
            r = m.get("FullYear", k);
            u = m.get("Month", k);
            var p = m.get("Date", k),
              t = m.get("Hours", k);
            f = k.getTime();
            m.variableTimezone &&
              (x =
                I - f > 4 * q.month ||
                m.getTimezoneOffset(f) !== m.getTimezoneOffset(I));
            f = k.getTime();
            for (k = 1; f < I; )
              h.push(f),
                (f =
                  g === q.year
                    ? m.makeTime(r + k * d, 0)
                    : g === q.month
                    ? m.makeTime(r, u + k * d)
                    : !x || (g !== q.day && g !== q.week)
                    ? x && g === q.hour && 1 < d
                      ? m.makeTime(r, u, p, t + k * d)
                      : f + g * d
                    : m.makeTime(r, u, p + k * d * (g === q.day ? 1 : 7))),
                k++;
            h.push(f);
            g <= q.hour &&
              1e4 > h.length &&
              h.forEach(function (d) {
                0 === d % 18e5 &&
                  "000000000" === m.dateFormat("%H%M%S%L", d) &&
                  (l[d] = "day");
              });
          }
          h.info = D(a, { higherRanks: l, totalRange: g * d });
          return h;
        };
        return a;
      })();
      f.Time = a;
      return f.Time;
    }
  );
  O(
    n,
    "Core/Options.js",
    [
      n["Core/Globals.js"],
      n["Core/Time.js"],
      n["Core/Color.js"],
      n["Core/Utilities.js"],
    ],
    function (f, a, n, y) {
      n = n.parse;
      y = y.merge;
      f.defaultOptions = {
        colors: "#7cb5ec #434348 #90ed7d #f7a35c #8085e9 #f15c80 #e4d354 #2b908f #f45b5b #91e8e1".split(
          " "
        ),
        symbols: ["circle", "diamond", "square", "triangle", "triangle-down"],
        lang: {
          loading: "Loading...",
          months: "January February March April May June July August September October November December".split(
            " "
          ),
          shortMonths: "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(
            " "
          ),
          weekdays: "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(
            " "
          ),
          decimalPoint: ".",
          numericSymbols: "kMGTPE".split(""),
          resetZoom: "Reset zoom",
          resetZoomTitle: "Reset zoom level 1:1",
          thousandsSep: " ",
        },
        global: {},
        time: {
          Date: void 0,
          getTimezoneOffset: void 0,
          timezone: void 0,
          timezoneOffset: 0,
          useUTC: !0,
        },
        chart: {
          styledMode: !1,
          borderRadius: 0,
          colorCount: 10,
          defaultSeriesType: "line",
          ignoreHiddenSeries: !0,
          spacing: [10, 10, 15, 10],
          resetZoomButton: {
            theme: { zIndex: 6 },
            position: { align: "right", x: -10, y: 10 },
          },
          width: null,
          height: null,
          borderColor: "#335cad",
          backgroundColor: "#ffffff",
          plotBorderColor: "#cccccc",
        },
        title: {
          text: "Chart title",
          align: "center",
          margin: 15,
          widthAdjust: -44,
        },
        subtitle: { text: "", align: "center", widthAdjust: -44 },
        caption: {
          margin: 15,
          text: "",
          align: "left",
          verticalAlign: "bottom",
        },
        plotOptions: {},
        labels: { style: { position: "absolute", color: "#333333" } },
        legend: {
          enabled: !0,
          align: "center",
          alignColumns: !0,
          layout: "horizontal",
          labelFormatter: function () {
            return this.name;
          },
          borderColor: "#999999",
          borderRadius: 0,
          navigation: { activeColor: "#003399", inactiveColor: "#cccccc" },
          itemStyle: {
            color: "#333333",
            cursor: "pointer",
            fontSize: "12px",
            fontWeight: "bold",
            textOverflow: "ellipsis",
          },
          itemHoverStyle: { color: "#000000" },
          itemHiddenStyle: { color: "#cccccc" },
          shadow: !1,
          itemCheckboxStyle: {
            position: "absolute",
            width: "13px",
            height: "13px",
          },
          squareSymbol: !0,
          symbolPadding: 5,
          verticalAlign: "bottom",
          x: 0,
          y: 0,
          title: { style: { fontWeight: "bold" } },
        },
        loading: {
          labelStyle: { fontWeight: "bold", position: "relative", top: "45%" },
          style: {
            position: "absolute",
            backgroundColor: "#ffffff",
            opacity: 0.5,
            textAlign: "center",
          },
        },
        tooltip: {
          enabled: !0,
          animation: f.svg,
          borderRadius: 3,
          dateTimeLabelFormats: {
            millisecond: "%A, %b %e, %H:%M:%S.%L",
            second: "%A, %b %e, %H:%M:%S",
            minute: "%A, %b %e, %H:%M",
            hour: "%A, %b %e, %H:%M",
            day: "%A, %b %e, %Y",
            week: "Week from %A, %b %e, %Y",
            month: "%B %Y",
            year: "%Y",
          },
          footerFormat: "",
          padding: 8,
          snap: f.isTouchDevice ? 25 : 10,
          headerFormat: '<span style="font-size: 10px">{point.key}</span><br/>',
          pointFormat:
            '<span style="color:{point.color}">\u25cf</span> {series.name}: <b>{point.y}</b><br/>',
          backgroundColor: n("#f7f7f7").setOpacity(0.85).get(),
          borderWidth: 1,
          shadow: !0,
          style: {
            color: "#333333",
            cursor: "default",
            fontSize: "12px",
            whiteSpace: "nowrap",
          },
        },
        credits: {
          enabled: !0,
          href: "https://www.highcharts.com?credits",
          position: { align: "right", x: -10, verticalAlign: "bottom", y: -5 },
          style: { cursor: "pointer", color: "#999999", fontSize: "9px" },
          text: "Highcharts.com",
        },
      };
      ("");
      f.time = new a(y(f.defaultOptions.global, f.defaultOptions.time));
      f.dateFormat = function (a, n, C) {
        return f.time.dateFormat(a, n, C);
      };
      return {
        dateFormat: f.dateFormat,
        defaultOptions: f.defaultOptions,
        time: f.time,
      };
    }
  );
  O(
    n,
    "Core/Axis/Axis.js",
    [
      n["Core/Color.js"],
      n["Core/Globals.js"],
      n["Core/Axis/Tick.js"],
      n["Core/Utilities.js"],
      n["Core/Options.js"],
    ],
    function (f, a, n, y, D) {
      var G = y.addEvent,
        C = y.animObject,
        J = y.arrayMax,
        H = y.arrayMin,
        v = y.clamp,
        L = y.correctFloat,
        q = y.defined,
        K = y.destroyObjectProperties,
        E = y.error,
        p = y.extend,
        t = y.fireEvent,
        I = y.format,
        u = y.getMagnitude,
        m = y.isArray,
        h = y.isFunction,
        l = y.isNumber,
        k = y.isString,
        g = y.merge,
        d = y.normalizeTickInterval,
        x = y.objectEach,
        r = y.pick,
        A = y.relativeLength,
        N = y.removeEvent,
        B = y.splat,
        M = y.syncTimeout,
        R = D.defaultOptions,
        F = a.deg2rad;
      y = (function () {
        function e(c, b) {
          this.zoomEnabled = this.width = this.visible = this.userOptions = this.translationSlope = this.transB = this.transA = this.top = this.ticks = this.tickRotCorr = this.tickPositions = this.tickmarkOffset = this.tickInterval = this.tickAmount = this.side = this.series = this.right = this.positiveValuesOnly = this.pos = this.pointRangePadding = this.pointRange = this.plotLinesAndBandsGroups = this.plotLinesAndBands = this.paddedTicks = this.overlap = this.options = this.oldMin = this.oldMax = this.offset = this.names = this.minPixelPadding = this.minorTicks = this.minorTickInterval = this.min = this.maxLabelLength = this.max = this.len = this.left = this.labelFormatter = this.labelEdge = this.isLinked = this.height = this.hasVisibleSeries = this.hasNames = this.coll = this.closestPointRange = this.chart = this.categories = this.bottom = this.alternateBands = void 0;
          this.init(c, b);
        }
        e.prototype.init = function (c, b) {
          var e = b.isX,
            d = this;
          d.chart = c;
          d.horiz = c.inverted && !d.isZAxis ? !e : e;
          d.isXAxis = e;
          d.coll = d.coll || (e ? "xAxis" : "yAxis");
          t(this, "init", { userOptions: b });
          d.opposite = b.opposite;
          d.side =
            b.side || (d.horiz ? (d.opposite ? 0 : 2) : d.opposite ? 1 : 3);
          d.setOptions(b);
          var g = this.options,
            k = g.type;
          d.labelFormatter = g.labels.formatter || d.defaultLabelFormatter;
          d.userOptions = b;
          d.minPixelPadding = 0;
          d.reversed = g.reversed;
          d.visible = !1 !== g.visible;
          d.zoomEnabled = !1 !== g.zoomEnabled;
          d.hasNames = "category" === k || !0 === g.categories;
          d.categories = g.categories || d.hasNames;
          d.names || ((d.names = []), (d.names.keys = {}));
          d.plotLinesAndBandsGroups = {};
          d.positiveValuesOnly = !!d.logarithmic;
          d.isLinked = q(g.linkedTo);
          d.ticks = {};
          d.labelEdge = [];
          d.minorTicks = {};
          d.plotLinesAndBands = [];
          d.alternateBands = {};
          d.len = 0;
          d.minRange = d.userMinRange = g.minRange || g.maxZoom;
          d.range = g.range;
          d.offset = g.offset || 0;
          d.max = null;
          d.min = null;
          d.crosshair = r(
            g.crosshair,
            B(c.options.tooltip.crosshairs)[e ? 0 : 1],
            !1
          );
          b = d.options.events;
          -1 === c.axes.indexOf(d) &&
            (e ? c.axes.splice(c.xAxis.length, 0, d) : c.axes.push(d),
            c[d.coll].push(d));
          d.series = d.series || [];
          c.inverted &&
            !d.isZAxis &&
            e &&
            "undefined" === typeof d.reversed &&
            (d.reversed = !0);
          d.labelRotation = d.options.labels.rotation;
          x(b, function (b, c) {
            h(b) && G(d, c, b);
          });
          t(this, "afterInit");
        };
        e.prototype.setOptions = function (c) {
          this.options = g(
            e.defaultOptions,
            "yAxis" === this.coll && e.defaultYAxisOptions,
            [
              e.defaultTopAxisOptions,
              e.defaultRightAxisOptions,
              e.defaultBottomAxisOptions,
              e.defaultLeftAxisOptions,
            ][this.side],
            g(R[this.coll], c)
          );
          t(this, "afterSetOptions", { userOptions: c });
        };
        e.prototype.defaultLabelFormatter = function () {
          var c = this.axis,
            b = l(this.value) ? this.value : NaN,
            e = c.chart.time,
            d = c.categories,
            g = this.dateTimeLabelFormat,
            k = R.lang,
            h = k.numericSymbols;
          k = k.numericSymbolMagnitude || 1e3;
          var a = h && h.length,
            r = c.options.labels.format;
          c = c.logarithmic ? Math.abs(b) : c.tickInterval;
          var m = this.chart,
            x = m.numberFormatter;
          if (r) var f = I(r, this, m);
          else if (d) f = "" + this.value;
          else if (g) f = e.dateFormat(g, b);
          else if (a && 1e3 <= c)
            for (; a-- && "undefined" === typeof f; )
              (e = Math.pow(k, a + 1)),
                c >= e &&
                  0 === (10 * b) % e &&
                  null !== h[a] &&
                  0 !== b &&
                  (f = x(b / e, -1) + h[a]);
          "undefined" === typeof f &&
            (f = 1e4 <= Math.abs(b) ? x(b, -1) : x(b, -1, void 0, ""));
          return f;
        };
        e.prototype.getSeriesExtremes = function () {
          var c = this,
            b = c.chart,
            e;
          t(this, "getSeriesExtremes", null, function () {
            c.hasVisibleSeries = !1;
            c.dataMin = c.dataMax = c.threshold = null;
            c.softThreshold = !c.isXAxis;
            c.stacking && c.stacking.buildStacks();
            c.series.forEach(function (d) {
              if (d.visible || !b.options.chart.ignoreHiddenSeries) {
                var g = d.options,
                  k = g.threshold;
                c.hasVisibleSeries = !0;
                c.positiveValuesOnly && 0 >= k && (k = null);
                if (c.isXAxis) {
                  if (((g = d.xData), g.length)) {
                    g = c.logarithmic ? g.filter(c.validatePositiveValue) : g;
                    e = d.getXExtremes(g);
                    var h = e.min;
                    var a = e.max;
                    l(h) ||
                      h instanceof Date ||
                      ((g = g.filter(l)),
                      (e = d.getXExtremes(g)),
                      (h = e.min),
                      (a = e.max));
                    g.length &&
                      ((c.dataMin = Math.min(r(c.dataMin, h), h)),
                      (c.dataMax = Math.max(r(c.dataMax, a), a)));
                  }
                } else if (
                  ((d = d.applyExtremes()),
                  l(d.dataMin) &&
                    ((h = d.dataMin),
                    (c.dataMin = Math.min(r(c.dataMin, h), h))),
                  l(d.dataMax) &&
                    ((a = d.dataMax),
                    (c.dataMax = Math.max(r(c.dataMax, a), a))),
                  q(k) && (c.threshold = k),
                  !g.softThreshold || c.positiveValuesOnly)
                )
                  c.softThreshold = !1;
              }
            });
          });
          t(this, "afterGetSeriesExtremes");
        };
        e.prototype.translate = function (c, b, e, d, g, k) {
          var h = this.linkedParent || this,
            a = 1,
            w = 0,
            z = d ? h.oldTransA : h.transA;
          d = d ? h.oldMin : h.min;
          var r = h.minPixelPadding;
          g =
            (h.isOrdinal ||
              (h.brokenAxis && h.brokenAxis.hasBreaks) ||
              (h.logarithmic && g)) &&
            h.lin2val;
          z || (z = h.transA);
          e && ((a *= -1), (w = h.len));
          h.reversed && ((a *= -1), (w -= a * (h.sector || h.len)));
          b
            ? ((c = (c * a + w - r) / z + d), g && (c = h.lin2val(c)))
            : (g && (c = h.val2lin(c)),
              (c = l(d)
                ? a * (c - d) * z + w + a * r + (l(k) ? z * k : 0)
                : void 0));
          return c;
        };
        e.prototype.toPixels = function (c, b) {
          return (
            this.translate(c, !1, !this.horiz, null, !0) + (b ? 0 : this.pos)
          );
        };
        e.prototype.toValue = function (c, b) {
          return this.translate(
            c - (b ? 0 : this.pos),
            !0,
            !this.horiz,
            null,
            !0
          );
        };
        e.prototype.getPlotLinePath = function (c) {
          function b(b, c, e) {
            if (("pass" !== f && b < c) || b > e)
              f ? (b = v(b, c, e)) : (q = !0);
            return b;
          }
          var e = this,
            d = e.chart,
            g = e.left,
            k = e.top,
            h = c.old,
            a = c.value,
            m = c.translatedValue,
            x = c.lineWidth,
            f = c.force,
            p,
            B,
            A,
            M,
            F = (h && d.oldChartHeight) || d.chartHeight,
            u = (h && d.oldChartWidth) || d.chartWidth,
            q,
            N = e.transB;
          c = {
            value: a,
            lineWidth: x,
            old: h,
            force: f,
            acrossPanes: c.acrossPanes,
            translatedValue: m,
          };
          t(this, "getPlotLinePath", c, function (c) {
            m = r(m, e.translate(a, null, null, h));
            m = v(m, -1e5, 1e5);
            p = A = Math.round(m + N);
            B = M = Math.round(F - m - N);
            l(m)
              ? e.horiz
                ? ((B = k), (M = F - e.bottom), (p = A = b(p, g, g + e.width)))
                : ((p = g), (A = u - e.right), (B = M = b(B, k, k + e.height)))
              : ((q = !0), (f = !1));
            c.path =
              q && !f
                ? null
                : d.renderer.crispLine(
                    [
                      ["M", p, B],
                      ["L", A, M],
                    ],
                    x || 1
                  );
          });
          return c.path;
        };
        e.prototype.getLinearTickPositions = function (c, b, e) {
          var d = L(Math.floor(b / c) * c);
          e = L(Math.ceil(e / c) * c);
          var g = [],
            k;
          L(d + c) === d && (k = 20);
          if (this.single) return [b];
          for (b = d; b <= e; ) {
            g.push(b);
            b = L(b + c, k);
            if (b === h) break;
            var h = b;
          }
          return g;
        };
        e.prototype.getMinorTickInterval = function () {
          var c = this.options;
          return !0 === c.minorTicks
            ? r(c.minorTickInterval, "auto")
            : !1 === c.minorTicks
            ? null
            : c.minorTickInterval;
        };
        e.prototype.getMinorTickPositions = function () {
          var c = this.options,
            b = this.tickPositions,
            e = this.minorTickInterval,
            d = [],
            g = this.pointRangePadding || 0,
            k = this.min - g;
          g = this.max + g;
          var h = g - k;
          if (h && h / e < this.len / 3) {
            var a = this.logarithmic;
            if (a)
              this.paddedTicks.forEach(function (b, c, g) {
                c &&
                  d.push.apply(d, a.getLogTickPositions(e, g[c - 1], g[c], !0));
              });
            else if (this.dateTime && "auto" === this.getMinorTickInterval())
              d = d.concat(
                this.getTimeTicks(
                  this.dateTime.normalizeTimeTickInterval(e),
                  k,
                  g,
                  c.startOfWeek
                )
              );
            else
              for (c = k + ((b[0] - k) % e); c <= g && c !== d[0]; c += e)
                d.push(c);
          }
          0 !== d.length && this.trimTicks(d);
          return d;
        };
        e.prototype.adjustForMinRange = function () {
          var c = this.options,
            b = this.min,
            e = this.max,
            d = this.logarithmic,
            g,
            k,
            h,
            a,
            l;
          this.isXAxis &&
            "undefined" === typeof this.minRange &&
            !d &&
            (q(c.min) || q(c.max)
              ? (this.minRange = null)
              : (this.series.forEach(function (b) {
                  a = b.xData;
                  for (k = l = b.xIncrement ? 1 : a.length - 1; 0 < k; k--)
                    if (
                      ((h = a[k] - a[k - 1]), "undefined" === typeof g || h < g)
                    )
                      g = h;
                }),
                (this.minRange = Math.min(
                  5 * g,
                  this.dataMax - this.dataMin
                ))));
          if (e - b < this.minRange) {
            var m = this.dataMax - this.dataMin >= this.minRange;
            var x = this.minRange;
            var f = (x - e + b) / 2;
            f = [b - f, r(c.min, b - f)];
            m &&
              (f[2] = this.logarithmic
                ? this.logarithmic.log2lin(this.dataMin)
                : this.dataMin);
            b = J(f);
            e = [b + x, r(c.max, b + x)];
            m && (e[2] = d ? d.log2lin(this.dataMax) : this.dataMax);
            e = H(e);
            e - b < x && ((f[0] = e - x), (f[1] = r(c.min, e - x)), (b = J(f)));
          }
          this.min = b;
          this.max = e;
        };
        e.prototype.getClosest = function () {
          var c;
          this.categories
            ? (c = 1)
            : this.series.forEach(function (b) {
                var e = b.closestPointRange,
                  d = b.visible || !b.chart.options.chart.ignoreHiddenSeries;
                !b.noSharedTooltip &&
                  q(e) &&
                  d &&
                  (c = q(c) ? Math.min(c, e) : e);
              });
          return c;
        };
        e.prototype.nameToX = function (c) {
          var b = m(this.categories),
            e = b ? this.categories : this.names,
            d = c.options.x;
          c.series.requireSorting = !1;
          q(d) ||
            (d =
              !1 === this.options.uniqueNames
                ? c.series.autoIncrement()
                : b
                ? e.indexOf(c.name)
                : r(e.keys[c.name], -1));
          if (-1 === d) {
            if (!b) var g = e.length;
          } else g = d;
          "undefined" !== typeof g &&
            ((this.names[g] = c.name), (this.names.keys[c.name] = g));
          return g;
        };
        e.prototype.updateNames = function () {
          var c = this,
            b = this.names;
          0 < b.length &&
            (Object.keys(b.keys).forEach(function (c) {
              delete b.keys[c];
            }),
            (b.length = 0),
            (this.minRange = this.userMinRange),
            (this.series || []).forEach(function (b) {
              b.xIncrement = null;
              if (!b.points || b.isDirtyData)
                (c.max = Math.max(c.max, b.xData.length - 1)),
                  b.processData(),
                  b.generatePoints();
              b.data.forEach(function (e, d) {
                if (e && e.options && "undefined" !== typeof e.name) {
                  var g = c.nameToX(e);
                  "undefined" !== typeof g &&
                    g !== e.x &&
                    ((e.x = g), (b.xData[d] = g));
                }
              });
            }));
        };
        e.prototype.setAxisTranslation = function (c) {
          var b = this,
            e = b.max - b.min,
            d = b.axisPointRange || 0,
            g = 0,
            h = 0,
            a = b.linkedParent,
            l = !!b.categories,
            m = b.transA,
            x = b.isXAxis;
          if (x || l || d) {
            var f = b.getClosest();
            a
              ? ((g = a.minPointOffset), (h = a.pointRangePadding))
              : b.series.forEach(function (c) {
                  var e = l
                      ? 1
                      : x
                      ? r(c.options.pointRange, f, 0)
                      : b.axisPointRange || 0,
                    a = c.options.pointPlacement;
                  d = Math.max(d, e);
                  if (!b.single || l)
                    (c = c.is("xrange") ? !x : x),
                      (g = Math.max(g, c && k(a) ? 0 : e / 2)),
                      (h = Math.max(h, c && "on" === a ? 0 : e));
                });
            a = b.ordinal && b.ordinal.slope && f ? b.ordinal.slope / f : 1;
            b.minPointOffset = g *= a;
            b.pointRangePadding = h *= a;
            b.pointRange = Math.min(d, b.single && l ? 1 : e);
            x && (b.closestPointRange = f);
          }
          c && (b.oldTransA = m);
          b.translationSlope = b.transA = m =
            b.staticScale || b.len / (e + h || 1);
          b.transB = b.horiz ? b.left : b.bottom;
          b.minPixelPadding = m * g;
          t(this, "afterSetAxisTranslation");
        };
        e.prototype.minFromRange = function () {
          return this.max - this.range;
        };
        e.prototype.setTickInterval = function (c) {
          var b = this,
            e = b.chart,
            g = b.logarithmic,
            k = b.options,
            h = b.isXAxis,
            a = b.isLinked,
            m = k.maxPadding,
            x = k.minPadding,
            f = k.tickInterval,
            p = k.tickPixelInterval,
            B = b.categories,
            A = l(b.threshold) ? b.threshold : null,
            Q = b.softThreshold;
          b.dateTime || B || a || this.getTickAmount();
          var M = r(b.userMin, k.min);
          var F = r(b.userMax, k.max);
          if (a) {
            b.linkedParent = e[b.coll][k.linkedTo];
            var N = b.linkedParent.getExtremes();
            b.min = r(N.min, N.dataMin);
            b.max = r(N.max, N.dataMax);
            k.type !== b.linkedParent.options.type && E(11, 1, e);
          } else {
            if (Q && q(A))
              if (b.dataMin >= A) (N = A), (x = 0);
              else if (b.dataMax <= A) {
                var v = A;
                m = 0;
              }
            b.min = r(M, N, b.dataMin);
            b.max = r(F, v, b.dataMax);
          }
          g &&
            (b.positiveValuesOnly &&
              !c &&
              0 >= Math.min(b.min, r(b.dataMin, b.min)) &&
              E(10, 1, e),
            (b.min = L(g.log2lin(b.min), 16)),
            (b.max = L(g.log2lin(b.max), 16)));
          b.range &&
            q(b.max) &&
            ((b.userMin = b.min = M = Math.max(b.dataMin, b.minFromRange())),
            (b.userMax = F = b.max),
            (b.range = null));
          t(b, "foundExtremes");
          b.beforePadding && b.beforePadding();
          b.adjustForMinRange();
          !(
            B ||
            b.axisPointRange ||
            (b.stacking && b.stacking.usePercentage) ||
            a
          ) &&
            q(b.min) &&
            q(b.max) &&
            (e = b.max - b.min) &&
            (!q(M) && x && (b.min -= e * x), !q(F) && m && (b.max += e * m));
          l(b.userMin) ||
            (l(k.softMin) && k.softMin < b.min && (b.min = M = k.softMin),
            l(k.floor) && (b.min = Math.max(b.min, k.floor)));
          l(b.userMax) ||
            (l(k.softMax) && k.softMax > b.max && (b.max = F = k.softMax),
            l(k.ceiling) && (b.max = Math.min(b.max, k.ceiling)));
          Q &&
            q(b.dataMin) &&
            ((A = A || 0),
            !q(M) && b.min < A && b.dataMin >= A
              ? (b.min = b.options.minRange
                  ? Math.min(A, b.max - b.minRange)
                  : A)
              : !q(F) &&
                b.max > A &&
                b.dataMax <= A &&
                (b.max = b.options.minRange
                  ? Math.max(A, b.min + b.minRange)
                  : A));
          b.tickInterval =
            b.min === b.max ||
            "undefined" === typeof b.min ||
            "undefined" === typeof b.max
              ? 1
              : a && !f && p === b.linkedParent.options.tickPixelInterval
              ? (f = b.linkedParent.tickInterval)
              : r(
                  f,
                  this.tickAmount
                    ? (b.max - b.min) / Math.max(this.tickAmount - 1, 1)
                    : void 0,
                  B ? 1 : ((b.max - b.min) * p) / Math.max(b.len, p)
                );
          h &&
            !c &&
            b.series.forEach(function (c) {
              c.processData(b.min !== b.oldMin || b.max !== b.oldMax);
            });
          b.setAxisTranslation(!0);
          t(this, "initialAxisTranslation");
          b.pointRange &&
            !f &&
            (b.tickInterval = Math.max(b.pointRange, b.tickInterval));
          c = r(
            k.minTickInterval,
            b.dateTime &&
              !b.series.some(function (b) {
                return b.noSharedTooltip;
              })
              ? b.closestPointRange
              : 0
          );
          !f && b.tickInterval < c && (b.tickInterval = c);
          b.dateTime ||
            b.logarithmic ||
            f ||
            (b.tickInterval = d(
              b.tickInterval,
              void 0,
              u(b.tickInterval),
              r(
                k.allowDecimals,
                0.5 > b.tickInterval || void 0 !== this.tickAmount
              ),
              !!this.tickAmount
            ));
          this.tickAmount || (b.tickInterval = b.unsquish());
          this.setTickPositions();
        };
        e.prototype.setTickPositions = function () {
          var c = this.options,
            b = c.tickPositions;
          var e = this.getMinorTickInterval();
          var d = c.tickPositioner,
            g = this.hasVerticalPanning(),
            k = "colorAxis" === this.coll,
            h = (k || !g) && c.startOnTick;
          g = (k || !g) && c.endOnTick;
          this.tickmarkOffset =
            this.categories &&
            "between" === c.tickmarkPlacement &&
            1 === this.tickInterval
              ? 0.5
              : 0;
          this.minorTickInterval =
            "auto" === e && this.tickInterval ? this.tickInterval / 5 : e;
          this.single =
            this.min === this.max &&
            q(this.min) &&
            !this.tickAmount &&
            (parseInt(this.min, 10) === this.min || !1 !== c.allowDecimals);
          this.tickPositions = e = b && b.slice();
          !e &&
            ((this.ordinal && this.ordinal.positions) ||
            !(
              (this.max - this.min) / this.tickInterval >
              Math.max(2 * this.len, 200)
            )
              ? (e = this.dateTime
                  ? this.getTimeTicks(
                      this.dateTime.normalizeTimeTickInterval(
                        this.tickInterval,
                        c.units
                      ),
                      this.min,
                      this.max,
                      c.startOfWeek,
                      this.ordinal && this.ordinal.positions,
                      this.closestPointRange,
                      !0
                    )
                  : this.logarithmic
                  ? this.logarithmic.getLogTickPositions(
                      this.tickInterval,
                      this.min,
                      this.max
                    )
                  : this.getLinearTickPositions(
                      this.tickInterval,
                      this.min,
                      this.max
                    ))
              : ((e = [this.min, this.max]), E(19, !1, this.chart)),
            e.length > this.len &&
              ((e = [e[0], e.pop()]), e[0] === e[1] && (e.length = 1)),
            (this.tickPositions = e),
            d && (d = d.apply(this, [this.min, this.max]))) &&
            (this.tickPositions = e = d);
          this.paddedTicks = e.slice(0);
          this.trimTicks(e, h, g);
          this.isLinked ||
            (this.single &&
              2 > e.length &&
              !this.categories &&
              !this.series.some(function (b) {
                return (
                  b.is("heatmap") && "between" === b.options.pointPlacement
                );
              }) &&
              ((this.min -= 0.5), (this.max += 0.5)),
            b || d || this.adjustTickAmount());
          t(this, "afterSetTickPositions");
        };
        e.prototype.trimTicks = function (c, b, e) {
          var d = c[0],
            g = c[c.length - 1],
            k = (!this.isOrdinal && this.minPointOffset) || 0;
          t(this, "trimTicks");
          if (!this.isLinked) {
            if (b && -Infinity !== d) this.min = d;
            else for (; this.min - k > c[0]; ) c.shift();
            if (e) this.max = g;
            else for (; this.max + k < c[c.length - 1]; ) c.pop();
            0 === c.length &&
              q(d) &&
              !this.options.tickPositions &&
              c.push((g + d) / 2);
          }
        };
        e.prototype.alignToOthers = function () {
          var c = {},
            b,
            e = this.options;
          !1 === this.chart.options.chart.alignTicks ||
            !1 === e.alignTicks ||
            !1 === e.startOnTick ||
            !1 === e.endOnTick ||
            this.logarithmic ||
            this.chart[this.coll].forEach(function (e) {
              var d = e.options;
              d = [e.horiz ? d.left : d.top, d.width, d.height, d.pane].join();
              e.series.length && (c[d] ? (b = !0) : (c[d] = 1));
            });
          return b;
        };
        e.prototype.getTickAmount = function () {
          var c = this.options,
            b = c.tickAmount,
            e = c.tickPixelInterval;
          !q(c.tickInterval) &&
            !b &&
            this.len < e &&
            !this.isRadial &&
            !this.logarithmic &&
            c.startOnTick &&
            c.endOnTick &&
            (b = 2);
          !b && this.alignToOthers() && (b = Math.ceil(this.len / e) + 1);
          4 > b && ((this.finalTickAmt = b), (b = 5));
          this.tickAmount = b;
        };
        e.prototype.adjustTickAmount = function () {
          var c = this.options,
            b = this.tickInterval,
            e = this.tickPositions,
            d = this.tickAmount,
            g = this.finalTickAmt,
            k = e && e.length,
            h = r(this.threshold, this.softThreshold ? 0 : null),
            a;
          if (this.hasData()) {
            if (k < d) {
              for (a = this.min; e.length < d; )
                e.length % 2 || a === h
                  ? e.push(L(e[e.length - 1] + b))
                  : e.unshift(L(e[0] - b));
              this.transA *= (k - 1) / (d - 1);
              this.min = c.startOnTick ? e[0] : Math.min(this.min, e[0]);
              this.max = c.endOnTick
                ? e[e.length - 1]
                : Math.max(this.max, e[e.length - 1]);
            } else k > d && ((this.tickInterval *= 2), this.setTickPositions());
            if (q(g)) {
              for (b = c = e.length; b--; )
                ((3 === g && 1 === b % 2) || (2 >= g && 0 < b && b < c - 1)) &&
                  e.splice(b, 1);
              this.finalTickAmt = void 0;
            }
          }
        };
        e.prototype.setScale = function () {
          var c,
            b = !1,
            e = !1;
          this.series.forEach(function (c) {
            var d;
            b = b || c.isDirtyData || c.isDirty;
            e =
              e ||
              (null === (d = c.xAxis) || void 0 === d ? void 0 : d.isDirty) ||
              !1;
          });
          this.oldMin = this.min;
          this.oldMax = this.max;
          this.oldAxisLength = this.len;
          this.setAxisSize();
          (c = this.len !== this.oldAxisLength) ||
          b ||
          e ||
          this.isLinked ||
          this.forceRedraw ||
          this.userMin !== this.oldUserMin ||
          this.userMax !== this.oldUserMax ||
          this.alignToOthers()
            ? (this.stacking && this.stacking.resetStacks(),
              (this.forceRedraw = !1),
              this.getSeriesExtremes(),
              this.setTickInterval(),
              (this.oldUserMin = this.userMin),
              (this.oldUserMax = this.userMax),
              this.isDirty ||
                (this.isDirty =
                  c || this.min !== this.oldMin || this.max !== this.oldMax))
            : this.stacking && this.stacking.cleanStacks();
          b && this.panningState && (this.panningState.isDirty = !0);
          t(this, "afterSetScale");
        };
        e.prototype.setExtremes = function (c, b, e, d, g) {
          var k = this,
            h = k.chart;
          e = r(e, !0);
          k.series.forEach(function (b) {
            delete b.kdTree;
          });
          g = p(g, { min: c, max: b });
          t(k, "setExtremes", g, function () {
            k.userMin = c;
            k.userMax = b;
            k.eventArgs = g;
            e && h.redraw(d);
          });
        };
        e.prototype.zoom = function (c, b) {
          var e = this,
            d = this.dataMin,
            g = this.dataMax,
            k = this.options,
            h = Math.min(d, r(k.min, d)),
            a = Math.max(g, r(k.max, g));
          c = { newMin: c, newMax: b };
          t(this, "zoom", c, function (b) {
            var c = b.newMin,
              k = b.newMax;
            if (c !== e.min || k !== e.max)
              e.allowZoomOutside ||
                (q(d) && (c < h && (c = h), c > a && (c = a)),
                q(g) && (k < h && (k = h), k > a && (k = a))),
                (e.displayBtn =
                  "undefined" !== typeof c || "undefined" !== typeof k),
                e.setExtremes(c, k, !1, void 0, { trigger: "zoom" });
            b.zoomed = !0;
          });
          return c.zoomed;
        };
        e.prototype.setAxisSize = function () {
          var c = this.chart,
            b = this.options,
            e = b.offsets || [0, 0, 0, 0],
            d = this.horiz,
            g = (this.width = Math.round(
              A(r(b.width, c.plotWidth - e[3] + e[1]), c.plotWidth)
            )),
            k = (this.height = Math.round(
              A(r(b.height, c.plotHeight - e[0] + e[2]), c.plotHeight)
            )),
            h = (this.top = Math.round(
              A(r(b.top, c.plotTop + e[0]), c.plotHeight, c.plotTop)
            ));
          b = this.left = Math.round(
            A(r(b.left, c.plotLeft + e[3]), c.plotWidth, c.plotLeft)
          );
          this.bottom = c.chartHeight - k - h;
          this.right = c.chartWidth - g - b;
          this.len = Math.max(d ? g : k, 0);
          this.pos = d ? b : h;
        };
        e.prototype.getExtremes = function () {
          var c = this.logarithmic;
          return {
            min: c ? L(c.lin2log(this.min)) : this.min,
            max: c ? L(c.lin2log(this.max)) : this.max,
            dataMin: this.dataMin,
            dataMax: this.dataMax,
            userMin: this.userMin,
            userMax: this.userMax,
          };
        };
        e.prototype.getThreshold = function (c) {
          var b = this.logarithmic,
            e = b ? b.lin2log(this.min) : this.min;
          b = b ? b.lin2log(this.max) : this.max;
          null === c || -Infinity === c
            ? (c = e)
            : Infinity === c
            ? (c = b)
            : e > c
            ? (c = e)
            : b < c && (c = b);
          return this.translate(c, 0, 1, 0, 1);
        };
        e.prototype.autoLabelAlign = function (c) {
          var b = (r(c, 0) - 90 * this.side + 720) % 360;
          c = { align: "center" };
          t(this, "autoLabelAlign", c, function (c) {
            15 < b && 165 > b
              ? (c.align = "right")
              : 195 < b && 345 > b && (c.align = "left");
          });
          return c.align;
        };
        e.prototype.tickSize = function (c) {
          var b = this.options,
            e = b["tick" === c ? "tickLength" : "minorTickLength"],
            d = r(
              b["tick" === c ? "tickWidth" : "minorTickWidth"],
              "tick" === c && this.isXAxis && !this.categories ? 1 : 0
            );
          if (d && e) {
            "inside" === b[c + "Position"] && (e = -e);
            var g = [e, d];
          }
          c = { tickSize: g };
          t(this, "afterTickSize", c);
          return c.tickSize;
        };
        e.prototype.labelMetrics = function () {
          var c = (this.tickPositions && this.tickPositions[0]) || 0;
          return this.chart.renderer.fontMetrics(
            this.options.labels.style && this.options.labels.style.fontSize,
            this.ticks[c] && this.ticks[c].label
          );
        };
        e.prototype.unsquish = function () {
          var c = this.options.labels,
            b = this.horiz,
            e = this.tickInterval,
            d = e,
            g =
              this.len /
              (((this.categories ? 1 : 0) + this.max - this.min) / e),
            k,
            h = c.rotation,
            a = this.labelMetrics(),
            l,
            m = Number.MAX_VALUE,
            x,
            f = this.max - this.min,
            p = function (b) {
              var c = b / (g || 1);
              c = 1 < c ? Math.ceil(c) : 1;
              c * e > f &&
                Infinity !== b &&
                Infinity !== g &&
                f &&
                (c = Math.ceil(f / e));
              return L(c * e);
            };
          b
            ? (x =
                !c.staggerLines &&
                !c.step &&
                (q(h)
                  ? [h]
                  : g < r(c.autoRotationLimit, 80) && c.autoRotation)) &&
              x.forEach(function (b) {
                if (b === h || (b && -90 <= b && 90 >= b)) {
                  l = p(Math.abs(a.h / Math.sin(F * b)));
                  var c = l + Math.abs(b / 360);
                  c < m && ((m = c), (k = b), (d = l));
                }
              })
            : c.step || (d = p(a.h));
          this.autoRotation = x;
          this.labelRotation = r(k, h);
          return d;
        };
        e.prototype.getSlotWidth = function (c) {
          var b,
            e = this.chart,
            d = this.horiz,
            g = this.options.labels,
            k = Math.max(
              this.tickPositions.length - (this.categories ? 0 : 1),
              1
            ),
            h = e.margin[3];
          if (c && l(c.slotWidth)) return c.slotWidth;
          if (d && g && 2 > (g.step || 0))
            return g.rotation ? 0 : ((this.staggerLines || 1) * this.len) / k;
          if (!d) {
            c =
              null === (b = null === g || void 0 === g ? void 0 : g.style) ||
              void 0 === b
                ? void 0
                : b.width;
            if (void 0 !== c) return parseInt(c, 10);
            if (h) return h - e.spacing[3];
          }
          return 0.33 * e.chartWidth;
        };
        e.prototype.renderUnsquish = function () {
          var c = this.chart,
            b = c.renderer,
            e = this.tickPositions,
            d = this.ticks,
            g = this.options.labels,
            h = (g && g.style) || {},
            a = this.horiz,
            l = this.getSlotWidth(),
            m = Math.max(1, Math.round(l - 2 * (g.padding || 5))),
            r = {},
            x = this.labelMetrics(),
            f = g.style && g.style.textOverflow,
            p = 0;
          k(g.rotation) || (r.rotation = g.rotation || 0);
          e.forEach(function (b) {
            b = d[b];
            b.movedLabel && b.replaceMovedLabel();
            b &&
              b.label &&
              b.label.textPxLength > p &&
              (p = b.label.textPxLength);
          });
          this.maxLabelLength = p;
          if (this.autoRotation)
            p > m && p > x.h
              ? (r.rotation = this.labelRotation)
              : (this.labelRotation = 0);
          else if (l) {
            var B = m;
            if (!f) {
              var A = "clip";
              for (m = e.length; !a && m--; ) {
                var t = e[m];
                if ((t = d[t].label))
                  t.styles && "ellipsis" === t.styles.textOverflow
                    ? t.css({ textOverflow: "clip" })
                    : t.textPxLength > l && t.css({ width: l + "px" }),
                    t.getBBox().height > this.len / e.length - (x.h - x.f) &&
                      (t.specificTextOverflow = "ellipsis");
              }
            }
          }
          r.rotation &&
            ((B = p > 0.5 * c.chartHeight ? 0.33 * c.chartHeight : p),
            f || (A = "ellipsis"));
          if (
            (this.labelAlign =
              g.align || this.autoLabelAlign(this.labelRotation))
          )
            r.align = this.labelAlign;
          e.forEach(function (b) {
            var c = (b = d[b]) && b.label,
              e = h.width,
              g = {};
            c &&
              (c.attr(r),
              b.shortenLabel
                ? b.shortenLabel()
                : B &&
                  !e &&
                  "nowrap" !== h.whiteSpace &&
                  (B < c.textPxLength || "SPAN" === c.element.tagName)
                ? ((g.width = B + "px"),
                  f || (g.textOverflow = c.specificTextOverflow || A),
                  c.css(g))
                : c.styles &&
                  c.styles.width &&
                  !g.width &&
                  !e &&
                  c.css({ width: null }),
              delete c.specificTextOverflow,
              (b.rotation = r.rotation));
          }, this);
          this.tickRotCorr = b.rotCorr(
            x.b,
            this.labelRotation || 0,
            0 !== this.side
          );
        };
        e.prototype.hasData = function () {
          return (
            this.series.some(function (c) {
              return c.hasData();
            }) ||
            (this.options.showEmpty && q(this.min) && q(this.max))
          );
        };
        e.prototype.addTitle = function (c) {
          var b = this.chart.renderer,
            e = this.horiz,
            d = this.opposite,
            k = this.options.title,
            h,
            a = this.chart.styledMode;
          this.axisTitle ||
            ((h = k.textAlign) ||
              (h = (e
                ? { low: "left", middle: "center", high: "right" }
                : {
                    low: d ? "right" : "left",
                    middle: "center",
                    high: d ? "left" : "right",
                  })[k.align]),
            (this.axisTitle = b
              .text(k.text, 0, 0, k.useHTML)
              .attr({ zIndex: 7, rotation: k.rotation || 0, align: h })
              .addClass("highcharts-axis-title")),
            a || this.axisTitle.css(g(k.style)),
            this.axisTitle.add(this.axisGroup),
            (this.axisTitle.isNew = !0));
          a ||
            k.style.width ||
            this.isRadial ||
            this.axisTitle.css({ width: this.len + "px" });
          this.axisTitle[c ? "show" : "hide"](c);
        };
        e.prototype.generateTick = function (c) {
          var b = this.ticks;
          b[c] ? b[c].addLabel() : (b[c] = new n(this, c));
        };
        e.prototype.getOffset = function () {
          var c = this,
            b = c.chart,
            e = b.renderer,
            d = c.options,
            g = c.tickPositions,
            k = c.ticks,
            h = c.horiz,
            a = c.side,
            l = b.inverted && !c.isZAxis ? [1, 0, 3, 2][a] : a,
            m,
            f = 0,
            p = 0,
            B = d.title,
            A = d.labels,
            M = 0,
            F = b.axisOffset;
          b = b.clipOffset;
          var u = [-1, 1, 1, -1][a],
            N = d.className,
            v = c.axisParent;
          var I = c.hasData();
          c.showAxis = m = I || r(d.showEmpty, !0);
          c.staggerLines = c.horiz && A.staggerLines;
          c.axisGroup ||
            ((c.gridGroup = e
              .g("grid")
              .attr({ zIndex: d.gridZIndex || 1 })
              .addClass(
                "highcharts-" + this.coll.toLowerCase() + "-grid " + (N || "")
              )
              .add(v)),
            (c.axisGroup = e
              .g("axis")
              .attr({ zIndex: d.zIndex || 2 })
              .addClass(
                "highcharts-" + this.coll.toLowerCase() + " " + (N || "")
              )
              .add(v)),
            (c.labelGroup = e
              .g("axis-labels")
              .attr({ zIndex: A.zIndex || 7 })
              .addClass(
                "highcharts-" + c.coll.toLowerCase() + "-labels " + (N || "")
              )
              .add(v)));
          I || c.isLinked
            ? (g.forEach(function (b, e) {
                c.generateTick(b, e);
              }),
              c.renderUnsquish(),
              (c.reserveSpaceDefault =
                0 === a ||
                2 === a ||
                { 1: "left", 3: "right" }[a] === c.labelAlign),
              r(
                A.reserveSpace,
                "center" === c.labelAlign ? !0 : null,
                c.reserveSpaceDefault
              ) &&
                g.forEach(function (b) {
                  M = Math.max(k[b].getLabelSize(), M);
                }),
              c.staggerLines && (M *= c.staggerLines),
              (c.labelOffset = M * (c.opposite ? -1 : 1)))
            : x(k, function (b, c) {
                b.destroy();
                delete k[c];
              });
          if (
            B &&
            B.text &&
            !1 !== B.enabled &&
            (c.addTitle(m), m && !1 !== B.reserveSpace)
          ) {
            c.titleOffset = f = c.axisTitle.getBBox()[h ? "height" : "width"];
            var R = B.offset;
            p = q(R) ? 0 : r(B.margin, h ? 5 : 10);
          }
          c.renderLine();
          c.offset = u * r(d.offset, F[a] ? F[a] + (d.margin || 0) : 0);
          c.tickRotCorr = c.tickRotCorr || { x: 0, y: 0 };
          e = 0 === a ? -c.labelMetrics().h : 2 === a ? c.tickRotCorr.y : 0;
          p = Math.abs(M) + p;
          M && (p = p - e + u * (h ? r(A.y, c.tickRotCorr.y + 8 * u) : A.x));
          c.axisTitleMargin = r(R, p);
          c.getMaxLabelDimensions &&
            (c.maxLabelDimensions = c.getMaxLabelDimensions(k, g));
          h = this.tickSize("tick");
          F[a] = Math.max(
            F[a],
            c.axisTitleMargin + f + u * c.offset,
            p,
            g && g.length && h ? h[0] + u * c.offset : 0
          );
          d = d.offset ? 0 : 2 * Math.floor(c.axisLine.strokeWidth() / 2);
          b[l] = Math.max(b[l], d);
          t(this, "afterGetOffset");
        };
        e.prototype.getLinePath = function (c) {
          var b = this.chart,
            e = this.opposite,
            d = this.offset,
            g = this.horiz,
            k = this.left + (e ? this.width : 0) + d;
          d = b.chartHeight - this.bottom - (e ? this.height : 0) + d;
          e && (c *= -1);
          return b.renderer.crispLine(
            [
              ["M", g ? this.left : k, g ? d : this.top],
              [
                "L",
                g ? b.chartWidth - this.right : k,
                g ? d : b.chartHeight - this.bottom,
              ],
            ],
            c
          );
        };
        e.prototype.renderLine = function () {
          this.axisLine ||
            ((this.axisLine = this.chart.renderer
              .path()
              .addClass("highcharts-axis-line")
              .add(this.axisGroup)),
            this.chart.styledMode ||
              this.axisLine.attr({
                stroke: this.options.lineColor,
                "stroke-width": this.options.lineWidth,
                zIndex: 7,
              }));
        };
        e.prototype.getTitlePosition = function () {
          var c = this.horiz,
            b = this.left,
            e = this.top,
            d = this.len,
            g = this.options.title,
            k = c ? b : e,
            h = this.opposite,
            a = this.offset,
            l = g.x || 0,
            m = g.y || 0,
            r = this.axisTitle,
            x = this.chart.renderer.fontMetrics(g.style && g.style.fontSize, r);
          r = Math.max(r.getBBox(null, 0).height - x.h - 1, 0);
          d = {
            low: k + (c ? 0 : d),
            middle: k + d / 2,
            high: k + (c ? d : 0),
          }[g.align];
          b =
            (c ? e + this.height : b) +
            (c ? 1 : -1) * (h ? -1 : 1) * this.axisTitleMargin +
            [-r, r, x.f, -r][this.side];
          c = {
            x: c ? d + l : b + (h ? this.width : 0) + a + l,
            y: c ? b + m - (h ? this.height : 0) + a : d + m,
          };
          t(this, "afterGetTitlePosition", { titlePosition: c });
          return c;
        };
        e.prototype.renderMinorTick = function (c) {
          var b = this.chart.hasRendered && l(this.oldMin),
            e = this.minorTicks;
          e[c] || (e[c] = new n(this, c, "minor"));
          b && e[c].isNew && e[c].render(null, !0);
          e[c].render(null, !1, 1);
        };
        e.prototype.renderTick = function (c, b) {
          var e = this.isLinked,
            d = this.ticks,
            g = this.chart.hasRendered && l(this.oldMin);
          if (!e || (c >= this.min && c <= this.max))
            d[c] || (d[c] = new n(this, c)),
              g && d[c].isNew && d[c].render(b, !0, -1),
              d[c].render(b);
        };
        e.prototype.render = function () {
          var c = this,
            b = c.chart,
            e = c.logarithmic,
            d = c.options,
            g = c.isLinked,
            k = c.tickPositions,
            h = c.axisTitle,
            m = c.ticks,
            r = c.minorTicks,
            f = c.alternateBands,
            p = d.stackLabels,
            B = d.alternateGridColor,
            A = c.tickmarkOffset,
            Q = c.axisLine,
            F = c.showAxis,
            u = C(b.renderer.globalAnimation),
            q,
            N;
          c.labelEdge.length = 0;
          c.overlap = !1;
          [m, r, f].forEach(function (b) {
            x(b, function (b) {
              b.isActive = !1;
            });
          });
          if (c.hasData() || g)
            c.minorTickInterval &&
              !c.categories &&
              c.getMinorTickPositions().forEach(function (b) {
                c.renderMinorTick(b);
              }),
              k.length &&
                (k.forEach(function (b, e) {
                  c.renderTick(b, e);
                }),
                A &&
                  (0 === c.min || c.single) &&
                  (m[-1] || (m[-1] = new n(c, -1, null, !0)),
                  m[-1].render(-1))),
              B &&
                k.forEach(function (d, g) {
                  N =
                    "undefined" !== typeof k[g + 1] ? k[g + 1] + A : c.max - A;
                  0 === g % 2 &&
                    d < c.max &&
                    N <= c.max + (b.polar ? -A : A) &&
                    (f[d] || (f[d] = new a.PlotLineOrBand(c)),
                    (q = d + A),
                    (f[d].options = {
                      from: e ? e.lin2log(q) : q,
                      to: e ? e.lin2log(N) : N,
                      color: B,
                      className: "highcharts-alternate-grid",
                    }),
                    f[d].render(),
                    (f[d].isActive = !0));
                }),
              c._addedPlotLB ||
                ((d.plotLines || [])
                  .concat(d.plotBands || [])
                  .forEach(function (b) {
                    c.addPlotBandOrLine(b);
                  }),
                (c._addedPlotLB = !0));
          [m, r, f].forEach(function (c) {
            var e,
              d = [],
              g = u.duration;
            x(c, function (b, c) {
              b.isActive || (b.render(c, !1, 0), (b.isActive = !1), d.push(c));
            });
            M(
              function () {
                for (e = d.length; e--; )
                  c[d[e]] &&
                    !c[d[e]].isActive &&
                    (c[d[e]].destroy(), delete c[d[e]]);
              },
              c !== f && b.hasRendered && g ? g : 0
            );
          });
          Q &&
            (Q[Q.isPlaced ? "animate" : "attr"]({
              d: this.getLinePath(Q.strokeWidth()),
            }),
            (Q.isPlaced = !0),
            Q[F ? "show" : "hide"](F));
          h &&
            F &&
            ((d = c.getTitlePosition()),
            l(d.y)
              ? (h[h.isNew ? "attr" : "animate"](d), (h.isNew = !1))
              : (h.attr("y", -9999), (h.isNew = !0)));
          p && p.enabled && c.stacking && c.stacking.renderStackTotals();
          c.isDirty = !1;
          t(this, "afterRender");
        };
        e.prototype.redraw = function () {
          this.visible &&
            (this.render(),
            this.plotLinesAndBands.forEach(function (c) {
              c.render();
            }));
          this.series.forEach(function (c) {
            c.isDirty = !0;
          });
        };
        e.prototype.getKeepProps = function () {
          return this.keepProps || e.keepProps;
        };
        e.prototype.destroy = function (c) {
          var b = this,
            e = b.plotLinesAndBands,
            d;
          t(this, "destroy", { keepEvents: c });
          c || N(b);
          [b.ticks, b.minorTicks, b.alternateBands].forEach(function (b) {
            K(b);
          });
          if (e) for (c = e.length; c--; ) e[c].destroy();
          "axisLine axisTitle axisGroup gridGroup labelGroup cross scrollbar"
            .split(" ")
            .forEach(function (c) {
              b[c] && (b[c] = b[c].destroy());
            });
          for (d in b.plotLinesAndBandsGroups)
            b.plotLinesAndBandsGroups[d] = b.plotLinesAndBandsGroups[
              d
            ].destroy();
          x(b, function (c, e) {
            -1 === b.getKeepProps().indexOf(e) && delete b[e];
          });
        };
        e.prototype.drawCrosshair = function (c, b) {
          var e = this.crosshair,
            d = r(e.snap, !0),
            g,
            k = this.cross,
            h = this.chart;
          t(this, "drawCrosshair", { e: c, point: b });
          c || (c = this.cross && this.cross.e);
          if (this.crosshair && !1 !== (q(b) || !d)) {
            d
              ? q(b) &&
                (g = r(
                  "colorAxis" !== this.coll ? b.crosshairPos : null,
                  this.isXAxis ? b.plotX : this.len - b.plotY
                ))
              : (g =
                  c &&
                  (this.horiz
                    ? c.chartX - this.pos
                    : this.len - c.chartY + this.pos));
            if (q(g)) {
              var a = {
                value: b && (this.isXAxis ? b.x : r(b.stackY, b.y)),
                translatedValue: g,
              };
              h.polar &&
                p(a, {
                  isCrosshair: !0,
                  chartX: c && c.chartX,
                  chartY: c && c.chartY,
                  point: b,
                });
              a = this.getPlotLinePath(a) || null;
            }
            if (!q(a)) {
              this.hideCrosshair();
              return;
            }
            d = this.categories && !this.isRadial;
            k ||
              ((this.cross = k = h.renderer
                .path()
                .addClass(
                  "highcharts-crosshair highcharts-crosshair-" +
                    (d ? "category " : "thin ") +
                    e.className
                )
                .attr({ zIndex: r(e.zIndex, 2) })
                .add()),
              h.styledMode ||
                (k
                  .attr({
                    stroke:
                      e.color ||
                      (d
                        ? f.parse("#ccd6eb").setOpacity(0.25).get()
                        : "#cccccc"),
                    "stroke-width": r(e.width, 1),
                  })
                  .css({ "pointer-events": "none" }),
                e.dashStyle && k.attr({ dashstyle: e.dashStyle })));
            k.show().attr({ d: a });
            d && !e.width && k.attr({ "stroke-width": this.transA });
            this.cross.e = c;
          } else this.hideCrosshair();
          t(this, "afterDrawCrosshair", { e: c, point: b });
        };
        e.prototype.hideCrosshair = function () {
          this.cross && this.cross.hide();
          t(this, "afterHideCrosshair");
        };
        e.prototype.hasVerticalPanning = function () {
          var c, b;
          return /y/.test(
            (null ===
              (b =
                null === (c = this.chart.options.chart) || void 0 === c
                  ? void 0
                  : c.panning) || void 0 === b
              ? void 0
              : b.type) || ""
          );
        };
        e.prototype.validatePositiveValue = function (c) {
          return l(c) && 0 < c;
        };
        e.defaultOptions = {
          dateTimeLabelFormats: {
            millisecond: { main: "%H:%M:%S.%L", range: !1 },
            second: { main: "%H:%M:%S", range: !1 },
            minute: { main: "%H:%M", range: !1 },
            hour: { main: "%H:%M", range: !1 },
            day: { main: "%e. %b" },
            week: { main: "%e. %b" },
            month: { main: "%b '%y" },
            year: { main: "%Y" },
          },
          endOnTick: !1,
          labels: {
            enabled: !0,
            indentation: 10,
            x: 0,
            style: { color: "#666666", cursor: "default", fontSize: "11px" },
          },
          maxPadding: 0.01,
          minorTickLength: 2,
          minorTickPosition: "outside",
          minPadding: 0.01,
          showEmpty: !0,
          startOfWeek: 1,
          startOnTick: !1,
          tickLength: 10,
          tickPixelInterval: 100,
          tickmarkPlacement: "between",
          tickPosition: "outside",
          title: { align: "middle", style: { color: "#666666" } },
          type: "linear",
          minorGridLineColor: "#f2f2f2",
          minorGridLineWidth: 1,
          minorTickColor: "#999999",
          lineColor: "#ccd6eb",
          lineWidth: 1,
          gridLineColor: "#e6e6e6",
          tickColor: "#ccd6eb",
        };
        e.defaultYAxisOptions = {
          endOnTick: !0,
          maxPadding: 0.05,
          minPadding: 0.05,
          tickPixelInterval: 72,
          showLastLabel: !0,
          labels: { x: -8 },
          startOnTick: !0,
          title: { rotation: 270, text: "Values" },
          stackLabels: {
            animation: {},
            allowOverlap: !1,
            enabled: !1,
            crop: !0,
            overflow: "justify",
            formatter: function () {
              var c = this.axis.chart.numberFormatter;
              return c(this.total, -1);
            },
            style: {
              color: "#000000",
              fontSize: "11px",
              fontWeight: "bold",
              textOutline: "1px contrast",
            },
          },
          gridLineWidth: 1,
          lineWidth: 0,
        };
        e.defaultLeftAxisOptions = {
          labels: { x: -15 },
          title: { rotation: 270 },
        };
        e.defaultRightAxisOptions = {
          labels: { x: 15 },
          title: { rotation: 90 },
        };
        e.defaultBottomAxisOptions = {
          labels: { autoRotation: [-45], x: 0 },
          margin: 15,
          title: { rotation: 0 },
        };
        e.defaultTopAxisOptions = {
          labels: { autoRotation: [-45], x: 0 },
          margin: 15,
          title: { rotation: 0 },
        };
        e.keepProps = "extKey hcEvents names series userMax userMin".split(" ");
        return e;
      })();
      a.Axis = y;
      return a.Axis;
    }
  );
  O(
    n,
    "Core/Axis/DateTimeAxis.js",
    [n["Core/Axis/Axis.js"], n["Core/Utilities.js"]],
    function (f, a) {
      var n = a.addEvent,
        y = a.getMagnitude,
        D = a.normalizeTickInterval,
        G = a.timeUnits,
        C = (function () {
          function a(a) {
            this.axis = a;
          }
          a.prototype.normalizeTimeTickInterval = function (a, f) {
            var v = f || [
              ["millisecond", [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]],
              ["second", [1, 2, 5, 10, 15, 30]],
              ["minute", [1, 2, 5, 10, 15, 30]],
              ["hour", [1, 2, 3, 4, 6, 8, 12]],
              ["day", [1, 2]],
              ["week", [1, 2]],
              ["month", [1, 2, 3, 4, 6]],
              ["year", null],
            ];
            f = v[v.length - 1];
            var q = G[f[0]],
              H = f[1],
              E;
            for (
              E = 0;
              E < v.length &&
              !((f = v[E]),
              (q = G[f[0]]),
              (H = f[1]),
              v[E + 1] && a <= (q * H[H.length - 1] + G[v[E + 1][0]]) / 2);
              E++
            );
            q === G.year && a < 5 * q && (H = [1, 2, 5]);
            a = D(a / q, H, "year" === f[0] ? Math.max(y(a / q), 1) : 1);
            return { unitRange: q, count: a, unitName: f[0] };
          };
          return a;
        })();
      a = (function () {
        function a() {}
        a.compose = function (a) {
          a.keepProps.push("dateTime");
          a.prototype.getTimeTicks = function () {
            return this.chart.time.getTimeTicks.apply(
              this.chart.time,
              arguments
            );
          };
          n(a, "init", function (a) {
            "datetime" !== a.userOptions.type
              ? (this.dateTime = void 0)
              : this.dateTime || (this.dateTime = new C(this));
          });
        };
        a.AdditionsClass = C;
        return a;
      })();
      a.compose(f);
      return a;
    }
  );
  O(
    n,
    "Core/Axis/LogarithmicAxis.js",
    [n["Core/Axis/Axis.js"], n["Core/Utilities.js"]],
    function (f, a) {
      var n = a.addEvent,
        y = a.getMagnitude,
        D = a.normalizeTickInterval,
        G = a.pick,
        C = (function () {
          function a(a) {
            this.axis = a;
          }
          a.prototype.getLogTickPositions = function (a, f, n, q) {
            var v = this.axis,
              E = v.len,
              p = v.options,
              t = [];
            q || (this.minorAutoInterval = void 0);
            if (0.5 <= a)
              (a = Math.round(a)), (t = v.getLinearTickPositions(a, f, n));
            else if (0.08 <= a) {
              p = Math.floor(f);
              var I, u;
              for (
                E =
                  0.3 < a
                    ? [1, 2, 4]
                    : 0.15 < a
                    ? [1, 2, 4, 6, 8]
                    : [1, 2, 3, 4, 5, 6, 7, 8, 9];
                p < n + 1 && !u;
                p++
              ) {
                var m = E.length;
                for (I = 0; I < m && !u; I++) {
                  var h = this.log2lin(this.lin2log(p) * E[I]);
                  h > f &&
                    (!q || l <= n) &&
                    "undefined" !== typeof l &&
                    t.push(l);
                  l > n && (u = !0);
                  var l = h;
                }
              }
            } else
              (f = this.lin2log(f)),
                (n = this.lin2log(n)),
                (a = q ? v.getMinorTickInterval() : p.tickInterval),
                (a = G(
                  "auto" === a ? null : a,
                  this.minorAutoInterval,
                  ((p.tickPixelInterval / (q ? 5 : 1)) * (n - f)) /
                    ((q ? E / v.tickPositions.length : E) || 1)
                )),
                (a = D(a, void 0, y(a))),
                (t = v.getLinearTickPositions(a, f, n).map(this.log2lin)),
                q || (this.minorAutoInterval = a / 5);
            q || (v.tickInterval = a);
            return t;
          };
          a.prototype.lin2log = function (a) {
            return Math.pow(10, a);
          };
          a.prototype.log2lin = function (a) {
            return Math.log(a) / Math.LN10;
          };
          return a;
        })();
      a = (function () {
        function a() {}
        a.compose = function (a) {
          a.keepProps.push("logarithmic");
          var f = a.prototype,
            H = C.prototype;
          f.log2lin = H.log2lin;
          f.lin2log = H.lin2log;
          n(a, "init", function (a) {
            var f = this.logarithmic;
            "logarithmic" !== a.userOptions.type
              ? (this.logarithmic = void 0)
              : (f || (f = this.logarithmic = new C(this)),
                this.log2lin !== f.log2lin &&
                  (f.log2lin = this.log2lin.bind(this)),
                this.lin2log !== f.lin2log &&
                  (f.lin2log = this.lin2log.bind(this)));
          });
          n(a, "afterInit", function () {
            var a = this.logarithmic;
            a &&
              ((this.lin2val = function (f) {
                return a.lin2log(f);
              }),
              (this.val2lin = function (f) {
                return a.log2lin(f);
              }));
          });
        };
        return a;
      })();
      a.compose(f);
      return a;
    }
  );
  O(
    n,
    "Core/Axis/PlotLineOrBand.js",
    [n["Core/Axis/Axis.js"], n["Core/Globals.js"], n["Core/Utilities.js"]],
    function (f, a, n) {
      var y = n.arrayMax,
        D = n.arrayMin,
        G = n.defined,
        C = n.destroyObjectProperties,
        J = n.erase,
        H = n.extend,
        v = n.merge,
        L = n.objectEach,
        q = n.pick,
        K = (function () {
          function f(a, f) {
            this.axis = a;
            f && ((this.options = f), (this.id = f.id));
          }
          f.prototype.render = function () {
            a.fireEvent(this, "render");
            var f = this,
              t = f.axis,
              I = t.horiz,
              u = t.logarithmic,
              m = f.options,
              h = m.label,
              l = f.label,
              k = m.to,
              g = m.from,
              d = m.value,
              x = G(g) && G(k),
              r = G(d),
              A = f.svgElem,
              N = !A,
              B = [],
              M = m.color,
              R = q(m.zIndex, 0),
              F = m.events;
            B = {
              class:
                "highcharts-plot-" +
                (x ? "band " : "line ") +
                (m.className || ""),
            };
            var e = {},
              c = t.chart.renderer,
              b = x ? "bands" : "lines";
            u && ((g = u.log2lin(g)), (k = u.log2lin(k)), (d = u.log2lin(d)));
            t.chart.styledMode ||
              (r
                ? ((B.stroke = M || "#999999"),
                  (B["stroke-width"] = q(m.width, 1)),
                  m.dashStyle && (B.dashstyle = m.dashStyle))
                : x &&
                  ((B.fill = M || "#e6ebf5"),
                  m.borderWidth &&
                    ((B.stroke = m.borderColor),
                    (B["stroke-width"] = m.borderWidth))));
            e.zIndex = R;
            b += "-" + R;
            (u = t.plotLinesAndBandsGroups[b]) ||
              (t.plotLinesAndBandsGroups[b] = u = c
                .g("plot-" + b)
                .attr(e)
                .add());
            N && (f.svgElem = A = c.path().attr(B).add(u));
            if (r)
              B = t.getPlotLinePath({
                value: d,
                lineWidth: A.strokeWidth(),
                acrossPanes: m.acrossPanes,
              });
            else if (x) B = t.getPlotBandPath(g, k, m);
            else return;
            !f.eventsAdded &&
              F &&
              (L(F, function (b, c) {
                A.on(c, function (b) {
                  F[c].apply(f, [b]);
                });
              }),
              (f.eventsAdded = !0));
            (N || !A.d) && B && B.length
              ? A.attr({ d: B })
              : A &&
                (B
                  ? (A.show(!0), A.animate({ d: B }))
                  : A.d && (A.hide(), l && (f.label = l = l.destroy())));
            h &&
            (G(h.text) || G(h.formatter)) &&
            B &&
            B.length &&
            0 < t.width &&
            0 < t.height &&
            !B.isFlat
              ? ((h = v(
                  {
                    align: I && x && "center",
                    x: I ? !x && 4 : 10,
                    verticalAlign: !I && x && "middle",
                    y: I ? (x ? 16 : 10) : x ? 6 : -4,
                    rotation: I && !x && 90,
                  },
                  h
                )),
                this.renderLabel(h, B, x, R))
              : l && l.hide();
            return f;
          };
          f.prototype.renderLabel = function (a, f, q, u) {
            var m = this.label,
              h = this.axis.chart.renderer;
            m ||
              ((m = {
                align: a.textAlign || a.align,
                rotation: a.rotation,
                class:
                  "highcharts-plot-" +
                  (q ? "band" : "line") +
                  "-label " +
                  (a.className || ""),
              }),
              (m.zIndex = u),
              (u = this.getLabelText(a)),
              (this.label = m = h.text(u, 0, 0, a.useHTML).attr(m).add()),
              this.axis.chart.styledMode || m.css(a.style));
            h = f.xBounds || [f[0][1], f[1][1], q ? f[2][1] : f[0][1]];
            f = f.yBounds || [f[0][2], f[1][2], q ? f[2][2] : f[0][2]];
            q = D(h);
            u = D(f);
            m.align(a, !1, { x: q, y: u, width: y(h) - q, height: y(f) - u });
            m.show(!0);
          };
          f.prototype.getLabelText = function (a) {
            return G(a.formatter) ? a.formatter.call(this) : a.text;
          };
          f.prototype.destroy = function () {
            J(this.axis.plotLinesAndBands, this);
            delete this.axis;
            C(this);
          };
          return f;
        })();
      H(f.prototype, {
        getPlotBandPath: function (a, f) {
          var p = this.getPlotLinePath({
              value: f,
              force: !0,
              acrossPanes: this.options.acrossPanes,
            }),
            q = this.getPlotLinePath({
              value: a,
              force: !0,
              acrossPanes: this.options.acrossPanes,
            }),
            u = [],
            m = this.horiz,
            h = 1;
          a = (a < this.min && f < this.min) || (a > this.max && f > this.max);
          if (q && p) {
            if (a) {
              var l = q.toString() === p.toString();
              h = 0;
            }
            for (a = 0; a < q.length; a += 2) {
              f = q[a];
              var k = q[a + 1],
                g = p[a],
                d = p[a + 1];
              ("M" !== f[0] && "L" !== f[0]) ||
                ("M" !== k[0] && "L" !== k[0]) ||
                ("M" !== g[0] && "L" !== g[0]) ||
                ("M" !== d[0] && "L" !== d[0]) ||
                (m && g[1] === f[1]
                  ? ((g[1] += h), (d[1] += h))
                  : m || g[2] !== f[2] || ((g[2] += h), (d[2] += h)),
                u.push(
                  ["M", f[1], f[2]],
                  ["L", k[1], k[2]],
                  ["L", d[1], d[2]],
                  ["L", g[1], g[2]],
                  ["Z"]
                ));
              u.isFlat = l;
            }
          }
          return u;
        },
        addPlotBand: function (a) {
          return this.addPlotBandOrLine(a, "plotBands");
        },
        addPlotLine: function (a) {
          return this.addPlotBandOrLine(a, "plotLines");
        },
        addPlotBandOrLine: function (a, f) {
          var p = new K(this, a).render(),
            q = this.userOptions;
          if (p) {
            if (f) {
              var u = q[f] || [];
              u.push(a);
              q[f] = u;
            }
            this.plotLinesAndBands.push(p);
            this._addedPlotLB = !0;
          }
          return p;
        },
        removePlotBandOrLine: function (a) {
          for (
            var f = this.plotLinesAndBands,
              t = this.options,
              q = this.userOptions,
              u = f.length;
            u--;

          )
            f[u].id === a && f[u].destroy();
          [
            t.plotLines || [],
            q.plotLines || [],
            t.plotBands || [],
            q.plotBands || [],
          ].forEach(function (f) {
            for (u = f.length; u--; ) (f[u] || {}).id === a && J(f, f[u]);
          });
        },
        removePlotBand: function (a) {
          this.removePlotBandOrLine(a);
        },
        removePlotLine: function (a) {
          this.removePlotBandOrLine(a);
        },
      });
      a.PlotLineOrBand = K;
      return a.PlotLineOrBand;
    }
  );
  O(
    n,
    "Core/Tooltip.js",
    [n["Core/Globals.js"], n["Core/Utilities.js"]],
    function (f, a) {
      var n = f.doc,
        y = a.clamp,
        D = a.css,
        G = a.defined,
        C = a.discardElement,
        J = a.extend,
        H = a.fireEvent,
        v = a.format,
        L = a.isNumber,
        q = a.isString,
        K = a.merge,
        E = a.pick,
        p = a.splat,
        t = a.syncTimeout,
        I = a.timeUnits;
      ("");
      var u = (function () {
        function m(h, a) {
          this.container = void 0;
          this.crosshairs = [];
          this.distance = 0;
          this.isHidden = !0;
          this.isSticky = !1;
          this.now = {};
          this.options = {};
          this.outside = !1;
          this.chart = h;
          this.init(h, a);
        }
        m.prototype.applyFilter = function () {
          var h = this.chart;
          h.renderer.definition({
            tagName: "filter",
            id: "drop-shadow-" + h.index,
            opacity: 0.5,
            children: [
              { tagName: "feGaussianBlur", in: "SourceAlpha", stdDeviation: 1 },
              { tagName: "feOffset", dx: 1, dy: 1 },
              {
                tagName: "feComponentTransfer",
                children: [{ tagName: "feFuncA", type: "linear", slope: 0.3 }],
              },
              {
                tagName: "feMerge",
                children: [
                  { tagName: "feMergeNode" },
                  { tagName: "feMergeNode", in: "SourceGraphic" },
                ],
              },
            ],
          });
          h.renderer.definition({
            tagName: "style",
            textContent:
              ".highcharts-tooltip-" +
              h.index +
              "{filter:url(#drop-shadow-" +
              h.index +
              ")}",
          });
        };
        m.prototype.bodyFormatter = function (h) {
          return h.map(function (h) {
            var k = h.series.tooltipOptions;
            return (
              k[(h.point.formatPrefix || "point") + "Formatter"] ||
              h.point.tooltipFormatter
            ).call(
              h.point,
              k[(h.point.formatPrefix || "point") + "Format"] || ""
            );
          });
        };
        m.prototype.cleanSplit = function (h) {
          this.chart.series.forEach(function (a) {
            var k = a && a.tt;
            k && (!k.isActive || h ? (a.tt = k.destroy()) : (k.isActive = !1));
          });
        };
        m.prototype.defaultFormatter = function (h) {
          var a = this.points || p(this);
          var k = [h.tooltipFooterHeaderFormatter(a[0])];
          k = k.concat(h.bodyFormatter(a));
          k.push(h.tooltipFooterHeaderFormatter(a[0], !0));
          return k;
        };
        m.prototype.destroy = function () {
          this.label && (this.label = this.label.destroy());
          this.split &&
            this.tt &&
            (this.cleanSplit(this.chart, !0), (this.tt = this.tt.destroy()));
          this.renderer &&
            ((this.renderer = this.renderer.destroy()), C(this.container));
          a.clearTimeout(this.hideTimer);
          a.clearTimeout(this.tooltipTimeout);
        };
        m.prototype.getAnchor = function (h, a) {
          var k = this.chart,
            g = k.pointer,
            d = k.inverted,
            l = k.plotTop,
            f = k.plotLeft,
            m = 0,
            t = 0,
            B,
            M;
          h = p(h);
          this.followPointer && a
            ? ("undefined" === typeof a.chartX && (a = g.normalize(a)),
              (h = [a.chartX - f, a.chartY - l]))
            : h[0].tooltipPos
            ? (h = h[0].tooltipPos)
            : (h.forEach(function (g) {
                B = g.series.yAxis;
                M = g.series.xAxis;
                m += g.plotX + (!d && M ? M.left - f : 0);
                t +=
                  (g.plotLow ? (g.plotLow + g.plotHigh) / 2 : g.plotY) +
                  (!d && B ? B.top - l : 0);
              }),
              (m /= h.length),
              (t /= h.length),
              (h = [
                d ? k.plotWidth - t : m,
                this.shared && !d && 1 < h.length && a
                  ? a.chartY - l
                  : d
                  ? k.plotHeight - m
                  : t,
              ]));
          return h.map(Math.round);
        };
        m.prototype.getDateFormat = function (h, a, k, g) {
          var d = this.chart.time,
            l = d.dateFormat("%m-%d %H:%M:%S.%L", a),
            f = { millisecond: 15, second: 12, minute: 9, hour: 6, day: 3 },
            m = "millisecond";
          for (p in I) {
            if (
              h === I.week &&
              +d.dateFormat("%w", a) === k &&
              "00:00:00.000" === l.substr(6)
            ) {
              var p = "week";
              break;
            }
            if (I[p] > h) {
              p = m;
              break;
            }
            if (f[p] && l.substr(f[p]) !== "01-01 00:00:00.000".substr(f[p]))
              break;
            "week" !== p && (m = p);
          }
          if (p) var B = d.resolveDTLFormat(g[p]).main;
          return B;
        };
        m.prototype.getLabel = function () {
          var h,
            a,
            k = this,
            g = this.chart.renderer,
            d = this.chart.styledMode,
            m = this.options,
            r = "tooltip" + (G(m.className) ? " " + m.className : ""),
            p =
              (null === (h = m.style) || void 0 === h
                ? void 0
                : h.pointerEvents) ||
              (!this.followPointer && m.stickOnContact ? "auto" : "none"),
            t;
          h = function () {
            k.inContact = !0;
          };
          var B = function () {
            var e = k.chart.hoverSeries;
            k.inContact = !1;
            if (e && e.onMouseOut) e.onMouseOut();
          };
          if (!this.label) {
            this.outside &&
              ((this.container = t = f.doc.createElement("div")),
              (t.className = "highcharts-tooltip-container"),
              D(t, {
                position: "absolute",
                top: "1px",
                pointerEvents: p,
                zIndex: 3,
              }),
              f.doc.body.appendChild(t),
              (this.renderer = g = new f.Renderer(
                t,
                0,
                0,
                null === (a = this.chart.options.chart) || void 0 === a
                  ? void 0
                  : a.style,
                void 0,
                void 0,
                g.styledMode
              )));
            this.split
              ? (this.label = g.g(r))
              : ((this.label = g
                  .label(
                    "",
                    0,
                    0,
                    m.shape || "callout",
                    null,
                    null,
                    m.useHTML,
                    null,
                    r
                  )
                  .attr({ padding: m.padding, r: m.borderRadius })),
                d ||
                  this.label
                    .attr({
                      fill: m.backgroundColor,
                      "stroke-width": m.borderWidth,
                    })
                    .css(m.style)
                    .css({ pointerEvents: p })
                    .shadow(m.shadow));
            d &&
              (this.applyFilter(),
              this.label.addClass("highcharts-tooltip-" + this.chart.index));
            if (k.outside && !k.split) {
              var M = this.label,
                q = M.xSetter,
                F = M.ySetter;
              M.xSetter = function (e) {
                q.call(M, k.distance);
                t.style.left = e + "px";
              };
              M.ySetter = function (e) {
                F.call(M, k.distance);
                t.style.top = e + "px";
              };
            }
            this.label
              .on("mouseenter", h)
              .on("mouseleave", B)
              .attr({ zIndex: 8 })
              .add();
          }
          return this.label;
        };
        m.prototype.getPosition = function (a, l, k) {
          var g = this.chart,
            d = this.distance,
            h = {},
            f = (g.inverted && k.h) || 0,
            m,
            p = this.outside,
            B = p ? n.documentElement.clientWidth - 2 * d : g.chartWidth,
            M = p
              ? Math.max(
                  n.body.scrollHeight,
                  n.documentElement.scrollHeight,
                  n.body.offsetHeight,
                  n.documentElement.offsetHeight,
                  n.documentElement.clientHeight
                )
              : g.chartHeight,
            t = g.pointer.getChartPosition(),
            F = g.containerScaling,
            e = function (b) {
              return F ? b * F.scaleX : b;
            },
            c = function (b) {
              return F ? b * F.scaleY : b;
            },
            b = function (b) {
              var h = "x" === b;
              return [b, h ? B : M, h ? a : l].concat(
                p
                  ? [
                      h ? e(a) : c(l),
                      h
                        ? t.left - d + e(k.plotX + g.plotLeft)
                        : t.top - d + c(k.plotY + g.plotTop),
                      0,
                      h ? B : M,
                    ]
                  : [
                      h ? a : l,
                      h ? k.plotX + g.plotLeft : k.plotY + g.plotTop,
                      h ? g.plotLeft : g.plotTop,
                      h ? g.plotLeft + g.plotWidth : g.plotTop + g.plotHeight,
                    ]
              );
            },
            z = b("y"),
            w = b("x"),
            q =
              !this.followPointer && E(k.ttBelow, !g.inverted === !!k.negative),
            u = function (b, g, k, a, l, m, r) {
              var x = "y" === b ? c(d) : e(d),
                w = (k - a) / 2,
                p = a < l - d,
                B = l + d + a < g,
                z = l - x - k + w;
              l = l + x - w;
              if (q && B) h[b] = l;
              else if (!q && p) h[b] = z;
              else if (p) h[b] = Math.min(r - a, 0 > z - f ? z : z - f);
              else if (B) h[b] = Math.max(m, l + f + k > g ? l : l + f);
              else return !1;
            },
            v = function (b, c, e, g, k) {
              var a;
              k < d || k > c - d
                ? (a = !1)
                : (h[b] =
                    k < e / 2 ? 1 : k > c - g / 2 ? c - g - 2 : k - e / 2);
              return a;
            },
            I = function (b) {
              var c = z;
              z = w;
              w = c;
              m = b;
            },
            H = function () {
              !1 !== u.apply(0, z)
                ? !1 !== v.apply(0, w) || m || (I(!0), H())
                : m
                ? (h.x = h.y = 0)
                : (I(!0), H());
            };
          (g.inverted || 1 < this.len) && I();
          H();
          return h;
        };
        m.prototype.getXDateFormat = function (a, l, k) {
          l = l.dateTimeLabelFormats;
          var g = k && k.closestPointRange;
          return (
            (g
              ? this.getDateFormat(g, a.x, k.options.startOfWeek, l)
              : l.day) || l.year
          );
        };
        m.prototype.hide = function (h) {
          var l = this;
          a.clearTimeout(this.hideTimer);
          h = E(h, this.options.hideDelay, 500);
          this.isHidden ||
            (this.hideTimer = t(function () {
              l.getLabel().fadeOut(h ? void 0 : h);
              l.isHidden = !0;
            }, h));
        };
        m.prototype.init = function (a, l) {
          this.chart = a;
          this.options = l;
          this.crosshairs = [];
          this.now = { x: 0, y: 0 };
          this.isHidden = !0;
          this.split = l.split && !a.inverted && !a.polar;
          this.shared = l.shared || this.split;
          this.outside = E(
            l.outside,
            !(!a.scrollablePixelsX && !a.scrollablePixelsY)
          );
        };
        m.prototype.isStickyOnContact = function () {
          return !(
            this.followPointer ||
            !this.options.stickOnContact ||
            !this.inContact
          );
        };
        m.prototype.move = function (h, l, k, g) {
          var d = this,
            f = d.now,
            m =
              !1 !== d.options.animation &&
              !d.isHidden &&
              (1 < Math.abs(h - f.x) || 1 < Math.abs(l - f.y)),
            p = d.followPointer || 1 < d.len;
          J(f, {
            x: m ? (2 * f.x + h) / 3 : h,
            y: m ? (f.y + l) / 2 : l,
            anchorX: p ? void 0 : m ? (2 * f.anchorX + k) / 3 : k,
            anchorY: p ? void 0 : m ? (f.anchorY + g) / 2 : g,
          });
          d.getLabel().attr(f);
          d.drawTracker();
          m &&
            (a.clearTimeout(this.tooltipTimeout),
            (this.tooltipTimeout = setTimeout(function () {
              d && d.move(h, l, k, g);
            }, 32)));
        };
        m.prototype.refresh = function (h, l) {
          var k = this.chart,
            g = this.options,
            d = h,
            f = {},
            m = [],
            A = g.formatter || this.defaultFormatter;
          f = this.shared;
          var t = k.styledMode;
          if (g.enabled) {
            a.clearTimeout(this.hideTimer);
            this.followPointer = p(d)[0].series.tooltipOptions.followPointer;
            var B = this.getAnchor(d, l);
            l = B[0];
            var M = B[1];
            !f || (d.series && d.series.noSharedTooltip)
              ? (f = d.getLabelConfig())
              : (k.pointer.applyInactiveState(d),
                d.forEach(function (d) {
                  d.setState("hover");
                  m.push(d.getLabelConfig());
                }),
                (f = { x: d[0].category, y: d[0].y }),
                (f.points = m),
                (d = d[0]));
            this.len = m.length;
            k = A.call(f, this);
            A = d.series;
            this.distance = E(A.tooltipOptions.distance, 16);
            !1 === k
              ? this.hide()
              : (this.split
                  ? this.renderSplit(k, p(h))
                  : ((h = this.getLabel()),
                    (g.style.width && !t) ||
                      h.css({ width: this.chart.spacingBox.width + "px" }),
                    h.attr({ text: k && k.join ? k.join("") : k }),
                    h
                      .removeClass(/highcharts-color-[\d]+/g)
                      .addClass(
                        "highcharts-color-" + E(d.colorIndex, A.colorIndex)
                      ),
                    t ||
                      h.attr({
                        stroke:
                          g.borderColor || d.color || A.color || "#666666",
                      }),
                    this.updatePosition({
                      plotX: l,
                      plotY: M,
                      negative: d.negative,
                      ttBelow: d.ttBelow,
                      h: B[2] || 0,
                    })),
                this.isHidden &&
                  this.label &&
                  this.label.attr({ opacity: 1 }).show(),
                (this.isHidden = !1));
            H(this, "refresh");
          }
        };
        m.prototype.renderSplit = function (a, l) {
          function k(b, c, e, d, g) {
            void 0 === g && (g = !0);
            e
              ? ((c = H ? 0 : G), (b = y(b - d / 2, n.left, n.right - d)))
              : ((c -= K),
                (b = g ? b - d - z : b + z),
                (b = y(b, g ? b : n.left, n.right)));
            return { x: b, y: c };
          }
          var g = this,
            d = g.chart,
            h = g.chart,
            m = h.plotHeight,
            p = h.plotLeft,
            t = h.plotTop,
            B = h.pointer,
            M = h.renderer,
            u = h.scrollablePixelsY,
            F = void 0 === u ? 0 : u;
          u = h.scrollingContainer;
          u = void 0 === u ? { scrollLeft: 0, scrollTop: 0 } : u;
          var e = u.scrollLeft,
            c = u.scrollTop,
            b = h.styledMode,
            z = g.distance,
            w = g.options,
            v = g.options.positioner,
            n = {
              left: e,
              right: e + h.chartWidth,
              top: c,
              bottom: c + h.chartHeight,
            },
            I = g.getLabel(),
            H = !(!d.xAxis[0] || !d.xAxis[0].opposite),
            K = t + c,
            C = 0,
            G = m - F;
          q(a) && (a = [!1, a]);
          a = a.slice(0, l.length + 1).reduce(function (e, d, a) {
            if (!1 !== d && "" !== d) {
              a = l[a - 1] || {
                isHeader: !0,
                plotX: l[0].plotX,
                plotY: m,
                series: {},
              };
              var h = a.isHeader,
                f = h ? g : a.series,
                r = f.tt,
                x = a.isHeader;
              var B = a.series;
              var A =
                "highcharts-color-" + E(a.colorIndex, B.colorIndex, "none");
              r ||
                ((r = { padding: w.padding, r: w.borderRadius }),
                b ||
                  ((r.fill = w.backgroundColor),
                  (r["stroke-width"] = w.borderWidth)),
                (r = M.label(
                  "",
                  0,
                  0,
                  w[x ? "headerShape" : "shape"] || "callout",
                  void 0,
                  void 0,
                  w.useHTML
                )
                  .addClass(
                    (x ? "highcharts-tooltip-header " : "") +
                      "highcharts-tooltip-box " +
                      A
                  )
                  .attr(r)
                  .add(I)));
              r.isActive = !0;
              r.attr({ text: d });
              b ||
                r
                  .css(w.style)
                  .shadow(w.shadow)
                  .attr({
                    stroke: w.borderColor || a.color || B.color || "#333333",
                  });
              d = f.tt = r;
              x = d.getBBox();
              f = x.width + d.strokeWidth();
              h && ((C = x.height), (G += C), H && (K -= C));
              B = a.plotX;
              B = void 0 === B ? 0 : B;
              A = a.plotY;
              A = void 0 === A ? 0 : A;
              var Q = a.series;
              if (a.isHeader) {
                B = p + B;
                var u = t + m / 2;
              } else
                (r = Q.xAxis),
                  (Q = Q.yAxis),
                  (B = r.pos + y(B, -z, r.len + z)),
                  Q.pos + A >= c + t &&
                    Q.pos + A <= c + t + m - F &&
                    (u = Q.pos + A);
              B = y(B, n.left - z, n.right + z);
              "number" === typeof u
                ? ((x = x.height + 1),
                  (A = v ? v.call(g, f, x, a) : k(B, u, h, f)),
                  e.push({
                    align: v ? 0 : void 0,
                    anchorX: B,
                    anchorY: u,
                    boxWidth: f,
                    point: a,
                    rank: E(A.rank, h ? 1 : 0),
                    size: x,
                    target: A.y,
                    tt: d,
                    x: A.x,
                  }))
                : (d.isActive = !1);
            }
            return e;
          }, []);
          !v &&
            a.some(function (b) {
              return b.x < n.left;
            }) &&
            (a = a.map(function (b) {
              var c = k(b.anchorX, b.anchorY, b.point.isHeader, b.boxWidth, !1);
              return J(b, { target: c.y, x: c.x });
            }));
          g.cleanSplit();
          f.distribute(a, G);
          a.forEach(function (b) {
            var c = b.pos;
            b.tt.attr({
              visibility: "undefined" === typeof c ? "hidden" : "inherit",
              x: b.x,
              y: c + K,
              anchorX: b.anchorX,
              anchorY: b.anchorY,
            });
          });
          a = g.container;
          d = g.renderer;
          g.outside &&
            a &&
            d &&
            ((h = I.getBBox()),
            d.setSize(h.width + h.x, h.height + h.y, !1),
            (B = B.getChartPosition()),
            (a.style.left = B.left + "px"),
            (a.style.top = B.top + "px"));
        };
        m.prototype.drawTracker = function () {
          if (this.followPointer || !this.options.stickOnContact)
            this.tracker && this.tracker.destroy();
          else {
            var a = this.chart,
              l = this.label,
              k = a.hoverPoint;
            if (l && k) {
              var g = { x: 0, y: 0, width: 0, height: 0 };
              k = this.getAnchor(k);
              var d = l.getBBox();
              k[0] += a.plotLeft - l.translateX;
              k[1] += a.plotTop - l.translateY;
              g.x = Math.min(0, k[0]);
              g.y = Math.min(0, k[1]);
              g.width =
                0 > k[0]
                  ? Math.max(Math.abs(k[0]), d.width - k[0])
                  : Math.max(Math.abs(k[0]), d.width);
              g.height =
                0 > k[1]
                  ? Math.max(Math.abs(k[1]), d.height - Math.abs(k[1]))
                  : Math.max(Math.abs(k[1]), d.height);
              this.tracker
                ? this.tracker.attr(g)
                : ((this.tracker = l.renderer
                    .rect(g)
                    .addClass("highcharts-tracker")
                    .add(l)),
                  a.styledMode || this.tracker.attr({ fill: "rgba(0,0,0,0)" }));
            }
          }
        };
        m.prototype.styledModeFormat = function (a) {
          return a
            .replace('style="font-size: 10px"', 'class="highcharts-header"')
            .replace(
              /style="color:{(point|series)\.color}"/g,
              'class="highcharts-color-{$1.colorIndex}"'
            );
        };
        m.prototype.tooltipFooterHeaderFormatter = function (a, l) {
          var k = l ? "footer" : "header",
            g = a.series,
            d = g.tooltipOptions,
            h = d.xDateFormat,
            f = g.xAxis,
            m = f && "datetime" === f.options.type && L(a.key),
            p = d[k + "Format"];
          l = { isFooter: l, labelConfig: a };
          H(this, "headerFormatter", l, function (k) {
            m && !h && (h = this.getXDateFormat(a, d, f));
            m &&
              h &&
              ((a.point && a.point.tooltipDateKeys) || ["key"]).forEach(
                function (d) {
                  p = p.replace(
                    "{point." + d + "}",
                    "{point." + d + ":" + h + "}"
                  );
                }
              );
            g.chart.styledMode && (p = this.styledModeFormat(p));
            k.text = v(p, { point: a, series: g }, this.chart);
          });
          return l.text;
        };
        m.prototype.update = function (a) {
          this.destroy();
          K(!0, this.chart.options.tooltip.userOptions, a);
          this.init(this.chart, K(!0, this.options, a));
        };
        m.prototype.updatePosition = function (a) {
          var h = this.chart,
            k = h.pointer,
            g = this.getLabel(),
            d = a.plotX + h.plotLeft,
            f = a.plotY + h.plotTop;
          k = k.getChartPosition();
          a = (this.options.positioner || this.getPosition).call(
            this,
            g.width,
            g.height,
            a
          );
          if (this.outside) {
            var m = (this.options.borderWidth || 0) + 2 * this.distance;
            this.renderer.setSize(g.width + m, g.height + m, !1);
            if ((h = h.containerScaling))
              D(this.container, {
                transform: "scale(" + h.scaleX + ", " + h.scaleY + ")",
              }),
                (d *= h.scaleX),
                (f *= h.scaleY);
            d += k.left - a.x;
            f += k.top - a.y;
          }
          this.move(Math.round(a.x), Math.round(a.y || 0), d, f);
        };
        return m;
      })();
      f.Tooltip = u;
      return f.Tooltip;
    }
  );
  O(
    n,
    "Core/Pointer.js",
    [
      n["Core/Color.js"],
      n["Core/Globals.js"],
      n["Core/Tooltip.js"],
      n["Core/Utilities.js"],
    ],
    function (f, a, n, y) {
      var D = f.parse,
        G = a.charts,
        C = a.noop,
        J = y.addEvent,
        H = y.attr,
        v = y.css,
        L = y.defined,
        q = y.extend,
        K = y.find,
        E = y.fireEvent,
        p = y.isNumber,
        t = y.isObject,
        I = y.objectEach,
        u = y.offset,
        m = y.pick,
        h = y.splat;
      ("");
      f = (function () {
        function l(a, g) {
          this.lastValidTouch = {};
          this.pinchDown = [];
          this.runChartClick = !1;
          this.chart = a;
          this.hasDragged = !1;
          this.options = g;
          this.unbindContainerMouseLeave = function () {};
          this.unbindContainerMouseEnter = function () {};
          this.init(a, g);
        }
        l.prototype.applyInactiveState = function (a) {
          var g = [],
            d;
          (a || []).forEach(function (a) {
            d = a.series;
            g.push(d);
            d.linkedParent && g.push(d.linkedParent);
            d.linkedSeries && (g = g.concat(d.linkedSeries));
            d.navigatorSeries && g.push(d.navigatorSeries);
          });
          this.chart.series.forEach(function (d) {
            -1 === g.indexOf(d)
              ? d.setState("inactive", !0)
              : d.options.inactiveOtherPoints &&
                d.setAllPointsToState("inactive");
          });
        };
        l.prototype.destroy = function () {
          var k = this;
          "undefined" !== typeof k.unDocMouseMove && k.unDocMouseMove();
          this.unbindContainerMouseLeave();
          a.chartCount ||
            (a.unbindDocumentMouseUp &&
              (a.unbindDocumentMouseUp = a.unbindDocumentMouseUp()),
            a.unbindDocumentTouchEnd &&
              (a.unbindDocumentTouchEnd = a.unbindDocumentTouchEnd()));
          clearInterval(k.tooltipTimeout);
          I(k, function (g, d) {
            k[d] = void 0;
          });
        };
        l.prototype.drag = function (a) {
          var g = this.chart,
            d = g.options.chart,
            k = a.chartX,
            h = a.chartY,
            l = this.zoomHor,
            f = this.zoomVert,
            m = g.plotLeft,
            p = g.plotTop,
            u = g.plotWidth,
            F = g.plotHeight,
            e = this.selectionMarker,
            c = this.mouseDownX || 0,
            b = this.mouseDownY || 0,
            z = t(d.panning) ? d.panning && d.panning.enabled : d.panning,
            w = d.panKey && a[d.panKey + "Key"];
          if (!e || !e.touch)
            if (
              (k < m ? (k = m) : k > m + u && (k = m + u),
              h < p ? (h = p) : h > p + F && (h = p + F),
              (this.hasDragged = Math.sqrt(
                Math.pow(c - k, 2) + Math.pow(b - h, 2)
              )),
              10 < this.hasDragged)
            ) {
              var q = g.isInsidePlot(c - m, b - p);
              g.hasCartesianSeries &&
                (this.zoomX || this.zoomY) &&
                q &&
                !w &&
                !e &&
                ((this.selectionMarker = e = g.renderer
                  .rect(m, p, l ? 1 : u, f ? 1 : F, 0)
                  .attr({ class: "highcharts-selection-marker", zIndex: 7 })
                  .add()),
                g.styledMode ||
                  e.attr({
                    fill:
                      d.selectionMarkerFill ||
                      D("#335cad").setOpacity(0.25).get(),
                  }));
              e &&
                l &&
                ((k -= c),
                e.attr({ width: Math.abs(k), x: (0 < k ? 0 : k) + c }));
              e &&
                f &&
                ((k = h - b),
                e.attr({ height: Math.abs(k), y: (0 < k ? 0 : k) + b }));
              q && !e && z && g.pan(a, d.panning);
            }
        };
        l.prototype.dragStart = function (a) {
          var g = this.chart;
          g.mouseIsDown = a.type;
          g.cancelClick = !1;
          g.mouseDownX = this.mouseDownX = a.chartX;
          g.mouseDownY = this.mouseDownY = a.chartY;
        };
        l.prototype.drop = function (a) {
          var g = this,
            d = this.chart,
            k = this.hasPinched;
          if (this.selectionMarker) {
            var h = { originalEvent: a, xAxis: [], yAxis: [] },
              l = this.selectionMarker,
              f = l.attr ? l.attr("x") : l.x,
              m = l.attr ? l.attr("y") : l.y,
              t = l.attr ? l.attr("width") : l.width,
              u = l.attr ? l.attr("height") : l.height,
              F;
            if (this.hasDragged || k)
              d.axes.forEach(function (e) {
                if (
                  e.zoomEnabled &&
                  L(e.min) &&
                  (k || g[{ xAxis: "zoomX", yAxis: "zoomY" }[e.coll]]) &&
                  p(f) &&
                  p(m)
                ) {
                  var c = e.horiz,
                    b = "touchend" === a.type ? e.minPixelPadding : 0,
                    d = e.toValue((c ? f : m) + b);
                  c = e.toValue((c ? f + t : m + u) - b);
                  h[e.coll].push({
                    axis: e,
                    min: Math.min(d, c),
                    max: Math.max(d, c),
                  });
                  F = !0;
                }
              }),
                F &&
                  E(d, "selection", h, function (e) {
                    d.zoom(q(e, k ? { animation: !1 } : null));
                  });
            p(d.index) &&
              (this.selectionMarker = this.selectionMarker.destroy());
            k && this.scaleGroups();
          }
          d &&
            p(d.index) &&
            (v(d.container, { cursor: d._cursor }),
            (d.cancelClick = 10 < this.hasDragged),
            (d.mouseIsDown = this.hasDragged = this.hasPinched = !1),
            (this.pinchDown = []));
        };
        l.prototype.findNearestKDPoint = function (a, g, d) {
          var k = this.chart,
            h = k.hoverPoint;
          k = k.tooltip;
          if (h && k && k.isStickyOnContact()) return h;
          var l;
          a.forEach(function (a) {
            var k =
              !(a.noSharedTooltip && g) &&
              0 > a.options.findNearestPointBy.indexOf("y");
            a = a.searchPoint(d, k);
            if ((k = t(a, !0)) && !(k = !t(l, !0))) {
              k = l.distX - a.distX;
              var h = l.dist - a.dist,
                f =
                  (a.series.group && a.series.group.zIndex) -
                  (l.series.group && l.series.group.zIndex);
              k =
                0 <
                (0 !== k && g
                  ? k
                  : 0 !== h
                  ? h
                  : 0 !== f
                  ? f
                  : l.series.index > a.series.index
                  ? -1
                  : 1);
            }
            k && (l = a);
          });
          return l;
        };
        l.prototype.getChartCoordinatesFromPoint = function (a, g) {
          var d = a.series,
            k = d.xAxis;
          d = d.yAxis;
          var h = m(a.clientX, a.plotX),
            l = a.shapeArgs;
          if (k && d)
            return g
              ? { chartX: k.len + k.pos - h, chartY: d.len + d.pos - a.plotY }
              : { chartX: h + k.pos, chartY: a.plotY + d.pos };
          if (l && l.x && l.y) return { chartX: l.x, chartY: l.y };
        };
        l.prototype.getChartPosition = function () {
          return (
            this.chartPosition || (this.chartPosition = u(this.chart.container))
          );
        };
        l.prototype.getCoordinates = function (a) {
          var g = { xAxis: [], yAxis: [] };
          this.chart.axes.forEach(function (d) {
            g[d.isXAxis ? "xAxis" : "yAxis"].push({
              axis: d,
              value: d.toValue(a[d.horiz ? "chartX" : "chartY"]),
            });
          });
          return g;
        };
        l.prototype.getHoverData = function (a, g, d, h, l, f) {
          var k,
            r = [];
          h = !(!h || !a);
          var p = g && !g.stickyTracking,
            x = {
              chartX: f ? f.chartX : void 0,
              chartY: f ? f.chartY : void 0,
              shared: l,
            };
          E(this, "beforeGetHoverData", x);
          p = p
            ? [g]
            : d.filter(function (d) {
                return x.filter
                  ? x.filter(d)
                  : d.visible &&
                      !(!l && d.directTouch) &&
                      m(d.options.enableMouseTracking, !0) &&
                      d.stickyTracking;
              });
          g = (k = h || !f ? a : this.findNearestKDPoint(p, l, f)) && k.series;
          k &&
            (l && !g.noSharedTooltip
              ? ((p = d.filter(function (d) {
                  return x.filter
                    ? x.filter(d)
                    : d.visible &&
                        !(!l && d.directTouch) &&
                        m(d.options.enableMouseTracking, !0) &&
                        !d.noSharedTooltip;
                })),
                p.forEach(function (d) {
                  var e = K(d.points, function (c) {
                    return c.x === k.x && !c.isNull;
                  });
                  t(e) &&
                    (d.chart.isBoosting && (e = d.getPoint(e)), r.push(e));
                }))
              : r.push(k));
          x = { hoverPoint: k };
          E(this, "afterGetHoverData", x);
          return { hoverPoint: x.hoverPoint, hoverSeries: g, hoverPoints: r };
        };
        l.prototype.getPointFromEvent = function (a) {
          a = a.target;
          for (var g; a && !g; ) (g = a.point), (a = a.parentNode);
          return g;
        };
        l.prototype.onTrackerMouseOut = function (a) {
          a = a.relatedTarget || a.toElement;
          var g = this.chart.hoverSeries;
          this.isDirectTouch = !1;
          if (
            !(
              !g ||
              !a ||
              g.stickyTracking ||
              this.inClass(a, "highcharts-tooltip") ||
              (this.inClass(a, "highcharts-series-" + g.index) &&
                this.inClass(a, "highcharts-tracker"))
            )
          )
            g.onMouseOut();
        };
        l.prototype.inClass = function (a, g) {
          for (var d; a; ) {
            if ((d = H(a, "class"))) {
              if (-1 !== d.indexOf(g)) return !0;
              if (-1 !== d.indexOf("highcharts-container")) return !1;
            }
            a = a.parentNode;
          }
        };
        l.prototype.init = function (a, g) {
          this.options = g;
          this.chart = a;
          this.runChartClick = g.chart.events && !!g.chart.events.click;
          this.pinchDown = [];
          this.lastValidTouch = {};
          n &&
            ((a.tooltip = new n(a, g.tooltip)),
            (this.followTouchMove = m(g.tooltip.followTouchMove, !0)));
          this.setDOMEvents();
        };
        l.prototype.normalize = function (a, g) {
          var d = a.touches,
            k = d
              ? d.length
                ? d.item(0)
                : m(d.changedTouches, a.changedTouches)[0]
              : a;
          g || (g = this.getChartPosition());
          d = k.pageX - g.left;
          g = k.pageY - g.top;
          if ((k = this.chart.containerScaling))
            (d /= k.scaleX), (g /= k.scaleY);
          return q(a, { chartX: Math.round(d), chartY: Math.round(g) });
        };
        l.prototype.onContainerClick = function (a) {
          var g = this.chart,
            d = g.hoverPoint;
          a = this.normalize(a);
          var k = g.plotLeft,
            h = g.plotTop;
          g.cancelClick ||
            (d && this.inClass(a.target, "highcharts-tracker")
              ? (E(d.series, "click", q(a, { point: d })),
                g.hoverPoint && d.firePointEvent("click", a))
              : (q(a, this.getCoordinates(a)),
                g.isInsidePlot(a.chartX - k, a.chartY - h) &&
                  E(g, "click", a)));
        };
        l.prototype.onContainerMouseDown = function (k) {
          var g = 1 === ((k.buttons || k.button) & 1);
          k = this.normalize(k);
          if (a.isFirefox && 0 !== k.button) this.onContainerMouseMove(k);
          if ("undefined" === typeof k.button || g)
            this.zoomOption(k),
              g && k.preventDefault && k.preventDefault(),
              this.dragStart(k);
        };
        l.prototype.onContainerMouseLeave = function (k) {
          var g = G[m(a.hoverChartIndex, -1)],
            d = this.chart.tooltip;
          k = this.normalize(k);
          g &&
            (k.relatedTarget || k.toElement) &&
            (g.pointer.reset(), (g.pointer.chartPosition = void 0));
          d && !d.isHidden && this.reset();
        };
        l.prototype.onContainerMouseEnter = function (a) {
          delete this.chartPosition;
        };
        l.prototype.onContainerMouseMove = function (a) {
          var g = this.chart;
          a = this.normalize(a);
          this.setHoverChartIndex();
          a.preventDefault || (a.returnValue = !1);
          "mousedown" === g.mouseIsDown && this.drag(a);
          g.openMenu ||
            (!this.inClass(a.target, "highcharts-tracker") &&
              !g.isInsidePlot(a.chartX - g.plotLeft, a.chartY - g.plotTop)) ||
            this.runPointActions(a);
        };
        l.prototype.onDocumentTouchEnd = function (k) {
          G[a.hoverChartIndex] && G[a.hoverChartIndex].pointer.drop(k);
        };
        l.prototype.onContainerTouchMove = function (a) {
          this.touch(a);
        };
        l.prototype.onContainerTouchStart = function (a) {
          this.zoomOption(a);
          this.touch(a, !0);
        };
        l.prototype.onDocumentMouseMove = function (a) {
          var g = this.chart,
            d = this.chartPosition;
          a = this.normalize(a, d);
          var h = g.tooltip;
          !d ||
            (h && h.isStickyOnContact()) ||
            g.isInsidePlot(a.chartX - g.plotLeft, a.chartY - g.plotTop) ||
            this.inClass(a.target, "highcharts-tracker") ||
            this.reset();
        };
        l.prototype.onDocumentMouseUp = function (h) {
          var g = G[m(a.hoverChartIndex, -1)];
          g && g.pointer.drop(h);
        };
        l.prototype.pinch = function (a) {
          var g = this,
            d = g.chart,
            h = g.pinchDown,
            k = a.touches || [],
            l = k.length,
            f = g.lastValidTouch,
            p = g.hasZoom,
            t = g.selectionMarker,
            u = {},
            F =
              1 === l &&
              ((g.inClass(a.target, "highcharts-tracker") &&
                d.runTrackerClick) ||
                g.runChartClick),
            e = {};
          1 < l && (g.initiated = !0);
          p && g.initiated && !F && a.preventDefault();
          [].map.call(k, function (c) {
            return g.normalize(c);
          });
          "touchstart" === a.type
            ? ([].forEach.call(k, function (c, b) {
                h[b] = { chartX: c.chartX, chartY: c.chartY };
              }),
              (f.x = [h[0].chartX, h[1] && h[1].chartX]),
              (f.y = [h[0].chartY, h[1] && h[1].chartY]),
              d.axes.forEach(function (c) {
                if (c.zoomEnabled) {
                  var b = d.bounds[c.horiz ? "h" : "v"],
                    e = c.minPixelPadding,
                    g = c.toPixels(
                      Math.min(m(c.options.min, c.dataMin), c.dataMin)
                    ),
                    a = c.toPixels(
                      Math.max(m(c.options.max, c.dataMax), c.dataMax)
                    ),
                    h = Math.max(g, a);
                  b.min = Math.min(c.pos, Math.min(g, a) - e);
                  b.max = Math.max(c.pos + c.len, h + e);
                }
              }),
              (g.res = !0))
            : g.followTouchMove && 1 === l
            ? this.runPointActions(g.normalize(a))
            : h.length &&
              (t ||
                (g.selectionMarker = t = q(
                  { destroy: C, touch: !0 },
                  d.plotBox
                )),
              g.pinchTranslate(h, k, u, t, e, f),
              (g.hasPinched = p),
              g.scaleGroups(u, e),
              g.res && ((g.res = !1), this.reset(!1, 0)));
        };
        l.prototype.pinchTranslate = function (a, g, d, h, l, f) {
          this.zoomHor && this.pinchTranslateDirection(!0, a, g, d, h, l, f);
          this.zoomVert && this.pinchTranslateDirection(!1, a, g, d, h, l, f);
        };
        l.prototype.pinchTranslateDirection = function (
          a,
          g,
          d,
          h,
          l,
          f,
          m,
          p
        ) {
          var k = this.chart,
            r = a ? "x" : "y",
            x = a ? "X" : "Y",
            e = "chart" + x,
            c = a ? "width" : "height",
            b = k["plot" + (a ? "Left" : "Top")],
            B,
            w,
            t = p || 1,
            A = k.inverted,
            u = k.bounds[a ? "h" : "v"],
            q = 1 === g.length,
            v = g[0][e],
            n = d[0][e],
            I = !q && g[1][e],
            N = !q && d[1][e];
          d = function () {
            "number" === typeof N &&
              20 < Math.abs(v - I) &&
              (t = p || Math.abs(n - N) / Math.abs(v - I));
            w = (b - n) / t + v;
            B = k["plot" + (a ? "Width" : "Height")] / t;
          };
          d();
          g = w;
          if (g < u.min) {
            g = u.min;
            var H = !0;
          } else g + B > u.max && ((g = u.max - B), (H = !0));
          H
            ? ((n -= 0.8 * (n - m[r][0])),
              "number" === typeof N && (N -= 0.8 * (N - m[r][1])),
              d())
            : (m[r] = [n, N]);
          A || ((f[r] = w - b), (f[c] = B));
          f = A ? 1 / t : t;
          l[c] = B;
          l[r] = g;
          h[A ? (a ? "scaleY" : "scaleX") : "scale" + x] = t;
          h["translate" + x] = f * b + (n - f * v);
        };
        l.prototype.reset = function (a, g) {
          var d = this.chart,
            k = d.hoverSeries,
            l = d.hoverPoint,
            f = d.hoverPoints,
            m = d.tooltip,
            p = m && m.shared ? f : l;
          a &&
            p &&
            h(p).forEach(function (d) {
              d.series.isCartesian &&
                "undefined" === typeof d.plotX &&
                (a = !1);
            });
          if (a)
            m &&
              p &&
              h(p).length &&
              (m.refresh(p),
              m.shared && f
                ? f.forEach(function (d) {
                    d.setState(d.state, !0);
                    d.series.isCartesian &&
                      (d.series.xAxis.crosshair &&
                        d.series.xAxis.drawCrosshair(null, d),
                      d.series.yAxis.crosshair &&
                        d.series.yAxis.drawCrosshair(null, d));
                  })
                : l &&
                  (l.setState(l.state, !0),
                  d.axes.forEach(function (d) {
                    d.crosshair &&
                      l.series[d.coll] === d &&
                      d.drawCrosshair(null, l);
                  })));
          else {
            if (l) l.onMouseOut();
            f &&
              f.forEach(function (d) {
                d.setState();
              });
            if (k) k.onMouseOut();
            m && m.hide(g);
            this.unDocMouseMove &&
              (this.unDocMouseMove = this.unDocMouseMove());
            d.axes.forEach(function (d) {
              d.hideCrosshair();
            });
            this.hoverX = d.hoverPoints = d.hoverPoint = null;
          }
        };
        l.prototype.runPointActions = function (h, g) {
          var d = this.chart,
            k = d.tooltip && d.tooltip.options.enabled ? d.tooltip : void 0,
            l = k ? k.shared : !1,
            f = g || d.hoverPoint,
            p = (f && f.series) || d.hoverSeries;
          p = this.getHoverData(
            f,
            p,
            d.series,
            (!h || "touchmove" !== h.type) &&
              (!!g || (p && p.directTouch && this.isDirectTouch)),
            l,
            h
          );
          f = p.hoverPoint;
          var B = p.hoverPoints;
          g = (p = p.hoverSeries) && p.tooltipOptions.followPointer;
          l = l && p && !p.noSharedTooltip;
          if (f && (f !== d.hoverPoint || (k && k.isHidden))) {
            (d.hoverPoints || []).forEach(function (d) {
              -1 === B.indexOf(d) && d.setState();
            });
            if (d.hoverSeries !== p) p.onMouseOver();
            this.applyInactiveState(B);
            (B || []).forEach(function (d) {
              d.setState("hover");
            });
            d.hoverPoint && d.hoverPoint.firePointEvent("mouseOut");
            if (!f.series) return;
            d.hoverPoints = B;
            d.hoverPoint = f;
            f.firePointEvent("mouseOver");
            k && k.refresh(l ? B : f, h);
          } else
            g &&
              k &&
              !k.isHidden &&
              ((f = k.getAnchor([{}], h)),
              k.updatePosition({ plotX: f[0], plotY: f[1] }));
          this.unDocMouseMove ||
            (this.unDocMouseMove = J(
              d.container.ownerDocument,
              "mousemove",
              function (d) {
                var g = G[a.hoverChartIndex];
                if (g) g.pointer.onDocumentMouseMove(d);
              }
            ));
          d.axes.forEach(function (g) {
            var a = m((g.crosshair || {}).snap, !0),
              k;
            a &&
              (((k = d.hoverPoint) && k.series[g.coll] === g) ||
                (k = K(B, function (e) {
                  return e.series[g.coll] === g;
                })));
            k || !a ? g.drawCrosshair(h, k) : g.hideCrosshair();
          });
        };
        l.prototype.scaleGroups = function (a, g) {
          var d = this.chart,
            h;
          d.series.forEach(function (k) {
            h = a || k.getPlotBox();
            k.xAxis &&
              k.xAxis.zoomEnabled &&
              k.group &&
              (k.group.attr(h),
              k.markerGroup &&
                (k.markerGroup.attr(h),
                k.markerGroup.clip(g ? d.clipRect : null)),
              k.dataLabelsGroup && k.dataLabelsGroup.attr(h));
          });
          d.clipRect.attr(g || d.clipBox);
        };
        l.prototype.setDOMEvents = function () {
          var h = this.chart.container,
            g = h.ownerDocument;
          h.onmousedown = this.onContainerMouseDown.bind(this);
          h.onmousemove = this.onContainerMouseMove.bind(this);
          h.onclick = this.onContainerClick.bind(this);
          this.unbindContainerMouseEnter = J(
            h,
            "mouseenter",
            this.onContainerMouseEnter.bind(this)
          );
          this.unbindContainerMouseLeave = J(
            h,
            "mouseleave",
            this.onContainerMouseLeave.bind(this)
          );
          a.unbindDocumentMouseUp ||
            (a.unbindDocumentMouseUp = J(
              g,
              "mouseup",
              this.onDocumentMouseUp.bind(this)
            ));
          a.hasTouch &&
            (J(h, "touchstart", this.onContainerTouchStart.bind(this)),
            J(h, "touchmove", this.onContainerTouchMove.bind(this)),
            a.unbindDocumentTouchEnd ||
              (a.unbindDocumentTouchEnd = J(
                g,
                "touchend",
                this.onDocumentTouchEnd.bind(this)
              )));
        };
        l.prototype.setHoverChartIndex = function () {
          var h = this.chart,
            g = a.charts[m(a.hoverChartIndex, -1)];
          if (g && g !== h)
            g.pointer.onContainerMouseLeave({ relatedTarget: !0 });
          (g && g.mouseIsDown) || (a.hoverChartIndex = h.index);
        };
        l.prototype.touch = function (a, g) {
          var d = this.chart,
            h;
          this.setHoverChartIndex();
          if (1 === a.touches.length)
            if (
              ((a = this.normalize(a)),
              (h = d.isInsidePlot(
                a.chartX - d.plotLeft,
                a.chartY - d.plotTop
              )) && !d.openMenu)
            ) {
              g && this.runPointActions(a);
              if ("touchmove" === a.type) {
                g = this.pinchDown;
                var k = g[0]
                  ? 4 <=
                    Math.sqrt(
                      Math.pow(g[0].chartX - a.chartX, 2) +
                        Math.pow(g[0].chartY - a.chartY, 2)
                    )
                  : !1;
              }
              m(k, !0) && this.pinch(a);
            } else g && this.reset();
          else 2 === a.touches.length && this.pinch(a);
        };
        l.prototype.zoomOption = function (a) {
          var g = this.chart,
            d = g.options.chart,
            h = d.zoomType || "";
          g = g.inverted;
          /touch/.test(a.type) && (h = m(d.pinchType, h));
          this.zoomX = a = /x/.test(h);
          this.zoomY = h = /y/.test(h);
          this.zoomHor = (a && !g) || (h && g);
          this.zoomVert = (h && !g) || (a && g);
          this.hasZoom = a || h;
        };
        return l;
      })();
      return (a.Pointer = f);
    }
  );
  O(
    n,
    "Core/MSPointer.js",
    [n["Core/Globals.js"], n["Core/Pointer.js"], n["Core/Utilities.js"]],
    function (f, a, n) {
      function y() {
        var a = [];
        a.item = function (a) {
          return this[a];
        };
        q(E, function (f) {
          a.push({ pageX: f.pageX, pageY: f.pageY, target: f.target });
        });
        return a;
      }
      function D(a, p, u, m) {
        ("touch" !== a.pointerType &&
          a.pointerType !== a.MSPOINTER_TYPE_TOUCH) ||
          !C[f.hoverChartIndex] ||
          (m(a),
          (m = C[f.hoverChartIndex].pointer),
          m[p]({
            type: u,
            target: a.currentTarget,
            preventDefault: H,
            touches: y(),
          }));
      }
      var G =
          (this && this.__extends) ||
          (function () {
            var a = function (f, p) {
              a =
                Object.setPrototypeOf ||
                ({ __proto__: [] } instanceof Array &&
                  function (a, h) {
                    a.__proto__ = h;
                  }) ||
                function (a, h) {
                  for (var l in h) h.hasOwnProperty(l) && (a[l] = h[l]);
                };
              return a(f, p);
            };
            return function (f, p) {
              function m() {
                this.constructor = f;
              }
              a(f, p);
              f.prototype =
                null === p
                  ? Object.create(p)
                  : ((m.prototype = p.prototype), new m());
            };
          })(),
        C = f.charts,
        J = f.doc,
        H = f.noop,
        v = n.addEvent,
        L = n.css,
        q = n.objectEach,
        K = n.removeEvent,
        E = {},
        p = !!f.win.PointerEvent;
      return (function (a) {
        function f() {
          return (null !== a && a.apply(this, arguments)) || this;
        }
        G(f, a);
        f.prototype.batchMSEvents = function (a) {
          a(
            this.chart.container,
            p ? "pointerdown" : "MSPointerDown",
            this.onContainerPointerDown
          );
          a(
            this.chart.container,
            p ? "pointermove" : "MSPointerMove",
            this.onContainerPointerMove
          );
          a(J, p ? "pointerup" : "MSPointerUp", this.onDocumentPointerUp);
        };
        f.prototype.destroy = function () {
          this.batchMSEvents(K);
          a.prototype.destroy.call(this);
        };
        f.prototype.init = function (f, m) {
          a.prototype.init.call(this, f, m);
          this.hasZoom &&
            L(f.container, {
              "-ms-touch-action": "none",
              "touch-action": "none",
            });
        };
        f.prototype.onContainerPointerDown = function (a) {
          D(a, "onContainerTouchStart", "touchstart", function (a) {
            E[a.pointerId] = {
              pageX: a.pageX,
              pageY: a.pageY,
              target: a.currentTarget,
            };
          });
        };
        f.prototype.onContainerPointerMove = function (a) {
          D(a, "onContainerTouchMove", "touchmove", function (a) {
            E[a.pointerId] = { pageX: a.pageX, pageY: a.pageY };
            E[a.pointerId].target || (E[a.pointerId].target = a.currentTarget);
          });
        };
        f.prototype.onDocumentPointerUp = function (a) {
          D(a, "onDocumentTouchEnd", "touchend", function (a) {
            delete E[a.pointerId];
          });
        };
        f.prototype.setDOMEvents = function () {
          a.prototype.setDOMEvents.call(this);
          (this.hasZoom || this.followTouchMove) && this.batchMSEvents(v);
        };
        return f;
      })(a);
    }
  );
  O(
    n,
    "Core/Legend.js",
    [n["Core/Globals.js"], n["Core/Utilities.js"]],
    function (f, a) {
      var n = a.addEvent,
        y = a.animObject,
        D = a.css,
        G = a.defined,
        C = a.discardElement,
        J = a.find,
        H = a.fireEvent,
        v = a.format,
        L = a.isNumber,
        q = a.merge,
        K = a.pick,
        E = a.relativeLength,
        p = a.setAnimation,
        t = a.stableSort,
        I = a.syncTimeout;
      a = a.wrap;
      var u = f.isFirefox,
        m = f.marginNames,
        h = f.win,
        l = (function () {
          function a(a, d) {
            this.allItems = [];
            this.contentGroup = this.box = void 0;
            this.display = !1;
            this.group = void 0;
            this.offsetWidth = this.maxLegendWidth = this.maxItemWidth = this.legendWidth = this.legendHeight = this.lastLineHeight = this.lastItemY = this.itemY = this.itemX = this.itemMarginTop = this.itemMarginBottom = this.itemHeight = this.initialItemY = 0;
            this.options = {};
            this.padding = 0;
            this.pages = [];
            this.proximate = !1;
            this.scrollGroup = void 0;
            this.widthOption = this.totalItemWidth = this.titleHeight = this.symbolWidth = this.symbolHeight = 0;
            this.chart = a;
            this.init(a, d);
          }
          a.prototype.init = function (a, d) {
            this.chart = a;
            this.setOptions(d);
            d.enabled &&
              (this.render(),
              n(this.chart, "endResize", function () {
                this.legend.positionCheckboxes();
              }),
              this.proximate
                ? (this.unchartrender = n(this.chart, "render", function () {
                    this.legend.proximatePositions();
                    this.legend.positionItems();
                  }))
                : this.unchartrender && this.unchartrender());
          };
          a.prototype.setOptions = function (a) {
            var d = K(a.padding, 8);
            this.options = a;
            this.chart.styledMode ||
              ((this.itemStyle = a.itemStyle),
              (this.itemHiddenStyle = q(this.itemStyle, a.itemHiddenStyle)));
            this.itemMarginTop = a.itemMarginTop || 0;
            this.itemMarginBottom = a.itemMarginBottom || 0;
            this.padding = d;
            this.initialItemY = d - 5;
            this.symbolWidth = K(a.symbolWidth, 16);
            this.pages = [];
            this.proximate = "proximate" === a.layout && !this.chart.inverted;
            this.baseline = void 0;
          };
          a.prototype.update = function (a, d) {
            var g = this.chart;
            this.setOptions(q(!0, this.options, a));
            this.destroy();
            g.isDirtyLegend = g.isDirtyBox = !0;
            K(d, !0) && g.redraw();
            H(this, "afterUpdate");
          };
          a.prototype.colorizeItem = function (a, d) {
            a.legendGroup[d ? "removeClass" : "addClass"](
              "highcharts-legend-item-hidden"
            );
            if (!this.chart.styledMode) {
              var g = this.options,
                h = a.legendItem,
                k = a.legendLine,
                f = a.legendSymbol,
                l = this.itemHiddenStyle.color;
              g = d ? g.itemStyle.color : l;
              var m = d ? a.color || l : l,
                p = a.options && a.options.marker,
                t = { fill: m };
              h && h.css({ fill: g, color: g });
              k && k.attr({ stroke: m });
              f &&
                (p &&
                  f.isMarker &&
                  ((t = a.pointAttribs()), d || (t.stroke = t.fill = l)),
                f.attr(t));
            }
            H(this, "afterColorizeItem", { item: a, visible: d });
          };
          a.prototype.positionItems = function () {
            this.allItems.forEach(this.positionItem, this);
            this.chart.isResizing || this.positionCheckboxes();
          };
          a.prototype.positionItem = function (a) {
            var d = this,
              g = this.options,
              h = g.symbolPadding,
              k = !g.rtl,
              f = a._legendItemPos;
            g = f[0];
            f = f[1];
            var l = a.checkbox,
              m = a.legendGroup;
            m &&
              m.element &&
              ((h = {
                translateX: k ? g : this.legendWidth - g - 2 * h - 4,
                translateY: f,
              }),
              (k = function () {
                H(d, "afterPositionItem", { item: a });
              }),
              G(m.translateY) ? m.animate(h, void 0, k) : (m.attr(h), k()));
            l && ((l.x = g), (l.y = f));
          };
          a.prototype.destroyItem = function (a) {
            var d = a.checkbox;
            ["legendItem", "legendLine", "legendSymbol", "legendGroup"].forEach(
              function (d) {
                a[d] && (a[d] = a[d].destroy());
              }
            );
            d && C(a.checkbox);
          };
          a.prototype.destroy = function () {
            function a(d) {
              this[d] && (this[d] = this[d].destroy());
            }
            this.getAllItems().forEach(function (d) {
              ["legendItem", "legendGroup"].forEach(a, d);
            });
            "clipRect up down pager nav box title group"
              .split(" ")
              .forEach(a, this);
            this.display = null;
          };
          a.prototype.positionCheckboxes = function () {
            var a = this.group && this.group.alignAttr,
              d = this.clipHeight || this.legendHeight,
              h = this.titleHeight;
            if (a) {
              var k = a.translateY;
              this.allItems.forEach(function (g) {
                var f = g.checkbox;
                if (f) {
                  var l = k + h + f.y + (this.scrollOffset || 0) + 3;
                  D(f, {
                    left: a.translateX + g.checkboxOffset + f.x - 20 + "px",
                    top: l + "px",
                    display:
                      this.proximate || (l > k - 6 && l < k + d - 6)
                        ? ""
                        : "none",
                  });
                }
              }, this);
            }
          };
          a.prototype.renderTitle = function () {
            var a = this.options,
              d = this.padding,
              h = a.title,
              k = 0;
            h.text &&
              (this.title ||
                ((this.title = this.chart.renderer
                  .label(
                    h.text,
                    d - 3,
                    d - 4,
                    null,
                    null,
                    null,
                    a.useHTML,
                    null,
                    "legend-title"
                  )
                  .attr({ zIndex: 1 })),
                this.chart.styledMode || this.title.css(h.style),
                this.title.add(this.group)),
              h.width || this.title.css({ width: this.maxLegendWidth + "px" }),
              (a = this.title.getBBox()),
              (k = a.height),
              (this.offsetWidth = a.width),
              this.contentGroup.attr({ translateY: k }));
            this.titleHeight = k;
          };
          a.prototype.setText = function (a) {
            var d = this.options;
            a.legendItem.attr({
              text: d.labelFormat
                ? v(d.labelFormat, a, this.chart)
                : d.labelFormatter.call(a),
            });
          };
          a.prototype.renderItem = function (a) {
            var d = this.chart,
              g = d.renderer,
              h = this.options,
              k = this.symbolWidth,
              f = h.symbolPadding,
              l = this.itemStyle,
              m = this.itemHiddenStyle,
              p = "horizontal" === h.layout ? K(h.itemDistance, 20) : 0,
              t = !h.rtl,
              e = a.legendItem,
              c = !a.series,
              b = !c && a.series.drawLegendSymbol ? a.series : a,
              z = b.options;
            z = this.createCheckboxForItem && z && z.showCheckbox;
            p = k + f + p + (z ? 20 : 0);
            var w = h.useHTML,
              u = a.options.className;
            e ||
              ((a.legendGroup = g
                .g("legend-item")
                .addClass(
                  "highcharts-" +
                    b.type +
                    "-series highcharts-color-" +
                    a.colorIndex +
                    (u ? " " + u : "") +
                    (c ? " highcharts-series-" + a.index : "")
                )
                .attr({ zIndex: 1 })
                .add(this.scrollGroup)),
              (a.legendItem = e = g.text(
                "",
                t ? k + f : -f,
                this.baseline || 0,
                w
              )),
              d.styledMode || e.css(q(a.visible ? l : m)),
              e
                .attr({ align: t ? "left" : "right", zIndex: 2 })
                .add(a.legendGroup),
              this.baseline ||
                ((this.fontMetrics = g.fontMetrics(
                  d.styledMode ? 12 : l.fontSize,
                  e
                )),
                (this.baseline = this.fontMetrics.f + 3 + this.itemMarginTop),
                e.attr("y", this.baseline)),
              (this.symbolHeight = h.symbolHeight || this.fontMetrics.f),
              b.drawLegendSymbol(this, a),
              this.setItemEvents && this.setItemEvents(a, e, w));
            z &&
              !a.checkbox &&
              this.createCheckboxForItem &&
              this.createCheckboxForItem(a);
            this.colorizeItem(a, a.visible);
            (!d.styledMode && l.width) ||
              e.css({
                width:
                  (h.itemWidth || this.widthOption || d.spacingBox.width) -
                  p +
                  "px",
              });
            this.setText(a);
            d = e.getBBox();
            a.itemWidth = a.checkboxOffset =
              h.itemWidth || a.legendItemWidth || d.width + p;
            this.maxItemWidth = Math.max(this.maxItemWidth, a.itemWidth);
            this.totalItemWidth += a.itemWidth;
            this.itemHeight = a.itemHeight = Math.round(
              a.legendItemHeight || d.height || this.symbolHeight
            );
          };
          a.prototype.layoutItem = function (a) {
            var d = this.options,
              g = this.padding,
              h = "horizontal" === d.layout,
              k = a.itemHeight,
              f = this.itemMarginBottom,
              l = this.itemMarginTop,
              m = h ? K(d.itemDistance, 20) : 0,
              p = this.maxLegendWidth;
            d =
              d.alignColumns && this.totalItemWidth > p
                ? this.maxItemWidth
                : a.itemWidth;
            h &&
              this.itemX - g + d > p &&
              ((this.itemX = g),
              this.lastLineHeight &&
                (this.itemY += l + this.lastLineHeight + f),
              (this.lastLineHeight = 0));
            this.lastItemY = l + this.itemY + f;
            this.lastLineHeight = Math.max(k, this.lastLineHeight);
            a._legendItemPos = [this.itemX, this.itemY];
            h
              ? (this.itemX += d)
              : ((this.itemY += l + k + f), (this.lastLineHeight = k));
            this.offsetWidth =
              this.widthOption ||
              Math.max(
                (h ? this.itemX - g - (a.checkbox ? 0 : m) : d) + g,
                this.offsetWidth
              );
          };
          a.prototype.getAllItems = function () {
            var a = [];
            this.chart.series.forEach(function (d) {
              var g = d && d.options;
              d &&
                K(g.showInLegend, G(g.linkedTo) ? !1 : void 0, !0) &&
                (a = a.concat(
                  d.legendItems || ("point" === g.legendType ? d.data : d)
                ));
            });
            H(this, "afterGetAllItems", { allItems: a });
            return a;
          };
          a.prototype.getAlignment = function () {
            var a = this.options;
            return this.proximate
              ? a.align.charAt(0) + "tv"
              : a.floating
              ? ""
              : a.align.charAt(0) +
                a.verticalAlign.charAt(0) +
                a.layout.charAt(0);
          };
          a.prototype.adjustMargins = function (a, d) {
            var g = this.chart,
              h = this.options,
              k = this.getAlignment();
            k &&
              [
                /(lth|ct|rth)/,
                /(rtv|rm|rbv)/,
                /(rbh|cb|lbh)/,
                /(lbv|lm|ltv)/,
              ].forEach(function (f, l) {
                f.test(k) &&
                  !G(a[l]) &&
                  (g[m[l]] = Math.max(
                    g[m[l]],
                    g.legend[(l + 1) % 2 ? "legendHeight" : "legendWidth"] +
                      [1, -1, -1, 1][l] * h[l % 2 ? "x" : "y"] +
                      K(h.margin, 12) +
                      d[l] +
                      (g.titleOffset[l] || 0)
                  ));
              });
          };
          a.prototype.proximatePositions = function () {
            var a = this.chart,
              d = [],
              h = "left" === this.options.align;
            this.allItems.forEach(function (g) {
              var k;
              var l = h;
              if (g.yAxis) {
                g.xAxis.options.reversed && (l = !l);
                g.points &&
                  (k = J(l ? g.points : g.points.slice(0).reverse(), function (
                    d
                  ) {
                    return L(d.plotY);
                  }));
                l =
                  this.itemMarginTop +
                  g.legendItem.getBBox().height +
                  this.itemMarginBottom;
                var f = g.yAxis.top - a.plotTop;
                g.visible
                  ? ((k = k ? k.plotY : g.yAxis.height), (k += f - 0.3 * l))
                  : (k = f + g.yAxis.height);
                d.push({ target: k, size: l, item: g });
              }
            }, this);
            f.distribute(d, a.plotHeight);
            d.forEach(function (d) {
              d.item._legendItemPos[1] = a.plotTop - a.spacing[0] + d.pos;
            });
          };
          a.prototype.render = function () {
            var a = this.chart,
              d = a.renderer,
              h = this.group,
              k = this.box,
              l = this.options,
              f = this.padding;
            this.itemX = f;
            this.itemY = this.initialItemY;
            this.lastItemY = this.offsetWidth = 0;
            this.widthOption = E(l.width, a.spacingBox.width - f);
            var m = a.spacingBox.width - 2 * f - l.x;
            -1 < ["rm", "lm"].indexOf(this.getAlignment().substring(0, 2)) &&
              (m /= 2);
            this.maxLegendWidth = this.widthOption || m;
            h ||
              ((this.group = h = d.g("legend").attr({ zIndex: 7 }).add()),
              (this.contentGroup = d.g().attr({ zIndex: 1 }).add(h)),
              (this.scrollGroup = d.g().add(this.contentGroup)));
            this.renderTitle();
            var p = this.getAllItems();
            t(p, function (d, e) {
              return (
                ((d.options && d.options.legendIndex) || 0) -
                ((e.options && e.options.legendIndex) || 0)
              );
            });
            l.reversed && p.reverse();
            this.allItems = p;
            this.display = m = !!p.length;
            this.itemHeight = this.totalItemWidth = this.maxItemWidth = this.lastLineHeight = 0;
            p.forEach(this.renderItem, this);
            p.forEach(this.layoutItem, this);
            p = (this.widthOption || this.offsetWidth) + f;
            var q = this.lastItemY + this.lastLineHeight + this.titleHeight;
            q = this.handleOverflow(q);
            q += f;
            k ||
              ((this.box = k = d
                .rect()
                .addClass("highcharts-legend-box")
                .attr({ r: l.borderRadius })
                .add(h)),
              (k.isNew = !0));
            a.styledMode ||
              k
                .attr({
                  stroke: l.borderColor,
                  "stroke-width": l.borderWidth || 0,
                  fill: l.backgroundColor || "none",
                })
                .shadow(l.shadow);
            0 < p &&
              0 < q &&
              (k[k.isNew ? "attr" : "animate"](
                k.crisp.call(
                  {},
                  { x: 0, y: 0, width: p, height: q },
                  k.strokeWidth()
                )
              ),
              (k.isNew = !1));
            k[m ? "show" : "hide"]();
            a.styledMode && "none" === h.getStyle("display") && (p = q = 0);
            this.legendWidth = p;
            this.legendHeight = q;
            m && this.align();
            this.proximate || this.positionItems();
            H(this, "afterRender");
          };
          a.prototype.align = function (a) {
            void 0 === a && (a = this.chart.spacingBox);
            var d = this.chart,
              g = this.options,
              h = a.y;
            /(lth|ct|rth)/.test(this.getAlignment()) && 0 < d.titleOffset[0]
              ? (h += d.titleOffset[0])
              : /(lbh|cb|rbh)/.test(this.getAlignment()) &&
                0 < d.titleOffset[2] &&
                (h -= d.titleOffset[2]);
            h !== a.y && (a = q(a, { y: h }));
            this.group.align(
              q(g, {
                width: this.legendWidth,
                height: this.legendHeight,
                verticalAlign: this.proximate ? "top" : g.verticalAlign,
              }),
              !0,
              a
            );
          };
          a.prototype.handleOverflow = function (a) {
            var d = this,
              g = this.chart,
              h = g.renderer,
              k = this.options,
              l = k.y,
              f = this.padding;
            l = g.spacingBox.height + ("top" === k.verticalAlign ? -l : l) - f;
            var m = k.maxHeight,
              p,
              t = this.clipRect,
              e = k.navigation,
              c = K(e.animation, !0),
              b = e.arrowSize || 12,
              z = this.nav,
              w = this.pages,
              q,
              u = this.allItems,
              n = function (b) {
                "number" === typeof b
                  ? t.attr({ height: b })
                  : t && ((d.clipRect = t.destroy()), d.contentGroup.clip());
                d.contentGroup.div &&
                  (d.contentGroup.div.style.clip = b
                    ? "rect(" + f + "px,9999px," + (f + b) + "px,0)"
                    : "auto");
              },
              v = function (c) {
                d[c] = h
                  .circle(0, 0, 1.3 * b)
                  .translate(b / 2, b / 2)
                  .add(z);
                g.styledMode || d[c].attr("fill", "rgba(0,0,0,0.0001)");
                return d[c];
              };
            "horizontal" !== k.layout ||
              "middle" === k.verticalAlign ||
              k.floating ||
              (l /= 2);
            m && (l = Math.min(l, m));
            w.length = 0;
            a > l && !1 !== e.enabled
              ? ((this.clipHeight = p = Math.max(
                  l - 20 - this.titleHeight - f,
                  0
                )),
                (this.currentPage = K(this.currentPage, 1)),
                (this.fullHeight = a),
                u.forEach(function (b, c) {
                  var e = b._legendItemPos[1],
                    d = Math.round(b.legendItem.getBBox().height),
                    a = w.length;
                  if (!a || (e - w[a - 1] > p && (q || e) !== w[a - 1]))
                    w.push(q || e), a++;
                  b.pageIx = a - 1;
                  q && (u[c - 1].pageIx = a - 1);
                  c === u.length - 1 &&
                    e + d - w[a - 1] > p &&
                    e !== q &&
                    (w.push(e), (b.pageIx = a));
                  e !== q && (q = e);
                }),
                t ||
                  ((t = d.clipRect = h.clipRect(0, f, 9999, 0)),
                  d.contentGroup.clip(t)),
                n(p),
                z ||
                  ((this.nav = z = h.g().attr({ zIndex: 1 }).add(this.group)),
                  (this.up = h.symbol("triangle", 0, 0, b, b).add(z)),
                  v("upTracker").on("click", function () {
                    d.scroll(-1, c);
                  }),
                  (this.pager = h
                    .text("", 15, 10)
                    .addClass("highcharts-legend-navigation")),
                  g.styledMode || this.pager.css(e.style),
                  this.pager.add(z),
                  (this.down = h.symbol("triangle-down", 0, 0, b, b).add(z)),
                  v("downTracker").on("click", function () {
                    d.scroll(1, c);
                  })),
                d.scroll(0),
                (a = l))
              : z &&
                (n(),
                (this.nav = z.destroy()),
                this.scrollGroup.attr({ translateY: 1 }),
                (this.clipHeight = 0));
            return a;
          };
          a.prototype.scroll = function (a, d) {
            var g = this,
              h = this.chart,
              k = this.pages,
              l = k.length,
              f = this.currentPage + a;
            a = this.clipHeight;
            var m = this.options.navigation,
              t = this.pager,
              q = this.padding;
            f > l && (f = l);
            0 < f &&
              ("undefined" !== typeof d && p(d, h),
              this.nav.attr({
                translateX: q,
                translateY: a + this.padding + 7 + this.titleHeight,
                visibility: "visible",
              }),
              [this.up, this.upTracker].forEach(function (e) {
                e.attr({
                  class:
                    1 === f
                      ? "highcharts-legend-nav-inactive"
                      : "highcharts-legend-nav-active",
                });
              }),
              t.attr({ text: f + "/" + l }),
              [this.down, this.downTracker].forEach(function (e) {
                e.attr({
                  x: 18 + this.pager.getBBox().width,
                  class:
                    f === l
                      ? "highcharts-legend-nav-inactive"
                      : "highcharts-legend-nav-active",
                });
              }, this),
              h.styledMode ||
                (this.up.attr({
                  fill: 1 === f ? m.inactiveColor : m.activeColor,
                }),
                this.upTracker.css({ cursor: 1 === f ? "default" : "pointer" }),
                this.down.attr({
                  fill: f === l ? m.inactiveColor : m.activeColor,
                }),
                this.downTracker.css({
                  cursor: f === l ? "default" : "pointer",
                })),
              (this.scrollOffset = -k[f - 1] + this.initialItemY),
              this.scrollGroup.animate({ translateY: this.scrollOffset }),
              (this.currentPage = f),
              this.positionCheckboxes(),
              (d = y(K(d, h.renderer.globalAnimation, !0))),
              I(function () {
                H(g, "afterScroll", { currentPage: f });
              }, d.duration));
          };
          return a;
        })();
      (/Trident\/7\.0/.test(h.navigator && h.navigator.userAgent) || u) &&
        a(l.prototype, "positionItem", function (a, g) {
          var d = this,
            h = function () {
              g._legendItemPos && a.call(d, g);
            };
          h();
          d.bubbleLegend || setTimeout(h);
        });
      f.Legend = l;
      return f.Legend;
    }
  );
  O(
    n,
    "Core/Chart/Chart.js",
    [
      n["Core/Axis/Axis.js"],
      n["Core/Globals.js"],
      n["Core/Legend.js"],
      n["Core/MSPointer.js"],
      n["Core/Options.js"],
      n["Core/Pointer.js"],
      n["Core/Time.js"],
      n["Core/Utilities.js"],
    ],
    function (f, a, n, y, D, G, C, J) {
      var H = a.charts,
        v = a.doc,
        L = a.seriesTypes,
        q = a.win,
        K = D.defaultOptions,
        E = J.addEvent,
        p = J.animate,
        t = J.animObject,
        I = J.attr,
        u = J.createElement,
        m = J.css,
        h = J.defined,
        l = J.discardElement,
        k = J.erase,
        g = J.error,
        d = J.extend,
        x = J.find,
        r = J.fireEvent,
        A = J.getStyle,
        N = J.isArray,
        B = J.isFunction,
        M = J.isNumber,
        R = J.isObject,
        F = J.isString,
        e = J.merge,
        c = J.numberFormat,
        b = J.objectEach,
        z = J.pick,
        w = J.pInt,
        P = J.relativeLength,
        Z = J.removeEvent,
        W = J.setAnimation,
        aa = J.splat,
        X = J.syncTimeout,
        ba = J.uniqueKey,
        ca = a.marginNames,
        Y = (function () {
          function D(b, c, e) {
            this.yAxis = this.xAxis = this.userOptions = this.titleOffset = this.time = this.symbolCounter = this.spacingBox = this.spacing = this.series = this.renderTo = this.renderer = this.pointer = this.pointCount = this.plotWidth = this.plotTop = this.plotLeft = this.plotHeight = this.plotBox = this.options = this.numberFormatter = this.margin = this.legend = this.labelCollectors = this.isResizing = this.index = this.container = this.colorCounter = this.clipBox = this.chartWidth = this.chartHeight = this.bounds = this.axisOffset = this.axes = void 0;
            this.getArgs(b, c, e);
          }
          D.prototype.getArgs = function (b, c, e) {
            F(b) || b.nodeName
              ? ((this.renderTo = b), this.init(c, e))
              : this.init(b, c);
          };
          D.prototype.init = function (d, g) {
            var h,
              k = d.series,
              l = d.plotOptions || {};
            r(this, "init", { args: arguments }, function () {
              d.series = null;
              h = e(K, d);
              var f = h.chart || {};
              b(h.plotOptions, function (b, c) {
                R(b) && (b.tooltip = (l[c] && e(l[c].tooltip)) || void 0);
              });
              h.tooltip.userOptions =
                (d.chart && d.chart.forExport && d.tooltip.userOptions) ||
                d.tooltip;
              h.series = d.series = k;
              this.userOptions = d;
              var m = f.events;
              this.margin = [];
              this.spacing = [];
              this.bounds = { h: {}, v: {} };
              this.labelCollectors = [];
              this.callback = g;
              this.isResizing = 0;
              this.options = h;
              this.axes = [];
              this.series = [];
              this.time =
                d.time && Object.keys(d.time).length ? new C(d.time) : a.time;
              this.numberFormatter = f.numberFormatter || c;
              this.styledMode = f.styledMode;
              this.hasCartesianSeries = f.showAxes;
              var p = this;
              p.index = H.length;
              H.push(p);
              a.chartCount++;
              m &&
                b(m, function (b, c) {
                  B(b) && E(p, c, b);
                });
              p.xAxis = [];
              p.yAxis = [];
              p.pointCount = p.colorCounter = p.symbolCounter = 0;
              r(p, "afterInit");
              p.firstRender();
            });
          };
          D.prototype.initSeries = function (b) {
            var c = this.options.chart;
            c = b.type || c.type || c.defaultSeriesType;
            var e = L[c];
            e || g(17, !0, this, { missingModuleFor: c });
            c = new e();
            c.init(this, b);
            return c;
          };
          D.prototype.setSeriesData = function () {
            this.getSeriesOrderByLinks().forEach(function (b) {
              b.points ||
                b.data ||
                !b.enabledDataSorting ||
                b.setData(b.options.data, !1);
            });
          };
          D.prototype.getSeriesOrderByLinks = function () {
            return this.series.concat().sort(function (b, c) {
              return b.linkedSeries.length || c.linkedSeries.length
                ? c.linkedSeries.length - b.linkedSeries.length
                : 0;
            });
          };
          D.prototype.orderSeries = function (b) {
            var c = this.series;
            for (b = b || 0; b < c.length; b++)
              c[b] && ((c[b].index = b), (c[b].name = c[b].getName()));
          };
          D.prototype.isInsidePlot = function (b, c, e) {
            var d = e ? c : b;
            b = e ? b : c;
            d = {
              x: d,
              y: b,
              isInsidePlot:
                0 <= d && d <= this.plotWidth && 0 <= b && b <= this.plotHeight,
            };
            r(this, "afterIsInsidePlot", d);
            return d.isInsidePlot;
          };
          D.prototype.redraw = function (b) {
            r(this, "beforeRedraw");
            var c = this,
              e = c.axes,
              a = c.series,
              g = c.pointer,
              h = c.legend,
              k = c.userOptions.legend,
              l = c.isDirtyLegend,
              f = c.hasCartesianSeries,
              m = c.isDirtyBox,
              p = c.renderer,
              w = p.isHidden(),
              z = [];
            c.setResponsive && c.setResponsive(!1);
            W(c.hasRendered ? b : !1, c);
            w && c.temporaryDisplay();
            c.layOutTitles();
            for (b = a.length; b--; ) {
              var t = a[b];
              if (t.options.stacking) {
                var B = !0;
                if (t.isDirty) {
                  var q = !0;
                  break;
                }
              }
            }
            if (q)
              for (b = a.length; b--; )
                (t = a[b]), t.options.stacking && (t.isDirty = !0);
            a.forEach(function (b) {
              b.isDirty &&
                ("point" === b.options.legendType
                  ? (b.updateTotals && b.updateTotals(), (l = !0))
                  : k && (k.labelFormatter || k.labelFormat) && (l = !0));
              b.isDirtyData && r(b, "updatedData");
            });
            l && h && h.options.enabled && (h.render(), (c.isDirtyLegend = !1));
            B && c.getStacks();
            f &&
              e.forEach(function (b) {
                (c.isResizing && M(b.min)) || (b.updateNames(), b.setScale());
              });
            c.getMargins();
            f &&
              (e.forEach(function (b) {
                b.isDirty && (m = !0);
              }),
              e.forEach(function (b) {
                var c = b.min + "," + b.max;
                b.extKey !== c &&
                  ((b.extKey = c),
                  z.push(function () {
                    r(b, "afterSetExtremes", d(b.eventArgs, b.getExtremes()));
                    delete b.eventArgs;
                  }));
                (m || B) && b.redraw();
              }));
            m && c.drawChartBox();
            r(c, "predraw");
            a.forEach(function (b) {
              (m || b.isDirty) && b.visible && b.redraw();
              b.isDirtyData = !1;
            });
            g && g.reset(!0);
            p.draw();
            r(c, "redraw");
            r(c, "render");
            w && c.temporaryDisplay(!0);
            z.forEach(function (b) {
              b.call();
            });
          };
          D.prototype.get = function (b) {
            function c(c) {
              return c.id === b || (c.options && c.options.id === b);
            }
            var e = this.series,
              d;
            var a = x(this.axes, c) || x(this.series, c);
            for (d = 0; !a && d < e.length; d++) a = x(e[d].points || [], c);
            return a;
          };
          D.prototype.getAxes = function () {
            var b = this,
              c = this.options,
              e = (c.xAxis = aa(c.xAxis || {}));
            c = c.yAxis = aa(c.yAxis || {});
            r(this, "getAxes");
            e.forEach(function (b, c) {
              b.index = c;
              b.isX = !0;
            });
            c.forEach(function (b, c) {
              b.index = c;
            });
            e.concat(c).forEach(function (c) {
              new f(b, c);
            });
            r(this, "afterGetAxes");
          };
          D.prototype.getSelectedPoints = function () {
            var b = [];
            this.series.forEach(function (c) {
              b = b.concat(
                c.getPointsCollection().filter(function (b) {
                  return z(b.selectedStaging, b.selected);
                })
              );
            });
            return b;
          };
          D.prototype.getSelectedSeries = function () {
            return this.series.filter(function (b) {
              return b.selected;
            });
          };
          D.prototype.setTitle = function (b, c, e) {
            this.applyDescription("title", b);
            this.applyDescription("subtitle", c);
            this.applyDescription("caption", void 0);
            this.layOutTitles(e);
          };
          D.prototype.applyDescription = function (b, c) {
            var d = this,
              a =
                "title" === b
                  ? {
                      color: "#333333",
                      fontSize: this.options.isStock ? "16px" : "18px",
                    }
                  : { color: "#666666" };
            a = this.options[b] = e(
              !this.styledMode && { style: a },
              this.options[b],
              c
            );
            var g = this[b];
            g && c && (this[b] = g = g.destroy());
            a &&
              !g &&
              ((g = this.renderer
                .text(a.text, 0, 0, a.useHTML)
                .attr({
                  align: a.align,
                  class: "highcharts-" + b,
                  zIndex: a.zIndex || 4,
                })
                .add()),
              (g.update = function (c) {
                d[
                  {
                    title: "setTitle",
                    subtitle: "setSubtitle",
                    caption: "setCaption",
                  }[b]
                ](c);
              }),
              this.styledMode || g.css(a.style),
              (this[b] = g));
          };
          D.prototype.layOutTitles = function (b) {
            var c = [0, 0, 0],
              e = this.renderer,
              a = this.spacingBox;
            ["title", "subtitle", "caption"].forEach(function (b) {
              var g = this[b],
                h = this.options[b],
                k = h.verticalAlign || "top";
              b = "title" === b ? -3 : "top" === k ? c[0] + 2 : 0;
              if (g) {
                if (!this.styledMode) var l = h.style.fontSize;
                l = e.fontMetrics(l, g).b;
                g.css({
                  width: (h.width || a.width + (h.widthAdjust || 0)) + "px",
                });
                var f = Math.round(g.getBBox(h.useHTML).height);
                g.align(
                  d({ y: "bottom" === k ? l : b + l, height: f }, h),
                  !1,
                  "spacingBox"
                );
                h.floating ||
                  ("top" === k
                    ? (c[0] = Math.ceil(c[0] + f))
                    : "bottom" === k && (c[2] = Math.ceil(c[2] + f)));
              }
            }, this);
            c[0] &&
              "top" === (this.options.title.verticalAlign || "top") &&
              (c[0] += this.options.title.margin);
            c[2] &&
              "bottom" === this.options.caption.verticalAlign &&
              (c[2] += this.options.caption.margin);
            var g =
              !this.titleOffset || this.titleOffset.join(",") !== c.join(",");
            this.titleOffset = c;
            r(this, "afterLayOutTitles");
            !this.isDirtyBox &&
              g &&
              ((this.isDirtyBox = this.isDirtyLegend = g),
              this.hasRendered && z(b, !0) && this.isDirtyBox && this.redraw());
          };
          D.prototype.getChartSize = function () {
            var b = this.options.chart,
              c = b.width;
            b = b.height;
            var e = this.renderTo;
            h(c) || (this.containerWidth = A(e, "width"));
            h(b) || (this.containerHeight = A(e, "height"));
            this.chartWidth = Math.max(0, c || this.containerWidth || 600);
            this.chartHeight = Math.max(
              0,
              P(b, this.chartWidth) ||
                (1 < this.containerHeight ? this.containerHeight : 400)
            );
          };
          D.prototype.temporaryDisplay = function (b) {
            var c = this.renderTo;
            if (b)
              for (; c && c.style; )
                c.hcOrigStyle && (m(c, c.hcOrigStyle), delete c.hcOrigStyle),
                  c.hcOrigDetached &&
                    (v.body.removeChild(c), (c.hcOrigDetached = !1)),
                  (c = c.parentNode);
            else
              for (; c && c.style; ) {
                v.body.contains(c) ||
                  c.parentNode ||
                  ((c.hcOrigDetached = !0), v.body.appendChild(c));
                if ("none" === A(c, "display", !1) || c.hcOricDetached)
                  (c.hcOrigStyle = {
                    display: c.style.display,
                    height: c.style.height,
                    overflow: c.style.overflow,
                  }),
                    (b = { display: "block", overflow: "hidden" }),
                    c !== this.renderTo && (b.height = 0),
                    m(c, b),
                    c.offsetWidth ||
                      c.style.setProperty("display", "block", "important");
                c = c.parentNode;
                if (c === v.body) break;
              }
          };
          D.prototype.setClassName = function (b) {
            this.container.className = "highcharts-container " + (b || "");
          };
          D.prototype.getContainer = function () {
            var b = this.options,
              c = b.chart;
            var e = this.renderTo;
            var h = ba(),
              k,
              l;
            e || (this.renderTo = e = c.renderTo);
            F(e) && (this.renderTo = e = v.getElementById(e));
            e || g(13, !0, this);
            var f = w(I(e, "data-highcharts-chart"));
            M(f) && H[f] && H[f].hasRendered && H[f].destroy();
            I(e, "data-highcharts-chart", this.index);
            e.innerHTML = "";
            c.skipClone || e.offsetWidth || this.temporaryDisplay();
            this.getChartSize();
            f = this.chartWidth;
            var p = this.chartHeight;
            m(e, { overflow: "hidden" });
            this.styledMode ||
              (k = d(
                {
                  position: "relative",
                  overflow: "hidden",
                  width: f + "px",
                  height: p + "px",
                  textAlign: "left",
                  lineHeight: "normal",
                  zIndex: 0,
                  "-webkit-tap-highlight-color": "rgba(0,0,0,0)",
                  userSelect: "none",
                },
                c.style
              ));
            this.container = e = u("div", { id: h }, k, e);
            this._cursor = e.style.cursor;
            this.renderer = new (a[c.renderer] || a.Renderer)(
              e,
              f,
              p,
              null,
              c.forExport,
              b.exporting && b.exporting.allowHTML,
              this.styledMode
            );
            W(void 0, this);
            this.setClassName(c.className);
            if (this.styledMode)
              for (l in b.defs) this.renderer.definition(b.defs[l]);
            else this.renderer.setStyle(c.style);
            this.renderer.chartIndex = this.index;
            r(this, "afterGetContainer");
          };
          D.prototype.getMargins = function (b) {
            var c = this.spacing,
              e = this.margin,
              d = this.titleOffset;
            this.resetMargins();
            d[0] &&
              !h(e[0]) &&
              (this.plotTop = Math.max(this.plotTop, d[0] + c[0]));
            d[2] &&
              !h(e[2]) &&
              (this.marginBottom = Math.max(this.marginBottom, d[2] + c[2]));
            this.legend &&
              this.legend.display &&
              this.legend.adjustMargins(e, c);
            r(this, "getMargins");
            b || this.getAxisMargins();
          };
          D.prototype.getAxisMargins = function () {
            var b = this,
              c = (b.axisOffset = [0, 0, 0, 0]),
              e = b.colorAxis,
              d = b.margin,
              a = function (b) {
                b.forEach(function (b) {
                  b.visible && b.getOffset();
                });
              };
            b.hasCartesianSeries ? a(b.axes) : e && e.length && a(e);
            ca.forEach(function (e, a) {
              h(d[a]) || (b[e] += c[a]);
            });
            b.setChartSize();
          };
          D.prototype.reflow = function (b) {
            var c = this,
              e = c.options.chart,
              d = c.renderTo,
              a = h(e.width) && h(e.height),
              g = e.width || A(d, "width");
            e = e.height || A(d, "height");
            d = b ? b.target : q;
            if (!a && !c.isPrinting && g && e && (d === q || d === v)) {
              if (g !== c.containerWidth || e !== c.containerHeight)
                J.clearTimeout(c.reflowTimeout),
                  (c.reflowTimeout = X(
                    function () {
                      c.container && c.setSize(void 0, void 0, !1);
                    },
                    b ? 100 : 0
                  ));
              c.containerWidth = g;
              c.containerHeight = e;
            }
          };
          D.prototype.setReflow = function (b) {
            var c = this;
            !1 === b || this.unbindReflow
              ? !1 === b &&
                this.unbindReflow &&
                (this.unbindReflow = this.unbindReflow())
              : ((this.unbindReflow = E(q, "resize", function (b) {
                  c.options && c.reflow(b);
                })),
                E(this, "destroy", this.unbindReflow));
          };
          D.prototype.setSize = function (b, c, e) {
            var d = this,
              a = d.renderer;
            d.isResizing += 1;
            W(e, d);
            e = a.globalAnimation;
            d.oldChartHeight = d.chartHeight;
            d.oldChartWidth = d.chartWidth;
            "undefined" !== typeof b && (d.options.chart.width = b);
            "undefined" !== typeof c && (d.options.chart.height = c);
            d.getChartSize();
            d.styledMode ||
              (e ? p : m)(
                d.container,
                { width: d.chartWidth + "px", height: d.chartHeight + "px" },
                e
              );
            d.setChartSize(!0);
            a.setSize(d.chartWidth, d.chartHeight, e);
            d.axes.forEach(function (b) {
              b.isDirty = !0;
              b.setScale();
            });
            d.isDirtyLegend = !0;
            d.isDirtyBox = !0;
            d.layOutTitles();
            d.getMargins();
            d.redraw(e);
            d.oldChartHeight = null;
            r(d, "resize");
            X(function () {
              d &&
                r(d, "endResize", null, function () {
                  --d.isResizing;
                });
            }, t(e).duration);
          };
          D.prototype.setChartSize = function (b) {
            var c = this.inverted,
              e = this.renderer,
              d = this.chartWidth,
              a = this.chartHeight,
              g = this.options.chart,
              h = this.spacing,
              k = this.clipOffset,
              f,
              l,
              m,
              p;
            this.plotLeft = f = Math.round(this.plotLeft);
            this.plotTop = l = Math.round(this.plotTop);
            this.plotWidth = m = Math.max(
              0,
              Math.round(d - f - this.marginRight)
            );
            this.plotHeight = p = Math.max(
              0,
              Math.round(a - l - this.marginBottom)
            );
            this.plotSizeX = c ? p : m;
            this.plotSizeY = c ? m : p;
            this.plotBorderWidth = g.plotBorderWidth || 0;
            this.spacingBox = e.spacingBox = {
              x: h[3],
              y: h[0],
              width: d - h[3] - h[1],
              height: a - h[0] - h[2],
            };
            this.plotBox = e.plotBox = { x: f, y: l, width: m, height: p };
            d = 2 * Math.floor(this.plotBorderWidth / 2);
            c = Math.ceil(Math.max(d, k[3]) / 2);
            e = Math.ceil(Math.max(d, k[0]) / 2);
            this.clipBox = {
              x: c,
              y: e,
              width: Math.floor(this.plotSizeX - Math.max(d, k[1]) / 2 - c),
              height: Math.max(
                0,
                Math.floor(this.plotSizeY - Math.max(d, k[2]) / 2 - e)
              ),
            };
            b ||
              this.axes.forEach(function (b) {
                b.setAxisSize();
                b.setAxisTranslation();
              });
            r(this, "afterSetChartSize", { skipAxes: b });
          };
          D.prototype.resetMargins = function () {
            r(this, "resetMargins");
            var b = this,
              c = b.options.chart;
            ["margin", "spacing"].forEach(function (e) {
              var d = c[e],
                a = R(d) ? d : [d, d, d, d];
              ["Top", "Right", "Bottom", "Left"].forEach(function (d, g) {
                b[e][g] = z(c[e + d], a[g]);
              });
            });
            ca.forEach(function (c, e) {
              b[c] = z(b.margin[e], b.spacing[e]);
            });
            b.axisOffset = [0, 0, 0, 0];
            b.clipOffset = [0, 0, 0, 0];
          };
          D.prototype.drawChartBox = function () {
            var b = this.options.chart,
              c = this.renderer,
              e = this.chartWidth,
              d = this.chartHeight,
              a = this.chartBackground,
              g = this.plotBackground,
              h = this.plotBorder,
              k = this.styledMode,
              f = this.plotBGImage,
              l = b.backgroundColor,
              m = b.plotBackgroundColor,
              p = b.plotBackgroundImage,
              w,
              z = this.plotLeft,
              t = this.plotTop,
              B = this.plotWidth,
              q = this.plotHeight,
              x = this.plotBox,
              u = this.clipRect,
              A = this.clipBox,
              F = "animate";
            a ||
              ((this.chartBackground = a = c
                .rect()
                .addClass("highcharts-background")
                .add()),
              (F = "attr"));
            if (k) var n = (w = a.strokeWidth());
            else {
              n = b.borderWidth || 0;
              w = n + (b.shadow ? 8 : 0);
              l = { fill: l || "none" };
              if (n || a["stroke-width"])
                (l.stroke = b.borderColor), (l["stroke-width"] = n);
              a.attr(l).shadow(b.shadow);
            }
            a[F]({
              x: w / 2,
              y: w / 2,
              width: e - w - (n % 2),
              height: d - w - (n % 2),
              r: b.borderRadius,
            });
            F = "animate";
            g ||
              ((F = "attr"),
              (this.plotBackground = g = c
                .rect()
                .addClass("highcharts-plot-background")
                .add()));
            g[F](x);
            k ||
              (g.attr({ fill: m || "none" }).shadow(b.plotShadow),
              p &&
                (f
                  ? (p !== f.attr("href") && f.attr("href", p), f.animate(x))
                  : (this.plotBGImage = c.image(p, z, t, B, q).add())));
            u
              ? u.animate({ width: A.width, height: A.height })
              : (this.clipRect = c.clipRect(A));
            F = "animate";
            h ||
              ((F = "attr"),
              (this.plotBorder = h = c
                .rect()
                .addClass("highcharts-plot-border")
                .attr({ zIndex: 1 })
                .add()));
            k ||
              h.attr({
                stroke: b.plotBorderColor,
                "stroke-width": b.plotBorderWidth || 0,
                fill: "none",
              });
            h[F](
              h.crisp({ x: z, y: t, width: B, height: q }, -h.strokeWidth())
            );
            this.isDirtyBox = !1;
            r(this, "afterDrawChartBox");
          };
          D.prototype.propFromSeries = function () {
            var b = this,
              c = b.options.chart,
              e,
              d = b.options.series,
              a,
              g;
            ["inverted", "angular", "polar"].forEach(function (h) {
              e = L[c.type || c.defaultSeriesType];
              g = c[h] || (e && e.prototype[h]);
              for (a = d && d.length; !g && a--; )
                (e = L[d[a].type]) && e.prototype[h] && (g = !0);
              b[h] = g;
            });
          };
          D.prototype.linkSeries = function () {
            var b = this,
              c = b.series;
            c.forEach(function (b) {
              b.linkedSeries.length = 0;
            });
            c.forEach(function (c) {
              var e = c.options.linkedTo;
              F(e) &&
                (e = ":previous" === e ? b.series[c.index - 1] : b.get(e)) &&
                e.linkedParent !== c &&
                (e.linkedSeries.push(c),
                (c.linkedParent = e),
                e.enabledDataSorting && c.setDataSortingOptions(),
                (c.visible = z(
                  c.options.visible,
                  e.options.visible,
                  c.visible
                )));
            });
            r(this, "afterLinkSeries");
          };
          D.prototype.renderSeries = function () {
            this.series.forEach(function (b) {
              b.translate();
              b.render();
            });
          };
          D.prototype.renderLabels = function () {
            var b = this,
              c = b.options.labels;
            c.items &&
              c.items.forEach(function (e) {
                var a = d(c.style, e.style),
                  g = w(a.left) + b.plotLeft,
                  h = w(a.top) + b.plotTop + 12;
                delete a.left;
                delete a.top;
                b.renderer.text(e.html, g, h).attr({ zIndex: 2 }).css(a).add();
              });
          };
          D.prototype.render = function () {
            var b = this.axes,
              c = this.colorAxis,
              e = this.renderer,
              d = this.options,
              a = 0,
              g = function (b) {
                b.forEach(function (b) {
                  b.visible && b.render();
                });
              };
            this.setTitle();
            this.legend = new n(this, d.legend);
            this.getStacks && this.getStacks();
            this.getMargins(!0);
            this.setChartSize();
            d = this.plotWidth;
            b.some(function (b) {
              if (
                b.horiz &&
                b.visible &&
                b.options.labels.enabled &&
                b.series.length
              )
                return (a = 21), !0;
            });
            var h = (this.plotHeight = Math.max(this.plotHeight - a, 0));
            b.forEach(function (b) {
              b.setScale();
            });
            this.getAxisMargins();
            var k = 1.1 < d / this.plotWidth;
            var l = 1.05 < h / this.plotHeight;
            if (k || l)
              b.forEach(function (b) {
                ((b.horiz && k) || (!b.horiz && l)) && b.setTickInterval(!0);
              }),
                this.getMargins();
            this.drawChartBox();
            this.hasCartesianSeries ? g(b) : c && c.length && g(c);
            this.seriesGroup ||
              (this.seriesGroup = e
                .g("series-group")
                .attr({ zIndex: 3 })
                .add());
            this.renderSeries();
            this.renderLabels();
            this.addCredits();
            this.setResponsive && this.setResponsive();
            this.updateContainerScaling();
            this.hasRendered = !0;
          };
          D.prototype.addCredits = function (b) {
            var c = this,
              d = e(!0, this.options.credits, b);
            d.enabled &&
              !this.credits &&
              ((this.credits = this.renderer
                .text(d.text + (this.mapCredits || ""), 0, 0)
                .addClass("highcharts-credits")
                .on("click", function () {
                  d.href && (q.location.href = d.href);
                })
                .attr({ align: d.position.align, zIndex: 8 })),
              c.styledMode || this.credits.css(d.style),
              this.credits.add().align(d.position),
              (this.credits.update = function (b) {
                c.credits = c.credits.destroy();
                c.addCredits(b);
              }));
          };
          D.prototype.updateContainerScaling = function () {
            var b = this.container;
            if (
              2 < b.offsetWidth &&
              2 < b.offsetHeight &&
              b.getBoundingClientRect
            ) {
              var c = b.getBoundingClientRect(),
                e = c.width / b.offsetWidth;
              b = c.height / b.offsetHeight;
              1 !== e || 1 !== b
                ? (this.containerScaling = { scaleX: e, scaleY: b })
                : delete this.containerScaling;
            }
          };
          D.prototype.destroy = function () {
            var c = this,
              e = c.axes,
              d = c.series,
              g = c.container,
              h,
              f = g && g.parentNode;
            r(c, "destroy");
            c.renderer.forExport ? k(H, c) : (H[c.index] = void 0);
            a.chartCount--;
            c.renderTo.removeAttribute("data-highcharts-chart");
            Z(c);
            for (h = e.length; h--; ) e[h] = e[h].destroy();
            this.scroller && this.scroller.destroy && this.scroller.destroy();
            for (h = d.length; h--; ) d[h] = d[h].destroy();
            "title subtitle chartBackground plotBackground plotBGImage plotBorder seriesGroup clipRect credits pointer rangeSelector legend resetZoomButton tooltip renderer"
              .split(" ")
              .forEach(function (b) {
                var e = c[b];
                e && e.destroy && (c[b] = e.destroy());
              });
            g && ((g.innerHTML = ""), Z(g), f && l(g));
            b(c, function (b, e) {
              delete c[e];
            });
          };
          D.prototype.firstRender = function () {
            var b = this,
              c = b.options;
            if (!b.isReadyToRender || b.isReadyToRender()) {
              b.getContainer();
              b.resetMargins();
              b.setChartSize();
              b.propFromSeries();
              b.getAxes();
              (N(c.series) ? c.series : []).forEach(function (c) {
                b.initSeries(c);
              });
              b.linkSeries();
              b.setSeriesData();
              r(b, "beforeRender");
              G &&
                (b.pointer =
                  a.hasTouch || (!q.PointerEvent && !q.MSPointerEvent)
                    ? new G(b, c)
                    : new y(b, c));
              b.render();
              if (!b.renderer.imgCount && !b.hasLoaded) b.onload();
              b.temporaryDisplay(!0);
            }
          };
          D.prototype.onload = function () {
            this.callbacks.concat([this.callback]).forEach(function (b) {
              b && "undefined" !== typeof this.index && b.apply(this, [this]);
            }, this);
            r(this, "load");
            r(this, "render");
            h(this.index) && this.setReflow(this.options.chart.reflow);
            this.hasLoaded = !0;
          };
          return D;
        })();
      Y.prototype.callbacks = [];
      a.chart = function (b, c, e) {
        return new Y(b, c, e);
      };
      return (a.Chart = Y);
    }
  );
  O(
    n,
    "Extensions/ScrollablePlotArea.js",
    [n["Core/Chart/Chart.js"], n["Core/Globals.js"], n["Core/Utilities.js"]],
    function (f, a, n) {
      var y = n.addEvent,
        D = n.createElement,
        G = n.pick,
        C = n.stop;
      ("");
      y(f, "afterSetChartSize", function (f) {
        var n = this.options.chart.scrollablePlotArea,
          v = n && n.minWidth;
        n = n && n.minHeight;
        if (!this.renderer.forExport) {
          if (v) {
            if (
              (this.scrollablePixelsX = v = Math.max(0, v - this.chartWidth))
            ) {
              this.plotWidth += v;
              this.inverted
                ? ((this.clipBox.height += v), (this.plotBox.height += v))
                : ((this.clipBox.width += v), (this.plotBox.width += v));
              var C = { 1: { name: "right", value: v } };
            }
          } else
            n &&
              (this.scrollablePixelsY = v = Math.max(
                0,
                n - this.chartHeight
              )) &&
              ((this.plotHeight += v),
              this.inverted
                ? ((this.clipBox.width += v), (this.plotBox.width += v))
                : ((this.clipBox.height += v), (this.plotBox.height += v)),
              (C = { 2: { name: "bottom", value: v } }));
          C &&
            !f.skipAxes &&
            this.axes.forEach(function (f) {
              C[f.side]
                ? (f.getPlotLinePath = function () {
                    var q = C[f.side].name,
                      n = this[q];
                    this[q] = n - C[f.side].value;
                    var p = a.Axis.prototype.getPlotLinePath.apply(
                      this,
                      arguments
                    );
                    this[q] = n;
                    return p;
                  })
                : (f.setAxisSize(), f.setAxisTranslation());
            });
        }
      });
      y(f, "render", function () {
        this.scrollablePixelsX || this.scrollablePixelsY
          ? (this.setUpScrolling && this.setUpScrolling(), this.applyFixed())
          : this.fixedDiv && this.applyFixed();
      });
      f.prototype.setUpScrolling = function () {
        var a = this,
          f = {
            WebkitOverflowScrolling: "touch",
            overflowX: "hidden",
            overflowY: "hidden",
          };
        this.scrollablePixelsX && (f.overflowX = "auto");
        this.scrollablePixelsY && (f.overflowY = "auto");
        this.scrollingParent = D(
          "div",
          { className: "highcharts-scrolling-parent" },
          { position: "relative" },
          this.renderTo
        );
        this.scrollingContainer = D(
          "div",
          { className: "highcharts-scrolling" },
          f,
          this.scrollingParent
        );
        y(this.scrollingContainer, "scroll", function () {
          a.pointer && delete a.pointer.chartPosition;
        });
        this.innerContainer = D(
          "div",
          { className: "highcharts-inner-container" },
          null,
          this.scrollingContainer
        );
        this.innerContainer.appendChild(this.container);
        this.setUpScrolling = null;
      };
      f.prototype.moveFixedElements = function () {
        var a = this.container,
          f = this.fixedRenderer,
          n = ".highcharts-contextbutton .highcharts-credits .highcharts-legend .highcharts-legend-checkbox .highcharts-navigator-series .highcharts-navigator-xaxis .highcharts-navigator-yaxis .highcharts-navigator .highcharts-reset-zoom .highcharts-scrollbar .highcharts-subtitle .highcharts-title".split(
            " "
          ),
          C;
        this.scrollablePixelsX && !this.inverted
          ? (C = ".highcharts-yaxis")
          : this.scrollablePixelsX && this.inverted
          ? (C = ".highcharts-xaxis")
          : this.scrollablePixelsY && !this.inverted
          ? (C = ".highcharts-xaxis")
          : this.scrollablePixelsY &&
            this.inverted &&
            (C = ".highcharts-yaxis");
        n.push(C, C + "-labels");
        n.forEach(function (q) {
          [].forEach.call(a.querySelectorAll(q), function (a) {
            (a.namespaceURI === f.SVG_NS
              ? f.box
              : f.box.parentNode
            ).appendChild(a);
            a.style.pointerEvents = "auto";
          });
        });
      };
      f.prototype.applyFixed = function () {
        var f,
          n,
          v = !this.fixedDiv,
          L = this.options.chart.scrollablePlotArea;
        v
          ? ((this.fixedDiv = D(
              "div",
              { className: "highcharts-fixed" },
              {
                position: "absolute",
                overflow: "hidden",
                pointerEvents: "none",
                zIndex: 2,
                top: 0,
              },
              null,
              !0
            )),
            null === (f = this.scrollingContainer) || void 0 === f
              ? void 0
              : f.parentNode.insertBefore(
                  this.fixedDiv,
                  this.scrollingContainer
                ),
            (this.renderTo.style.overflow = "visible"),
            (this.fixedRenderer = f = new a.Renderer(
              this.fixedDiv,
              this.chartWidth,
              this.chartHeight,
              null === (n = this.options.chart) || void 0 === n
                ? void 0
                : n.style
            )),
            (this.scrollableMask = f
              .path()
              .attr({
                fill: this.options.chart.backgroundColor || "#fff",
                "fill-opacity": G(L.opacity, 0.85),
                zIndex: -1,
              })
              .addClass("highcharts-scrollable-mask")
              .add()),
            this.moveFixedElements(),
            y(this, "afterShowResetZoom", this.moveFixedElements),
            y(this, "afterLayOutTitles", this.moveFixedElements))
          : this.fixedRenderer.setSize(this.chartWidth, this.chartHeight);
        n = this.chartWidth + (this.scrollablePixelsX || 0);
        f = this.chartHeight + (this.scrollablePixelsY || 0);
        C(this.container);
        this.container.style.width = n + "px";
        this.container.style.height = f + "px";
        this.renderer.boxWrapper.attr({
          width: n,
          height: f,
          viewBox: [0, 0, n, f].join(" "),
        });
        this.chartBackground.attr({ width: n, height: f });
        this.scrollingContainer.style.height = this.chartHeight + "px";
        v &&
          (L.scrollPositionX &&
            (this.scrollingContainer.scrollLeft =
              this.scrollablePixelsX * L.scrollPositionX),
          L.scrollPositionY &&
            (this.scrollingContainer.scrollTop =
              this.scrollablePixelsY * L.scrollPositionY));
        f = this.axisOffset;
        v = this.plotTop - f[0] - 1;
        L = this.plotLeft - f[3] - 1;
        n = this.plotTop + this.plotHeight + f[2] + 1;
        f = this.plotLeft + this.plotWidth + f[1] + 1;
        var q = this.plotLeft + this.plotWidth - (this.scrollablePixelsX || 0),
          K = this.plotTop + this.plotHeight - (this.scrollablePixelsY || 0);
        v = this.scrollablePixelsX
          ? [
              ["M", 0, v],
              ["L", this.plotLeft - 1, v],
              ["L", this.plotLeft - 1, n],
              ["L", 0, n],
              ["Z"],
              ["M", q, v],
              ["L", this.chartWidth, v],
              ["L", this.chartWidth, n],
              ["L", q, n],
              ["Z"],
            ]
          : this.scrollablePixelsY
          ? [
              ["M", L, 0],
              ["L", L, this.plotTop - 1],
              ["L", f, this.plotTop - 1],
              ["L", f, 0],
              ["Z"],
              ["M", L, K],
              ["L", L, this.chartHeight],
              ["L", f, this.chartHeight],
              ["L", f, K],
              ["Z"],
            ]
          : [["M", 0, 0]];
        "adjustHeight" !== this.redrawTrigger &&
          this.scrollableMask.attr({ d: v });
      };
    }
  );
  O(n, "Core/Axis/StackingAxis.js", [n["Core/Utilities.js"]], function (f) {
    var a = f.addEvent,
      n = f.destroyObjectProperties,
      y = f.fireEvent,
      D = f.getDeferredAnimation,
      G = f.objectEach,
      C = f.pick,
      J = (function () {
        function a(a) {
          this.oldStacks = {};
          this.stacks = {};
          this.stacksTouched = 0;
          this.axis = a;
        }
        a.prototype.buildStacks = function () {
          var a = this.axis,
            f = a.series,
            q = C(a.options.reversedStacks, !0),
            n = f.length,
            E;
          if (!a.isXAxis) {
            this.usePercentage = !1;
            for (E = n; E--; ) {
              var p = f[q ? E : n - E - 1];
              p.setStackedPoints();
              p.setGroupedPoints();
            }
            for (E = 0; E < n; E++) f[E].modifyStacks();
            y(a, "afterBuildStacks");
          }
        };
        a.prototype.cleanStacks = function () {
          if (!this.axis.isXAxis) {
            if (this.oldStacks) var a = (this.stacks = this.oldStacks);
            G(a, function (a) {
              G(a, function (a) {
                a.cumulative = a.total;
              });
            });
          }
        };
        a.prototype.resetStacks = function () {
          var a = this,
            f = a.stacks;
          a.axis.isXAxis ||
            G(f, function (f) {
              G(f, function (q, n) {
                q.touched < a.stacksTouched
                  ? (q.destroy(), delete f[n])
                  : ((q.total = null), (q.cumulative = null));
              });
            });
        };
        a.prototype.renderStackTotals = function () {
          var a = this.axis,
            f = a.chart,
            q = f.renderer,
            n = this.stacks;
          a = D(f, a.options.stackLabels.animation);
          var E = (this.stackTotalGroup =
            this.stackTotalGroup ||
            q
              .g("stack-labels")
              .attr({ visibility: "visible", zIndex: 6, opacity: 0 })
              .add());
          E.translate(f.plotLeft, f.plotTop);
          G(n, function (a) {
            G(a, function (a) {
              a.render(E);
            });
          });
          E.animate({ opacity: 1 }, a);
        };
        return a;
      })();
    return (function () {
      function f() {}
      f.compose = function (n) {
        a(n, "init", f.onInit);
        a(n, "destroy", f.onDestroy);
      };
      f.onDestroy = function () {
        var a = this.stacking;
        if (a) {
          var f = a.stacks;
          G(f, function (a, v) {
            n(a);
            f[v] = null;
          });
          a && a.stackTotalGroup && a.stackTotalGroup.destroy();
        }
      };
      f.onInit = function () {
        this.stacking || (this.stacking = new J(this));
      };
      return f;
    })();
  });
  O(
    n,
    "Mixins/LegendSymbol.js",
    [n["Core/Globals.js"], n["Core/Utilities.js"]],
    function (f, a) {
      var n = a.merge,
        y = a.pick;
      return (f.LegendSymbolMixin = {
        drawRectangle: function (a, f) {
          var n = a.symbolHeight,
            D = a.options.squareSymbol;
          f.legendSymbol = this.chart.renderer
            .rect(
              D ? (a.symbolWidth - n) / 2 : 0,
              a.baseline - n + 1,
              D ? n : a.symbolWidth,
              n,
              y(a.options.symbolRadius, n / 2)
            )
            .addClass("highcharts-point")
            .attr({ zIndex: 3 })
            .add(f.legendGroup);
        },
        drawLineMarker: function (a) {
          var f = this.options,
            C = f.marker,
            D = a.symbolWidth,
            H = a.symbolHeight,
            v = H / 2,
            L = this.chart.renderer,
            q = this.legendGroup;
          a = a.baseline - Math.round(0.3 * a.fontMetrics.b);
          var K = {};
          this.chart.styledMode ||
            ((K = { "stroke-width": f.lineWidth || 0 }),
            f.dashStyle && (K.dashstyle = f.dashStyle));
          this.legendLine = L.path([
            ["M", 0, a],
            ["L", D, a],
          ])
            .addClass("highcharts-graph")
            .attr(K)
            .add(q);
          C &&
            !1 !== C.enabled &&
            D &&
            ((f = Math.min(y(C.radius, v), v)),
            0 === this.symbol.indexOf("url") &&
              ((C = n(C, { width: H, height: H })), (f = 0)),
            (this.legendSymbol = C = L.symbol(
              this.symbol,
              D / 2 - f,
              a - f,
              2 * f,
              2 * f,
              C
            )
              .addClass("highcharts-point")
              .add(q)),
            (C.isMarker = !0));
        },
      });
    }
  );
  O(
    n,
    "Core/Series/Point.js",
    [n["Core/Globals.js"], n["Core/Utilities.js"]],
    function (f, a) {
      var n = a.animObject,
        y = a.defined,
        D = a.erase,
        G = a.extend,
        C = a.fireEvent,
        J = a.format,
        H = a.getNestedProperty,
        v = a.isArray,
        L = a.isNumber,
        q = a.isObject,
        K = a.syncTimeout,
        E = a.pick,
        p = a.removeEvent,
        t = a.uniqueKey;
      ("");
      a = (function () {
        function a() {
          this.colorIndex = this.category = void 0;
          this.formatPrefix = "point";
          this.id = void 0;
          this.isNull = !1;
          this.percentage = this.options = this.name = void 0;
          this.selected = !1;
          this.total = this.series = void 0;
          this.visible = !0;
          this.x = void 0;
        }
        a.prototype.animateBeforeDestroy = function () {
          var a = this,
            f = { x: a.startXPos, opacity: 0 },
            h,
            l = a.getGraphicalProps();
          l.singular.forEach(function (k) {
            h = "dataLabel" === k;
            a[k] = a[k].animate(
              h ? { x: a[k].startXPos, y: a[k].startYPos, opacity: 0 } : f
            );
          });
          l.plural.forEach(function (h) {
            a[h].forEach(function (g) {
              g.element &&
                g.animate(
                  G(
                    { x: a.startXPos },
                    g.startYPos ? { x: g.startXPos, y: g.startYPos } : {}
                  )
                );
            });
          });
        };
        a.prototype.applyOptions = function (f, m) {
          var h = this.series,
            l = h.options.pointValKey || h.pointValKey;
          f = a.prototype.optionsToObject.call(this, f);
          G(this, f);
          this.options = this.options ? G(this.options, f) : f;
          f.group && delete this.group;
          f.dataLabels && delete this.dataLabels;
          l && (this.y = a.prototype.getNestedProperty.call(this, l));
          this.formatPrefix = (this.isNull = E(
            this.isValid && !this.isValid(),
            null === this.x || !L(this.y)
          ))
            ? "null"
            : "point";
          this.selected && (this.state = "select");
          "name" in this &&
            "undefined" === typeof m &&
            h.xAxis &&
            h.xAxis.hasNames &&
            (this.x = h.xAxis.nameToX(this));
          "undefined" === typeof this.x &&
            h &&
            (this.x = "undefined" === typeof m ? h.autoIncrement(this) : m);
          return this;
        };
        a.prototype.destroy = function () {
          function a() {
            if (f.graphic || f.dataLabel || f.dataLabels)
              p(f), f.destroyElements();
            for (d in f) f[d] = null;
          }
          var f = this,
            h = f.series,
            l = h.chart;
          h = h.options.dataSorting;
          var k = l.hoverPoints,
            g = n(f.series.chart.renderer.globalAnimation),
            d;
          f.legendItem && l.legend.destroyItem(f);
          k && (f.setState(), D(k, f), k.length || (l.hoverPoints = null));
          if (f === l.hoverPoint) f.onMouseOut();
          h && h.enabled
            ? (this.animateBeforeDestroy(), K(a, g.duration))
            : a();
          l.pointCount--;
        };
        a.prototype.destroyElements = function (a) {
          var f = this;
          a = f.getGraphicalProps(a);
          a.singular.forEach(function (a) {
            f[a] = f[a].destroy();
          });
          a.plural.forEach(function (a) {
            f[a].forEach(function (a) {
              a.element && a.destroy();
            });
            delete f[a];
          });
        };
        a.prototype.firePointEvent = function (a, f, h) {
          var l = this,
            k = this.series.options;
          (k.point.events[a] ||
            (l.options && l.options.events && l.options.events[a])) &&
            l.importEvents();
          "click" === a &&
            k.allowPointSelect &&
            (h = function (a) {
              l.select && l.select(null, a.ctrlKey || a.metaKey || a.shiftKey);
            });
          C(l, a, f, h);
        };
        a.prototype.getClassName = function () {
          return (
            "highcharts-point" +
            (this.selected ? " highcharts-point-select" : "") +
            (this.negative ? " highcharts-negative" : "") +
            (this.isNull ? " highcharts-null-point" : "") +
            ("undefined" !== typeof this.colorIndex
              ? " highcharts-color-" + this.colorIndex
              : "") +
            (this.options.className ? " " + this.options.className : "") +
            (this.zone && this.zone.className
              ? " " + this.zone.className.replace("highcharts-negative", "")
              : "")
          );
        };
        a.prototype.getGraphicalProps = function (a) {
          var f = this,
            h = [],
            l,
            k = { singular: [], plural: [] };
          a = a || { graphic: 1, dataLabel: 1 };
          a.graphic && h.push("graphic", "shadowGroup");
          a.dataLabel && h.push("dataLabel", "dataLabelUpper", "connector");
          for (l = h.length; l--; ) {
            var g = h[l];
            f[g] && k.singular.push(g);
          }
          ["dataLabel", "connector"].forEach(function (d) {
            var g = d + "s";
            a[d] && f[g] && k.plural.push(g);
          });
          return k;
        };
        a.prototype.getLabelConfig = function () {
          return {
            x: this.category,
            y: this.y,
            color: this.color,
            colorIndex: this.colorIndex,
            key: this.name || this.category,
            series: this.series,
            point: this,
            percentage: this.percentage,
            total: this.total || this.stackTotal,
          };
        };
        a.prototype.getNestedProperty = function (a) {
          if (a)
            return 0 === a.indexOf("custom.") ? H(a, this.options) : this[a];
        };
        a.prototype.getZone = function () {
          var a = this.series,
            f = a.zones;
          a = a.zoneAxis || "y";
          var h = 0,
            l;
          for (l = f[h]; this[a] >= l.value; ) l = f[++h];
          this.nonZonedColor || (this.nonZonedColor = this.color);
          this.color =
            l && l.color && !this.options.color ? l.color : this.nonZonedColor;
          return l;
        };
        a.prototype.hasNewShapeType = function () {
          return (
            (this.graphic &&
              (this.graphic.symbolName || this.graphic.element.nodeName)) !==
            this.shapeType
          );
        };
        a.prototype.init = function (a, f, h) {
          this.series = a;
          this.applyOptions(f, h);
          this.id = y(this.id) ? this.id : t();
          this.resolveColor();
          a.chart.pointCount++;
          C(this, "afterInit");
          return this;
        };
        a.prototype.optionsToObject = function (f) {
          var m = {},
            h = this.series,
            l = h.options.keys,
            k = l || h.pointArrayMap || ["y"],
            g = k.length,
            d = 0,
            p = 0;
          if (L(f) || null === f) m[k[0]] = f;
          else if (v(f))
            for (
              !l &&
              f.length > g &&
              ((h = typeof f[0]),
              "string" === h ? (m.name = f[0]) : "number" === h && (m.x = f[0]),
              d++);
              p < g;

            )
              (l && "undefined" === typeof f[d]) ||
                (0 < k[p].indexOf(".")
                  ? a.prototype.setNestedProperty(m, f[d], k[p])
                  : (m[k[p]] = f[d])),
                d++,
                p++;
          else
            "object" === typeof f &&
              ((m = f),
              f.dataLabels && (h._hasPointLabels = !0),
              f.marker && (h._hasPointMarkers = !0));
          return m;
        };
        a.prototype.resolveColor = function () {
          var a = this.series;
          var f = a.chart.options.chart.colorCount;
          var h = a.chart.styledMode;
          delete this.nonZonedColor;
          h || this.options.color || (this.color = a.color);
          a.options.colorByPoint
            ? (h ||
                ((f = a.options.colors || a.chart.options.colors),
                (this.color = this.color || f[a.colorCounter]),
                (f = f.length)),
              (h = a.colorCounter),
              a.colorCounter++,
              a.colorCounter === f && (a.colorCounter = 0))
            : (h = a.colorIndex);
          this.colorIndex = E(this.colorIndex, h);
        };
        a.prototype.setNestedProperty = function (a, f, h) {
          h.split(".").reduce(function (a, h, g, d) {
            a[h] = d.length - 1 === g ? f : q(a[h], !0) ? a[h] : {};
            return a[h];
          }, a);
          return a;
        };
        a.prototype.tooltipFormatter = function (a) {
          var f = this.series,
            h = f.tooltipOptions,
            l = E(h.valueDecimals, ""),
            k = h.valuePrefix || "",
            g = h.valueSuffix || "";
          f.chart.styledMode && (a = f.chart.tooltip.styledModeFormat(a));
          (f.pointArrayMap || ["y"]).forEach(function (d) {
            d = "{point." + d;
            if (k || g) a = a.replace(RegExp(d + "}", "g"), k + d + "}" + g);
            a = a.replace(RegExp(d + "}", "g"), d + ":,." + l + "f}");
          });
          return J(a, { point: this, series: this.series }, f.chart);
        };
        return a;
      })();
      return (f.Point = a);
    }
  );
  O(
    n,
    "Core/Series/Series.js",
    [
      n["Core/Globals.js"],
      n["Mixins/LegendSymbol.js"],
      n["Core/Options.js"],
      n["Core/Series/Point.js"],
      n["Core/Renderer/SVG/SVGElement.js"],
      n["Core/Utilities.js"],
    ],
    function (f, a, n, y, D, G) {
      var C = n.defaultOptions,
        J = G.addEvent,
        H = G.animObject,
        v = G.arrayMax,
        L = G.arrayMin,
        q = G.clamp,
        K = G.correctFloat,
        E = G.defined,
        p = G.erase,
        t = G.error,
        I = G.extend,
        u = G.find,
        m = G.fireEvent,
        h = G.getNestedProperty,
        l = G.isArray,
        k = G.isFunction,
        g = G.isNumber,
        d = G.isString,
        x = G.merge,
        r = G.objectEach,
        A = G.pick,
        N = G.removeEvent;
      n = G.seriesType;
      var B = G.splat,
        M = G.syncTimeout;
      ("");
      var R = f.seriesTypes,
        F = f.win;
      f.Series = n(
        "line",
        null,
        {
          lineWidth: 2,
          allowPointSelect: !1,
          crisp: !0,
          showCheckbox: !1,
          animation: { duration: 1e3 },
          events: {},
          marker: {
            enabledThreshold: 2,
            lineColor: "#ffffff",
            lineWidth: 0,
            radius: 4,
            states: {
              normal: { animation: !0 },
              hover: {
                animation: { duration: 50 },
                enabled: !0,
                radiusPlus: 2,
                lineWidthPlus: 1,
              },
              select: {
                fillColor: "#cccccc",
                lineColor: "#000000",
                lineWidth: 2,
              },
            },
          },
          point: { events: {} },
          dataLabels: {
            animation: {},
            align: "center",
            defer: !0,
            formatter: function () {
              var e = this.series.chart.numberFormatter;
              return "number" !== typeof this.y ? "" : e(this.y, -1);
            },
            padding: 5,
            style: {
              fontSize: "11px",
              fontWeight: "bold",
              color: "contrast",
              textOutline: "1px contrast",
            },
            verticalAlign: "bottom",
            x: 0,
            y: 0,
          },
          cropThreshold: 300,
          opacity: 1,
          pointRange: 0,
          softThreshold: !0,
          states: {
            normal: { animation: !0 },
            hover: {
              animation: { duration: 50 },
              lineWidthPlus: 1,
              marker: {},
              halo: { size: 10, opacity: 0.25 },
            },
            select: { animation: { duration: 0 } },
            inactive: { animation: { duration: 50 }, opacity: 0.2 },
          },
          stickyTracking: !0,
          turboThreshold: 1e3,
          findNearestPointBy: "x",
        },
        {
          axisTypes: ["xAxis", "yAxis"],
          coll: "series",
          colorCounter: 0,
          cropShoulder: 1,
          directTouch: !1,
          isCartesian: !0,
          parallelArrays: ["x", "y"],
          pointClass: y,
          requireSorting: !0,
          sorted: !0,
          init: function (e, c) {
            m(this, "init", { options: c });
            var b = this,
              a = e.series,
              d;
            this.eventOptions = this.eventOptions || {};
            this.eventsToUnbind = [];
            b.chart = e;
            b.options = c = b.setOptions(c);
            b.linkedSeries = [];
            b.bindAxes();
            I(b, {
              name: c.name,
              state: "",
              visible: !1 !== c.visible,
              selected: !0 === c.selected,
            });
            var g = c.events;
            r(g, function (c, e) {
              k(c) &&
                b.eventOptions[e] !== c &&
                (k(b.eventOptions[e]) && N(b, e, b.eventOptions[e]),
                (b.eventOptions[e] = c),
                J(b, e, c));
            });
            if (
              (g && g.click) ||
              (c.point && c.point.events && c.point.events.click) ||
              c.allowPointSelect
            )
              e.runTrackerClick = !0;
            b.getColor();
            b.getSymbol();
            b.parallelArrays.forEach(function (c) {
              b[c + "Data"] || (b[c + "Data"] = []);
            });
            b.isCartesian && (e.hasCartesianSeries = !0);
            a.length && (d = a[a.length - 1]);
            b._i = A(d && d._i, -1) + 1;
            b.opacity = b.options.opacity;
            e.orderSeries(this.insert(a));
            c.dataSorting && c.dataSorting.enabled
              ? b.setDataSortingOptions()
              : b.points || b.data || b.setData(c.data, !1);
            m(this, "afterInit");
          },
          is: function (e) {
            return R[e] && this instanceof R[e];
          },
          insert: function (e) {
            var c = this.options.index,
              b;
            if (g(c)) {
              for (b = e.length; b--; )
                if (c >= A(e[b].options.index, e[b]._i)) {
                  e.splice(b + 1, 0, this);
                  break;
                }
              -1 === b && e.unshift(this);
              b += 1;
            } else e.push(this);
            return A(b, e.length - 1);
          },
          bindAxes: function () {
            var e = this,
              c = e.options,
              b = e.chart,
              a;
            m(this, "bindAxes", null, function () {
              (e.axisTypes || []).forEach(function (d) {
                b[d].forEach(function (b) {
                  a = b.options;
                  if (
                    c[d] === a.index ||
                    ("undefined" !== typeof c[d] && c[d] === a.id) ||
                    ("undefined" === typeof c[d] && 0 === a.index)
                  )
                    e.insert(b.series), (e[d] = b), (b.isDirty = !0);
                });
                e[d] || e.optionalAxis === d || t(18, !0, b);
              });
            });
            m(this, "afterBindAxes");
          },
          updateParallelArrays: function (e, c) {
            var b = e.series,
              a = arguments,
              d = g(c)
                ? function (a) {
                    var d = "y" === a && b.toYData ? b.toYData(e) : e[a];
                    b[a + "Data"][c] = d;
                  }
                : function (e) {
                    Array.prototype[c].apply(
                      b[e + "Data"],
                      Array.prototype.slice.call(a, 2)
                    );
                  };
            b.parallelArrays.forEach(d);
          },
          hasData: function () {
            return (
              (this.visible &&
                "undefined" !== typeof this.dataMax &&
                "undefined" !== typeof this.dataMin) ||
              (this.visible && this.yData && 0 < this.yData.length)
            );
          },
          autoIncrement: function () {
            var e = this.options,
              c = this.xIncrement,
              b,
              a = e.pointIntervalUnit,
              d = this.chart.time;
            c = A(c, e.pointStart, 0);
            this.pointInterval = b = A(this.pointInterval, e.pointInterval, 1);
            a &&
              ((e = new d.Date(c)),
              "day" === a
                ? d.set("Date", e, d.get("Date", e) + b)
                : "month" === a
                ? d.set("Month", e, d.get("Month", e) + b)
                : "year" === a &&
                  d.set("FullYear", e, d.get("FullYear", e) + b),
              (b = e.getTime() - c));
            this.xIncrement = c + b;
            return c;
          },
          setDataSortingOptions: function () {
            var e = this.options;
            I(this, {
              requireSorting: !1,
              sorted: !1,
              enabledDataSorting: !0,
              allowDG: !1,
            });
            E(e.pointRange) || (e.pointRange = 1);
          },
          setOptions: function (e) {
            var c = this.chart,
              b = c.options,
              a = b.plotOptions,
              d = c.userOptions || {};
            e = x(e);
            c = c.styledMode;
            var g = { plotOptions: a, userOptions: e };
            m(this, "setOptions", g);
            var h = g.plotOptions[this.type],
              f = d.plotOptions || {};
            this.userOptions = g.userOptions;
            d = x(h, a.series, d.plotOptions && d.plotOptions[this.type], e);
            this.tooltipOptions = x(
              C.tooltip,
              C.plotOptions.series && C.plotOptions.series.tooltip,
              C.plotOptions[this.type].tooltip,
              b.tooltip.userOptions,
              a.series && a.series.tooltip,
              a[this.type].tooltip,
              e.tooltip
            );
            this.stickyTracking = A(
              e.stickyTracking,
              f[this.type] && f[this.type].stickyTracking,
              f.series && f.series.stickyTracking,
              this.tooltipOptions.shared && !this.noSharedTooltip
                ? !0
                : d.stickyTracking
            );
            null === h.marker && delete d.marker;
            this.zoneAxis = d.zoneAxis;
            b = this.zones = (d.zones || []).slice();
            (!d.negativeColor && !d.negativeFillColor) ||
              d.zones ||
              ((a = {
                value: d[this.zoneAxis + "Threshold"] || d.threshold || 0,
                className: "highcharts-negative",
              }),
              c ||
                ((a.color = d.negativeColor),
                (a.fillColor = d.negativeFillColor)),
              b.push(a));
            b.length &&
              E(b[b.length - 1].value) &&
              b.push(c ? {} : { color: this.color, fillColor: this.fillColor });
            m(this, "afterSetOptions", { options: d });
            return d;
          },
          getName: function () {
            return A(this.options.name, "Series " + (this.index + 1));
          },
          getCyclic: function (e, c, b) {
            var a = this.chart,
              d = this.userOptions,
              g = e + "Index",
              h = e + "Counter",
              f = b
                ? b.length
                : A(a.options.chart[e + "Count"], a[e + "Count"]);
            if (!c) {
              var k = A(d[g], d["_" + g]);
              E(k) ||
                (a.series.length || (a[h] = 0),
                (d["_" + g] = k = a[h] % f),
                (a[h] += 1));
              b && (c = b[k]);
            }
            "undefined" !== typeof k && (this[g] = k);
            this[e] = c;
          },
          getColor: function () {
            this.chart.styledMode
              ? this.getCyclic("color")
              : this.options.colorByPoint
              ? (this.options.color = null)
              : this.getCyclic(
                  "color",
                  this.options.color || C.plotOptions[this.type].color,
                  this.chart.options.colors
                );
          },
          getPointsCollection: function () {
            return (this.hasGroupedData ? this.points : this.data) || [];
          },
          getSymbol: function () {
            this.getCyclic(
              "symbol",
              this.options.marker.symbol,
              this.chart.options.symbols
            );
          },
          findPointIndex: function (e, c) {
            var b = e.id,
              a = e.x,
              d = this.points,
              h,
              f = this.options.dataSorting;
            if (b) var k = this.chart.get(b);
            else if (this.linkedParent || this.enabledDataSorting) {
              var l = f && f.matchByName ? "name" : "index";
              k = u(d, function (b) {
                return !b.touched && b[l] === e[l];
              });
              if (!k) return;
            }
            if (k) {
              var m = k && k.index;
              "undefined" !== typeof m && (h = !0);
            }
            "undefined" === typeof m && g(a) && (m = this.xData.indexOf(a, c));
            -1 !== m &&
              "undefined" !== typeof m &&
              this.cropped &&
              (m = m >= this.cropStart ? m - this.cropStart : m);
            !h && d[m] && d[m].touched && (m = void 0);
            return m;
          },
          drawLegendSymbol: a.drawLineMarker,
          updateData: function (e, c) {
            var b = this.options,
              a = b.dataSorting,
              d = this.points,
              h = [],
              f,
              k,
              l,
              m = this.requireSorting,
              p = e.length === d.length,
              r = !0;
            this.xIncrement = null;
            e.forEach(function (c, e) {
              var k =
                (E(c) &&
                  this.pointClass.prototype.optionsToObject.call(
                    { series: this },
                    c
                  )) ||
                {};
              var w = k.x;
              if (k.id || g(w)) {
                if (
                  ((w = this.findPointIndex(k, l)),
                  -1 === w || "undefined" === typeof w
                    ? h.push(c)
                    : d[w] && c !== b.data[w]
                    ? (d[w].update(c, !1, null, !1),
                      (d[w].touched = !0),
                      m && (l = w + 1))
                    : d[w] && (d[w].touched = !0),
                  !p || e !== w || (a && a.enabled) || this.hasDerivedData)
                )
                  f = !0;
              } else h.push(c);
            }, this);
            if (f)
              for (e = d.length; e--; )
                (k = d[e]) && !k.touched && k.remove && k.remove(!1, c);
            else
              !p || (a && a.enabled)
                ? (r = !1)
                : (e.forEach(function (b, c) {
                    d[c].update && b !== d[c].y && d[c].update(b, !1, null, !1);
                  }),
                  (h.length = 0));
            d.forEach(function (b) {
              b && (b.touched = !1);
            });
            if (!r) return !1;
            h.forEach(function (b) {
              this.addPoint(b, !1, null, null, !1);
            }, this);
            null === this.xIncrement &&
              this.xData &&
              this.xData.length &&
              ((this.xIncrement = v(this.xData)), this.autoIncrement());
            return !0;
          },
          setData: function (e, c, b, a) {
            var h = this,
              f = h.points,
              k = (f && f.length) || 0,
              m,
              p = h.options,
              r = h.chart,
              B = p.dataSorting,
              z = null,
              n = h.xAxis;
            z = p.turboThreshold;
            var q = this.xData,
              x = this.yData,
              F = (m = h.pointArrayMap) && m.length,
              M = p.keys,
              v = 0,
              u = 1,
              I;
            e = e || [];
            m = e.length;
            c = A(c, !0);
            B && B.enabled && (e = this.sortData(e));
            !1 !== a &&
              m &&
              k &&
              !h.cropped &&
              !h.hasGroupedData &&
              h.visible &&
              !h.isSeriesBoosting &&
              (I = this.updateData(e, b));
            if (!I) {
              h.xIncrement = null;
              h.colorCounter = 0;
              this.parallelArrays.forEach(function (b) {
                h[b + "Data"].length = 0;
              });
              if (z && m > z)
                if (((z = h.getFirstValidPoint(e)), g(z)))
                  for (b = 0; b < m; b++)
                    (q[b] = this.autoIncrement()), (x[b] = e[b]);
                else if (l(z))
                  if (F)
                    for (b = 0; b < m; b++)
                      (a = e[b]), (q[b] = a[0]), (x[b] = a.slice(1, F + 1));
                  else
                    for (
                      M &&
                        ((v = M.indexOf("x")),
                        (u = M.indexOf("y")),
                        (v = 0 <= v ? v : 0),
                        (u = 0 <= u ? u : 1)),
                        b = 0;
                      b < m;
                      b++
                    )
                      (a = e[b]), (q[b] = a[v]), (x[b] = a[u]);
                else t(12, !1, r);
              else
                for (b = 0; b < m; b++)
                  "undefined" !== typeof e[b] &&
                    ((a = { series: h }),
                    h.pointClass.prototype.applyOptions.apply(a, [e[b]]),
                    h.updateParallelArrays(a, b));
              x && d(x[0]) && t(14, !0, r);
              h.data = [];
              h.options.data = h.userOptions.data = e;
              for (b = k; b--; ) f[b] && f[b].destroy && f[b].destroy();
              n && (n.minRange = n.userMinRange);
              h.isDirty = r.isDirtyBox = !0;
              h.isDirtyData = !!f;
              b = !1;
            }
            "point" === p.legendType &&
              (this.processData(), this.generatePoints());
            c && r.redraw(b);
          },
          sortData: function (e) {
            var c = this,
              b = c.options.dataSorting.sortKey || "y",
              a = function (b, c) {
                return (
                  (E(c) &&
                    b.pointClass.prototype.optionsToObject.call(
                      { series: b },
                      c
                    )) ||
                  {}
                );
              };
            e.forEach(function (b, d) {
              e[d] = a(c, b);
              e[d].index = d;
            }, this);
            e.concat()
              .sort(function (c, e) {
                c = h(b, c);
                e = h(b, e);
                return e < c ? -1 : e > c ? 1 : 0;
              })
              .forEach(function (b, c) {
                b.x = c;
              }, this);
            c.linkedSeries &&
              c.linkedSeries.forEach(function (b) {
                var c = b.options,
                  d = c.data;
                (c.dataSorting && c.dataSorting.enabled) ||
                  !d ||
                  (d.forEach(function (c, g) {
                    d[g] = a(b, c);
                    e[g] && ((d[g].x = e[g].x), (d[g].index = g));
                  }),
                  b.setData(d, !1));
              });
            return e;
          },
          getProcessedData: function (e) {
            var c = this.xData,
              b = this.yData,
              a = c.length;
            var d = 0;
            var g = this.xAxis,
              h = this.options;
            var f = h.cropThreshold;
            var k = e || this.getExtremesFromAll || h.getExtremesFromAll,
              l = this.isCartesian;
            e = g && g.val2lin;
            h = !(!g || !g.logarithmic);
            var m = this.requireSorting;
            if (g) {
              g = g.getExtremes();
              var p = g.min;
              var r = g.max;
            }
            if (l && this.sorted && !k && (!f || a > f || this.forceCrop))
              if (c[a - 1] < p || c[0] > r) (c = []), (b = []);
              else if (this.yData && (c[0] < p || c[a - 1] > r)) {
                d = this.cropData(this.xData, this.yData, p, r);
                c = d.xData;
                b = d.yData;
                d = d.start;
                var B = !0;
              }
            for (f = c.length || 1; --f; )
              if (
                ((a = h ? e(c[f]) - e(c[f - 1]) : c[f] - c[f - 1]),
                0 < a && ("undefined" === typeof n || a < n))
              )
                var n = a;
              else 0 > a && m && (t(15, !1, this.chart), (m = !1));
            return {
              xData: c,
              yData: b,
              cropped: B,
              cropStart: d,
              closestPointRange: n,
            };
          },
          processData: function (e) {
            var c = this.xAxis;
            if (
              this.isCartesian &&
              !this.isDirty &&
              !c.isDirty &&
              !this.yAxis.isDirty &&
              !e
            )
              return !1;
            e = this.getProcessedData();
            this.cropped = e.cropped;
            this.cropStart = e.cropStart;
            this.processedXData = e.xData;
            this.processedYData = e.yData;
            this.closestPointRange = this.basePointRange = e.closestPointRange;
          },
          cropData: function (e, c, b, a, d) {
            var g = e.length,
              h = 0,
              f = g,
              k;
            d = A(d, this.cropShoulder);
            for (k = 0; k < g; k++)
              if (e[k] >= b) {
                h = Math.max(0, k - d);
                break;
              }
            for (b = k; b < g; b++)
              if (e[b] > a) {
                f = b + d;
                break;
              }
            return {
              xData: e.slice(h, f),
              yData: c.slice(h, f),
              start: h,
              end: f,
            };
          },
          generatePoints: function () {
            var e = this.options,
              c = e.data,
              b = this.data,
              a,
              d = this.processedXData,
              g = this.processedYData,
              h = this.pointClass,
              f = d.length,
              k = this.cropStart || 0,
              l = this.hasGroupedData;
            e = e.keys;
            var p = [],
              r;
            b || l || ((b = []), (b.length = c.length), (b = this.data = b));
            e && l && (this.options.keys = !1);
            for (r = 0; r < f; r++) {
              var t = k + r;
              if (l) {
                var n = new h().init(this, [d[r]].concat(B(g[r])));
                n.dataGroup = this.groupMap[r];
                n.dataGroup.options &&
                  ((n.options = n.dataGroup.options),
                  I(n, n.dataGroup.options),
                  delete n.dataLabels);
              } else
                (n = b[t]) ||
                  "undefined" === typeof c[t] ||
                  (b[t] = n = new h().init(this, c[t], d[r]));
              n && ((n.index = t), (p[r] = n));
            }
            this.options.keys = e;
            if (b && (f !== (a = b.length) || l))
              for (r = 0; r < a; r++)
                r !== k || l || (r += f),
                  b[r] && (b[r].destroyElements(), (b[r].plotX = void 0));
            this.data = b;
            this.points = p;
            m(this, "afterGeneratePoints");
          },
          getXExtremes: function (e) {
            return { min: L(e), max: v(e) };
          },
          getExtremes: function (e, c) {
            var b = this.xAxis,
              a = this.yAxis,
              d = this.processedXData || this.xData,
              h = [],
              f = 0,
              k = 0;
            var p = 0;
            var r = this.requireSorting ? this.cropShoulder : 0,
              t = a ? a.positiveValuesOnly : !1,
              B;
            e = e || this.stackedYData || this.processedYData || [];
            a = e.length;
            b && ((p = b.getExtremes()), (k = p.min), (p = p.max));
            for (B = 0; B < a; B++) {
              var n = d[B];
              var q = e[B];
              var x = (g(q) || l(q)) && (q.length || 0 < q || !t);
              n =
                c ||
                this.getExtremesFromAll ||
                this.options.getExtremesFromAll ||
                this.cropped ||
                !b ||
                ((d[B + r] || n) >= k && (d[B - r] || n) <= p);
              if (x && n)
                if ((x = q.length)) for (; x--; ) g(q[x]) && (h[f++] = q[x]);
                else h[f++] = q;
            }
            e = { dataMin: L(h), dataMax: v(h) };
            m(this, "afterGetExtremes", { dataExtremes: e });
            return e;
          },
          applyExtremes: function () {
            var e = this.getExtremes();
            this.dataMin = e.dataMin;
            this.dataMax = e.dataMax;
            return e;
          },
          getFirstValidPoint: function (e) {
            for (var c = null, b = e.length, a = 0; null === c && a < b; )
              (c = e[a]), a++;
            return c;
          },
          translate: function () {
            this.processedXData || this.processData();
            this.generatePoints();
            var e = this.options,
              c = e.stacking,
              b = this.xAxis,
              a = b.categories,
              d = this.enabledDataSorting,
              h = this.yAxis,
              f = this.points,
              k = f.length,
              p = !!this.modifyValue,
              r,
              t = this.pointPlacementToXValue(),
              B = !!t,
              n = e.threshold,
              x = e.startFromThreshold ? n : 0,
              F,
              M = this.zoneAxis || "y",
              v = Number.MAX_VALUE;
            for (r = 0; r < k; r++) {
              var u = f[r],
                I = u.x,
                C = u.y,
                H = u.low,
                R =
                  c &&
                  h.stacking &&
                  h.stacking.stacks[
                    (this.negStacks && C < (x ? 0 : n) ? "-" : "") +
                      this.stackKey
                  ];
              if (
                (h.positiveValuesOnly && !h.validatePositiveValue(C)) ||
                (b.positiveValuesOnly && !b.validatePositiveValue(I))
              )
                u.isNull = !0;
              u.plotX = F = K(
                q(
                  b.translate(I, 0, 0, 0, 1, t, "flags" === this.type),
                  -1e5,
                  1e5
                )
              );
              if (c && this.visible && R && R[I]) {
                var y = this.getStackIndicator(y, I, this.index);
                if (!u.isNull) {
                  var N = R[I];
                  var D = N.points[y.key];
                }
              }
              l(D) &&
                ((H = D[0]),
                (C = D[1]),
                H === x && y.key === R[I].base && (H = A(g(n) && n, h.min)),
                h.positiveValuesOnly && 0 >= H && (H = null),
                (u.total = u.stackTotal = N.total),
                (u.percentage = N.total && (u.y / N.total) * 100),
                (u.stackY = C),
                this.irregularWidths ||
                  N.setOffset(this.pointXOffset || 0, this.barW || 0));
              u.yBottom = E(H)
                ? q(h.translate(H, 0, 1, 0, 1), -1e5, 1e5)
                : null;
              p && (C = this.modifyValue(C, u));
              u.plotY =
                "number" === typeof C && Infinity !== C
                  ? q(h.translate(C, 0, 1, 0, 1), -1e5, 1e5)
                  : void 0;
              u.isInside = this.isPointInside(u);
              u.clientX = B ? K(b.translate(I, 0, 0, 0, 1, t)) : F;
              u.negative = u[M] < (e[M + "Threshold"] || n || 0);
              u.category = a && "undefined" !== typeof a[u.x] ? a[u.x] : u.x;
              if (!u.isNull && !1 !== u.visible) {
                "undefined" !== typeof G && (v = Math.min(v, Math.abs(F - G)));
                var G = F;
              }
              u.zone = this.zones.length && u.getZone();
              !u.graphic && this.group && d && (u.isNew = !0);
            }
            this.closestPointRangePx = v;
            m(this, "afterTranslate");
          },
          getValidPoints: function (e, c, b) {
            var a = this.chart;
            return (e || this.points || []).filter(function (e) {
              return c && !a.isInsidePlot(e.plotX, e.plotY, a.inverted)
                ? !1
                : !1 !== e.visible && (b || !e.isNull);
            });
          },
          getClipBox: function (e, c) {
            var b = this.options,
              a = this.chart,
              d = a.inverted,
              g = this.xAxis,
              h = g && this.yAxis,
              f = a.options.chart.scrollablePlotArea || {};
            e && !1 === b.clip && h
              ? (e = d
                  ? {
                      y: -a.chartWidth + h.len + h.pos,
                      height: a.chartWidth,
                      width: a.chartHeight,
                      x: -a.chartHeight + g.len + g.pos,
                    }
                  : {
                      y: -h.pos,
                      height: a.chartHeight,
                      width: a.chartWidth,
                      x: -g.pos,
                    })
              : ((e = this.clipBox || a.clipBox),
                c &&
                  ((e.width = a.plotSizeX),
                  (e.x =
                    (a.scrollablePixelsX || 0) * (f.scrollPositionX || 0))));
            return c ? { width: e.width, x: e.x } : e;
          },
          setClip: function (e) {
            var c = this.chart,
              b = this.options,
              a = c.renderer,
              d = c.inverted,
              g = this.clipBox,
              h = this.getClipBox(e),
              f =
                this.sharedClipKey ||
                [
                  "_sharedClip",
                  e && e.duration,
                  e && e.easing,
                  h.height,
                  b.xAxis,
                  b.yAxis,
                ].join(),
              k = c[f],
              l = c[f + "m"];
            e &&
              ((h.width = 0),
              d && (h.x = c.plotHeight + (!1 !== b.clip ? 0 : c.plotTop)));
            k
              ? c.hasLoaded || k.attr(h)
              : (e &&
                  (c[f + "m"] = l = a.clipRect(
                    d ? c.plotSizeX + 99 : -99,
                    d ? -c.plotLeft : -c.plotTop,
                    99,
                    d ? c.chartWidth : c.chartHeight
                  )),
                (c[f] = k = a.clipRect(h)),
                (k.count = { length: 0 }));
            e &&
              !k.count[this.index] &&
              ((k.count[this.index] = !0), (k.count.length += 1));
            if (!1 !== b.clip || e)
              this.group.clip(e || g ? k : c.clipRect),
                this.markerGroup.clip(l),
                (this.sharedClipKey = f);
            e ||
              (k.count[this.index] &&
                (delete k.count[this.index], --k.count.length),
              0 === k.count.length &&
                f &&
                c[f] &&
                (g || (c[f] = c[f].destroy()),
                c[f + "m"] && (c[f + "m"] = c[f + "m"].destroy())));
          },
          animate: function (e) {
            var c = this.chart,
              b = H(this.options.animation);
            if (!c.hasRendered)
              if (e) this.setClip(b);
              else {
                var a = this.sharedClipKey;
                e = c[a];
                var d = this.getClipBox(b, !0);
                e && e.animate(d, b);
                c[a + "m"] &&
                  c[a + "m"].animate(
                    { width: d.width + 99, x: d.x - (c.inverted ? 0 : 99) },
                    b
                  );
              }
          },
          afterAnimate: function () {
            this.setClip();
            m(this, "afterAnimate");
            this.finishedAnimating = !0;
          },
          drawPoints: function () {
            var e = this.points,
              c = this.chart,
              b,
              a,
              d = this.options.marker,
              g = this[this.specialGroup] || this.markerGroup,
              h = this.xAxis,
              f = A(
                d.enabled,
                !h || h.isRadial ? !0 : null,
                this.closestPointRangePx >= d.enabledThreshold * d.radius
              );
            if (!1 !== d.enabled || this._hasPointMarkers)
              for (b = 0; b < e.length; b++) {
                var k = e[b];
                var l = (a = k.graphic) ? "animate" : "attr";
                var m = k.marker || {};
                var p = !!k.marker;
                if (
                  ((f && "undefined" === typeof m.enabled) || m.enabled) &&
                  !k.isNull &&
                  !1 !== k.visible
                ) {
                  var r = A(m.symbol, this.symbol);
                  var t = this.markerAttribs(k, k.selected && "select");
                  this.enabledDataSorting &&
                    (k.startXPos = h.reversed ? -t.width : h.width);
                  var B = !1 !== k.isInside;
                  a
                    ? a[B ? "show" : "hide"](B).animate(t)
                    : B &&
                      (0 < t.width || k.hasImage) &&
                      ((k.graphic = a = c.renderer
                        .symbol(r, t.x, t.y, t.width, t.height, p ? m : d)
                        .add(g)),
                      this.enabledDataSorting &&
                        c.hasRendered &&
                        (a.attr({ x: k.startXPos }), (l = "animate")));
                  a && "animate" === l && a[B ? "show" : "hide"](B).animate(t);
                  if (a && !c.styledMode)
                    a[l](this.pointAttribs(k, k.selected && "select"));
                  a && a.addClass(k.getClassName(), !0);
                } else a && (k.graphic = a.destroy());
              }
          },
          markerAttribs: function (e, c) {
            var b = this.options,
              a = b.marker,
              d = e.marker || {},
              g = d.symbol || a.symbol,
              h = A(d.radius, a.radius);
            c &&
              ((a = a.states[c]),
              (c = d.states && d.states[c]),
              (h = A(
                c && c.radius,
                a && a.radius,
                h + ((a && a.radiusPlus) || 0)
              )));
            e.hasImage = g && 0 === g.indexOf("url");
            e.hasImage && (h = 0);
            e = {
              x: b.crisp ? Math.floor(e.plotX) - h : e.plotX - h,
              y: e.plotY - h,
            };
            h && (e.width = e.height = 2 * h);
            return e;
          },
          pointAttribs: function (e, c) {
            var b = this.options.marker,
              a = e && e.options,
              d = (a && a.marker) || {},
              g = this.color,
              h = a && a.color,
              f = e && e.color;
            a = A(d.lineWidth, b.lineWidth);
            var k = e && e.zone && e.zone.color;
            e = 1;
            g = h || k || f || g;
            h = d.fillColor || b.fillColor || g;
            g = d.lineColor || b.lineColor || g;
            c = c || "normal";
            b = b.states[c];
            c = (d.states && d.states[c]) || {};
            a = A(
              c.lineWidth,
              b.lineWidth,
              a + A(c.lineWidthPlus, b.lineWidthPlus, 0)
            );
            h = c.fillColor || b.fillColor || h;
            g = c.lineColor || b.lineColor || g;
            e = A(c.opacity, b.opacity, e);
            return { stroke: g, "stroke-width": a, fill: h, opacity: e };
          },
          destroy: function (e) {
            var c = this,
              b = c.chart,
              a = /AppleWebKit\/533/.test(F.navigator.userAgent),
              d,
              g,
              h = c.data || [],
              f,
              k;
            m(c, "destroy");
            this.removeEvents(e);
            (c.axisTypes || []).forEach(function (b) {
              (k = c[b]) &&
                k.series &&
                (p(k.series, c), (k.isDirty = k.forceRedraw = !0));
            });
            c.legendItem && c.chart.legend.destroyItem(c);
            for (g = h.length; g--; ) (f = h[g]) && f.destroy && f.destroy();
            c.points = null;
            G.clearTimeout(c.animationTimeout);
            r(c, function (b, c) {
              b instanceof D &&
                !b.survive &&
                ((d = a && "group" === c ? "hide" : "destroy"), b[d]());
            });
            b.hoverSeries === c && (b.hoverSeries = null);
            p(b.series, c);
            b.orderSeries();
            r(c, function (b, a) {
              (e && "hcEvents" === a) || delete c[a];
            });
          },
          getGraphPath: function (e, c, b) {
            var a = this,
              d = a.options,
              g = d.step,
              h,
              f = [],
              k = [],
              l;
            e = e || a.points;
            (h = e.reversed) && e.reverse();
            (g = { right: 1, center: 2 }[g] || (g && 3)) && h && (g = 4 - g);
            e = this.getValidPoints(e, !1, !(d.connectNulls && !c && !b));
            e.forEach(function (h, m) {
              var p = h.plotX,
                r = h.plotY,
                t = e[m - 1];
              (h.leftCliff || (t && t.rightCliff)) && !b && (l = !0);
              h.isNull && !E(c) && 0 < m
                ? (l = !d.connectNulls)
                : h.isNull && !c
                ? (l = !0)
                : (0 === m || l
                    ? (m = [["M", h.plotX, h.plotY]])
                    : a.getPointSpline
                    ? (m = [a.getPointSpline(e, h, m)])
                    : g
                    ? ((m =
                        1 === g
                          ? [["L", t.plotX, r]]
                          : 2 === g
                          ? [
                              ["L", (t.plotX + p) / 2, t.plotY],
                              ["L", (t.plotX + p) / 2, r],
                            ]
                          : [["L", p, t.plotY]]),
                      m.push(["L", p, r]))
                    : (m = [["L", p, r]]),
                  k.push(h.x),
                  g && (k.push(h.x), 2 === g && k.push(h.x)),
                  f.push.apply(f, m),
                  (l = !1));
            });
            f.xMap = k;
            return (a.graphPath = f);
          },
          drawGraph: function () {
            var e = this,
              c = this.options,
              b = (this.gappedPath || this.getGraphPath).call(this),
              a = this.chart.styledMode,
              d = [["graph", "highcharts-graph"]];
            a || d[0].push(c.lineColor || this.color || "#cccccc", c.dashStyle);
            d = e.getZonesGraphs(d);
            d.forEach(function (d, g) {
              var h = d[0],
                f = e[h],
                k = f ? "animate" : "attr";
              f
                ? ((f.endX = e.preventGraphAnimation ? null : b.xMap),
                  f.animate({ d: b }))
                : b.length &&
                  (e[h] = f = e.chart.renderer
                    .path(b)
                    .addClass(d[1])
                    .attr({ zIndex: 1 })
                    .add(e.group));
              f &&
                !a &&
                ((h = {
                  stroke: d[2],
                  "stroke-width": c.lineWidth,
                  fill: (e.fillGraph && e.color) || "none",
                }),
                d[3]
                  ? (h.dashstyle = d[3])
                  : "square" !== c.linecap &&
                    (h["stroke-linecap"] = h["stroke-linejoin"] = "round"),
                f[k](h).shadow(2 > g && c.shadow));
              f && ((f.startX = b.xMap), (f.isArea = b.isArea));
            });
          },
          getZonesGraphs: function (a) {
            this.zones.forEach(function (c, b) {
              b = [
                "zone-graph-" + b,
                "highcharts-graph highcharts-zone-graph-" +
                  b +
                  " " +
                  (c.className || ""),
              ];
              this.chart.styledMode ||
                b.push(
                  c.color || this.color,
                  c.dashStyle || this.options.dashStyle
                );
              a.push(b);
            }, this);
            return a;
          },
          applyZones: function () {
            var a = this,
              c = this.chart,
              b = c.renderer,
              d = this.zones,
              g,
              h,
              f = this.clips || [],
              k,
              l = this.graph,
              m = this.area,
              p = Math.max(c.chartWidth, c.chartHeight),
              r = this[(this.zoneAxis || "y") + "Axis"],
              t = c.inverted,
              B,
              n,
              x,
              F = !1,
              u,
              M;
            if (d.length && (l || m) && r && "undefined" !== typeof r.min) {
              var v = r.reversed;
              var I = r.horiz;
              l && !this.showLine && l.hide();
              m && m.hide();
              var E = r.getExtremes();
              d.forEach(function (e, d) {
                g = v ? (I ? c.plotWidth : 0) : I ? 0 : r.toPixels(E.min) || 0;
                g = q(A(h, g), 0, p);
                h = q(Math.round(r.toPixels(A(e.value, E.max), !0) || 0), 0, p);
                F && (g = h = r.toPixels(E.max));
                B = Math.abs(g - h);
                n = Math.min(g, h);
                x = Math.max(g, h);
                r.isXAxis
                  ? ((k = { x: t ? x : n, y: 0, width: B, height: p }),
                    I || (k.x = c.plotHeight - k.x))
                  : ((k = { x: 0, y: t ? x : n, width: p, height: B }),
                    I && (k.y = c.plotWidth - k.y));
                t &&
                  b.isVML &&
                  (k = r.isXAxis
                    ? {
                        x: 0,
                        y: v ? n : x,
                        height: k.width,
                        width: c.chartWidth,
                      }
                    : {
                        x: k.y - c.plotLeft - c.spacingBox.x,
                        y: 0,
                        width: k.height,
                        height: c.chartHeight,
                      });
                f[d] ? f[d].animate(k) : (f[d] = b.clipRect(k));
                u = a["zone-area-" + d];
                M = a["zone-graph-" + d];
                l && M && M.clip(f[d]);
                m && u && u.clip(f[d]);
                F = e.value > E.max;
                a.resetZones && 0 === h && (h = void 0);
              });
              this.clips = f;
            } else a.visible && (l && l.show(!0), m && m.show(!0));
          },
          invertGroups: function (a) {
            function c() {
              ["group", "markerGroup"].forEach(function (c) {
                b[c] &&
                  (e.renderer.isVML &&
                    b[c].attr({ width: b.yAxis.len, height: b.xAxis.len }),
                  (b[c].width = b.yAxis.len),
                  (b[c].height = b.xAxis.len),
                  b[c].invert(b.isRadialSeries ? !1 : a));
              });
            }
            var b = this,
              e = b.chart;
            b.xAxis &&
              (b.eventsToUnbind.push(J(e, "resize", c)),
              c(),
              (b.invertGroups = c));
          },
          plotGroup: function (a, c, b, d, g) {
            var e = this[a],
              h = !e;
            b = { visibility: b, zIndex: d || 0.1 };
            "undefined" === typeof this.opacity ||
              this.chart.styledMode ||
              "inactive" === this.state ||
              (b.opacity = this.opacity);
            h && (this[a] = e = this.chart.renderer.g().add(g));
            e.addClass(
              "highcharts-" +
                c +
                " highcharts-series-" +
                this.index +
                " highcharts-" +
                this.type +
                "-series " +
                (E(this.colorIndex)
                  ? "highcharts-color-" + this.colorIndex + " "
                  : "") +
                (this.options.className || "") +
                (e.hasClass("highcharts-tracker") ? " highcharts-tracker" : ""),
              !0
            );
            e.attr(b)[h ? "attr" : "animate"](this.getPlotBox());
            return e;
          },
          getPlotBox: function () {
            var a = this.chart,
              c = this.xAxis,
              b = this.yAxis;
            a.inverted && ((c = b), (b = this.xAxis));
            return {
              translateX: c ? c.left : a.plotLeft,
              translateY: b ? b.top : a.plotTop,
              scaleX: 1,
              scaleY: 1,
            };
          },
          removeEvents: function (a) {
            a
              ? this.eventsToUnbind.length &&
                (this.eventsToUnbind.forEach(function (c) {
                  c();
                }),
                (this.eventsToUnbind.length = 0))
              : N(this);
          },
          render: function () {
            var a = this,
              c = a.chart,
              b = a.options,
              d = H(b.animation),
              g = !a.finishedAnimating && c.renderer.isSVG && d.duration,
              h = a.visible ? "inherit" : "hidden",
              f = b.zIndex,
              k = a.hasRendered,
              l = c.seriesGroup,
              p = c.inverted;
            m(this, "render");
            var r = a.plotGroup("group", "series", h, f, l);
            a.markerGroup = a.plotGroup("markerGroup", "markers", h, f, l);
            g && a.animate && a.animate(!0);
            r.inverted = a.isCartesian || a.invertable ? p : !1;
            a.drawGraph && (a.drawGraph(), a.applyZones());
            a.visible && a.drawPoints();
            a.drawDataLabels && a.drawDataLabels();
            a.redrawPoints && a.redrawPoints();
            a.drawTracker &&
              !1 !== a.options.enableMouseTracking &&
              a.drawTracker();
            a.invertGroups(p);
            !1 === b.clip || a.sharedClipKey || k || r.clip(c.clipRect);
            g && a.animate && a.animate();
            k ||
              (g && d.defer && (g += d.defer),
              (a.animationTimeout = M(function () {
                a.afterAnimate();
              }, g || 0)));
            a.isDirty = !1;
            a.hasRendered = !0;
            m(a, "afterRender");
          },
          redraw: function () {
            var a = this.chart,
              c = this.isDirty || this.isDirtyData,
              b = this.group,
              d = this.xAxis,
              g = this.yAxis;
            b &&
              (a.inverted &&
                b.attr({ width: a.plotWidth, height: a.plotHeight }),
              b.animate({
                translateX: A(d && d.left, a.plotLeft),
                translateY: A(g && g.top, a.plotTop),
              }));
            this.translate();
            this.render();
            c && delete this.kdTree;
          },
          kdAxisArray: ["clientX", "plotY"],
          searchPoint: function (a, c) {
            var b = this.xAxis,
              d = this.yAxis,
              e = this.chart.inverted;
            return this.searchKDTree(
              {
                clientX: e ? b.len - a.chartY + b.pos : a.chartX - b.pos,
                plotY: e ? d.len - a.chartX + d.pos : a.chartY - d.pos,
              },
              c,
              a
            );
          },
          buildKDTree: function (a) {
            function c(a, d, e) {
              var g;
              if ((g = a && a.length)) {
                var h = b.kdAxisArray[d % e];
                a.sort(function (b, c) {
                  return b[h] - c[h];
                });
                g = Math.floor(g / 2);
                return {
                  point: a[g],
                  left: c(a.slice(0, g), d + 1, e),
                  right: c(a.slice(g + 1), d + 1, e),
                };
              }
            }
            this.buildingKdTree = !0;
            var b = this,
              d = -1 < b.options.findNearestPointBy.indexOf("y") ? 2 : 1;
            delete b.kdTree;
            M(
              function () {
                b.kdTree = c(b.getValidPoints(null, !b.directTouch), d, d);
                b.buildingKdTree = !1;
              },
              b.options.kdNow || (a && "touchstart" === a.type) ? 0 : 1
            );
          },
          searchKDTree: function (a, c, b) {
            function d(b, c, a, k) {
              var l = c.point,
                m = e.kdAxisArray[a % k],
                p = l;
              var r = E(b[g]) && E(l[g]) ? Math.pow(b[g] - l[g], 2) : null;
              var t = E(b[h]) && E(l[h]) ? Math.pow(b[h] - l[h], 2) : null;
              t = (r || 0) + (t || 0);
              l.dist = E(t) ? Math.sqrt(t) : Number.MAX_VALUE;
              l.distX = E(r) ? Math.sqrt(r) : Number.MAX_VALUE;
              m = b[m] - l[m];
              t = 0 > m ? "left" : "right";
              r = 0 > m ? "right" : "left";
              c[t] && ((t = d(b, c[t], a + 1, k)), (p = t[f] < p[f] ? t : l));
              c[r] &&
                Math.sqrt(m * m) < p[f] &&
                ((b = d(b, c[r], a + 1, k)), (p = b[f] < p[f] ? b : p));
              return p;
            }
            var e = this,
              g = this.kdAxisArray[0],
              h = this.kdAxisArray[1],
              f = c ? "distX" : "dist";
            c = -1 < e.options.findNearestPointBy.indexOf("y") ? 2 : 1;
            this.kdTree || this.buildingKdTree || this.buildKDTree(b);
            if (this.kdTree) return d(a, this.kdTree, c, c);
          },
          pointPlacementToXValue: function () {
            var a = this.options,
              c = a.pointRange,
              b = this.xAxis;
            a = a.pointPlacement;
            "between" === a && (a = b.reversed ? -0.5 : 0.5);
            return g(a) ? a * A(c, b.pointRange) : 0;
          },
          isPointInside: function (a) {
            return (
              "undefined" !== typeof a.plotY &&
              "undefined" !== typeof a.plotX &&
              0 <= a.plotY &&
              a.plotY <= this.yAxis.len &&
              0 <= a.plotX &&
              a.plotX <= this.xAxis.len
            );
          },
        }
      );
      ("");
    }
  );
  O(
    n,
    "Extensions/Stacking.js",
    [
      n["Core/Axis/Axis.js"],
      n["Core/Chart/Chart.js"],
      n["Core/Globals.js"],
      n["Core/Axis/StackingAxis.js"],
      n["Core/Utilities.js"],
    ],
    function (f, a, n, y, D) {
      var G = D.correctFloat,
        C = D.defined,
        J = D.destroyObjectProperties,
        H = D.format,
        v = D.isNumber,
        L = D.pick;
      ("");
      var q = n.Series,
        K = (function () {
          function a(a, f, n, q, m) {
            var h = a.chart.inverted;
            this.axis = a;
            this.isNegative = n;
            this.options = f = f || {};
            this.x = q;
            this.total = null;
            this.points = {};
            this.hasValidPoints = !1;
            this.stack = m;
            this.rightCliff = this.leftCliff = 0;
            this.alignOptions = {
              align: f.align || (h ? (n ? "left" : "right") : "center"),
              verticalAlign:
                f.verticalAlign || (h ? "middle" : n ? "bottom" : "top"),
              y: f.y,
              x: f.x,
            };
            this.textAlign =
              f.textAlign || (h ? (n ? "right" : "left") : "center");
          }
          a.prototype.destroy = function () {
            J(this, this.axis);
          };
          a.prototype.render = function (a) {
            var f = this.axis.chart,
              p = this.options,
              n = p.format;
            n = n ? H(n, this, f) : p.formatter.call(this);
            this.label
              ? this.label.attr({ text: n, visibility: "hidden" })
              : ((this.label = f.renderer.label(
                  n,
                  null,
                  null,
                  p.shape,
                  null,
                  null,
                  p.useHTML,
                  !1,
                  "stack-labels"
                )),
                (n = {
                  r: p.borderRadius || 0,
                  text: n,
                  rotation: p.rotation,
                  padding: L(p.padding, 5),
                  visibility: "hidden",
                }),
                f.styledMode ||
                  ((n.fill = p.backgroundColor),
                  (n.stroke = p.borderColor),
                  (n["stroke-width"] = p.borderWidth),
                  this.label.css(p.style)),
                this.label.attr(n),
                this.label.added || this.label.add(a));
            this.label.labelrank = f.plotHeight;
          };
          a.prototype.setOffset = function (a, f, n, u, m) {
            var h = this.axis,
              l = h.chart;
            u = h.translate(
              h.stacking.usePercentage ? 100 : u ? u : this.total,
              0,
              0,
              0,
              1
            );
            n = h.translate(n ? n : 0);
            n = C(u) && Math.abs(u - n);
            a = L(m, l.xAxis[0].translate(this.x)) + a;
            h = C(u) && this.getStackBox(l, this, a, u, f, n, h);
            f = this.label;
            n = this.isNegative;
            a = "justify" === L(this.options.overflow, "justify");
            var k = this.textAlign;
            f &&
              h &&
              ((m = f.getBBox()),
              (u = f.padding),
              (k =
                "left" === k
                  ? l.inverted
                    ? -u
                    : u
                  : "right" === k
                  ? m.width
                  : l.inverted && "center" === k
                  ? m.width / 2
                  : l.inverted
                  ? n
                    ? m.width + u
                    : -u
                  : m.width / 2),
              (n = l.inverted ? m.height / 2 : n ? -u : m.height),
              (this.alignOptions.x = L(this.options.x, 0)),
              (this.alignOptions.y = L(this.options.y, 0)),
              (h.x -= k),
              (h.y -= n),
              f.align(this.alignOptions, null, h),
              l.isInsidePlot(
                f.alignAttr.x + k - this.alignOptions.x,
                f.alignAttr.y + n - this.alignOptions.y
              )
                ? f.show()
                : ((f.alignAttr.y = -9999), (a = !1)),
              a &&
                q.prototype.justifyDataLabel.call(
                  this.axis,
                  f,
                  this.alignOptions,
                  f.alignAttr,
                  m,
                  h
                ),
              f.attr({ x: f.alignAttr.x, y: f.alignAttr.y }),
              L(!a && this.options.crop, !0) &&
                ((l =
                  v(f.x) &&
                  v(f.y) &&
                  l.isInsidePlot(f.x - u + f.width, f.y) &&
                  l.isInsidePlot(f.x + u, f.y)) ||
                  f.hide()));
          };
          a.prototype.getStackBox = function (a, f, n, q, m, h, l) {
            var k = f.axis.reversed,
              g = a.inverted,
              d = l.height + l.pos - (g ? a.plotLeft : a.plotTop);
            f = (f.isNegative && !k) || (!f.isNegative && k);
            return {
              x: g
                ? f
                  ? q - l.right
                  : q - h + l.pos - a.plotLeft
                : n + a.xAxis[0].transB - a.plotLeft,
              y: g ? l.height - n - m : f ? d - q - h : d - q,
              width: g ? h : m,
              height: g ? m : h,
            };
          };
          return a;
        })();
      a.prototype.getStacks = function () {
        var a = this,
          f = a.inverted;
        a.yAxis.forEach(function (a) {
          a.stacking &&
            a.stacking.stacks &&
            a.hasVisibleSeries &&
            (a.stacking.oldStacks = a.stacking.stacks);
        });
        a.series.forEach(function (p) {
          var n = (p.xAxis && p.xAxis.options) || {};
          !p.options.stacking ||
            (!0 !== p.visible && !1 !== a.options.chart.ignoreHiddenSeries) ||
            (p.stackKey = [
              p.type,
              L(p.options.stack, ""),
              f ? n.top : n.left,
              f ? n.height : n.width,
            ].join());
        });
      };
      y.compose(f);
      q.prototype.setGroupedPoints = function () {
        this.options.centerInCategory &&
          (this.is("column") || this.is("columnrange")) &&
          !this.options.stacking &&
          1 < this.chart.series.length &&
          q.prototype.setStackedPoints.call(this, "group");
      };
      q.prototype.setStackedPoints = function (a) {
        var f = a || this.options.stacking;
        if (
          f &&
          (!0 === this.visible ||
            !1 === this.chart.options.chart.ignoreHiddenSeries)
        ) {
          var n = this.processedXData,
            q = this.processedYData,
            u = [],
            m = q.length,
            h = this.options,
            l = h.threshold,
            k = L(h.startFromThreshold && l, 0);
          h = h.stack;
          a = a ? this.type + "," + f : this.stackKey;
          var g = "-" + a,
            d = this.negStacks,
            x = this.yAxis,
            r = x.stacking.stacks,
            A = x.stacking.oldStacks,
            v,
            B;
          x.stacking.stacksTouched += 1;
          for (B = 0; B < m; B++) {
            var M = n[B];
            var E = q[B];
            var F = this.getStackIndicator(F, M, this.index);
            var e = F.key;
            var c = (v = d && E < (k ? 0 : l)) ? g : a;
            r[c] || (r[c] = {});
            r[c][M] ||
              (A[c] && A[c][M]
                ? ((r[c][M] = A[c][M]), (r[c][M].total = null))
                : (r[c][M] = new K(x, x.options.stackLabels, v, M, h)));
            c = r[c][M];
            null !== E
              ? ((c.points[e] = c.points[this.index] = [L(c.cumulative, k)]),
                C(c.cumulative) || (c.base = e),
                (c.touched = x.stacking.stacksTouched),
                0 < F.index &&
                  !1 === this.singleStacks &&
                  (c.points[e][0] = c.points[this.index + "," + M + ",0"][0]))
              : (c.points[e] = c.points[this.index] = null);
            "percent" === f
              ? ((v = v ? a : g),
                d && r[v] && r[v][M]
                  ? ((v = r[v][M]),
                    (c.total = v.total =
                      Math.max(v.total, c.total) + Math.abs(E) || 0))
                  : (c.total = G(c.total + (Math.abs(E) || 0))))
              : "group" === f
              ? null !== E && (c.total = (c.total || 0) + 1)
              : (c.total = G(c.total + (E || 0)));
            c.cumulative =
              "group" === f
                ? (c.total || 1) - 1
                : L(c.cumulative, k) + (E || 0);
            null !== E &&
              (c.points[e].push(c.cumulative),
              (u[B] = c.cumulative),
              (c.hasValidPoints = !0));
          }
          "percent" === f && (x.stacking.usePercentage = !0);
          "group" !== f && (this.stackedYData = u);
          x.stacking.oldStacks = {};
        }
      };
      q.prototype.modifyStacks = function () {
        var a = this,
          f = a.stackKey,
          n = a.yAxis.stacking.stacks,
          q = a.processedXData,
          v,
          m = a.options.stacking;
        a[m + "Stacker"] &&
          [f, "-" + f].forEach(function (h) {
            for (var f = q.length, k, g; f--; )
              if (
                ((k = q[f]),
                (v = a.getStackIndicator(v, k, a.index, h)),
                (g = (k = n[h] && n[h][k]) && k.points[v.key]))
              )
                a[m + "Stacker"](g, k, f);
          });
      };
      q.prototype.percentStacker = function (a, f, n) {
        f = f.total ? 100 / f.total : 0;
        a[0] = G(a[0] * f);
        a[1] = G(a[1] * f);
        this.stackedYData[n] = a[1];
      };
      q.prototype.getStackIndicator = function (a, f, n, q) {
        !C(a) || a.x !== f || (q && a.key !== q)
          ? (a = { x: f, index: 0, key: q })
          : a.index++;
        a.key = [n, f, a.index].join();
        return a;
      };
      n.StackItem = K;
      return n.StackItem;
    }
  );
  O(
    n,
    "Core/Dynamics.js",
    [
      n["Core/Axis/Axis.js"],
      n["Core/Chart/Chart.js"],
      n["Core/Globals.js"],
      n["Core/Options.js"],
      n["Core/Series/Point.js"],
      n["Core/Time.js"],
      n["Core/Utilities.js"],
    ],
    function (f, a, n, y, D, G, C) {
      var J = y.time,
        H = C.addEvent,
        v = C.animate,
        L = C.createElement,
        q = C.css,
        K = C.defined,
        E = C.erase,
        p = C.error,
        t = C.extend,
        I = C.fireEvent,
        u = C.isArray,
        m = C.isNumber,
        h = C.isObject,
        l = C.isString,
        k = C.merge,
        g = C.objectEach,
        d = C.pick,
        x = C.relativeLength,
        r = C.setAnimation,
        A = C.splat;
      y = n.Series;
      var N = n.seriesTypes;
      n.cleanRecursively = function (a, d) {
        var f = {};
        g(a, function (g, e) {
          if (h(a[e], !0) && !a.nodeType && d[e])
            (g = n.cleanRecursively(a[e], d[e])),
              Object.keys(g).length && (f[e] = g);
          else if (h(a[e]) || a[e] !== d[e]) f[e] = a[e];
        });
        return f;
      };
      t(a.prototype, {
        addSeries: function (a, g, h) {
          var f,
            e = this;
          a &&
            ((g = d(g, !0)),
            I(e, "addSeries", { options: a }, function () {
              f = e.initSeries(a);
              e.isDirtyLegend = !0;
              e.linkSeries();
              f.enabledDataSorting && f.setData(a.data, !1);
              I(e, "afterAddSeries", { series: f });
              g && e.redraw(h);
            }));
          return f;
        },
        addAxis: function (a, d, g, h) {
          return this.createAxis(d ? "xAxis" : "yAxis", {
            axis: a,
            redraw: g,
            animation: h,
          });
        },
        addColorAxis: function (a, d, g) {
          return this.createAxis("colorAxis", {
            axis: a,
            redraw: d,
            animation: g,
          });
        },
        createAxis: function (a, g) {
          var h = this.options,
            l = "colorAxis" === a,
            e = g.redraw,
            c = g.animation;
          g = k(g.axis, { index: this[a].length, isX: "xAxis" === a });
          var b = l ? new n.ColorAxis(this, g) : new f(this, g);
          h[a] = A(h[a] || {});
          h[a].push(g);
          l &&
            ((this.isDirtyLegend = !0),
            this.axes.forEach(function (b) {
              b.series = [];
            }),
            this.series.forEach(function (b) {
              b.bindAxes();
              b.isDirtyData = !0;
            }));
          d(e, !0) && this.redraw(c);
          return b;
        },
        showLoading: function (a) {
          var g = this,
            h = g.options,
            f = g.loadingDiv,
            e = h.loading,
            c = function () {
              f &&
                q(f, {
                  left: g.plotLeft + "px",
                  top: g.plotTop + "px",
                  width: g.plotWidth + "px",
                  height: g.plotHeight + "px",
                });
            };
          f ||
            ((g.loadingDiv = f = L(
              "div",
              { className: "highcharts-loading highcharts-loading-hidden" },
              null,
              g.container
            )),
            (g.loadingSpan = L(
              "span",
              { className: "highcharts-loading-inner" },
              null,
              f
            )),
            H(g, "redraw", c));
          f.className = "highcharts-loading";
          g.loadingSpan.innerHTML = d(a, h.lang.loading, "");
          g.styledMode ||
            (q(f, t(e.style, { zIndex: 10 })),
            q(g.loadingSpan, e.labelStyle),
            g.loadingShown ||
              (q(f, { opacity: 0, display: "" }),
              v(
                f,
                { opacity: e.style.opacity || 0.5 },
                { duration: e.showDuration || 0 }
              )));
          g.loadingShown = !0;
          c();
        },
        hideLoading: function () {
          var a = this.options,
            d = this.loadingDiv;
          d &&
            ((d.className = "highcharts-loading highcharts-loading-hidden"),
            this.styledMode ||
              v(
                d,
                { opacity: 0 },
                {
                  duration: a.loading.hideDuration || 100,
                  complete: function () {
                    q(d, { display: "none" });
                  },
                }
              ));
          this.loadingShown = !1;
        },
        propsRequireDirtyBox: "backgroundColor borderColor borderWidth borderRadius plotBackgroundColor plotBackgroundImage plotBorderColor plotBorderWidth plotShadow shadow".split(
          " "
        ),
        propsRequireReflow: "margin marginTop marginRight marginBottom marginLeft spacing spacingTop spacingRight spacingBottom spacingLeft".split(
          " "
        ),
        propsRequireUpdateSeries: "chart.inverted chart.polar chart.ignoreHiddenSeries chart.type colors plotOptions time tooltip".split(
          " "
        ),
        collectionsWithUpdate: ["xAxis", "yAxis", "zAxis", "series"],
        update: function (a, h, f, p) {
          var e = this,
            c = {
              credits: "addCredits",
              title: "setTitle",
              subtitle: "setSubtitle",
              caption: "setCaption",
            },
            b,
            r,
            q,
            t = a.isResponsiveOptions,
            B = [];
          I(e, "update", { options: a });
          t || e.setResponsive(!1, !0);
          a = n.cleanRecursively(a, e.options);
          k(!0, e.userOptions, a);
          if ((b = a.chart)) {
            k(!0, e.options.chart, b);
            "className" in b && e.setClassName(b.className);
            "reflow" in b && e.setReflow(b.reflow);
            if ("inverted" in b || "polar" in b || "type" in b) {
              e.propFromSeries();
              var F = !0;
            }
            "alignTicks" in b && (F = !0);
            g(b, function (b, a) {
              -1 !== e.propsRequireUpdateSeries.indexOf("chart." + a) &&
                (r = !0);
              -1 !== e.propsRequireDirtyBox.indexOf(a) && (e.isDirtyBox = !0);
              -1 !== e.propsRequireReflow.indexOf(a) &&
                (t ? (e.isDirtyBox = !0) : (q = !0));
            });
            !e.styledMode && "style" in b && e.renderer.setStyle(b.style);
          }
          !e.styledMode && a.colors && (this.options.colors = a.colors);
          a.plotOptions && k(!0, this.options.plotOptions, a.plotOptions);
          a.time && this.time === J && (this.time = new G(a.time));
          g(a, function (b, a) {
            if (e[a] && "function" === typeof e[a].update) e[a].update(b, !1);
            else if ("function" === typeof e[c[a]]) e[c[a]](b);
            "chart" !== a &&
              -1 !== e.propsRequireUpdateSeries.indexOf(a) &&
              (r = !0);
          });
          this.collectionsWithUpdate.forEach(function (b) {
            if (a[b]) {
              if ("series" === b) {
                var c = [];
                e[b].forEach(function (b, a) {
                  b.options.isInternal || c.push(d(b.options.index, a));
                });
              }
              A(a[b]).forEach(function (a, d) {
                var g = K(a.id),
                  h;
                g && (h = e.get(a.id));
                h ||
                  ((h = e[b][c ? c[d] : d]) &&
                    g &&
                    K(h.options.id) &&
                    (h = void 0));
                h && h.coll === b && (h.update(a, !1), f && (h.touched = !0));
                !h &&
                  f &&
                  e.collectionsWithInit[b] &&
                  (e.collectionsWithInit[b][0].apply(
                    e,
                    [a].concat(e.collectionsWithInit[b][1] || []).concat([!1])
                  ).touched = !0);
              });
              f &&
                e[b].forEach(function (b) {
                  b.touched || b.options.isInternal
                    ? delete b.touched
                    : B.push(b);
                });
            }
          });
          B.forEach(function (b) {
            b.remove && b.remove(!1);
          });
          F &&
            e.axes.forEach(function (b) {
              b.update({}, !1);
            });
          r &&
            e.getSeriesOrderByLinks().forEach(function (b) {
              b.chart && b.update({}, !1);
            }, this);
          a.loading && k(!0, e.options.loading, a.loading);
          F = b && b.width;
          b = b && b.height;
          l(b) && (b = x(b, F || e.chartWidth));
          q || (m(F) && F !== e.chartWidth) || (m(b) && b !== e.chartHeight)
            ? e.setSize(F, b, p)
            : d(h, !0) && e.redraw(p);
          I(e, "afterUpdate", { options: a, redraw: h, animation: p });
        },
        setSubtitle: function (a, d) {
          this.applyDescription("subtitle", a);
          this.layOutTitles(d);
        },
        setCaption: function (a, d) {
          this.applyDescription("caption", a);
          this.layOutTitles(d);
        },
      });
      a.prototype.collectionsWithInit = {
        xAxis: [a.prototype.addAxis, [!0]],
        yAxis: [a.prototype.addAxis, [!1]],
        series: [a.prototype.addSeries],
      };
      t(D.prototype, {
        update: function (a, g, f, k) {
          function e() {
            c.applyOptions(a);
            var e = l && c.hasDummyGraphic;
            e = null === c.y ? !e : e;
            l && e && ((c.graphic = l.destroy()), delete c.hasDummyGraphic);
            h(a, !0) &&
              (l &&
                l.element &&
                a &&
                a.marker &&
                "undefined" !== typeof a.marker.symbol &&
                (c.graphic = l.destroy()),
              a &&
                a.dataLabels &&
                c.dataLabel &&
                (c.dataLabel = c.dataLabel.destroy()),
              c.connector && (c.connector = c.connector.destroy()));
            m = c.index;
            b.updateParallelArrays(c, m);
            r.data[m] =
              h(r.data[m], !0) || h(a, !0) ? c.options : d(a, r.data[m]);
            b.isDirty = b.isDirtyData = !0;
            !b.fixedBox && b.hasCartesianSeries && (p.isDirtyBox = !0);
            "point" === r.legendType && (p.isDirtyLegend = !0);
            g && p.redraw(f);
          }
          var c = this,
            b = c.series,
            l = c.graphic,
            m,
            p = b.chart,
            r = b.options;
          g = d(g, !0);
          !1 === k ? e() : c.firePointEvent("update", { options: a }, e);
        },
        remove: function (a, d) {
          this.series.removePoint(this.series.data.indexOf(this), a, d);
        },
      });
      t(y.prototype, {
        addPoint: function (a, g, h, f, e) {
          var c = this.options,
            b = this.data,
            k = this.chart,
            l = this.xAxis;
          l = l && l.hasNames && l.names;
          var m = c.data,
            p = this.xData,
            r;
          g = d(g, !0);
          var n = { series: this };
          this.pointClass.prototype.applyOptions.apply(n, [a]);
          var q = n.x;
          var t = p.length;
          if (this.requireSorting && q < p[t - 1])
            for (r = !0; t && p[t - 1] > q; ) t--;
          this.updateParallelArrays(n, "splice", t, 0, 0);
          this.updateParallelArrays(n, t);
          l && n.name && (l[q] = n.name);
          m.splice(t, 0, a);
          r && (this.data.splice(t, 0, null), this.processData());
          "point" === c.legendType && this.generatePoints();
          h &&
            (b[0] && b[0].remove
              ? b[0].remove(!1)
              : (b.shift(), this.updateParallelArrays(n, "shift"), m.shift()));
          !1 !== e && I(this, "addPoint", { point: n });
          this.isDirtyData = this.isDirty = !0;
          g && k.redraw(f);
        },
        removePoint: function (a, g, h) {
          var f = this,
            e = f.data,
            c = e[a],
            b = f.points,
            k = f.chart,
            l = function () {
              b && b.length === e.length && b.splice(a, 1);
              e.splice(a, 1);
              f.options.data.splice(a, 1);
              f.updateParallelArrays(c || { series: f }, "splice", a, 1);
              c && c.destroy();
              f.isDirty = !0;
              f.isDirtyData = !0;
              g && k.redraw();
            };
          r(h, k);
          g = d(g, !0);
          c ? c.firePointEvent("remove", null, l) : l();
        },
        remove: function (a, g, h, f) {
          function e() {
            c.destroy(f);
            c.remove = null;
            b.isDirtyLegend = b.isDirtyBox = !0;
            b.linkSeries();
            d(a, !0) && b.redraw(g);
          }
          var c = this,
            b = c.chart;
          !1 !== h ? I(c, "remove", null, e) : e();
        },
        update: function (a, g) {
          a = n.cleanRecursively(a, this.userOptions);
          I(this, "update", { options: a });
          var h = this,
            f = h.chart,
            e = h.userOptions,
            c = h.initialType || h.type,
            b = a.type || e.type || f.options.chart.type,
            l = !(
              this.hasDerivedData ||
              a.dataGrouping ||
              (b && b !== this.type) ||
              "undefined" !== typeof a.pointStart ||
              a.pointInterval ||
              a.pointIntervalUnit ||
              a.keys
            ),
            m = N[c].prototype,
            r,
            q = ["eventOptions", "navigatorSeries", "baseSeries"],
            x = h.finishedAnimating && { animation: !1 },
            B = {};
          l &&
            (q.push(
              "data",
              "isDirtyData",
              "points",
              "processedXData",
              "processedYData",
              "xIncrement",
              "cropped",
              "_hasPointMarkers",
              "_hasPointLabels",
              "mapMap",
              "mapData",
              "minY",
              "maxY",
              "minX",
              "maxX"
            ),
            !1 !== a.visible && q.push("area", "graph"),
            h.parallelArrays.forEach(function (b) {
              q.push(b + "Data");
            }),
            a.data &&
              (a.dataSorting && t(h.options.dataSorting, a.dataSorting),
              this.setData(a.data, !1)));
          a = k(
            e,
            x,
            {
              index: "undefined" === typeof e.index ? h.index : e.index,
              pointStart: d(e.pointStart, h.xData[0]),
            },
            !l && { data: h.options.data },
            a
          );
          l && a.data && (a.data = h.options.data);
          q = [
            "group",
            "markerGroup",
            "dataLabelsGroup",
            "transformGroup",
          ].concat(q);
          q.forEach(function (b) {
            q[b] = h[b];
            delete h[b];
          });
          h.remove(!1, null, !1, !0);
          for (r in m) h[r] = void 0;
          N[b || c]
            ? t(h, N[b || c].prototype)
            : p(17, !0, f, { missingModuleFor: b || c });
          q.forEach(function (b) {
            h[b] = q[b];
          });
          h.init(f, a);
          if (l && this.points) {
            var A = h.options;
            !1 === A.visible
              ? ((B.graphic = 1), (B.dataLabel = 1))
              : h._hasPointLabels ||
                ((a = A.marker),
                (e = A.dataLabels),
                a && (!1 === a.enabled || "symbol" in a) && (B.graphic = 1),
                e && !1 === e.enabled && (B.dataLabel = 1));
            this.points.forEach(function (b) {
              b &&
                b.series &&
                (b.resolveColor(),
                Object.keys(B).length && b.destroyElements(B),
                !1 === A.showInLegend &&
                  b.legendItem &&
                  f.legend.destroyItem(b));
            }, this);
          }
          h.initialType = c;
          f.linkSeries();
          I(this, "afterUpdate");
          d(g, !0) && f.redraw(l ? void 0 : !1);
        },
        setName: function (a) {
          this.name = this.options.name = this.userOptions.name = a;
          this.chart.isDirtyLegend = !0;
        },
      });
      t(f.prototype, {
        update: function (a, h) {
          var f = this.chart,
            l = (a && a.events) || {};
          a = k(this.userOptions, a);
          f.options[this.coll].indexOf &&
            (f.options[this.coll][
              f.options[this.coll].indexOf(this.userOptions)
            ] = a);
          g(f.options[this.coll].events, function (a, c) {
            "undefined" === typeof l[c] && (l[c] = void 0);
          });
          this.destroy(!0);
          this.init(f, t(a, { events: l }));
          f.isDirtyBox = !0;
          d(h, !0) && f.redraw();
        },
        remove: function (a) {
          for (
            var g = this.chart, h = this.coll, f = this.series, e = f.length;
            e--;

          )
            f[e] && f[e].remove(!1);
          E(g.axes, this);
          E(g[h], this);
          u(g.options[h])
            ? g.options[h].splice(this.options.index, 1)
            : delete g.options[h];
          g[h].forEach(function (a, b) {
            a.options.index = a.userOptions.index = b;
          });
          this.destroy();
          g.isDirtyBox = !0;
          d(a, !0) && g.redraw();
        },
        setTitle: function (a, d) {
          this.update({ title: a }, d);
        },
        setCategories: function (a, d) {
          this.update({ categories: a }, d);
        },
      });
    }
  );
  O(
    n,
    "Series/AreaSeries.js",
    [
      n["Core/Globals.js"],
      n["Core/Color.js"],
      n["Mixins/LegendSymbol.js"],
      n["Core/Utilities.js"],
    ],
    function (f, a, n, y) {
      var D = a.parse,
        G = y.objectEach,
        C = y.pick;
      a = y.seriesType;
      var J = f.Series;
      a(
        "area",
        "line",
        { threshold: 0 },
        {
          singleStacks: !1,
          getStackPoints: function (a) {
            var f = [],
              n = [],
              q = this.xAxis,
              H = this.yAxis,
              E = H.stacking.stacks[this.stackKey],
              p = {},
              t = this.index,
              I = H.series,
              u = I.length,
              m = C(H.options.reversedStacks, !0) ? 1 : -1,
              h;
            a = a || this.points;
            if (this.options.stacking) {
              for (h = 0; h < a.length; h++)
                (a[h].leftNull = a[h].rightNull = void 0), (p[a[h].x] = a[h]);
              G(E, function (a, g) {
                null !== a.total && n.push(g);
              });
              n.sort(function (a, g) {
                return a - g;
              });
              var l = I.map(function (a) {
                return a.visible;
              });
              n.forEach(function (a, g) {
                var d = 0,
                  k,
                  r;
                if (p[a] && !p[a].isNull)
                  f.push(p[a]),
                    [-1, 1].forEach(function (d) {
                      var f = 1 === d ? "rightNull" : "leftNull",
                        q = 0,
                        x = E[n[g + d]];
                      if (x)
                        for (h = t; 0 <= h && h < u; )
                          (k = x.points[h]),
                            k ||
                              (h === t
                                ? (p[a][f] = !0)
                                : l[h] &&
                                  (r = E[a].points[h]) &&
                                  (q -= r[1] - r[0])),
                            (h += m);
                      p[a][1 === d ? "rightCliff" : "leftCliff"] = q;
                    });
                else {
                  for (h = t; 0 <= h && h < u; ) {
                    if ((k = E[a].points[h])) {
                      d = k[1];
                      break;
                    }
                    h += m;
                  }
                  d = H.translate(d, 0, 1, 0, 1);
                  f.push({
                    isNull: !0,
                    plotX: q.translate(a, 0, 0, 0, 1),
                    x: a,
                    plotY: d,
                    yBottom: d,
                  });
                }
              });
            }
            return f;
          },
          getGraphPath: function (a) {
            var f = J.prototype.getGraphPath,
              n = this.options,
              q = n.stacking,
              y = this.yAxis,
              E,
              p = [],
              t = [],
              I = this.index,
              u = y.stacking.stacks[this.stackKey],
              m = n.threshold,
              h = Math.round(y.getThreshold(n.threshold));
            n = C(n.connectNulls, "percent" === q);
            var l = function (d, f, k) {
              var l = a[d];
              d = q && u[l.x].points[I];
              var r = l[k + "Null"] || 0;
              k = l[k + "Cliff"] || 0;
              l = !0;
              if (k || r) {
                var n = (r ? d[0] : d[1]) + k;
                var x = d[0] + k;
                l = !!r;
              } else !q && a[f] && a[f].isNull && (n = x = m);
              "undefined" !== typeof n &&
                (t.push({
                  plotX: g,
                  plotY: null === n ? h : y.getThreshold(n),
                  isNull: l,
                  isCliff: !0,
                }),
                p.push({
                  plotX: g,
                  plotY: null === x ? h : y.getThreshold(x),
                  doCurve: !1,
                }));
            };
            a = a || this.points;
            q && (a = this.getStackPoints(a));
            for (E = 0; E < a.length; E++) {
              q ||
                (a[E].leftCliff = a[E].rightCliff = a[E].leftNull = a[
                  E
                ].rightNull = void 0);
              var k = a[E].isNull;
              var g = C(a[E].rectPlotX, a[E].plotX);
              var d = q ? a[E].yBottom : h;
              if (!k || n)
                n || l(E, E - 1, "left"),
                  (k && !q && n) ||
                    (t.push(a[E]), p.push({ x: E, plotX: g, plotY: d })),
                  n || l(E, E + 1, "right");
            }
            E = f.call(this, t, !0, !0);
            p.reversed = !0;
            k = f.call(this, p, !0, !0);
            (d = k[0]) && "M" === d[0] && (k[0] = ["L", d[1], d[2]]);
            k = E.concat(k);
            f = f.call(this, t, !1, n);
            k.xMap = E.xMap;
            this.areaPath = k;
            return f;
          },
          drawGraph: function () {
            this.areaPath = [];
            J.prototype.drawGraph.apply(this);
            var a = this,
              f = this.areaPath,
              n = this.options,
              q = [["area", "highcharts-area", this.color, n.fillColor]];
            this.zones.forEach(function (f, v) {
              q.push([
                "zone-area-" + v,
                "highcharts-area highcharts-zone-area-" + v + " " + f.className,
                f.color || a.color,
                f.fillColor || n.fillColor,
              ]);
            });
            q.forEach(function (q) {
              var v = q[0],
                p = a[v],
                t = p ? "animate" : "attr",
                I = {};
              p
                ? ((p.endX = a.preventGraphAnimation ? null : f.xMap),
                  p.animate({ d: f }))
                : ((I.zIndex = 0),
                  (p = a[v] = a.chart.renderer
                    .path(f)
                    .addClass(q[1])
                    .add(a.group)),
                  (p.isArea = !0));
              a.chart.styledMode ||
                (I.fill = C(
                  q[3],
                  D(q[2]).setOpacity(C(n.fillOpacity, 0.75)).get()
                ));
              p[t](I);
              p.startX = f.xMap;
              p.shiftUnit = n.step ? 2 : 1;
            });
          },
          drawLegendSymbol: n.drawRectangle,
        }
      );
      ("");
    }
  );
  O(n, "Series/SplineSeries.js", [n["Core/Utilities.js"]], function (f) {
    var a = f.pick;
    f = f.seriesType;
    f(
      "spline",
      "line",
      {},
      {
        getPointSpline: function (f, n, D) {
          var y = n.plotX || 0,
            C = n.plotY || 0,
            J = f[D - 1];
          D = f[D + 1];
          if (
            J &&
            !J.isNull &&
            !1 !== J.doCurve &&
            !n.isCliff &&
            D &&
            !D.isNull &&
            !1 !== D.doCurve &&
            !n.isCliff
          ) {
            f = J.plotY || 0;
            var H = D.plotX || 0;
            D = D.plotY || 0;
            var v = 0;
            var L = (1.5 * y + (J.plotX || 0)) / 2.5;
            var q = (1.5 * C + f) / 2.5;
            H = (1.5 * y + H) / 2.5;
            var K = (1.5 * C + D) / 2.5;
            H !== L && (v = ((K - q) * (H - y)) / (H - L) + C - K);
            q += v;
            K += v;
            q > f && q > C
              ? ((q = Math.max(f, C)), (K = 2 * C - q))
              : q < f && q < C && ((q = Math.min(f, C)), (K = 2 * C - q));
            K > D && K > C
              ? ((K = Math.max(D, C)), (q = 2 * C - K))
              : K < D && K < C && ((K = Math.min(D, C)), (q = 2 * C - K));
            n.rightContX = H;
            n.rightContY = K;
          }
          n = [
            "C",
            a(J.rightContX, J.plotX, 0),
            a(J.rightContY, J.plotY, 0),
            a(L, y, 0),
            a(q, C, 0),
            y,
            C,
          ];
          J.rightContX = J.rightContY = void 0;
          return n;
        },
      }
    );
    ("");
  });
  O(
    n,
    "Series/AreaSplineSeries.js",
    [
      n["Core/Globals.js"],
      n["Mixins/LegendSymbol.js"],
      n["Core/Options.js"],
      n["Core/Utilities.js"],
    ],
    function (f, a, n, y) {
      y = y.seriesType;
      f = f.seriesTypes.area.prototype;
      y("areaspline", "spline", n.defaultOptions.plotOptions.area, {
        getStackPoints: f.getStackPoints,
        getGraphPath: f.getGraphPath,
        drawGraph: f.drawGraph,
        drawLegendSymbol: a.drawRectangle,
      });
      ("");
    }
  );
  O(
    n,
    "Series/ColumnSeries.js",
    [
      n["Core/Globals.js"],
      n["Core/Color.js"],
      n["Mixins/LegendSymbol.js"],
      n["Core/Utilities.js"],
    ],
    function (f, a, n, y) {
      "";
      var D = a.parse,
        G = y.animObject,
        C = y.clamp,
        J = y.defined,
        H = y.extend,
        v = y.isNumber,
        L = y.merge,
        q = y.pick;
      a = y.seriesType;
      var K = y.objectEach,
        E = f.Series;
      a(
        "column",
        "line",
        {
          borderRadius: 0,
          centerInCategory: !1,
          groupPadding: 0.2,
          marker: null,
          pointPadding: 0.1,
          minPointLength: 0,
          cropThreshold: 50,
          pointRange: null,
          states: {
            hover: { halo: !1, brightness: 0.1 },
            select: { color: "#cccccc", borderColor: "#000000" },
          },
          dataLabels: { align: void 0, verticalAlign: void 0, y: void 0 },
          startFromThreshold: !0,
          stickyTracking: !1,
          tooltip: { distance: 6 },
          threshold: 0,
          borderColor: "#ffffff",
        },
        {
          cropShoulder: 0,
          directTouch: !0,
          trackerGroups: ["group", "dataLabelsGroup"],
          negStacks: !0,
          init: function () {
            E.prototype.init.apply(this, arguments);
            var a = this,
              f = a.chart;
            f.hasRendered &&
              f.series.forEach(function (f) {
                f.type === a.type && (f.isDirty = !0);
              });
          },
          getColumnMetrics: function () {
            var a = this,
              f = a.options,
              n = a.xAxis,
              v = a.yAxis,
              m = n.options.reversedStacks;
            m = (n.reversed && !m) || (!n.reversed && m);
            var h,
              l = {},
              k = 0;
            !1 === f.grouping
              ? (k = 1)
              : a.chart.series.forEach(function (d) {
                  var g = d.yAxis,
                    f = d.options;
                  if (
                    d.type === a.type &&
                    (d.visible || !a.chart.options.chart.ignoreHiddenSeries) &&
                    v.len === g.len &&
                    v.pos === g.pos
                  ) {
                    if (f.stacking && "group" !== f.stacking) {
                      h = d.stackKey;
                      "undefined" === typeof l[h] && (l[h] = k++);
                      var m = l[h];
                    } else !1 !== f.grouping && (m = k++);
                    d.columnIndex = m;
                  }
                });
            var g = Math.min(
                Math.abs(n.transA) *
                  ((n.ordinal && n.ordinal.slope) ||
                    f.pointRange ||
                    n.closestPointRange ||
                    n.tickInterval ||
                    1),
                n.len
              ),
              d = g * f.groupPadding,
              x = (g - 2 * d) / (k || 1);
            f = Math.min(
              f.maxPointWidth || n.len,
              q(f.pointWidth, x * (1 - 2 * f.pointPadding))
            );
            a.columnMetrics = {
              width: f,
              offset:
                (x - f) / 2 +
                (d + ((a.columnIndex || 0) + (m ? 1 : 0)) * x - g / 2) *
                  (m ? -1 : 1),
              paddedWidth: x,
              columnCount: k,
            };
            return a.columnMetrics;
          },
          crispCol: function (a, f, n, q) {
            var m = this.chart,
              h = this.borderWidth,
              l = -(h % 2 ? 0.5 : 0);
            h = h % 2 ? 0.5 : 1;
            m.inverted && m.renderer.isVML && (h += 1);
            this.options.crisp &&
              ((n = Math.round(a + n) + l), (a = Math.round(a) + l), (n -= a));
            q = Math.round(f + q) + h;
            l = 0.5 >= Math.abs(f) && 0.5 < q;
            f = Math.round(f) + h;
            q -= f;
            l && q && (--f, (q += 1));
            return { x: a, y: f, width: n, height: q };
          },
          adjustForMissingColumns: function (a, n, q, v) {
            var m = this,
              h = this.options.stacking;
            if (!q.isNull && 1 < v.columnCount) {
              var l = 0,
                k = 0;
              K(this.yAxis.stacking && this.yAxis.stacking.stacks, function (
                a
              ) {
                if ("number" === typeof q.x && (a = a[q.x.toString()])) {
                  var d = a.points[m.index],
                    g = a.total;
                  h
                    ? (d && (l = k), a.hasValidPoints && k++)
                    : f.isArray(d) && ((l = d[1]), (k = g || 0));
                }
              });
              a =
                (q.plotX || 0) +
                ((k - 1) * v.paddedWidth + n) / 2 -
                n -
                l * v.paddedWidth;
            }
            return a;
          },
          translate: function () {
            var a = this,
              f = a.chart,
              n = a.options,
              u = (a.dense = 2 > a.closestPointRange * a.xAxis.transA);
            u = a.borderWidth = q(n.borderWidth, u ? 0 : 1);
            var m = a.xAxis,
              h = a.yAxis,
              l = n.threshold,
              k = (a.translatedThreshold = h.getThreshold(l)),
              g = q(n.minPointLength, 5),
              d = a.getColumnMetrics(),
              x = d.width,
              r = (a.barW = Math.max(x, 1 + 2 * u)),
              A = (a.pointXOffset = d.offset),
              y = a.dataMin,
              B = a.dataMax;
            f.inverted && (k -= 0.5);
            n.pointPadding && (r = Math.ceil(r));
            E.prototype.translate.apply(a);
            a.points.forEach(function (p) {
              var t = q(p.yBottom, k),
                F = 999 + Math.abs(t),
                e = x,
                c = p.plotX || 0;
              F = C(p.plotY, -F, h.len + F);
              var b = c + A,
                u = r,
                w = Math.min(F, t),
                E = Math.max(F, t) - w;
              if (g && Math.abs(E) < g) {
                E = g;
                var M =
                  (!h.reversed && !p.negative) || (h.reversed && p.negative);
                v(l) &&
                  v(B) &&
                  p.y === l &&
                  B <= l &&
                  (h.min || 0) < l &&
                  y !== B &&
                  (M = !M);
                w = Math.abs(w - k) > g ? t - g : k - (M ? g : 0);
              }
              J(p.options.pointWidth) &&
                ((e = u = Math.ceil(p.options.pointWidth)),
                (b -= Math.round((e - x) / 2)));
              n.centerInCategory && (b = a.adjustForMissingColumns(b, e, p, d));
              p.barX = b;
              p.pointWidth = e;
              p.tooltipPos = f.inverted
                ? [
                    h.len + h.pos - f.plotLeft - F,
                    m.len + m.pos - f.plotTop - (c || 0) - A - u / 2,
                    E,
                  ]
                : [b + u / 2, F + h.pos - f.plotTop, E];
              p.shapeType = a.pointClass.prototype.shapeType || "rect";
              p.shapeArgs = a.crispCol.apply(
                a,
                p.isNull ? [b, k, u, 0] : [b, w, u, E]
              );
            });
          },
          getSymbol: f.noop,
          drawLegendSymbol: n.drawRectangle,
          drawGraph: function () {
            this.group[this.dense ? "addClass" : "removeClass"](
              "highcharts-dense-data"
            );
          },
          pointAttribs: function (a, f) {
            var p = this.options,
              n = this.pointAttrToOptions || {};
            var m = n.stroke || "borderColor";
            var h = n["stroke-width"] || "borderWidth",
              l = (a && a.color) || this.color,
              k = (a && a[m]) || p[m] || this.color || l,
              g = (a && a[h]) || p[h] || this[h] || 0;
            n = (a && a.options.dashStyle) || p.dashStyle;
            var d = q(a && a.opacity, p.opacity, 1);
            if (a && this.zones.length) {
              var x = a.getZone();
              l =
                a.options.color ||
                (x && (x.color || a.nonZonedColor)) ||
                this.color;
              x &&
                ((k = x.borderColor || k),
                (n = x.dashStyle || n),
                (g = x.borderWidth || g));
            }
            f &&
              a &&
              ((a = L(
                p.states[f],
                (a.options.states && a.options.states[f]) || {}
              )),
              (f = a.brightness),
              (l =
                a.color ||
                ("undefined" !== typeof f &&
                  D(l).brighten(a.brightness).get()) ||
                l),
              (k = a[m] || k),
              (g = a[h] || g),
              (n = a.dashStyle || n),
              (d = q(a.opacity, d)));
            m = { fill: l, stroke: k, "stroke-width": g, opacity: d };
            n && (m.dashstyle = n);
            return m;
          },
          drawPoints: function () {
            var a = this,
              f = this.chart,
              n = a.options,
              q = f.renderer,
              m = n.animationLimit || 250,
              h;
            a.points.forEach(function (l) {
              var k = l.graphic,
                g = !!k,
                d = k && f.pointCount < m ? "animate" : "attr";
              if (v(l.plotY) && null !== l.y) {
                h = l.shapeArgs;
                k && l.hasNewShapeType() && (k = k.destroy());
                a.enabledDataSorting &&
                  (l.startXPos = a.xAxis.reversed
                    ? -(h ? h.width : 0)
                    : a.xAxis.width);
                k ||
                  ((l.graphic = k = q[l.shapeType](h).add(
                    l.group || a.group
                  )) &&
                    a.enabledDataSorting &&
                    f.hasRendered &&
                    f.pointCount < m &&
                    (k.attr({ x: l.startXPos }), (g = !0), (d = "animate")));
                if (k && g) k[d](L(h));
                if (n.borderRadius) k[d]({ r: n.borderRadius });
                f.styledMode ||
                  k[d](a.pointAttribs(l, l.selected && "select")).shadow(
                    !1 !== l.allowShadow && n.shadow,
                    null,
                    n.stacking && !n.borderRadius
                  );
                k.addClass(l.getClassName(), !0);
              } else k && (l.graphic = k.destroy());
            });
          },
          animate: function (a) {
            var f = this,
              p = this.yAxis,
              n = f.options,
              m = this.chart.inverted,
              h = {},
              l = m ? "translateX" : "translateY";
            if (a)
              (h.scaleY = 0.001),
                (a = C(p.toPixels(n.threshold), p.pos, p.pos + p.len)),
                m ? (h.translateX = a - p.len) : (h.translateY = a),
                f.clipBox && f.setClip(),
                f.group.attr(h);
            else {
              var k = f.group.attr(l);
              f.group.animate(
                { scaleY: 1 },
                H(G(f.options.animation), {
                  step: function (a, d) {
                    f.group &&
                      ((h[l] = k + d.pos * (p.pos - k)), f.group.attr(h));
                  },
                })
              );
            }
          },
          remove: function () {
            var a = this,
              f = a.chart;
            f.hasRendered &&
              f.series.forEach(function (f) {
                f.type === a.type && (f.isDirty = !0);
              });
            E.prototype.remove.apply(a, arguments);
          },
        }
      );
      ("");
    }
  );
  O(n, "Series/BarSeries.js", [n["Core/Utilities.js"]], function (f) {
    f = f.seriesType;
    f("bar", "column", null, { inverted: !0 });
    ("");
  });
  O(
    n,
    "Series/ScatterSeries.js",
    [n["Core/Globals.js"], n["Core/Utilities.js"]],
    function (f, a) {
      var n = a.addEvent;
      a = a.seriesType;
      var y = f.Series;
      a(
        "scatter",
        "line",
        {
          lineWidth: 0,
          findNearestPointBy: "xy",
          jitter: { x: 0, y: 0 },
          marker: { enabled: !0 },
          tooltip: {
            headerFormat:
              '<span style="color:{point.color}">\u25cf</span> <span style="font-size: 10px"> {series.name}</span><br/>',
            pointFormat: "x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>",
          },
        },
        {
          sorted: !1,
          requireSorting: !1,
          noSharedTooltip: !0,
          trackerGroups: ["group", "markerGroup", "dataLabelsGroup"],
          takeOrdinalPosition: !1,
          drawGraph: function () {
            this.options.lineWidth && y.prototype.drawGraph.call(this);
          },
          applyJitter: function () {
            var a = this,
              f = this.options.jitter,
              n = this.points.length;
            f &&
              this.points.forEach(function (C, y) {
                ["x", "y"].forEach(function (v, D) {
                  var q = "plot" + v.toUpperCase();
                  if (f[v] && !C.isNull) {
                    var H = a[v + "Axis"];
                    var E = f[v] * H.transA;
                    if (H && !H.isLog) {
                      var p = Math.max(0, C[q] - E);
                      H = Math.min(H.len, C[q] + E);
                      D = 1e4 * Math.sin(y + D * n);
                      C[q] = p + (H - p) * (D - Math.floor(D));
                      "x" === v && (C.clientX = C.plotX);
                    }
                  }
                });
              });
          },
        }
      );
      n(y, "afterTranslate", function () {
        this.applyJitter && this.applyJitter();
      });
      ("");
    }
  );
  O(
    n,
    "Mixins/CenteredSeries.js",
    [n["Core/Globals.js"], n["Core/Utilities.js"]],
    function (f, a) {
      var n = a.isNumber,
        y = a.pick,
        D = a.relativeLength,
        G = f.deg2rad;
      return (f.CenteredSeriesMixin = {
        getCenter: function () {
          var a = this.options,
            n = this.chart,
            H = 2 * (a.slicedOffset || 0),
            v = n.plotWidth - 2 * H,
            G = n.plotHeight - 2 * H,
            q = a.center,
            K = Math.min(v, G),
            E = a.size,
            p = a.innerSize || 0;
          "string" === typeof E && (E = parseFloat(E));
          "string" === typeof p && (p = parseFloat(p));
          a = [
            y(q[0], "50%"),
            y(q[1], "50%"),
            y(E && 0 > E ? void 0 : a.size, "100%"),
            y(p && 0 > p ? void 0 : a.innerSize || 0, "0%"),
          ];
          !n.angular || this instanceof f.Series || (a[3] = 0);
          for (q = 0; 4 > q; ++q)
            (E = a[q]),
              (n = 2 > q || (2 === q && /%$/.test(E))),
              (a[q] = D(E, [v, G, K, a[2]][q]) + (n ? H : 0));
          a[3] > a[2] && (a[3] = a[2]);
          return a;
        },
        getStartAndEndRadians: function (a, f) {
          a = n(a) ? a : 0;
          f = n(f) && f > a && 360 > f - a ? f : a + 360;
          return { start: G * (a + -90), end: G * (f + -90) };
        },
      });
    }
  );
  O(
    n,
    "Series/PieSeries.js",
    [
      n["Core/Globals.js"],
      n["Core/Renderer/SVG/SVGRenderer.js"],
      n["Mixins/LegendSymbol.js"],
      n["Core/Series/Point.js"],
      n["Core/Utilities.js"],
      n["Mixins/CenteredSeries.js"],
    ],
    function (f, a, n, y, D, G) {
      var C = D.addEvent,
        J = D.clamp,
        H = D.defined,
        v = D.fireEvent,
        L = D.isNumber,
        q = D.merge,
        K = D.pick,
        E = D.relativeLength,
        p = D.seriesType,
        t = D.setAnimation,
        I = G.getStartAndEndRadians;
      D = f.noop;
      var u = f.Series;
      p(
        "pie",
        "line",
        {
          center: [null, null],
          clip: !1,
          colorByPoint: !0,
          dataLabels: {
            allowOverlap: !0,
            connectorPadding: 5,
            connectorShape: "fixedOffset",
            crookDistance: "70%",
            distance: 30,
            enabled: !0,
            formatter: function () {
              return this.point.isNull ? void 0 : this.point.name;
            },
            softConnector: !0,
            x: 0,
          },
          fillColor: void 0,
          ignoreHiddenPoint: !0,
          inactiveOtherPoints: !0,
          legendType: "point",
          marker: null,
          size: null,
          showInLegend: !1,
          slicedOffset: 10,
          stickyTracking: !1,
          tooltip: { followPointer: !0 },
          borderColor: "#ffffff",
          borderWidth: 1,
          lineWidth: void 0,
          states: { hover: { brightness: 0.1 } },
        },
        {
          isCartesian: !1,
          requireSorting: !1,
          directTouch: !0,
          noSharedTooltip: !0,
          trackerGroups: ["group", "dataLabelsGroup"],
          axisTypes: [],
          pointAttribs: f.seriesTypes.column.prototype.pointAttribs,
          animate: function (a) {
            var f = this,
              l = f.points,
              k = f.startAngleRad;
            a ||
              l.forEach(function (a) {
                var d = a.graphic,
                  g = a.shapeArgs;
                d &&
                  g &&
                  (d.attr({
                    r: K(a.startR, f.center && f.center[3] / 2),
                    start: k,
                    end: k,
                  }),
                  d.animate(
                    { r: g.r, start: g.start, end: g.end },
                    f.options.animation
                  ));
              });
          },
          hasData: function () {
            return !!this.processedXData.length;
          },
          updateTotals: function () {
            var a,
              f = 0,
              l = this.points,
              k = l.length,
              g = this.options.ignoreHiddenPoint;
            for (a = 0; a < k; a++) {
              var d = l[a];
              f += g && !d.visible ? 0 : d.isNull ? 0 : d.y;
            }
            this.total = f;
            for (a = 0; a < k; a++)
              (d = l[a]),
                (d.percentage =
                  0 < f && (d.visible || !g) ? (d.y / f) * 100 : 0),
                (d.total = f);
          },
          generatePoints: function () {
            u.prototype.generatePoints.call(this);
            this.updateTotals();
          },
          getX: function (a, f, l) {
            var h = this.center,
              g = this.radii ? this.radii[l.index] : h[2] / 2;
            a = Math.asin(J((a - h[1]) / (g + l.labelDistance), -1, 1));
            return (
              h[0] +
              (f ? -1 : 1) * Math.cos(a) * (g + l.labelDistance) +
              (0 < l.labelDistance
                ? (f ? -1 : 1) * this.options.dataLabels.padding
                : 0)
            );
          },
          translate: function (a) {
            this.generatePoints();
            var f = 0,
              l = this.options,
              k = l.slicedOffset,
              g = k + (l.borderWidth || 0),
              d = I(l.startAngle, l.endAngle),
              m = (this.startAngleRad = d.start);
            d = (this.endAngleRad = d.end) - m;
            var n = this.points,
              p = l.dataLabels.distance;
            l = l.ignoreHiddenPoint;
            var q,
              t = n.length;
            a || (this.center = a = this.getCenter());
            for (q = 0; q < t; q++) {
              var u = n[q];
              var y = m + f * d;
              if (!l || u.visible) f += u.percentage / 100;
              var F = m + f * d;
              u.shapeType = "arc";
              u.shapeArgs = {
                x: a[0],
                y: a[1],
                r: a[2] / 2,
                innerR: a[3] / 2,
                start: Math.round(1e3 * y) / 1e3,
                end: Math.round(1e3 * F) / 1e3,
              };
              u.labelDistance = K(
                u.options.dataLabels && u.options.dataLabels.distance,
                p
              );
              u.labelDistance = E(u.labelDistance, u.shapeArgs.r);
              this.maxLabelDistance = Math.max(
                this.maxLabelDistance || 0,
                u.labelDistance
              );
              F = (F + y) / 2;
              F > 1.5 * Math.PI
                ? (F -= 2 * Math.PI)
                : F < -Math.PI / 2 && (F += 2 * Math.PI);
              u.slicedTranslation = {
                translateX: Math.round(Math.cos(F) * k),
                translateY: Math.round(Math.sin(F) * k),
              };
              var e = (Math.cos(F) * a[2]) / 2;
              var c = (Math.sin(F) * a[2]) / 2;
              u.tooltipPos = [a[0] + 0.7 * e, a[1] + 0.7 * c];
              u.half = F < -Math.PI / 2 || F > Math.PI / 2 ? 1 : 0;
              u.angle = F;
              y = Math.min(g, u.labelDistance / 5);
              u.labelPosition = {
                natural: {
                  x: a[0] + e + Math.cos(F) * u.labelDistance,
                  y: a[1] + c + Math.sin(F) * u.labelDistance,
                },
                final: {},
                alignment:
                  0 > u.labelDistance ? "center" : u.half ? "right" : "left",
                connectorPosition: {
                  breakAt: {
                    x: a[0] + e + Math.cos(F) * y,
                    y: a[1] + c + Math.sin(F) * y,
                  },
                  touchingSliceAt: { x: a[0] + e, y: a[1] + c },
                },
              };
            }
            v(this, "afterTranslate");
          },
          drawEmpty: function () {
            var f = this.startAngleRad,
              h = this.endAngleRad,
              l = this.options;
            if (0 === this.total && this.center) {
              var k = this.center[0];
              var g = this.center[1];
              this.graph ||
                (this.graph = this.chart.renderer
                  .arc(k, g, this.center[1] / 2, 0, f, h)
                  .addClass("highcharts-empty-series")
                  .add(this.group));
              this.graph.attr({
                d: a.prototype.symbols.arc(k, g, this.center[2] / 2, 0, {
                  start: f,
                  end: h,
                  innerR: this.center[3] / 2,
                }),
              });
              this.chart.styledMode ||
                this.graph.attr({
                  "stroke-width": l.borderWidth,
                  fill: l.fillColor || "none",
                  stroke: l.color || "#cccccc",
                });
            } else this.graph && (this.graph = this.graph.destroy());
          },
          redrawPoints: function () {
            var a = this,
              f = a.chart,
              l = f.renderer,
              k,
              g,
              d,
              n,
              p = a.options.shadow;
            this.drawEmpty();
            !p ||
              a.shadowGroup ||
              f.styledMode ||
              (a.shadowGroup = l.g("shadow").attr({ zIndex: -1 }).add(a.group));
            a.points.forEach(function (h) {
              var m = {};
              g = h.graphic;
              if (!h.isNull && g) {
                n = h.shapeArgs;
                k = h.getTranslate();
                if (!f.styledMode) {
                  var r = h.shadowGroup;
                  p &&
                    !r &&
                    (r = h.shadowGroup = l.g("shadow").add(a.shadowGroup));
                  r && r.attr(k);
                  d = a.pointAttribs(h, h.selected && "select");
                }
                h.delayedRendering
                  ? (g.setRadialReference(a.center).attr(n).attr(k),
                    f.styledMode ||
                      g
                        .attr(d)
                        .attr({ "stroke-linejoin": "round" })
                        .shadow(p, r),
                    (h.delayedRendering = !1))
                  : (g.setRadialReference(a.center),
                    f.styledMode || q(!0, m, d),
                    q(!0, m, n, k),
                    g.animate(m));
                g.attr({ visibility: h.visible ? "inherit" : "hidden" });
                g.addClass(h.getClassName());
              } else g && (h.graphic = g.destroy());
            });
          },
          drawPoints: function () {
            var a = this.chart.renderer;
            this.points.forEach(function (f) {
              f.graphic &&
                f.hasNewShapeType() &&
                (f.graphic = f.graphic.destroy());
              f.graphic ||
                ((f.graphic = a[f.shapeType](f.shapeArgs).add(f.series.group)),
                (f.delayedRendering = !0));
            });
          },
          searchPoint: D,
          sortByAngle: function (a, f) {
            a.sort(function (a, h) {
              return "undefined" !== typeof a.angle && (h.angle - a.angle) * f;
            });
          },
          drawLegendSymbol: n.drawRectangle,
          getCenter: G.getCenter,
          getSymbol: D,
          drawGraph: null,
        },
        {
          init: function () {
            y.prototype.init.apply(this, arguments);
            var a = this;
            a.name = K(a.name, "Slice");
            var f = function (f) {
              a.slice("select" === f.type);
            };
            C(a, "select", f);
            C(a, "unselect", f);
            return a;
          },
          isValid: function () {
            return L(this.y) && 0 <= this.y;
          },
          setVisible: function (a, f) {
            var h = this,
              k = h.series,
              g = k.chart,
              d = k.options.ignoreHiddenPoint;
            f = K(f, d);
            a !== h.visible &&
              ((h.visible = h.options.visible = a =
                "undefined" === typeof a ? !h.visible : a),
              (k.options.data[k.data.indexOf(h)] = h.options),
              ["graphic", "dataLabel", "connector", "shadowGroup"].forEach(
                function (d) {
                  if (h[d]) h[d][a ? "show" : "hide"](!0);
                }
              ),
              h.legendItem && g.legend.colorizeItem(h, a),
              a || "hover" !== h.state || h.setState(""),
              d && (k.isDirty = !0),
              f && g.redraw());
          },
          slice: function (a, f, l) {
            var h = this.series;
            t(l, h.chart);
            K(f, !0);
            this.sliced = this.options.sliced = H(a) ? a : !this.sliced;
            h.options.data[h.data.indexOf(this)] = this.options;
            this.graphic && this.graphic.animate(this.getTranslate());
            this.shadowGroup && this.shadowGroup.animate(this.getTranslate());
          },
          getTranslate: function () {
            return this.sliced
              ? this.slicedTranslation
              : { translateX: 0, translateY: 0 };
          },
          haloPath: function (a) {
            var f = this.shapeArgs;
            return this.sliced || !this.visible
              ? []
              : this.series.chart.renderer.symbols.arc(
                  f.x,
                  f.y,
                  f.r + a,
                  f.r + a,
                  { innerR: f.r - 1, start: f.start, end: f.end }
                );
          },
          connectorShapes: {
            fixedOffset: function (a, f, l) {
              var h = f.breakAt;
              f = f.touchingSliceAt;
              return [
                ["M", a.x, a.y],
                l.softConnector
                  ? [
                      "C",
                      a.x + ("left" === a.alignment ? -5 : 5),
                      a.y,
                      2 * h.x - f.x,
                      2 * h.y - f.y,
                      h.x,
                      h.y,
                    ]
                  : ["L", h.x, h.y],
                ["L", f.x, f.y],
              ];
            },
            straight: function (a, f) {
              f = f.touchingSliceAt;
              return [
                ["M", a.x, a.y],
                ["L", f.x, f.y],
              ];
            },
            crookedLine: function (a, f, l) {
              f = f.touchingSliceAt;
              var h = this.series,
                g = h.center[0],
                d = h.chart.plotWidth,
                m = h.chart.plotLeft;
              h = a.alignment;
              var n = this.shapeArgs.r;
              l = E(l.crookDistance, 1);
              d =
                "left" === h
                  ? g + n + (d + m - g - n) * (1 - l)
                  : m + (g - n) * l;
              l = ["L", d, a.y];
              g = !0;
              if ("left" === h ? d > a.x || d < f.x : d < a.x || d > f.x)
                g = !1;
              a = [["M", a.x, a.y]];
              g && a.push(l);
              a.push(["L", f.x, f.y]);
              return a;
            },
          },
          getConnectorPath: function () {
            var a = this.labelPosition,
              f = this.series.options.dataLabels,
              l = f.connectorShape,
              k = this.connectorShapes;
            k[l] && (l = k[l]);
            return l.call(
              this,
              { x: a.final.x, y: a.final.y, alignment: a.alignment },
              a.connectorPosition,
              f
            );
          },
        }
      );
      ("");
    }
  );
  O(
    n,
    "Core/Series/DataLabels.js",
    [n["Core/Globals.js"], n["Core/Utilities.js"]],
    function (f, a) {
      var n = f.noop,
        y = f.seriesTypes,
        D = a.arrayMax,
        G = a.clamp,
        C = a.defined,
        J = a.extend,
        H = a.fireEvent,
        v = a.format,
        L = a.getDeferredAnimation,
        q = a.isArray,
        K = a.merge,
        E = a.objectEach,
        p = a.pick,
        t = a.relativeLength,
        I = a.splat,
        u = a.stableSort,
        m = f.Series;
      f.distribute = function (a, l, k) {
        function g(a, d) {
          return a.target - d.target;
        }
        var d,
          h = !0,
          m = a,
          n = [];
        var q = 0;
        var t = m.reducedLen || l;
        for (d = a.length; d--; ) q += a[d].size;
        if (q > t) {
          u(a, function (a, d) {
            return (d.rank || 0) - (a.rank || 0);
          });
          for (q = d = 0; q <= t; ) (q += a[d].size), d++;
          n = a.splice(d - 1, a.length);
        }
        u(a, g);
        for (
          a = a.map(function (a) {
            return {
              size: a.size,
              targets: [a.target],
              align: p(a.align, 0.5),
            };
          });
          h;

        ) {
          for (d = a.length; d--; )
            (h = a[d]),
              (q =
                (Math.min.apply(0, h.targets) + Math.max.apply(0, h.targets)) /
                2),
              (h.pos = G(q - h.size * h.align, 0, l - h.size));
          d = a.length;
          for (h = !1; d--; )
            0 < d &&
              a[d - 1].pos + a[d - 1].size > a[d].pos &&
              ((a[d - 1].size += a[d].size),
              (a[d - 1].targets = a[d - 1].targets.concat(a[d].targets)),
              (a[d - 1].align = 0.5),
              a[d - 1].pos + a[d - 1].size > l &&
                (a[d - 1].pos = l - a[d - 1].size),
              a.splice(d, 1),
              (h = !0));
        }
        m.push.apply(m, n);
        d = 0;
        a.some(function (a) {
          var g = 0;
          if (
            a.targets.some(function () {
              m[d].pos = a.pos + g;
              if (
                "undefined" !== typeof k &&
                Math.abs(m[d].pos - m[d].target) > k
              )
                return (
                  m.slice(0, d + 1).forEach(function (a) {
                    delete a.pos;
                  }),
                  (m.reducedLen = (m.reducedLen || l) - 0.1 * l),
                  m.reducedLen > 0.1 * l && f.distribute(m, l, k),
                  !0
                );
              g += m[d].size;
              d++;
            })
          )
            return !0;
        });
        u(m, g);
      };
      m.prototype.drawDataLabels = function () {
        function a(a, d) {
          var c = d.filter;
          return c
            ? ((d = c.operator),
              (a = a[c.property]),
              (c = c.value),
              (">" === d && a > c) ||
              ("<" === d && a < c) ||
              (">=" === d && a >= c) ||
              ("<=" === d && a <= c) ||
              ("==" === d && a == c) ||
              ("===" === d && a === c)
                ? !0
                : !1)
            : !0;
        }
        function f(a, d) {
          var c = [],
            b;
          if (q(a) && !q(d))
            c = a.map(function (a) {
              return K(a, d);
            });
          else if (q(d) && !q(a))
            c = d.map(function (b) {
              return K(a, b);
            });
          else if (q(a) || q(d))
            for (b = Math.max(a.length, d.length); b--; ) c[b] = K(a[b], d[b]);
          else c = K(a, d);
          return c;
        }
        var k = this,
          g = k.chart,
          d = k.options,
          m = d.dataLabels,
          n = k.points,
          t,
          u = k.hasRendered || 0,
          B = m.animation;
        B = m.defer ? L(g, B, k) : { defer: 0, duration: 0 };
        var y = g.renderer;
        m = f(
          f(
            g.options.plotOptions &&
              g.options.plotOptions.series &&
              g.options.plotOptions.series.dataLabels,
            g.options.plotOptions &&
              g.options.plotOptions[k.type] &&
              g.options.plotOptions[k.type].dataLabels
          ),
          m
        );
        H(this, "drawDataLabels");
        if (q(m) || m.enabled || k._hasPointLabels) {
          var D = k.plotGroup(
            "dataLabelsGroup",
            "data-labels",
            u ? "inherit" : "hidden",
            m.zIndex || 6
          );
          D.attr({ opacity: +u });
          !u &&
            (u = k.dataLabelsGroup) &&
            (k.visible && D.show(!0),
            u[d.animation ? "animate" : "attr"]({ opacity: 1 }, B));
          n.forEach(function (h) {
            t = I(f(m, h.dlOptions || (h.options && h.options.dataLabels)));
            t.forEach(function (e, c) {
              var b = e.enabled && (!h.isNull || h.dataLabelOnNull) && a(h, e),
                f = h.dataLabels ? h.dataLabels[c] : h.dataLabel,
                l = h.connectors ? h.connectors[c] : h.connector,
                m = p(e.distance, h.labelDistance),
                n = !f;
              if (b) {
                var r = h.getLabelConfig();
                var q = p(e[h.formatPrefix + "Format"], e.format);
                r = C(q)
                  ? v(q, r, g)
                  : (e[h.formatPrefix + "Formatter"] || e.formatter).call(r, e);
                q = e.style;
                var t = e.rotation;
                g.styledMode ||
                  ((q.color = p(e.color, q.color, k.color, "#000000")),
                  "contrast" === q.color
                    ? ((h.contrastColor = y.getContrast(h.color || k.color)),
                      (q.color =
                        (!C(m) && e.inside) || 0 > m || d.stacking
                          ? h.contrastColor
                          : "#000000"))
                    : delete h.contrastColor,
                  d.cursor && (q.cursor = d.cursor));
                var x = {
                  r: e.borderRadius || 0,
                  rotation: t,
                  padding: e.padding,
                  zIndex: 1,
                };
                g.styledMode ||
                  ((x.fill = e.backgroundColor),
                  (x.stroke = e.borderColor),
                  (x["stroke-width"] = e.borderWidth));
                E(x, function (a, b) {
                  "undefined" === typeof a && delete x[b];
                });
              }
              !f || (b && C(r))
                ? b &&
                  C(r) &&
                  (f
                    ? (x.text = r)
                    : ((h.dataLabels = h.dataLabels || []),
                      (f = h.dataLabels[c] = t
                        ? y
                            .text(r, 0, -9999, e.useHTML)
                            .addClass("highcharts-data-label")
                        : y.label(
                            r,
                            0,
                            -9999,
                            e.shape,
                            null,
                            null,
                            e.useHTML,
                            null,
                            "data-label"
                          )),
                      c || (h.dataLabel = f),
                      f.addClass(
                        " highcharts-data-label-color-" +
                          h.colorIndex +
                          " " +
                          (e.className || "") +
                          (e.useHTML ? " highcharts-tracker" : "")
                      )),
                  (f.options = e),
                  f.attr(x),
                  g.styledMode || f.css(q).shadow(e.shadow),
                  f.added || f.add(D),
                  e.textPath &&
                    !e.useHTML &&
                    (f.setTextPath(
                      (h.getDataLabelPath && h.getDataLabelPath(f)) ||
                        h.graphic,
                      e.textPath
                    ),
                    h.dataLabelPath &&
                      !e.textPath.enabled &&
                      (h.dataLabelPath = h.dataLabelPath.destroy())),
                  k.alignDataLabel(h, f, e, null, n))
                : ((h.dataLabel = h.dataLabel && h.dataLabel.destroy()),
                  h.dataLabels &&
                    (1 === h.dataLabels.length
                      ? delete h.dataLabels
                      : delete h.dataLabels[c]),
                  c || delete h.dataLabel,
                  l &&
                    ((h.connector = h.connector.destroy()),
                    h.connectors &&
                      (1 === h.connectors.length
                        ? delete h.connectors
                        : delete h.connectors[c])));
            });
          });
        }
        H(this, "afterDrawDataLabels");
      };
      m.prototype.alignDataLabel = function (a, f, k, g, d) {
        var h = this,
          l = this.chart,
          m = this.isCartesian && l.inverted,
          n = this.enabledDataSorting,
          q = p(a.dlBox && a.dlBox.centerX, a.plotX, -9999),
          t = p(a.plotY, -9999),
          v = f.getBBox(),
          u = k.rotation,
          e = k.align,
          c = l.isInsidePlot(q, Math.round(t), m),
          b = "justify" === p(k.overflow, n ? "none" : "justify"),
          z =
            this.visible &&
            !1 !== a.visible &&
            (a.series.forceDL ||
              (n && !b) ||
              c ||
              (k.inside &&
                g &&
                l.isInsidePlot(q, m ? g.x + 1 : g.y + g.height - 1, m)));
        var w = function (e) {
          n && h.xAxis && !b && h.setDataLabelStartPos(a, f, d, c, e);
        };
        if (z) {
          var y = l.renderer.fontMetrics(
            l.styledMode ? void 0 : k.style.fontSize,
            f
          ).b;
          g = J(
            {
              x: m ? this.yAxis.len - t : q,
              y: Math.round(m ? this.xAxis.len - q : t),
              width: 0,
              height: 0,
            },
            g
          );
          J(k, { width: v.width, height: v.height });
          u
            ? ((b = !1),
              (q = l.renderer.rotCorr(y, u)),
              (q = {
                x: g.x + (k.x || 0) + g.width / 2 + q.x,
                y:
                  g.y +
                  (k.y || 0) +
                  { top: 0, middle: 0.5, bottom: 1 }[k.verticalAlign] *
                    g.height,
              }),
              w(q),
              f[d ? "attr" : "animate"](q).attr({ align: e }),
              (w = (u + 720) % 360),
              (w = 180 < w && 360 > w),
              "left" === e
                ? (q.y -= w ? v.height : 0)
                : "center" === e
                ? ((q.x -= v.width / 2), (q.y -= v.height / 2))
                : "right" === e &&
                  ((q.x -= v.width), (q.y -= w ? 0 : v.height)),
              (f.placed = !0),
              (f.alignAttr = q))
            : (w(g), f.align(k, null, g), (q = f.alignAttr));
          b && 0 <= g.height
            ? this.justifyDataLabel(f, k, q, v, g, d)
            : p(k.crop, !0) &&
              (z =
                l.isInsidePlot(q.x, q.y) &&
                l.isInsidePlot(q.x + v.width, q.y + v.height));
          if (k.shape && !u)
            f[d ? "attr" : "animate"]({
              anchorX: m ? l.plotWidth - a.plotY : a.plotX,
              anchorY: m ? l.plotHeight - a.plotX : a.plotY,
            });
        }
        d && n && (f.placed = !1);
        z || (n && !b) || (f.hide(!0), (f.placed = !1));
      };
      m.prototype.setDataLabelStartPos = function (a, f, k, g, d) {
        var h = this.chart,
          l = h.inverted,
          m = this.xAxis,
          n = m.reversed,
          p = l ? f.height / 2 : f.width / 2;
        a = (a = a.pointWidth) ? a / 2 : 0;
        m = l ? d.x : n ? -p - a : m.width - p + a;
        d = l ? (n ? this.yAxis.height - p + a : -p - a) : d.y;
        f.startXPos = m;
        f.startYPos = d;
        g
          ? "hidden" === f.visibility &&
            (f.show(), f.attr({ opacity: 0 }).animate({ opacity: 1 }))
          : f.attr({ opacity: 1 }).animate({ opacity: 0 }, void 0, f.hide);
        h.hasRendered &&
          (k && f.attr({ x: f.startXPos, y: f.startYPos }), (f.placed = !0));
      };
      m.prototype.justifyDataLabel = function (a, f, k, g, d, m) {
        var h = this.chart,
          l = f.align,
          n = f.verticalAlign,
          p = a.box ? 0 : a.padding || 0,
          q = f.x;
        q = void 0 === q ? 0 : q;
        var t = f.y;
        var x = void 0 === t ? 0 : t;
        t = k.x + p;
        if (0 > t) {
          "right" === l && 0 <= q
            ? ((f.align = "left"), (f.inside = !0))
            : (q -= t);
          var e = !0;
        }
        t = k.x + g.width - p;
        t > h.plotWidth &&
          ("left" === l && 0 >= q
            ? ((f.align = "right"), (f.inside = !0))
            : (q += h.plotWidth - t),
          (e = !0));
        t = k.y + p;
        0 > t &&
          ("bottom" === n && 0 <= x
            ? ((f.verticalAlign = "top"), (f.inside = !0))
            : (x -= t),
          (e = !0));
        t = k.y + g.height - p;
        t > h.plotHeight &&
          ("top" === n && 0 >= x
            ? ((f.verticalAlign = "bottom"), (f.inside = !0))
            : (x += h.plotHeight - t),
          (e = !0));
        e && ((f.x = q), (f.y = x), (a.placed = !m), a.align(f, void 0, d));
        return e;
      };
      y.pie &&
        ((y.pie.prototype.dataLabelPositioners = {
          radialDistributionY: function (a) {
            return a.top + a.distributeBox.pos;
          },
          radialDistributionX: function (a, f, k, g) {
            return a.getX(k < f.top + 2 || k > f.bottom - 2 ? g : k, f.half, f);
          },
          justify: function (a, f, k) {
            return k[0] + (a.half ? -1 : 1) * (f + a.labelDistance);
          },
          alignToPlotEdges: function (a, f, k, g) {
            a = a.getBBox().width;
            return f ? a + g : k - a - g;
          },
          alignToConnectors: function (a, f, k, g) {
            var d = 0,
              h;
            a.forEach(function (a) {
              h = a.dataLabel.getBBox().width;
              h > d && (d = h);
            });
            return f ? d + g : k - d - g;
          },
        }),
        (y.pie.prototype.drawDataLabels = function () {
          var a = this,
            l = a.data,
            k,
            g = a.chart,
            d = a.options.dataLabels || {},
            n = d.connectorPadding,
            r,
            q = g.plotWidth,
            t = g.plotHeight,
            v = g.plotLeft,
            u = Math.round(g.chartWidth / 3),
            y,
            F = a.center,
            e = F[2] / 2,
            c = F[1],
            b,
            z,
            w,
            E,
            H = [[], []],
            G,
            I,
            J,
            L,
            O = [0, 0, 0, 0],
            S = a.dataLabelPositioners,
            V;
          a.visible &&
            (d.enabled || a._hasPointLabels) &&
            (l.forEach(function (a) {
              a.dataLabel &&
                a.visible &&
                a.dataLabel.shortened &&
                (a.dataLabel
                  .attr({ width: "auto" })
                  .css({ width: "auto", textOverflow: "clip" }),
                (a.dataLabel.shortened = !1));
            }),
            m.prototype.drawDataLabels.apply(a),
            l.forEach(function (a) {
              a.dataLabel &&
                (a.visible
                  ? (H[a.half].push(a),
                    (a.dataLabel._pos = null),
                    !C(d.style.width) &&
                      !C(
                        a.options.dataLabels &&
                          a.options.dataLabels.style &&
                          a.options.dataLabels.style.width
                      ) &&
                      a.dataLabel.getBBox().width > u &&
                      (a.dataLabel.css({ width: Math.round(0.7 * u) + "px" }),
                      (a.dataLabel.shortened = !0)))
                  : ((a.dataLabel = a.dataLabel.destroy()),
                    a.dataLabels &&
                      1 === a.dataLabels.length &&
                      delete a.dataLabels));
            }),
            H.forEach(function (h, l) {
              var m = h.length,
                r = [],
                x;
              if (m) {
                a.sortByAngle(h, l - 0.5);
                if (0 < a.maxLabelDistance) {
                  var u = Math.max(0, c - e - a.maxLabelDistance);
                  var A = Math.min(c + e + a.maxLabelDistance, g.plotHeight);
                  h.forEach(function (a) {
                    0 < a.labelDistance &&
                      a.dataLabel &&
                      ((a.top = Math.max(0, c - e - a.labelDistance)),
                      (a.bottom = Math.min(
                        c + e + a.labelDistance,
                        g.plotHeight
                      )),
                      (x = a.dataLabel.getBBox().height || 21),
                      (a.distributeBox = {
                        target: a.labelPosition.natural.y - a.top + x / 2,
                        size: x,
                        rank: a.y,
                      }),
                      r.push(a.distributeBox));
                  });
                  u = A + x - u;
                  f.distribute(r, u, u / 5);
                }
                for (L = 0; L < m; L++) {
                  k = h[L];
                  w = k.labelPosition;
                  b = k.dataLabel;
                  J = !1 === k.visible ? "hidden" : "inherit";
                  I = u = w.natural.y;
                  r &&
                    C(k.distributeBox) &&
                    ("undefined" === typeof k.distributeBox.pos
                      ? (J = "hidden")
                      : ((E = k.distributeBox.size),
                        (I = S.radialDistributionY(k))));
                  delete k.positionIndex;
                  if (d.justify) G = S.justify(k, e, F);
                  else
                    switch (d.alignTo) {
                      case "connectors":
                        G = S.alignToConnectors(h, l, q, v);
                        break;
                      case "plotEdges":
                        G = S.alignToPlotEdges(b, l, q, v);
                        break;
                      default:
                        G = S.radialDistributionX(a, k, I, u);
                    }
                  b._attr = { visibility: J, align: w.alignment };
                  V = k.options.dataLabels || {};
                  b._pos = {
                    x:
                      G +
                      p(V.x, d.x) +
                      ({ left: n, right: -n }[w.alignment] || 0),
                    y: I + p(V.y, d.y) - 10,
                  };
                  w.final.x = G;
                  w.final.y = I;
                  p(d.crop, !0) &&
                    ((z = b.getBBox().width),
                    (u = null),
                    G - z < n && 1 === l
                      ? ((u = Math.round(z - G + n)),
                        (O[3] = Math.max(u, O[3])))
                      : G + z > q - n &&
                        0 === l &&
                        ((u = Math.round(G + z - q + n)),
                        (O[1] = Math.max(u, O[1]))),
                    0 > I - E / 2
                      ? (O[0] = Math.max(Math.round(-I + E / 2), O[0]))
                      : I + E / 2 > t &&
                        (O[2] = Math.max(Math.round(I + E / 2 - t), O[2])),
                    (b.sideOverflow = u));
                }
              }
            }),
            0 === D(O) || this.verifyDataLabelOverflow(O)) &&
            (this.placeDataLabels(),
            this.points.forEach(function (c) {
              V = K(d, c.options.dataLabels);
              if ((r = p(V.connectorWidth, 1))) {
                var e;
                y = c.connector;
                if (
                  (b = c.dataLabel) &&
                  b._pos &&
                  c.visible &&
                  0 < c.labelDistance
                ) {
                  J = b._attr.visibility;
                  if ((e = !y))
                    (c.connector = y = g.renderer
                      .path()
                      .addClass(
                        "highcharts-data-label-connector  highcharts-color-" +
                          c.colorIndex +
                          (c.className ? " " + c.className : "")
                      )
                      .add(a.dataLabelsGroup)),
                      g.styledMode ||
                        y.attr({
                          "stroke-width": r,
                          stroke: V.connectorColor || c.color || "#666666",
                        });
                  y[e ? "attr" : "animate"]({ d: c.getConnectorPath() });
                  y.attr("visibility", J);
                } else y && (c.connector = y.destroy());
              }
            }));
        }),
        (y.pie.prototype.placeDataLabels = function () {
          this.points.forEach(function (a) {
            var f = a.dataLabel,
              h;
            f &&
              a.visible &&
              ((h = f._pos)
                ? (f.sideOverflow &&
                    ((f._attr.width = Math.max(
                      f.getBBox().width - f.sideOverflow,
                      0
                    )),
                    f.css({
                      width: f._attr.width + "px",
                      textOverflow:
                        (this.options.dataLabels.style || {}).textOverflow ||
                        "ellipsis",
                    }),
                    (f.shortened = !0)),
                  f.attr(f._attr),
                  f[f.moved ? "animate" : "attr"](h),
                  (f.moved = !0))
                : f && f.attr({ y: -9999 }));
            delete a.distributeBox;
          }, this);
        }),
        (y.pie.prototype.alignDataLabel = n),
        (y.pie.prototype.verifyDataLabelOverflow = function (a) {
          var f = this.center,
            h = this.options,
            g = h.center,
            d = h.minSize || 80,
            m = null !== h.size;
          if (!m) {
            if (null !== g[0]) var n = Math.max(f[2] - Math.max(a[1], a[3]), d);
            else
              (n = Math.max(f[2] - a[1] - a[3], d)),
                (f[0] += (a[3] - a[1]) / 2);
            null !== g[1]
              ? (n = G(n, d, f[2] - Math.max(a[0], a[2])))
              : ((n = G(n, d, f[2] - a[0] - a[2])),
                (f[1] += (a[0] - a[2]) / 2));
            n < f[2]
              ? ((f[2] = n),
                (f[3] = Math.min(t(h.innerSize || 0, n), n)),
                this.translate(f),
                this.drawDataLabels && this.drawDataLabels())
              : (m = !0);
          }
          return m;
        }));
      y.column &&
        (y.column.prototype.alignDataLabel = function (a, f, k, g, d) {
          var h = this.chart.inverted,
            l = a.series,
            n = a.dlBox || a.shapeArgs,
            q = p(a.below, a.plotY > p(this.translatedThreshold, l.yAxis.len)),
            t = p(k.inside, !!this.options.stacking);
          n &&
            ((g = K(n)),
            0 > g.y && ((g.height += g.y), (g.y = 0)),
            (n = g.y + g.height - l.yAxis.len),
            0 < n && n < g.height && (g.height -= n),
            h &&
              (g = {
                x: l.yAxis.len - g.y - g.height,
                y: l.xAxis.len - g.x - g.width,
                width: g.height,
                height: g.width,
              }),
            t ||
              (h
                ? ((g.x += q ? 0 : g.width), (g.width = 0))
                : ((g.y += q ? g.height : 0), (g.height = 0))));
          k.align = p(k.align, !h || t ? "center" : q ? "right" : "left");
          k.verticalAlign = p(
            k.verticalAlign,
            h || t ? "middle" : q ? "top" : "bottom"
          );
          m.prototype.alignDataLabel.call(this, a, f, k, g, d);
          k.inside && a.contrastColor && f.css({ color: a.contrastColor });
        });
    }
  );
  O(
    n,
    "Extensions/OverlappingDataLabels.js",
    [n["Core/Chart/Chart.js"], n["Core/Utilities.js"]],
    function (f, a) {
      var n = a.addEvent,
        y = a.fireEvent,
        D = a.isArray,
        G = a.isNumber,
        C = a.objectEach,
        J = a.pick;
      n(f, "render", function () {
        var a = [];
        (this.labelCollectors || []).forEach(function (f) {
          a = a.concat(f());
        });
        (this.yAxis || []).forEach(function (f) {
          f.stacking &&
            f.options.stackLabels &&
            !f.options.stackLabels.allowOverlap &&
            C(f.stacking.stacks, function (f) {
              C(f, function (f) {
                a.push(f.label);
              });
            });
        });
        (this.series || []).forEach(function (f) {
          var n = f.options.dataLabels;
          f.visible &&
            (!1 !== n.enabled || f._hasPointLabels) &&
            (f.nodes || f.points).forEach(function (f) {
              f.visible &&
                (D(f.dataLabels)
                  ? f.dataLabels
                  : f.dataLabel
                  ? [f.dataLabel]
                  : []
                ).forEach(function (n) {
                  var q = n.options;
                  n.labelrank = J(
                    q.labelrank,
                    f.labelrank,
                    f.shapeArgs && f.shapeArgs.height
                  );
                  q.allowOverlap || a.push(n);
                });
            });
        });
        this.hideOverlappingLabels(a);
      });
      f.prototype.hideOverlappingLabels = function (a) {
        var f = this,
          n = a.length,
          q = f.renderer,
          C,
          E,
          p,
          t = !1;
        var D = function (a) {
          var f,
            h = a.box ? 0 : a.padding || 0,
            g = (f = 0),
            d;
          if (a && (!a.alignAttr || a.placed)) {
            var m = a.alignAttr || { x: a.attr("x"), y: a.attr("y") };
            var n = a.parentGroup;
            a.width ||
              ((f = a.getBBox()),
              (a.width = f.width),
              (a.height = f.height),
              (f = q.fontMetrics(null, a.element).h));
            var p = a.width - 2 * h;
            (d = { left: "0", center: "0.5", right: "1" }[a.alignValue])
              ? (g = +d * p)
              : G(a.x) &&
                Math.round(a.x) !== a.translateX &&
                (g = a.x - a.translateX);
            return {
              x: m.x + (n.translateX || 0) + h - (g || 0),
              y: m.y + (n.translateY || 0) + h - f,
              width: a.width - 2 * h,
              height: a.height - 2 * h,
            };
          }
        };
        for (E = 0; E < n; E++)
          if ((C = a[E]))
            (C.oldOpacity = C.opacity),
              (C.newOpacity = 1),
              (C.absoluteBox = D(C));
        a.sort(function (a, f) {
          return (f.labelrank || 0) - (a.labelrank || 0);
        });
        for (E = 0; E < n; E++) {
          var u = (D = a[E]) && D.absoluteBox;
          for (C = E + 1; C < n; ++C) {
            var m = (p = a[C]) && p.absoluteBox;
            !u ||
              !m ||
              D === p ||
              0 === D.newOpacity ||
              0 === p.newOpacity ||
              m.x >= u.x + u.width ||
              m.x + m.width <= u.x ||
              m.y >= u.y + u.height ||
              m.y + m.height <= u.y ||
              ((D.labelrank < p.labelrank ? D : p).newOpacity = 0);
          }
        }
        a.forEach(function (a) {
          if (a) {
            var h = a.newOpacity;
            a.oldOpacity !== h &&
              (a.alignAttr && a.placed
                ? (a[h ? "removeClass" : "addClass"](
                    "highcharts-data-label-hidden"
                  ),
                  (t = !0),
                  (a.alignAttr.opacity = h),
                  a[a.isOld ? "animate" : "attr"](
                    a.alignAttr,
                    null,
                    function () {
                      f.styledMode ||
                        a.css({ pointerEvents: h ? "auto" : "none" });
                      a.visibility = h ? "inherit" : "hidden";
                    }
                  ),
                  y(f, "afterHideOverlappingLabel"))
                : a.attr({ opacity: h }));
            a.isOld = !0;
          }
        });
        t && y(f, "afterHideAllOverlappingLabels");
      };
    }
  );
  O(
    n,
    "Core/Interaction.js",
    [
      n["Core/Chart/Chart.js"],
      n["Core/Globals.js"],
      n["Core/Legend.js"],
      n["Core/Options.js"],
      n["Core/Series/Point.js"],
      n["Core/Utilities.js"],
    ],
    function (f, a, n, y, D, G) {
      var C = y.defaultOptions,
        J = G.addEvent,
        H = G.createElement,
        v = G.css,
        L = G.defined,
        q = G.extend,
        K = G.fireEvent,
        E = G.isArray,
        p = G.isFunction,
        t = G.isNumber,
        I = G.isObject,
        u = G.merge,
        m = G.objectEach,
        h = G.pick,
        l = a.hasTouch;
      y = a.Series;
      G = a.seriesTypes;
      var k = a.svg;
      var g = (a.TrackerMixin = {
        drawTrackerPoint: function () {
          var a = this,
            f = a.chart,
            g = f.pointer,
            h = function (a) {
              var d = g.getPointFromEvent(a);
              "undefined" !== typeof d &&
                ((g.isDirectTouch = !0), d.onMouseOver(a));
            },
            k;
          a.points.forEach(function (a) {
            k = E(a.dataLabels)
              ? a.dataLabels
              : a.dataLabel
              ? [a.dataLabel]
              : [];
            a.graphic && (a.graphic.element.point = a);
            k.forEach(function (d) {
              d.div ? (d.div.point = a) : (d.element.point = a);
            });
          });
          a._hasTracking ||
            (a.trackerGroups.forEach(function (d) {
              if (a[d]) {
                a[d]
                  .addClass("highcharts-tracker")
                  .on("mouseover", h)
                  .on("mouseout", function (a) {
                    g.onTrackerMouseOut(a);
                  });
                if (l) a[d].on("touchstart", h);
                !f.styledMode &&
                  a.options.cursor &&
                  a[d].css(v).css({ cursor: a.options.cursor });
              }
            }),
            (a._hasTracking = !0));
          K(this, "afterDrawTracker");
        },
        drawTrackerGraph: function () {
          var a = this,
            f = a.options,
            g = f.trackByArea,
            h = [].concat(g ? a.areaPath : a.graphPath),
            m = a.chart,
            n = m.pointer,
            p = m.renderer,
            q = m.options.tooltip.snap,
            t = a.tracker,
            e = function (b) {
              if (m.hoverSeries !== a) a.onMouseOver();
            },
            c = "rgba(192,192,192," + (k ? 0.0001 : 0.002) + ")";
          t
            ? t.attr({ d: h })
            : a.graph &&
              ((a.tracker = p
                .path(h)
                .attr({
                  visibility: a.visible ? "visible" : "hidden",
                  zIndex: 2,
                })
                .addClass(
                  g ? "highcharts-tracker-area" : "highcharts-tracker-line"
                )
                .add(a.group)),
              m.styledMode ||
                a.tracker.attr({
                  "stroke-linecap": "round",
                  "stroke-linejoin": "round",
                  stroke: c,
                  fill: g ? c : "none",
                  "stroke-width": a.graph.strokeWidth() + (g ? 0 : 2 * q),
                }),
              [a.tracker, a.markerGroup].forEach(function (a) {
                a.addClass("highcharts-tracker")
                  .on("mouseover", e)
                  .on("mouseout", function (a) {
                    n.onTrackerMouseOut(a);
                  });
                f.cursor && !m.styledMode && a.css({ cursor: f.cursor });
                if (l) a.on("touchstart", e);
              }));
          K(this, "afterDrawTracker");
        },
      });
      G.column && (G.column.prototype.drawTracker = g.drawTrackerPoint);
      G.pie && (G.pie.prototype.drawTracker = g.drawTrackerPoint);
      G.scatter && (G.scatter.prototype.drawTracker = g.drawTrackerPoint);
      q(n.prototype, {
        setItemEvents: function (a, f, g) {
          var d = this,
            h = d.chart.renderer.boxWrapper,
            k = a instanceof D,
            l = "highcharts-legend-" + (k ? "point" : "series") + "-active",
            m = d.chart.styledMode;
          (g ? [f, a.legendSymbol] : [a.legendGroup]).forEach(function (g) {
            if (g)
              g.on("mouseover", function () {
                a.visible &&
                  d.allItems.forEach(function (d) {
                    a !== d && d.setState("inactive", !k);
                  });
                a.setState("hover");
                a.visible && h.addClass(l);
                m || f.css(d.options.itemHoverStyle);
              })
                .on("mouseout", function () {
                  d.chart.styledMode ||
                    f.css(u(a.visible ? d.itemStyle : d.itemHiddenStyle));
                  d.allItems.forEach(function (d) {
                    a !== d && d.setState("", !k);
                  });
                  h.removeClass(l);
                  a.setState();
                })
                .on("click", function (e) {
                  var c = function () {
                    a.setVisible && a.setVisible();
                    d.allItems.forEach(function (b) {
                      a !== b && b.setState(a.visible ? "inactive" : "", !k);
                    });
                  };
                  h.removeClass(l);
                  e = { browserEvent: e };
                  a.firePointEvent
                    ? a.firePointEvent("legendItemClick", e, c)
                    : K(a, "legendItemClick", e, c);
                });
          });
        },
        createCheckboxForItem: function (a) {
          a.checkbox = H(
            "input",
            {
              type: "checkbox",
              className: "highcharts-legend-checkbox",
              checked: a.selected,
              defaultChecked: a.selected,
            },
            this.options.itemCheckboxStyle,
            this.chart.container
          );
          J(a.checkbox, "click", function (d) {
            K(
              a.series || a,
              "checkboxClick",
              { checked: d.target.checked, item: a },
              function () {
                a.select();
              }
            );
          });
        },
      });
      q(f.prototype, {
        showResetZoom: function () {
          function a() {
            f.zoomOut();
          }
          var f = this,
            g = C.lang,
            h = f.options.chart.resetZoomButton,
            k = h.theme,
            l = k.states,
            m =
              "chart" === h.relativeTo || "spaceBox" === h.relativeTo
                ? null
                : "plotBox";
          K(this, "beforeShowResetZoom", null, function () {
            f.resetZoomButton = f.renderer
              .button(g.resetZoom, null, null, a, k, l && l.hover)
              .attr({ align: h.position.align, title: g.resetZoomTitle })
              .addClass("highcharts-reset-zoom")
              .add()
              .align(h.position, !1, m);
          });
          K(this, "afterShowResetZoom");
        },
        zoomOut: function () {
          K(this, "selection", { resetSelection: !0 }, this.zoom);
        },
        zoom: function (a) {
          var d = this,
            f,
            g = d.pointer,
            k = !1,
            l = d.inverted ? g.mouseDownX : g.mouseDownY;
          !a || a.resetSelection
            ? (d.axes.forEach(function (a) {
                f = a.zoom();
              }),
              (g.initiated = !1))
            : a.xAxis.concat(a.yAxis).forEach(function (a) {
                var h = a.axis,
                  e = d.inverted ? h.left : h.top,
                  c = d.inverted ? e + h.width : e + h.height,
                  b = h.isXAxis,
                  m = !1;
                if ((!b && l >= e && l <= c) || b || !L(l)) m = !0;
                g[b ? "zoomX" : "zoomY"] &&
                  m &&
                  ((f = h.zoom(a.min, a.max)), h.displayBtn && (k = !0));
              });
          var m = d.resetZoomButton;
          k && !m
            ? d.showResetZoom()
            : !k && I(m) && (d.resetZoomButton = m.destroy());
          f &&
            d.redraw(
              h(d.options.chart.animation, a && a.animation, 100 > d.pointCount)
            );
        },
        pan: function (d, f) {
          var g = this,
            h = g.hoverPoints,
            k = g.options.chart,
            l = g.options.mapNavigation && g.options.mapNavigation.enabled,
            m;
          f = "object" === typeof f ? f : { enabled: f, type: "x" };
          k && k.panning && (k.panning = f);
          var n = f.type;
          K(this, "pan", { originalEvent: d }, function () {
            h &&
              h.forEach(function (a) {
                a.setState();
              });
            var f = [1];
            "xy" === n ? (f = [1, 0]) : "y" === n && (f = [0]);
            f.forEach(function (e) {
              var c = g[e ? "xAxis" : "yAxis"][0],
                b = c.horiz,
                f = d[b ? "chartX" : "chartY"];
              b = b ? "mouseDownX" : "mouseDownY";
              var h = g[b],
                k = (c.pointRange || 0) / 2,
                p =
                  (c.reversed && !g.inverted) || (!c.reversed && g.inverted)
                    ? -1
                    : 1,
                q = c.getExtremes(),
                r = c.toValue(h - f, !0) + k * p;
              p = c.toValue(h + c.len - f, !0) - k * p;
              var u = p < r;
              h = u ? p : r;
              r = u ? r : p;
              var v = c.hasVerticalPanning(),
                x = c.panningState;
              c.series.forEach(function (a) {
                if (v && !e && (!x || x.isDirty)) {
                  var b = a.getProcessedData(!0);
                  a = a.getExtremes(b.yData, !0);
                  x ||
                    (x = {
                      startMin: Number.MAX_VALUE,
                      startMax: -Number.MAX_VALUE,
                    });
                  t(a.dataMin) &&
                    t(a.dataMax) &&
                    ((x.startMin = Math.min(a.dataMin, x.startMin)),
                    (x.startMax = Math.max(a.dataMax, x.startMax)));
                }
              });
              p = Math.min(
                a.pick(
                  null === x || void 0 === x ? void 0 : x.startMin,
                  q.dataMin
                ),
                k ? q.min : c.toValue(c.toPixels(q.min) - c.minPixelPadding)
              );
              k = Math.max(
                a.pick(
                  null === x || void 0 === x ? void 0 : x.startMax,
                  q.dataMax
                ),
                k ? q.max : c.toValue(c.toPixels(q.max) + c.minPixelPadding)
              );
              c.panningState = x;
              c.isOrdinal ||
                ((u = p - h),
                0 < u && ((r += u), (h = p)),
                (u = r - k),
                0 < u && ((r = k), (h -= u)),
                c.series.length &&
                  h !== q.min &&
                  r !== q.max &&
                  h >= p &&
                  r <= k &&
                  (c.setExtremes(h, r, !1, !1, { trigger: "pan" }),
                  g.resetZoomButton ||
                    l ||
                    h === p ||
                    r === k ||
                    !n.match("y") ||
                    (g.showResetZoom(), (c.displayBtn = !1)),
                  (m = !0)),
                (g[b] = f));
            });
            m && g.redraw(!1);
            v(g.container, { cursor: "move" });
          });
        },
      });
      q(D.prototype, {
        select: function (a, f) {
          var d = this,
            g = d.series,
            k = g.chart;
          this.selectedStaging = a = h(a, !d.selected);
          d.firePointEvent(
            a ? "select" : "unselect",
            { accumulate: f },
            function () {
              d.selected = d.options.selected = a;
              g.options.data[g.data.indexOf(d)] = d.options;
              d.setState(a && "select");
              f ||
                k.getSelectedPoints().forEach(function (a) {
                  var f = a.series;
                  a.selected &&
                    a !== d &&
                    ((a.selected = a.options.selected = !1),
                    (f.options.data[f.data.indexOf(a)] = a.options),
                    a.setState(
                      k.hoverPoints && f.options.inactiveOtherPoints
                        ? "inactive"
                        : ""
                    ),
                    a.firePointEvent("unselect"));
                });
            }
          );
          delete this.selectedStaging;
        },
        onMouseOver: function (a) {
          var d = this.series.chart,
            f = d.pointer;
          a = a
            ? f.normalize(a)
            : f.getChartCoordinatesFromPoint(this, d.inverted);
          f.runPointActions(a, this);
        },
        onMouseOut: function () {
          var a = this.series.chart;
          this.firePointEvent("mouseOut");
          this.series.options.inactiveOtherPoints ||
            (a.hoverPoints || []).forEach(function (a) {
              a.setState();
            });
          a.hoverPoints = a.hoverPoint = null;
        },
        importEvents: function () {
          if (!this.hasImportedEvents) {
            var a = this,
              f = u(a.series.options.point, a.options).events;
            a.events = f;
            m(f, function (d, f) {
              p(d) && J(a, f, d);
            });
            this.hasImportedEvents = !0;
          }
        },
        setState: function (a, f) {
          var d = this.series,
            g = this.state,
            k = d.options.states[a || "normal"] || {},
            l = C.plotOptions[d.type].marker && d.options.marker,
            m = l && !1 === l.enabled,
            n = (l && l.states && l.states[a || "normal"]) || {},
            p = !1 === n.enabled,
            e = d.stateMarkerGraphic,
            c = this.marker || {},
            b = d.chart,
            t = d.halo,
            u,
            v = l && d.markerAttribs;
          a = a || "";
          if (
            !(
              (a === this.state && !f) ||
              (this.selected && "select" !== a) ||
              !1 === k.enabled ||
              (a && (p || (m && !1 === n.enabled))) ||
              (a && c.states && c.states[a] && !1 === c.states[a].enabled)
            )
          ) {
            this.state = a;
            v && (u = d.markerAttribs(this, a));
            if (this.graphic) {
              g && this.graphic.removeClass("highcharts-point-" + g);
              a && this.graphic.addClass("highcharts-point-" + a);
              if (!b.styledMode) {
                var x = d.pointAttribs(this, a);
                var y = h(b.options.chart.animation, k.animation);
                d.options.inactiveOtherPoints &&
                  x.opacity &&
                  ((this.dataLabels || []).forEach(function (a) {
                    a && a.animate({ opacity: x.opacity }, y);
                  }),
                  this.connector &&
                    this.connector.animate({ opacity: x.opacity }, y));
                this.graphic.animate(x, y);
              }
              u &&
                this.graphic.animate(
                  u,
                  h(b.options.chart.animation, n.animation, l.animation)
                );
              e && e.hide();
            } else {
              if (a && n) {
                g = c.symbol || d.symbol;
                e && e.currentSymbol !== g && (e = e.destroy());
                if (u)
                  if (e) e[f ? "animate" : "attr"]({ x: u.x, y: u.y });
                  else
                    g &&
                      ((d.stateMarkerGraphic = e = b.renderer
                        .symbol(g, u.x, u.y, u.width, u.height)
                        .add(d.markerGroup)),
                      (e.currentSymbol = g));
                !b.styledMode && e && e.attr(d.pointAttribs(this, a));
              }
              e &&
                (e[a && this.isInside ? "show" : "hide"](),
                (e.element.point = this));
            }
            a = k.halo;
            k = ((e = this.graphic || e) && e.visibility) || "inherit";
            a && a.size && e && "hidden" !== k && !this.isCluster
              ? (t || (d.halo = t = b.renderer.path().add(e.parentGroup)),
                t.show()[f ? "animate" : "attr"]({ d: this.haloPath(a.size) }),
                t.attr({
                  class:
                    "highcharts-halo highcharts-color-" +
                    h(this.colorIndex, d.colorIndex) +
                    (this.className ? " " + this.className : ""),
                  visibility: k,
                  zIndex: -1,
                }),
                (t.point = this),
                b.styledMode ||
                  t.attr(
                    q(
                      {
                        fill: this.color || d.color,
                        "fill-opacity": a.opacity,
                      },
                      a.attributes
                    )
                  ))
              : t &&
                t.point &&
                t.point.haloPath &&
                t.animate({ d: t.point.haloPath(0) }, null, t.hide);
            K(this, "afterSetState");
          }
        },
        haloPath: function (a) {
          return this.series.chart.renderer.symbols.circle(
            Math.floor(this.plotX) - a,
            this.plotY - a,
            2 * a,
            2 * a
          );
        },
      });
      q(y.prototype, {
        onMouseOver: function () {
          var a = this.chart,
            f = a.hoverSeries;
          a.pointer.setHoverChartIndex();
          if (f && f !== this) f.onMouseOut();
          this.options.events.mouseOver && K(this, "mouseOver");
          this.setState("hover");
          a.hoverSeries = this;
        },
        onMouseOut: function () {
          var a = this.options,
            f = this.chart,
            g = f.tooltip,
            h = f.hoverPoint;
          f.hoverSeries = null;
          if (h) h.onMouseOut();
          this && a.events.mouseOut && K(this, "mouseOut");
          !g ||
            this.stickyTracking ||
            (g.shared && !this.noSharedTooltip) ||
            g.hide();
          f.series.forEach(function (a) {
            a.setState("", !0);
          });
        },
        setState: function (a, f) {
          var d = this,
            g = d.options,
            k = d.graph,
            l = g.inactiveOtherPoints,
            m = g.states,
            n = g.lineWidth,
            p = g.opacity,
            e = h(
              m[a || "normal"] && m[a || "normal"].animation,
              d.chart.options.chart.animation
            );
          g = 0;
          a = a || "";
          if (
            d.state !== a &&
            ([d.group, d.markerGroup, d.dataLabelsGroup].forEach(function (c) {
              c &&
                (d.state && c.removeClass("highcharts-series-" + d.state),
                a && c.addClass("highcharts-series-" + a));
            }),
            (d.state = a),
            !d.chart.styledMode)
          ) {
            if (m[a] && !1 === m[a].enabled) return;
            a &&
              ((n = m[a].lineWidth || n + (m[a].lineWidthPlus || 0)),
              (p = h(m[a].opacity, p)));
            if (k && !k.dashstyle)
              for (
                m = { "stroke-width": n }, k.animate(m, e);
                d["zone-graph-" + g];

              )
                d["zone-graph-" + g].attr(m), (g += 1);
            l ||
              [
                d.group,
                d.markerGroup,
                d.dataLabelsGroup,
                d.labelBySeries,
              ].forEach(function (a) {
                a && a.animate({ opacity: p }, e);
              });
          }
          f && l && d.points && d.setAllPointsToState(a);
        },
        setAllPointsToState: function (a) {
          this.points.forEach(function (d) {
            d.setState && d.setState(a);
          });
        },
        setVisible: function (a, f) {
          var d = this,
            g = d.chart,
            h = d.legendItem,
            k = g.options.chart.ignoreHiddenSeries,
            l = d.visible;
          var m = (d.visible = a = d.options.visible = d.userOptions.visible =
            "undefined" === typeof a ? !l : a)
            ? "show"
            : "hide";
          ["group", "dataLabelsGroup", "markerGroup", "tracker", "tt"].forEach(
            function (a) {
              if (d[a]) d[a][m]();
            }
          );
          if (
            g.hoverSeries === d ||
            (g.hoverPoint && g.hoverPoint.series) === d
          )
            d.onMouseOut();
          h && g.legend.colorizeItem(d, a);
          d.isDirty = !0;
          d.options.stacking &&
            g.series.forEach(function (a) {
              a.options.stacking && a.visible && (a.isDirty = !0);
            });
          d.linkedSeries.forEach(function (d) {
            d.setVisible(a, !1);
          });
          k && (g.isDirtyBox = !0);
          K(d, m);
          !1 !== f && g.redraw();
        },
        show: function () {
          this.setVisible(!0);
        },
        hide: function () {
          this.setVisible(!1);
        },
        select: function (a) {
          this.selected = a = this.options.selected =
            "undefined" === typeof a ? !this.selected : a;
          this.checkbox && (this.checkbox.checked = a);
          K(this, a ? "select" : "unselect");
        },
        drawTracker: g.drawTrackerGraph,
      });
    }
  );
  O(
    n,
    "Core/Responsive.js",
    [n["Core/Chart/Chart.js"], n["Core/Utilities.js"]],
    function (f, a) {
      var n = a.find,
        y = a.isArray,
        D = a.isObject,
        G = a.merge,
        C = a.objectEach,
        J = a.pick,
        H = a.splat,
        v = a.uniqueKey;
      f.prototype.setResponsive = function (a, f) {
        var q = this.options.responsive,
          y = [],
          p = this.currentResponsive;
        !f &&
          q &&
          q.rules &&
          q.rules.forEach(function (a) {
            "undefined" === typeof a._id && (a._id = v());
            this.matchResponsiveRule(a, y);
          }, this);
        f = G.apply(
          0,
          y.map(function (a) {
            return n(q.rules, function (f) {
              return f._id === a;
            }).chartOptions;
          })
        );
        f.isResponsiveOptions = !0;
        y = y.toString() || void 0;
        y !== (p && p.ruleIds) &&
          (p && this.update(p.undoOptions, a, !0),
          y
            ? ((p = this.currentOptions(f)),
              (p.isResponsiveOptions = !0),
              (this.currentResponsive = {
                ruleIds: y,
                mergedOptions: f,
                undoOptions: p,
              }),
              this.update(f, a, !0))
            : (this.currentResponsive = void 0));
      };
      f.prototype.matchResponsiveRule = function (a, f) {
        var n = a.condition;
        (
          n.callback ||
          function () {
            return (
              this.chartWidth <= J(n.maxWidth, Number.MAX_VALUE) &&
              this.chartHeight <= J(n.maxHeight, Number.MAX_VALUE) &&
              this.chartWidth >= J(n.minWidth, 0) &&
              this.chartHeight >= J(n.minHeight, 0)
            );
          }
        ).call(this) && f.push(a._id);
      };
      f.prototype.currentOptions = function (a) {
        function f(a, q, v, u) {
          var m;
          C(a, function (a, l) {
            if (!u && -1 < n.collectionsWithUpdate.indexOf(l))
              for (
                a = H(a), v[l] = [], m = 0;
                m < Math.max(a.length, q[l].length);
                m++
              )
                q[l][m] &&
                  (void 0 === a[m]
                    ? (v[l][m] = q[l][m])
                    : ((v[l][m] = {}), f(a[m], q[l][m], v[l][m], u + 1)));
            else
              D(a)
                ? ((v[l] = y(a) ? [] : {}), f(a, q[l] || {}, v[l], u + 1))
                : (v[l] = "undefined" === typeof q[l] ? null : q[l]);
          });
        }
        var n = this,
          v = {};
        f(a, this.options, v, 0);
        return v;
      };
    }
  );
  O(n, "masters/highcharts.src.js", [n["Core/Globals.js"]], function (f) {
    return f;
  });
  n["masters/highcharts.src.js"]._modules = n;
  return n["masters/highcharts.src.js"];
});
//# sourceMappingURL=highcharts.js.map
