物管理前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

2558 lines
371 KiB

/*
Highcharts JS v9.2.2 (2021-08-24)
(c) 2009-2021 Torstein Honsi
License: www.highcharts.com/license
*/
'use strict'; (function (aa, M) { typeof module === 'object' && module.exports ? (M.default = M, module.exports = aa.document ? M(aa) : M) : typeof define === 'function' && define.amd ? define('highcharts/highcharts', function () { return M(aa) }) : (aa.Highcharts && aa.Highcharts.error(16, !0), aa.Highcharts = M(aa)) })(typeof window !== 'undefined' ? window : this, function (aa) {
function M (r, a, C, E) { r.hasOwnProperty(a) || (r[a] = E.apply(null, C)) } var a = {}; M(a, 'Core/Globals.js', [], function () {
var r = typeof aa !== 'undefined' ? aa : typeof window !== 'undefined'
? window : {}; var a; (function (a) {
a.SVG_NS = 'http://www.w3.org/2000/svg'; a.product = 'Highcharts'; a.version = '9.2.2'; a.win = r; a.doc = a.win.document; a.svg = a.doc && a.doc.createElementNS && !!a.doc.createElementNS(a.SVG_NS, 'svg').createSVGRect; a.userAgent = a.win.navigator && a.win.navigator.userAgent || ''; a.isChrome = a.userAgent.indexOf('Chrome') !== -1; a.isFirefox = a.userAgent.indexOf('Firefox') !== -1; a.isMS = /(edge|msie|trident)/i.test(a.userAgent) && !a.win.opera; a.isSafari = !a.isChrome && a.userAgent.indexOf('Safari') !== -1; a.isTouchDevice =
/(Mobile|Android|Windows Phone)/.test(a.userAgent); a.isWebKit = a.userAgent.indexOf('AppleWebKit') !== -1; a.deg2rad = 2 * Math.PI / 360; a.hasBidiBug = a.isFirefox && parseInt(a.userAgent.split('Firefox/')[1], 10) < 4; a.hasTouch = !!a.win.TouchEvent; a.marginNames = ['plotTop', 'marginRight', 'marginBottom', 'plotLeft']; a.noop = function () {}; a.supportsPassiveEvents = (function () {
var r = !1; if (!a.isMS) {
var w = Object.defineProperty({}, 'passive', { get: function () { r = !0 } }); a.win.addEventListener && a.win.removeEventListener && (a.win.addEventListener('testPassive',
a.noop, w), a.win.removeEventListener('testPassive', a.noop, w))
} return r
}()); a.charts = []; a.dateFormats = {}; a.seriesTypes = {}; a.symbolSizes = {}; a.chartCount = 0
})(a || (a = {})); ''; return a
}); M(a, 'Core/Utilities.js', [a['Core/Globals.js']], function (a) {
function r (b, d, e, p) {
var y = d ? 'Highcharts error' : 'Highcharts warning'; b === 32 && (b = y + ': Deprecated member'); var F = m(b); var c = F ? y + ' #' + b + ': www.highcharts.com/errors/' + b + '/' : b.toString(); if (typeof p !== 'undefined') {
var k = ''; F && (c += '?'); I(p, function (b, K) {
k += '\n - ' + K + ': ' + b
F && (c += encodeURI(K) + '=' + encodeURI(b))
}); c += k
}B(a, 'displayError', { chart: e, code: b, message: c, params: p }, function () { if (d) throw Error(c); h.console && r.messages.indexOf(c) === -1 && console.warn(c) }); r.messages.push(c)
} function C (b, d) { var y = {}; I(b, function (h, c) { if (J(b[c], !0) && !b.nodeType && d[c])h = C(b[c], d[c]), Object.keys(h).length && (y[c] = h); else if (J(b[c]) || b[c] !== d[c])y[c] = b[c] }); return y } function E (b, d) { return parseInt(b, d || 10) } function z (b) { return typeof b === 'string' } function x (b) {
b = Object.prototype.toString.call(b)
return b === '[object Array]' || b === '[object Array Iterator]'
} function J (b, d) { return !!b && typeof b === 'object' && (!d || !x(b)) } function u (b) { return J(b) && typeof b.nodeType === 'number' } function n (b) { var d = b && b.constructor; return !(!J(b, !0) || u(b) || !d || !d.name || d.name === 'Object') } function m (b) { return typeof b === 'number' && !isNaN(b) && Infinity > b && -Infinity < b } function g (b) { return typeof b !== 'undefined' && b !== null } function c (b, d, h) {
var y; z(d) ? g(h) ? b.setAttribute(d, h) : b && b.getAttribute && ((y = b.getAttribute(d)) || d !==
'class' || (y = b.getAttribute(d + 'Name'))) : I(d, function (d, y) { b.setAttribute(y, d) }); return y
} function e (b, d) { var y; b || (b = {}); for (y in d)b[y] = d[y]; return b } function l () { for (var b = arguments, d = b.length, h = 0; h < d; h++) { var c = b[h]; if (typeof c !== 'undefined' && c !== null) return c } } function f (b, d) { a.isMS && !a.svg && d && typeof d.opacity !== 'undefined' && (d.filter = 'alpha(opacity=' + 100 * d.opacity + ')'); e(b.style, d) } function v (b, d, h, c, p) {
b = t.createElement(b); d && e(b, d); p && f(b, { padding: '0', border: 'none', margin: '0' }); h && f(b, h); c && c.appendChild(b)
return b
} function q (b, d) { return parseFloat(b.toPrecision(d || 14)) } function k (b, d, c) {
var y = a.getStyle || k; if (d === 'width') return d = Math.min(b.offsetWidth, b.scrollWidth), c = b.getBoundingClientRect && b.getBoundingClientRect().width, c < d && c >= d - 1 && (d = Math.floor(c)), Math.max(0, d - (y(b, 'padding-left', !0) || 0) - (y(b, 'padding-right', !0) || 0)); if (d === 'height') return Math.max(0, Math.min(b.offsetHeight, b.scrollHeight) - (y(b, 'padding-top', !0) || 0) - (y(b, 'padding-bottom', !0) || 0)); h.getComputedStyle || r(27, !0); if (b = h.getComputedStyle(b,
void 0)) { var e = b.getPropertyValue(d); l(c, d !== 'opacity') && (e = E(e)) } return e
} function I (b, d, h) { for (var y in b)Object.hasOwnProperty.call(b, y) && d.call(h || b[y], b[y], y, b) } function D (b, d, h) {
function y (d, H) { var K = b.removeEventListener || a.removeEventListenerPolyfill; K && K.call(b, d, H, !1) } function c (h) { var H; if (b.nodeName) { if (d) { var K = {}; K[d] = !0 } else K = h; I(K, function (b, d) { if (h[d]) for (H = h[d].length; H--;)y(d, h[d][H].fn) }) } } var e = typeof b === 'function' && b.prototype || b; if (Object.hasOwnProperty.call(e, 'hcEvents')) {
var p =
e.hcEvents; d ? (e = p[d] || [], h ? (p[d] = e.filter(function (b) { return h !== b.fn }), y(d, h)) : (c(p), p[d] = [])) : (c(p), delete e.hcEvents)
}
} function B (b, d, h, c) {
h = h || {}; if (t.createEvent && (b.dispatchEvent || b.fireEvent && b !== a)) { var y = t.createEvent('Events'); y.initEvent(d, !0, !0); h = e(y, h); b.dispatchEvent ? b.dispatchEvent(h) : b.fireEvent(d, h) } else if (b.hcEvents) {
h.target || e(h, { preventDefault: function () { h.defaultPrevented = !0 }, target: b, type: d }); y = []; for (var p = b, k = !1; p.hcEvents;) {
Object.hasOwnProperty.call(p, 'hcEvents') && p.hcEvents[d] &&
(y.length && (k = !0), y.unshift.apply(y, p.hcEvents[d])), p = Object.getPrototypeOf(p)
}k && y.sort(function (b, d) { return b.order - d.order }); y.forEach(function (d) { !1 === d.fn.call(b, h) && h.preventDefault() })
}c && !h.defaultPrevented && c.call(b, h)
} var O = a.charts; var t = a.doc; var h = a.win; (r || (r = {})).messages = []; var d; Math.easeInOutSine = function (b) { return -0.5 * (Math.cos(Math.PI * b) - 1) }; var b = Array.prototype.find ? function (b, d) { return b.find(d) } : function (b, d) { var h; var y = b.length; for (h = 0; h < y; h++) if (d(b[h], h)) return b[h] }; I({
map: 'map',
each: 'forEach',
grep: 'filter',
reduce: 'reduce',
some: 'some'
}, function (b, d) { a[d] = function (h) { var y; r(32, !1, void 0, (y = {}, y['Highcharts.' + d] = 'use Array.' + b, y)); return Array.prototype[b].apply(h, [].slice.call(arguments, 1)) } }); var p; var G = (function () { var b = Math.random().toString(36).substring(2, 9) + '-'; var d = 0; return function () { return 'highcharts-' + (p ? '' : b) + d++ } }()); h.jQuery && (h.jQuery.fn.highcharts = function () {
var b = [].slice.call(arguments); if (this[0]) {
return b[0] ? (new (a[z(b[0]) ? b.shift() : 'Chart'])(this[0], b[0], b[1]), this) : O[c(this[0],
'data-highcharts-chart')]
}
}); b = {
addEvent: function (b, d, h, c) {
void 0 === c && (c = {}); var y = typeof b === 'function' && b.prototype || b; Object.hasOwnProperty.call(y, 'hcEvents') || (y.hcEvents = {}); y = y.hcEvents; a.Point && b instanceof a.Point && b.series && b.series.chart && (b.series.chart.runTrackerClick = !0); var p = b.addEventListener || a.addEventListenerPolyfill; p && p.call(b, d, h, a.supportsPassiveEvents ? { passive: void 0 === c.passive ? d.indexOf('touch') !== -1 : c.passive, capture: !1 } : !1); y[d] || (y[d] = []); y[d].push({
fn: h,
order: typeof c.order ===
'number' ? c.order : Infinity
}); y[d].sort(function (b, d) { return b.order - d.order }); return function () { D(b, d, h) }
},
arrayMax: function (b) { for (var d = b.length, h = b[0]; d--;)b[d] > h && (h = b[d]); return h },
arrayMin: function (b) { for (var d = b.length, h = b[0]; d--;)b[d] < h && (h = b[d]); return h },
attr: c,
clamp: function (b, d, h) { return b > d ? b < h ? b : h : d },
cleanRecursively: C,
clearTimeout: function (b) { g(b) && clearTimeout(b) },
correctFloat: q,
createElement: v,
css: f,
defined: g,
destroyObjectProperties: function (b, d) {
I(b, function (h, c) {
h && h !== d &&
h.destroy && h.destroy(); delete b[c]
})
},
discardElement: function (b) { d || (d = v('div')); b && d.appendChild(b); d.innerHTML = '' },
erase: function (b, d) { for (var h = b.length; h--;) if (b[h] === d) { b.splice(h, 1); break } },
error: r,
extend: e,
extendClass: function (b, d) { var h = function () {}; h.prototype = new b(); e(h.prototype, d); return h },
find: b,
fireEvent: B,
getMagnitude: function (b) { return Math.pow(10, Math.floor(Math.log(b) / Math.LN10)) },
getNestedProperty: function (b, d) {
for (b = b.split('.'); b.length && g(d);) {
var c = b.shift(); if (typeof c ===
'undefined' || c === '__proto__') return; d = d[c]; if (!g(d) || typeof d === 'function' || typeof d.nodeType === 'number' || d === h) return
} return d
},
getStyle: k,
inArray: function (b, d, h) { r(32, !1, void 0, { 'Highcharts.inArray': 'use Array.indexOf' }); return d.indexOf(b, h) },
isArray: x,
isClass: n,
isDOMElement: u,
isFunction: function (b) { return typeof b === 'function' },
isNumber: m,
isObject: J,
isString: z,
keys: function (b) { r(32, !1, void 0, { 'Highcharts.keys': 'use Object.keys' }); return Object.keys(b) },
merge: function () {
var b; var d = arguments; var h = {}; var c = function (b,
d) { typeof b !== 'object' && (b = {}); I(d, function (h, H) { H !== '__proto__' && H !== 'constructor' && (!J(h, !0) || n(h) || u(h) ? b[H] = d[H] : b[H] = c(b[H] || {}, h)) }); return b }; !0 === d[0] && (h = d[1], d = Array.prototype.slice.call(d, 2)); var p = d.length; for (b = 0; b < p; b++)h = c(h, d[b]); return h
},
normalizeTickInterval: function (b, d, h, c, p) {
var e = b; h = l(h, 1); var k = b / h; d || (d = p ? [1, 1.2, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10] : [1, 2, 2.5, 5, 10], !1 === c && (h === 1 ? d = d.filter(function (b) { return b % 1 === 0 }) : h <= 0.1 && (d = [1 / h]))); for (c = 0; c < d.length && !(e = d[c], p && e * h >= b || !p && k <= (d[c] +
(d[c + 1] || d[c])) / 2); c++);return e = q(e * h, -Math.round(Math.log(0.001) / Math.LN10))
},
objectEach: I,
offset: function (b) { var d = t.documentElement; b = b.parentElement || b.parentNode ? b.getBoundingClientRect() : { top: 0, left: 0, width: 0, height: 0 }; return { top: b.top + (h.pageYOffset || d.scrollTop) - (d.clientTop || 0), left: b.left + (h.pageXOffset || d.scrollLeft) - (d.clientLeft || 0), width: b.width, height: b.height } },
pad: function (b, d, h) { return Array((d || 2) + 1 - String(b).replace('-', '').length).join(h || '0') + b },
pick: l,
pInt: E,
relativeLength: function (b,
d, h) { return /%$/.test(b) ? d * parseFloat(b) / 100 + (h || 0) : parseFloat(b) },
removeEvent: D,
splat: function (b) { return x(b) ? b : [b] },
stableSort: function (b, d) { var h = b.length; var c; var p; for (p = 0; p < h; p++)b[p].safeI = p; b.sort(function (b, h) { c = d(b, h); return c === 0 ? b.safeI - h.safeI : c }); for (p = 0; p < h; p++) delete b[p].safeI },
syncTimeout: function (b, d, h) { if (d > 0) return setTimeout(b, d, h); b.call(0, h); return -1 },
timeUnits: { millisecond: 1, second: 1E3, minute: 6E4, hour: 36E5, day: 864E5, week: 6048E5, month: 24192E5, year: 314496E5 },
uniqueKey: G,
useSerialIds: function (b) {
return p =
l(b, p)
},
wrap: function (b, d, h) { var c = b[d]; b[d] = function () { var b = Array.prototype.slice.call(arguments); var d = arguments; var p = this; p.proceed = function () { c.apply(p, arguments.length ? arguments : d) }; b.unshift(c); b = h.apply(this, b); p.proceed = null; return b } }
}; ''; return b
}); M(a, 'Core/Color/Palette.js', [], function () {
return {
colors: '#7cb5ec #434348 #90ed7d #f7a35c #8085e9 #f15c80 #e4d354 #2b908f #f45b5b #91e8e1'.split(' '),
backgroundColor: '#ffffff',
neutralColor100: '#000000',
neutralColor80: '#333333',
neutralColor60: '#666666',
neutralColor40: '#999999',
neutralColor20: '#cccccc',
neutralColor10: '#e6e6e6',
neutralColor5: '#f2f2f2',
neutralColor3: '#f7f7f7',
highlightColor100: '#003399',
highlightColor80: '#335cad',
highlightColor60: '#6685c2',
highlightColor20: '#ccd6eb',
highlightColor10: '#e6ebf5',
positiveColor: '#06b535',
negativeColor: '#f21313'
}
}); M(a, 'Core/Chart/ChartDefaults.js', [a['Core/Color/Palette.js']], function (a) {
return {
panning: { enabled: !1, type: 'x' },
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 } },
zoomBySingleTouch: !1,
width: null,
height: null,
borderColor: a.highlightColor80,
backgroundColor: a.backgroundColor,
plotBorderColor: a.neutralColor20
}
}); M(a, 'Core/Color/Color.js', [a['Core/Globals.js'], a['Core/Utilities.js']], function (a, w) {
var r = w.isNumber; var E = w.merge; var z = w.pInt; w = (function () {
function x (r) {
this.rgba = [NaN, NaN, NaN, NaN]; this.input = r; var u = a.Color; if (u && u !== x) return new u(r); if (!(this instanceof x)) return new x(r)
this.init(r)
}x.parse = function (a) { return a ? new x(a) : x.None }; x.prototype.init = function (a) {
var u; if (typeof a === 'object' && typeof a.stops !== 'undefined') this.stops = a.stops.map(function (c) { return new x(c[1]) }); else if (typeof a === 'string') {
this.input = a = x.names[a.toLowerCase()] || a; if (a.charAt(0) === '#') { var n = a.length; var m = parseInt(a.substr(1), 16); n === 7 ? u = [(m & 16711680) >> 16, (m & 65280) >> 8, m & 255, 1] : n === 4 && (u = [(m & 3840) >> 4 | (m & 3840) >> 8, (m & 240) >> 4 | m & 240, (m & 15) << 4 | m & 15, 1]) } if (!u) {
for (m = x.parsers.length; m-- && !u;) {
var g =
x.parsers[m]; (n = g.regex.exec(a)) && (u = g.parse(n))
}
}
}u && (this.rgba = u)
}; x.prototype.get = function (a) { var u = this.input; var n = this.rgba; if (typeof u === 'object' && typeof this.stops !== 'undefined') { var m = E(u); m.stops = [].slice.call(m.stops); this.stops.forEach(function (g, c) { m.stops[c] = [m.stops[c][0], g.get(a)] }); return m } return n && r(n[0]) ? a === 'rgb' || !a && n[3] === 1 ? 'rgb(' + n[0] + ',' + n[1] + ',' + n[2] + ')' : a === 'a' ? '' + n[3] : 'rgba(' + n.join(',') + ')' : u }; x.prototype.brighten = function (a) {
var u = this.rgba; if (this.stops) this.stops.forEach(function (m) { m.brighten(a) })
else if (r(a) && a !== 0) for (var n = 0; n < 3; n++)u[n] += z(255 * a), u[n] < 0 && (u[n] = 0), u[n] > 255 && (u[n] = 255); return this
}; x.prototype.setOpacity = function (a) { this.rgba[3] = a; return this }; x.prototype.tweenTo = function (a, u) { var n = this.rgba; var m = a.rgba; if (!r(n[0]) || !r(m[0])) return a.input || 'none'; a = m[3] !== 1 || n[3] !== 1; return (a ? 'rgba(' : 'rgb(') + Math.round(m[0] + (n[0] - m[0]) * (1 - u)) + ',' + Math.round(m[1] + (n[1] - m[1]) * (1 - u)) + ',' + Math.round(m[2] + (n[2] - m[2]) * (1 - u)) + (a ? ',' + (m[3] + (n[3] - m[3]) * (1 - u)) : '') + ')' }; x.names = { white: '#ffffff', black: '#000000' }
x.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 [z(a[1]), z(a[2]), z(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 [z(a[1]), z(a[2]), z(a[3]), 1] } }]; x.None = new x(''); return x
}()); ''; return w
}); M(a, 'Core/Time.js', [a['Core/Globals.js'], a['Core/Utilities.js']], function (a, w) {
var r = a.win; var E = w.defined; var z = w.error; var x = w.extend; var J = w.isObject; var u = w.merge
var n = w.objectEach; var m = w.pad; var g = w.pick; var c = w.splat; var e = w.timeUnits; var l = a.isSafari && r.Intl && r.Intl.DateTimeFormat.prototype.formatRange; var f = a.isSafari && r.Intl && !r.Intl.DateTimeFormat.prototype.formatRange; w = (function () {
function v (c) { this.options = {}; this.variableTimezone = this.useUTC = !1; this.Date = r.Date; this.getTimezoneOffset = this.timezoneOffsetFunction(); this.update(c) }v.prototype.get = function (c, e) {
if (this.variableTimezone || this.timezoneOffset) {
var k = e.getTime(); var f = k - this.getTimezoneOffset(e); e.setTime(f); c = e['getUTC' +
c](); e.setTime(k); return c
} return this.useUTC ? e['getUTC' + c]() : e['get' + c]()
}; v.prototype.set = function (c, e, f) { if (this.variableTimezone || this.timezoneOffset) { if (c === 'Milliseconds' || c === 'Seconds' || c === 'Minutes' && this.getTimezoneOffset(e) % 36E5 === 0) return e['setUTC' + c](f); var k = this.getTimezoneOffset(e); k = e.getTime() - k; e.setTime(k); e['setUTC' + c](f); c = this.getTimezoneOffset(e); k = e.getTime() + c; return e.setTime(k) } return this.useUTC || l && c === 'FullYear' ? e['setUTC' + c](f) : e['set' + c](f) }; v.prototype.update = function (c) {
var e =
g(c && c.useUTC, !0); this.options = c = u(!0, this.options || {}, c); this.Date = c.Date || r.Date || Date; this.timezoneOffset = (this.useUTC = e) && c.timezoneOffset; this.getTimezoneOffset = this.timezoneOffsetFunction(); this.variableTimezone = e && !(!c.getTimezoneOffset && !c.timezone)
}; v.prototype.makeTime = function (c, e, l, v, B, a) {
if (this.useUTC) { var k = this.Date.UTC.apply(0, arguments); var h = this.getTimezoneOffset(k); k += h; var d = this.getTimezoneOffset(k); h !== d ? k += d - h : h - 36E5 !== this.getTimezoneOffset(k - 36E5) || f || (k -= 36E5) } else {
k = (new this.Date(c,
e, g(l, 1), g(v, 0), g(B, 0), g(a, 0))).getTime()
} return k
}; v.prototype.timezoneOffsetFunction = function () { var c = this; var e = this.options; var f = e.moment || r.moment; if (!this.useUTC) return function (c) { return 6E4 * (new Date(c.toString())).getTimezoneOffset() }; if (e.timezone) { if (f) return function (c) { return 6E4 * -f.tz(c, e.timezone).utcOffset() }; z(25) } return this.useUTC && e.getTimezoneOffset ? function (c) { return 6E4 * e.getTimezoneOffset(c.valueOf()) } : function () { return 6E4 * (c.timezoneOffset || 0) } }; v.prototype.dateFormat = function (c,
e, f) {
if (!E(e) || isNaN(e)) return a.defaultOptions.lang && a.defaultOptions.lang.invalidDate || ''; c = g(c, '%Y-%m-%d %H:%M:%S'); var k = this; var l = new this.Date(e); var q = this.get('Hours', l); var t = this.get('Day', l); var h = this.get('Date', l); var d = this.get('Month', l); var b = this.get('FullYear', l); var p = a.defaultOptions.lang; var G = p && p.weekdays; var y = p && p.shortWeekdays; l = x({
a: y ? y[t] : G[t].substr(0, 3),
A: G[t],
d: m(h),
e: m(h, 2, ' '),
w: t,
b: p.shortMonths[d],
B: p.months[d],
m: m(d + 1),
o: d + 1,
y: b.toString().substr(2, 2),
Y: b,
H: m(q),
k: q,
I: m(q % 12 || 12),
l: q % 12 || 12,
M: m(this.get('Minutes',
l)),
p: q < 12 ? 'AM' : 'PM',
P: q < 12 ? 'am' : 'pm',
S: m(l.getSeconds()),
L: m(Math.floor(e % 1E3), 3)
}, a.dateFormats); n(l, function (b, d) { for (;c.indexOf('%' + d) !== -1;)c = c.replace('%' + d, typeof b === 'function' ? b.call(k, e) : b) }); return f ? c.substr(0, 1).toUpperCase() + c.substr(1) : c
}; v.prototype.resolveDTLFormat = function (e) { return J(e, !0) ? e : (e = c(e), { main: e[0], from: e[1], to: e[2] }) }; v.prototype.getTimeTicks = function (c, k, f, l) {
var q = this; var v = []; var t = {}; var h = new q.Date(k); var d = c.unitRange; var b = c.count || 1; var p; l = g(l, 1); if (E(k)) {
q.set('Milliseconds', h,
d >= e.second ? 0 : b * Math.floor(q.get('Milliseconds', h) / b)); d >= e.second && q.set('Seconds', h, d >= e.minute ? 0 : b * Math.floor(q.get('Seconds', h) / b)); d >= e.minute && q.set('Minutes', h, d >= e.hour ? 0 : b * Math.floor(q.get('Minutes', h) / b)); d >= e.hour && q.set('Hours', h, d >= e.day ? 0 : b * Math.floor(q.get('Hours', h) / b)); d >= e.day && q.set('Date', h, d >= e.month ? 1 : Math.max(1, b * Math.floor(q.get('Date', h) / b))); if (d >= e.month) { q.set('Month', h, d >= e.year ? 0 : b * Math.floor(q.get('Month', h) / b)); var G = q.get('FullYear', h) }d >= e.year && q.set('FullYear',
h, G - G % b); d === e.week && (G = q.get('Day', h), q.set('Date', h, q.get('Date', h) - G + l + (G < l ? -7 : 0))); G = q.get('FullYear', h); l = q.get('Month', h); var y = q.get('Date', h); var a = q.get('Hours', h); k = h.getTime(); !q.variableTimezone && q.useUTC || !E(f) || (p = f - k > 4 * e.month || q.getTimezoneOffset(k) !== q.getTimezoneOffset(f)); k = h.getTime(); for (h = 1; k < f;) {
v.push(k), k = d === e.year ? q.makeTime(G + h * b, 0) : d === e.month ? q.makeTime(G, l + h * b) : !p || d !== e.day && d !== e.week ? p && d === e.hour && b > 1 ? q.makeTime(G, l, y, a + h * b) : k + d * b : q.makeTime(G, l, y + h * b * (d === e.day ? 1 : 7)),
h++
}v.push(k); d <= e.hour && v.length < 1E4 && v.forEach(function (b) { b % 18E5 === 0 && q.dateFormat('%H%M%S%L', b) === '000000000' && (t[b] = 'day') })
}v.info = x(c, { higherRanks: t, totalRange: d * b }); return v
}; v.prototype.getDateFormat = function (c, k, f, g) {
var l = this.dateFormat('%m-%d %H:%M:%S.%L', k); var q = { millisecond: 15, second: 12, minute: 9, hour: 6, day: 3 }; var t = 'millisecond'; for (h in e) {
if (c === e.week && +this.dateFormat('%w', k) === f && l.substr(6) === '00:00:00.000') { var h = 'week'; break } if (e[h] > c) { h = t; break } if (q[h] && l.substr(q[h]) !== '01-01 00:00:00.000'.substr(q[h])) break
h !== 'week' && (t = h)
} if (h) var d = this.resolveDTLFormat(g[h]).main; return d
}; return v
}()); ''; return w
}); M(a, 'Core/DefaultOptions.js', [a['Core/Chart/ChartDefaults.js'], a['Core/Color/Color.js'], a['Core/Globals.js'], a['Core/Color/Palette.js'], a['Core/Time.js'], a['Core/Utilities.js']], function (a, w, C, E, z, x) {
w = w.parse; var r = x.merge; var u = {
colors: E.colors,
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: a,
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: E.neutralColor80 } },
legend: {
enabled: !0,
align: 'center',
alignColumns: !0,
className: 'highcharts-no-tooltip',
layout: 'horizontal',
labelFormatter: function () { return this.name },
borderColor: E.neutralColor40,
borderRadius: 0,
navigation: { activeColor: E.highlightColor100, inactiveColor: E.neutralColor20 },
itemStyle: { color: E.neutralColor80, cursor: 'pointer', fontSize: '12px', fontWeight: 'bold', textOverflow: 'ellipsis' },
itemHoverStyle: { color: E.neutralColor100 },
itemHiddenStyle: { color: E.neutralColor20 },
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: E.backgroundColor, opacity: 0.5, textAlign: 'center' } },
tooltip: {
enabled: !0,
animation: C.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: '',
headerShape: 'callout',
hideDelay: 500,
padding: 8,
shape: 'callout',
shared: !1,
snap: C.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: w(E.neutralColor3).setOpacity(0.85).get(),
borderWidth: 1,
shadow: !0,
stickOnContact: !1,
style: { color: E.neutralColor80, cursor: 'default', fontSize: '12px', whiteSpace: 'nowrap' },
useHTML: !1
},
credits: { enabled: !0, href: 'https://www.highcharts.com?credits', position: { align: 'right', x: -10, verticalAlign: 'bottom', y: -5 }, style: { cursor: 'pointer', color: E.neutralColor40, fontSize: '9px' }, text: 'Highcharts.com' }
}; u.chart.styledMode = !1; ''; var n = new z(r(u.global, u.time)); a = {
defaultOptions: u,
defaultTime: n,
getOptions: function () { return u },
setOptions: function (a) {
r(!0, u, a); if (a.time || a.global) {
C.time
? C.time.update(r(u.global, u.time, a.global, a.time)) : C.time = n
} return u
}
}; ''; return a
}); M(a, 'Core/Animation/Fx.js', [a['Core/Color/Color.js'], a['Core/Globals.js'], a['Core/Utilities.js']], function (a, w, C) {
var r = a.parse; var z = w.win; var x = C.isNumber; var J = C.objectEach; return (function () {
function a (a, m, g) { this.pos = NaN; this.options = m; this.elem = a; this.prop = g }a.prototype.dSetter = function () {
var a = this.paths; var m = a && a[0]; a = a && a[1]; var g = this.now || 0; var c = []; if (g !== 1 && m && a) {
if (m.length === a.length && g < 1) {
for (var e = 0; e < a.length; e++) {
for (var l =
m[e], f = a[e], v = [], q = 0; q < f.length; q++) { var k = l[q]; var I = f[q]; x(k) && x(I) && (f[0] !== 'A' || q !== 4 && q !== 5) ? v[q] = k + g * (I - k) : v[q] = I }c.push(v)
}
} else c = a
} else c = this.toD || []; this.elem.attr('d', c, void 0, !0)
}; a.prototype.update = function () { var a = this.elem; var m = this.prop; var g = this.now; var c = this.options.step; if (this[m + 'Setter']) this[m + 'Setter'](); else a.attr ? a.element && a.attr(m, g, null, !0) : a.style[m] = g + this.unit; c && c.call(a, g, this) }; a.prototype.run = function (n, m, g) {
var c = this; var e = c.options; var l = function (e) { return l.stopped ? !1 : c.step(e) }
var f = z.requestAnimationFrame || function (c) { setTimeout(c, 13) }; var v = function () { for (var c = 0; c < a.timers.length; c++)a.timers[c]() || a.timers.splice(c--, 1); a.timers.length && f(v) }; n !== m || this.elem['forceAnimate:' + this.prop] ? (this.startTime = +new Date(), this.start = n, this.end = m, this.unit = g, this.now = this.start, this.pos = 0, l.elem = this.elem, l.prop = this.prop, l() && a.timers.push(l) === 1 && f(v)) : (delete e.curAnim[this.prop], e.complete && Object.keys(e.curAnim).length === 0 && e.complete.call(this.elem))
}; a.prototype.step = function (a) {
var m =
+new Date(); var g = this.options; var c = this.elem; var e = g.complete; var l = g.duration; var f = g.curAnim; if (c.attr && !c.element)a = !1; else if (a || m >= l + this.startTime) { this.now = this.end; this.pos = 1; this.update(); var v = f[this.prop] = !0; J(f, function (c) { !0 !== c && (v = !1) }); v && e && e.call(c); a = !1 } else this.pos = g.easing((m - this.startTime) / l), this.now = this.start + (this.end - this.start) * this.pos, this.update(), a = !0; return a
}; a.prototype.initPath = function (a, m, g) {
function c (c, e) {
for (;c.length < D;) {
var f = c[0]; var h = e[D - c.length]; h && f[0] === 'M' && (c[0] = h[0] ===
'C' ? ['C', f[1], f[2], f[1], f[2], f[1], f[2]] : ['L', f[1], f[2]]); c.unshift(f); v && (f = c.pop(), c.push(c[c.length - 1], f))
}
} function e (c, e) { for (;c.length < D;) if (e = c[Math.floor(c.length / q) - 1].slice(), e[0] === 'C' && (e[1] = e[5], e[2] = e[6]), v) { var f = c[Math.floor(c.length / q)].slice(); c.splice(c.length / 2, 0, e, f) } else c.push(e) } var l = a.startX; var f = a.endX; g = g.slice(); var v = a.isArea; var q = v ? 2 : 1; m = m && m.slice(); if (!m) return [g, g]; if (l && f && f.length) {
for (a = 0; a < l.length; a++) {
if (l[a] === f[0]) { var k = a; break } else if (l[0] === f[f.length - l.length +
a]) { k = a; var I = !0; break } else if (l[l.length - 1] === f[f.length - l.length + a]) { k = l.length - a; break }
} typeof k === 'undefined' && (m = [])
} if (m.length && x(k)) { var D = g.length + k * q; I ? (c(m, g), e(g, m)) : (c(g, m), e(m, g)) } return [m, g]
}; a.prototype.fillSetter = function () { a.prototype.strokeSetter.apply(this, arguments) }; a.prototype.strokeSetter = function () { this.elem.attr(this.prop, r(this.start).tweenTo(r(this.end), this.pos), null, !0) }; a.timers = []; return a
}())
}); M(a, 'Core/Animation/AnimationUtilities.js', [a['Core/Animation/Fx.js'], a['Core/Utilities.js']],
function (a, w) {
function r (c) { return n(c) ? m({ duration: 500, defer: 0 }, c) : { duration: c ? 500 : 0, defer: 0 } } function E (c, g) { for (var e = a.timers.length; e--;)a.timers[e].elem !== c || g && g !== a.timers[e].prop || (a.timers[e].stopped = !0) } var z = w.defined; var x = w.getStyle; var J = w.isArray; var u = w.isNumber; var n = w.isObject; var m = w.merge; var g = w.objectEach; var c = w.pick; return {
animate: function (c, l, f) {
var e; var q = ''; var k; var I; if (!n(f)) { var D = arguments; f = { duration: D[2], easing: D[3], complete: D[4] } }u(f.duration) || (f.duration = 400); f.easing = typeof f.easing === 'function'
? f.easing : Math[f.easing] || Math.easeInOutSine; f.curAnim = m(l); g(l, function (g, v) { E(c, v); I = new a(c, f, v); k = void 0; v === 'd' && J(l.d) ? (I.paths = I.initPath(c, c.pathArray, l.d), I.toD = l.d, e = 0, k = 1) : c.attr ? e = c.attr(v) : (e = parseFloat(x(c, v)) || 0, v !== 'opacity' && (q = 'px')); k || (k = g); typeof k === 'string' && k.match('px') && (k = k.replace(/px/g, '')); I.run(e, k, q) })
},
animObject: r,
getDeferredAnimation: function (c, g, f) {
var e = r(g); var a = 0; var k = 0; (f ? [f] : c.series).forEach(function (c) {
c = r(c.options.animation); a = g && z(g.defer) ? e.defer : Math.max(a,
c.duration + c.defer); k = Math.min(e.duration, c.duration)
}); c.renderer.forExport && (a = 0); return { defer: Math.max(0, a - k), duration: Math.min(a, k) }
},
setAnimation: function (e, g) { g.renderer.globalAnimation = c(e, g.options.chart.animation, !0) },
stop: E
}
}); M(a, 'Core/Renderer/HTML/AST.js', [a['Core/Globals.js'], a['Core/Utilities.js']], function (a, w) {
var r = a.SVG_NS; var E = w.attr; var z = w.createElement; var x = w.discardElement; var J = w.error; var u = w.isString; var n = w.objectEach; var m = w.splat; try { var g = !!(new DOMParser()).parseFromString('', 'text/html') } catch (c) {
g =
!1
}w = (function () {
function c (c) { this.nodes = typeof c === 'string' ? this.parseMarkup(c) : c }c.filterUserAttributes = function (e) { n(e, function (g, f) { var a = !0; c.allowedAttributes.indexOf(f) === -1 && (a = !1); ['background', 'dynsrc', 'href', 'lowsrc', 'src'].indexOf(f) !== -1 && (a = u(g) && c.allowedReferences.some(function (c) { return g.indexOf(c) === 0 })); a || (J("Highcharts warning: Invalid attribute '" + f + "' in config"), delete e[f]) }); return e }; c.setElementHTML = function (e, g) { e.innerHTML = ''; g && (new c(g)).addToDOM(e) }; c.prototype.addToDOM =
function (e) {
function g (e, l) {
var f; m(e).forEach(function (e) {
var k = e.tagName; var q = e.textContent ? a.doc.createTextNode(e.textContent) : void 0; if (k) {
if (k === '#text') var v = q; else if (c.allowedTags.indexOf(k) !== -1) { k = a.doc.createElementNS(k === 'svg' ? r : l.namespaceURI || r, k); var m = e.attributes || {}; n(e, function (c, h) { h !== 'tagName' && h !== 'attributes' && h !== 'children' && h !== 'textContent' && (m[h] = c) }); E(k, c.filterUserAttributes(m)); q && k.appendChild(q); g(e.children || [], k); v = k } else {
J("Highcharts warning: Invalid tagName '" + k +
"' in config")
}
} v && l.appendChild(v); f = v
}); return f
} return g(this.nodes, e)
}; c.prototype.parseMarkup = function (c) {
var e = []; c = c.trim(); if (g)c = (new DOMParser()).parseFromString(c, 'text/html'); else { var f = z('div'); f.innerHTML = c; c = { body: f } } var a = function (c, e) {
var f = c.nodeName.toLowerCase(); var k = { tagName: f }; f === '#text' && (k.textContent = c.textContent || ''); if (f = c.attributes) { var g = {}; [].forEach.call(f, function (c) { g[c.name] = c.value }); k.attributes = g } if (c.childNodes.length) {
var l = []; [].forEach.call(c.childNodes, function (c) {
a(c,
l)
}); l.length && (k.children = l)
}e.push(k)
}; [].forEach.call(c.body.childNodes, function (c) { return a(c, e) }); f && x(f); return e
}; c.allowedAttributes = 'aria-controls aria-describedby aria-expanded aria-haspopup aria-hidden aria-label aria-labelledby aria-live aria-pressed aria-readonly aria-roledescription aria-selected class clip-path color colspan cx cy d dx dy disabled fill height href id in markerHeight markerWidth offset opacity orient padding paddingLeft paddingRight patternUnits r refX refY role scope slope src startOffset stdDeviation stroke stroke-linecap stroke-width style tableValues result rowspan summary target tabindex text-align textAnchor textLength type valign width x x1 x2 y y1 y2 zIndex'.split(' ')
c.allowedReferences = 'https:// http:// mailto: / ../ ./ #'.split(' '); c.allowedTags = 'a b br button caption circle clipPath code dd defs div dl dt em feComponentTransfer feFuncA feFuncB feFuncG feFuncR feGaussianBlur feOffset feMerge feMergeNode filter h1 h2 h3 h4 h5 h6 hr i img li linearGradient marker ol p path pattern pre rect small span stop strong style sub sup svg table text thead tbody tspan td th tr u ul #text'.split(' '); return c
}()); ''; return w
}); M(a, 'Core/FormatUtilities.js', [a['Core/DefaultOptions.js'],
a['Core/Utilities.js']], function (a, w) {
function r (a, g, c, e) {
a = +a || 0; g = +g; var l = E.lang; var f = (a.toString().split('.')[1] || '').split('e')[0].length; var v = a.toString().split('e'); var q = g; if (g === -1)g = Math.min(f, 20); else if (!J(g))g = 2; else if (g && v[1] && v[1] < 0) { var k = g + +v[1]; k >= 0 ? (v[0] = (+v[0]).toExponential(k).split('e')[0], g = k) : (v[0] = v[0].split('.')[0] || 0, a = g < 20 ? (v[0] * Math.pow(10, v[1])).toFixed(g) : 0, v[1] = 0) }k = (Math.abs(v[1] ? v[0] : a) + Math.pow(10, -Math.max(g, f) - 1)).toFixed(g); f = String(n(k)); var m = f.length > 3 ? f.length % 3
: 0; c = u(c, l.decimalPoint); e = u(e, l.thousandsSep); a = (a < 0 ? '-' : '') + (m ? f.substr(0, m) + e : ''); a = +v[1] < 0 && !q ? '0' : a + f.substr(m).replace(/(\d{3})(?=\d)/g, '$1' + e); g && (a += c + k.slice(-g)); v[1] && +a !== 0 && (a += 'e' + v[1]); return a
} var E = a.defaultOptions; var z = a.defaultTime; var x = w.getNestedProperty; var J = w.isNumber; var u = w.pick; var n = w.pInt; return {
dateFormat: function (a, g, c) { return z.dateFormat(a, g, c) },
format: function (a, g, c) {
var e = '{'; var l = !1; var f = /f$/; var v = /\.([0-9])/; var q = E.lang; var k = c && c.time || z; c = c && c.numberFormatter || r; for (var m = []; a;) {
var D = a.indexOf(e)
if (D === -1) break; var B = a.slice(0, D); if (l) { B = B.split(':'); e = x(B.shift() || '', g); if (B.length && typeof e === 'number') if (B = B.join(':'), f.test(B)) { var u = parseInt((B.match(v) || ['', '-1'])[1], 10); e !== null && (e = c(e, u, q.decimalPoint, B.indexOf(',') > -1 ? q.thousandsSep : '')) } else e = k.dateFormat(B, e); m.push(e) } else m.push(B); a = a.slice(D + 1); e = (l = !l) ? '}' : '{'
}m.push(a); return m.join('')
},
numberFormat: r
}
}); M(a, 'Core/Renderer/RendererUtilities.js', [a['Core/Utilities.js']], function (a) {
var r = a.clamp; var C = a.pick; var E = a.stableSort
var z; (function (a) {
function x (a, n, m) {
var g = a; var c = g.reducedLen || n; var e = function (c, e) { return (e.rank || 0) - (c.rank || 0) }; var l = function (c, e) { return c.target - e.target }; var f; var v = !0; var q = []; var k = 0; for (f = a.length; f--;)k += a[f].size; if (k > c) { E(a, e); for (k = f = 0; k <= c;)k += a[f].size, f++; q = a.splice(f - 1, a.length) }E(a, l); for (a = a.map(function (c) { return { size: c.size, targets: [c.target], align: C(c.align, 0.5) } }); v;) {
for (f = a.length; f--;)c = a[f], e = (Math.min.apply(0, c.targets) + Math.max.apply(0, c.targets)) / 2, c.pos = r(e - c.size * c.align, 0, n - c.size); f = a.length
for (v = !1; f--;)f > 0 && a[f - 1].pos + a[f - 1].size > a[f].pos && (a[f - 1].size += a[f].size, a[f - 1].targets = a[f - 1].targets.concat(a[f].targets), a[f - 1].align = 0.5, a[f - 1].pos + a[f - 1].size > n && (a[f - 1].pos = n - a[f - 1].size), a.splice(f, 1), v = !0)
}g.push.apply(g, q); f = 0; a.some(function (c) {
var e = 0; return (c.targets || []).some(function () {
g[f].pos = c.pos + e; if (typeof m !== 'undefined' && Math.abs(g[f].pos - g[f].target) > m) {
return g.slice(0, f + 1).forEach(function (c) { return delete c.pos }), g.reducedLen = (g.reducedLen || n) - 0.1 * n, g.reducedLen > 0.1 * n && x(g,
n, m), !0
} e += g[f].size; f++; return !1
})
}); E(g, l); return g
}a.distribute = x
})(z || (z = {})); return z
}); M(a, 'Core/Renderer/SVG/SVGElement.js', [a['Core/Animation/AnimationUtilities.js'], a['Core/Renderer/HTML/AST.js'], a['Core/Color/Color.js'], a['Core/Globals.js'], a['Core/Color/Palette.js'], a['Core/Utilities.js']], function (a, w, C, E, z, x) {
var r = a.animate; var u = a.animObject; var n = a.stop; var m = E.deg2rad; var g = E.doc; var c = E.noop; var e = E.svg; var l = E.SVG_NS; var f = E.win; var v = x.addEvent; var q = x.attr; var k = x.createElement; var I = x.css; var D = x.defined; var B = x.erase; var O = x.extend
var t = x.fireEvent; var h = x.isArray; var d = x.isFunction; var b = x.isNumber; var p = x.isString; var G = x.merge; var y = x.objectEach; var L = x.pick; var F = x.pInt; var P = x.syncTimeout; var S = x.uniqueKey; a = (function () {
function a () { this.element = void 0; this.onEvents = {}; this.opacity = 1; this.renderer = void 0; this.SVG_NS = l; this.symbolCustomAttribs = 'x y width height r start end innerR anchorX anchorY rounded'.split(' ') }a.prototype._defaultGetter = function (b) {
b = L(this[b + 'Value'], this[b], this.element ? this.element.getAttribute(b) : null, 0); /^[\-0-9\.]+$/.test(b) && (b = parseFloat(b))
return b
}; a.prototype._defaultSetter = function (b, d, c) { c.setAttribute(d, b) }; a.prototype.add = function (b) { var d = this.renderer; var c = this.element; b && (this.parentGroup = b); this.parentInverted = b && b.inverted; typeof this.textStr !== 'undefined' && this.element.nodeName === 'text' && d.buildText(this); this.added = !0; if (!b || b.handleZ || this.zIndex) var K = this.zIndexSetter(); K || (b ? b.element : d.box).appendChild(c); if (this.onAdd) this.onAdd(); return this }; a.prototype.addClass = function (b, d) {
var c = d ? '' : this.attr('class') || ''; b = (b ||
'').split(/ /g).reduce(function (b, d) { c.indexOf(d) === -1 && b.push(d); return b }, c ? [c] : []).join(' '); b !== c && this.attr('class', b); return this
}; a.prototype.afterSetters = function () { this.doTransform && (this.updateTransform(), this.doTransform = !1) }; a.prototype.align = function (b, d, c) {
var K = {}; var h = this.renderer; var H = h.alignedObjects; var a; var e; var A; if (b) { if (this.alignOptions = b, this.alignByTranslate = d, !c || p(c)) this.alignTo = a = c || 'renderer', B(H, this), H.push(this), c = void 0 } else b = this.alignOptions, d = this.alignByTranslate, a = this.alignTo
c = L(c, h[a], a === 'scrollablePlotBox' ? h.plotBox : void 0, h); a = b.align; var f = b.verticalAlign; h = (c.x || 0) + (b.x || 0); H = (c.y || 0) + (b.y || 0); a === 'right' ? e = 1 : a === 'center' && (e = 2); e && (h += (c.width - (b.width || 0)) / e); K[d ? 'translateX' : 'x'] = Math.round(h); f === 'bottom' ? A = 1 : f === 'middle' && (A = 2); A && (H += (c.height - (b.height || 0)) / A); K[d ? 'translateY' : 'y'] = Math.round(H); this[this.placed ? 'animate' : 'attr'](K); this.placed = !0; this.alignAttr = K; return this
}; a.prototype.alignSetter = function (b) {
var d = { left: 'start', center: 'middle', right: 'end' }
d[b] && (this.alignValue = b, this.element.setAttribute('text-anchor', d[b]))
}; a.prototype.animate = function (b, d, c) { var h = this; var H = u(L(d, this.renderer.globalAnimation, !0)); d = H.defer; L(g.hidden, g.msHidden, g.webkitHidden, !1) && (H.duration = 0); H.duration !== 0 ? (c && (H.complete = c), P(function () { h.element && r(h, b, H) }, d)) : (this.attr(b, void 0, c), y(b, function (b, d) { H.step && H.step.call(this, b, { prop: d, pos: 1, elem: this }) }, this)); return this }; a.prototype.applyTextOutline = function (b) {
var d = this.element; b.indexOf('contrast') !== -1 &&
(b = b.replace(/contrast/g, this.renderer.getContrast(d.style.fill))); var c = b.split(' '); b = c[c.length - 1]; if ((c = c[0]) && c !== 'none' && E.svg) {
this.fakeTS = !0; this.ySetter = this.xSetter; c = c.replace(/(^[\d\.]+)(.*?)$/g, function (b, d, c) { return 2 * Number(d) + c }); this.removeTextOutline(); var h = g.createElementNS(l, 'tspan'); q(h, { class: 'highcharts-text-outline', fill: b, stroke: b, 'stroke-width': c, 'stroke-linejoin': 'round' }); [].forEach.call(d.childNodes, function (b) {
var d = b.cloneNode(!0); d.removeAttribute && ['fill', 'stroke',
'stroke-width', 'stroke'].forEach(function (b) { return d.removeAttribute(b) }); h.appendChild(d)
}); var a = g.createElementNS(l, 'tspan'); a.textContent = '\u200b'; ['x', 'y'].forEach(function (b) { var c = d.getAttribute(b); c && a.setAttribute(b, c) }); h.appendChild(a); d.insertBefore(h, d.firstChild)
}
}; a.prototype.attr = function (b, d, c, h) {
var K = this.element; var H = this.symbolCustomAttribs; var a; var e = this; var A; var p; if (typeof b === 'string' && typeof d !== 'undefined') { var f = b; b = {}; b[f] = d } typeof b === 'string' ? e = (this[b + 'Getter'] || this._defaultGetter).call(this,
b, K) : (y(b, function (d, c) { A = !1; h || n(this, c); this.symbolName && H.indexOf(c) !== -1 && (a || (this.symbolAttr(b), a = !0), A = !0); !this.rotation || c !== 'x' && c !== 'y' || (this.doTransform = !0); A || (p = this[c + 'Setter'] || this._defaultSetter, p.call(this, d, c, K), !this.styledMode && this.shadows && /^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(c) && this.updateShadows(c, d, p)) }, this), this.afterSetters()); c && c.call(this); return e
}; a.prototype.clip = function (b) {
return this.attr('clip-path', b ? 'url(' + this.renderer.url + '#' + b.id +
')' : 'none')
}; a.prototype.crisp = function (b, d) { d = d || b.strokeWidth || 0; var c = Math.round(d) % 2 / 2; b.x = Math.floor(b.x || this.x || 0) + c; b.y = Math.floor(b.y || this.y || 0) + c; b.width = Math.floor((b.width || this.width || 0) - 2 * c); b.height = Math.floor((b.height || this.height || 0) - 2 * c); D(b.strokeWidth) && (b.strokeWidth = d); return b }; a.prototype.complexColor = function (b, d, c) {
var K = this.renderer; var a; var H; var e; var p; var A; var f; var k; var g; var l; var q; var v = []; var F; t(this.renderer, 'complexColor', { args: arguments }, function () {
b.radialGradient ? H = 'radialGradient' : b.linearGradient &&
(H = 'linearGradient'); if (H) {
e = b[H]; A = K.gradients; f = b.stops; l = c.radialReference; h(e) && (b[H] = e = { x1: e[0], y1: e[1], x2: e[2], y2: e[3], gradientUnits: 'userSpaceOnUse' }); H === 'radialGradient' && l && !D(e.gradientUnits) && (p = e, e = G(e, K.getRadialAttr(l, p), { gradientUnits: 'userSpaceOnUse' })); y(e, function (b, d) { d !== 'id' && v.push(d, b) }); y(f, function (b) { v.push(b) }); v = v.join(','); if (A[v])q = A[v].attr('id'); else {
e.id = q = S(); var N = A[v] = K.createElement(H).attr(e).add(K.defs); N.radAttr = p; N.stops = []; f.forEach(function (b) {
b[1].indexOf('rgba') === 0
? (a = C.parse(b[1]), k = a.get('rgb'), g = a.get('a')) : (k = b[1], g = 1); b = K.createElement('stop').attr({ offset: b[0], 'stop-color': k, 'stop-opacity': g }).add(N); N.stops.push(b)
})
}F = 'url(' + K.url + '#' + q + ')'; c.setAttribute(d, F); c.gradient = v; b.toString = function () { return F }
}
})
}; a.prototype.css = function (b) {
var d = this.styles; var c = {}; var h = this.element; var a = ['textOutline', 'textOverflow', 'width']; var p = ''; var f = !d; b && b.color && (b.fill = b.color); d && y(b, function (b, h) { d && d[h] !== b && (c[h] = b, f = !0) }); if (f) {
d && (b = O(d, c)); if (b) {
if (b.width === null || b.width ===
'auto') delete this.textWidth; else if (h.nodeName.toLowerCase() === 'text' && b.width) var k = this.textWidth = F(b.width)
} this.styles = b; k && !e && this.renderer.forExport && delete b.width; if (h.namespaceURI === this.SVG_NS) { var A = function (b, d) { return '-' + d.toLowerCase() }; y(b, function (b, d) { a.indexOf(d) === -1 && (p += d.replace(/([A-Z])/g, A) + ':' + b + ';') }); p && q(h, 'style', p) } else I(h, b); this.added && (this.element.nodeName === 'text' && this.renderer.buildText(this), b && b.textOutline && this.applyTextOutline(b.textOutline))
} return this
}
a.prototype.dashstyleSetter = function (b) { var d = this['stroke-width']; d === 'inherit' && (d = 1); if (b = b && b.toLowerCase()) { var c = b.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 (b = c.length; b--;)c[b] = '' + F(c[b]) * L(d, NaN); b = c.join(',').replace(/NaN/g, 'none'); this.element.setAttribute('stroke-dasharray', b) } }; a.prototype.destroy =
function () {
var b = this; var d = b.element || {}; var c = b.renderer; var h = d.ownerSVGElement; var a = c.isSVG && d.nodeName === 'SPAN' && b.parentGroup || void 0; d.onclick = d.onmouseout = d.onmouseover = d.onmousemove = d.point = null; n(b); if (b.clipPath && h) { var e = b.clipPath; [].forEach.call(h.querySelectorAll('[clip-path],[CLIP-PATH]'), function (b) { b.getAttribute('clip-path').indexOf(e.element.id) > -1 && b.removeAttribute('clip-path') }); b.clipPath = e.destroy() } if (b.stops) { for (h = 0; h < b.stops.length; h++)b.stops[h].destroy(); b.stops.length = 0; b.stops = void 0 }b.safeRemoveChild(d)
for (c.styledMode || b.destroyShadows(); a && a.div && a.div.childNodes.length === 0;)d = a.parentGroup, b.safeRemoveChild(a.div), delete a.div, a = d; b.alignTo && B(c.alignedObjects, b); y(b, function (d, c) { b[c] && b[c].parentGroup === b && b[c].destroy && b[c].destroy(); delete b[c] })
}; a.prototype.destroyShadows = function () { (this.shadows || []).forEach(function (b) { this.safeRemoveChild(b) }, this); this.shadows = void 0 }; a.prototype.destroyTextPath = function (b, d) {
var c = b.getElementsByTagName('text')[0]; if (c) {
if (c.removeAttribute('dx'),
c.removeAttribute('dy'), d.element.setAttribute('id', ''), this.textPathWrapper && c.getElementsByTagName('textPath').length) { for (b = this.textPathWrapper.element.childNodes; b.length;)c.appendChild(b[0]); c.removeChild(this.textPathWrapper.element) }
} else if (b.getAttribute('dx') || b.getAttribute('dy'))b.removeAttribute('dx'), b.removeAttribute('dy'); this.textPathWrapper && (this.textPathWrapper = this.textPathWrapper.destroy())
}; a.prototype.dSetter = function (b, d, c) {
h(b) && (typeof b[0] === 'string' && (b = this.renderer.pathToSegments(b)),
this.pathArray = b, b = b.reduce(function (b, d, c) { return d && d.join ? (c ? b + ' ' : '') + d.join(' ') : (d || '').toString() }, '')); /(NaN| {2}|^$)/.test(b) && (b = 'M 0 0'); this[d] !== b && (c.setAttribute(d, b), this[d] = b)
}; a.prototype.fadeOut = function (b) { var d = this; d.animate({ opacity: 0 }, { duration: L(b, 150), complete: function () { d.attr({ y: -9999 }).hide() } }) }; a.prototype.fillSetter = function (b, d, c) { typeof b === 'string' ? c.setAttribute(d, b) : b && this.complexColor(b, d, c) }; a.prototype.getBBox = function (b, c) {
var h = this.renderer; var K = this.element
var e = this.styles; var p = this.textStr; var f = h.cache; var k = h.cacheKeys; var A = K.namespaceURI === this.SVG_NS; c = L(c, this.rotation, 0); var g = h.styledMode ? K && a.prototype.getStyle.call(K, 'font-size') : e && e.fontSize; var y; if (D(p)) { var G = p.toString(); G.indexOf('<') === -1 && (G = G.replace(/[0-9]/g, '0')); G += ['', c, g, this.textWidth, e && e.textOverflow, e && e.fontWeight].join() }G && !b && (y = f[G]); if (!y) {
if (A || h.forExport) {
try {
var l = this.fakeTS && function (b) { var d = K.querySelector('.highcharts-text-outline'); d && I(d, { display: b }) }; d(l) && l('none'); y = K.getBBox
? O({}, K.getBBox()) : { width: K.offsetWidth, height: K.offsetHeight }; d(l) && l('')
} catch (Y) { '' } if (!y || y.width < 0)y = { width: 0, height: 0 }
} else y = this.htmlGetBBox(); h.isSVG && (b = y.width, h = y.height, A && (y.height = h = { '11px,17': 14, '13px,20': 16 }[e && e.fontSize + ',' + Math.round(h)] || h), c && (e = c * m, y.width = Math.abs(h * Math.sin(e)) + Math.abs(b * Math.cos(e)), y.height = Math.abs(h * Math.cos(e)) + Math.abs(b * Math.sin(e)))); if (G && (p === '' || y.height > 0)) { for (;k.length > 250;) delete f[k.shift()]; f[G] || k.push(G); f[G] = y }
} return y
}; a.prototype.getStyle =
function (b) { return f.getComputedStyle(this.element || this, '').getPropertyValue(b) }; a.prototype.hasClass = function (b) { return ('' + this.attr('class')).split(' ').indexOf(b) !== -1 }; a.prototype.hide = function (b) { b ? this.attr({ y: -9999 }) : this.attr({ visibility: 'hidden' }); return this }; a.prototype.htmlGetBBox = function () { return { height: 0, width: 0, x: 0, y: 0 } }; a.prototype.init = function (b, d) { this.element = d === 'span' ? k(d) : g.createElementNS(this.SVG_NS, d); this.renderer = b; t(this, 'afterInit') }; a.prototype.invert = function (b) {
this.inverted =
b; this.updateTransform(); return this
}; a.prototype.on = function (b, d) { var c = this.onEvents; if (c[b])c[b](); c[b] = v(this.element, b, d); return this }; a.prototype.opacitySetter = function (b, d, c) { this.opacity = b = Number(Number(b).toFixed(3)); c.setAttribute(d, b) }; a.prototype.removeClass = function (b) { return this.attr('class', ('' + this.attr('class')).replace(p(b) ? new RegExp('(^| )' + b + '( |$)') : b, ' ').replace(/ +/g, ' ').trim()) }; a.prototype.removeTextOutline = function () {
var b = this.element.querySelector('tspan.highcharts-text-outline')
b && this.safeRemoveChild(b)
}; a.prototype.safeRemoveChild = function (b) { var d = b.parentNode; d && d.removeChild(b) }; a.prototype.setRadialReference = function (b) { var d = this.element.gradient && this.renderer.gradients[this.element.gradient]; this.element.radialReference = b; d && d.radAttr && d.animate(this.renderer.getRadialAttr(b, d.radAttr)); return this }; a.prototype.setTextPath = function (d, h) {
var a = this.element; var K = this.text ? this.text.element : a; var e = { textAnchor: 'text-anchor' }; var p = !1; var f = this.textPathWrapper; var k = !f; h = G(!0, {
enabled: !0,
attributes: { dy: -5, startOffset: '50%', textAnchor: 'middle' }
}, h); var A = w.filterUserAttributes(h.attributes); if (d && h && h.enabled) {
f && f.element.parentNode === null ? (k = !0, f = f.destroy()) : f && this.removeTextOutline.call(f.parentGroup); this.options && this.options.padding && (A.dx = -this.options.padding); f || (this.textPathWrapper = f = this.renderer.createElement('textPath'), p = !0); var g = f.element; (h = d.element.getAttribute('id')) || d.element.setAttribute('id', h = S()); if (k) {
for (K.setAttribute('y', 0), b(A.dx) && K.setAttribute('x',
-A.dx), d = [].slice.call(K.childNodes), k = 0; k < d.length; k++) { var l = d[k]; l.nodeType !== Node.TEXT_NODE && l.nodeName !== 'tspan' || g.appendChild(l) }
}p && f && f.add({ element: K }); g.setAttributeNS('http://www.w3.org/1999/xlink', 'href', this.renderer.url + '#' + h); D(A.dy) && (g.parentNode.setAttribute('dy', A.dy), delete A.dy); D(A.dx) && (g.parentNode.setAttribute('dx', A.dx), delete A.dx); y(A, function (b, d) { g.setAttribute(e[d] || d, b) }); a.removeAttribute('transform'); this.removeTextOutline.call(f); this.text && !this.renderer.styledMode &&
this.attr({ fill: 'none', 'stroke-width': 0 }); this.applyTextOutline = this.updateTransform = c
} else f && (delete this.updateTransform, delete this.applyTextOutline, this.destroyTextPath(a, d), this.updateTransform(), this.options && this.options.rotation && this.applyTextOutline(this.options.style.textOutline)); return this
}; a.prototype.shadow = function (b, d, c) {
var h = []; var a = this.element; var e = this.oldShadowOptions; var H = { color: z.neutralColor100, offsetX: this.parentInverted ? -1 : 1, offsetY: this.parentInverted ? -1 : 1, opacity: 0.15, width: 3 }
var p = !1; var A; !0 === b ? A = H : typeof b === 'object' && (A = O(H, b)); A && (A && e && y(A, function (b, d) { b !== e[d] && (p = !0) }), p && this.destroyShadows(), this.oldShadowOptions = A); if (!A) this.destroyShadows(); else if (!this.shadows) {
var f = A.opacity / A.width; var k = this.parentInverted ? 'translate(' + A.offsetY + ', ' + A.offsetX + ')' : 'translate(' + A.offsetX + ', ' + A.offsetY + ')'; for (H = 1; H <= A.width; H++) {
var g = a.cloneNode(!1); var G = 2 * A.width + 1 - 2 * H; q(g, { stroke: b.color || z.neutralColor100, 'stroke-opacity': f * H, 'stroke-width': G, transform: k, fill: 'none' })
g.setAttribute('class', (g.getAttribute('class') || '') + ' highcharts-shadow'); c && (q(g, 'height', Math.max(q(g, 'height') - G, 0)), g.cutHeight = G); d ? d.element.appendChild(g) : a.parentNode && a.parentNode.insertBefore(g, a); h.push(g)
} this.shadows = h
} return this
}; a.prototype.show = function (b) { return this.attr({ visibility: b ? 'inherit' : 'visible' }) }; a.prototype.strokeSetter = function (b, d, c) {
this[d] = b; this.stroke && this['stroke-width'] ? (a.prototype.fillSetter.call(this, this.stroke, 'stroke', c), c.setAttribute('stroke-width',
this['stroke-width']), this.hasStroke = !0) : d === 'stroke-width' && b === 0 && this.hasStroke ? (c.removeAttribute('stroke'), this.hasStroke = !1) : this.renderer.styledMode && this['stroke-width'] && (c.setAttribute('stroke-width', this['stroke-width']), this.hasStroke = !0)
}; a.prototype.strokeWidth = function () {
if (!this.renderer.styledMode) return this['stroke-width'] || 0; var b = this.getStyle('stroke-width'); var d = 0; if (b.indexOf('px') === b.length - 2)d = F(b); else if (b !== '') {
var c = g.createElementNS(l, 'rect'); q(c, { width: b, 'stroke-width': 0 })
this.element.parentNode.appendChild(c); d = c.getBBox().width; c.parentNode.removeChild(c)
} return d
}; a.prototype.symbolAttr = function (b) { var d = this; 'x y r start end width height innerR anchorX anchorY clockwise'.split(' ').forEach(function (c) { d[c] = L(b[c], d[c]) }); d.attr({ d: d.renderer.symbols[d.symbolName](d.x, d.y, d.width, d.height, d) }) }; a.prototype.textSetter = function (b) { b !== this.textStr && (delete this.textPxLength, this.textStr = b, this.added && this.renderer.buildText(this)) }; a.prototype.titleSetter = function (b) {
var d =
this.element; var c = d.getElementsByTagName('title')[0] || g.createElementNS(this.SVG_NS, 'title'); d.insertBefore ? d.insertBefore(c, d.firstChild) : d.appendChild(c); c.textContent = String(L(b, '')).replace(/<[^>]*>/g, '').replace(/&lt;/g, '<').replace(/&gt;/g, '>')
}; a.prototype.toFront = function () { var b = this.element; b.parentNode.appendChild(b); return this }; a.prototype.translate = function (b, d) { return this.attr({ translateX: b, translateY: d }) }; a.prototype.updateShadows = function (b, d, c) {
var h = this.shadows; if (h) {
for (var a = h.length; a--;) {
c.call(h[a],
b === 'height' ? Math.max(d - (h[a].cutHeight || 0), 0) : b === 'd' ? this.d : d, b, h[a])
}
}
}; a.prototype.updateTransform = function () {
var b = this.scaleX; var d = this.scaleY; var c = this.inverted; var h = this.rotation; var a = this.matrix; var e = this.element; var p = this.translateX || 0; var f = this.translateY || 0; c && (p += this.width, f += this.height); p = ['translate(' + p + ',' + f + ')']; D(a) && p.push('matrix(' + a.join(',') + ')'); c ? p.push('rotate(90) scale(-1,1)') : h && p.push('rotate(' + h + ' ' + L(this.rotationOriginX, e.getAttribute('x'), 0) + ' ' + L(this.rotationOriginY, e.getAttribute('y') ||
0) + ')'); (D(b) || D(d)) && p.push('scale(' + L(b, 1) + ' ' + L(d, 1) + ')'); p.length && e.setAttribute('transform', p.join(' '))
}; a.prototype.visibilitySetter = function (b, d, c) { b === 'inherit' ? c.removeAttribute(d) : this[d] !== b && c.setAttribute(d, b); this[d] = b }; a.prototype.xGetter = function (b) { this.element.nodeName === 'circle' && (b === 'x' ? b = 'cx' : b === 'y' && (b = 'cy')); return this._defaultGetter(b) }; a.prototype.zIndexSetter = function (b, d) {
var c = this.renderer; var h = this.parentGroup; var a = (h || c).element || c.box; var e = this.element; c = a === c.box; var p =
!1; var f = this.added; var A; D(b) ? (e.setAttribute('data-z-index', b), b = +b, this[d] === b && (f = !1)) : D(this[d]) && e.removeAttribute('data-z-index'); this[d] = b; if (f) { (b = this.zIndex) && h && (h.handleZ = !0); d = a.childNodes; for (A = d.length - 1; A >= 0 && !p; A--) { h = d[A]; f = h.getAttribute('data-z-index'); var k = !D(f); if (h !== e) if (b < 0 && k && !c && !A)a.insertBefore(e, d[A]), p = !0; else if (F(f) <= b || k && (!D(b) || b >= 0))a.insertBefore(e, d[A + 1] || null), p = !0 }p || (a.insertBefore(e, d[c ? 3 : 0] || null), p = !0) } return p
}; return a
}()); a.prototype['stroke-widthSetter'] =
a.prototype.strokeSetter; a.prototype.yGetter = a.prototype.xGetter; a.prototype.matrixSetter = a.prototype.rotationOriginXSetter = a.prototype.rotationOriginYSetter = a.prototype.rotationSetter = a.prototype.scaleXSetter = a.prototype.scaleYSetter = a.prototype.translateXSetter = a.prototype.translateYSetter = a.prototype.verticalAlignSetter = function (b, d) { this[d] = b; this.doTransform = !0 }; ''; return a
}); M(a, 'Core/Renderer/RendererRegistry.js', [a['Core/Globals.js']], function (a) {
var r; (function (r) {
r.rendererTypes = {}; var w
r.getRendererType = function (a) { void 0 === a && (a = w); return r.rendererTypes[a] || r.rendererTypes[w] }; r.registerRendererType = function (C, x, E) { r.rendererTypes[C] = x; if (!w || E)w = C, a.Renderer = x }
})(r || (r = {})); return r
}); M(a, 'Core/Renderer/SVG/SVGLabel.js', [a['Core/Renderer/SVG/SVGElement.js'], a['Core/Utilities.js']], function (a, w) {
var r = this && this.__extends || (function () {
var a = function (g, c) {
a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (c, a) { c.__proto__ = a } || function (c, a) {
for (var e in a) {
a.hasOwnProperty(e) &&
(c[e] = a[e])
}
}; return a(g, c)
}; return function (g, c) { function e () { this.constructor = g }a(g, c); g.prototype = c === null ? Object.create(c) : (e.prototype = c.prototype, new e()) }
}()); var E = w.defined; var z = w.extend; var x = w.isNumber; var J = w.merge; var u = w.pick; var n = w.removeEvent; return (function (m) {
function g (c, a, l, f, v, q, k, I, D, B) {
var e = m.call(this) || this; e.paddingLeftSetter = e.paddingSetter; e.paddingRightSetter = e.paddingSetter; e.init(c, 'g'); e.textStr = a; e.x = l; e.y = f; e.anchorX = q; e.anchorY = k; e.baseline = D; e.className = B; e.addClass(B === 'button' ? 'highcharts-no-tooltip'
: 'highcharts-label'); B && e.addClass('highcharts-' + B); e.text = c.text(void 0, 0, 0, I).attr({ zIndex: 1 }); var t; typeof v === 'string' && ((t = /^url\((.*?)\)$/.test(v)) || e.renderer.symbols[v]) && (e.symbolKey = v); e.bBox = g.emptyBBox; e.padding = 3; e.baselineOffset = 0; e.needsBox = c.styledMode || t; e.deferredAttr = {}; e.alignFactor = 0; return e
}r(g, m); g.prototype.alignSetter = function (c) { c = { left: 0, center: 0.5, right: 1 }[c]; c !== this.alignFactor && (this.alignFactor = c, this.bBox && x(this.xSetting) && this.attr({ x: this.xSetting })) }; g.prototype.anchorXSetter =
function (c, a) { this.anchorX = c; this.boxAttr(a, Math.round(c) - this.getCrispAdjust() - this.xSetting) }; g.prototype.anchorYSetter = function (c, a) { this.anchorY = c; this.boxAttr(a, c - this.ySetting) }; g.prototype.boxAttr = function (c, a) { this.box ? this.box.attr(c, a) : this.deferredAttr[c] = a }; g.prototype.css = function (c) {
if (c) {
var e = {}; c = J(c); g.textProps.forEach(function (a) { typeof c[a] !== 'undefined' && (e[a] = c[a], delete c[a]) }); this.text.css(e); var l = 'width' in e; 'fontSize' in e || 'fontWeight' in e ? this.updateTextPadding() : l &&
this.updateBoxSize()
} return a.prototype.css.call(this, c)
}; g.prototype.destroy = function () { n(this.element, 'mouseenter'); n(this.element, 'mouseleave'); this.text && this.text.destroy(); this.box && (this.box = this.box.destroy()); a.prototype.destroy.call(this) }; g.prototype.fillSetter = function (c, a) { c && (this.needsBox = !0); this.fill = c; this.boxAttr(a, c) }; g.prototype.getBBox = function () {
this.textStr && this.bBox.width === 0 && this.bBox.height === 0 && this.updateBoxSize(); var c = this.padding; var a = u(this.paddingLeft, c); return {
width: this.width,
height: this.height,
x: this.bBox.x - a,
y: this.bBox.y - c
}
}; g.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 }; g.prototype.heightSetter = function (c) { this.heightSetting = c }; g.prototype.onAdd = function () { var c = this.textStr; this.text.add(this); this.attr({ text: E(c) ? c : '', x: this.x, y: this.y }); this.box && E(this.anchorX) && this.attr({ anchorX: this.anchorX, anchorY: this.anchorY }) }; g.prototype.paddingSetter =
function (c, a) { x(c) ? c !== this[a] && (this[a] = c, this.updateTextPadding()) : this[a] = void 0 }; g.prototype.rSetter = function (c, a) { this.boxAttr(a, c) }; g.prototype.shadow = function (c) { c && !this.renderer.styledMode && (this.updateBoxSize(), this.box && this.box.shadow(c)); return this }; g.prototype.strokeSetter = function (c, a) { this.stroke = c; this.boxAttr(a, c) }; g.prototype['stroke-widthSetter'] = function (c, a) { c && (this.needsBox = !0); this['stroke-width'] = c; this.boxAttr(a, c) }; g.prototype['text-alignSetter'] = function (c) {
this.textAlign =
c
}; g.prototype.textSetter = function (c) { typeof c !== 'undefined' && this.text.attr({ text: c }); this.updateTextPadding() }; g.prototype.updateBoxSize = function () {
var c = this.text.element.style; var a = {}; var l = this.padding; var f = this.bBox = x(this.widthSetting) && x(this.heightSetting) && !this.textAlign || !E(this.text.textStr) ? g.emptyBBox : this.text.getBBox(); this.width = this.getPaddedWidth(); this.height = (this.heightSetting || f.height || 0) + 2 * l; c = this.renderer.fontMetrics(c && c.fontSize, this.text); this.baselineOffset = l + Math.min((this.text.firstLineMetrics ||
c).b, f.height || Infinity); this.heightSetting && (this.baselineOffset += (this.heightSetting - c.h) / 2); this.needsBox && (this.box || (l = this.box = this.symbolKey ? this.renderer.symbol(this.symbolKey) : this.renderer.rect(), l.addClass((this.className === 'button' ? '' : 'highcharts-label-box') + (this.className ? ' highcharts-' + this.className + '-box' : '')), l.add(this)), l = this.getCrispAdjust(), a.x = l, a.y = (this.baseline ? -this.baselineOffset : 0) + l, a.width = Math.round(this.width), a.height = Math.round(this.height), this.box.attr(z(a, this.deferredAttr)),
this.deferredAttr = {})
}; g.prototype.updateTextPadding = function () { var c = this.text; this.updateBoxSize(); var a = this.baseline ? 0 : this.baselineOffset; var g = u(this.paddingLeft, this.padding); E(this.widthSetting) && this.bBox && (this.textAlign === 'center' || this.textAlign === 'right') && (g += { center: 0.5, right: 1 }[this.textAlign] * (this.widthSetting - this.bBox.width)); if (g !== c.x || a !== c.y)c.attr('x', g), c.hasBoxWidthChanged && (this.bBox = c.getBBox(!0)), typeof a !== 'undefined' && c.attr('y', a); c.x = g; c.y = a }; g.prototype.widthSetter = function (c) {
this.widthSetting =
x(c) ? c : void 0
}; g.prototype.getPaddedWidth = function () { var c = this.padding; var a = u(this.paddingLeft, c); c = u(this.paddingRight, c); return (this.widthSetting || this.bBox.width || 0) + a + c }; g.prototype.xSetter = function (c) { this.x = c; this.alignFactor && (c -= this.alignFactor * this.getPaddedWidth(), this['forceAnimate:x'] = !0); this.xSetting = Math.round(c); this.attr('translateX', this.xSetting) }; g.prototype.ySetter = function (c) { this.ySetting = this.y = Math.round(c); this.attr('translateY', this.ySetting) }; g.emptyBBox = {
width: 0,
height: 0,
x: 0,
y: 0
}; g.textProps = 'color direction fontFamily fontSize fontStyle fontWeight lineHeight textAlign textDecoration textOutline textOverflow width'.split(' '); return g
}(a))
}); M(a, 'Core/Renderer/SVG/Symbols.js', [a['Core/Utilities.js']], function (a) {
function r (a, n, m, g, c) {
var e = []; if (c) {
var l = c.start || 0; var f = J(c.r, m); m = J(c.r, g || m); var v = (c.end || 0) - 0.001; g = c.innerR; var q = J(c.open, Math.abs((c.end || 0) - l - 2 * Math.PI) < 0.001); var k = Math.cos(l); var I = Math.sin(l); var D = Math.cos(v); var B = Math.sin(v); l = J(c.longArc, v - l - Math.PI < 0.001 ? 0 : 1)
e.push(['M', a + f * k, n + m * I], ['A', f, m, 0, l, J(c.clockwise, 1), a + f * D, n + m * B]); z(g) && e.push(q ? ['M', a + g * D, n + g * B] : ['L', a + g * D, n + g * B], ['A', g, g, 0, l, z(c.clockwise) ? 1 - c.clockwise : 0, a + g * k, n + g * I]); q || e.push(['Z'])
} return e
} function C (a, n, m, g, c) { return c && c.r ? E(a, n, m, g, c) : [['M', a, n], ['L', a + m, n], ['L', a + m, n + g], ['L', a, n + g], ['Z']] } function E (a, n, m, g, c) {
c = c && c.r || 0; return [['M', a + c, n], ['L', a + m - c, n], ['C', a + m, n, a + m, n, a + m, n + c], ['L', a + m, n + g - c], ['C', a + m, n + g, a + m, n + g, a + m - c, n + g], ['L', a + c, n + g], ['C', a, n + g, a, n + g, a, n + g - c], ['L', a, n + c],
['C', a, n, a, n, a + c, n]]
} var z = a.defined; var x = a.isNumber; var J = a.pick; return {
arc: r,
callout: function (a, n, m, g, c) {
var e = Math.min(c && c.r || 0, m, g); var l = e + 6; var f = c && c.anchorX; c = c && c.anchorY || 0; var v = E(a, n, m, g, { r: e }); if (!x(f)) return v; a + f >= m ? c > n + l && c < n + g - l ? v.splice(3, 1, ['L', a + m, c - 6], ['L', a + m + 6, c], ['L', a + m, c + 6], ['L', a + m, n + g - e]) : v.splice(3, 1, ['L', a + m, g / 2], ['L', f, c], ['L', a + m, g / 2], ['L', a + m, n + g - e]) : a + f <= 0 ? c > n + l && c < n + g - l ? v.splice(7, 1, ['L', a, c + 6], ['L', a - 6, c], ['L', a, c - 6], ['L', a, n + e]) : v.splice(7, 1, ['L', a, g / 2], ['L', f, c], ['L', a, g / 2],
['L', a, n + e]) : c && c > g && f > a + l && f < a + m - l ? v.splice(5, 1, ['L', f + 6, n + g], ['L', f, n + g + 6], ['L', f - 6, n + g], ['L', a + e, n + g]) : c && c < 0 && f > a + l && f < a + m - l && v.splice(1, 1, ['L', f - 6, n], ['L', f, n - 6], ['L', f + 6, n], ['L', m - e, n]); return v
},
circle: function (a, n, m, g) { return r(a + m / 2, n + g / 2, m / 2, g / 2, { start: 0.5 * Math.PI, end: 2.5 * Math.PI, open: !1 }) },
diamond: function (a, n, m, g) { return [['M', a + m / 2, n], ['L', a + m, n + g / 2], ['L', a + m / 2, n + g], ['L', a, n + g / 2], ['Z']] },
rect: C,
roundedRect: E,
square: C,
triangle: function (a, n, m, g) {
return [['M', a + m / 2, n], ['L', a + m, n + g], ['L', a,
n + g], ['Z']]
},
'triangle-down': function (a, n, m, g) { return [['M', a, n], ['L', a + m, n], ['L', a + m / 2, n + g], ['Z']] }
}
}); M(a, 'Core/Renderer/SVG/TextBuilder.js', [a['Core/Renderer/HTML/AST.js'], a['Core/Globals.js'], a['Core/Utilities.js']], function (a, w, C) {
var r = w.doc; var z = w.SVG_NS; var x = C.attr; var J = C.isString; var u = C.objectEach; var n = C.pick; return (function () {
function m (a) {
var c = a.styles; this.renderer = a.renderer; this.svgElement = a; this.width = a.textWidth; this.textLineHeight = c && c.lineHeight; this.textOutline = c && c.textOutline; this.ellipsis =
!(!c || c.textOverflow !== 'ellipsis'); this.noWrap = !(!c || c.whiteSpace !== 'nowrap'); this.fontSize = c && c.fontSize
}m.prototype.buildSVG = function () {
var g = this.svgElement; var c = g.element; var e = g.renderer; var l = n(g.textStr, '').toString(); var f = l.indexOf('<') !== -1; var v = c.childNodes; e = this.width && !g.added && e.box; var q = /<br.*?>/g; var k = [l, this.ellipsis, this.noWrap, this.textLineHeight, this.textOutline, this.fontSize, this.width].join(); if (k !== g.textCache) {
g.textCache = k; delete g.actualWidth; for (k = v.length; k--;)c.removeChild(v[k]); f || this.ellipsis ||
this.width || l.indexOf(' ') !== -1 && (!this.noWrap || q.test(l)) ? l !== '' && (e && e.appendChild(c), l = new a(l), this.modifyTree(l.nodes), l.addToDOM(g.element), this.modifyDOM(), this.ellipsis && (c.textContent || '').indexOf('\u2026') !== -1 && g.attr('title', this.unescapeEntities(g.textStr || '', ['&lt;', '&gt;'])), e && e.removeChild(c)) : c.appendChild(r.createTextNode(this.unescapeEntities(l))); J(this.textOutline) && g.applyTextOutline && g.applyTextOutline(this.textOutline)
}
}; m.prototype.modifyDOM = function () {
var a = this; var c = this.svgElement
var e = x(c.element, 'x'); c.firstLineMetrics = void 0; for (var l; l = c.element.firstChild;) if (/^[\s\u200B]*$/.test(l.textContent || ' '))c.element.removeChild(l); else break; [].forEach.call(c.element.querySelectorAll('tspan.highcharts-br'), function (f, g) { f.nextSibling && f.previousSibling && (g === 0 && f.previousSibling.nodeType === 1 && (c.firstLineMetrics = c.renderer.fontMetrics(void 0, f.previousSibling)), x(f, { dy: a.getLineHeight(f.nextSibling), x: e })) }); var f = this.width || 0; if (f) {
var v = function (k, g) {
var l = k.textContent || ''
var q = l.replace(/([^\^])-/g, '$1- ').split(' '); var v = !a.noWrap && (q.length > 1 || c.element.childNodes.length > 1); var t = a.getLineHeight(g); var h = 0; var d = c.actualWidth; if (a.ellipsis)l && a.truncate(k, l, void 0, 0, Math.max(0, f - parseInt(a.fontSize || 12, 10)), function (b, d) { return b.substring(0, d) + '\u2026' }); else if (v) {
l = []; for (v = []; g.firstChild && g.firstChild !== k;)v.push(g.firstChild), g.removeChild(g.firstChild); for (;q.length;) {
q.length && !a.noWrap && h > 0 && (l.push(k.textContent || ''), k.textContent = q.join(' ').replace(/- /g, '-')), a.truncate(k,
void 0, q, h === 0 ? d || 0 : 0, f, function (b, d) { return q.slice(0, d).join(' ').replace(/- /g, '-') }), d = c.actualWidth, h++
}v.forEach(function (b) { g.insertBefore(b, k) }); l.forEach(function (b) { g.insertBefore(r.createTextNode(b), k); b = r.createElementNS(z, 'tspan'); b.textContent = '\u200b'; x(b, { dy: t, x: e }); g.insertBefore(b, k) })
}
}; var q = function (a) { [].slice.call(a.childNodes).forEach(function (e) { e.nodeType === Node.TEXT_NODE ? v(e, a) : (e.className.baseVal.indexOf('highcharts-br') !== -1 && (c.actualWidth = 0), q(e)) }) }; q(c.element)
}
}; m.prototype.getLineHeight =
function (a) { var c; a = a.nodeType === Node.TEXT_NODE ? a.parentElement : a; this.renderer.styledMode || (c = a && /(px|em)$/.test(a.style.fontSize) ? a.style.fontSize : this.fontSize || this.renderer.style.fontSize || 12); return this.textLineHeight ? parseInt(this.textLineHeight.toString(), 10) : this.renderer.fontMetrics(c, a || this.svgElement.element).h }; m.prototype.modifyTree = function (a) {
var c = this; var e = function (g, f) {
var l = g.tagName; var q = c.renderer.styledMode; var k = g.attributes || {}; if (l === 'b' || l === 'strong') {
q ? k.class = 'highcharts-strong'
: k.style = 'font-weight:bold;' + (k.style || '')
} else if (l === 'i' || l === 'em')q ? k.class = 'highcharts-emphasized' : k.style = 'font-style:italic;' + (k.style || ''); J(k.style) && (k.style = k.style.replace(/(;| |^)color([ :])/, '$1fill$2')); l === 'br' && (k.class = 'highcharts-br', g.textContent = '\u200b', (f = a[f + 1]) && f.textContent && (f.textContent = f.textContent.replace(/^ +/gm, ''))); l !== '#text' && l !== 'a' && (g.tagName = 'tspan'); g.attributes = k; g.children && g.children.filter(function (c) { return c.tagName !== '#text' }).forEach(e)
}; a.forEach(e)
}
m.prototype.truncate = function (a, c, e, l, f, v) {
var g = this.svgElement; var k = g.renderer; var m = g.rotation; var D = []; var B = e ? 1 : 0; var n = (c || e || '').length; var t = n; var h; var d = function (b, d) { d = d || b; var h = a.parentNode; if (h && typeof D[d] === 'undefined') if (h.getSubStringLength) try { D[d] = l + h.getSubStringLength(0, e ? d + 1 : d) } catch (L) { '' } else k.getSpanWidth && (a.textContent = v(c || e, b), D[d] = l + k.getSpanWidth(g, a)); return D[d] }; g.rotation = 0; var b = d(a.textContent.length); if (l + b > f) {
for (;B <= n;) {
t = Math.ceil((B + n) / 2), e && (h = v(e, t)), b = d(t, h && h.length - 1), B === n ? B = n + 1
: b > f ? n = t - 1 : B = t
}n === 0 ? a.textContent = '' : c && n === c.length - 1 || (a.textContent = h || v(c || e, t))
}e && e.splice(0, t); g.actualWidth = b; g.rotation = m
}; m.prototype.unescapeEntities = function (a, c) { u(this.renderer.escapes, function (e, g) { c && c.indexOf(e) !== -1 || (a = a.toString().replace(new RegExp(e, 'g'), g)) }); return a }; return m
}())
}); M(a, 'Core/Renderer/SVG/SVGRenderer.js', [a['Core/Renderer/HTML/AST.js'], a['Core/Color/Color.js'], a['Core/Globals.js'], a['Core/Color/Palette.js'], a['Core/Renderer/RendererRegistry.js'], a['Core/Renderer/SVG/SVGElement.js'],
a['Core/Renderer/SVG/SVGLabel.js'], a['Core/Renderer/SVG/Symbols.js'], a['Core/Renderer/SVG/TextBuilder.js'], a['Core/Utilities.js']], function (a, w, C, E, z, x, J, u, n, m) {
var g = C.charts; var c = C.deg2rad; var e = C.doc; var l = C.isFirefox; var f = C.isMS; var v = C.isWebKit; var q = C.noop; var k = C.SVG_NS; var I = C.symbolSizes; var D = C.win; var B = m.addEvent; var r = m.attr; var t = m.createElement; var h = m.css; var d = m.defined; var b = m.destroyObjectProperties; var p = m.extend; var G = m.isArray; var y = m.isNumber; var L = m.isObject; var F = m.isString; var P = m.merge; var S = m.pick; var Q = m.pInt; var V = m.uniqueKey; var fa; C = (function () {
function H (b, d, c,
a, h, e, p) { 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, d, c, a, h, e, p) }H.prototype.init = function (b, d, c, a, p, A, H) {
var K = this.createElement('svg').attr({ version: '1.1', class: 'highcharts-root' }); var f = K.element; H || K.css(this.getStyle(a)); b.appendChild(f); r(b, 'dir', 'ltr'); b.innerHTML.indexOf('xmlns') === -1 && r(f, 'xmlns', this.SVG_NS); this.isSVG =
!0; this.box = f; this.boxWrapper = K; this.alignedObjects = []; this.url = this.getReferenceURL(); this.createElement('desc').add().element.appendChild(e.createTextNode('Created with Highcharts 9.2.2')); this.defs = this.createElement('defs').add(); this.allowHTML = A; this.forExport = p; this.styledMode = H; this.gradients = {}; this.cache = {}; this.cacheKeys = []; this.imgCount = 0; this.setSize(d, c, !1); var k; l && b.getBoundingClientRect && (d = function () {
h(b, { left: 0, top: 0 }); k = b.getBoundingClientRect(); h(b, {
left: Math.ceil(k.left) - k.left +
'px',
top: Math.ceil(k.top) - k.top + 'px'
})
}, d(), this.unSubPixelFix = B(D, 'resize', d))
}; H.prototype.definition = function (b) { return (new a([b])).addToDOM(this.defs.element) }; H.prototype.getReferenceURL = function () {
if ((l || v) && e.getElementsByTagName('base').length) {
if (!d(fa)) {
var b = V(); b = (new a([{
tagName: 'svg',
attributes: { width: 8, height: 8 },
children: [{ tagName: 'defs', children: [{ tagName: 'clipPath', attributes: { id: b }, children: [{ tagName: 'rect', attributes: { width: 4, height: 4 } }] }] }, {
tagName: 'rect',
attributes: {
id: 'hitme',
width: 8,
height: 8,
'clip-path': 'url(#' + b + ')',
fill: 'rgba(0,0,0,0.001)'
}
}]
}])).addToDOM(e.body); h(b, { position: 'fixed', top: 0, left: 0, zIndex: 9E5 }); var c = e.elementFromPoint(6, 6); fa = (c && c.id) === 'hitme'; e.body.removeChild(b)
} if (fa) return D.location.href.split('#')[0].replace(/<[^>]*>/g, '').replace(/([\('\)])/g, '\\$1').replace(/ /g, '%20')
} return ''
}; H.prototype.getStyle = function (b) { return this.style = p({ fontFamily: '"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif', fontSize: '12px' }, b) }; H.prototype.setStyle =
function (b) { this.boxWrapper.css(this.getStyle(b)) }; H.prototype.isHidden = function () { return !this.boxWrapper.getBBox().width }; H.prototype.destroy = function () { var d = this.defs; this.box = null; this.boxWrapper = this.boxWrapper.destroy(); b(this.gradients || {}); this.gradients = null; d && (this.defs = d.destroy()); this.unSubPixelFix && this.unSubPixelFix(); return this.alignedObjects = null }; H.prototype.createElement = function (b) { var d = new this.Element(); d.init(this, b); return d }; H.prototype.getRadialAttr = function (b, d) {
return {
cx: b[0] -
b[2] / 2 + (d.cx || 0) * b[2],
cy: b[1] - b[2] / 2 + (d.cy || 0) * b[2],
r: (d.r || 0) * b[2]
}
}; H.prototype.buildText = function (b) { (new n(b)).buildSVG() }; H.prototype.getContrast = function (b) { b = w.parse(b).rgba; b[0] *= 1; b[1] *= 1.2; b[2] *= 0.5; return b[0] + b[1] + b[2] > 459 ? '#000000' : '#FFFFFF' }; H.prototype.button = function (b, d, c, h, e, A, H, k, g, y) {
var K = this.label(b, d, c, g, void 0, void 0, y, void 0, 'button'); var G = this.styledMode; var l = 0; var t = e ? P(e) : {}; b = t && t.style || {}; t = a.filterUserAttributes(t); K.attr(P({ padding: 8, r: 2 }, t)); if (!G) {
t = P({
fill: E.neutralColor3,
stroke: E.neutralColor20,
'stroke-width': 1,
style: { color: E.neutralColor80, cursor: 'pointer', fontWeight: 'normal' }
}, { style: b }, t); var N = t.style; delete t.style; A = P(t, { fill: E.neutralColor10 }, a.filterUserAttributes(A || {})); var q = A.style; delete A.style; H = P(t, { fill: E.highlightColor10, style: { color: E.neutralColor100, fontWeight: 'bold' } }, a.filterUserAttributes(H || {})); var v = H.style; delete H.style; k = P(t, { style: { color: E.neutralColor20 } }, a.filterUserAttributes(k || {})); var F = k.style; delete k.style
}B(K.element, f ? 'mouseover'
: 'mouseenter', function () { l !== 3 && K.setState(1) }); B(K.element, f ? 'mouseout' : 'mouseleave', function () { l !== 3 && K.setState(l) }); K.setState = function (b) { b !== 1 && (K.state = l = b); K.removeClass(/highcharts-button-(normal|hover|pressed|disabled)/).addClass('highcharts-button-' + ['normal', 'hover', 'pressed', 'disabled'][b || 0]); G || K.attr([t, A, H, k][b || 0]).css([N, q, v, F][b || 0]) }; G || K.attr(t).css(p({ cursor: 'default' }, N)); return K.on('touchstart', function (b) { return b.stopPropagation() }).on('click', function (b) {
l !== 3 && h.call(K,
b)
})
}; H.prototype.crispLine = function (b, c, a) { void 0 === a && (a = 'round'); var h = b[0]; var e = b[1]; d(h[1]) && h[1] === e[1] && (h[1] = e[1] = Math[a](h[1]) - c % 2 / 2); d(h[2]) && h[2] === e[2] && (h[2] = e[2] = Math[a](h[2]) + c % 2 / 2); return b }; H.prototype.path = function (b) { var d = this.styledMode ? {} : { fill: 'none' }; G(b) ? d.d = b : L(b) && p(d, b); return this.createElement('path').attr(d) }; H.prototype.circle = function (b, d, c) {
b = L(b) ? b : typeof b === 'undefined' ? {} : { x: b, y: d, r: c }; d = this.createElement('circle'); d.xSetter = d.ySetter = function (b, d, c) {
c.setAttribute('c' +
d, b)
}; return d.attr(b)
}; H.prototype.arc = function (b, d, c, a, h, e) { L(b) ? (a = b, d = a.y, c = a.r, b = a.x) : a = { innerR: a, start: h, end: e }; b = this.symbol('arc', b, d, c, c, a); b.r = c; return b }; H.prototype.rect = function (b, d, c, a, h, e) {
h = L(b) ? b.r : h; var p = this.createElement('rect'); b = L(b) ? b : typeof b === 'undefined' ? {} : { x: b, y: d, width: Math.max(c, 0), height: Math.max(a, 0) }; this.styledMode || (typeof e !== 'undefined' && (b['stroke-width'] = e, b = p.crisp(b)), b.fill = 'none'); h && (b.r = h); p.rSetter = function (b, d, c) { p.r = b; r(c, { rx: b, ry: b }) }; p.rGetter = function () {
return p.r ||
0
}; return p.attr(b)
}; H.prototype.setSize = function (b, d, c) { this.width = b; this.height = d; this.boxWrapper.animate({ width: b, height: d }, { step: function () { this.attr({ viewBox: '0 0 ' + this.attr('width') + ' ' + this.attr('height') }) }, duration: S(c, !0) ? void 0 : 0 }); this.alignElements() }; H.prototype.g = function (b) { var d = this.createElement('g'); return b ? d.attr({ class: 'highcharts-' + b }) : d }; H.prototype.image = function (b, d, c, a, h, e) {
var A = { preserveAspectRatio: 'none' }; var H = function (b, d) {
b.setAttributeNS ? b.setAttributeNS('http://www.w3.org/1999/xlink',
'href', d) : b.setAttribute('hc-svg-href', d)
}; arguments.length > 1 && p(A, { x: d, y: c, width: a, height: h }); var f = this.createElement('image').attr(A); A = function (d) { H(f.element, b); e.call(f, d) }; if (e) { H(f.element, 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=='); var K = new D.Image(); B(K, 'load', A); K.src = b; K.complete && A({}) } else H(f.element, b); return f
}; H.prototype.symbol = function (b, c, a, H, f, A) {
var K = this; var k = /^url\((.*?)\)$/; var y = k.test(b); var G = !y && (this.symbols[b] ? b : 'circle'); var l = G && this.symbols[G]
var q; if (l) { typeof c === 'number' && (q = l.call(this.symbols, Math.round(c || 0), Math.round(a || 0), H || 0, f || 0, A)); var v = this.path(q); K.styledMode || v.attr('fill', 'none'); p(v, { symbolName: G || void 0, x: c, y: a, width: H, height: f }); A && p(v, A) } else if (y) {
var F = b.match(k)[1]; var m = v = this.image(F); m.imgwidth = S(I[F] && I[F].width, A && A.width); m.imgheight = S(I[F] && I[F].height, A && A.height); var L = function (b) { return b.attr({ width: b.width, height: b.height }) }; ['width', 'height'].forEach(function (b) {
m[b + 'Setter'] = function (b, c) {
var a = this['img' +
c]; this[c] = b; d(a) && (A && A.backgroundSize === 'within' && this.width && this.height && (a = Math.round(a * Math.min(this.width / this.imgwidth, this.height / this.imgheight))), this.element && this.element.setAttribute(c, a), this.alignByTranslate || (b = ((this[c] || 0) - a) / 2, this.attr(c === 'width' ? { translateX: b } : { translateY: b })))
}
}); d(c) && m.attr({ x: c, y: a }); m.isImg = !0; d(m.imgwidth) && d(m.imgheight) ? L(m) : (m.attr({ width: 0, height: 0 }), t('img', {
onload: function () {
var b = g[K.chartIndex]; this.width === 0 && (h(this, { position: 'absolute', top: '-999em' }),
e.body.appendChild(this)); I[F] = { width: this.width, height: this.height }; m.imgwidth = this.width; m.imgheight = this.height; m.element && L(m); this.parentNode && this.parentNode.removeChild(this); K.imgCount--; if (!K.imgCount && b && !b.hasLoaded)b.onload()
},
src: F
}), this.imgCount++)
} return v
}; H.prototype.clipRect = function (b, d, c, a) { var h = V() + '-'; var e = this.createElement('clipPath').attr({ id: h }).add(this.defs); b = this.rect(b, d, c, a, 0).add(e); b.id = h; b.clipPath = e; b.count = 0; return b }; H.prototype.text = function (b, c, a, h) {
var e = {}
if (h && (this.allowHTML || !this.forExport)) return this.html(b, c, a); e.x = Math.round(c || 0); a && (e.y = Math.round(a)); d(b) && (e.text = b); b = this.createElement('text').attr(e); if (!h || this.forExport && !this.allowHTML)b.xSetter = function (b, d, c) { for (var a = c.getElementsByTagName('tspan'), h = c.getAttribute(d), e = 0, p; e < a.length; e++)p = a[e], p.getAttribute(d) === h && p.setAttribute(d, b); c.setAttribute(d, b) }; return b
}; H.prototype.fontMetrics = function (b, d) {
b = !this.styledMode && /px/.test(b) || !D.getComputedStyle ? b || d && d.style && d.style.fontSize ||
this.style && this.style.fontSize : d && x.prototype.getStyle.call(d, 'font-size'); b = /px/.test(b) ? Q(b) : 12; d = b < 24 ? b + 3 : Math.round(1.2 * b); return { h: d, b: Math.round(0.8 * d), f: b }
}; H.prototype.rotCorr = function (b, d, a) { var h = b; d && a && (h = Math.max(h * Math.cos(d * c), 4)); return { x: -b / 3 * Math.sin(d * c), y: h } }; H.prototype.pathToSegments = function (b) {
for (var d = [], c = [], a = { A: 8, C: 7, H: 2, L: 3, M: 3, Q: 5, S: 5, T: 3, V: 2 }, h = 0; h < b.length; h++) {
F(c[0]) && y(b[h]) && c.length === a[c[0].toUpperCase()] && b.splice(h, 0, c[0].replace('M', 'L').replace('m', 'l')),
typeof b[h] === 'string' && (c.length && d.push(c.slice(0)), c.length = 0), c.push(b[h])
}d.push(c.slice(0)); return d
}; H.prototype.label = function (b, d, c, a, h, e, p, H, f) { return new J(this, b, d, c, a, h, e, p, H, f) }; H.prototype.alignElements = function () { this.alignedObjects.forEach(function (b) { return b.align() }) }; return H
}()); p(C.prototype, { Element: x, SVG_NS: k, escapes: { '&': '&amp;', '<': '&lt;', '>': '&gt;', "'": '&#39;', '"': '&quot;' }, symbols: u, draw: q }); z.registerRendererType('svg', C, !0); ''; return C
}); M(a, 'Core/Renderer/HTML/HTMLElement.js',
[a['Core/Globals.js'], a['Core/Renderer/SVG/SVGElement.js'], a['Core/Utilities.js']], function (a, w, C) {
var r = this && this.__extends || (function () { var c = function (a, e) { c = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (c, a) { c.__proto__ = a } || function (c, a) { for (var e in a)a.hasOwnProperty(e) && (c[e] = a[e]) }; return c(a, e) }; return function (a, e) { function f () { this.constructor = a }c(a, e); a.prototype = e === null ? Object.create(e) : (f.prototype = e.prototype, new f()) } }()); var z = a.isFirefox; var x = a.isMS; var J = a.isWebKit; var u = a.win
var n = C.css; var m = C.defined; var g = C.extend; var c = C.pick; var e = C.pInt; return (function (a) {
function f () { return a !== null && a.apply(this, arguments) || this }r(f, a); f.compose = function (c) { if (f.composedClasses.indexOf(c) === -1) { f.composedClasses.push(c); var a = f.prototype; var e = c.prototype; e.getSpanCorrection = a.getSpanCorrection; e.htmlCss = a.htmlCss; e.htmlGetBBox = a.htmlGetBBox; e.htmlUpdateTransform = a.htmlUpdateTransform; e.setSpanRotation = a.setSpanRotation } return c }; f.prototype.getSpanCorrection = function (c, a, e) {
this.xCorr = -c * e; this.yCorr =
-a
}; f.prototype.htmlCss = function (a) { var e = this.element.tagName === 'SPAN' && a && 'width' in a; var f = c(e && a.width, void 0); if (e) { delete a.width; this.textWidth = f; var l = !0 }a && a.textOverflow === 'ellipsis' && (a.whiteSpace = 'nowrap', a.overflow = 'hidden'); this.styles = g(this.styles, a); n(this.element, a); l && this.htmlUpdateTransform(); return this }; f.prototype.htmlGetBBox = function () { var c = this.element; return { x: c.offsetLeft, y: c.offsetTop, width: c.offsetWidth, height: c.offsetHeight } }; f.prototype.htmlUpdateTransform = function () {
if (this.added) {
var c =
this.renderer; var a = this.element; var f = this.translateX || 0; var g = this.translateY || 0; var l = this.x || 0; var B = this.y || 0; var r = this.textAlign || 'left'; var t = { left: 0, center: 0.5, right: 1 }[r]; var h = this.styles; h = h && h.whiteSpace; n(a, { marginLeft: f, marginTop: g }); !c.styledMode && this.shadows && this.shadows.forEach(function (b) { n(b, { marginLeft: f + 1, marginTop: g + 1 }) }); this.inverted && [].forEach.call(a.childNodes, function (b) { c.invertChild(b, a) }); if (a.tagName === 'SPAN') {
var d = this.rotation; var b = this.textWidth && e(this.textWidth); var p = [d, r, a.innerHTML, this.textWidth,
this.textAlign].join(); var G = void 0; (G = b !== this.oldTextWidth) && !(G = b > this.oldTextWidth) && ((G = this.textPxLength) || (n(a, { width: '', whiteSpace: h || 'nowrap' }), G = a.offsetWidth), G = G > b); G && (/[ \-]/.test(a.textContent || a.innerText) || a.style.textOverflow === 'ellipsis') ? (n(a, { width: b + 'px', display: 'block', whiteSpace: h || 'normal' }), this.oldTextWidth = b, this.hasBoxWidthChanged = !0) : this.hasBoxWidthChanged = !1; p !== this.cTT && (G = c.fontMetrics(a.style.fontSize, a).b, !m(d) || d === (this.oldRotation || 0) && r === this.oldAlign || this.setSpanRotation(d,
t, G), this.getSpanCorrection(!m(d) && this.textPxLength || a.offsetWidth, G, t, d, r)); n(a, { left: l + (this.xCorr || 0) + 'px', top: B + (this.yCorr || 0) + 'px' }); this.cTT = p; this.oldRotation = d; this.oldAlign = r
}
} else this.alignOnAdd = !0
}; f.prototype.setSpanRotation = function (c, a, e) {
var f = {}; var g = x && !/Edge/.test(u.navigator.userAgent) ? '-ms-transform' : J ? '-webkit-transform' : z ? 'MozTransform' : u.opera ? '-o-transform' : void 0; g && (f[g] = f.transform = 'rotate(' + c + 'deg)', f[g + (z ? 'Origin' : '-origin')] = f.transformOrigin = 100 * a + '% ' + e + 'px', n(this.element,
f))
}; f.composedClasses = []; return f
}(w))
}); M(a, 'Core/Renderer/HTML/HTMLRenderer.js', [a['Core/Renderer/HTML/AST.js'], a['Core/Renderer/SVG/SVGElement.js'], a['Core/Renderer/SVG/SVGRenderer.js'], a['Core/Utilities.js']], function (a, w, C, E) {
var r = this && this.__extends || (function () {
var a = function (g, c) { a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, c) { a.__proto__ = c } || function (a, c) { for (var e in c)c.hasOwnProperty(e) && (a[e] = c[e]) }; return a(g, c) }; return function (g, c) {
function e () {
this.constructor =
g
}a(g, c); g.prototype = c === null ? Object.create(c) : (e.prototype = c.prototype, new e())
}
}()); var x = E.attr; var J = E.createElement; var u = E.extend; var n = E.pick; return (function (m) {
function g () { return m !== null && m.apply(this, arguments) || this }r(g, m); g.compose = function (c) { g.composedClasses.indexOf(c) === -1 && (g.composedClasses.push(c), c.prototype.html = g.prototype.html); return c }; g.prototype.html = function (c, e, g) {
var f = this.createElement('span'); var l = f.element; var q = f.renderer; var k = q.isSVG; var m = function (c, a) {
['opacity', 'visibility'].forEach(function (e) {
c[e +
'Setter'] = function (f, h, d) { var b = c.div ? c.div.style : a; w.prototype[e + 'Setter'].call(this, f, h, d); b && (b[h] = f) }
}); c.addedSetters = !0
}; f.textSetter = function (c) { c !== this.textStr && (delete this.bBox, delete this.oldTextWidth, a.setElementHTML(this.element, n(c, '')), this.textStr = c, f.doTransform = !0) }; k && m(f, f.element.style); f.xSetter = f.ySetter = f.alignSetter = f.rotationSetter = function (c, a) { a === 'align' ? f.alignValue = f.textAlign = c : f[a] = c; f.doTransform = !0 }; f.afterSetters = function () {
this.doTransform && (this.htmlUpdateTransform(),
this.doTransform = !1)
}; f.attr({ text: c, x: Math.round(e), y: Math.round(g) }).css({ position: 'absolute' }); q.styledMode || f.css({ fontFamily: this.style.fontFamily, fontSize: this.style.fontSize }); l.style.whiteSpace = 'nowrap'; f.css = f.htmlCss; k && (f.add = function (c) {
var a = q.box.parentNode; var e = []; if (this.parentGroup = c) {
var g = c.div; if (!g) {
for (;c;)e.push(c), c = c.parentGroup; e.reverse().forEach(function (c) {
function d (b, d) { c[d] = b; d === 'translateX' ? k.left = b + 'px' : k.top = b + 'px'; c.doTransform = !0 } var b = x(c.element, 'class'); var h = c.styles ||
{}; g = c.div = c.div || J('div', b ? { className: b } : void 0, { position: 'absolute', left: (c.translateX || 0) + 'px', top: (c.translateY || 0) + 'px', display: c.display, opacity: c.opacity, cursor: h.cursor, pointerEvents: h.pointerEvents, visibility: c.visibility }, g || a); var k = g.style; u(c, { classSetter: (function (b) { return function (d) { this.element.setAttribute('class', d); b.className = d } }(g)), on: function () { e[0].div && f.on.apply({ element: e[0].div, onEvents: c.onEvents }, arguments); return c }, translateXSetter: d, translateYSetter: d }); c.addedSetters ||
m(c)
})
}
} else g = a; g.appendChild(l); f.added = !0; f.alignOnAdd && f.htmlUpdateTransform(); return f
}); return f
}; g.composedClasses = []; return g
}(C))
}); M(a, 'Core/Axis/AxisDefaults.js', [a['Core/Color/Palette.js']], function (a) {
var r; (function (r) {
r.defaultXAxisOptions = {
alignTicks: !0,
allowDecimals: void 0,
panningEnabled: !0,
zIndex: 2,
zoomEnabled: !0,
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,
gridLineDashStyle: 'Solid',
gridZIndex: 1,
labels: { autoRotation: void 0, autoRotationLimit: 80, distance: void 0, enabled: !0, indentation: 10, overflow: 'justify', padding: 5, reserveSpace: void 0, rotation: void 0, staggerLines: 0, step: 0, useHTML: !1, x: 0, zIndex: 7, style: { color: a.neutralColor60, cursor: 'default', fontSize: '11px' } },
maxPadding: 0.01,
minorGridLineDashStyle: 'Solid',
minorTickLength: 2,
minorTickPosition: 'outside',
minPadding: 0.01,
offset: void 0,
opposite: !1,
reversed: void 0,
reversedStacks: !1,
showEmpty: !0,
showFirstLabel: !0,
showLastLabel: !0,
startOfWeek: 1,
startOnTick: !1,
tickLength: 10,
tickPixelInterval: 100,
tickmarkPlacement: 'between',
tickPosition: 'outside',
title: { align: 'middle', rotation: 0, useHTML: !1, x: 0, y: 0, style: { color: a.neutralColor60 } },
type: 'linear',
uniqueNames: !0,
visible: !0,
minorGridLineColor: a.neutralColor5,
minorGridLineWidth: 1,
minorTickColor: a.neutralColor40,
lineColor: a.highlightColor20,
lineWidth: 1,
gridLineColor: a.neutralColor10,
gridLineWidth: void 0,
tickColor: a.highlightColor20
}; r.defaultYAxisOptions = { reversedStacks: !0, 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 a = this.axis.chart.numberFormatter; return a(this.total, -1) }, style: { color: a.neutralColor100, fontSize: '11px', fontWeight: 'bold', textOutline: '1px contrast' } }, gridLineWidth: 1, lineWidth: 0 }
r.defaultLeftAxisOptions = { labels: { x: -15 }, title: { rotation: 270 } }; r.defaultRightAxisOptions = { labels: { x: 15 }, title: { rotation: 90 } }; r.defaultBottomAxisOptions = { labels: { autoRotation: [-45], x: 0 }, margin: 15, title: { rotation: 0 } }; r.defaultTopAxisOptions = { labels: { autoRotation: [-45], x: 0 }, margin: 15, title: { rotation: 0 } }
})(r || (r = {})); return r
}); M(a, 'Core/Foundation.js', [a['Core/Utilities.js']], function (a) {
var r = a.addEvent; var C = a.isFunction; var E = a.objectEach; var z = a.removeEvent; return {
registerEventOptions: function (a, w) {
a.eventOptions =
a.eventOptions || {}; E(w.events, function (u, n) { a.eventOptions[n] !== u && (a.eventOptions[n] && (z(a, n, a.eventOptions[n]), delete a.eventOptions[n]), C(u) && (a.eventOptions[n] = u, r(a, n, u))) })
}
}
}); M(a, 'Core/Axis/Tick.js', [a['Core/FormatUtilities.js'], a['Core/Globals.js'], a['Core/Utilities.js']], function (a, w, C) {
var r = w.deg2rad; var z = C.clamp; var x = C.correctFloat; var J = C.defined; var u = C.destroyObjectProperties; var n = C.extend; var m = C.fireEvent; var g = C.isNumber; var c = C.merge; var e = C.objectEach; var l = C.pick; w = (function () {
function f (c, a, e, f, g) {
this.isNewLabel =
this.isNew = !0; this.axis = c; this.pos = a; this.type = e || ''; this.parameters = g || {}; this.tickmarkOffset = this.parameters.tickmarkOffset; this.options = this.parameters.options; m(this, 'init'); e || f || this.addLabel()
}f.prototype.addLabel = function () {
var c = this; var e = c.axis; var f = e.options; var I = e.chart; var D = e.categories; var B = e.logarithmic; var r = e.names; var t = c.pos; var h = l(c.options && c.options.labels, f.labels); var d = e.tickPositions; var b = t === d[0]; var p = t === d[d.length - 1]; var G = (!h.step || h.step === 1) && e.tickInterval === 1; d = d.info; var y = c.label; var L; D = this.parameters.category ||
(D ? l(D[t], r[t], t) : t); B && g(D) && (D = x(B.lin2log(D))); if (e.dateTime) if (d) { var F = I.time.resolveDTLFormat(f.dateTimeLabelFormats[!f.grid && d.higherRanks[t] || d.unitName]); var P = F.main } else g(D) && (P = e.dateTime.getXDateFormat(D, f.dateTimeLabelFormats || {})); c.isFirst = b; c.isLast = p; var S = { axis: e, chart: I, dateTimeLabelFormat: P, isFirst: b, isLast: p, pos: t, tick: c, tickPositionInfo: d, value: D }; m(this, 'labelFormat', S); var Q = function (b) {
return h.formatter ? h.formatter.call(b, b) : h.format ? (b.text = e.defaultLabelFormatter.call(b),
a.format(h.format, b, I)) : e.defaultLabelFormatter.call(b, b)
}; f = Q.call(S, S); var u = F && F.list; c.shortenLabel = u ? function () { for (L = 0; L < u.length; L++) if (n(S, { dateTimeLabelFormat: u[L] }), y.attr({ text: Q.call(S, S) }), y.getBBox().width < e.getSlotWidth(c) - 2 * h.padding) return; y.attr({ text: '' }) } : void 0; G && e._addedPlotLB && c.moveLabel(f, h); J(y) || c.movedLabel ? y && y.textStr !== f && !G && (!y.textWidth || h.style.width || y.styles.width || y.css({ width: null }), y.attr({ text: f }), y.textPxLength = y.getBBox().width) : (c.label = y = c.createLabel({
x: 0,
y: 0
}, f, h), c.rotation = 0)
}; f.prototype.createLabel = function (a, e, f) { var g = this.axis; var k = g.chart; if (a = J(e) && f.enabled ? k.renderer.text(e, a.x, a.y, f.useHTML).add(g.labelGroup) : null)k.styledMode || a.css(c(f.style)), a.textPxLength = a.getBBox().width; return a }; f.prototype.destroy = function () { u(this, this.axis) }; f.prototype.getPosition = function (c, a, e, f) {
var g = this.axis; var k = g.chart; var l = f && k.oldChartHeight || k.chartHeight; c = {
x: c ? x(g.translate(a + e, null, null, f) + g.transB) : g.left + g.offset + (g.opposite ? (f && k.oldChartWidth || k.chartWidth) -
g.right - g.left : 0),
y: c ? l - g.bottom + g.offset - (g.opposite ? g.height : 0) : x(l - g.translate(a + e, null, null, f) - g.transB)
}; c.y = z(c.y, -1E5, 1E5); m(this, 'afterGetPosition', { pos: c }); return c
}; f.prototype.getLabelPosition = function (c, a, e, f, g, l, n, t) {
var h = this.axis; var d = h.transA; var b = h.isLinked && h.linkedParent ? h.linkedParent.reversed : h.reversed; var p = h.staggerLines; var k = h.tickRotCorr || { x: 0, y: 0 }; var y = f || h.reserveSpaceDefault ? 0 : -h.labelOffset * (h.labelAlign === 'center' ? 0.5 : 1); var q = {}; var F = g.y; J(F) || (F = h.side === 0 ? e.rotation ? -8 : -e.getBBox().height
: h.side === 2 ? k.y + 8 : Math.cos(e.rotation * r) * (k.y - e.getBBox(!1, 0).height / 2)); c = c + g.x + y + k.x - (l && f ? l * d * (b ? -1 : 1) : 0); a = a + F - (l && !f ? l * d * (b ? 1 : -1) : 0); p && (e = n / (t || 1) % p, h.opposite && (e = p - e - 1), a += h.labelOffset / p * e); q.x = c; q.y = Math.round(a); m(this, 'afterGetLabelPosition', { pos: q, tickmarkOffset: l, index: n }); return q
}; f.prototype.getLabelSize = function () { return this.label ? this.label.getBBox()[this.axis.horiz ? 'height' : 'width'] : 0 }; f.prototype.getMarkPath = function (c, a, e, f, g, l) {
return l.crispLine([['M', c, a], ['L', c + (g ? 0 : -e),
a + (g ? e : 0)]], f)
}; f.prototype.handleOverflow = function (c) {
var a = this.axis; var e = a.options.labels; var f = c.x; var g = a.chart.chartWidth; var m = a.chart.spacing; var v = l(a.labelLeft, Math.min(a.pos, m[3])); m = l(a.labelRight, Math.max(a.isRadial ? 0 : a.pos + a.len, g - m[1])); var t = this.label; var h = this.rotation; var d = { left: 0, center: 0.5, right: 1 }[a.labelAlign || t.attr('align')]; var b = t.getBBox().width; var p = a.getSlotWidth(this); var G = {}; var y = p; var L = 1; var F; if (h || e.overflow !== 'justify') {
h < 0 && f - d * b < v ? F = Math.round(f / Math.cos(h * r) - v) : h > 0 && f + d * b > m && (F = Math.round((g - f) / Math.cos(h *
r)))
} else if (g = f + (1 - d) * b, f - d * b < v ? y = c.x + y * (1 - d) - v : g > m && (y = m - c.x + y * d, L = -1), y = Math.min(p, y), y < p && a.labelAlign === 'center' && (c.x += L * (p - y - d * (p - Math.min(b, y)))), b > y || a.autoRotation && (t.styles || {}).width)F = y; F && (this.shortenLabel ? this.shortenLabel() : (G.width = Math.floor(F) + 'px', (e.style || {}).textOverflow || (G.textOverflow = 'ellipsis'), t.css(G)))
}; f.prototype.moveLabel = function (c, a) {
var f = this; var g = f.label; var l = f.axis; var m = l.reversed; var q = !1; g && g.textStr === c ? (f.movedLabel = g, q = !0, delete f.label) : e(l.ticks, function (a) {
q ||
a.isNew || a === f || !a.label || a.label.textStr !== c || (f.movedLabel = a.label, q = !0, a.labelPos = f.movedLabel.xy, delete a.label)
}); if (!q && (f.labelPos || g)) { var t = f.labelPos || g.xy; g = l.horiz ? m ? 0 : l.width + l.left : t.x; l = l.horiz ? t.y : m ? l.width + l.left : 0; f.movedLabel = f.createLabel({ x: g, y: l }, c, a); f.movedLabel && f.movedLabel.attr({ opacity: 0 }) }
}; f.prototype.render = function (a, c, e) {
var f = this.axis; var g = f.horiz; var k = this.pos; var q = l(this.tickmarkOffset, f.tickmarkOffset); k = this.getPosition(g, k, q, c); q = k.x; var t = k.y; f = g && q === f.pos + f.len ||
!g && t === f.pos ? -1 : 1; g = l(e, this.label && this.label.newOpacity, 1); e = l(e, 1); this.isActive = !0; this.renderGridLine(c, e, f); this.renderMark(k, e, f); this.renderLabel(k, c, g, a); this.isNew = !1; m(this, 'afterRender')
}; f.prototype.renderGridLine = function (c, a, e) {
var f = this.axis; var g = f.options; var k = {}; var m = this.pos; var t = this.type; var h = l(this.tickmarkOffset, f.tickmarkOffset); var d = f.chart.renderer; var b = this.gridLine; var p = g.gridLineWidth; var G = g.gridLineColor; var y = g.gridLineDashStyle; this.type === 'minor' && (p = g.minorGridLineWidth, G = g.minorGridLineColor,
y = g.minorGridLineDashStyle); b || (f.chart.styledMode || (k.stroke = G, k['stroke-width'] = p || 0, k.dashstyle = y), t || (k.zIndex = 1), c && (a = 0), this.gridLine = b = d.path().attr(k).addClass('highcharts-' + (t ? t + '-' : '') + 'grid-line').add(f.gridGroup)); if (b && (e = f.getPlotLinePath({ value: m + h, lineWidth: b.strokeWidth() * e, force: 'pass', old: c })))b[c || this.isNew ? 'attr' : 'animate']({ d: e, opacity: a })
}; f.prototype.renderMark = function (c, a, e) {
var f = this.axis; var g = f.options; var k = f.chart.renderer; var m = this.type; var t = f.tickSize(m ? m + 'Tick' : 'tick'); var h = c.x
c = c.y; var d = l(g[m !== 'minor' ? 'tickWidth' : 'minorTickWidth'], !m && f.isXAxis ? 1 : 0); g = g[m !== 'minor' ? 'tickColor' : 'minorTickColor']; var b = this.mark; var p = !b; t && (f.opposite && (t[0] = -t[0]), b || (this.mark = b = k.path().addClass('highcharts-' + (m ? m + '-' : '') + 'tick').add(f.axisGroup), f.chart.styledMode || b.attr({ stroke: g, 'stroke-width': d })), b[p ? 'attr' : 'animate']({ d: this.getMarkPath(h, c, t[0], b.strokeWidth() * e, f.horiz, k), opacity: a }))
}; f.prototype.renderLabel = function (c, a, e, f) {
var k = this.axis; var m = k.horiz; var q = k.options; var t = this.label
var h = q.labels; var d = h.step; k = l(this.tickmarkOffset, k.tickmarkOffset); var b = c.x; c = c.y; var p = !0; t && g(b) && (t.xy = c = this.getLabelPosition(b, c, t, m, h, k, f, d), this.isFirst && !this.isLast && !q.showFirstLabel || this.isLast && !this.isFirst && !q.showLastLabel ? p = !1 : !m || h.step || h.rotation || a || e === 0 || this.handleOverflow(c), d && f % d && (p = !1), p && g(c.y) ? (c.opacity = e, t[this.isNewLabel ? 'attr' : 'animate'](c), this.isNewLabel = !1) : (t.attr('y', -9999), this.isNewLabel = !0))
}; f.prototype.replaceMovedLabel = function () {
var c = this.label; var a = this.axis
var e = a.reversed; if (c && !this.isNew) { var f = a.horiz ? e ? a.left : a.width + a.left : c.xy.x; e = a.horiz ? c.xy.y : e ? a.width + a.top : a.top; c.animate({ x: f, y: e, opacity: 0 }, void 0, c.destroy); delete this.label }a.isDirty = !0; this.label = this.movedLabel; delete this.movedLabel
}; return f
}()); ''; return w
}); M(a, 'Core/Axis/Axis.js', [a['Core/Animation/AnimationUtilities.js'], a['Core/Axis/AxisDefaults.js'], a['Core/Color/Color.js'], a['Core/Color/Palette.js'], a['Core/DefaultOptions.js'], a['Core/Foundation.js'], a['Core/Globals.js'], a['Core/Axis/Tick.js'],
a['Core/Utilities.js']], function (a, w, C, E, z, x, J, u, n) {
var m = a.animObject; var g = z.defaultOptions; var c = x.registerEventOptions; var e = J.deg2rad; var l = n.arrayMax; var f = n.arrayMin; var v = n.clamp; var q = n.correctFloat; var k = n.defined; var r = n.destroyObjectProperties; var D = n.erase; var B = n.error; var O = n.extend; var t = n.fireEvent; var h = n.getMagnitude; var d = n.isArray; var b = n.isNumber; var p = n.isString; var G = n.merge; var y = n.normalizeTickInterval; var L = n.objectEach; var F = n.pick; var P = n.relativeLength; var S = n.removeEvent; var Q = n.splat; var V = n.syncTimeout; a = (function () {
function a (b, a) {
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.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.eventOptions = this.coll = this.closestPointRange = this.chart = this.categories = this.bottom = this.alternateBands = void 0; this.init(b, a)
}a.prototype.init = function (a, d) {
var h = d.isX; this.chart = a; this.horiz = a.inverted && !this.isZAxis ? !h : h; this.isXAxis = h; this.coll = this.coll || (h ? 'xAxis' : 'yAxis'); t(this, 'init', { userOptions: d }); this.opposite = F(d.opposite, this.opposite); this.side = F(d.side, this.side, this.horiz
? this.opposite ? 0 : 2 : this.opposite ? 1 : 3); this.setOptions(d); var e = this.options; var f = e.labels; var p = e.type; this.userOptions = d; this.minPixelPadding = 0; this.reversed = F(e.reversed, this.reversed); this.visible = e.visible; this.zoomEnabled = e.zoomEnabled; this.hasNames = p === 'category' || !0 === e.categories; this.categories = e.categories || this.hasNames; this.names || (this.names = [], this.names.keys = {}); this.plotLinesAndBandsGroups = {}; this.positiveValuesOnly = !!this.logarithmic; this.isLinked = k(e.linkedTo); this.ticks = {}; this.labelEdge =
[]; this.minorTicks = {}; this.plotLinesAndBands = []; this.alternateBands = {}; this.len = 0; this.minRange = this.userMinRange = e.minRange || e.maxZoom; this.range = e.range; this.offset = e.offset || 0; this.min = this.max = null; d = F(e.crosshair, Q(a.options.tooltip.crosshairs)[h ? 0 : 1]); this.crosshair = !0 === d ? {} : d; a.axes.indexOf(this) === -1 && (h ? a.axes.splice(a.xAxis.length, 0, this) : a.axes.push(this), a[this.coll].push(this)); this.series = this.series || []; a.inverted && !this.isZAxis && h && typeof this.reversed === 'undefined' && (this.reversed =
!0); this.labelRotation = b(f.rotation) ? f.rotation : void 0; c(this, e); t(this, 'afterInit')
}; a.prototype.setOptions = function (b) { this.options = G(w.defaultXAxisOptions, this.coll === 'yAxis' && w.defaultYAxisOptions, [w.defaultTopAxisOptions, w.defaultRightAxisOptions, w.defaultBottomAxisOptions, w.defaultLeftAxisOptions][this.side], G(g[this.coll], b)); t(this, 'afterSetOptions', { userOptions: b }) }; a.prototype.defaultLabelFormatter = function (a) {
var d = this.axis; a = this.chart.numberFormatter; var c = b(this.value) ? this.value : NaN
var e = d.chart.time; var h = this.dateTimeLabelFormat; var f = g.lang; var p = f.numericSymbols; f = f.numericSymbolMagnitude || 1E3; var H = d.logarithmic ? Math.abs(c) : d.tickInterval; var y = p && p.length; if (d.categories) var k = '' + this.value; else if (h)k = e.dateFormat(h, c); else if (y && H >= 1E3) for (;y-- && typeof k === 'undefined';)d = Math.pow(f, y + 1), H >= d && 10 * c % d === 0 && p[y] !== null && c !== 0 && (k = a(c / d, -1) + p[y]); typeof k === 'undefined' && (k = Math.abs(c) >= 1E4 ? a(c, -1) : a(c, -1, void 0, '')); return k
}; a.prototype.getSeriesExtremes = function () {
var a = this; var d = a.chart; var c
t(this, 'getSeriesExtremes', null, function () {
a.hasVisibleSeries = !1; a.dataMin = a.dataMax = a.threshold = null; a.softThreshold = !a.isXAxis; a.stacking && a.stacking.buildStacks(); a.series.forEach(function (e) {
if (e.visible || !d.options.chart.ignoreHiddenSeries) {
var h = e.options; var f = h.threshold; a.hasVisibleSeries = !0; a.positiveValuesOnly && f <= 0 && (f = null); if (a.isXAxis) {
if (h = e.xData, h.length) {
h = a.logarithmic ? h.filter(a.validatePositiveValue) : h; c = e.getXExtremes(h); var p = c.min; var g = c.max; b(p) || p instanceof Date || (h = h.filter(b),
c = e.getXExtremes(h), p = c.min, g = c.max); h.length && (a.dataMin = Math.min(F(a.dataMin, p), p), a.dataMax = Math.max(F(a.dataMax, g), g))
}
} else if (e = e.applyExtremes(), b(e.dataMin) && (p = e.dataMin, a.dataMin = Math.min(F(a.dataMin, p), p)), b(e.dataMax) && (g = e.dataMax, a.dataMax = Math.max(F(a.dataMax, g), g)), k(f) && (a.threshold = f), !h.softThreshold || a.positiveValuesOnly)a.softThreshold = !1
}
})
}); t(this, 'afterGetSeriesExtremes')
}; a.prototype.translate = function (a, d, c, e, h, f) {
var p = this.linkedParent || this; var g = e && p.old ? p.old.min : p.min
var H = p.minPixelPadding; h = (p.isOrdinal || p.brokenAxis && p.brokenAxis.hasBreaks || p.logarithmic && h) && p.lin2val; var K = 1; var y = 0; e = e && p.old ? p.old.transA : p.transA; e || (e = p.transA); c && (K *= -1, y = p.len); p.reversed && (K *= -1, y -= K * (p.sector || p.len)); d ? (a = (a * K + y - H) / e + g, h && (a = p.lin2val(a))) : (h && (a = p.val2lin(a)), a = b(g) ? K * (a - g) * e + y + K * H + (b(f) ? e * f : 0) : void 0); return a
}; a.prototype.toPixels = function (b, a) { return this.translate(b, !1, !this.horiz, null, !0) + (a ? 0 : this.pos) }; a.prototype.toValue = function (b, a) {
return this.translate(b - (a
? 0 : this.pos), !0, !this.horiz, null, !0)
}; a.prototype.getPlotLinePath = function (a) {
function d (b, a, d) { if (m !== 'pass' && b < a || b > d)m ? b = v(b, a, d) : r = !0; return b } var c = this; var e = c.chart; var h = c.left; var f = c.top; var p = a.old; var g = a.value; var H = a.lineWidth; var y = p && e.oldChartHeight || e.chartHeight; var k = p && e.oldChartWidth || e.chartWidth; var G = c.transB; var l = a.translatedValue; var m = a.force; var L; var q; var n; var B; var r; a = { value: g, lineWidth: H, old: p, force: m, acrossPanes: a.acrossPanes, translatedValue: l }; t(this, 'getPlotLinePath', a, function (a) {
l = F(l, c.translate(g, null, null, p)); l = v(l, -1E5,
1E5); L = n = Math.round(l + G); q = B = Math.round(y - l - G); b(l) ? c.horiz ? (q = f, B = y - c.bottom, L = n = d(L, h, h + c.width)) : (L = h, n = k - c.right, q = B = d(q, f, f + c.height)) : (r = !0, m = !1); a.path = r && !m ? null : e.renderer.crispLine([['M', L, q], ['L', n, B]], H || 1)
}); return a.path
}; a.prototype.getLinearTickPositions = function (b, a, d) { var c = q(Math.floor(a / b) * b); d = q(Math.ceil(d / b) * b); var e = []; var h; q(c + b) === c && (h = 20); if (this.single) return [a]; for (a = c; a <= d;) { e.push(a); a = q(a + b, h); if (a === f) break; var f = a } return e }; a.prototype.getMinorTickInterval = function () {
var b =
this.options; return !0 === b.minorTicks ? F(b.minorTickInterval, 'auto') : !1 === b.minorTicks ? null : b.minorTickInterval
}; a.prototype.getMinorTickPositions = function () {
var b = this.options; var a = this.tickPositions; var d = this.minorTickInterval; var c = this.pointRangePadding || 0; var e = this.min - c; c = this.max + c; var h = c - e; var f = []; if (h && h / d < this.len / 3) {
var p = this.logarithmic; if (p) this.paddedTicks.forEach(function (b, a, c) { a && f.push.apply(f, p.getLogTickPositions(d, c[a - 1], c[a], !0)) }); else if (this.dateTime && this.getMinorTickInterval() === 'auto') {
f =
f.concat(this.getTimeTicks(this.dateTime.normalizeTimeTickInterval(d), e, c, b.startOfWeek))
} else for (b = e + (a[0] - e) % d; b <= c && b !== f[0]; b += d)f.push(b)
}f.length !== 0 && this.trimTicks(f); return f
}; a.prototype.adjustForMinRange = function () {
var b = this.options; var a = this.logarithmic; var d = this.min; var c = this.max; var e = 0; var h; var p; var g; var y; this.isXAxis && typeof this.minRange === 'undefined' && !a && (k(b.min) || k(b.max) ? this.minRange = null : (this.series.forEach(function (b) {
g = b.xData; y = b.xIncrement ? 1 : g.length - 1; if (g.length > 1) {
for (h = y; h > 0; h--) {
if (p = g[h] -
g[h - 1], !e || p < e)e = p
}
}
}), this.minRange = Math.min(5 * e, this.dataMax - this.dataMin))); if (c - d < this.minRange) { var G = this.dataMax - this.dataMin >= this.minRange; var t = this.minRange; var m = (t - c + d) / 2; m = [d - m, F(b.min, d - m)]; G && (m[2] = this.logarithmic ? this.logarithmic.log2lin(this.dataMin) : this.dataMin); d = l(m); c = [d + t, F(b.max, d + t)]; G && (c[2] = a ? a.log2lin(this.dataMax) : this.dataMax); c = f(c); c - d < t && (m[0] = c - t, m[1] = F(b.min, c - t), d = l(m)) } this.min = d; this.max = c
}; a.prototype.getClosest = function () {
var b; this.categories ? b = 1 : this.series.forEach(function (a) {
var d =
a.closestPointRange; var c = a.visible || !a.chart.options.chart.ignoreHiddenSeries; !a.noSharedTooltip && k(d) && c && (b = k(b) ? Math.min(b, d) : d)
}); return b
}; a.prototype.nameToX = function (b) { var a = d(this.categories); var c = a ? this.categories : this.names; var e = b.options.x; b.series.requireSorting = !1; k(e) || (e = this.options.uniqueNames ? a ? c.indexOf(b.name) : F(c.keys[b.name], -1) : b.series.autoIncrement()); if (e === -1) { if (!a) var h = c.length } else h = e; typeof h !== 'undefined' && (this.names[h] = b.name, this.names.keys[b.name] = h); return h }; a.prototype.updateNames =
function () { var b = this; var a = this.names; a.length > 0 && (Object.keys(a.keys).forEach(function (b) { delete a.keys[b] }), a.length = 0, this.minRange = this.userMinRange, (this.series || []).forEach(function (a) { a.xIncrement = null; if (!a.points || a.isDirtyData)b.max = Math.max(b.max, a.xData.length - 1), a.processData(), a.generatePoints(); a.data.forEach(function (d, c) { if (d && d.options && typeof d.name !== 'undefined') { var e = b.nameToX(d); typeof e !== 'undefined' && e !== d.x && (d.x = e, a.xData[c] = e) } }) })) }; a.prototype.setAxisTranslation = function () {
var b =
this; var a = b.max - b.min; var d = b.linkedParent; var c = !!b.categories; var e = b.isXAxis; var h = b.axisPointRange || 0; var f = 0; var g = 0; var y = b.transA; if (e || c || h) {
var k = b.getClosest(); d ? (f = d.minPointOffset, g = d.pointRangePadding) : b.series.forEach(function (a) { var d = c ? 1 : e ? F(a.options.pointRange, k, 0) : b.axisPointRange || 0; var A = a.options.pointPlacement; h = Math.max(h, d); if (!b.single || c)a = a.is('xrange') ? !e : e, f = Math.max(f, a && p(A) ? 0 : d / 2), g = Math.max(g, a && A === 'on' ? 0 : d) }); d = b.ordinal && b.ordinal.slope && k ? b.ordinal.slope / k : 1; b.minPointOffset = f *= d; b.pointRangePadding =
g *= d; b.pointRange = Math.min(h, b.single && c ? 1 : a); e && (b.closestPointRange = k)
}b.translationSlope = b.transA = y = b.staticScale || b.len / (a + g || 1); b.transB = b.horiz ? b.left : b.bottom; b.minPixelPadding = y * f; t(this, 'afterSetAxisTranslation')
}; a.prototype.minFromRange = function () { return this.max - this.range }; a.prototype.setTickInterval = function (a) {
var d = this; var c = d.chart; var e = d.logarithmic; var f = d.options; var p = d.isXAxis; var g = d.isLinked; var l = f.tickPixelInterval; var G = d.categories; var H = d.softThreshold; var m = f.maxPadding; var L = f.minPadding; var n = f.tickInterval
var v = b(d.threshold) ? d.threshold : null; d.dateTime || G || g || this.getTickAmount(); var r = F(d.userMin, f.min); var P = F(d.userMax, f.max); if (g) { d.linkedParent = c[d.coll][f.linkedTo]; var D = d.linkedParent.getExtremes(); d.min = F(D.min, D.dataMin); d.max = F(D.max, D.dataMax); f.type !== d.linkedParent.options.type && B(11, 1, c) } else { if (H && k(v)) if (d.dataMin >= v)D = v, L = 0; else if (d.dataMax <= v) { var I = v; m = 0 }d.min = F(r, D, d.dataMin); d.max = F(P, I, d.dataMax) }e && (d.positiveValuesOnly && !a && Math.min(d.min, F(d.dataMin, d.min)) <= 0 && B(10, 1, c), d.min =
q(e.log2lin(d.min), 16), d.max = q(e.log2lin(d.max), 16)); d.range && k(d.max) && (d.userMin = d.min = r = Math.max(d.dataMin, d.minFromRange()), d.userMax = P = d.max, d.range = null); t(d, 'foundExtremes'); d.beforePadding && d.beforePadding(); d.adjustForMinRange(); !(G || d.axisPointRange || d.stacking && d.stacking.usePercentage || g) && k(d.min) && k(d.max) && (c = d.max - d.min) && (!k(r) && L && (d.min -= c * L), !k(P) && m && (d.max += c * m)); b(d.userMin) || (b(f.softMin) && f.softMin < d.min && (d.min = r = f.softMin), b(f.floor) && (d.min = Math.max(d.min, f.floor))); b(d.userMax) ||
(b(f.softMax) && f.softMax > d.max && (d.max = P = f.softMax), b(f.ceiling) && (d.max = Math.min(d.max, f.ceiling))); H && k(d.dataMin) && (v = v || 0, !k(r) && d.min < v && d.dataMin >= v ? d.min = d.options.minRange ? Math.min(v, d.max - d.minRange) : v : !k(P) && d.max > v && d.dataMax <= v && (d.max = d.options.minRange ? Math.max(v, d.min + d.minRange) : v)); b(d.min) && b(d.max) && !this.chart.polar && d.min > d.max && (k(d.options.min) ? d.max = d.min : k(d.options.max) && (d.min = d.max)); d.tickInterval = d.min === d.max || typeof d.min === 'undefined' || typeof d.max === 'undefined' ? 1
: g && d.linkedParent && !n && l === d.linkedParent.options.tickPixelInterval ? n = d.linkedParent.tickInterval : F(n, this.tickAmount ? (d.max - d.min) / Math.max(this.tickAmount - 1, 1) : void 0, G ? 1 : (d.max - d.min) * l / Math.max(d.len, l)); p && !a && (d.series.forEach(function (b) { b.forceCrop = b.forceCropping && b.forceCropping(); b.processData(d.min !== (d.old && d.old.min) || d.max !== (d.old && d.old.max)) }), t(this, 'postProcessData')); d.setAxisTranslation(); t(this, 'initialAxisTranslation'); d.pointRange && !n && (d.tickInterval = Math.max(d.pointRange,
d.tickInterval)); a = F(f.minTickInterval, d.dateTime && !d.series.some(function (b) { return b.noSharedTooltip }) ? d.closestPointRange : 0); !n && d.tickInterval < a && (d.tickInterval = a); d.dateTime || d.logarithmic || n || (d.tickInterval = y(d.tickInterval, void 0, h(d.tickInterval), F(f.allowDecimals, d.tickInterval < 0.5 || void 0 !== this.tickAmount), !!this.tickAmount)); this.tickAmount || (d.tickInterval = d.unsquish()); this.setTickPositions()
}; a.prototype.setTickPositions = function () {
var b = this.options; var d = b.tickPositions; var a = this.getMinorTickInterval()
var c = this.hasVerticalPanning(); var e = this.coll === 'colorAxis'; var h = (e || !c) && b.startOnTick; c = (e || !c) && b.endOnTick; e = b.tickPositioner; this.tickmarkOffset = this.categories && b.tickmarkPlacement === 'between' && this.tickInterval === 1 ? 0.5 : 0; this.minorTickInterval = a === 'auto' && this.tickInterval ? this.tickInterval / 5 : a; this.single = this.min === this.max && k(this.min) && !this.tickAmount && (parseInt(this.min, 10) === this.min || !1 !== b.allowDecimals); this.tickPositions = a = d && d.slice(); !a && (this.ordinal && this.ordinal.positions || !((this.max -
this.min) / this.tickInterval > Math.max(2 * this.len, 200)) ? a = this.dateTime ? this.getTimeTicks(this.dateTime.normalizeTimeTickInterval(this.tickInterval, b.units), this.min, this.max, b.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) : (a = [this.min, this.max], B(19, !1, this.chart)), a.length > this.len && (a = [a[0], a.pop()], a[0] === a[1] &&
(a.length = 1)), this.tickPositions = a, e && (e = e.apply(this, [this.min, this.max]))) && (this.tickPositions = a = e); this.paddedTicks = a.slice(0); this.trimTicks(a, h, c); this.isLinked || (this.single && a.length < 2 && !this.categories && !this.series.some(function (b) { return b.is('heatmap') && b.options.pointPlacement === 'between' }) && (this.min -= 0.5, this.max += 0.5), d || e || this.adjustTickAmount()); t(this, 'afterSetTickPositions')
}; a.prototype.trimTicks = function (b, d, a) {
var c = b[0]; var e = b[b.length - 1]; var h = !this.isOrdinal && this.minPointOffset ||
0; t(this, 'trimTicks'); if (!this.isLinked) { if (d && -Infinity !== c) this.min = c; else for (;this.min - h > b[0];)b.shift(); if (a) this.max = e; else for (;this.max + h < b[b.length - 1];)b.pop(); b.length === 0 && k(c) && !this.options.tickPositions && b.push((e + c) / 2) }
}; a.prototype.alignToOthers = function () {
var b = {}; var d = this.options; var a; !1 !== this.chart.options.chart.alignTicks && d.alignTicks && !1 !== d.startOnTick && !1 !== d.endOnTick && !this.logarithmic && this.chart[this.coll].forEach(function (d) {
var c = d.options; c = [d.horiz ? c.left : c.top, c.width,
c.height, c.pane].join(); d.series.length && (b[c] ? a = !0 : b[c] = 1)
}); return a
}; a.prototype.getTickAmount = function () { var b = this.options; var d = b.tickPixelInterval; var a = b.tickAmount; !k(b.tickInterval) && !a && this.len < d && !this.isRadial && !this.logarithmic && b.startOnTick && b.endOnTick && (a = 2); !a && this.alignToOthers() && (a = Math.ceil(this.len / d) + 1); a < 4 && (this.finalTickAmt = a, a = 5); this.tickAmount = a }; a.prototype.adjustTickAmount = function () {
var d = this.options; var a = this.tickInterval; var c = this.tickPositions; var e = this.tickAmount; var h = this.finalTickAmt
var f = c && c.length; var p = F(this.threshold, this.softThreshold ? 0 : null); if (this.hasData() && b(this.min) && b(this.max)) {
if (f < e) { for (;c.length < e;)c.length % 2 || this.min === p ? c.push(q(c[c.length - 1] + a)) : c.unshift(q(c[0] - a)); this.transA *= (f - 1) / (e - 1); this.min = d.startOnTick ? c[0] : Math.min(this.min, c[0]); this.max = d.endOnTick ? c[c.length - 1] : Math.max(this.max, c[c.length - 1]) } else f > e && (this.tickInterval *= 2, this.setTickPositions()); if (k(h)) {
for (a = d = c.length; a--;)(h === 3 && a % 2 === 1 || h <= 2 && a > 0 && a < d - 1) && c.splice(a, 1); this.finalTickAmt =
void 0
}
}
}; a.prototype.setScale = function () {
var b = !1; var d = !1; this.series.forEach(function (a) { b = b || a.isDirtyData || a.isDirty; d = d || a.xAxis && a.xAxis.isDirty || !1 }); this.setAxisSize(); var a = this.len !== (this.old && this.old.len); a || b || d || this.isLinked || this.forceRedraw || this.userMin !== (this.old && this.old.userMin) || this.userMax !== (this.old && this.old.userMax) || this.alignToOthers() ? (this.stacking && this.stacking.resetStacks(), this.forceRedraw = !1, this.getSeriesExtremes(), this.setTickInterval(), this.isDirty || (this.isDirty =
a || this.min !== (this.old && this.old.min) || this.max !== (this.old && this.old.max))) : this.stacking && this.stacking.cleanStacks(); b && this.panningState && (this.panningState.isDirty = !0); t(this, 'afterSetScale')
}; a.prototype.setExtremes = function (b, d, a, c, e) { var h = this; var f = h.chart; a = F(a, !0); h.series.forEach(function (b) { delete b.kdTree }); e = O(e, { min: b, max: d }); t(h, 'setExtremes', e, function () { h.userMin = b; h.userMax = d; h.eventArgs = e; a && f.redraw(c) }) }; a.prototype.zoom = function (b, d) {
var a = this; var c = this.dataMin; var e = this.dataMax
var h = this.options; var f = Math.min(c, F(h.min, c)); var p = Math.max(e, F(h.max, e)); b = { newMin: b, newMax: d }; t(this, 'zoom', b, function (b) { var d = b.newMin; var h = b.newMax; if (d !== a.min || h !== a.max)a.allowZoomOutside || (k(c) && (d < f && (d = f), d > p && (d = p)), k(e) && (h < f && (h = f), h > p && (h = p))), a.displayBtn = typeof d !== 'undefined' || typeof h !== 'undefined', a.setExtremes(d, h, !1, void 0, { trigger: 'zoom' }); b.zoomed = !0 }); return b.zoomed
}; a.prototype.setAxisSize = function () {
var b = this.chart; var d = this.options; var a = d.offsets || [0, 0, 0, 0]; var c = this.horiz; var e = this.width = Math.round(P(F(d.width,
b.plotWidth - a[3] + a[1]), b.plotWidth)); var h = this.height = Math.round(P(F(d.height, b.plotHeight - a[0] + a[2]), b.plotHeight)); var f = this.top = Math.round(P(F(d.top, b.plotTop + a[0]), b.plotHeight, b.plotTop)); d = this.left = Math.round(P(F(d.left, b.plotLeft + a[3]), b.plotWidth, b.plotLeft)); this.bottom = b.chartHeight - h - f; this.right = b.chartWidth - e - d; this.len = Math.max(c ? e : h, 0); this.pos = c ? d : f
}; a.prototype.getExtremes = function () {
var b = this.logarithmic; return {
min: b ? q(b.lin2log(this.min)) : this.min,
max: b ? q(b.lin2log(this.max)) : this.max,
dataMin: this.dataMin,
dataMax: this.dataMax,
userMin: this.userMin,
userMax: this.userMax
}
}; a.prototype.getThreshold = function (b) { var d = this.logarithmic; var a = d ? d.lin2log(this.min) : this.min; d = d ? d.lin2log(this.max) : this.max; b === null || -Infinity === b ? b = a : Infinity === b ? b = d : a > b ? b = a : d < b && (b = d); return this.translate(b, 0, 1, 0, 1) }; a.prototype.autoLabelAlign = function (b) {
var d = (F(b, 0) - 90 * this.side + 720) % 360; b = { align: 'center' }; t(this, 'autoLabelAlign', b, function (b) { d > 15 && d < 165 ? b.align = 'right' : d > 195 && d < 345 && (b.align = 'left') })
return b.align
}; a.prototype.tickSize = function (b) { var d = this.options; var a = F(d[b === 'tick' ? 'tickWidth' : 'minorTickWidth'], b === 'tick' && this.isXAxis && !this.categories ? 1 : 0); var c = d[b === 'tick' ? 'tickLength' : 'minorTickLength']; if (a && c) { d[b + 'Position'] === 'inside' && (c = -c); var e = [c, a] }b = { tickSize: e }; t(this, 'afterTickSize', b); return b.tickSize }; a.prototype.labelMetrics = function () {
var b = this.tickPositions && this.tickPositions[0] || 0; return this.chart.renderer.fontMetrics(this.options.labels.style.fontSize, this.ticks[b] &&
this.ticks[b].label)
}; a.prototype.unsquish = function () {
var d = this.options.labels; var a = this.horiz; var c = this.tickInterval; var h = this.len / (((this.categories ? 1 : 0) + this.max - this.min) / c); var f = d.rotation; var p = this.labelMetrics(); var g = Math.max(this.max - this.min, 0); var y = function (b) { var d = b / (h || 1); d = d > 1 ? Math.ceil(d) : 1; d * c > g && Infinity !== b && Infinity !== h && g && (d = Math.ceil(g / c)); return q(d * c) }; var k = c; var l; var G; var t = Number.MAX_VALUE; if (a) {
if (!d.staggerLines && !d.step) if (b(f)) var m = [f]; else h < d.autoRotationLimit && (m = d.autoRotation); m && m.forEach(function (b) {
if (b ===
f || b && b >= -90 && b <= 90) { G = y(Math.abs(p.h / Math.sin(e * b))); var d = G + Math.abs(b / 360); d < t && (t = d, l = b, k = G) }
})
} else d.step || (k = y(p.h)); this.autoRotation = m; this.labelRotation = F(l, b(f) ? f : 0); return k
}; a.prototype.getSlotWidth = function (d) {
var a = this.chart; var c = this.horiz; var e = this.options.labels; var h = Math.max(this.tickPositions.length - (this.categories ? 0 : 1), 1); var f = a.margin[3]; if (d && b(d.slotWidth)) return d.slotWidth; if (c && e.step < 2) return e.rotation ? 0 : (this.staggerLines || 1) * this.len / h; if (!c) {
d = e.style.width; if (void 0 !== d) {
return parseInt(String(d),
10)
} if (f) return f - a.spacing[3]
} return 0.33 * a.chartWidth
}; a.prototype.renderUnsquish = function () {
var b = this.chart; var d = b.renderer; var a = this.tickPositions; var c = this.ticks; var e = this.options.labels; var h = e.style; var f = this.horiz; var g = this.getSlotWidth(); var y = Math.max(1, Math.round(g - 2 * e.padding)); var k = {}; var G = this.labelMetrics(); var l = h.textOverflow; var t = 0; p(e.rotation) || (k.rotation = e.rotation || 0); a.forEach(function (b) { b = c[b]; b.movedLabel && b.replaceMovedLabel(); b && b.label && b.label.textPxLength > t && (t = b.label.textPxLength) }); this.maxLabelLength =
t; if (this.autoRotation)t > y && t > G.h ? k.rotation = this.labelRotation : this.labelRotation = 0; else if (g) { var m = y; if (!l) { var F = 'clip'; for (y = a.length; !f && y--;) { var L = a[y]; if (L = c[L].label)L.styles && L.styles.textOverflow === 'ellipsis' ? L.css({ textOverflow: 'clip' }) : L.textPxLength > g && L.css({ width: g + 'px' }), L.getBBox().height > this.len / a.length - (G.h - G.f) && (L.specificTextOverflow = 'ellipsis') } } }k.rotation && (m = t > 0.5 * b.chartHeight ? 0.33 * b.chartHeight : t, l || (F = 'ellipsis')); if (this.labelAlign = e.align || this.autoLabelAlign(this.labelRotation)) {
k.align =
this.labelAlign
}a.forEach(function (b) { var d = (b = c[b]) && b.label; var a = h.width; var e = {}; d && (d.attr(k), b.shortenLabel ? b.shortenLabel() : m && !a && h.whiteSpace !== 'nowrap' && (m < d.textPxLength || d.element.tagName === 'SPAN') ? (e.width = m + 'px', l || (e.textOverflow = d.specificTextOverflow || F), d.css(e)) : d.styles && d.styles.width && !e.width && !a && d.css({ width: null }), delete d.specificTextOverflow, b.rotation = k.rotation) }, this); this.tickRotCorr = d.rotCorr(G.b, this.labelRotation || 0, this.side !== 0)
}; a.prototype.hasData = function () {
return this.series.some(function (b) { return b.hasData() }) ||
this.options.showEmpty && k(this.min) && k(this.max)
}; a.prototype.addTitle = function (b) {
var d = this.chart.renderer; var a = this.horiz; var c = this.opposite; var e = this.options.title; var h = this.chart.styledMode; var f; this.axisTitle || ((f = e.textAlign) || (f = (a ? { low: 'left', middle: 'center', high: 'right' } : { low: c ? 'right' : 'left', middle: 'center', high: c ? 'left' : 'right' })[e.align]), this.axisTitle = d.text(e.text || '', 0, 0, e.useHTML).attr({ zIndex: 7, rotation: e.rotation, align: f }).addClass('highcharts-axis-title'), h || this.axisTitle.css(G(e.style)), this.axisTitle.add(this.axisGroup),
this.axisTitle.isNew = !0); h || e.style.width || this.isRadial || this.axisTitle.css({ width: this.len + 'px' }); this.axisTitle[b ? 'show' : 'hide'](b)
}; a.prototype.generateTick = function (b) { var d = this.ticks; d[b] ? d[b].addLabel() : d[b] = new u(this, b) }; a.prototype.getOffset = function () {
var b = this; var d = this; var a = d.chart; var c = a.renderer; var e = d.options; var h = d.tickPositions; var f = d.ticks; var p = d.horiz; var g = d.side; var y = a.inverted && !d.isZAxis ? [1, 0, 3, 2][g] : g; var G = d.hasData(); var l = e.title; var m = e.labels; var q = a.axisOffset; a = a.clipOffset; var v = [-1, 1, 1, -1][g]; var n = e.className
var B = d.axisParent; var r; var P = 0; var D = 0; var ca = 0; d.showAxis = r = G || e.showEmpty; d.staggerLines = d.horiz && m.staggerLines || void 0; if (!d.axisGroup) { var ia = function (d, a, e) { return c.g(d).attr({ zIndex: e }).addClass('highcharts-' + b.coll.toLowerCase() + a + ' ' + (b.isRadial ? 'highcharts-radial-axis' + a + ' ' : '') + (n || '')).add(B) }; d.gridGroup = ia('grid', '-grid', e.gridZIndex); d.axisGroup = ia('axis', '', e.zIndex); d.labelGroup = ia('axis-labels', '-labels', m.zIndex) }G || d.isLinked ? (h.forEach(function (b) { d.generateTick(b) }), d.renderUnsquish(), d.reserveSpaceDefault =
g === 0 || g === 2 || { 1: 'left', 3: 'right' }[g] === d.labelAlign, F(m.reserveSpace, d.labelAlign === 'center' ? !0 : null, d.reserveSpaceDefault) && h.forEach(function (b) { ca = Math.max(f[b].getLabelSize(), ca) }), d.staggerLines && (ca *= d.staggerLines), d.labelOffset = ca * (d.opposite ? -1 : 1)) : L(f, function (b, d) { b.destroy(); delete f[d] }); if (l && l.text && !1 !== l.enabled && (d.addTitle(r), r && !1 !== l.reserveSpace)) { d.titleOffset = P = d.axisTitle.getBBox()[p ? 'height' : 'width']; var I = l.offset; D = k(I) ? 0 : F(l.margin, p ? 5 : 10) }d.renderLine(); d.offset = v * F(e.offset,
q[g] ? q[g] + (e.margin || 0) : 0); d.tickRotCorr = d.tickRotCorr || { x: 0, y: 0 }; l = g === 0 ? -d.labelMetrics().h : g === 2 ? d.tickRotCorr.y : 0; G = Math.abs(ca) + D; ca && (G = G - l + v * (p ? F(m.y, d.tickRotCorr.y + 8 * v) : m.x)); d.axisTitleMargin = F(I, G); d.getMaxLabelDimensions && (d.maxLabelDimensions = d.getMaxLabelDimensions(f, h)); p = this.tickSize('tick'); q[g] = Math.max(q[g], (d.axisTitleMargin || 0) + P + v * d.offset, G, h && h.length && p ? p[0] + v * d.offset : 0); e = e.offset ? 0 : 2 * Math.floor(d.axisLine.strokeWidth() / 2); a[y] = Math.max(a[y], e); t(this, 'afterGetOffset')
}
a.prototype.getLinePath = function (b) { var d = this.chart; var a = this.opposite; var c = this.offset; var e = this.horiz; var h = this.left + (a ? this.width : 0) + c; c = d.chartHeight - this.bottom - (a ? this.height : 0) + c; a && (b *= -1); return d.renderer.crispLine([['M', e ? this.left : h, e ? c : this.top], ['L', e ? d.chartWidth - this.right : h, e ? c : d.chartHeight - this.bottom]], b) }; a.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
}))
}; a.prototype.getTitlePosition = function () {
var b = this.horiz; var d = this.left; var a = this.top; var c = this.len; var e = this.options.title; var h = b ? d : a; var f = this.opposite; var p = this.offset; var g = e.x; var y = e.y; var k = this.axisTitle; var G = this.chart.renderer.fontMetrics(e.style.fontSize, k); k = Math.max(k.getBBox(null, 0).height - G.h - 1, 0); c = { low: h + (b ? 0 : c), middle: h + c / 2, high: h + (b ? c : 0) }[e.align]; d = (b ? a + this.height : d) + (b ? 1 : -1) * (f ? -1 : 1) * this.axisTitleMargin + [-k, k, G.f, -k][this.side]; b = {
x: b ? c + g : d + (f ? this.width : 0) + p +
g,
y: b ? d + y - (f ? this.height : 0) + p : c + y
}; t(this, 'afterGetTitlePosition', { titlePosition: b }); return b
}; a.prototype.renderMinorTick = function (b, d) { var a = this.minorTicks; a[b] || (a[b] = new u(this, b, 'minor')); d && a[b].isNew && a[b].render(null, !0); a[b].render(null, !1, 1) }; a.prototype.renderTick = function (b, d, a) { var c = this.ticks; if (!this.isLinked || b >= this.min && b <= this.max || this.grid && this.grid.isColumn)c[b] || (c[b] = new u(this, b)), a && c[b].isNew && c[b].render(d, !0, -1), c[b].render(d) }; a.prototype.render = function () {
var d = this
var a = d.chart; var c = d.logarithmic; var e = d.options; var h = d.isLinked; var f = d.tickPositions; var p = d.axisTitle; var g = d.ticks; var y = d.minorTicks; var k = d.alternateBands; var G = e.stackLabels; var l = e.alternateGridColor; var F = d.tickmarkOffset; var q = d.axisLine; var v = d.showAxis; var n = m(a.renderer.globalAnimation); var B; var r; d.labelEdge.length = 0; d.overlap = !1; [g, y, k].forEach(function (b) { L(b, function (b) { b.isActive = !1 }) }); if (d.hasData() || h) {
var P = d.chart.hasRendered && d.old && b(d.old.min); d.minorTickInterval && !d.categories && d.getMinorTickPositions().forEach(function (b) {
d.renderMinorTick(b,
P)
}); f.length && (f.forEach(function (b, a) { d.renderTick(b, a, P) }), F && (d.min === 0 || d.single) && (g[-1] || (g[-1] = new u(d, -1, null, !0)), g[-1].render(-1))); l && f.forEach(function (b, e) { r = typeof f[e + 1] !== 'undefined' ? f[e + 1] + F : d.max - F; e % 2 === 0 && b < d.max && r <= d.max + (a.polar ? -F : F) && (k[b] || (k[b] = new J.PlotLineOrBand(d)), B = b + F, k[b].options = { from: c ? c.lin2log(B) : B, to: c ? c.lin2log(r) : r, color: l, className: 'highcharts-alternate-grid' }, k[b].render(), k[b].isActive = !0) }); d._addedPlotLB || (d._addedPlotLB = !0, (e.plotLines || []).concat(e.plotBands ||
[]).forEach(function (b) { d.addPlotBandOrLine(b) }))
}[g, y, k].forEach(function (b) { var d = []; var c = n.duration; L(b, function (b, a) { b.isActive || (b.render(a, !1, 0), b.isActive = !1, d.push(a)) }); V(function () { for (var a = d.length; a--;)b[d[a]] && !b[d[a]].isActive && (b[d[a]].destroy(), delete b[d[a]]) }, b !== k && a.hasRendered && c ? c : 0) }); q && (q[q.isPlaced ? 'animate' : 'attr']({ d: this.getLinePath(q.strokeWidth()) }), q.isPlaced = !0, q[v ? 'show' : 'hide'](v)); p && v && (e = d.getTitlePosition(), b(e.y) ? (p[p.isNew ? 'attr' : 'animate'](e), p.isNew = !1) : (p.attr('y',
-9999), p.isNew = !0)); G && G.enabled && d.stacking && d.stacking.renderStackTotals(); d.old = { len: d.len, max: d.max, min: d.min, transA: d.transA, userMax: d.userMax, userMin: d.userMin }; d.isDirty = !1; t(this, 'afterRender')
}; a.prototype.redraw = function () { this.visible && (this.render(), this.plotLinesAndBands.forEach(function (b) { b.render() })); this.series.forEach(function (b) { b.isDirty = !0 }) }; a.prototype.getKeepProps = function () { return this.keepProps || a.keepProps }; a.prototype.destroy = function (b) {
var d = this; var a = d.plotLinesAndBands
var c = this.eventOptions; t(this, 'destroy', { keepEvents: b }); b || S(d); [d.ticks, d.minorTicks, d.alternateBands].forEach(function (b) { r(b) }); if (a) for (b = a.length; b--;)a[b].destroy(); 'axisLine axisTitle axisGroup gridGroup labelGroup cross scrollbar'.split(' ').forEach(function (b) { d[b] && (d[b] = d[b].destroy()) }); for (var e in d.plotLinesAndBandsGroups)d.plotLinesAndBandsGroups[e] = d.plotLinesAndBandsGroups[e].destroy(); L(d, function (b, a) { d.getKeepProps().indexOf(a) === -1 && delete d[a] }); this.eventOptions = c
}; a.prototype.drawCrosshair =
function (b, d) {
var a = this.crosshair; var c = F(a && a.snap, !0); var e = this.chart; var h; var f = this.cross; t(this, 'drawCrosshair', { e: b, point: d }); b || (b = this.cross && this.cross.e); if (a && !1 !== (k(d) || !c)) {
c ? k(d) && (h = F(this.coll !== 'colorAxis' ? d.crosshairPos : null, this.isXAxis ? d.plotX : this.len - d.plotY)) : h = b && (this.horiz ? b.chartX - this.pos : this.len - b.chartY + this.pos); if (k(h)) {
var p = { value: d && (this.isXAxis ? d.x : F(d.stackY, d.y)), translatedValue: h }; e.polar && O(p, { isCrosshair: !0, chartX: b && b.chartX, chartY: b && b.chartY, point: d }); p = this.getPlotLinePath(p) ||
null
} if (!k(p)) { this.hideCrosshair(); return }c = this.categories && !this.isRadial; f || (this.cross = f = e.renderer.path().addClass('highcharts-crosshair highcharts-crosshair-' + (c ? 'category ' : 'thin ') + (a.className || '')).attr({ zIndex: F(a.zIndex, 2) }).add(), e.styledMode || (f.attr({ stroke: a.color || (c ? C.parse(E.highlightColor20).setOpacity(0.25).get() : E.neutralColor20), 'stroke-width': F(a.width, 1) }).css({ 'pointer-events': 'none' }), a.dashStyle && f.attr({ dashstyle: a.dashStyle }))); f.show().attr({ d: p }); c && !a.width && f.attr({ 'stroke-width': this.transA })
this.cross.e = b
} else this.hideCrosshair(); t(this, 'afterDrawCrosshair', { e: b, point: d })
}; a.prototype.hideCrosshair = function () { this.cross && this.cross.hide(); t(this, 'afterHideCrosshair') }; a.prototype.hasVerticalPanning = function () { var b = this.chart.options.chart.panning; return !!(b && b.enabled && /y/.test(b.type)) }; a.prototype.validatePositiveValue = function (d) { return b(d) && d > 0 }; a.prototype.update = function (b, d) { var a = this.chart; b = G(this.userOptions, b); this.destroy(!0); this.init(a, b); a.isDirtyBox = !0; F(d, !0) && a.redraw() }
a.prototype.remove = function (b) { for (var d = this.chart, a = this.coll, c = this.series, e = c.length; e--;)c[e] && c[e].remove(!1); D(d.axes, this); D(d[a], this); d[a].forEach(function (b, d) { b.options.index = b.userOptions.index = d }); this.destroy(); d.isDirtyBox = !0; F(b, !0) && d.redraw() }; a.prototype.setTitle = function (b, d) { this.update({ title: b }, d) }; a.prototype.setCategories = function (b, d) { this.update({ categories: b }, d) }; a.defaultOptions = w.defaultXAxisOptions; a.keepProps = 'extKey hcEvents names series userMax userMin'.split(' ')
return a
}()); ''; return a
}); M(a, 'Core/Axis/DateTimeAxis.js', [a['Core/Utilities.js']], function (a) {
var r = a.addEvent; var C = a.getMagnitude; var E = a.normalizeTickInterval; var z = a.timeUnits; var x; (function (a) {
function u () { return this.chart.time.getTimeTicks.apply(this.chart.time, arguments) } function n (a) { a.userOptions.type !== 'datetime' ? this.dateTime = void 0 : this.dateTime || (this.dateTime = new g(this)) } var m = []; a.compose = function (a) {
m.indexOf(a) === -1 && (m.push(a), a.keepProps.push('dateTime'), a.prototype.getTimeTicks = u, r(a, 'init',
n)); return a
}; var g = (function () {
function a (a) { this.axis = a }a.prototype.normalizeTimeTickInterval = function (a, c) {
var e = c || [['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]]; c = e[e.length - 1]; var g = z[c[0]]; var l = c[1]; var k; for (k = 0; k < e.length && !(c = e[k], g = z[c[0]], l = c[1], e[k + 1] && a <= (g * l[l.length - 1] + z[e[k + 1][0]]) / 2); k++);g === z.year && a < 5 * g && (l = [1, 2, 5]); a = E(a / g, l, c[0] === 'year'
? Math.max(C(a / g), 1) : 1); return { unitRange: g, count: a, unitName: c[0] }
}; a.prototype.getXDateFormat = function (a, c) { var e = this.axis; return e.closestPointRange ? e.chart.time.getDateFormat(e.closestPointRange, a, e.options.startOfWeek, c) || c.year : c.day }; return a
}()); a.Additions = g
})(x || (x = {})); return x
}); M(a, 'Core/Axis/LogarithmicAxis.js', [a['Core/Utilities.js']], function (a) {
var r = a.addEvent; var C = a.getMagnitude; var E = a.normalizeTickInterval; var z = a.pick; var x; (function (a) {
function u (a) {
var c = this.logarithmic; a.userOptions.type !== 'logarithmic'
? this.logarithmic = void 0 : c || (this.logarithmic = new g(this))
} function n () { var a = this.logarithmic; a && (this.lin2val = function (c) { return a.lin2log(c) }, this.val2lin = function (c) { return a.log2lin(c) }) } var m = []; a.compose = function (a) { m.indexOf(a) === -1 && (m.push(a), a.keepProps.push('logarithmic'), r(a, 'init', u), r(a, 'afterInit', n)); return a }; var g = (function () {
function a (a) { this.axis = a }a.prototype.getLogTickPositions = function (a, c, f, g) {
var e = this.axis; var k = e.len; var l = e.options; var m = []; g || (this.minorAutoInterval = void 0); if (a >=
0.5)a = Math.round(a), m = e.getLinearTickPositions(a, c, f); else if (a >= 0.08) { var n = Math.floor(c); var v; var t = l = void 0; for (k = a > 0.3 ? [1, 2, 4] : a > 0.15 ? [1, 2, 4, 6, 8] : [1, 2, 3, 4, 5, 6, 7, 8, 9]; n < f + 1 && !t; n++) { var h = k.length; for (v = 0; v < h && !t; v++) { var d = this.log2lin(this.lin2log(n) * k[v]); d > c && (!g || l <= f) && typeof l !== 'undefined' && m.push(l); l > f && (t = !0); l = d } } } else {
c = this.lin2log(c), f = this.lin2log(f), a = g ? e.getMinorTickInterval() : l.tickInterval, a = z(a === 'auto' ? null : a, this.minorAutoInterval, l.tickPixelInterval / (g ? 5 : 1) * (f - c) / ((g ? k / e.tickPositions.length
: k) || 1)), a = E(a, void 0, C(a)), m = e.getLinearTickPositions(a, c, f).map(this.log2lin), g || (this.minorAutoInterval = a / 5)
}g || (e.tickInterval = a); return m
}; a.prototype.lin2log = function (a) { return Math.pow(10, a) }; a.prototype.log2lin = function (a) { return Math.log(a) / Math.LN10 }; return a
}()); a.Additions = g
})(x || (x = {})); return x
}); M(a, 'Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js', [a['Core/Utilities.js']], function (a) {
var r = a.erase; var C = a.extend; var E = a.isNumber; var z; (function (a) {
var x = []; var u; a.compose = function (a, g) {
u || (u = a); x.indexOf(g) ===
-1 && (x.push(g), C(g.prototype, n.prototype)); return g
}; var n = (function () {
function a () {}a.prototype.getPlotBandPath = function (a, c, e) {
void 0 === e && (e = this.options); var g = this.getPlotLinePath({ value: c, force: !0, acrossPanes: e.acrossPanes }); var f = []; var m = this.horiz; c = !E(this.min) || !E(this.max) || a < this.min && c < this.min || a > this.max && c > this.max; a = this.getPlotLinePath({ value: a, force: !0, acrossPanes: e.acrossPanes }); e = 1; if (a && g) {
if (c) { var q = a.toString() === g.toString(); e = 0 } for (c = 0; c < a.length; c += 2) {
var k = a[c]; var n = a[c +
1]; var r = g[c]; var B = g[c + 1]; k[0] !== 'M' && k[0] !== 'L' || n[0] !== 'M' && n[0] !== 'L' || r[0] !== 'M' && r[0] !== 'L' || B[0] !== 'M' && B[0] !== 'L' || (m && r[1] === k[1] ? (r[1] += e, B[1] += e) : m || r[2] !== k[2] || (r[2] += e, B[2] += e), f.push(['M', k[1], k[2]], ['L', n[1], n[2]], ['L', B[1], B[2]], ['L', r[1], r[2]], ['Z'])); f.isFlat = q
}
} return f
}; a.prototype.addPlotBand = function (a) { return this.addPlotBandOrLine(a, 'plotBands') }; a.prototype.addPlotLine = function (a) { return this.addPlotBandOrLine(a, 'plotLines') }; a.prototype.addPlotBandOrLine = function (a, c) {
var e = this
var g = this.userOptions; var f = new u(this, a); this.visible && (f = f.render()); if (f) { this._addedPlotLB || (this._addedPlotLB = !0, (g.plotLines || []).concat(g.plotBands || []).forEach(function (a) { e.addPlotBandOrLine(a) })); if (c) { var m = g[c] || []; m.push(a); g[c] = m } this.plotLinesAndBands.push(f) } return f
}; a.prototype.removePlotBandOrLine = function (a) {
var c = this.plotLinesAndBands; var e = this.options; var g = this.userOptions; if (c) {
for (var f = c.length; f--;)c[f].id === a && c[f].destroy(); [e.plotLines || [], g.plotLines || [], e.plotBands || [], g.plotBands ||
[]].forEach(function (c) { for (f = c.length; f--;)(c[f] || {}).id === a && r(c, c[f]) })
}
}; a.prototype.removePlotBand = function (a) { this.removePlotBandOrLine(a) }; a.prototype.removePlotLine = function (a) { this.removePlotBandOrLine(a) }; return a
}())
})(z || (z = {})); return z
}); M(a, 'Core/Axis/PlotLineOrBand/PlotLineOrBand.js', [a['Core/Color/Palette.js'], a['Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js'], a['Core/Utilities.js']], function (a, w, C) {
var r = C.arrayMax; var z = C.arrayMin; var x = C.defined; var J = C.destroyObjectProperties; var u = C.erase; var n =
C.fireEvent; var m = C.merge; var g = C.objectEach; var c = C.pick; C = (function () {
function e (a, c) { this.axis = a; c && (this.options = c, this.id = c.id) }e.compose = function (a) { return w.compose(e, a) }; e.prototype.render = function () {
n(this, 'render'); var e = this; var f = e.axis; var v = f.horiz; var q = f.logarithmic; var k = e.options; var r = k.color; var D = c(k.zIndex, 0); var B = k.events; var u = {}; var t = f.chart.renderer; var h = k.label; var d = e.label; var b = k.to; var p = k.from; var G = k.value; var y = e.svgElem; var L = []; var F = x(p) && x(b); L = x(G); var P = !y; var S = { class: 'highcharts-plot-' + (F ? 'band ' : 'line ') + (k.className || '') }; var Q = F ? 'bands'
: 'lines'; q && (p = q.log2lin(p), b = q.log2lin(b), G = q.log2lin(G)); f.chart.styledMode || (L ? (S.stroke = r || a.neutralColor40, S['stroke-width'] = c(k.width, 1), k.dashStyle && (S.dashstyle = k.dashStyle)) : F && (S.fill = r || a.highlightColor10, k.borderWidth && (S.stroke = k.borderColor, S['stroke-width'] = k.borderWidth))); u.zIndex = D; Q += '-' + D; (q = f.plotLinesAndBandsGroups[Q]) || (f.plotLinesAndBandsGroups[Q] = q = t.g('plot-' + Q).attr(u).add()); P && (e.svgElem = y = t.path().attr(S).add(q)); if (L) {
L = f.getPlotLinePath({
value: G,
lineWidth: y.strokeWidth(),
acrossPanes: k.acrossPanes
})
} else if (F)L = f.getPlotBandPath(p, b, k); else return; !e.eventsAdded && B && (g(B, function (b, d) { y.on(d, function (b) { B[d].apply(e, [b]) }) }), e.eventsAdded = !0); (P || !y.d) && L && L.length ? y.attr({ d: L }) : y && (L ? (y.show(!0), y.animate({ d: L })) : y.d && (y.hide(), d && (e.label = d = d.destroy()))); h && (x(h.text) || x(h.formatter)) && L && L.length && f.width > 0 && f.height > 0 && !L.isFlat ? (h = m({ align: v && F && 'center', x: v ? !F && 4 : 10, verticalAlign: !v && F && 'middle', y: v ? F ? 16 : 10 : F ? 6 : -4, rotation: v && !F && 90 }, h), this.renderLabel(h, L,
F, D)) : d && d.hide(); return e
}; e.prototype.renderLabel = function (a, c, e, g) {
var f = this.axis; var l = f.chart.renderer; var q = this.label; q || (this.label = q = l.text(this.getLabelText(a), 0, 0, a.useHTML).attr({ align: a.textAlign || a.align, rotation: a.rotation, class: 'highcharts-plot-' + (e ? 'band' : 'line') + '-label ' + (a.className || ''), zIndex: g }).add(), f.chart.styledMode || q.css(m({ textOverflow: 'ellipsis' }, a.style))); g = c.xBounds || [c[0][1], c[1][1], e ? c[2][1] : c[0][1]]; c = c.yBounds || [c[0][2], c[1][2], e ? c[2][2] : c[0][2]]; e = z(g); l = z(c); q.align(a,
!1, { x: e, y: l, width: r(g) - e, height: r(c) - l }); q.alignValue && q.alignValue !== 'left' || q.css({ width: (q.rotation === 90 ? f.height - (q.alignAttr.y - f.top) : f.width - (q.alignAttr.x - f.left)) + 'px' }); q.show(!0)
}; e.prototype.getLabelText = function (a) { return x(a.formatter) ? a.formatter.call(this) : a.text }; e.prototype.destroy = function () { u(this.axis.plotLinesAndBands, this); delete this.axis; J(this) }; return e
}()); ''; ''; return C
}); M(a, 'Core/Tooltip.js', [a['Core/FormatUtilities.js'], a['Core/Globals.js'], a['Core/Color/Palette.js'],
a['Core/Renderer/RendererUtilities.js'], a['Core/Renderer/RendererRegistry.js'], a['Core/Utilities.js']], function (a, w, C, E, z, x) {
var r = a.format; var u = w.doc; var n = E.distribute; var m = x.addEvent; var g = x.clamp; var c = x.css; var e = x.defined; var l = x.discardElement; var f = x.extend; var v = x.fireEvent; var q = x.isArray; var k = x.isNumber; var I = x.isString; var D = x.merge; var B = x.pick; var O = x.splat; var t = x.syncTimeout; a = (function () {
function a (a, b) {
this.container = void 0; this.crosshairs = []; this.distance = 0; this.isHidden = !0; this.isSticky = !1; this.now = {}; this.options = {}; this.outside = !1; this.chart =
a; this.init(a, b)
}a.prototype.applyFilter = function () { var a = this.chart; a.renderer.definition({ tagName: 'filter', attributes: { id: 'drop-shadow-' + a.index, opacity: 0.5 }, children: [{ tagName: 'feGaussianBlur', attributes: { in: 'SourceAlpha', stdDeviation: 1 } }, { tagName: 'feOffset', attributes: { dx: 1, dy: 1 } }, { tagName: 'feComponentTransfer', children: [{ tagName: 'feFuncA', attributes: { type: 'linear', slope: 0.3 } }] }, { tagName: 'feMerge', children: [{ tagName: 'feMergeNode' }, { tagName: 'feMergeNode', attributes: { in: 'SourceGraphic' } }] }] }) }
a.prototype.bodyFormatter = function (a) { return a.map(function (b) { var a = b.series.tooltipOptions; return (a[(b.point.formatPrefix || 'point') + 'Formatter'] || b.point.tooltipFormatter).call(b.point, a[(b.point.formatPrefix || 'point') + 'Format'] || '') }) }; a.prototype.cleanSplit = function (a) { this.chart.series.forEach(function (b) { var d = b && b.tt; d && (!d.isActive || a ? b.tt = d.destroy() : d.isActive = !1) }) }; a.prototype.defaultFormatter = function (a) {
var b = this.points || O(this); var d = [a.tooltipFooterHeaderFormatter(b[0])]; d = d.concat(a.bodyFormatter(b))
d.push(a.tooltipFooterHeaderFormatter(b[0], !0)); return d
}; a.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(), l(this.container)); x.clearTimeout(this.hideTimer); x.clearTimeout(this.tooltipTimeout) }; a.prototype.getAnchor = function (a, b) {
var d = this.chart; var c = d.pointer; var e = d.inverted; var h = d.plotTop; var f = d.plotLeft; var g; var k; var t = 0; var l = 0; a = O(a); this.followPointer && b ? (typeof b.chartX ===
'undefined' && (b = c.normalize(b)), c = [b.chartX - f, b.chartY - h]) : a[0].tooltipPos ? c = a[0].tooltipPos : (a.forEach(function (b) { g = b.series.yAxis; k = b.series.xAxis; t += b.plotX || 0; l += b.plotLow ? (b.plotLow + (b.plotHigh || 0)) / 2 : b.plotY || 0; k && g && (e ? (t += h + d.plotHeight - k.len - k.pos, l += f + d.plotWidth - g.len - g.pos) : (t += k.pos - f, l += g.pos - h)) }), t /= a.length, l /= a.length, c = [e ? d.plotWidth - l : t, e ? d.plotHeight - t : l], this.shared && a.length > 1 && b && (e ? c[0] = b.chartX - f : c[1] = b.chartY - h)); return c.map(Math.round)
}; a.prototype.getLabel = function () {
var a =
this; var b = this.chart.styledMode; var h = this.options; var f = 'tooltip' + (e(h.className) ? ' ' + h.className : ''); var g = h.style.pointerEvents || (!this.followPointer && h.stickOnContact ? 'auto' : 'none'); var k = function () { a.inContact = !0 }; var t = function (b) { var d = a.chart.hoverSeries; a.inContact = a.shouldStickOnContact() && a.chart.pointer.inClass(b.relatedTarget, 'highcharts-tooltip'); if (!a.inContact && d && d.onMouseOut)d.onMouseOut() }; var l; var q = this.chart.renderer; if (!this.label) {
if (this.outside) {
var n = this.chart.options.chart.style; var v = z.getRendererType()
this.container = l = w.doc.createElement('div'); l.className = 'highcharts-tooltip-container'; c(l, { position: 'absolute', top: '1px', pointerEvents: g, zIndex: Math.max(this.options.style.zIndex || 0, (n && n.zIndex || 0) + 3) }); m(l, 'mouseenter', k); m(l, 'mouseleave', t); w.doc.body.appendChild(l); this.renderer = q = new v(l, 0, 0, n, void 0, void 0, q.styledMode)
} this.split ? this.label = q.g(f) : (this.label = q.label('', 0, 0, h.shape, void 0, void 0, h.useHTML, void 0, f).attr({ padding: h.padding, r: h.borderRadius }), b || this.label.attr({
fill: h.backgroundColor,
'stroke-width': h.borderWidth
}).css(h.style).css({ pointerEvents: g }).shadow(h.shadow)); b && h.shadow && (this.applyFilter(), this.label.attr({ filter: 'url(#drop-shadow-' + this.chart.index + ')' })); if (a.outside && !a.split) { var r = this.label; var B = r.xSetter; var D = r.ySetter; r.xSetter = function (b) { B.call(r, a.distance); l.style.left = b + 'px' }; r.ySetter = function (b) { D.call(r, a.distance); l.style.top = b + 'px' } } this.label.on('mouseenter', k).on('mouseleave', t).attr({ zIndex: 8 }).add()
} return this.label
}; a.prototype.getPosition = function (a,
b, c) {
var d = this.chart; var e = this.distance; var h = {}; var f = d.inverted && c.h || 0; var g = this.outside; var p = g ? u.documentElement.clientWidth - 2 * e : d.chartWidth; var k = g ? Math.max(u.body.scrollHeight, u.documentElement.scrollHeight, u.body.offsetHeight, u.documentElement.offsetHeight, u.documentElement.clientHeight) : d.chartHeight; var l = d.pointer.getChartPosition(); var t = function (h) {
var f = h === 'x'; return [h, f ? p : k, f ? a : b].concat(g ? [f ? a * l.scaleX : b * l.scaleY, f ? l.left - e + (c.plotX + d.plotLeft) * l.scaleX : l.top - e + (c.plotY + d.plotTop) * l.scaleY, 0, f ? p : k] : [f ? a : b, f
? c.plotX + d.plotLeft : c.plotY + d.plotTop, f ? d.plotLeft : d.plotTop, f ? d.plotLeft + d.plotWidth : d.plotTop + d.plotHeight])
}; var m = t('y'); var q = t('x'); var n; var v = !this.followPointer && B(c.ttBelow, !d.inverted === !!c.negative); var r = function (b, a, d, c, p, k, y) { var t = g ? b === 'y' ? e * l.scaleY : e * l.scaleX : e; var G = (d - c) / 2; var A = c < p - e; var m = p + e + c < a; var F = p - t - d + G; p = p + t - G; if (v && m)h[b] = p; else if (!v && A)h[b] = F; else if (A)h[b] = Math.min(y - c, F - f < 0 ? F : F - f); else if (m)h[b] = Math.max(k, p + f + d > a ? p : p + f); else return !1 }; var D = function (b, a, d, c, f) {
var g; f < e || f > a - e ? g = !1 : h[b] = f < d / 2 ? 1 : f > a - c /
2 ? a - c - 2 : f - d / 2; return g
}; var A = function (b) { var a = m; m = q; q = a; n = b }; var U = function () { !1 !== r.apply(0, m) ? !1 !== D.apply(0, q) || n || (A(!0), U()) : n ? h.x = h.y = 0 : (A(!0), U()) }; (d.inverted || this.len > 1) && A(); U(); return h
}; a.prototype.hide = function (a) { var b = this; x.clearTimeout(this.hideTimer); a = B(a, this.options.hideDelay); this.isHidden || (this.hideTimer = t(function () { b.getLabel().fadeOut(a ? void 0 : a); b.isHidden = !0 }, a)) }; a.prototype.init = function (a, b) {
this.chart = a; this.options = b; this.crosshairs = []; this.now = { x: 0, y: 0 }; this.isHidden =
!0; this.split = b.split && !a.inverted && !a.polar; this.shared = b.shared || this.split; this.outside = B(b.outside, !(!a.scrollablePixelsX && !a.scrollablePixelsY))
}; a.prototype.shouldStickOnContact = function () { return !(this.followPointer || !this.options.stickOnContact) }; a.prototype.isStickyOnContact = function () { return !(!this.shouldStickOnContact() || !this.inContact) }; a.prototype.move = function (a, b, c, e) {
var d = this; var h = d.now; var g = !1 !== d.options.animation && !d.isHidden && (Math.abs(a - h.x) > 1 || Math.abs(b - h.y) > 1); var p = d.followPointer ||
d.len > 1; f(h, { x: g ? (2 * h.x + a) / 3 : a, y: g ? (h.y + b) / 2 : b, anchorX: p ? void 0 : g ? (2 * h.anchorX + c) / 3 : c, anchorY: p ? void 0 : g ? (h.anchorY + e) / 2 : e }); d.getLabel().attr(h); d.drawTracker(); g && (x.clearTimeout(this.tooltipTimeout), this.tooltipTimeout = setTimeout(function () { d && d.move(a, b, c, e) }, 32))
}; a.prototype.refresh = function (a, b) {
var d = this.chart; var c = this.options; var e = O(a); var h = e[0]; var f = []; var g = c.formatter || this.defaultFormatter; var k = this.shared; var l = d.styledMode; var t = {}; if (c.enabled) {
x.clearTimeout(this.hideTimer); this.followPointer = !this.split &&
h.series.tooltipOptions.followPointer; var m = this.getAnchor(a, b); var n = m[0]; var r = m[1]; !k || !q(a) && a.series && a.series.noSharedTooltip ? t = h.getLabelConfig() : (d.pointer.applyInactiveState(e), e.forEach(function (b) { b.setState('hover'); f.push(b.getLabelConfig()) }), t = { x: h.category, y: h.y }, t.points = f); this.len = f.length; a = g.call(t, this); g = h.series; this.distance = B(g.tooltipOptions.distance, 16); if (!1 === a) this.hide(); else {
if (this.split) this.renderSplit(a, e); else if (e = n, k = r, b && d.pointer.isDirectTouch && (e = b.chartX - d.plotLeft,
k = b.chartY - d.plotTop), d.polar || !1 === g.options.clip || g.shouldShowTooltip(e, k))b = this.getLabel(), c.style.width && !l || b.css({ width: this.chart.spacingBox.width + 'px' }), b.attr({ text: a && a.join ? a.join('') : a }), b.removeClass(/highcharts-color-[\d]+/g).addClass('highcharts-color-' + B(h.colorIndex, g.colorIndex)), l || b.attr({ stroke: c.borderColor || h.color || g.color || C.neutralColor60 }), this.updatePosition({ plotX: n, plotY: r, negative: h.negative, ttBelow: h.ttBelow, h: m[2] || 0 }); else { this.hide(); return } this.isHidden && this.label &&
this.label.attr({ opacity: 1 }).show(); this.isHidden = !1
}v(this, 'refresh')
}
}; a.prototype.renderSplit = function (a, b) {
function d (b, a, d, e, h) { void 0 === h && (h = !0); d ? (a = Y ? 0 : J, b = g(b - e / 2, N.left, N.right - e - (c.outside ? T : 0))) : (a -= da, b = h ? b - e - z : b + z, b = g(b, h ? b : N.left, N.right)); return { x: b, y: a } } var c = this; var e = c.chart; var h = c.chart; var k = h.chartWidth; var l = h.chartHeight; var t = h.plotHeight; var m = h.plotLeft; var q = h.plotTop; var r = h.pointer; var v = h.scrollablePixelsY; v = void 0 === v ? 0 : v; var D = h.scrollablePixelsX; var x = h.scrollingContainer; x = void 0 === x ? {
scrollLeft: 0,
scrollTop: 0
} : x; var w = x.scrollLeft; x = x.scrollTop; var O = h.styledMode; var z = c.distance; var A = c.options; var U = c.options.positioner; var N = c.outside && typeof D !== 'number' ? u.documentElement.getBoundingClientRect() : { left: w, right: w + k, top: x, bottom: x + l }; var W = c.getLabel(); var X = this.renderer || e.renderer; var Y = !(!e.xAxis[0] || !e.xAxis[0].opposite); e = r.getChartPosition(); var T = e.left; e = e.top; var da = q + x; var E = 0; var J = t - v; I(a) && (a = [!1, a]); a = a.slice(0, b.length + 1).reduce(function (a, e, h) {
if (!1 !== e && e !== '') {
h = b[h - 1] || {
isHeader: !0,
plotX: b[0].plotX,
plotY: t,
series: {}
}; var f = h.isHeader; var p = f ? c : h.series; e = e.toString(); var k = p.tt; var l = h.isHeader; var y = h.series; var G = 'highcharts-color-' + B(h.colorIndex, y.colorIndex, 'none'); k || (k = { padding: A.padding, r: A.borderRadius }, O || (k.fill = A.backgroundColor, k['stroke-width'] = A.borderWidth), k = X.label('', 0, 0, A[l ? 'headerShape' : 'shape'], void 0, void 0, A.useHTML).addClass((l ? 'highcharts-tooltip-header ' : '') + 'highcharts-tooltip-box ' + G).attr(k).add(W)); k.isActive = !0; k.attr({ text: e }); O || k.css(A.style).shadow(A.shadow).attr({
stroke: A.borderColor ||
h.color || y.color || C.neutralColor80
}); p = p.tt = k; l = p.getBBox(); e = l.width + p.strokeWidth(); f && (E = l.height, J += E, Y && (da -= E)); y = h.plotX; y = void 0 === y ? 0 : y; G = h.plotY; G = void 0 === G ? 0 : G; k = h.series; if (h.isHeader) { y = m + y; var F = q + t / 2 } else { var n = k.xAxis; var ca = k.yAxis; y = n.pos + g(y, -z, n.len + z); k.shouldShowTooltip(0, ca.pos - q + G, { ignoreX: !0 }) && (F = ca.pos + G) }y = g(y, N.left - z, N.right + z); typeof F === 'number' ? (l = l.height + 1, G = U ? U.call(c, e, l, h) : d(y, F, f, e), a.push({
align: U ? 0 : void 0,
anchorX: y,
anchorY: F,
boxWidth: e,
point: h,
rank: B(G.rank, f
? 1 : 0),
size: l,
target: G.y,
tt: p,
x: G.x
})) : p.isActive = !1
} return a
}, []); !U && a.some(function (b) { var a = (c.outside ? T : 0) + b.anchorX; return a < N.left && a + b.boxWidth < N.right ? !0 : a < T - N.left + b.boxWidth && N.right - a > a }) && (a = a.map(function (b) { var a = d(b.anchorX, b.anchorY, b.point.isHeader, b.boxWidth, !1); return f(b, { target: a.y, x: a.x }) })); c.cleanSplit(); n(a, J); var ba = T; var ea = T; a.forEach(function (b) { var a = b.x; var d = b.boxWidth; b = b.isHeader; b || (c.outside && T + a < ba && (ba = T + a), !b && c.outside && ba + d > ea && (ea = T + a)) }); a.forEach(function (b) {
var a =
b.x; var d = b.anchorX; var e = b.pos; var h = b.point.isHeader; e = { visibility: typeof e === 'undefined' ? 'hidden' : 'inherit', x: a, y: e + da, anchorX: d, anchorY: b.anchorY }; if (c.outside && a < d) { var f = T - ba; f > 0 && (h || (e.x = a + f, e.anchorX = d + f), h && (e.x = (ea - ba) / 2, e.anchorX = d + f)) }b.tt.attr(e)
}); a = c.container; v = c.renderer; c.outside && a && v && (h = W.getBBox(), v.setSize(h.width + h.x, h.height + h.y, !1), a.style.left = ba + 'px', a.style.top = e + 'px')
}; a.prototype.drawTracker = function () {
if (this.followPointer || !this.options.stickOnContact) this.tracker && this.tracker.destroy()
else {
var a = this.chart; var b = this.label; var c = this.shared ? a.hoverPoints : a.hoverPoint; if (b && c) {
var e = { x: 0, y: 0, width: 0, height: 0 }; c = this.getAnchor(c); var h = b.getBBox(); c[0] += a.plotLeft - b.translateX; c[1] += a.plotTop - b.translateY; e.x = Math.min(0, c[0]); e.y = Math.min(0, c[1]); e.width = c[0] < 0 ? Math.max(Math.abs(c[0]), h.width - c[0]) : Math.max(Math.abs(c[0]), h.width); e.height = c[1] < 0 ? Math.max(Math.abs(c[1]), h.height - Math.abs(c[1])) : Math.max(Math.abs(c[1]), h.height); this.tracker ? this.tracker.attr(e) : (this.tracker = b.renderer.rect(e).addClass('highcharts-tracker').add(b),
a.styledMode || this.tracker.attr({ fill: 'rgba(0,0,0,0)' }))
}
}
}; a.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}"') }; a.prototype.tooltipFooterHeaderFormatter = function (a, b) {
var d = a.series; var c = d.tooltipOptions; var e = d.xAxis; var h = e && e.dateTime; e = { isFooter: b, labelConfig: a }; var f = c.xDateFormat; var g = c[b ? 'footerFormat' : 'headerFormat']; v(this, 'headerFormatter', e, function (b) {
h &&
!f && k(a.key) && (f = h.getXDateFormat(a.key, c.dateTimeLabelFormats)); h && f && (a.point && a.point.tooltipDateKeys || ['key']).forEach(function (b) { g = g.replace('{point.' + b + '}', '{point.' + b + ':' + f + '}') }); d.chart.styledMode && (g = this.styledModeFormat(g)); b.text = r(g, { point: a, series: d }, this.chart)
}); return e.text
}; a.prototype.update = function (a) { this.destroy(); D(!0, this.chart.options.tooltip.userOptions, a); this.init(this.chart, D(!0, this.options, a)) }; a.prototype.updatePosition = function (a) {
var b = this.chart; var d = this.options
var e = b.pointer; var h = this.getLabel(); e = e.getChartPosition(); var f = (d.positioner || this.getPosition).call(this, h.width, h.height, a); var g = a.plotX + b.plotLeft; a = a.plotY + b.plotTop; if (this.outside) { d = d.borderWidth + 2 * this.distance; this.renderer.setSize(h.width + d, h.height + d, !1); if (e.scaleX !== 1 || e.scaleY !== 1)c(this.container, { transform: 'scale(' + e.scaleX + ', ' + e.scaleY + ')' }), g *= e.scaleX, a *= e.scaleY; g += e.left - f.x; a += e.top - f.y } this.move(Math.round(f.x), Math.round(f.y || 0), g, a)
}; return a
}()); ''; return a
}); M(a, 'Core/Series/Point.js',
[a['Core/Renderer/HTML/AST.js'], a['Core/Animation/AnimationUtilities.js'], a['Core/DefaultOptions.js'], a['Core/FormatUtilities.js'], a['Core/Utilities.js']], function (a, w, C, E, z) {
var r = w.animObject; var J = C.defaultOptions; var u = E.format; var n = z.addEvent; var m = z.defined; var g = z.erase; var c = z.extend; var e = z.fireEvent; var l = z.getNestedProperty; var f = z.isArray; var v = z.isFunction; var q = z.isNumber; var k = z.isObject; var I = z.merge; var D = z.objectEach; var B = z.pick; var O = z.syncTimeout; var t = z.removeEvent; var h = z.uniqueKey; w = (function () {
function d () {
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
}d.prototype.animateBeforeDestroy = function () {
var b = this; var a = { x: b.startXPos, opacity: 0 }; var d = b.getGraphicalProps(); d.singular.forEach(function (d) { b[d] = b[d].animate(d === 'dataLabel' ? { x: b[d].startXPos, y: b[d].startYPos, opacity: 0 } : a) }); d.plural.forEach(function (a) {
b[a].forEach(function (a) {
a.element && a.animate(c({ x: b.startXPos }, a.startYPos
? { x: a.startXPos, y: a.startYPos } : {}))
})
})
}; d.prototype.applyOptions = function (b, a) {
var e = this.series; var h = e.options.pointValKey || e.pointValKey; b = d.prototype.optionsToObject.call(this, b); c(this, b); this.options = this.options ? c(this.options, b) : b; b.group && delete this.group; b.dataLabels && delete this.dataLabels; h && (this.y = d.prototype.getNestedProperty.call(this, h)); this.formatPrefix = (this.isNull = B(this.isValid && !this.isValid(), this.x === null || !q(this.y))) ? 'null' : 'point'; this.selected && (this.state = 'select'); 'name' in
this && typeof a === 'undefined' && e.xAxis && e.xAxis.hasNames && (this.x = e.xAxis.nameToX(this)); typeof this.x === 'undefined' && e ? this.x = typeof a === 'undefined' ? e.autoIncrement() : a : q(b.x) && e.options.relativeXValue && (this.x = e.autoIncrement(b.x)); return this
}; d.prototype.destroy = function () {
function b () { if (a.graphic || a.dataLabel || a.dataLabels)t(a), a.destroyElements(); for (f in a)a[f] = null } var a = this; var d = a.series; var c = d.chart; d = d.options.dataSorting; var e = c.hoverPoints; var h = r(a.series.chart.renderer.globalAnimation); var f; a.legendItem &&
c.legend.destroyItem(a); e && (a.setState(), g(e, a), e.length || (c.hoverPoints = null)); if (a === c.hoverPoint)a.onMouseOut(); d && d.enabled ? (this.animateBeforeDestroy(), O(b, h.duration)) : b(); c.pointCount--
}; d.prototype.destroyElements = function (b) { var a = this; b = a.getGraphicalProps(b); b.singular.forEach(function (b) { a[b] = a[b].destroy() }); b.plural.forEach(function (b) { a[b].forEach(function (b) { b.element && b.destroy() }); delete a[b] }) }; d.prototype.firePointEvent = function (b, a, d) {
var c = this; var h = this.series.options; (h.point.events[b] ||
c.options && c.options.events && c.options.events[b]) && c.importEvents(); b === 'click' && h.allowPointSelect && (d = function (b) { c.select && c.select(null, b.ctrlKey || b.metaKey || b.shiftKey) }); e(c, b, a, d)
}; d.prototype.getClassName = function () {
return 'highcharts-point' + (this.selected ? ' highcharts-point-select' : '') + (this.negative ? ' highcharts-negative' : '') + (this.isNull ? ' highcharts-null-point' : '') + (typeof this.colorIndex !== 'undefined' ? ' highcharts-color-' + this.colorIndex : '') + (this.options.className ? ' ' + this.options.className
: '') + (this.zone && this.zone.className ? ' ' + this.zone.className.replace('highcharts-negative', '') : '')
}; d.prototype.getGraphicalProps = function (b) { var a = this; var d = []; var c = { singular: [], plural: [] }; var e; b = b || { graphic: 1, dataLabel: 1 }; b.graphic && d.push('graphic', 'upperGraphic', 'shadowGroup'); b.dataLabel && d.push('dataLabel', 'dataLabelUpper', 'connector'); for (e = d.length; e--;) { var h = d[e]; a[h] && c.singular.push(h) }['dataLabel', 'connector'].forEach(function (d) { var e = d + 's'; b[d] && a[e] && c.plural.push(e) }); return c }; d.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 } }; d.prototype.getNestedProperty = function (b) { if (b) return b.indexOf('custom.') === 0 ? l(b, this.options) : this[b] }; d.prototype.getZone = function () {
var b = this.series; var a = b.zones; b = b.zoneAxis || 'y'; var d; var c = 0; for (d = a[c]; this[b] >= d.value;)d = a[++c]; this.nonZonedColor || (this.nonZonedColor = this.color); this.color =
d && d.color && !this.options.color ? d.color : this.nonZonedColor; return d
}; d.prototype.hasNewShapeType = function () { return (this.graphic && (this.graphic.symbolName || this.graphic.element.nodeName)) !== this.shapeType }; d.prototype.init = function (b, a, d) { this.series = b; this.applyOptions(a, d); this.id = m(this.id) ? this.id : h(); this.resolveColor(); b.chart.pointCount++; e(this, 'afterInit'); return this }; d.prototype.optionsToObject = function (b) {
var a = this.series; var c = a.options.keys; var e = c || a.pointArrayMap || ['y']; var h = e.length; var g = {}; var k =
0; var l = 0; if (q(b) || b === null)g[e[0]] = b; else if (f(b)) for (!c && b.length > h && (a = typeof b[0], a === 'string' ? g.name = b[0] : a === 'number' && (g.x = b[0]), k++); l < h;)c && typeof b[k] === 'undefined' || (e[l].indexOf('.') > 0 ? d.prototype.setNestedProperty(g, b[k], e[l]) : g[e[l]] = b[k]), k++, l++; else typeof b === 'object' && (g = b, b.dataLabels && (a._hasPointLabels = !0), b.marker && (a._hasPointMarkers = !0)); return g
}; d.prototype.resolveColor = function () {
var b = this.series; var a = b.chart.styledMode; var d = b.chart.options.chart.colorCount; delete this.nonZonedColor
if (b.options.colorByPoint) { if (!a) { d = b.options.colors || b.chart.options.colors; var c = d[b.colorCounter]; d = d.length }a = b.colorCounter; b.colorCounter++; b.colorCounter === d && (b.colorCounter = 0) } else a || (c = b.color), a = b.colorIndex; this.colorIndex = B(this.options.colorIndex, a); this.color = B(this.options.color, c)
}; d.prototype.setNestedProperty = function (b, a, d) { d.split('.').reduce(function (b, d, c, e) { b[d] = e.length - 1 === c ? a : k(b[d], !0) ? b[d] : {}; return b[d] }, b); return b }; d.prototype.tooltipFormatter = function (b) {
var a = this.series
var d = a.tooltipOptions; var c = B(d.valueDecimals, ''); var e = d.valuePrefix || ''; var h = d.valueSuffix || ''; a.chart.styledMode && (b = a.chart.tooltip.styledModeFormat(b)); (a.pointArrayMap || ['y']).forEach(function (a) { a = '{point.' + a; if (e || h)b = b.replace(RegExp(a + '}', 'g'), e + a + '}' + h); b = b.replace(RegExp(a + '}', 'g'), a + ':,.' + c + 'f}') }); return u(b, { point: this, series: this.series }, a.chart)
}; d.prototype.update = function (b, a, d, c) {
function e () {
h.applyOptions(b); var c = g && h.hasDummyGraphic; c = h.y === null ? !c : c; g && c && (h.graphic = g.destroy(), delete h.hasDummyGraphic)
k(b, !0) && (g && g.element && b && b.marker && typeof b.marker.symbol !== 'undefined' && (h.graphic = g.destroy()), b && b.dataLabels && h.dataLabel && (h.dataLabel = h.dataLabel.destroy()), h.connector && (h.connector = h.connector.destroy())); t = h.index; f.updateParallelArrays(h, t); l.data[t] = k(l.data[t], !0) || k(b, !0) ? h.options : B(b, l.data[t]); f.isDirty = f.isDirtyData = !0; !f.fixedBox && f.hasCartesianSeries && (p.isDirtyBox = !0); l.legendType === 'point' && (p.isDirtyLegend = !0); a && p.redraw(d)
} var h = this; var f = h.series; var g = h.graphic; var p = f.chart; var l = f.options
var t; a = B(a, !0); !1 === c ? e() : h.firePointEvent('update', { options: b }, e)
}; d.prototype.remove = function (b, a) { this.series.removePoint(this.series.data.indexOf(this), b, a) }; d.prototype.select = function (b, a) {
var d = this; var c = d.series; var e = c.chart; this.selectedStaging = b = B(b, !d.selected); d.firePointEvent(b ? 'select' : 'unselect', { accumulate: a }, function () {
d.selected = d.options.selected = b; c.options.data[c.data.indexOf(d)] = d.options; d.setState(b && 'select'); a || e.getSelectedPoints().forEach(function (b) {
var a = b.series; b.selected &&
b !== d && (b.selected = b.options.selected = !1, a.options.data[a.data.indexOf(b)] = b.options, b.setState(e.hoverPoints && a.options.inactiveOtherPoints ? 'inactive' : ''), b.firePointEvent('unselect'))
})
}); delete this.selectedStaging
}; d.prototype.onMouseOver = function (b) { var a = this.series.chart; var d = a.pointer; b = b ? d.normalize(b) : d.getChartCoordinatesFromPoint(this, a.inverted); d.runPointActions(b, this) }; d.prototype.onMouseOut = function () {
var b = this.series.chart; this.firePointEvent('mouseOut'); this.series.options.inactiveOtherPoints ||
(b.hoverPoints || []).forEach(function (b) { b.setState() }); b.hoverPoints = b.hoverPoint = null
}; d.prototype.importEvents = function () { if (!this.hasImportedEvents) { var b = this; var a = I(b.series.options.point, b.options).events; b.events = a; D(a, function (a, d) { v(a) && n(b, d, a) }); this.hasImportedEvents = !0 } }; d.prototype.setState = function (b, d) {
var h = this.series; var f = this.state; var g = h.options.states[b || 'normal'] || {}; var k = J.plotOptions[h.type].marker && h.options.marker; var p = k && !1 === k.enabled; var l = k && k.states && k.states[b || 'normal'] || {}; var t = !1 ===
l.enabled; var m = this.marker || {}; var n = h.chart; var v = k && h.markerAttribs; var r = h.halo; var D; var I = h.stateMarkerGraphic; b = b || ''; if (!(b === this.state && !d || this.selected && b !== 'select' || !1 === g.enabled || b && (t || p && !1 === l.enabled) || b && m.states && m.states[b] && !1 === m.states[b].enabled)) {
this.state = b; v && (D = h.markerAttribs(this, b)); if (this.graphic && !this.hasDummyGraphic) {
f && this.graphic.removeClass('highcharts-point-' + f); b && this.graphic.addClass('highcharts-point-' + b); if (!n.styledMode) {
var u = h.pointAttribs(this, b); var x = B(n.options.chart.animation,
g.animation); h.options.inactiveOtherPoints && q(u.opacity) && ((this.dataLabels || []).forEach(function (b) { b && b.animate({ opacity: u.opacity }, x) }), this.connector && this.connector.animate({ opacity: u.opacity }, x)); this.graphic.animate(u, x)
}D && this.graphic.animate(D, B(n.options.chart.animation, l.animation, k.animation)); I && I.hide()
} else {
if (b && l) {
f = m.symbol || h.symbol; I && I.currentSymbol !== f && (I = I.destroy()); if (D) {
if (I)I[d ? 'animate' : 'attr']({ x: D.x, y: D.y }); else {
f && (h.stateMarkerGraphic = I = n.renderer.symbol(f, D.x, D.y,
D.width, D.height).add(h.markerGroup), I.currentSymbol = f)
}
} !n.styledMode && I && I.attr(h.pointAttribs(this, b))
}I && (I[b && this.isInside ? 'show' : 'hide'](), I.element.point = this, I.addClass(this.getClassName(), !0))
}g = g.halo; D = (I = this.graphic || I) && I.visibility || 'inherit'; g && g.size && I && D !== 'hidden' && !this.isCluster ? (r || (h.halo = r = n.renderer.path().add(I.parentGroup)), r.show()[d ? 'animate' : 'attr']({ d: this.haloPath(g.size) }), r.attr({
class: 'highcharts-halo highcharts-color-' + B(this.colorIndex, h.colorIndex) + (this.className
? ' ' + this.className : ''),
visibility: D,
zIndex: -1
}), r.point = this, n.styledMode || r.attr(c({ fill: this.color || h.color, 'fill-opacity': g.opacity }, a.filterUserAttributes(g.attributes || {})))) : r && r.point && r.point.haloPath && r.animate({ d: r.point.haloPath(0) }, null, r.hide); e(this, 'afterSetState', { state: b })
}
}; d.prototype.haloPath = function (b) { return this.series.chart.renderer.symbols.circle(Math.floor(this.plotX) - b, this.plotY - b, 2 * b, 2 * b) }; return d
}()); ''; return w
}); M(a, 'Core/Pointer.js', [a['Core/Color/Color.js'], a['Core/Globals.js'],
a['Core/Color/Palette.js'], a['Core/Tooltip.js'], a['Core/Utilities.js']], function (a, w, C, E, z) {
var r = a.parse; var J = w.charts; var u = w.noop; var n = z.addEvent; var m = z.attr; var g = z.css; var c = z.defined; var e = z.extend; var l = z.find; var f = z.fireEvent; var v = z.isNumber; var q = z.isObject; var k = z.objectEach; var I = z.offset; var D = z.pick; var B = z.splat; a = (function () {
function a (a, c) { this.lastValidTouch = {}; this.pinchDown = []; this.runChartClick = !1; this.eventsToUnbind = []; this.chart = a; this.hasDragged = !1; this.options = c; this.init(a, c) }a.prototype.applyInactiveState = function (a) {
var c = []
var d; (a || []).forEach(function (b) { d = b.series; c.push(d); d.linkedParent && c.push(d.linkedParent); d.linkedSeries && (c = c.concat(d.linkedSeries)); d.navigatorSeries && c.push(d.navigatorSeries) }); this.chart.series.forEach(function (b) { c.indexOf(b) === -1 ? b.setState('inactive', !0) : b.options.inactiveOtherPoints && b.setAllPointsToState('inactive') })
}; a.prototype.destroy = function () {
var c = this; this.eventsToUnbind.forEach(function (a) { return a() }); this.eventsToUnbind = []; w.chartCount || (a.unbindDocumentMouseUp && (a.unbindDocumentMouseUp =
a.unbindDocumentMouseUp()), a.unbindDocumentTouchEnd && (a.unbindDocumentTouchEnd = a.unbindDocumentTouchEnd())); clearInterval(c.tooltipTimeout); k(c, function (a, d) { c[d] = void 0 })
}; a.prototype.drag = function (a) {
var c = this.chart; var d = c.options.chart; var b = this.zoomHor; var e = this.zoomVert; var f = c.plotLeft; var g = c.plotTop; var k = c.plotWidth; var l = c.plotHeight; var t = this.mouseDownX || 0; var m = this.mouseDownY || 0; var n = q(d.panning) ? d.panning && d.panning.enabled : d.panning; var v = d.panKey && a[d.panKey + 'Key']; var B = a.chartX; var D = a.chartY; var I = this.selectionMarker; if (!I || !I.touch) {
if (B <
f ? B = f : B > f + k && (B = f + k), D < g ? D = g : D > g + l && (D = g + l), this.hasDragged = Math.sqrt(Math.pow(t - B, 2) + Math.pow(m - D, 2)), this.hasDragged > 10) {
var u = c.isInsidePlot(t - f, m - g, { visiblePlotOnly: !0 }); c.hasCartesianSeries && (this.zoomX || this.zoomY) && u && !v && !I && (this.selectionMarker = I = c.renderer.rect(f, g, b ? 1 : k, e ? 1 : l, 0).attr({ class: 'highcharts-selection-marker', zIndex: 7 }).add(), c.styledMode || I.attr({ fill: d.selectionMarkerFill || r(C.highlightColor80).setOpacity(0.25).get() })); I && b && (b = B - t, I.attr({
width: Math.abs(b),
x: (b > 0 ? 0 : b) +
t
})); I && e && (b = D - m, I.attr({ height: Math.abs(b), y: (b > 0 ? 0 : b) + m })); u && !I && n && c.pan(a, d.panning)
}
}
}; a.prototype.dragStart = function (a) { var c = this.chart; c.mouseIsDown = a.type; c.cancelClick = !1; c.mouseDownX = this.mouseDownX = a.chartX; c.mouseDownY = this.mouseDownY = a.chartY }; a.prototype.drop = function (a) {
var h = this; var d = this.chart; var b = this.hasPinched; if (this.selectionMarker) {
var k = { originalEvent: a, xAxis: [], yAxis: [] }; var l = this.selectionMarker; var t = l.attr ? l.attr('x') : l.x; var m = l.attr ? l.attr('y') : l.y; var q = l.attr ? l.attr('width') : l.width
var n = l.attr ? l.attr('height') : l.height; var r; if (this.hasDragged || b)d.axes.forEach(function (d) { if (d.zoomEnabled && c(d.min) && (b || h[{ xAxis: 'zoomX', yAxis: 'zoomY' }[d.coll]]) && v(t) && v(m)) { var e = d.horiz; var f = a.type === 'touchend' ? d.minPixelPadding : 0; var g = d.toValue((e ? t : m) + f); e = d.toValue((e ? t + q : m + n) - f); k[d.coll].push({ axis: d, min: Math.min(g, e), max: Math.max(g, e) }); r = !0 } }), r && f(d, 'selection', k, function (a) { d.zoom(e(a, b ? { animation: !1 } : null)) }); v(d.index) && (this.selectionMarker = this.selectionMarker.destroy()); b && this.scaleGroups()
}d &&
v(d.index) && (g(d.container, { cursor: d._cursor }), d.cancelClick = this.hasDragged > 10, d.mouseIsDown = this.hasDragged = this.hasPinched = !1, this.pinchDown = [])
}; a.prototype.findNearestKDPoint = function (a, c, d) {
var b = this.chart; var e = b.hoverPoint; b = b.tooltip; if (e && b && b.isStickyOnContact()) return e; var h; a.forEach(function (b) {
var a = !(b.noSharedTooltip && c) && b.options.findNearestPointBy.indexOf('y') < 0; b = b.searchPoint(d, a); if ((a = q(b, !0) && b.series) && !(a = !q(h, !0))) {
a = h.distX - b.distX; var e = h.dist - b.dist; var f = (b.series.group &&
b.series.group.zIndex) - (h.series.group && h.series.group.zIndex); a = (a !== 0 && c ? a : e !== 0 ? e : f !== 0 ? f : h.series.index > b.series.index ? -1 : 1) > 0
}a && (h = b)
}); return h
}; a.prototype.getChartCoordinatesFromPoint = function (a, c) { var d = a.series; var b = d.xAxis; d = d.yAxis; var e = a.shapeArgs; if (b && d) { var h = D(a.clientX, a.plotX); var f = a.plotY || 0; a.isNode && e && v(e.x) && v(e.y) && (h = e.x, f = e.y); return c ? { chartX: d.len + d.pos - f, chartY: b.len + b.pos - h } : { chartX: h + b.pos, chartY: f + d.pos } } if (e && e.x && e.y) return { chartX: e.x, chartY: e.y } }; a.prototype.getChartPosition =
function () { if (this.chartPosition) return this.chartPosition; var a = this.chart.container; var c = I(a); this.chartPosition = { left: c.left, top: c.top, scaleX: 1, scaleY: 1 }; var d = a.offsetWidth; a = a.offsetHeight; d > 2 && a > 2 && (this.chartPosition.scaleX = c.width / d, this.chartPosition.scaleY = c.height / a); return this.chartPosition }; a.prototype.getCoordinates = function (a) { var c = { xAxis: [], yAxis: [] }; this.chart.axes.forEach(function (d) { c[d.isXAxis ? 'xAxis' : 'yAxis'].push({ axis: d, value: d.toValue(a[d.horiz ? 'chartX' : 'chartY']) }) }); return c }
a.prototype.getHoverData = function (a, c, d, b, e, g) {
var h = []; b = !(!b || !a); var k = { chartX: g ? g.chartX : void 0, chartY: g ? g.chartY : void 0, shared: e }; f(this, 'beforeGetHoverData', k); var p = c && !c.stickyTracking ? [c] : d.filter(function (b) { return k.filter ? k.filter(b) : b.visible && !(!e && b.directTouch) && D(b.options.enableMouseTracking, !0) && b.stickyTracking }); var t = b || !g ? a : this.findNearestKDPoint(p, e, g); c = t && t.series; t && (e && !c.noSharedTooltip ? (p = d.filter(function (b) {
return k.filter ? k.filter(b) : b.visible && !(!e && b.directTouch) &&
D(b.options.enableMouseTracking, !0) && !b.noSharedTooltip
}), p.forEach(function (b) { var a = l(b.points, function (b) { return b.x === t.x && !b.isNull }); q(a) && (b.chart.isBoosting && (a = b.getPoint(a)), h.push(a)) })) : h.push(t)); k = { hoverPoint: t }; f(this, 'afterGetHoverData', k); return { hoverPoint: k.hoverPoint, hoverSeries: c, hoverPoints: h }
}; a.prototype.getPointFromEvent = function (a) { a = a.target; for (var c; a && !c;)c = a.point, a = a.parentNode; return c }; a.prototype.onTrackerMouseOut = function (a) {
a = a.relatedTarget || a.toElement; var c =
this.chart.hoverSeries; this.isDirectTouch = !1; if (!(!c || !a || c.stickyTracking || this.inClass(a, 'highcharts-tooltip') || this.inClass(a, 'highcharts-series-' + c.index) && this.inClass(a, 'highcharts-tracker')))c.onMouseOut()
}; a.prototype.inClass = function (a, c) { for (var d; a;) { if (d = m(a, 'class')) { if (d.indexOf(c) !== -1) return !0; if (d.indexOf('highcharts-container') !== -1) return !1 }a = a.parentNode } }; a.prototype.init = function (a, c) {
this.options = c; this.chart = a; this.runChartClick = !(!c.chart.events || !c.chart.events.click); this.pinchDown =
[]; this.lastValidTouch = {}; E && (a.tooltip = new E(a, c.tooltip), this.followTouchMove = D(c.tooltip.followTouchMove, !0)); this.setDOMEvents()
}; a.prototype.normalize = function (a, c) { var d = a.touches; var b = d ? d.length ? d.item(0) : D(d.changedTouches, a.changedTouches)[0] : a; c || (c = this.getChartPosition()); d = b.pageX - c.left; b = b.pageY - c.top; d /= c.scaleX; b /= c.scaleY; return e(a, { chartX: Math.round(d), chartY: Math.round(b) }) }; a.prototype.onContainerClick = function (a) {
var c = this.chart; var d = c.hoverPoint; a = this.normalize(a); var b = c.plotLeft
var g = c.plotTop; c.cancelClick || (d && this.inClass(a.target, 'highcharts-tracker') ? (f(d.series, 'click', e(a, { point: d })), c.hoverPoint && d.firePointEvent('click', a)) : (e(a, this.getCoordinates(a)), c.isInsidePlot(a.chartX - b, a.chartY - g, { visiblePlotOnly: !0 }) && f(c, 'click', a)))
}; a.prototype.onContainerMouseDown = function (a) {
var c = ((a.buttons || a.button) & 1) === 1; a = this.normalize(a); if (w.isFirefox && a.button !== 0) this.onContainerMouseMove(a); if (typeof a.button === 'undefined' || c) {
this.zoomOption(a), c && a.preventDefault && a.preventDefault(),
this.dragStart(a)
}
}; a.prototype.onContainerMouseLeave = function (c) { var e = J[D(a.hoverChartIndex, -1)]; var d = this.chart.tooltip; d && d.shouldStickOnContact() && this.inClass(c.relatedTarget, 'highcharts-tooltip-container') || (c = this.normalize(c), e && (c.relatedTarget || c.toElement) && (e.pointer.reset(), e.pointer.chartPosition = void 0), d && !d.isHidden && this.reset()) }; a.prototype.onContainerMouseEnter = function (a) { delete this.chartPosition }; a.prototype.onContainerMouseMove = function (a) {
var c = this.chart; a = this.normalize(a)
this.setHoverChartIndex(); a.preventDefault || (a.returnValue = !1); (c.mouseIsDown === 'mousedown' || this.touchSelect(a)) && this.drag(a); c.openMenu || !this.inClass(a.target, 'highcharts-tracker') && !c.isInsidePlot(a.chartX - c.plotLeft, a.chartY - c.plotTop, { visiblePlotOnly: !0 }) || (this.inClass(a.target, 'highcharts-no-tooltip') ? this.reset(!1, 0) : this.runPointActions(a))
}; a.prototype.onDocumentTouchEnd = function (c) { var e = J[D(a.hoverChartIndex, -1)]; e && e.pointer.drop(c) }; a.prototype.onContainerTouchMove = function (a) {
if (this.touchSelect(a)) this.onContainerMouseMove(a)
else this.touch(a)
}; a.prototype.onContainerTouchStart = function (a) { if (this.touchSelect(a)) this.onContainerMouseDown(a); else this.zoomOption(a), this.touch(a, !0) }; a.prototype.onDocumentMouseMove = function (a) { var c = this.chart; var d = this.chartPosition; a = this.normalize(a, d); var b = c.tooltip; !d || b && b.isStickyOnContact() || c.isInsidePlot(a.chartX - c.plotLeft, a.chartY - c.plotTop, { visiblePlotOnly: !0 }) || this.inClass(a.target, 'highcharts-tracker') || this.reset() }; a.prototype.onDocumentMouseUp = function (c) {
var e = J[D(a.hoverChartIndex,
-1)]; e && e.pointer.drop(c)
}; a.prototype.pinch = function (a) {
var c = this; var d = c.chart; var b = c.pinchDown; var f = a.touches || []; var g = f.length; var k = c.lastValidTouch; var l = c.hasZoom; var m = {}; var t = g === 1 && (c.inClass(a.target, 'highcharts-tracker') && d.runTrackerClick || c.runChartClick); var q = {}; var n = c.selectionMarker; g > 1 ? c.initiated = !0 : g === 1 && this.followTouchMove && (c.initiated = !1); l && c.initiated && !t && !1 !== a.cancelable && a.preventDefault(); [].map.call(f, function (b) { return c.normalize(b) }); a.type === 'touchstart' ? ([].forEach.call(f, function (a, d) {
b[d] =
{ chartX: a.chartX, chartY: a.chartY }
}), k.x = [b[0].chartX, b[1] && b[1].chartX], k.y = [b[0].chartY, b[1] && b[1].chartY], d.axes.forEach(function (b) { if (b.zoomEnabled) { var a = d.bounds[b.horiz ? 'h' : 'v']; var c = b.minPixelPadding; var e = b.toPixels(Math.min(D(b.options.min, b.dataMin), b.dataMin)); var h = b.toPixels(Math.max(D(b.options.max, b.dataMax), b.dataMax)); var f = Math.max(e, h); a.min = Math.min(b.pos, Math.min(e, h) - c); a.max = Math.max(b.pos + b.len, f + c) } }), c.res = !0) : c.followTouchMove && g === 1 ? this.runPointActions(c.normalize(a)) : b.length && (n ||
(c.selectionMarker = n = e({ destroy: u, touch: !0 }, d.plotBox)), c.pinchTranslate(b, f, m, n, q, k), c.hasPinched = l, c.scaleGroups(m, q), c.res && (c.res = !1, this.reset(!1, 0)))
}; a.prototype.pinchTranslate = function (a, c, d, b, e, f) { this.zoomHor && this.pinchTranslateDirection(!0, a, c, d, b, e, f); this.zoomVert && this.pinchTranslateDirection(!1, a, c, d, b, e, f) }; a.prototype.pinchTranslateDirection = function (a, c, d, b, e, f, g, k) {
var h = this.chart; var l = a ? 'x' : 'y'; var p = a ? 'X' : 'Y'; var m = 'chart' + p; var y = a ? 'width' : 'height'; var t = h['plot' + (a ? 'Left' : 'Top')]; var q = h.inverted
var n = h.bounds[a ? 'h' : 'v']; var r = c.length === 1; var v = c[0][m]; var B = !r && c[1][m]; c = function () { typeof I === 'number' && Math.abs(v - B) > 20 && (D = k || Math.abs(N - I) / Math.abs(v - B)); A = (t - N) / D + v; G = h['plot' + (a ? 'Width' : 'Height')] / D }; var G; var A; var D = k || 1; var N = d[0][m]; var I = !r && d[1][m]; c(); d = A; if (d < n.min) { d = n.min; var L = !0 } else d + G > n.max && (d = n.max - G, L = !0); L ? (N -= 0.8 * (N - g[l][0]), typeof I === 'number' && (I -= 0.8 * (I - g[l][1])), c()) : g[l] = [N, I]; q || (f[l] = A - t, f[y] = G); f = q ? 1 / D : D; e[y] = G; e[l] = d; b[q ? a ? 'scaleY' : 'scaleX' : 'scale' + p] = D; b['translate' + p] = f * t + (N - f * v)
}; a.prototype.reset =
function (a, c) {
var d = this.chart; var b = d.hoverSeries; var e = d.hoverPoint; var h = d.hoverPoints; var f = d.tooltip; var g = f && f.shared ? h : e; a && g && B(g).forEach(function (b) { b.series.isCartesian && typeof b.plotX === 'undefined' && (a = !1) }); if (a) {
f && g && B(g).length && (f.refresh(g), f.shared && h ? h.forEach(function (b) { b.setState(b.state, !0); b.series.isCartesian && (b.series.xAxis.crosshair && b.series.xAxis.drawCrosshair(null, b), b.series.yAxis.crosshair && b.series.yAxis.drawCrosshair(null, b)) }) : e && (e.setState(e.state, !0), d.axes.forEach(function (b) {
b.crosshair &&
e.series[b.coll] === b && b.drawCrosshair(null, e)
})))
} else { if (e)e.onMouseOut(); h && h.forEach(function (b) { b.setState() }); if (b)b.onMouseOut(); f && f.hide(c); this.unDocMouseMove && (this.unDocMouseMove = this.unDocMouseMove()); d.axes.forEach(function (b) { b.hideCrosshair() }); this.hoverX = d.hoverPoints = d.hoverPoint = null }
}; a.prototype.runPointActions = function (c, e) {
var d = this.chart; var b = d.tooltip && d.tooltip.options.enabled ? d.tooltip : void 0; var h = b ? b.shared : !1; var f = e || d.hoverPoint; var g = f && f.series || d.hoverSeries; e = this.getHoverData(f,
g, d.series, (!c || c.type !== 'touchmove') && (!!e || g && g.directTouch && this.isDirectTouch), h, c); f = e.hoverPoint; g = e.hoverSeries; var k = e.hoverPoints; e = g && g.tooltipOptions.followPointer && !g.tooltipOptions.split; h = h && g && !g.noSharedTooltip; if (f && (f !== d.hoverPoint || b && b.isHidden)) {
(d.hoverPoints || []).forEach(function (b) { k.indexOf(b) === -1 && b.setState() }); if (d.hoverSeries !== g)g.onMouseOver(); this.applyInactiveState(k); (k || []).forEach(function (b) { b.setState('hover') }); d.hoverPoint && d.hoverPoint.firePointEvent('mouseOut')
if (!f.series) return; d.hoverPoints = k; d.hoverPoint = f; f.firePointEvent('mouseOver'); b && b.refresh(h ? k : f, c)
} else e && b && !b.isHidden && (f = b.getAnchor([{}], c), d.isInsidePlot(f[0], f[1], { visiblePlotOnly: !0 }) && b.updatePosition({ plotX: f[0], plotY: f[1] })); this.unDocMouseMove || (this.unDocMouseMove = n(d.container.ownerDocument, 'mousemove', function (b) { var d = J[a.hoverChartIndex]; if (d)d.pointer.onDocumentMouseMove(b) }), this.eventsToUnbind.push(this.unDocMouseMove)); d.axes.forEach(function (b) {
var a = D((b.crosshair || {}).snap,
!0); var e; a && ((e = d.hoverPoint) && e.series[b.coll] === b || (e = l(k, function (a) { return a.series[b.coll] === b }))); e || !a ? b.drawCrosshair(c, e) : b.hideCrosshair()
})
}; a.prototype.scaleGroups = function (a, c) { var d = this.chart; d.series.forEach(function (b) { var e = a || b.getPlotBox(); b.xAxis && b.xAxis.zoomEnabled && b.group && (b.group.attr(e), b.markerGroup && (b.markerGroup.attr(e), b.markerGroup.clip(c ? d.clipRect : null)), b.dataLabelsGroup && b.dataLabelsGroup.attr(e)) }); d.clipRect.attr(c || d.clipBox) }; a.prototype.setDOMEvents = function () {
var c =
this; var e = this.chart.container; var d = e.ownerDocument; e.onmousedown = this.onContainerMouseDown.bind(this); e.onmousemove = this.onContainerMouseMove.bind(this); e.onclick = this.onContainerClick.bind(this); this.eventsToUnbind.push(n(e, 'mouseenter', this.onContainerMouseEnter.bind(this))); this.eventsToUnbind.push(n(e, 'mouseleave', this.onContainerMouseLeave.bind(this))); a.unbindDocumentMouseUp || (a.unbindDocumentMouseUp = n(d, 'mouseup', this.onDocumentMouseUp.bind(this))); for (var b = this.chart.renderTo.parentElement; b &&
b.tagName !== 'BODY';) this.eventsToUnbind.push(n(b, 'scroll', function () { delete c.chartPosition })), b = b.parentElement; w.hasTouch && (this.eventsToUnbind.push(n(e, 'touchstart', this.onContainerTouchStart.bind(this), { passive: !1 })), this.eventsToUnbind.push(n(e, 'touchmove', this.onContainerTouchMove.bind(this), { passive: !1 })), a.unbindDocumentTouchEnd || (a.unbindDocumentTouchEnd = n(d, 'touchend', this.onDocumentTouchEnd.bind(this), { passive: !1 })))
}; a.prototype.setHoverChartIndex = function () {
var c = this.chart; var e = w.charts[D(a.hoverChartIndex,
-1)]; if (e && e !== c)e.pointer.onContainerMouseLeave({ relatedTarget: !0 }); e && e.mouseIsDown || (a.hoverChartIndex = c.index)
}; a.prototype.touch = function (a, c) {
var d = this.chart; var b; this.setHoverChartIndex(); if (a.touches.length === 1) {
if (a = this.normalize(a), (b = d.isInsidePlot(a.chartX - d.plotLeft, a.chartY - d.plotTop, { visiblePlotOnly: !0 })) && !d.openMenu) {
c && this.runPointActions(a); if (a.type === 'touchmove') { c = this.pinchDown; var e = c[0] ? Math.sqrt(Math.pow(c[0].chartX - a.chartX, 2) + Math.pow(c[0].chartY - a.chartY, 2)) >= 4 : !1 }D(e,
!0) && this.pinch(a)
} else c && this.reset()
} else a.touches.length === 2 && this.pinch(a)
}; a.prototype.touchSelect = function (a) { return !(!this.chart.options.chart.zoomBySingleTouch || !a.touches || a.touches.length !== 1) }; a.prototype.zoomOption = function (a) { var c = this.chart; var d = c.options.chart; c = c.inverted; var b = d.zoomType || ''; /touch/.test(a.type) && (b = D(d.pinchType, b)); this.zoomX = a = /x/.test(b); this.zoomY = d = /y/.test(b); this.zoomHor = a && !c || d && c; this.zoomVert = d && !c || a && c; this.hasZoom = a || d }; return a
}()); ''; return a
}); M(a,
'Core/MSPointer.js', [a['Core/Globals.js'], a['Core/Pointer.js'], a['Core/Utilities.js']], function (a, w, C) {
function r () { var a = []; a.item = function (a) { return this[a] }; e(f, function (c) { a.push({ pageX: c.pageX, pageY: c.pageY, target: c.target }) }); return a } function z (a, c, e, f) { var g = J[w.hoverChartIndex || NaN]; a.pointerType !== 'touch' && a.pointerType !== a.MSPOINTER_TYPE_TOUCH || !g || (g = g.pointer, f(a), g[c]({ type: e, target: a.currentTarget, preventDefault: n, touches: r() })) } var x = this && this.__extends || (function () {
var a = function (c,
e) { a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, c) { a.__proto__ = c } || function (a, c) { for (var e in c)c.hasOwnProperty(e) && (a[e] = c[e]) }; return a(c, e) }; return function (c, e) { function f () { this.constructor = c }a(c, e); c.prototype = e === null ? Object.create(e) : (f.prototype = e.prototype, new f()) }
}()); var J = a.charts; var u = a.doc; var n = a.noop; var m = a.win; var g = C.addEvent; var c = C.css; var e = C.objectEach; var l = C.removeEvent; var f = {}; var v = !!m.PointerEvent; return (function (e) {
function k () { return e !== null && e.apply(this, arguments) || this }x(k, e); k.isRequired =
function () { return !(a.hasTouch || !m.PointerEvent && !m.MSPointerEvent) }; k.prototype.batchMSEvents = function (a) { a(this.chart.container, v ? 'pointerdown' : 'MSPointerDown', this.onContainerPointerDown); a(this.chart.container, v ? 'pointermove' : 'MSPointerMove', this.onContainerPointerMove); a(u, v ? 'pointerup' : 'MSPointerUp', this.onDocumentPointerUp) }; k.prototype.destroy = function () { this.batchMSEvents(l); e.prototype.destroy.call(this) }; k.prototype.init = function (a, f) {
e.prototype.init.call(this, a, f); this.hasZoom && c(a.container,
{ '-ms-touch-action': 'none', 'touch-action': 'none' })
}; k.prototype.onContainerPointerDown = function (a) { z(a, 'onContainerTouchStart', 'touchstart', function (a) { f[a.pointerId] = { pageX: a.pageX, pageY: a.pageY, target: a.currentTarget } }) }; k.prototype.onContainerPointerMove = function (a) { z(a, 'onContainerTouchMove', 'touchmove', function (a) { f[a.pointerId] = { pageX: a.pageX, pageY: a.pageY }; f[a.pointerId].target || (f[a.pointerId].target = a.currentTarget) }) }; k.prototype.onDocumentPointerUp = function (a) {
z(a, 'onDocumentTouchEnd',
'touchend', function (a) { delete f[a.pointerId] })
}; k.prototype.setDOMEvents = function () { e.prototype.setDOMEvents.call(this); (this.hasZoom || this.followTouchMove) && this.batchMSEvents(g) }; return k
}(w))
}); M(a, 'Core/Legend/Legend.js', [a['Core/Animation/AnimationUtilities.js'], a['Core/FormatUtilities.js'], a['Core/Globals.js'], a['Core/Series/Point.js'], a['Core/Renderer/RendererUtilities.js'], a['Core/Utilities.js']], function (a, w, C, E, z, x) {
var r = a.animObject; var u = a.setAnimation; var n = w.format; a = C.isFirefox; var m = C.marginNames
C = C.win; var g = z.distribute; var c = x.addEvent; var e = x.createElement; var l = x.css; var f = x.defined; var v = x.discardElement; var q = x.find; var k = x.fireEvent; var I = x.isNumber; var D = x.merge; var B = x.pick; var O = x.relativeLength; var t = x.stableSort; var h = x.syncTimeout; z = x.wrap; x = (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(), c(this.chart, 'endResize', function () { this.legend.positionCheckboxes() }), this.proximate ? this.unchartrender = c(this.chart, 'render', function () {
this.legend.proximatePositions()
this.legend.positionItems()
}) : this.unchartrender && this.unchartrender())
}; a.prototype.setOptions = function (a) { var b = B(a.padding, 8); this.options = a; this.chart.styledMode || (this.itemStyle = a.itemStyle, this.itemHiddenStyle = D(this.itemStyle, a.itemHiddenStyle)); this.itemMarginTop = a.itemMarginTop || 0; this.itemMarginBottom = a.itemMarginBottom || 0; this.padding = b; this.initialItemY = b - 5; this.symbolWidth = B(a.symbolWidth, 16); this.pages = []; this.proximate = a.layout === 'proximate' && !this.chart.inverted; this.baseline = void 0 }
a.prototype.update = function (a, d) { var b = this.chart; this.setOptions(D(!0, this.options, a)); this.destroy(); b.isDirtyLegend = b.isDirtyBox = !0; B(d, !0) && b.redraw(); k(this, 'afterUpdate') }; a.prototype.colorizeItem = function (a, d) {
a.legendGroup[d ? 'removeClass' : 'addClass']('highcharts-legend-item-hidden'); if (!this.chart.styledMode) {
var b = this.options; var c = a.legendItem; var e = a.legendLine; var h = a.legendSymbol; var f = this.itemHiddenStyle.color; b = d ? b.itemStyle.color : f; var g = d ? a.color || f : f; var l = a.options && a.options.marker; var p = { fill: g }; c &&
c.css({ fill: b, color: b }); e && e.attr({ stroke: g }); h && (l && h.isMarker && (p = a.pointAttribs(), d || (p.stroke = p.fill = f)), h.attr(p))
}k(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 b = this; var d = this.options; var c = d.symbolPadding; var e = !d.rtl; var h = a._legendItemPos; d = h[0]; h = h[1]; var g = a.checkbox; var l = a.legendGroup; l && l.element && (c = {
translateX: e ? d : this.legendWidth -
d - 2 * c - 4,
translateY: h
}, e = function () { k(b, 'afterPositionItem', { item: a }) }, f(l.translateY) ? l.animate(c, void 0, e) : (l.attr(c), e())); g && (g.x = d, g.y = h)
}; a.prototype.destroyItem = function (a) { var b = a.checkbox; ['legendItem', 'legendLine', 'legendSymbol', 'legendGroup'].forEach(function (b) { a[b] && (a[b] = a[b].destroy()) }); b && v(a.checkbox) }; a.prototype.destroy = function () {
function a (a) { this[a] && (this[a] = this[a].destroy()) } this.getAllItems().forEach(function (b) { ['legendItem', 'legendGroup'].forEach(a, b) }); '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; var d = this.clipHeight || this.legendHeight; var c = this.titleHeight; if (a) { var e = a.translateY; this.allItems.forEach(function (b) { var h = b.checkbox; if (h) { var f = e + c + h.y + (this.scrollOffset || 0) + 3; l(h, { left: a.translateX + b.checkboxOffset + h.x - 20 + 'px', top: f + 'px', display: this.proximate || f > e - 6 && f < e + d - 6 ? '' : 'none' }) } }, this) } }; a.prototype.renderTitle = function () {
var a = this.options; var d = this.padding; var c = a.title; var e = 0; c.text && (this.title ||
(this.title = this.chart.renderer.label(c.text, d - 3, d - 4, null, null, null, a.useHTML, null, 'legend-title').attr({ zIndex: 1 }), this.chart.styledMode || this.title.css(c.style), this.title.add(this.group)), c.width || this.title.css({ width: this.maxLegendWidth + 'px' }), a = this.title.getBBox(), e = a.height, this.offsetWidth = a.width, this.contentGroup.attr({ translateY: e })); this.titleHeight = e
}; a.prototype.setText = function (a) { var b = this.options; a.legendItem.attr({ text: b.labelFormat ? n(b.labelFormat, a, this.chart) : b.labelFormatter.call(a) }) }
a.prototype.renderItem = function (a) {
var b = this.chart; var d = b.renderer; var c = this.options; var e = this.symbolWidth; var h = c.symbolPadding || 0; var f = this.itemStyle; var g = this.itemHiddenStyle; var k = c.layout === 'horizontal' ? B(c.itemDistance, 20) : 0; var l = !c.rtl; var m = !a.series; var n = !m && a.series.drawLegendSymbol ? a.series : a; var q = n.options; var t = this.createCheckboxForItem && q && q.showCheckbox; var v = c.useHTML; var r = a.options.className; var I = a.legendItem; q = e + h + k + (t ? 20 : 0); I || (a.legendGroup = d.g('legend-item').addClass('highcharts-' + n.type + '-series highcharts-color-' + a.colorIndex +
(r ? ' ' + r : '') + (m ? ' highcharts-series-' + a.index : '')).attr({ zIndex: 1 }).add(this.scrollGroup), a.legendItem = I = d.text('', l ? e + h : -h, this.baseline || 0, v), b.styledMode || I.css(D(a.visible ? f : g)), I.attr({ align: l ? 'left' : 'right', zIndex: 2 }).add(a.legendGroup), this.baseline || (this.fontMetrics = d.fontMetrics(b.styledMode ? 12 : f.fontSize, I), this.baseline = this.fontMetrics.f + 3 + this.itemMarginTop, I.attr('y', this.baseline), this.symbolHeight = c.symbolHeight || this.fontMetrics.f, c.squareSymbol && (this.symbolWidth = B(c.symbolWidth,
Math.max(this.symbolHeight, 16)), q = this.symbolWidth + h + k + (t ? 20 : 0), l && I.attr('x', this.symbolWidth + h))), n.drawLegendSymbol(this, a), this.setItemEvents && this.setItemEvents(a, I, v)); t && !a.checkbox && this.createCheckboxForItem && this.createCheckboxForItem(a); this.colorizeItem(a, a.visible); !b.styledMode && f.width || I.css({ width: (c.itemWidth || this.widthOption || b.spacingBox.width) - q + 'px' }); this.setText(a); b = I.getBBox(); a.itemWidth = a.checkboxOffset = c.itemWidth || a.legendItemWidth || b.width + q; this.maxItemWidth = Math.max(this.maxItemWidth,
a.itemWidth); this.totalItemWidth += a.itemWidth; this.itemHeight = a.itemHeight = Math.round(a.legendItemHeight || b.height || this.symbolHeight)
}; a.prototype.layoutItem = function (a) {
var b = this.options; var d = this.padding; var c = b.layout === 'horizontal'; var e = a.itemHeight; var h = this.itemMarginBottom; var f = this.itemMarginTop; var g = c ? B(b.itemDistance, 20) : 0; var k = this.maxLegendWidth; b = b.alignColumns && this.totalItemWidth > k ? this.maxItemWidth : a.itemWidth; c && this.itemX - d + b > k && (this.itemX = d, this.lastLineHeight && (this.itemY += f + this.lastLineHeight +
h), this.lastLineHeight = 0); this.lastItemY = f + this.itemY + h; this.lastLineHeight = Math.max(e, this.lastLineHeight); a._legendItemPos = [this.itemX, this.itemY]; c ? this.itemX += b : (this.itemY += f + e + h, this.lastLineHeight = e); this.offsetWidth = this.widthOption || Math.max((c ? this.itemX - d - (a.checkbox ? 0 : g) : b) + d, this.offsetWidth)
}; a.prototype.getAllItems = function () {
var a = []; this.chart.series.forEach(function (b) {
var d = b && b.options; b && B(d.showInLegend, f(d.linkedTo) ? !1 : void 0, !0) && (a = a.concat(b.legendItems || (d.legendType === 'point'
? b.data : b)))
}); k(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 b = this.chart; var c = this.options; var e = this.getAlignment(); e && [/(lth|ct|rth)/, /(rtv|rm|rbv)/, /(rbh|cb|lbh)/, /(lbv|lm|ltv)/].forEach(function (h, g) {
h.test(e) && !f(a[g]) && (b[m[g]] = Math.max(b[m[g]], b.legend[(g + 1) % 2 ? 'legendHeight'
: 'legendWidth'] + [1, -1, -1, 1][g] * c[g % 2 ? 'x' : 'y'] + B(c.margin, 12) + d[g] + (b.titleOffset[g] || 0)))
})
}; a.prototype.proximatePositions = function () {
var a = this.chart; var d = []; var c = this.options.align === 'left'; this.allItems.forEach(function (b) {
var e; var h = c; if (b.yAxis) {
b.xAxis.options.reversed && (h = !h); b.points && (e = q(h ? b.points : b.points.slice(0).reverse(), function (a) { return I(a.plotY) })); h = this.itemMarginTop + b.legendItem.getBBox().height + this.itemMarginBottom; var f = b.yAxis.top - a.plotTop; b.visible ? (e = e ? e.plotY : b.yAxis.height,
e += f - 0.3 * h) : e = f + b.yAxis.height; d.push({ target: e, size: h, item: b })
}
}, this); g(d, a.plotHeight).forEach(function (b) { b.item._legendItemPos && (b.item._legendItemPos[1] = a.plotTop - a.spacing[0] + b.pos) })
}; a.prototype.render = function () {
var a = this.chart; var d = a.renderer; var c = this.options; var e = this.padding; var h = this.getAllItems(); var f = this.group; var g = this.box; this.itemX = e; this.itemY = this.initialItemY; this.lastItemY = this.offsetWidth = 0; this.widthOption = O(c.width, a.spacingBox.width - e); var l = a.spacingBox.width - 2 * e - c.x; ['rm', 'lm'].indexOf(this.getAlignment().substring(0,
2)) > -1 && (l /= 2); this.maxLegendWidth = this.widthOption || l; f || (this.group = f = d.g('legend').addClass(c.className || '').attr({ zIndex: 7 }).add(), this.contentGroup = d.g().attr({ zIndex: 1 }).add(f), this.scrollGroup = d.g().add(this.contentGroup)); this.renderTitle(); t(h, function (a, b) { return (a.options && a.options.legendIndex || 0) - (b.options && b.options.legendIndex || 0) }); c.reversed && h.reverse(); this.allItems = h; this.display = l = !!h.length; this.itemHeight = this.totalItemWidth = this.maxItemWidth = this.lastLineHeight = 0; h.forEach(this.renderItem,
this); h.forEach(this.layoutItem, this); h = (this.widthOption || this.offsetWidth) + e; var m = this.lastItemY + this.lastLineHeight + this.titleHeight; m = this.handleOverflow(m); m += e; g || (this.box = g = d.rect().addClass('highcharts-legend-box').attr({ r: c.borderRadius }).add(f), g.isNew = !0); a.styledMode || g.attr({ stroke: c.borderColor, 'stroke-width': c.borderWidth || 0, fill: c.backgroundColor || 'none' }).shadow(c.shadow); h > 0 && m > 0 && (g[g.isNew ? 'attr' : 'animate'](g.crisp.call({}, { x: 0, y: 0, width: h, height: m }, g.strokeWidth())), g.isNew =
!1); g[l ? 'show' : 'hide'](); a.styledMode && f.getStyle('display') === 'none' && (h = m = 0); this.legendWidth = h; this.legendHeight = m; l && this.align(); this.proximate || this.positionItems(); k(this, 'afterRender')
}; a.prototype.align = function (a) {
void 0 === a && (a = this.chart.spacingBox); var b = this.chart; var d = this.options; var c = a.y; /(lth|ct|rth)/.test(this.getAlignment()) && b.titleOffset[0] > 0 ? c += b.titleOffset[0] : /(lbh|cb|rbh)/.test(this.getAlignment()) && b.titleOffset[2] > 0 && (c -= b.titleOffset[2]); c !== a.y && (a = D(a, { y: c })); this.group.align(D(d,
{ width: this.legendWidth, height: this.legendHeight, verticalAlign: this.proximate ? 'top' : d.verticalAlign }), !0, a)
}; a.prototype.handleOverflow = function (a) {
var b = this; var d = this.chart; var c = d.renderer; var e = this.options; var h = e.y; var f = e.verticalAlign === 'top'; var g = this.padding; var k = e.maxHeight; var l = e.navigation; var m = B(l.animation, !0); var n = l.arrowSize || 12; var q = this.pages; var t = this.allItems; var v = function (a) {
typeof a === 'number' ? N.attr({ height: a }) : N && (b.clipRect = N.destroy(), b.contentGroup.clip()); b.contentGroup.div && (b.contentGroup.div.style.clip = a ? 'rect(' +
g + 'px,9999px,' + (g + a) + 'px,0)' : 'auto')
}; var r = function (a) { b[a] = c.circle(0, 0, 1.3 * n).translate(n / 2, n / 2).add(U); d.styledMode || b[a].attr('fill', 'rgba(0,0,0,0.0001)'); return b[a] }; var I; var A; h = d.spacingBox.height + (f ? -h : h) - g; var U = this.nav; var N = this.clipRect; e.layout !== 'horizontal' || e.verticalAlign === 'middle' || e.floating || (h /= 2); k && (h = Math.min(h, k)); q.length = 0; a && h > 0 && a > h && !1 !== l.enabled ? (this.clipHeight = I = Math.max(h - 20 - this.titleHeight - g, 0), this.currentPage = B(this.currentPage, 1), this.fullHeight = a, t.forEach(function (a,
b) { var d = a._legendItemPos[1]; var c = Math.round(a.legendItem.getBBox().height); var e = q.length; if (!e || d - q[e - 1] > I && (A || d) !== q[e - 1])q.push(A || d), e++; a.pageIx = e - 1; A && (t[b - 1].pageIx = e - 1); b === t.length - 1 && d + c - q[e - 1] > I && d !== A && (q.push(d), a.pageIx = e); d !== A && (A = d) }), N || (N = b.clipRect = c.clipRect(0, g, 9999, 0), b.contentGroup.clip(N)), v(I), U || (this.nav = U = c.g().attr({ zIndex: 1 }).add(this.group), this.up = c.symbol('triangle', 0, 0, n, n).add(U), r('upTracker').on('click', function () { b.scroll(-1, m) }), this.pager = c.text('', 15, 10).addClass('highcharts-legend-navigation'),
d.styledMode || this.pager.css(l.style), this.pager.add(U), this.down = c.symbol('triangle-down', 0, 0, n, n).add(U), r('downTracker').on('click', function () { b.scroll(1, m) })), b.scroll(0), a = h) : U && (v(), this.nav = U.destroy(), this.scrollGroup.attr({ translateY: 1 }), this.clipHeight = 0); return a
}; a.prototype.scroll = function (a, d) {
var b = this; var c = this.chart; var e = this.pages; var f = e.length; var g = this.clipHeight; var l = this.options.navigation; var m = this.pager; var p = this.padding; var n = this.currentPage + a; n > f && (n = f); n > 0 && (typeof d !== 'undefined' && u(d, c), this.nav.attr({
translateX: p,
translateY: g + this.padding + 7 + this.titleHeight,
visibility: 'visible'
}), [this.up, this.upTracker].forEach(function (a) { a.attr({ class: n === 1 ? 'highcharts-legend-nav-inactive' : 'highcharts-legend-nav-active' }) }), m.attr({ text: n + '/' + f }), [this.down, this.downTracker].forEach(function (a) { a.attr({ x: 18 + this.pager.getBBox().width, class: n === f ? 'highcharts-legend-nav-inactive' : 'highcharts-legend-nav-active' }) }, this), c.styledMode || (this.up.attr({ fill: n === 1 ? l.inactiveColor : l.activeColor }), this.upTracker.css({
cursor: n ===
1 ? 'default' : 'pointer'
}), this.down.attr({ fill: n === f ? l.inactiveColor : l.activeColor }), this.downTracker.css({ cursor: n === f ? 'default' : 'pointer' })), this.scrollOffset = -e[n - 1] + this.initialItemY, this.scrollGroup.animate({ translateY: this.scrollOffset }), this.currentPage = n, this.positionCheckboxes(), a = r(B(d, c.renderer.globalAnimation, !0)), h(function () { k(b, 'afterScroll', { currentPage: n }) }, a.duration))
}; a.prototype.setItemEvents = function (a, d, c) {
var b = this; var e = b.chart.renderer.boxWrapper; var h = a instanceof E; var f = 'highcharts-legend-' +
(h ? 'point' : 'series') + '-active'; var g = b.chart.styledMode; var l = function (d) { b.allItems.forEach(function (b) { a !== b && [b].concat(b.linkedSeries || []).forEach(function (a) { a.setState(d, !h) }) }) }; (c ? [d, a.legendSymbol] : [a.legendGroup]).forEach(function (c) {
if (c) {
c.on('mouseover', function () { a.visible && l('inactive'); a.setState('hover'); a.visible && e.addClass(f); g || d.css(b.options.itemHoverStyle) }).on('mouseout', function () { b.chart.styledMode || d.css(D(a.visible ? b.itemStyle : b.itemHiddenStyle)); l(''); e.removeClass(f); a.setState() }).on('click',
function (b) { var d = function () { a.setVisible && a.setVisible(); l(a.visible ? 'inactive' : '') }; e.removeClass(f); b = { browserEvent: b }; a.firePointEvent ? a.firePointEvent('legendItemClick', b, d) : k(a, 'legendItemClick', b, d) })
}
})
}; a.prototype.createCheckboxForItem = function (a) {
a.checkbox = e('input', { type: 'checkbox', className: 'highcharts-legend-checkbox', checked: a.selected, defaultChecked: a.selected }, this.options.itemCheckboxStyle, this.chart.container); c(a.checkbox, 'click', function (b) {
k(a.series || a, 'checkboxClick', {
checked: b.target.checked,
item: a
}, function () { a.select() })
})
}; return a
}()); (/Trident\/7\.0/.test(C.navigator && C.navigator.userAgent) || a) && z(x.prototype, 'positionItem', function (a, b) { var d = this; var c = function () { b._legendItemPos && a.call(d, b) }; c(); d.bubbleLegend || setTimeout(c) }); ''; return x
}); M(a, 'Core/Series/SeriesRegistry.js', [a['Core/Globals.js'], a['Core/DefaultOptions.js'], a['Core/Series/Point.js'], a['Core/Utilities.js']], function (a, w, C, E) {
var r = w.defaultOptions; var x = E.error; var J = E.extendClass; var u = E.merge; var n; (function (m) {
function g (a, e) {
var c =
r.plotOptions || {}; var f = e.defaultOptions; e.prototype.pointClass || (e.prototype.pointClass = C); e.prototype.type = a; f && (c[a] = f); m.seriesTypes[a] = e
}m.seriesTypes = a.seriesTypes; m.getSeries = function (a, e) { void 0 === e && (e = {}); var c = a.options.chart; c = e.type || c.type || c.defaultSeriesType || ''; var f = m.seriesTypes[c]; m || x(17, !0, a, { missingModuleFor: c }); c = new f(); typeof c.init === 'function' && c.init(a, e); return c }; m.registerSeriesType = g; m.seriesType = function (a, e, l, f, n) {
var c = r.plotOptions || {}; e = e || ''; c[a] = u(c[e], l); g(a, J(m.seriesTypes[e] ||
function () {}, f)); m.seriesTypes[a].prototype.type = a; n && (m.seriesTypes[a].prototype.pointClass = J(C, n)); return m.seriesTypes[a]
}
})(n || (n = {})); return n
}); M(a, 'Core/Chart/Chart.js', [a['Core/Animation/AnimationUtilities.js'], a['Core/Axis/Axis.js'], a['Core/FormatUtilities.js'], a['Core/Foundation.js'], a['Core/Globals.js'], a['Core/Legend/Legend.js'], a['Core/MSPointer.js'], a['Core/DefaultOptions.js'], a['Core/Color/Palette.js'], a['Core/Pointer.js'], a['Core/Renderer/RendererRegistry.js'], a['Core/Series/SeriesRegistry.js'],
a['Core/Renderer/SVG/SVGRenderer.js'], a['Core/Time.js'], a['Core/Utilities.js'], a['Core/Renderer/HTML/AST.js']], function (a, w, C, E, z, x, J, u, n, m, g, c, e, l, f, v) {
var q = a.animate; var k = a.animObject; var r = a.setAnimation; var D = C.numberFormat; var B = E.registerEventOptions; var O = z.charts; var t = z.doc; var h = z.marginNames; var d = z.svg; var b = z.win; var p = u.defaultOptions; var G = u.defaultTime; var y = c.seriesTypes; var L = f.addEvent; var F = f.attr; var P = f.cleanRecursively; var S = f.createElement; var Q = f.css; var V = f.defined; var fa = f.discardElement; var H = f.erase; var K = f.error; var M = f.extend; var ha = f.find; var R = f.fireEvent
var Z = f.getStyle; var A = f.isArray; var U = f.isNumber; var N = f.isObject; var W = f.isString; var X = f.merge; var Y = f.objectEach; var T = f.pick; var da = f.pInt; var ka = f.relativeLength; var ja = f.removeEvent; var ba = f.splat; var ea = f.syncTimeout; var ma = f.uniqueKey; a = (function () {
function a (a, b, d) {
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.eventOptions = this.container = this.colorCounter =
this.clipBox = this.chartWidth = this.chartHeight = this.bounds = this.axisOffset = this.axes = void 0; this.sharedClips = {}; this.yAxis = this.xAxis = this.userOptions = this.titleOffset = this.time = this.symbolCounter = this.spacingBox = this.spacing = void 0; this.getArgs(a, b, d)
}a.chart = function (b, d, c) { return new a(b, d, c) }; a.prototype.getArgs = function (a, b, d) { W(a) || a.nodeName ? (this.renderTo = a, this.init(b, d)) : this.init(a, b) }; a.prototype.init = function (a, b) {
var d = a.plotOptions || {}; R(this, 'init', { args: arguments }, function () {
var c =
X(p, a); var e = c.chart; Y(c.plotOptions, function (a, b) { N(a) && (a.tooltip = d[b] && X(d[b].tooltip) || void 0) }); c.tooltip.userOptions = a.chart && a.chart.forExport && a.tooltip.userOptions || a.tooltip; this.userOptions = a; this.margin = []; this.spacing = []; this.bounds = { h: {}, v: {} }; this.labelCollectors = []; this.callback = b; this.isResizing = 0; this.options = c; this.axes = []; this.series = []; this.time = a.time && Object.keys(a.time).length ? new l(a.time) : z.time; this.numberFormatter = e.numberFormatter || D; this.styledMode = e.styledMode; this.hasCartesianSeries =
e.showAxes; this.index = O.length; O.push(this); z.chartCount++; B(this, e); this.xAxis = []; this.yAxis = []; this.pointCount = this.colorCounter = this.symbolCounter = 0; R(this, 'afterInit'); this.firstRender()
})
}; a.prototype.initSeries = function (a) { var b = this.options.chart; b = a.type || b.type || b.defaultSeriesType; var d = y[b]; d || K(17, !0, this, { missingModuleFor: b }); b = new d(); typeof b.init === 'function' && b.init(this, a); return b }; a.prototype.setSeriesData = function () {
this.getSeriesOrderByLinks().forEach(function (a) {
a.points || a.data ||
!a.enabledDataSorting || a.setData(a.options.data, !1)
})
}; a.prototype.getSeriesOrderByLinks = function () { return this.series.concat().sort(function (a, b) { return a.linkedSeries.length || b.linkedSeries.length ? b.linkedSeries.length - a.linkedSeries.length : 0 }) }; a.prototype.orderSeries = function (a) { var b = this.series; a = a || 0; for (var d = b.length; a < d; ++a)b[a] && (b[a].index = a, b[a].name = b[a].getName()) }; a.prototype.isInsidePlot = function (a, b, d) {
void 0 === d && (d = {}); var c = this.inverted; var e = this.plotBox; var h = this.plotLeft; var f = this.plotTop
var g = this.scrollablePlotBox; var k = 0; var l = 0; d.visiblePlotOnly && this.scrollingContainer && (l = this.scrollingContainer, k = l.scrollLeft, l = l.scrollTop); var m = d.series; e = d.visiblePlotOnly && g || e; g = d.inverted ? b : a; b = d.inverted ? a : b; a = { x: g, y: b, isInsidePlot: !0 }; if (!d.ignoreX) { var A = m && (c ? m.yAxis : m.xAxis) || { pos: h, len: Infinity }; g = d.paneCoordinates ? A.pos + g : h + g; g >= Math.max(k + h, A.pos) && g <= Math.min(k + h + e.width, A.pos + A.len) || (a.isInsidePlot = !1) }!d.ignoreY && a.isInsidePlot && (c = m && (c ? m.xAxis : m.yAxis) || { pos: f, len: Infinity }, d = d.paneCoordinates
? c.pos + b : f + b, d >= Math.max(l + f, c.pos) && d <= Math.min(l + f + e.height, c.pos + c.len) || (a.isInsidePlot = !1)); R(this, 'afterIsInsidePlot', a); return a.isInsidePlot
}; a.prototype.redraw = function (a) {
R(this, 'beforeRedraw'); var b = this.hasCartesianSeries ? this.axes : this.colorAxis || []; var d = this.series; var c = this.pointer; var e = this.legend; var h = this.userOptions.legend; var f = this.renderer; var g = f.isHidden(); var k = []; var l = this.isDirtyBox; var m = this.isDirtyLegend; this.setResponsive && this.setResponsive(!1); r(this.hasRendered ? a : !1, this); g && this.temporaryDisplay()
this.layOutTitles(); for (a = d.length; a--;) { var A = d[a]; if (A.options.stacking || A.options.centerInCategory) { var p = !0; if (A.isDirty) { var n = !0; break } } } if (n) for (a = d.length; a--;)A = d[a], A.options.stacking && (A.isDirty = !0); d.forEach(function (a) { a.isDirty && (a.options.legendType === 'point' ? (typeof a.updateTotals === 'function' && a.updateTotals(), m = !0) : h && (h.labelFormatter || h.labelFormat) && (m = !0)); a.isDirtyData && R(a, 'updatedData') }); m && e && e.options.enabled && (e.render(), this.isDirtyLegend = !1); p && this.getStacks(); b.forEach(function (a) {
a.updateNames()
a.setScale()
}); this.getMargins(); b.forEach(function (a) { a.isDirty && (l = !0) }); b.forEach(function (a) { var b = a.min + ',' + a.max; a.extKey !== b && (a.extKey = b, k.push(function () { R(a, 'afterSetExtremes', M(a.eventArgs, a.getExtremes())); delete a.eventArgs })); (l || p) && a.redraw() }); l && this.drawChartBox(); R(this, 'predraw'); d.forEach(function (a) { (l || a.isDirty) && a.visible && a.redraw(); a.isDirtyData = !1 }); c && c.reset(!0); f.draw(); R(this, 'redraw'); R(this, 'render'); g && this.temporaryDisplay(!0); k.forEach(function (a) { a.call() })
}
a.prototype.get = function (a) { function b (b) { return b.id === a || b.options && b.options.id === a } for (var d = this.series, c = ha(this.axes, b) || ha(this.series, b), e = 0; !c && e < d.length; e++)c = ha(d[e].points || [], b); return c }; a.prototype.getAxes = function () { var a = this; var b = this.options; var d = b.xAxis = ba(b.xAxis || {}); b = b.yAxis = ba(b.yAxis || {}); R(this, 'getAxes'); d.forEach(function (a, b) { a.index = b; a.isX = !0 }); b.forEach(function (a, b) { a.index = b }); d.concat(b).forEach(function (b) { new w(a, b) }); R(this, 'afterGetAxes') }; a.prototype.getSelectedPoints =
function () { return this.series.reduce(function (a, b) { b.getPointsCollection().forEach(function (b) { T(b.selectedStaging, b.selected) && a.push(b) }); return a }, []) }; a.prototype.getSelectedSeries = function () { return this.series.filter(function (a) { return a.selected }) }; a.prototype.setTitle = function (a, b, d) { this.applyDescription('title', a); this.applyDescription('subtitle', b); this.applyDescription('caption', void 0); this.layOutTitles(d) }; a.prototype.applyDescription = function (a, b) {
var d = this; var c = a === 'title' ? {
color: n.neutralColor80,
fontSize: this.options.isStock ? '16px' : '18px'
} : { color: n.neutralColor60 }; c = this.options[a] = X(!this.styledMode && { style: c }, this.options[a], b); var e = this[a]; e && b && (this[a] = e = e.destroy()); c && !e && (e = this.renderer.text(c.text, 0, 0, c.useHTML).attr({ align: c.align, class: 'highcharts-' + a, zIndex: c.zIndex || 4 }).add(), e.update = function (b) { d[{ title: 'setTitle', subtitle: 'setSubtitle', caption: 'setCaption' }[a]](b) }, this.styledMode || e.css(c.style), this[a] = e)
}; a.prototype.layOutTitles = function (a) {
var b = [0, 0, 0]; var d = this.renderer
var c = this.spacingBox; ['title', 'subtitle', 'caption'].forEach(function (a) {
var e = this[a]; var h = this.options[a]; var f = h.verticalAlign || 'top'; a = a === 'title' ? f === 'top' ? -3 : 0 : f === 'top' ? b[0] + 2 : 0; var g; if (e) {
this.styledMode || (g = h.style && h.style.fontSize); g = d.fontMetrics(g, e).b; e.css({ width: (h.width || c.width + (h.widthAdjust || 0)) + 'px' }); var k = Math.round(e.getBBox(h.useHTML).height); e.align(M({ y: f === 'bottom' ? g : a + g, height: k }, h), !1, 'spacingBox'); h.floating || (f === 'top' ? b[0] = Math.ceil(b[0] + k) : f === 'bottom' && (b[2] = Math.ceil(b[2] +
k)))
}
}, this); b[0] && (this.options.title.verticalAlign || 'top') === 'top' && (b[0] += this.options.title.margin); b[2] && this.options.caption.verticalAlign === 'bottom' && (b[2] += this.options.caption.margin); var e = !this.titleOffset || this.titleOffset.join(',') !== b.join(','); this.titleOffset = b; R(this, 'afterLayOutTitles'); !this.isDirtyBox && e && (this.isDirtyBox = this.isDirtyLegend = e, this.hasRendered && T(a, !0) && this.isDirtyBox && this.redraw())
}; a.prototype.getChartSize = function () {
var a = this.options.chart; var b = a.width; a = a.height
var d = this.renderTo; V(b) || (this.containerWidth = Z(d, 'width')); V(a) || (this.containerHeight = Z(d, 'height')); this.chartWidth = Math.max(0, b || this.containerWidth || 600); this.chartHeight = Math.max(0, ka(a, this.chartWidth) || (this.containerHeight > 1 ? this.containerHeight : 400))
}; a.prototype.temporaryDisplay = function (a) {
var b = this.renderTo; if (a) for (;b && b.style;)b.hcOrigStyle && (Q(b, b.hcOrigStyle), delete b.hcOrigStyle), b.hcOrigDetached && (t.body.removeChild(b), b.hcOrigDetached = !1), b = b.parentNode; else {
for (;b && b.style;) {
t.body.contains(b) ||
b.parentNode || (b.hcOrigDetached = !0, t.body.appendChild(b)); if (Z(b, 'display', !1) === 'none' || b.hcOricDetached)b.hcOrigStyle = { display: b.style.display, height: b.style.height, overflow: b.style.overflow }, a = { display: 'block', overflow: 'hidden' }, b !== this.renderTo && (a.height = 0), Q(b, a), b.offsetWidth || b.style.setProperty('display', 'block', 'important'); b = b.parentNode; if (b === t.body) break
}
}
}; a.prototype.setClassName = function (a) { this.container.className = 'highcharts-container ' + (a || '') }; a.prototype.getContainer = function () {
var a =
this.options; var b = a.chart; var c = ma(); var h; var f = this.renderTo; f || (this.renderTo = f = b.renderTo); W(f) && (this.renderTo = f = t.getElementById(f)); f || K(13, !0, this); var k = da(F(f, 'data-highcharts-chart')); U(k) && O[k] && O[k].hasRendered && O[k].destroy(); F(f, 'data-highcharts-chart', this.index); f.innerHTML = ''; b.skipClone || f.offsetWidth || this.temporaryDisplay(); this.getChartSize(); k = this.chartWidth; var l = this.chartHeight; Q(f, { overflow: 'hidden' }); this.styledMode || (h = M({
position: 'relative',
overflow: 'hidden',
width: k + 'px',
height: l +
'px',
textAlign: 'left',
lineHeight: 'normal',
zIndex: 0,
'-webkit-tap-highlight-color': 'rgba(0,0,0,0)',
userSelect: 'none',
'touch-action': 'manipulation',
outline: 'none'
}, b.style || {})); this.container = c = S('div', { id: c }, h, f); this._cursor = c.style.cursor; this.renderer = new (b.renderer || !d ? g.getRendererType(b.renderer) : e)(c, k, l, void 0, b.forExport, a.exporting && a.exporting.allowHTML, this.styledMode); r(void 0, this); this.setClassName(b.className); if (this.styledMode) for (var m in a.defs) this.renderer.definition(a.defs[m])
else this.renderer.setStyle(b.style); this.renderer.chartIndex = this.index; R(this, 'afterGetContainer')
}; a.prototype.getMargins = function (a) { var b = this.spacing; var d = this.margin; var c = this.titleOffset; this.resetMargins(); c[0] && !V(d[0]) && (this.plotTop = Math.max(this.plotTop, c[0] + b[0])); c[2] && !V(d[2]) && (this.marginBottom = Math.max(this.marginBottom, c[2] + b[2])); this.legend && this.legend.display && this.legend.adjustMargins(d, b); R(this, 'getMargins'); a || this.getAxisMargins() }; a.prototype.getAxisMargins = function () {
var a =
this; var b = a.axisOffset = [0, 0, 0, 0]; var d = a.colorAxis; var c = a.margin; var e = function (a) { a.forEach(function (a) { a.visible && a.getOffset() }) }; a.hasCartesianSeries ? e(a.axes) : d && d.length && e(d); h.forEach(function (d, e) { V(c[e]) || (a[d] += b[e]) }); a.setChartSize()
}; a.prototype.reflow = function (a) {
var d = this; var c = d.options.chart; var e = d.renderTo; var h = V(c.width) && V(c.height); var g = c.width || Z(e, 'width'); c = c.height || Z(e, 'height'); e = a ? a.target : b; delete d.pointer.chartPosition; if (!h && !d.isPrinting && g && c && (e === b || e === t)) {
if (g !== d.containerWidth || c !==
d.containerHeight)f.clearTimeout(d.reflowTimeout), d.reflowTimeout = ea(function () { d.container && d.setSize(void 0, void 0, !1) }, a ? 100 : 0); d.containerWidth = g; d.containerHeight = c
}
}; a.prototype.setReflow = function (a) { var d = this; !1 === a || this.unbindReflow ? !1 === a && this.unbindReflow && (this.unbindReflow = this.unbindReflow()) : (this.unbindReflow = L(b, 'resize', function (a) { d.options && d.reflow(a) }), L(this, 'destroy', this.unbindReflow)) }; a.prototype.setSize = function (a, b, d) {
var c = this; var e = c.renderer; c.isResizing += 1; r(d, c); d =
e.globalAnimation; c.oldChartHeight = c.chartHeight; c.oldChartWidth = c.chartWidth; typeof a !== 'undefined' && (c.options.chart.width = a); typeof b !== 'undefined' && (c.options.chart.height = b); c.getChartSize(); c.styledMode || (d ? q : Q)(c.container, { width: c.chartWidth + 'px', height: c.chartHeight + 'px' }, d); c.setChartSize(!0); e.setSize(c.chartWidth, c.chartHeight, d); c.axes.forEach(function (a) { a.isDirty = !0; a.setScale() }); c.isDirtyLegend = !0; c.isDirtyBox = !0; c.layOutTitles(); c.getMargins(); c.redraw(d); c.oldChartHeight = null; R(c,
'resize'); ea(function () { c && R(c, 'endResize', null, function () { --c.isResizing }) }, k(d).duration)
}; a.prototype.setChartSize = function (a) {
var b = this.inverted; var d = this.renderer; var c = this.chartWidth; var e = this.chartHeight; var h = this.options.chart; var f = this.spacing; var g = this.clipOffset; var k; var l; var m; var A; this.plotLeft = k = Math.round(this.plotLeft); this.plotTop = l = Math.round(this.plotTop); this.plotWidth = m = Math.max(0, Math.round(c - k - this.marginRight)); this.plotHeight = A = Math.max(0, Math.round(e - l - this.marginBottom)); this.plotSizeX = b ? A : m; this.plotSizeY =
b ? m : A; this.plotBorderWidth = h.plotBorderWidth || 0; this.spacingBox = d.spacingBox = { x: f[3], y: f[0], width: c - f[3] - f[1], height: e - f[0] - f[2] }; this.plotBox = d.plotBox = { x: k, y: l, width: m, height: A }; b = 2 * Math.floor(this.plotBorderWidth / 2); c = Math.ceil(Math.max(b, g[3]) / 2); e = Math.ceil(Math.max(b, g[0]) / 2); this.clipBox = { x: c, y: e, width: Math.floor(this.plotSizeX - Math.max(b, g[1]) / 2 - c), height: Math.max(0, Math.floor(this.plotSizeY - Math.max(b, g[2]) / 2 - e)) }; a || (this.axes.forEach(function (a) { a.setAxisSize(); a.setAxisTranslation() }),
d.alignElements()); R(this, 'afterSetChartSize', { skipAxes: a })
}; a.prototype.resetMargins = function () { R(this, 'resetMargins'); var a = this; var b = a.options.chart; ['margin', 'spacing'].forEach(function (d) { var c = b[d]; var e = N(c) ? c : [c, c, c, c]; ['Top', 'Right', 'Bottom', 'Left'].forEach(function (c, h) { a[d][h] = T(b[d + c], e[h]) }) }); h.forEach(function (b, d) { a[b] = T(a.margin[d], a.spacing[d]) }); a.axisOffset = [0, 0, 0, 0]; a.clipOffset = [0, 0, 0, 0] }; a.prototype.drawChartBox = function () {
var a = this.options.chart; var b = this.renderer; var d = this.chartWidth
var c = this.chartHeight; var e = this.styledMode; var h = this.plotBGImage; var f = a.backgroundColor; var g = a.plotBackgroundColor; var k = a.plotBackgroundImage; var l = this.plotLeft; var m = this.plotTop; var A = this.plotWidth; var p = this.plotHeight; var n = this.plotBox; var q = this.clipRect; var N = this.clipBox; var t = this.chartBackground; var v = this.plotBackground; var r = this.plotBorder; var B; var y = 'animate'; t || (this.chartBackground = t = b.rect().addClass('highcharts-background').add(), y = 'attr'); if (e) var I = B = t.strokeWidth(); else {
I = a.borderWidth || 0; B = I + (a.shadow ? 8 : 0); f = { fill: f || 'none' }; if (I || t['stroke-width']) {
f.stroke =
a.borderColor, f['stroke-width'] = I
}t.attr(f).shadow(a.shadow)
}t[y]({ x: B / 2, y: B / 2, width: d - B - I % 2, height: c - B - I % 2, r: a.borderRadius }); y = 'animate'; v || (y = 'attr', this.plotBackground = v = b.rect().addClass('highcharts-plot-background').add()); v[y](n); e || (v.attr({ fill: g || 'none' }).shadow(a.plotShadow), k && (h ? (k !== h.attr('href') && h.attr('href', k), h.animate(n)) : this.plotBGImage = b.image(k, l, m, A, p).add())); q ? q.animate({ width: N.width, height: N.height }) : this.clipRect = b.clipRect(N); y = 'animate'; r || (y = 'attr', this.plotBorder =
r = b.rect().addClass('highcharts-plot-border').attr({ zIndex: 1 }).add()); e || r.attr({ stroke: a.plotBorderColor, 'stroke-width': a.plotBorderWidth || 0, fill: 'none' }); r[y](r.crisp({ x: l, y: m, width: A, height: p }, -r.strokeWidth())); this.isDirtyBox = !1; R(this, 'afterDrawChartBox')
}; a.prototype.propFromSeries = function () {
var a = this; var b = a.options.chart; var d = a.options.series; var c; var e; var h; ['inverted', 'angular', 'polar'].forEach(function (f) {
e = y[b.type || b.defaultSeriesType]; h = b[f] || e && e.prototype[f]; for (c = d && d.length; !h && c--;) {
(e = y[d[c].type]) &&
e.prototype[f] && (h = !0)
}a[f] = h
})
}; a.prototype.linkSeries = function () { var a = this; var b = a.series; b.forEach(function (a) { a.linkedSeries.length = 0 }); b.forEach(function (b) { var d = b.options.linkedTo; W(d) && (d = d === ':previous' ? a.series[b.index - 1] : a.get(d)) && d.linkedParent !== b && (d.linkedSeries.push(b), b.linkedParent = d, d.enabledDataSorting && b.setDataSortingOptions(), b.visible = T(b.options.visible, d.options.visible, b.visible)) }); R(this, 'afterLinkSeries') }; a.prototype.renderSeries = function () {
this.series.forEach(function (a) {
a.translate()
a.render()
})
}; a.prototype.renderLabels = function () { var a = this; var b = a.options.labels; b.items && b.items.forEach(function (d) { var c = M(b.style, d.style); var e = da(c.left) + a.plotLeft; var h = da(c.top) + a.plotTop + 12; delete c.left; delete c.top; a.renderer.text(d.html, e, h).attr({ zIndex: 2 }).css(c).add() }) }; a.prototype.render = function () {
var a = this.axes; var b = this.colorAxis; var d = this.renderer; var c = this.options; var e = function (a) { a.forEach(function (a) { a.visible && a.render() }) }; var h = 0; this.setTitle(); this.legend = new x(this, c.legend); this.getStacks &&
this.getStacks(); this.getMargins(!0); this.setChartSize(); c = this.plotWidth; a.some(function (a) { if (a.horiz && a.visible && a.options.labels.enabled && a.series.length) return h = 21, !0 }); var f = this.plotHeight = Math.max(this.plotHeight - h, 0); a.forEach(function (a) { a.setScale() }); this.getAxisMargins(); var g = c / this.plotWidth > 1.1; var k = f / this.plotHeight > 1.05; if (g || k)a.forEach(function (a) { (a.horiz && g || !a.horiz && k) && a.setTickInterval(!0) }), this.getMargins(); this.drawChartBox(); this.hasCartesianSeries ? e(a) : b && b.length && e(b)
this.seriesGroup || (this.seriesGroup = d.g('series-group').attr({ zIndex: 3 }).add()); this.renderSeries(); this.renderLabels(); this.addCredits(); this.setResponsive && this.setResponsive(); this.hasRendered = !0
}; a.prototype.addCredits = function (a) {
var d = this; var c = X(!0, this.options.credits, a); c.enabled && !this.credits && (this.credits = this.renderer.text(c.text + (this.mapCredits || ''), 0, 0).addClass('highcharts-credits').on('click', function () { c.href && (b.location.href = c.href) }).attr({ align: c.position.align, zIndex: 8 }), d.styledMode ||
this.credits.css(c.style), this.credits.add().align(c.position), this.credits.update = function (a) { d.credits = d.credits.destroy(); d.addCredits(a) })
}; a.prototype.destroy = function () {
var a = this; var b = a.axes; var d = a.series; var c = a.container; var e = c && c.parentNode; var h; R(a, 'destroy'); a.renderer.forExport ? H(O, a) : O[a.index] = void 0; z.chartCount--; a.renderTo.removeAttribute('data-highcharts-chart'); ja(a); for (h = b.length; h--;)b[h] = b[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 d = a[b]; d && d.destroy && (a[b] = d.destroy()) }); c && (c.innerHTML = '', ja(c), e && fa(c)); Y(a, function (b, d) { delete a[d] })
}; a.prototype.firstRender = function () {
var a = this; var b = a.options; if (!a.isReadyToRender || a.isReadyToRender()) {
a.getContainer(); a.resetMargins(); a.setChartSize(); a.propFromSeries(); a.getAxes();
(A(b.series) ? b.series : []).forEach(function (b) { a.initSeries(b) }); a.linkSeries(); a.setSeriesData(); R(a, 'beforeRender'); m && (J.isRequired() ? a.pointer = new J(a, b) : a.pointer = new m(a, b)); a.render(); a.pointer.getChartPosition(); if (!a.renderer.imgCount && !a.hasLoaded)a.onload(); a.temporaryDisplay(!0)
}
}; a.prototype.onload = function () {
this.callbacks.concat([this.callback]).forEach(function (a) { a && typeof this.index !== 'undefined' && a.apply(this, [this]) }, this); R(this, 'load'); R(this, 'render'); V(this.index) && this.setReflow(this.options.chart.reflow)
this.hasLoaded = !0
}; a.prototype.addSeries = function (a, b, d) { var c = this; var e; a && (b = T(b, !0), R(c, 'addSeries', { options: a }, function () { e = c.initSeries(a); c.isDirtyLegend = !0; c.linkSeries(); e.enabledDataSorting && e.setData(a.data, !1); R(c, 'afterAddSeries', { series: e }); b && c.redraw(d) })); return e }; a.prototype.addAxis = function (a, b, d, c) { return this.createAxis(b ? 'xAxis' : 'yAxis', { axis: a, redraw: d, animation: c }) }; a.prototype.addColorAxis = function (a, b, d) { return this.createAxis('colorAxis', { axis: a, redraw: b, animation: d }) }; a.prototype.createAxis =
function (a, b) { a = new w(this, X(b.axis, { index: this[a].length, isX: a === 'xAxis' })); T(b.redraw, !0) && this.redraw(b.animation); return a }; a.prototype.showLoading = function (a) {
var b = this; var d = b.options; var c = d.loading; var e = function () { h && Q(h, { left: b.plotLeft + 'px', top: b.plotTop + 'px', width: b.plotWidth + 'px', height: b.plotHeight + 'px' }) }; var h = b.loadingDiv; var f = b.loadingSpan; h || (b.loadingDiv = h = S('div', { className: 'highcharts-loading highcharts-loading-hidden' }, null, b.container)); f || (b.loadingSpan = f = S('span', { className: 'highcharts-loading-inner' },
null, h), L(b, 'redraw', e)); h.className = 'highcharts-loading'; v.setElementHTML(f, T(a, d.lang.loading, '')); b.styledMode || (Q(h, M(c.style, { zIndex: 10 })), Q(f, c.labelStyle), b.loadingShown || (Q(h, { opacity: 0, display: '' }), q(h, { opacity: c.style.opacity || 0.5 }, { duration: c.showDuration || 0 }))); b.loadingShown = !0; e()
}; a.prototype.hideLoading = function () {
var a = this.options; var b = this.loadingDiv; b && (b.className = 'highcharts-loading highcharts-loading-hidden', this.styledMode || q(b, { opacity: 0 }, {
duration: a.loading.hideDuration || 100,
complete: function () { Q(b, { display: 'none' }) }
})); this.loadingShown = !1
}; a.prototype.update = function (a, b, d, c) {
var e = this; var h = { credits: 'addCredits', title: 'setTitle', subtitle: 'setSubtitle', caption: 'setCaption' }; var f = a.isResponsiveOptions; var g = []; var k; var m; R(e, 'update', { options: a }); f || e.setResponsive(!1, !0); a = P(a, e.options); e.userOptions = X(e.userOptions, a); var A = a.chart; if (A) {
X(!0, e.options.chart, A); 'className' in A && e.setClassName(A.className); 'reflow' in A && e.setReflow(A.reflow); if ('inverted' in A || 'polar' in A || 'type' in
A) { e.propFromSeries(); var p = !0 }'alignTicks' in A && (p = !0); 'events' in A && B(this, A); Y(A, function (a, b) { e.propsRequireUpdateSeries.indexOf('chart.' + b) !== -1 && (k = !0); e.propsRequireDirtyBox.indexOf(b) !== -1 && (e.isDirtyBox = !0); e.propsRequireReflow.indexOf(b) !== -1 && (f ? e.isDirtyBox = !0 : m = !0) }); !e.styledMode && A.style && e.renderer.setStyle(e.options.chart.style || {})
}!e.styledMode && a.colors && (this.options.colors = a.colors); a.time && (this.time === G && (this.time = new l(a.time)), X(!0, e.options.time, a.time)); Y(a, function (b,
d) { if (e[d] && typeof e[d].update === 'function')e[d].update(b, !1); else if (typeof e[h[d]] === 'function')e[h[d]](b); else d !== 'colors' && e.collectionsWithUpdate.indexOf(d) === -1 && X(!0, e.options[d], a[d]); d !== 'chart' && e.propsRequireUpdateSeries.indexOf(d) !== -1 && (k = !0) }); this.collectionsWithUpdate.forEach(function (b) {
if (a[b]) {
var c = []; e[b].forEach(function (a, b) { a.options.isInternal || c.push(T(a.options.index, b)) }); ba(a[b]).forEach(function (a, h) {
var f = V(a.id); var g; f && (g = e.get(a.id)); !g && e[b] && (g = e[b][c ? c[h] : h]) && f &&
V(g.options.id) && (g = void 0); g && g.coll === b && (g.update(a, !1), d && (g.touched = !0)); !g && d && e.collectionsWithInit[b] && (e.collectionsWithInit[b][0].apply(e, [a].concat(e.collectionsWithInit[b][1] || []).concat([!1])).touched = !0)
}); d && e[b].forEach(function (a) { a.touched || a.options.isInternal ? delete a.touched : g.push(a) })
}
}); g.forEach(function (a) { a.chart && a.remove && a.remove(!1) }); p && e.axes.forEach(function (a) { a.update({}, !1) }); k && e.getSeriesOrderByLinks().forEach(function (a) { a.chart && a.update({}, !1) }, this); p = A &&
A.width; A = A && (W(A.height) ? ka(A.height, p || e.chartWidth) : A.height); m || U(p) && p !== e.chartWidth || U(A) && A !== e.chartHeight ? e.setSize(p, A, c) : T(b, !0) && e.redraw(c); R(e, 'afterUpdate', { options: a, redraw: b, animation: c })
}; a.prototype.setSubtitle = function (a, b) { this.applyDescription('subtitle', a); this.layOutTitles(b) }; a.prototype.setCaption = function (a, b) { this.applyDescription('caption', a); this.layOutTitles(b) }; a.prototype.showResetZoom = function () {
function a () { b.zoomOut() } var b = this; var d = p.lang; var c = b.options.chart.resetZoomButton
var e = c.theme; var h = e.states; var f = c.relativeTo === 'chart' || c.relativeTo === 'spacingBox' ? null : 'scrollablePlotBox'; R(this, 'beforeShowResetZoom', null, function () { b.resetZoomButton = b.renderer.button(d.resetZoom, null, null, a, e, h && h.hover).attr({ align: c.position.align, title: d.resetZoomTitle }).addClass('highcharts-reset-zoom').add().align(c.position, !1, f) }); R(this, 'afterShowResetZoom')
}; a.prototype.zoomOut = function () { R(this, 'selection', { resetSelection: !0 }, this.zoom) }; a.prototype.zoom = function (a) {
var b = this; var d = b.pointer
var c = b.inverted ? d.mouseDownX : d.mouseDownY; var e = !1; var h; !a || a.resetSelection ? (b.axes.forEach(function (a) { h = a.zoom() }), d.initiated = !1) : a.xAxis.concat(a.yAxis).forEach(function (a) { var f = a.axis; var g = b.inverted ? f.left : f.top; var k = b.inverted ? g + f.width : g + f.height; var l = f.isXAxis; var A = !1; if (!l && c >= g && c <= k || l || !V(c))A = !0; d[l ? 'zoomX' : 'zoomY'] && A && (h = f.zoom(a.min, a.max), f.displayBtn && (e = !0)) }); var f = b.resetZoomButton; e && !f ? b.showResetZoom() : !e && N(f) && (b.resetZoomButton = f.destroy()); h && b.redraw(T(b.options.chart.animation, a && a.animation,
b.pointCount < 100))
}; a.prototype.pan = function (a, b) {
var d = this; var c = d.hoverPoints; b = typeof b === 'object' ? b : { enabled: b, type: 'x' }; var e = d.options.chart; var h = d.options.mapNavigation && d.options.mapNavigation.enabled; e && e.panning && (e.panning = b); var f = b.type; var g; R(this, 'pan', { originalEvent: a }, function () {
c && c.forEach(function (a) { a.setState() }); var b = d.xAxis; f === 'xy' ? b = b.concat(d.yAxis) : f === 'y' && (b = d.yAxis); var e = {}; b.forEach(function (b) {
if (b.options.panningEnabled && !b.options.isInternal) {
var c = b.horiz; var k = a[c ? 'chartX'
: 'chartY']; c = c ? 'mouseDownX' : 'mouseDownY'; var l = d[c]; var A = b.minPointOffset || 0; var m = b.reversed && !d.inverted || !b.reversed && d.inverted ? -1 : 1; var p = b.getExtremes(); var n = b.toValue(l - k, !0) + A * m; var q = b.toValue(l + b.len - k, !0) - (A * m || b.isXAxis && b.pointRangePadding || 0); var t = q < n; m = b.hasVerticalPanning(); l = t ? q : n; n = t ? n : q; var N = b.panningState; !m || b.isXAxis || N && !N.isDirty || b.series.forEach(function (a) {
var b = a.getProcessedData(!0); b = a.getExtremes(b.yData, !0); N || (N = { startMin: Number.MAX_VALUE, startMax: -Number.MAX_VALUE }); U(b.dataMin) && U(b.dataMax) &&
(N.startMin = Math.min(T(a.options.threshold, Infinity), b.dataMin, N.startMin), N.startMax = Math.max(T(a.options.threshold, -Infinity), b.dataMax, N.startMax))
}); m = Math.min(T(N && N.startMin, p.dataMin), A ? p.min : b.toValue(b.toPixels(p.min) - b.minPixelPadding)); q = Math.max(T(N && N.startMax, p.dataMax), A ? p.max : b.toValue(b.toPixels(p.max) + b.minPixelPadding)); b.panningState = N; b.isOrdinal || (A = m - l, A > 0 && (n += A, l = m), A = n - q, A > 0 && (n = q, l -= A), b.series.length && l !== p.min && n !== p.max && l >= m && n <= q && (b.setExtremes(l, n, !1, !1, { trigger: 'pan' }),
d.resetZoomButton || h || l === m || n === q || !f.match('y') || (d.showResetZoom(), b.displayBtn = !1), g = !0), e[c] = k)
}
}); Y(e, function (a, b) { d[b] = a }); g && d.redraw(!1); Q(d.container, { cursor: 'move' })
})
}; return a
}()); M(a.prototype, {
callbacks: [],
collectionsWithInit: { xAxis: [a.prototype.addAxis, [!0]], yAxis: [a.prototype.addAxis, [!1]], series: [a.prototype.addSeries] },
collectionsWithUpdate: ['xAxis', 'yAxis', 'series'],
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(' ')
}); ''; return a
}); M(a, 'Core/Legend/LegendSymbol.js', [a['Core/Utilities.js']], function (a) {
var r = a.merge; var C = a.pick; var E; (function (a) {
a.drawLineMarker = function (a) {
var x = this.options; var u = a.symbolWidth; var n = a.symbolHeight; var m = n / 2; var g = this.chart.renderer
var c = this.legendGroup; a = a.baseline - Math.round(0.3 * a.fontMetrics.b); var e = {}; var l = x.marker; this.chart.styledMode || (e = { 'stroke-width': x.lineWidth || 0 }, x.dashStyle && (e.dashstyle = x.dashStyle)); this.legendLine = g.path([['M', 0, a], ['L', u, a]]).addClass('highcharts-graph').attr(e).add(c); l && !1 !== l.enabled && u && (x = Math.min(C(l.radius, m), m), this.symbol.indexOf('url') === 0 && (l = r(l, { width: n, height: n }), x = 0), this.legendSymbol = u = g.symbol(this.symbol, u / 2 - x, a - x, 2 * x, 2 * x, l).addClass('highcharts-point').add(c), u.isMarker = !0)
}; a.drawRectangle =
function (a, r) { var u = a.symbolHeight; var n = a.options.squareSymbol; r.legendSymbol = this.chart.renderer.rect(n ? (a.symbolWidth - u) / 2 : 0, a.baseline - u + 1, n ? u : a.symbolWidth, u, C(a.options.symbolRadius, u / 2)).addClass('highcharts-point').attr({ zIndex: 3 }).add(r.legendGroup) }
})(E || (E = {})); return E
}); M(a, 'Core/Series/SeriesDefaults.js', [a['Core/Color/Palette.js']], function (a) {
return {
lineWidth: 2,
allowPointSelect: !1,
crisp: !0,
showCheckbox: !1,
animation: { duration: 1E3 },
events: {},
marker: {
enabledThreshold: 2,
lineColor: a.backgroundColor,
lineWidth: 0,
radius: 4,
states: { normal: { animation: !0 }, hover: { animation: { duration: 50 }, enabled: !0, radiusPlus: 2, lineWidthPlus: 1 }, select: { fillColor: a.neutralColor20, lineColor: a.neutralColor100, lineWidth: 2 } }
},
point: { events: {} },
dataLabels: { animation: {}, align: 'center', defer: !0, formatter: function () { var a = this.series.chart.numberFormatter; return typeof this.y !== 'number' ? '' : a(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'
}
}); M(a, 'Core/Series/Series.js', [a['Core/Animation/AnimationUtilities.js'], a['Core/DefaultOptions.js'], a['Core/Foundation.js'], a['Core/Globals.js'], a['Core/Legend/LegendSymbol.js'], a['Core/Color/Palette.js'],
a['Core/Series/Point.js'], a['Core/Series/SeriesDefaults.js'], a['Core/Series/SeriesRegistry.js'], a['Core/Renderer/SVG/SVGElement.js'], a['Core/Utilities.js']], function (a, w, C, E, z, x, J, u, n, m, g) {
var c = a.animObject; var e = a.setAnimation; var l = w.defaultOptions; var f = C.registerEventOptions; var v = E.hasTouch; var q = E.svg; var k = E.win; var r = n.seriesTypes; var D = g.addEvent; var B = g.arrayMax; var O = g.arrayMin; var t = g.clamp; var h = g.cleanRecursively; var d = g.correctFloat; var b = g.defined; var p = g.erase; var G = g.error; var y = g.extend; var L = g.find; var F = g.fireEvent; var P = g.getNestedProperty; var S = g.isArray
var Q = g.isNumber; var V = g.isString; var M = g.merge; var H = g.objectEach; var K = g.pick; var la = g.removeEvent; var ha = g.splat; var R = g.syncTimeout; a = (function () {
function a () { this.zones = this.yAxis = this.xAxis = this.userOptions = this.tooltipOptions = this.processedYData = this.processedXData = this.points = this.options = this.linkedSeries = this.index = this.eventsToUnbind = this.eventOptions = this.data = this.chart = this._i = void 0 }a.prototype.init = function (a, b) {
F(this, 'init', { options: b }); var d = this; var c = a.series; this.eventsToUnbind = []; d.chart = a; d.options = d.setOptions(b)
b = d.options; d.linkedSeries = []; d.bindAxes(); y(d, { name: b.name, state: '', visible: !1 !== b.visible, selected: !0 === b.selected }); f(this, b); var e = b.events; if (e && e.click || b.point && b.point.events && b.point.events.click || b.allowPointSelect)a.runTrackerClick = !0; d.getColor(); d.getSymbol(); d.parallelArrays.forEach(function (a) { d[a + 'Data'] || (d[a + 'Data'] = []) }); d.isCartesian && (a.hasCartesianSeries = !0); var h; c.length && (h = c[c.length - 1]); d._i = K(h && h._i, -1) + 1; d.opacity = d.options.opacity; a.orderSeries(this.insert(c)); b.dataSorting &&
b.dataSorting.enabled ? d.setDataSortingOptions() : d.points || d.data || d.setData(b.data, !1); F(this, 'afterInit')
}; a.prototype.is = function (a) { return r[a] && this instanceof r[a] }; a.prototype.insert = function (a) { var b = this.options.index; var d; if (Q(b)) { for (d = a.length; d--;) if (b >= K(a[d].options.index, a[d]._i)) { a.splice(d + 1, 0, this); break }d === -1 && a.unshift(this); d += 1 } else a.push(this); return K(d, a.length - 1) }; a.prototype.bindAxes = function () {
var a = this; var b = a.options; var d = a.chart; var c; F(this, 'bindAxes', null, function () {
(a.axisTypes ||
[]).forEach(function (e) { var h = 0; d[e].forEach(function (d) { c = d.options; if (b[e] === h && !c.isInternal || typeof b[e] !== 'undefined' && b[e] === c.id || typeof b[e] === 'undefined' && c.index === 0)a.insert(d.series), a[e] = d, d.isDirty = !0; c.isInternal || h++ }); a[e] || a.optionalAxis === e || G(18, !0, d) })
}); F(this, 'afterBindAxes')
}; a.prototype.updateParallelArrays = function (a, b) {
var d = a.series; var c = arguments; var e = Q(b) ? function (c) { var e = c === 'y' && d.toYData ? d.toYData(a) : a[c]; d[c + 'Data'][b] = e } : function (a) {
Array.prototype[b].apply(d[a + 'Data'],
Array.prototype.slice.call(c, 2))
}; d.parallelArrays.forEach(e)
}; a.prototype.hasData = function () { return this.visible && typeof this.dataMax !== 'undefined' && typeof this.dataMin !== 'undefined' || this.visible && this.yData && this.yData.length > 0 }; a.prototype.autoIncrement = function (a) {
var b = this.options; var d = b.pointIntervalUnit; var c = b.relativeXValue; var e = this.chart.time; var h = this.xIncrement; var f; h = K(h, b.pointStart, 0); this.pointInterval = f = K(this.pointInterval, b.pointInterval, 1); c && Q(a) && (f *= a); d && (b = new e.Date(h), d === 'day' ? e.set('Date',
b, e.get('Date', b) + f) : d === 'month' ? e.set('Month', b, e.get('Month', b) + f) : d === 'year' && e.set('FullYear', b, e.get('FullYear', b) + f), f = b.getTime() - h); if (c && Q(a)) return h + f; this.xIncrement = h + f; return h
}; a.prototype.setDataSortingOptions = function () { var a = this.options; y(this, { requireSorting: !1, sorted: !1, enabledDataSorting: !0, allowDG: !1 }); b(a.pointRange) || (a.pointRange = 1) }; a.prototype.setOptions = function (a) {
var d = this.chart; var c = d.options; var e = c.plotOptions; var h = d.userOptions || {}; a = M(a); d = d.styledMode; var f = {
plotOptions: e,
userOptions: a
}; F(this, 'setOptions', f); var g = f.plotOptions[this.type]; var k = h.plotOptions || {}; this.userOptions = f.userOptions; h = M(g, e.series, h.plotOptions && h.plotOptions[this.type], a); this.tooltipOptions = M(l.tooltip, l.plotOptions.series && l.plotOptions.series.tooltip, l.plotOptions[this.type].tooltip, c.tooltip.userOptions, e.series && e.series.tooltip, e[this.type].tooltip, a.tooltip); this.stickyTracking = K(a.stickyTracking, k[this.type] && k[this.type].stickyTracking, k.series && k.series.stickyTracking, this.tooltipOptions.shared &&
!this.noSharedTooltip ? !0 : h.stickyTracking); g.marker === null && delete h.marker; this.zoneAxis = h.zoneAxis; e = this.zones = (h.zones || []).slice(); !h.negativeColor && !h.negativeFillColor || h.zones || (c = { value: h[this.zoneAxis + 'Threshold'] || h.threshold || 0, className: 'highcharts-negative' }, d || (c.color = h.negativeColor, c.fillColor = h.negativeFillColor), e.push(c)); e.length && b(e[e.length - 1].value) && e.push(d ? {} : { color: this.color, fillColor: this.fillColor }); F(this, 'afterSetOptions', { options: h }); return h
}; a.prototype.getName =
function () { return K(this.options.name, 'Series ' + (this.index + 1)) }; a.prototype.getCyclic = function (a, d, c) { var e = this.chart; var h = this.userOptions; var f = a + 'Index'; var g = a + 'Counter'; var k = c ? c.length : K(e.options.chart[a + 'Count'], e[a + 'Count']); if (!d) { var l = K(h[f], h['_' + f]); b(l) || (e.series.length || (e[g] = 0), h['_' + f] = l = e[g] % k, e[g] += 1); c && (d = c[l]) } typeof l !== 'undefined' && (this[f] = l); this[a] = d }; a.prototype.getColor = function () {
this.chart.styledMode ? this.getCyclic('color') : this.options.colorByPoint ? this.color = x.neutralColor20
: this.getCyclic('color', this.options.color || l.plotOptions[this.type].color, this.chart.options.colors)
}; a.prototype.getPointsCollection = function () { return (this.hasGroupedData ? this.points : this.data) || [] }; a.prototype.getSymbol = function () { this.getCyclic('symbol', this.options.marker.symbol, this.chart.options.symbols) }; a.prototype.findPointIndex = function (a, b) {
var d = a.id; var c = a.x; var e = this.points; var h = this.options.dataSorting; var f; var g; if (d)h = this.chart.get(d), h instanceof J && (f = h); else if (this.linkedParent || this.enabledDataSorting ||
this.options.relativeXValue) if (f = function (b) { return !b.touched && b.index === a.index }, h && h.matchByName ? f = function (b) { return !b.touched && b.name === a.name } : this.options.relativeXValue && (f = function (b) { return !b.touched && b.options.x === a.x }), f = L(e, f), !f) return; if (f) { var k = f && f.index; typeof k !== 'undefined' && (g = !0) } typeof k === 'undefined' && Q(c) && (k = this.xData.indexOf(c, b)); k !== -1 && typeof k !== 'undefined' && this.cropped && (k = k >= this.cropStart ? k - this.cropStart : k); !g && Q(k) && e[k] && e[k].touched && (k = void 0); return k
}; a.prototype.updateData =
function (a, d) {
var c = this.options; var e = c.dataSorting; var h = this.points; var f = []; var g = this.requireSorting; var k = a.length === h.length; var l; var m; var A; var p = !0; this.xIncrement = null; a.forEach(function (a, d) { var m = b(a) && this.pointClass.prototype.optionsToObject.call({ series: this }, a) || {}; var p = m.x; if (m.id || Q(p)) { if (m = this.findPointIndex(m, A), m === -1 || typeof m === 'undefined' ? f.push(a) : h[m] && a !== c.data[m] ? (h[m].update(a, !1, null, !1), h[m].touched = !0, g && (A = m + 1)) : h[m] && (h[m].touched = !0), !k || d !== m || e && e.enabled || this.hasDerivedData)l = !0 } else f.push(a) },
this); if (l) for (a = h.length; a--;)(m = h[a]) && !m.touched && m.remove && m.remove(!1, d); else !k || e && e.enabled ? p = !1 : (a.forEach(function (a, b) { a !== h[b].y && h[b].update && h[b].update(a, !1, null, !1) }), f.length = 0); h.forEach(function (a) { a && (a.touched = !1) }); if (!p) return !1; f.forEach(function (a) { this.addPoint(a, !1, null, null, !1) }, this); this.xIncrement === null && this.xData && this.xData.length && (this.xIncrement = B(this.xData), this.autoIncrement()); return !0
}; a.prototype.setData = function (a, b, d, c) {
var e = this; var h = e.points; var f = h && h.length ||
0; var g = e.options; var k = e.chart; var l = g.dataSorting; var m = e.xAxis; var A = g.turboThreshold; var p = this.xData; var n = this.yData; var q = e.pointArrayMap; q = q && q.length; var t = g.keys; var v; var r = 0; var B = 1; var y = null; a = a || []; var N = a.length; b = K(b, !0); l && l.enabled && (a = this.sortData(a)); !1 !== c && N && f && !e.cropped && !e.hasGroupedData && e.visible && !e.isSeriesBoosting && (v = this.updateData(a, d)); if (!v) {
e.xIncrement = null; e.colorCounter = 0; this.parallelArrays.forEach(function (a) { e[a + 'Data'].length = 0 }); if (A && N > A) {
if (y = e.getFirstValidPoint(a), Q(y)) {
for (d = 0; d < N; d++) {
p[d] = this.autoIncrement(),
n[d] = a[d]
}
} else if (S(y)) if (q) for (d = 0; d < N; d++)c = a[d], p[d] = c[0], n[d] = c.slice(1, q + 1); else for (t && (r = t.indexOf('x'), B = t.indexOf('y'), r = r >= 0 ? r : 0, B = B >= 0 ? B : 1), d = 0; d < N; d++)c = a[d], p[d] = c[r], n[d] = c[B]; else G(12, !1, k)
} else for (d = 0; d < N; d++) typeof a[d] !== 'undefined' && (c = { series: e }, e.pointClass.prototype.applyOptions.apply(c, [a[d]]), e.updateParallelArrays(c, d)); n && V(n[0]) && G(14, !0, k); e.data = []; e.options.data = e.userOptions.data = a; for (d = f; d--;)h[d] && h[d].destroy && h[d].destroy(); m && (m.minRange = m.userMinRange); e.isDirty =
k.isDirtyBox = !0; e.isDirtyData = !!h; d = !1
}g.legendType === 'point' && (this.processData(), this.generatePoints()); b && k.redraw(d)
}; a.prototype.sortData = function (a) {
var d = this; var c = d.options.dataSorting.sortKey || 'y'; var e = function (a, d) { return b(d) && a.pointClass.prototype.optionsToObject.call({ series: a }, d) || {} }; a.forEach(function (b, c) { a[c] = e(d, b); a[c].index = c }, this); a.concat().sort(function (a, b) { a = P(c, a); b = P(c, b); return b < a ? -1 : b > a ? 1 : 0 }).forEach(function (a, b) { a.x = b }, this); d.linkedSeries && d.linkedSeries.forEach(function (b) {
var d =
b.options; var c = d.data; d.dataSorting && d.dataSorting.enabled || !c || (c.forEach(function (d, h) { c[h] = e(b, d); a[h] && (c[h].x = a[h].x, c[h].index = h) }), b.setData(c, !1))
}); return a
}; a.prototype.getProcessedData = function (a) {
var b = this.xAxis; var d = this.options; var c = d.cropThreshold; var e = a || this.getExtremesFromAll || d.getExtremesFromAll; var h = this.isCartesian; a = b && b.val2lin; d = !(!b || !b.logarithmic); var f = 0; var g = this.xData; var k = this.yData; var l = this.requireSorting; var m = !1; var A = g.length; if (b) {
m = b.getExtremes(); var p = m.min; var n = m.max; m = b.categories &&
!b.names.length
} if (h && this.sorted && !e && (!c || A > c || this.forceCrop)) if (g[A - 1] < p || g[0] > n)g = [], k = []; else if (this.yData && (g[0] < p || g[A - 1] > n)) { var q = this.cropData(this.xData, this.yData, p, n); g = q.xData; k = q.yData; f = q.start; q = !0 } for (c = g.length || 1; --c;) if (b = d ? a(g[c]) - a(g[c - 1]) : g[c] - g[c - 1], b > 0 && (typeof t === 'undefined' || b < t)) var t = b; else b < 0 && l && !m && (G(15, !1, this.chart), l = !1); return { xData: g, yData: k, cropped: q, cropStart: f, closestPointRange: t }
}; a.prototype.processData = function (a) {
var b = this.xAxis; if (this.isCartesian &&
!this.isDirty && !b.isDirty && !this.yAxis.isDirty && !a) return !1; a = this.getProcessedData(); this.cropped = a.cropped; this.cropStart = a.cropStart; this.processedXData = a.xData; this.processedYData = a.yData; this.closestPointRange = this.basePointRange = a.closestPointRange
}; a.prototype.cropData = function (a, b, d, c, e) { var h = a.length; var f; var g = 0; var k = h; e = K(e, this.cropShoulder); for (f = 0; f < h; f++) if (a[f] >= d) { g = Math.max(0, f - e); break } for (d = f; d < h; d++) if (a[d] > c) { k = d + e; break } return { xData: a.slice(g, k), yData: b.slice(g, k), start: g, end: k } }; a.prototype.generatePoints =
function () {
var a = this.options; var b = a.data; var d = this.processedXData; var c = this.processedYData; var e = this.pointClass; var h = d.length; var f = this.cropStart || 0; var g = this.hasGroupedData; var k = a.keys; var l = []; a = a.dataGrouping && a.dataGrouping.groupAll ? f : 0; var m; var p; var n = this.data; if (!n && !g) { var q = []; q.length = b.length; n = this.data = q }k && g && (this.options.keys = !1); for (p = 0; p < h; p++) {
q = f + p; if (g) {
var t = (new e()).init(this, [d[p]].concat(ha(c[p]))); t.dataGroup = this.groupMap[a + p]; t.dataGroup.options && (t.options = t.dataGroup.options, y(t, t.dataGroup.options),
delete t.dataLabels)
} else (t = n[q]) || typeof b[q] === 'undefined' || (n[q] = t = (new e()).init(this, b[q], d[p])); t && (t.index = g ? a + p : q, l[p] = t)
} this.options.keys = k; if (n && (h !== (m = n.length) || g)) for (p = 0; p < m; p++)p !== f || g || (p += h), n[p] && (n[p].destroyElements(), n[p].plotX = void 0); this.data = n; this.points = l; F(this, 'afterGeneratePoints')
}; a.prototype.getXExtremes = function (a) { return { min: O(a), max: B(a) } }; a.prototype.getExtremes = function (a, b) {
var d = this.xAxis; var c = this.yAxis; var e = this.processedXData || this.xData; var h = []; var f = this.requireSorting
? this.cropShoulder : 0; c = c ? c.positiveValuesOnly : !1; var g; var k = 0; var l = 0; var m = 0; a = a || this.stackedYData || this.processedYData || []; var p = a.length; if (d) { var n = d.getExtremes(); k = n.min; l = n.max } for (g = 0; g < p; g++) { var A = e[g]; n = a[g]; var q = (Q(n) || S(n)) && (n.length || n > 0 || !c); A = b || this.getExtremesFromAll || this.options.getExtremesFromAll || this.cropped || !d || (e[g + f] || A) >= k && (e[g - f] || A) <= l; if (q && A) if (q = n.length) for (;q--;)Q(n[q]) && (h[m++] = n[q]); else h[m++] = n }a = { dataMin: O(h), dataMax: B(h) }; F(this, 'afterGetExtremes', { dataExtremes: a })
return a
}; a.prototype.applyExtremes = function () { var a = this.getExtremes(); this.dataMin = a.dataMin; this.dataMax = a.dataMax; return a }; a.prototype.getFirstValidPoint = function (a) { for (var b = a.length, d = 0, c = null; c === null && d < b;)c = a[d], d++; return c }; a.prototype.translate = function () {
this.processedXData || this.processData(); this.generatePoints(); var a = this.options; var c = a.stacking; var e = this.xAxis; var h = e.categories; var f = this.enabledDataSorting; var g = this.yAxis; var k = this.points; var l = k.length; var m = !!this.modifyValue; var p = this.pointPlacementToXValue()
var n = !!p; var q = a.threshold; var v = a.startFromThreshold ? q : 0; var r = this.zoneAxis || 'y'; var B; var y; var I = Number.MAX_VALUE; for (B = 0; B < l; B++) {
var D = k[B]; var u = D.x; var G = void 0; var x = void 0; var w = D.y; var L = D.low; var z = c && g.stacking && g.stacking.stacks[(this.negStacks && w < (v ? 0 : q) ? '-' : '') + this.stackKey]; if (g.positiveValuesOnly && !g.validatePositiveValue(w) || e.positiveValuesOnly && !e.validatePositiveValue(u))D.isNull = !0; D.plotX = y = d(t(e.translate(u, 0, 0, 0, 1, p, this.type === 'flags'), -1E5, 1E5)); if (c && this.visible && z && z[u]) {
var C = this.getStackIndicator(C, u, this.index)
D.isNull || (G = z[u], x = G.points[C.key])
}S(x) && (L = x[0], w = x[1], L === v && C.key === z[u].base && (L = K(Q(q) && q, g.min)), g.positiveValuesOnly && L <= 0 && (L = null), D.total = D.stackTotal = G.total, D.percentage = G.total && D.y / G.total * 100, D.stackY = w, this.irregularWidths || G.setOffset(this.pointXOffset || 0, this.barW || 0)); D.yBottom = b(L) ? t(g.translate(L, 0, 1, 0, 1), -1E5, 1E5) : null; m && (w = this.modifyValue(w, D)); D.plotY = void 0; Q(w) && (G = g.translate(w, !1, !0, !1, !0), typeof G !== 'undefined' && (D.plotY = t(G, -1E5, 1E5))); D.isInside = this.isPointInside(D)
D.clientX = n ? d(e.translate(u, 0, 0, 0, 1, p)) : y; D.negative = D[r] < (a[r + 'Threshold'] || q || 0); D.category = h && typeof h[D.x] !== 'undefined' ? h[D.x] : D.x; if (!D.isNull && !1 !== D.visible) { typeof H !== 'undefined' && (I = Math.min(I, Math.abs(y - H))); var H = y }D.zone = this.zones.length && D.getZone(); !D.graphic && this.group && f && (D.isNew = !0)
} this.closestPointRangePx = I; F(this, 'afterTranslate')
}; a.prototype.getValidPoints = function (a, b, d) {
var c = this.chart; return (a || this.points || []).filter(function (a) {
return b && !c.isInsidePlot(a.plotX, a.plotY,
{ inverted: c.inverted }) ? !1 : !1 !== a.visible && (d || !a.isNull)
})
}; a.prototype.getClipBox = function (a, b) {
var d = this.options; var c = this.chart; var e = c.inverted; var h = this.xAxis; var f = h && this.yAxis; var g = c.options.chart.scrollablePlotArea || {}; a && !1 === d.clip && f ? a = e ? { y: -c.chartWidth + f.len + f.pos, height: c.chartWidth, width: c.chartHeight, x: -c.chartHeight + h.len + h.pos } : { y: -f.pos, height: c.chartHeight, width: c.chartWidth, x: -h.pos } : (a = this.clipBox || c.clipBox, b && (a.width = c.plotSizeX, a.x = (c.scrollablePixelsX || 0) * (g.scrollPositionX || 0))); return b
? { width: a.width, x: a.x } : a
}; a.prototype.getSharedClipKey = function (a) { if (this.sharedClipKey) return this.sharedClipKey; var b = [a && a.duration, a && a.easing, a && a.defer, this.getClipBox(a).height, this.options.xAxis, this.options.yAxis].join(); if (!1 !== this.options.clip || a) this.sharedClipKey = b; return b }; a.prototype.setClip = function (a) {
var b = this.chart; var d = this.options; var c = b.renderer; var e = b.inverted; var h = this.clipBox; var f = this.getClipBox(a); var g = this.getSharedClipKey(a); var k = b.sharedClips[g]; var l = b.sharedClips[g + 'm']; a && (f.width = 0, e &&
(f.x = b.plotHeight + (!1 !== d.clip ? 0 : b.plotTop))); k ? b.hasLoaded || k.attr(f) : (a && (b.sharedClips[g + 'm'] = l = c.clipRect(e ? (b.plotSizeX || 0) + 99 : -99, e ? -b.plotLeft : -b.plotTop, 99, e ? b.chartWidth : b.chartHeight)), b.sharedClips[g] = k = c.clipRect(f), k.count = { length: 0 }); a && !k.count[this.index] && (k.count[this.index] = !0, k.count.length += 1); if (!1 !== d.clip || a) this.group.clip(a || h ? k : b.clipRect), this.markerGroup.clip(l); a || (k.count[this.index] && (delete k.count[this.index], --k.count.length), k.count.length === 0 && (h || (b.sharedClips[g] =
k.destroy()), l && (b.sharedClips[g + 'm'] = l.destroy())))
}; a.prototype.animate = function (a) { var b = this.chart; var d = c(this.options.animation); var e = this.sharedClipKey; if (a) this.setClip(d); else if (e) { a = b.sharedClips[e]; e = b.sharedClips[e + 'm']; var h = this.getClipBox(d, !0); a && a.animate(h, d); e && e.animate({ width: h.width + 99, x: h.x - (b.inverted ? 0 : 99) }, d) } }; a.prototype.afterAnimate = function () { this.setClip(); F(this, 'afterAnimate'); this.finishedAnimating = !0 }; a.prototype.drawPoints = function () {
var a = this.points; var b = this.chart; var d =
this.options.marker; var c = this[this.specialGroup] || this.markerGroup; var e = this.xAxis; var h = K(d.enabled, !e || e.isRadial ? !0 : null, this.closestPointRangePx >= d.enabledThreshold * d.radius); var f; var g; if (!1 !== d.enabled || this._hasPointMarkers) {
for (f = 0; f < a.length; f++) {
var k = a[f]; var l = (g = k.graphic) ? 'animate' : 'attr'; var m = k.marker || {}; var p = !!k.marker; if ((h && typeof m.enabled === 'undefined' || m.enabled) && !k.isNull && !1 !== k.visible) {
var n = K(m.symbol, this.symbol, 'rect'); var q = this.markerAttribs(k, k.selected && 'select'); this.enabledDataSorting &&
(k.startXPos = e.reversed ? -(q.width || 0) : e.width); var t = !1 !== k.isInside; g ? g[t ? 'show' : 'hide'](t).animate(q) : t && ((q.width || 0) > 0 || k.hasImage) && (k.graphic = g = b.renderer.symbol(n, q.x, q.y, q.width, q.height, p ? m : d).add(c), this.enabledDataSorting && b.hasRendered && (g.attr({ x: k.startXPos }), l = 'animate')); g && l === 'animate' && g[t ? 'show' : 'hide'](t).animate(q); if (g && !b.styledMode)g[l](this.pointAttribs(k, k.selected && 'select')); g && g.addClass(k.getClassName(), !0)
} else g && (k.graphic = g.destroy())
}
}
}; a.prototype.markerAttribs =
function (a, b) { var d = this.options; var c = d.marker; var e = a.marker || {}; var h = e.symbol || c.symbol; var f = K(e.radius, c.radius); b && (c = c.states[b], b = e.states && e.states[b], f = K(b && b.radius, c && c.radius, f + (c && c.radiusPlus || 0))); a.hasImage = h && h.indexOf('url') === 0; a.hasImage && (f = 0); a = { x: d.crisp ? Math.floor(a.plotX - f) : a.plotX - f, y: a.plotY - f }; f && (a.width = a.height = 2 * f); return a }; a.prototype.pointAttribs = function (a, b) {
var d = this.options.marker; var c = a && a.options; var e = c && c.marker || {}; var h = c && c.color; var f = a && a.color; var g = a && a.zone && a.zone.color; var k = this.color
a = K(e.lineWidth, d.lineWidth); c = 1; k = h || g || f || k; h = e.fillColor || d.fillColor || k; f = e.lineColor || d.lineColor || k; b = b || 'normal'; d = d.states[b]; b = e.states && e.states[b] || {}; a = K(b.lineWidth, d.lineWidth, a + K(b.lineWidthPlus, d.lineWidthPlus, 0)); h = b.fillColor || d.fillColor || h; f = b.lineColor || d.lineColor || f; c = K(b.opacity, d.opacity, c); return { stroke: f, 'stroke-width': a, fill: h, opacity: c }
}; a.prototype.destroy = function (a) {
var b = this; var d = b.chart; var c = /AppleWebKit\/533/.test(k.navigator.userAgent); var e = b.data || []; var h; var f; var l; var n; F(b, 'destroy')
this.removeEvents(a); (b.axisTypes || []).forEach(function (a) { (n = b[a]) && n.series && (p(n.series, b), n.isDirty = n.forceRedraw = !0) }); b.legendItem && b.chart.legend.destroyItem(b); for (f = e.length; f--;)(l = e[f]) && l.destroy && l.destroy(); b.clips && b.clips.forEach(function (a) { return a.destroy() }); g.clearTimeout(b.animationTimeout); H(b, function (a, b) { a instanceof m && !a.survive && (h = c && b === 'group' ? 'hide' : 'destroy', a[h]()) }); d.hoverSeries === b && (d.hoverSeries = void 0); p(d.series, b); d.orderSeries(); H(b, function (d, c) {
a && c ===
'hcEvents' || delete b[c]
})
}; a.prototype.applyZones = function () {
var a = this; var b = this.chart; var d = b.renderer; var c = this.zones; var e = this.clips || []; var h = this.graph; var f = this.area; var g = Math.max(b.chartWidth, b.chartHeight); var k = this[(this.zoneAxis || 'y') + 'Axis']; var l = b.inverted; var m; var p; var n; var q; var v; var r; var B; var y; var D = !1; if (c.length && (h || f) && k && typeof k.min !== 'undefined') {
var I = k.reversed; var F = k.horiz; h && !this.showLine && h.hide(); f && f.hide(); var u = k.getExtremes(); c.forEach(function (c, A) {
m = I ? F ? b.plotWidth : 0 : F ? 0 : k.toPixels(u.min) || 0; m = t(K(p, m), 0, g); p = t(Math.round(k.toPixels(K(c.value,
u.max), !0) || 0), 0, g); D && (m = p = k.toPixels(u.max)); q = Math.abs(m - p); v = Math.min(m, p); r = Math.max(m, p); k.isXAxis ? (n = { x: l ? r : v, y: 0, width: q, height: g }, F || (n.x = b.plotHeight - n.x)) : (n = { x: 0, y: l ? r : v, width: g, height: q }, F && (n.y = b.plotWidth - n.y)); l && d.isVML && (n = k.isXAxis ? { x: 0, y: I ? v : r, height: n.width, width: b.chartWidth } : { x: n.y - b.plotLeft - b.spacingBox.x, y: 0, width: n.height, height: b.chartHeight }); e[A] ? e[A].animate(n) : e[A] = d.clipRect(n); B = a['zone-area-' + A]; y = a['zone-graph-' + A]; h && y && y.clip(e[A]); f && B && B.clip(e[A]); D = c.value >
u.max; a.resetZones && p === 0 && (p = void 0)
}); this.clips = e
} else a.visible && (h && h.show(!0), f && f.show(!0))
}; a.prototype.invertGroups = function (a) { function b () { ['group', 'markerGroup'].forEach(function (b) { d[b] && (c.renderer.isVML && d[b].attr({ width: d.yAxis.len, height: d.xAxis.len }), d[b].width = d.yAxis.len, d[b].height = d.xAxis.len, d[b].invert(d.isRadialSeries ? !1 : a)) }) } var d = this; var c = d.chart; d.xAxis && (d.eventsToUnbind.push(D(c, 'resize', b)), b(), d.invertGroups = b) }; a.prototype.plotGroup = function (a, d, c, e, h) {
var f = this[a]
var g = !f; c = { visibility: c, zIndex: e || 0.1 }; typeof this.opacity === 'undefined' || this.chart.styledMode || this.state === 'inactive' || (c.opacity = this.opacity); g && (this[a] = f = this.chart.renderer.g().add(h)); f.addClass('highcharts-' + d + ' highcharts-series-' + this.index + ' highcharts-' + this.type + '-series ' + (b(this.colorIndex) ? 'highcharts-color-' + this.colorIndex + ' ' : '') + (this.options.className || '') + (f.hasClass('highcharts-tracker') ? ' highcharts-tracker' : ''), !0); f.attr(c)[g ? 'attr' : 'animate'](this.getPlotBox()); return f
}
a.prototype.getPlotBox = function () { var a = this.chart; var b = this.xAxis; var d = this.yAxis; a.inverted && (b = d, d = this.xAxis); return { translateX: b ? b.left : a.plotLeft, translateY: d ? d.top : a.plotTop, scaleX: 1, scaleY: 1 } }; a.prototype.removeEvents = function (a) { a || la(this); this.eventsToUnbind.length && (this.eventsToUnbind.forEach(function (a) { a() }), this.eventsToUnbind.length = 0) }; a.prototype.render = function () {
var a = this; var b = a.chart; var d = a.options; var e = c(d.animation); var h = a.visible ? 'inherit' : 'hidden'; var f = d.zIndex; var g = a.hasRendered; var k = b.seriesGroup
var l = b.inverted; var m = !a.finishedAnimating && b.renderer.isSVG && e.duration; F(this, 'render'); var p = a.plotGroup('group', 'series', h, f, k); a.markerGroup = a.plotGroup('markerGroup', 'markers', h, f, k); m && a.animate && a.animate(!0); p.inverted = K(a.invertible, a.isCartesian) ? l : !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(l); !1 === d.clip || a.sharedClipKey ||
g || p.clip(b.clipRect); m && a.animate && a.animate(); g || (m && e.defer && (m += e.defer), a.animationTimeout = R(function () { a.afterAnimate() }, m || 0)); a.isDirty = !1; a.hasRendered = !0; F(a, 'afterRender')
}; a.prototype.redraw = function () { var a = this.chart; var b = this.isDirty || this.isDirtyData; var d = this.group; var c = this.xAxis; var e = this.yAxis; d && (a.inverted && d.attr({ width: a.plotWidth, height: a.plotHeight }), d.animate({ translateX: K(c && c.left, a.plotLeft), translateY: K(e && e.top, a.plotTop) })); this.translate(); this.render(); b && delete this.kdTree }
a.prototype.searchPoint = function (a, b) { var d = this.xAxis; var c = this.yAxis; var e = this.chart.inverted; return this.searchKDTree({ clientX: e ? d.len - a.chartY + d.pos : a.chartX - d.pos, plotY: e ? c.len - a.chartX + c.pos : a.chartY - c.pos }, b, a) }; a.prototype.buildKDTree = function (a) {
function b (a, c, e) { var h = a && a.length; if (h) { var f = d.kdAxisArray[c % e]; a.sort(function (a, b) { return a[f] - b[f] }); h = Math.floor(h / 2); return { point: a[h], left: b(a.slice(0, h), c + 1, e), right: b(a.slice(h + 1), c + 1, e) } } } this.buildingKdTree = !0; var d = this; var c = d.options.findNearestPointBy.indexOf('y') > -1
? 2 : 1; delete d.kdTree; R(function () { d.kdTree = b(d.getValidPoints(null, !d.directTouch), c, c); d.buildingKdTree = !1 }, d.options.kdNow || a && a.type === 'touchstart' ? 0 : 1)
}; a.prototype.searchKDTree = function (a, d, c) {
function e (a, d, c, l) {
var m = d.point; var p = h.kdAxisArray[c % l]; var n = m; var q = b(a[f]) && b(m[f]) ? Math.pow(a[f] - m[f], 2) : null; var t = b(a[g]) && b(m[g]) ? Math.pow(a[g] - m[g], 2) : null; t = (q || 0) + (t || 0); m.dist = b(t) ? Math.sqrt(t) : Number.MAX_VALUE; m.distX = b(q) ? Math.sqrt(q) : Number.MAX_VALUE; p = a[p] - m[p]; t = p < 0 ? 'left' : 'right'; q = p < 0 ? 'right' : 'left'
d[t] && (t = e(a, d[t], c + 1, l), n = t[k] < n[k] ? t : m); d[q] && Math.sqrt(p * p) < n[k] && (a = e(a, d[q], c + 1, l), n = a[k] < n[k] ? a : n); return n
} var h = this; var f = this.kdAxisArray[0]; var g = this.kdAxisArray[1]; var k = d ? 'distX' : 'dist'; d = h.options.findNearestPointBy.indexOf('y') > -1 ? 2 : 1; this.kdTree || this.buildingKdTree || this.buildKDTree(c); if (this.kdTree) return e(a, this.kdTree, d, d)
}; a.prototype.pointPlacementToXValue = function () {
var a = this.options; var b = a.pointRange; var d = this.xAxis; a = a.pointPlacement; a === 'between' && (a = d.reversed ? -0.5 : 0.5); return Q(a) ? a * (b ||
d.pointRange) : 0
}; a.prototype.isPointInside = function (a) { return typeof a.plotY !== 'undefined' && typeof a.plotX !== 'undefined' && a.plotY >= 0 && a.plotY <= this.yAxis.len && a.plotX >= 0 && a.plotX <= this.xAxis.len }; a.prototype.drawTracker = function () {
var a = this; var b = a.options; var d = b.trackByArea; var c = [].concat(d ? a.areaPath : a.graphPath); var e = a.chart; var h = e.pointer; var f = e.renderer; var g = e.options.tooltip.snap; var k = a.tracker; var l = function (b) { if (e.hoverSeries !== a)a.onMouseOver() }; var m = 'rgba(192,192,192,' + (q ? 0.0001 : 0.002) + ')'; k ? k.attr({ d: c }) : a.graph && (a.tracker =
f.path(c).attr({ visibility: a.visible ? 'visible' : 'hidden', zIndex: 2 }).addClass(d ? 'highcharts-tracker-area' : 'highcharts-tracker-line').add(a.group), e.styledMode || a.tracker.attr({ 'stroke-linecap': 'round', 'stroke-linejoin': 'round', stroke: m, fill: d ? m : 'none', 'stroke-width': a.graph.strokeWidth() + (d ? 0 : 2 * g) }), [a.tracker, a.markerGroup, a.dataLabelsGroup].forEach(function (a) {
if (a && (a.addClass('highcharts-tracker').on('mouseover', l).on('mouseout', function (a) { h.onTrackerMouseOut(a) }), b.cursor && !e.styledMode && a.css({ cursor: b.cursor }),
v))a.on('touchstart', l)
})); F(this, 'afterDrawTracker')
}; a.prototype.addPoint = function (a, b, d, c, e) {
var h = this.options; var f = this.data; var g = this.chart; var k = this.xAxis; k = k && k.hasNames && k.names; var l = h.data; var m = this.xData; var p; b = K(b, !0); var n = { series: this }; this.pointClass.prototype.applyOptions.apply(n, [a]); var q = n.x; var t = m.length; if (this.requireSorting && q < m[t - 1]) for (p = !0; t && m[t - 1] > q;)t--; this.updateParallelArrays(n, 'splice', t, 0, 0); this.updateParallelArrays(n, t); k && n.name && (k[q] = n.name); l.splice(t, 0, a); p && (this.data.splice(t,
0, null), this.processData()); h.legendType === 'point' && this.generatePoints(); d && (f[0] && f[0].remove ? f[0].remove(!1) : (f.shift(), this.updateParallelArrays(n, 'shift'), l.shift())); !1 !== e && F(this, 'addPoint', { point: n }); this.isDirtyData = this.isDirty = !0; b && g.redraw(c)
}; a.prototype.removePoint = function (a, b, d) {
var c = this; var h = c.data; var f = h[a]; var g = c.points; var k = c.chart; var l = function () {
g && g.length === h.length && g.splice(a, 1); h.splice(a, 1); c.options.data.splice(a, 1); c.updateParallelArrays(f || { series: c }, 'splice', a, 1); f && f.destroy()
c.isDirty = !0; c.isDirtyData = !0; b && k.redraw()
}; e(d, k); b = K(b, !0); f ? f.firePointEvent('remove', null, l) : l()
}; a.prototype.remove = function (a, b, d, c) { function e () { h.destroy(c); f.isDirtyLegend = f.isDirtyBox = !0; f.linkSeries(); K(a, !0) && f.redraw(b) } var h = this; var f = h.chart; !1 !== d ? F(h, 'remove', null, e) : e() }; a.prototype.update = function (a, b) {
a = h(a, this.userOptions); F(this, 'update', { options: a }); var d = this; var c = d.chart; var e = d.userOptions; var f = d.initialType || d.type; var g = c.options.plotOptions; var k = r[f].prototype; var l = d.finishedAnimating && { animation: !1 }
var m = {}; var p; var n = ['eventOptions', 'navigatorSeries', 'baseSeries']; var q = a.type || e.type || c.options.chart.type; var t = !(this.hasDerivedData || q && q !== this.type || typeof a.pointStart !== 'undefined' || typeof a.pointInterval !== 'undefined' || typeof a.relativeXValue !== 'undefined' || d.hasOptionChanged('dataGrouping') || d.hasOptionChanged('pointStart') || d.hasOptionChanged('pointInterval') || d.hasOptionChanged('pointIntervalUnit') || d.hasOptionChanged('keys')); q = q || f; t && (n.push('data', 'isDirtyData', 'points', 'processedXData', 'processedYData',
'xIncrement', 'cropped', '_hasPointMarkers', '_hasPointLabels', 'clips', 'nodes', 'layout', 'mapMap', 'mapData', 'minY', 'maxY', 'minX', 'maxX'), !1 !== a.visible && n.push('area', 'graph'), d.parallelArrays.forEach(function (a) { n.push(a + 'Data') }), a.data && (a.dataSorting && y(d.options.dataSorting, a.dataSorting), this.setData(a.data, !1))); a = M(e, l, { index: typeof e.index === 'undefined' ? d.index : e.index, pointStart: K(g && g.series && g.series.pointStart, e.pointStart, d.xData[0]) }, !t && { data: d.options.data }, a); t && a.data && (a.data = d.options.data)
n = ['group', 'markerGroup', 'dataLabelsGroup', 'transformGroup'].concat(n); n.forEach(function (a) { n[a] = d[a]; delete d[a] }); g = !1; if (r[q]) { if (g = q !== d.type, d.remove(!1, !1, !1, !0), g) if (Object.setPrototypeOf)Object.setPrototypeOf(d, r[q].prototype); else { l = Object.hasOwnProperty.call(d, 'hcEvents') && d.hcEvents; for (p in k)d[p] = void 0; y(d, r[q].prototype); l ? d.hcEvents = l : delete d.hcEvents } } else G(17, !0, c, { missingModuleFor: q }); n.forEach(function (a) { d[a] = n[a] }); d.init(c, a); if (t && this.points) {
var v = d.options; !1 === v.visible
? (m.graphic = 1, m.dataLabel = 1) : d._hasPointLabels || (a = v.marker, k = v.dataLabels, !a || !1 !== a.enabled && (e.marker && e.marker.symbol) === a.symbol || (m.graphic = 1), k && !1 === k.enabled && (m.dataLabel = 1)); this.points.forEach(function (a) { a && a.series && (a.resolveColor(), Object.keys(m).length && a.destroyElements(m), !1 === v.showInLegend && a.legendItem && c.legend.destroyItem(a)) }, this)
}d.initialType = f; c.linkSeries(); g && d.linkedSeries.length && (d.isDirtyData = !0); F(this, 'afterUpdate'); K(b, !0) && c.redraw(t ? void 0 : !1)
}; a.prototype.setName =
function (a) { this.name = this.options.name = this.userOptions.name = a; this.chart.isDirtyLegend = !0 }; a.prototype.hasOptionChanged = function (a) { var b = this.options[a]; var d = this.chart.options.plotOptions; var c = this.userOptions[a]; return c ? b !== c : b !== K(d && d[this.type] && d[this.type][a], d && d.series && d.series[a], b) }; a.prototype.onMouseOver = function () {
var a = this.chart; var b = a.hoverSeries; a.pointer.setHoverChartIndex(); if (b && b !== this)b.onMouseOut(); this.options.events.mouseOver && F(this, 'mouseOver'); this.setState('hover'); a.hoverSeries =
this
}; a.prototype.onMouseOut = function () { var a = this.options; var b = this.chart; var d = b.tooltip; var c = b.hoverPoint; b.hoverSeries = null; if (c)c.onMouseOut(); this && a.events.mouseOut && F(this, 'mouseOut'); !d || this.stickyTracking || d.shared && !this.noSharedTooltip || d.hide(); b.series.forEach(function (a) { a.setState('', !0) }) }; a.prototype.setState = function (a, b) {
var d = this; var c = d.options; var e = d.graph; var h = c.inactiveOtherPoints; var f = c.states; var g = K(f[a || 'normal'] && f[a || 'normal'].animation, d.chart.options.chart.animation); var k = c.lineWidth; var l = 0; var m = c.opacity
a = a || ''; if (d.state !== a && ([d.group, d.markerGroup, d.dataLabelsGroup].forEach(function (b) { b && (d.state && b.removeClass('highcharts-series-' + d.state), a && b.addClass('highcharts-series-' + a)) }), d.state = a, !d.chart.styledMode)) {
if (f[a] && !1 === f[a].enabled) return; a && (k = f[a].lineWidth || k + (f[a].lineWidthPlus || 0), m = K(f[a].opacity, m)); if (e && !e.dashstyle) for (c = { 'stroke-width': k }, e.animate(c, g); d['zone-graph-' + l];)d['zone-graph-' + l].animate(c, g), l += 1; h || [d.group, d.markerGroup, d.dataLabelsGroup, d.labelBySeries].forEach(function (a) {
a &&
a.animate({ opacity: m }, g)
})
}b && h && d.points && d.setAllPointsToState(a || void 0)
}; a.prototype.setAllPointsToState = function (a) { this.points.forEach(function (b) { b.setState && b.setState(a) }) }; a.prototype.setVisible = function (a, b) {
var d = this; var c = d.chart; var e = d.legendItem; var h = c.options.chart.ignoreHiddenSeries; var f = d.visible; var g = (d.visible = a = d.options.visible = d.userOptions.visible = typeof a === 'undefined' ? !f : a) ? 'show' : 'hide'; ['group', 'dataLabelsGroup', 'markerGroup', 'tracker', 'tt'].forEach(function (a) { if (d[a])d[a][g]() }); if (c.hoverSeries ===
d || (c.hoverPoint && c.hoverPoint.series) === d)d.onMouseOut(); e && c.legend.colorizeItem(d, a); d.isDirty = !0; d.options.stacking && c.series.forEach(function (a) { a.options.stacking && a.visible && (a.isDirty = !0) }); d.linkedSeries.forEach(function (b) { b.setVisible(a, !1) }); h && (c.isDirtyBox = !0); F(d, g); !1 !== b && c.redraw()
}; a.prototype.show = function () { this.setVisible(!0) }; a.prototype.hide = function () { this.setVisible(!1) }; a.prototype.select = function (a) {
this.selected = a = this.options.selected = typeof a === 'undefined' ? !this.selected
: a; this.checkbox && (this.checkbox.checked = a); F(this, a ? 'select' : 'unselect')
}; a.prototype.shouldShowTooltip = function (a, b, d) { void 0 === d && (d = {}); d.series = this; d.visiblePlotOnly = !0; return this.chart.isInsidePlot(a, b, d) }; a.defaultOptions = u; return a
}()); y(a.prototype, { axisTypes: ['xAxis', 'yAxis'], coll: 'series', colorCounter: 0, cropShoulder: 1, directTouch: !1, drawLegendSymbol: z.drawLineMarker, isCartesian: !0, kdAxisArray: ['clientX', 'plotY'], parallelArrays: ['x', 'y'], pointClass: J, requireSorting: !0, sorted: !0 }); n.series =
a; ''; ''; return a
}); M(a, 'Extensions/ScrollablePlotArea.js', [a['Core/Animation/AnimationUtilities.js'], a['Core/Axis/Axis.js'], a['Core/Chart/Chart.js'], a['Core/Series/Series.js'], a['Core/Renderer/RendererRegistry.js'], a['Core/Utilities.js']], function (a, w, C, E, z, x) {
var r = a.stop; var u = x.addEvent; var n = x.createElement; var m = x.merge; var g = x.pick; u(C, 'afterSetChartSize', function (a) {
var c = this.options.chart.scrollablePlotArea; var g = c && c.minWidth; c = c && c.minHeight; if (!this.renderer.forExport) {
if (g) {
if (this.scrollablePixelsX = g = Math.max(0,
g - this.chartWidth)) { this.scrollablePlotBox = this.renderer.scrollablePlotBox = m(this.plotBox); this.plotBox.width = this.plotWidth += g; this.inverted ? this.clipBox.height += g : this.clipBox.width += g; var f = { 1: { name: 'right', value: g } } }
} else c && (this.scrollablePixelsY = g = Math.max(0, c - this.chartHeight)) && (this.scrollablePlotBox = this.renderer.scrollablePlotBox = m(this.plotBox), this.plotBox.height = this.plotHeight += g, this.inverted ? this.clipBox.width += g : this.clipBox.height += g, f = { 2: { name: 'bottom', value: g } }); f && !a.skipAxes &&
this.axes.forEach(function (a) { f[a.side] ? a.getPlotLinePath = function () { var c = f[a.side].name; var e = this[c]; this[c] = e - f[a.side].value; var g = w.prototype.getPlotLinePath.apply(this, arguments); this[c] = e; return g } : (a.setAxisSize(), a.setAxisTranslation()) })
}
}); u(C, 'render', function () { this.scrollablePixelsX || this.scrollablePixelsY ? (this.setUpScrolling && this.setUpScrolling(), this.applyFixed()) : this.fixedDiv && this.applyFixed() }); C.prototype.setUpScrolling = function () {
var a = this; var e = {
WebkitOverflowScrolling: 'touch',
overflowX: 'hidden',
overflowY: 'hidden'
}; this.scrollablePixelsX && (e.overflowX = 'auto'); this.scrollablePixelsY && (e.overflowY = 'auto'); this.scrollingParent = n('div', { className: 'highcharts-scrolling-parent' }, { position: 'relative' }, this.renderTo); this.scrollingContainer = n('div', { className: 'highcharts-scrolling' }, e, this.scrollingParent); u(this.scrollingContainer, 'scroll', function () { a.pointer && delete a.pointer.chartPosition }); this.innerContainer = n('div', { className: 'highcharts-inner-container' }, null, this.scrollingContainer)
this.innerContainer.appendChild(this.container); this.setUpScrolling = null
}; C.prototype.moveFixedElements = function () {
var a = this.container; var e = this.fixedRenderer; var g = '.highcharts-contextbutton .highcharts-credits .highcharts-legend .highcharts-legend-checkbox .highcharts-navigator-series .highcharts-navigator-xaxis .highcharts-navigator-yaxis .highcharts-navigator .highcharts-reset-zoom .highcharts-drillup-button .highcharts-scrollbar .highcharts-subtitle .highcharts-title'.split(' '); var f; this.scrollablePixelsX &&
!this.inverted ? f = '.highcharts-yaxis' : this.scrollablePixelsX && this.inverted ? f = '.highcharts-xaxis' : this.scrollablePixelsY && !this.inverted ? f = '.highcharts-xaxis' : this.scrollablePixelsY && this.inverted && (f = '.highcharts-yaxis'); f && g.push(f + ':not(.highcharts-radial-axis)', f + '-labels:not(.highcharts-radial-axis-labels)'); g.forEach(function (c) { [].forEach.call(a.querySelectorAll(c), function (a) { (a.namespaceURI === e.SVG_NS ? e.box : e.box.parentNode).appendChild(a); a.style.pointerEvents = 'auto' }) })
}; C.prototype.applyFixed =
function () {
var a = !this.fixedDiv; var e = this.options.chart; var l = e.scrollablePlotArea; var f = z.getRendererType(); a ? (this.fixedDiv = n('div', { className: 'highcharts-fixed' }, { position: 'absolute', overflow: 'hidden', pointerEvents: 'none', zIndex: (e.style && e.style.zIndex || 0) + 2, top: 0 }, null, !0), this.scrollingContainer && this.scrollingContainer.parentNode.insertBefore(this.fixedDiv, this.scrollingContainer), this.renderTo.style.overflow = 'visible', this.fixedRenderer = e = new f(this.fixedDiv, this.chartWidth, this.chartHeight, this.options.chart.style),
this.scrollableMask = e.path().attr({ fill: this.options.chart.backgroundColor || '#fff', 'fill-opacity': g(l.opacity, 0.85), zIndex: -1 }).addClass('highcharts-scrollable-mask').add(), u(this, 'afterShowResetZoom', this.moveFixedElements), u(this, 'afterDrilldown', this.moveFixedElements), u(this, 'afterLayOutTitles', this.moveFixedElements)) : this.fixedRenderer.setSize(this.chartWidth, this.chartHeight); if (this.scrollableDirty || a) this.scrollableDirty = !1, this.moveFixedElements(); e = this.chartWidth + (this.scrollablePixelsX ||
0); f = this.chartHeight + (this.scrollablePixelsY || 0); r(this.container); this.container.style.width = e + 'px'; this.container.style.height = f + 'px'; this.renderer.boxWrapper.attr({ width: e, height: f, viewBox: [0, 0, e, f].join(' ') }); this.chartBackground.attr({ width: e, height: f }); this.scrollingContainer.style.height = this.chartHeight + 'px'; a && (l.scrollPositionX && (this.scrollingContainer.scrollLeft = this.scrollablePixelsX * l.scrollPositionX), l.scrollPositionY && (this.scrollingContainer.scrollTop = this.scrollablePixelsY * l.scrollPositionY))
f = this.axisOffset; a = this.plotTop - f[0] - 1; l = this.plotLeft - f[3] - 1; e = this.plotTop + this.plotHeight + f[2] + 1; f = this.plotLeft + this.plotWidth + f[1] + 1; var m = this.plotLeft + this.plotWidth - (this.scrollablePixelsX || 0); var q = this.plotTop + this.plotHeight - (this.scrollablePixelsY || 0); a = this.scrollablePixelsX ? [['M', 0, a], ['L', this.plotLeft - 1, a], ['L', this.plotLeft - 1, e], ['L', 0, e], ['Z'], ['M', m, a], ['L', this.chartWidth, a], ['L', this.chartWidth, e], ['L', m, e], ['Z']] : this.scrollablePixelsY ? [['M', l, 0], ['L', l, this.plotTop - 1], ['L', f, this.plotTop -
1], ['L', f, 0], ['Z'], ['M', l, q], ['L', l, this.chartHeight], ['L', f, this.chartHeight], ['L', f, q], ['Z']] : [['M', 0, 0]]; this.redrawTrigger !== 'adjustHeight' && this.scrollableMask.attr({ d: a })
}; u(w, 'afterInit', function () { this.chart.scrollableDirty = !0 }); u(E, 'show', function () { this.chart.scrollableDirty = !0 }); ''
}); M(a, 'Core/Axis/StackingAxis.js', [a['Core/Animation/AnimationUtilities.js'], a['Core/Axis/Axis.js'], a['Core/Utilities.js']], function (a, w, C) {
var r = a.getDeferredAnimation; var z = C.addEvent; var x = C.destroyObjectProperties
var J = C.fireEvent; var u = C.isNumber; var n = C.objectEach; var m; (function (a) {
function c () { var a = this.stacking; if (a) { var c = a.stacks; n(c, function (a, e) { x(a); c[e] = null }); a && a.stackTotalGroup && a.stackTotalGroup.destroy() } } function e () { this.stacking || (this.stacking = new f(this)) } var g = []; a.compose = function (a) { g.indexOf(a) === -1 && (g.push(a), z(a, 'init', e), z(a, 'destroy', c)); return a }; var f = (function () {
function a (a) { this.oldStacks = {}; this.stacks = {}; this.stacksTouched = 0; this.axis = a }a.prototype.buildStacks = function () {
var a = this.axis
var c = a.series; var e = a.options.reversedStacks; var f = c.length; var g; if (!a.isXAxis) { this.usePercentage = !1; for (g = f; g--;) { var l = c[e ? g : f - g - 1]; l.setStackedPoints(); l.setGroupedPoints() } for (g = 0; g < f; g++)c[g].modifyStacks(); J(a, 'afterBuildStacks') }
}; a.prototype.cleanStacks = function () { if (!this.axis.isXAxis) { if (this.oldStacks) var a = this.stacks = this.oldStacks; n(a, function (a) { n(a, function (a) { a.cumulative = a.total }) }) } }; a.prototype.resetStacks = function () {
var a = this; var c = a.stacks; a.axis.isXAxis || n(c, function (c) {
n(c, function (e, f) {
u(e.touched) &&
e.touched < a.stacksTouched ? (e.destroy(), delete c[f]) : (e.total = null, e.cumulative = null)
})
})
}; a.prototype.renderStackTotals = function () { var a = this.axis; var c = a.chart; var e = c.renderer; var f = this.stacks; a = r(c, a.options.stackLabels && a.options.stackLabels.animation || !1); var g = this.stackTotalGroup = this.stackTotalGroup || e.g('stack-labels').attr({ visibility: 'visible', zIndex: 6, opacity: 0 }).add(); g.translate(c.plotLeft, c.plotTop); n(f, function (a) { n(a, function (a) { a.render(g) }) }); g.animate({ opacity: 1 }, a) }; return a
}()); a.Additions =
f
})(m || (m = {})); return m
}); M(a, 'Extensions/Stacking.js', [a['Core/Axis/Axis.js'], a['Core/Chart/Chart.js'], a['Core/FormatUtilities.js'], a['Core/Globals.js'], a['Core/Series/Series.js'], a['Core/Axis/StackingAxis.js'], a['Core/Utilities.js']], function (a, w, C, E, z, x, J) {
var r = C.format; var n = J.correctFloat; var m = J.defined; var g = J.destroyObjectProperties; var c = J.isArray; var e = J.isNumber; var l = J.objectEach; var f = J.pick; var v = (function () {
function a (a, c, e, f, g) {
var k = a.chart.inverted; this.axis = a; this.isNegative = e; this.options = c = c || {}; this.x = f; this.total =
null; this.points = {}; this.hasValidPoints = !1; this.stack = g; this.rightCliff = this.leftCliff = 0; this.alignOptions = { align: c.align || (k ? e ? 'left' : 'right' : 'center'), verticalAlign: c.verticalAlign || (k ? 'middle' : e ? 'bottom' : 'top'), y: c.y, x: c.x }; this.textAlign = c.textAlign || (k ? e ? 'right' : 'left' : 'center')
}a.prototype.destroy = function () { g(this, this.axis) }; a.prototype.render = function (a) {
var c = this.axis.chart; var e = this.options; var g = e.format; g = g ? r(g, this, c) : e.formatter.call(this); this.label ? this.label.attr({ text: g, visibility: 'hidden' })
: (this.label = c.renderer.label(g, null, null, e.shape, null, null, e.useHTML, !1, 'stack-labels'), g = { r: e.borderRadius || 0, text: g, rotation: e.rotation, padding: f(e.padding, 5), visibility: 'hidden' }, c.styledMode || (g.fill = e.backgroundColor, g.stroke = e.borderColor, g['stroke-width'] = e.borderWidth, this.label.css(e.style)), this.label.attr(g), this.label.added || this.label.add(a)); this.label.labelrank = c.plotSizeY
}; a.prototype.setOffset = function (a, c, g, l, n) {
var k = this.axis; var h = k.chart; l = k.translate(k.stacking.usePercentage ? 100
: l || this.total, 0, 0, 0, 1); g = k.translate(g || 0); g = m(l) && Math.abs(l - g); a = f(n, h.xAxis[0].translate(this.x)) + a; k = m(l) && this.getStackBox(h, this, a, l, c, g, k); c = this.label; g = this.isNegative; a = f(this.options.overflow, 'justify') === 'justify'; var d = this.textAlign; c && k && (n = c.getBBox(), l = c.padding, d = d === 'left' ? h.inverted ? -l : l : d === 'right' ? n.width : h.inverted && d === 'center' ? n.width / 2 : h.inverted ? g ? n.width + l : -l : n.width / 2, g = h.inverted ? n.height / 2 : g ? -l : n.height, this.alignOptions.x = f(this.options.x, 0), this.alignOptions.y = f(this.options.y,
0), k.x -= d, k.y -= g, c.align(this.alignOptions, null, k), h.isInsidePlot(c.alignAttr.x + d - this.alignOptions.x, c.alignAttr.y + g - this.alignOptions.y) ? c.show() : (c.alignAttr.y = -9999, a = !1), a && z.prototype.justifyDataLabel.call(this.axis, c, this.alignOptions, c.alignAttr, n, k), c.attr({ x: c.alignAttr.x, y: c.alignAttr.y }), f(!a && this.options.crop, !0) && ((h = e(c.x) && e(c.y) && h.isInsidePlot(c.x - l + c.width, c.y) && h.isInsidePlot(c.x + l, c.y)) || c.hide()))
}; a.prototype.getStackBox = function (a, c, e, f, g, l, h) {
var d = c.axis.reversed; var b = a.inverted
var k = h.height + h.pos - (b ? a.plotLeft : a.plotTop); c = c.isNegative && !d || !c.isNegative && d; return { x: b ? c ? f - h.right : f - l + h.pos - a.plotLeft : e + a.xAxis[0].transB - a.plotLeft, y: b ? h.height - e - g : c ? k - f - l : k - f, width: b ? l : g, height: b ? g : l }
}; return a
}()); w.prototype.getStacks = function () {
var a = this; var c = a.inverted; a.yAxis.forEach(function (a) { a.stacking && a.stacking.stacks && a.hasVisibleSeries && (a.stacking.oldStacks = a.stacking.stacks) }); a.series.forEach(function (e) {
var g = e.xAxis && e.xAxis.options || {}; !e.options.stacking || !0 !== e.visible &&
!1 !== a.options.chart.ignoreHiddenSeries || (e.stackKey = [e.type, f(e.options.stack, ''), c ? g.top : g.left, c ? g.height : g.width].join())
})
}; x.compose(a); z.prototype.setGroupedPoints = function () { var a = this.yAxis.stacking; this.options.centerInCategory && (this.is('column') || this.is('columnrange')) && !this.options.stacking && this.chart.series.length > 1 ? z.prototype.setStackedPoints.call(this, 'group') : a && l(a.stacks, function (c, e) { e.slice(-5) === 'group' && (l(c, function (a) { return a.destroy() }), delete a.stacks[e]) }) }; z.prototype.setStackedPoints =
function (a) {
var e = a || this.options.stacking; if (e && (!0 === this.visible || !1 === this.chart.options.chart.ignoreHiddenSeries)) {
var g = this.processedXData; var l = this.processedYData; var q = []; var r = l.length; var t = this.options; var h = t.threshold; var d = f(t.startFromThreshold && h, 0); t = t.stack; a = a ? this.type + ',' + e : this.stackKey; var b = '-' + a; var p = this.negStacks; var u = this.yAxis; var y = u.stacking.stacks; var x = u.stacking.oldStacks; var F; var w; u.stacking.stacksTouched += 1; for (w = 0; w < r; w++) {
var z = g[w]; var C = l[w]; var E = this.getStackIndicator(E, z, this.index); var J = E.key
var H = (F = p && C < (d ? 0 : h)) ? b : a; y[H] || (y[H] = {}); y[H][z] || (x[H] && x[H][z] ? (y[H][z] = x[H][z], y[H][z].total = null) : y[H][z] = new v(u, u.options.stackLabels, F, z, t)); H = y[H][z]; C !== null ? (H.points[J] = H.points[this.index] = [f(H.cumulative, d)], m(H.cumulative) || (H.base = J), H.touched = u.stacking.stacksTouched, E.index > 0 && !1 === this.singleStacks && (H.points[J][0] = H.points[this.index + ',' + z + ',0'][0])) : H.points[J] = H.points[this.index] = null; e === 'percent' ? (F = F ? a : b, p && y[F] && y[F][z] ? (F = y[F][z], H.total = F.total = Math.max(F.total, H.total) +
Math.abs(C) || 0) : H.total = n(H.total + (Math.abs(C) || 0))) : e === 'group' ? (c(C) && (C = C[0]), C !== null && (H.total = (H.total || 0) + 1)) : H.total = n(H.total + (C || 0)); H.cumulative = e === 'group' ? (H.total || 1) - 1 : f(H.cumulative, d) + (C || 0); C !== null && (H.points[J].push(H.cumulative), q[w] = H.cumulative, H.hasValidPoints = !0)
}e === 'percent' && (u.stacking.usePercentage = !0); e !== 'group' && (this.stackedYData = q); u.stacking.oldStacks = {}
}
}; z.prototype.modifyStacks = function () {
var a = this; var c = a.stackKey; var e = a.yAxis.stacking.stacks; var f = a.processedXData; var g
var l = a.options.stacking; a[l + 'Stacker'] && [c, '-' + c].forEach(function (c) { for (var h = f.length, d, b; h--;) if (d = f[h], g = a.getStackIndicator(g, d, a.index, c), b = (d = e[c] && e[c][d]) && d.points[g.key])a[l + 'Stacker'](b, d, h) })
}; z.prototype.percentStacker = function (a, c, e) { c = c.total ? 100 / c.total : 0; a[0] = n(a[0] * c); a[1] = n(a[1] * c); this.stackedYData[e] = a[1] }; z.prototype.getStackIndicator = function (a, c, e, f) { !m(a) || a.x !== c || f && a.key !== f ? a = { x: c, index: 0, key: f } : a.index++; a.key = [e, c, a.index].join(); return a }; E.StackItem = v; ''; return E.StackItem
})
M(a, 'Series/Line/LineSeries.js', [a['Core/Color/Palette.js'], a['Core/Series/Series.js'], a['Core/Series/SeriesRegistry.js'], a['Core/Utilities.js']], function (a, w, C, E) {
var r = this && this.__extends || (function () {
var a = function (n, m) { a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, c) { a.__proto__ = c } || function (a, c) { for (var e in c)c.hasOwnProperty(e) && (a[e] = c[e]) }; return a(n, m) }; return function (n, m) {
function g () { this.constructor = n }a(n, m); n.prototype = m === null ? Object.create(m) : (g.prototype = m.prototype,
new g())
}
}()); var x = E.defined; var J = E.merge; E = (function (u) {
function n () { var a = u !== null && u.apply(this, arguments) || this; a.data = void 0; a.options = void 0; a.points = void 0; return a }r(n, u); n.prototype.drawGraph = function () {
var m = this; var g = this.options; var c = (this.gappedPath || this.getGraphPath).call(this); var e = this.chart.styledMode; var l = [['graph', 'highcharts-graph']]; e || l[0].push(g.lineColor || this.color || a.neutralColor20, g.dashStyle); l = m.getZonesGraphs(l); l.forEach(function (a, l) {
var f = a[0]; var k = m[f]; var n = k ? 'animate' : 'attr'; k ? (k.endX = m.preventGraphAnimation
? null : c.xMap, k.animate({ d: c })) : c.length && (m[f] = k = m.chart.renderer.path(c).addClass(a[1]).attr({ zIndex: 1 }).add(m.group)); k && !e && (f = { stroke: a[2], 'stroke-width': g.lineWidth, fill: m.fillGraph && m.color || 'none' }, a[3] ? f.dashstyle = a[3] : g.linecap !== 'square' && (f['stroke-linecap'] = f['stroke-linejoin'] = 'round'), k[n](f).shadow(l < 2 && g.shadow)); k && (k.startX = c.xMap, k.isArea = c.isArea)
})
}; n.prototype.getGraphPath = function (a, g, c) {
var e = this; var l = e.options; var f = []; var m = []; var n; var k = l.step; a = a || e.points; var r = a.reversed; r && a.reverse();
(k = { right: 1, center: 2 }[k] || k && 3) && r && (k = 4 - k); a = this.getValidPoints(a, !1, !(l.connectNulls && !g && !c)); a.forEach(function (q, r) {
var v = q.plotX; var t = q.plotY; var h = a[r - 1]; (q.leftCliff || h && h.rightCliff) && !c && (n = !0); q.isNull && !x(g) && r > 0 ? n = !l.connectNulls : q.isNull && !g ? n = !0 : (r === 0 || n ? r = [['M', q.plotX, q.plotY]] : e.getPointSpline ? r = [e.getPointSpline(a, q, r)] : k ? (r = k === 1 ? [['L', h.plotX, t]] : k === 2 ? [['L', (h.plotX + v) / 2, h.plotY], ['L', (h.plotX + v) / 2, t]] : [['L', v, h.plotY]], r.push(['L', v, t])) : r = [['L', v, t]], m.push(q.x), k && (m.push(q.x),
k === 2 && m.push(q.x)), f.push.apply(f, r), n = !1)
}); f.xMap = m; return e.graphPath = f
}; n.prototype.getZonesGraphs = function (a) { this.zones.forEach(function (g, c) { c = ['zone-graph-' + c, 'highcharts-graph highcharts-zone-graph-' + c + ' ' + (g.className || '')]; this.chart.styledMode || c.push(g.color || this.color, g.dashStyle || this.options.dashStyle); a.push(c) }, this); return a }; n.defaultOptions = J(w.defaultOptions, {}); return n
}(w)); C.registerSeriesType('line', E); ''; return E
}); M(a, 'Series/Area/AreaSeries.js', [a['Core/Color/Color.js'],
a['Core/Legend/LegendSymbol.js'], a['Core/Series/SeriesRegistry.js'], a['Core/Utilities.js']], function (a, w, C, E) {
var r = this && this.__extends || (function () { var a = function (c, e) { a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, c) { a.__proto__ = c } || function (a, c) { for (var e in c)c.hasOwnProperty(e) && (a[e] = c[e]) }; return a(c, e) }; return function (c, e) { function g () { this.constructor = c }a(c, e); c.prototype = e === null ? Object.create(e) : (g.prototype = e.prototype, new g()) } }()); var x = a.parse; var J = C.seriesTypes.line; a =
E.extend; var u = E.merge; var n = E.objectEach; var m = E.pick; E = (function (a) {
function c () { var c = a !== null && a.apply(this, arguments) || this; c.data = void 0; c.options = void 0; c.points = void 0; return c }r(c, a); c.prototype.drawGraph = function () {
this.areaPath = []; a.prototype.drawGraph.apply(this); var c = this; var g = this.areaPath; var f = this.options; var n = [['area', 'highcharts-area', this.color, f.fillColor]]; this.zones.forEach(function (a, e) {
n.push(['zone-area-' + e, 'highcharts-area highcharts-zone-area-' + e + ' ' + a.className, a.color || c.color, a.fillColor ||
f.fillColor])
}); n.forEach(function (a) { var e = a[0]; var l = c[e]; var n = l ? 'animate' : 'attr'; var q = {}; l ? (l.endX = c.preventGraphAnimation ? null : g.xMap, l.animate({ d: g })) : (q.zIndex = 0, l = c[e] = c.chart.renderer.path(g).addClass(a[1]).add(c.group), l.isArea = !0); c.chart.styledMode || (q.fill = m(a[3], x(a[2]).setOpacity(m(f.fillOpacity, 0.75)).get())); l[n](q); l.startX = g.xMap; l.shiftUnit = f.step ? 2 : 1 })
}; c.prototype.getGraphPath = function (a) {
var c = J.prototype.getGraphPath; var e = this.options; var g = e.stacking; var n = this.yAxis; var k; var r = []; var u = []; var B = this.index; var x =
n.stacking.stacks[this.stackKey]; var t = e.threshold; var h = Math.round(n.getThreshold(e.threshold)); e = m(e.connectNulls, g === 'percent'); var d = function (b, d, c) { var e = a[b]; b = g && x[e.x].points[B]; var f = e[c + 'Null'] || 0; c = e[c + 'Cliff'] || 0; e = !0; if (c || f) { var k = (f ? b[0] : b[1]) + c; var l = b[0] + c; e = !!f } else !g && a[d] && a[d].isNull && (k = l = t); typeof k !== 'undefined' && (u.push({ plotX: p, plotY: k === null ? h : n.getThreshold(k), isNull: e, isCliff: !0 }), r.push({ plotX: p, plotY: l === null ? h : n.getThreshold(l), doCurve: !1 })) }; a = a || this.points; g && (a = this.getStackPoints(a))
for (k = 0; k < a.length; k++) { g || (a[k].leftCliff = a[k].rightCliff = a[k].leftNull = a[k].rightNull = void 0); var b = a[k].isNull; var p = m(a[k].rectPlotX, a[k].plotX); var G = g ? m(a[k].yBottom, h) : h; if (!b || e)e || d(k, k - 1, 'left'), b && !g && e || (u.push(a[k]), r.push({ x: k, plotX: p, plotY: G })), e || d(k, k + 1, 'right') }k = c.call(this, u, !0, !0); r.reversed = !0; b = c.call(this, r, !0, !0); (G = b[0]) && G[0] === 'M' && (b[0] = ['L', G[1], G[2]]); b = k.concat(b); b.length && b.push(['Z']); c = c.call(this, u, !1, e); b.xMap = k.xMap; this.areaPath = b; return c
}; c.prototype.getStackPoints =
function (a) {
var c = this; var e = []; var g = []; var r = this.xAxis; var k = this.yAxis; var u = k.stacking.stacks[this.stackKey]; var x = {}; var B = k.series; var w = B.length; var t = k.options.reversedStacks ? 1 : -1; var h = B.indexOf(c); a = a || this.points; if (this.options.stacking) {
for (var d = 0; d < a.length; d++)a[d].leftNull = a[d].rightNull = void 0, x[a[d].x] = a[d]; n(u, function (a, b) { a.total !== null && g.push(b) }); g.sort(function (a, b) { return a - b }); var b = B.map(function (a) { return a.visible }); g.forEach(function (a, d) {
var f = 0; var l; var n; if (x[a] && !x[a].isNull) {
e.push(x[a]), [-1, 1].forEach(function (e) {
var f =
e === 1 ? 'rightNull' : 'leftNull'; var k = 0; var m = u[g[d + e]]; if (m) for (var p = h; p >= 0 && p < w;) { var r = B[p].index; l = m.points[r]; l || (r === c.index ? x[a][f] = !0 : b[p] && (n = u[a].points[r]) && (k -= n[1] - n[0])); p += t }x[a][e === 1 ? 'rightCliff' : 'leftCliff'] = k
})
} else { for (var p = h; p >= 0 && p < w;) { if (l = u[a].points[B[p].index]) { f = l[1]; break }p += t }f = m(f, 0); f = k.translate(f, 0, 1, 0, 1); e.push({ isNull: !0, plotX: r.translate(a, 0, 0, 0, 1), x: a, plotY: f, yBottom: f }) }
})
} return e
}; c.defaultOptions = u(J.defaultOptions, { threshold: 0 }); return c
}(J)); a(E.prototype, {
singleStacks: !1,
drawLegendSymbol: w.drawRectangle
}); C.registerSeriesType('area', E); ''; return E
}); M(a, 'Series/Spline/SplineSeries.js', [a['Core/Series/SeriesRegistry.js'], a['Core/Utilities.js']], function (a, w) {
var r = this && this.__extends || (function () {
var a = function (r, n) { a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, g) { a.__proto__ = g } || function (a, g) { for (var c in g)g.hasOwnProperty(c) && (a[c] = g[c]) }; return a(r, n) }; return function (r, n) {
function m () { this.constructor = r }a(r, n); r.prototype = n === null ? Object.create(n)
: (m.prototype = n.prototype, new m())
}
}()); var E = a.seriesTypes.line; var z = w.merge; var x = w.pick; w = (function (a) {
function u () { var n = a !== null && a.apply(this, arguments) || this; n.data = void 0; n.options = void 0; n.points = void 0; return n }r(u, a); u.prototype.getPointSpline = function (a, m, g) {
var c = m.plotX || 0; var e = m.plotY || 0; var l = a[g - 1]; g = a[g + 1]; if (l && !l.isNull && !1 !== l.doCurve && !m.isCliff && g && !g.isNull && !1 !== g.doCurve && !m.isCliff) {
a = l.plotY || 0; var f = g.plotX || 0; g = g.plotY || 0; var n = 0; var r = (1.5 * c + (l.plotX || 0)) / 2.5; var k = (1.5 * e + a) / 2.5; f = (1.5 * c +
f) / 2.5; var u = (1.5 * e + g) / 2.5; f !== r && (n = (u - k) * (f - c) / (f - r) + e - u); k += n; u += n; k > a && k > e ? (k = Math.max(a, e), u = 2 * e - k) : k < a && k < e && (k = Math.min(a, e), u = 2 * e - k); u > g && u > e ? (u = Math.max(g, e), k = 2 * e - u) : u < g && u < e && (u = Math.min(g, e), k = 2 * e - u); m.rightContX = f; m.rightContY = u
}m = ['C', x(l.rightContX, l.plotX, 0), x(l.rightContY, l.plotY, 0), x(r, c, 0), x(k, e, 0), c, e]; l.rightContX = l.rightContY = void 0; return m
}; u.defaultOptions = z(E.defaultOptions); return u
}(E)); a.registerSeriesType('spline', w); ''; return w
}); M(a, 'Series/AreaSpline/AreaSplineSeries.js',
[a['Series/Area/AreaSeries.js'], a['Series/Spline/SplineSeries.js'], a['Core/Legend/LegendSymbol.js'], a['Core/Series/SeriesRegistry.js'], a['Core/Utilities.js']], function (a, w, C, E, z) {
var r = this && this.__extends || (function () {
var a = function (g, c) { a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, c) { a.__proto__ = c } || function (a, c) { for (var e in c)c.hasOwnProperty(e) && (a[e] = c[e]) }; return a(g, c) }; return function (g, c) {
function e () { this.constructor = g }a(g, c); g.prototype = c === null ? Object.create(c)
: (e.prototype = c.prototype, new e())
}
}()); var J = a.prototype; var u = z.extend; var n = z.merge; z = (function (m) { function g () { var a = m !== null && m.apply(this, arguments) || this; a.data = void 0; a.points = void 0; a.options = void 0; return a }r(g, m); g.defaultOptions = n(w.defaultOptions, a.defaultOptions); return g }(w)); u(z.prototype, { getGraphPath: J.getGraphPath, getStackPoints: J.getStackPoints, drawGraph: J.drawGraph, drawLegendSymbol: C.drawRectangle }); E.registerSeriesType('areaspline', z); ''; return z
}); M(a, 'Series/Column/ColumnSeries.js', [a['Core/Animation/AnimationUtilities.js'],
a['Core/Color/Color.js'], a['Core/Globals.js'], a['Core/Legend/LegendSymbol.js'], a['Core/Color/Palette.js'], a['Core/Series/Series.js'], a['Core/Series/SeriesRegistry.js'], a['Core/Utilities.js']], function (a, w, C, E, z, x, J, u) {
var n = this && this.__extends || (function () {
var a = function (c, d) { a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, d) { a.__proto__ = d } || function (a, d) { for (var b in d)d.hasOwnProperty(b) && (a[b] = d[b]) }; return a(c, d) }; return function (c, d) {
function b () { this.constructor = c }a(c, d)
c.prototype = d === null ? Object.create(d) : (b.prototype = d.prototype, new b())
}
}()); var m = a.animObject; var g = w.parse; var c = C.hasTouch; a = C.noop; var e = u.clamp; var l = u.css; var f = u.defined; var r = u.extend; var q = u.fireEvent; var k = u.isArray; var I = u.isNumber; var D = u.merge; var B = u.pick; var O = u.objectEach; u = (function (a) {
function h () { var d = a !== null && a.apply(this, arguments) || this; d.borderWidth = void 0; d.data = void 0; d.group = void 0; d.options = void 0; d.points = void 0; return d }n(h, a); h.prototype.animate = function (a) {
var b = this; var d = this.yAxis; var c = b.options; var h = this.chart.inverted
var f = {}; var g = h ? 'translateX' : 'translateY'; if (a)f.scaleY = 0.001, a = e(d.toPixels(c.threshold), d.pos, d.pos + d.len), h ? f.translateX = a - d.len : f.translateY = a, b.clipBox && b.setClip(), b.group.attr(f); else { var k = Number(b.group.attr(g)); b.group.animate({ scaleY: 1 }, r(m(b.options.animation), { step: function (a, c) { b.group && (f[g] = k + c.pos * (d.pos - k), b.group.attr(f)) } })) }
}; h.prototype.init = function (d, b) {
a.prototype.init.apply(this, arguments); var c = this; d = c.chart; d.hasRendered && d.series.forEach(function (a) {
a.type === c.type && (a.isDirty =
!0)
})
}; h.prototype.getColumnMetrics = function () {
var a = this; var b = a.options; var c = a.xAxis; var e = a.yAxis; var h = c.options.reversedStacks; h = c.reversed && !h || !c.reversed && h; var f = {}; var g; var k = 0; !1 === b.grouping ? k = 1 : a.chart.series.forEach(function (b) { var d = b.yAxis; var c = b.options; if (b.type === a.type && (b.visible || !a.chart.options.chart.ignoreHiddenSeries) && e.len === d.len && e.pos === d.pos) { if (c.stacking && c.stacking !== 'group') { g = b.stackKey; typeof f[g] === 'undefined' && (f[g] = k++); var h = f[g] } else !1 !== c.grouping && (h = k++); b.columnIndex = h } }); var l =
Math.min(Math.abs(c.transA) * (c.ordinal && c.ordinal.slope || b.pointRange || c.closestPointRange || c.tickInterval || 1), c.len); var m = l * b.groupPadding; var n = (l - 2 * m) / (k || 1); b = Math.min(b.maxPointWidth || c.len, B(b.pointWidth, n * (1 - 2 * b.pointPadding))); a.columnMetrics = { width: b, offset: (n - b) / 2 + (m + ((a.columnIndex || 0) + (h ? 1 : 0)) * n - l / 2) * (h ? -1 : 1), paddedWidth: n, columnCount: k }; return a.columnMetrics
}; h.prototype.crispCol = function (a, b, c, e) {
var d = this.chart; var h = this.borderWidth; var f = -(h % 2 ? 0.5 : 0); h = h % 2 ? 0.5 : 1; d.inverted && d.renderer.isVML && (h +=
1); this.options.crisp && (c = Math.round(a + c) + f, a = Math.round(a) + f, c -= a); e = Math.round(b + e) + h; f = Math.abs(b) <= 0.5 && e > 0.5; b = Math.round(b) + h; e -= b; f && e && (--b, e += 1); return { x: a, y: b, width: c, height: e }
}; h.prototype.adjustForMissingColumns = function (a, b, c, e) {
var d = this; var h = this.options.stacking; if (!c.isNull && e.columnCount > 1) {
var f = 0; var g = 0; O(this.yAxis.stacking && this.yAxis.stacking.stacks, function (a) {
if (typeof c.x === 'number' && (a = a[c.x.toString()])) {
var b = a.points[d.index]; var e = a.total; h ? (b && (f = g), a.hasValidPoints && g++) : k(b) &&
(f = b[1], g = e || 0)
}
}); a = (c.plotX || 0) + ((g - 1) * e.paddedWidth + b) / 2 - b - f * e.paddedWidth
} return a
}; h.prototype.translate = function () {
var a = this; var b = a.chart; var c = a.options; var h = a.dense = a.closestPointRange * a.xAxis.transA < 2; h = a.borderWidth = B(c.borderWidth, h ? 0 : 1); var g = a.xAxis; var k = a.yAxis; var l = c.threshold; var m = a.translatedThreshold = k.getThreshold(l); var n = B(c.minPointLength, 5); var r = a.getColumnMetrics(); var t = r.width; var q = a.pointXOffset = r.offset; var v = a.dataMin; var u = a.dataMax; var w = a.barW = Math.max(t, 1 + 2 * h); b.inverted && (m -= 0.5); c.pointPadding && (w = Math.ceil(w))
x.prototype.translate.apply(a); a.points.forEach(function (d) {
var h = B(d.yBottom, m); var p = 999 + Math.abs(h); var y = d.plotX || 0; p = e(d.plotY, -p, k.len + p); var x = Math.min(p, h); var F = Math.max(p, h) - x; var D = t; var G = y + q; var z = w; n && Math.abs(F) < n && (F = n, y = !k.reversed && !d.negative || k.reversed && d.negative, I(l) && I(u) && d.y === l && u <= l && (k.min || 0) < l && (v !== u || (k.max || 0) <= l) && (y = !y), x = Math.abs(x - m) > n ? h - n : m - (y ? n : 0)); f(d.options.pointWidth) && (D = z = Math.ceil(d.options.pointWidth), G -= Math.round((D - t) / 2)); c.centerInCategory && (G = a.adjustForMissingColumns(G,
D, d, r)); d.barX = G; d.pointWidth = D; d.tooltipPos = b.inverted ? [e(k.len + k.pos - b.plotLeft - p, k.pos - b.plotLeft, k.len + k.pos - b.plotLeft), g.len + g.pos - b.plotTop - G - z / 2, F] : [g.left - b.plotLeft + G + z / 2, e(p + k.pos - b.plotTop, k.pos - b.plotTop, k.len + k.pos - b.plotTop), F]; d.shapeType = a.pointClass.prototype.shapeType || 'rect'; d.shapeArgs = a.crispCol.apply(a, d.isNull ? [G, m, z, 0] : [G, x, z, F])
})
}; h.prototype.drawGraph = function () { this.group[this.dense ? 'addClass' : 'removeClass']('highcharts-dense-data') }; h.prototype.pointAttribs = function (a,
b) {
var d = this.options; var c = this.pointAttrToOptions || {}; var e = c.stroke || 'borderColor'; var h = c['stroke-width'] || 'borderWidth'; var f = a && a.color || this.color; var k = a && a[e] || d[e] || f; c = a && a.options.dashStyle || d.dashStyle; var l = a && a[h] || d[h] || this[h] || 0; var m = B(a && a.opacity, d.opacity, 1); if (a && this.zones.length) { var n = a.getZone(); f = a.options.color || n && (n.color || a.nonZonedColor) || this.color; n && (k = n.borderColor || k, c = n.dashStyle || c, l = n.borderWidth || l) }b && a && (a = D(d.states[b], a.options.states && a.options.states[b] || {}), b = a.brightness,
f = a.color || typeof b !== 'undefined' && g(f).brighten(a.brightness).get() || f, k = a[e] || k, l = a[h] || l, c = a.dashStyle || c, m = B(a.opacity, m)); e = { fill: f, stroke: k, 'stroke-width': l, opacity: m }; c && (e.dashstyle = c); return e
}; h.prototype.drawPoints = function () {
var a = this; var b = this.chart; var c = a.options; var e = b.renderer; var h = c.animationLimit || 250; var f; a.points.forEach(function (d) {
var g = d.graphic; var k = !!g; var l = g && b.pointCount < h ? 'animate' : 'attr'; if (I(d.plotY) && d.y !== null) {
f = d.shapeArgs; g && d.hasNewShapeType() && (g = g.destroy()); a.enabledDataSorting &&
(d.startXPos = a.xAxis.reversed ? -(f ? f.width || 0 : 0) : a.xAxis.width); g || (d.graphic = g = e[d.shapeType](f).add(d.group || a.group)) && a.enabledDataSorting && b.hasRendered && b.pointCount < h && (g.attr({ x: d.startXPos }), k = !0, l = 'animate'); if (g && k)g[l](D(f)); if (c.borderRadius)g[l]({ r: c.borderRadius }); b.styledMode || g[l](a.pointAttribs(d, d.selected && 'select')).shadow(!1 !== d.allowShadow && c.shadow, null, c.stacking && !c.borderRadius); g && (g.addClass(d.getClassName(), !0), g.attr({ visibility: d.visible ? 'inherit' : 'hidden' }))
} else {
g &&
(d.graphic = g.destroy())
}
})
}; h.prototype.drawTracker = function () {
var a = this; var b = a.chart; var e = b.pointer; var h = function (a) { var b = e.getPointFromEvent(a); typeof b !== 'undefined' && (e.isDirectTouch = !0, b.onMouseOver(a)) }; var f; a.points.forEach(function (a) { f = k(a.dataLabels) ? a.dataLabels : a.dataLabel ? [a.dataLabel] : []; a.graphic && (a.graphic.element.point = a); f.forEach(function (b) { b.div ? b.div.point = a : b.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) { e.onTrackerMouseOut(a) }); if (c)a[d].on('touchstart', h); !b.styledMode && a.options.cursor && a[d].css(l).css({ cursor: a.options.cursor })
}
}), a._hasTracking = !0); q(this, 'afterDrawTracker')
}; h.prototype.remove = function () { var a = this; var b = a.chart; b.hasRendered && b.series.forEach(function (b) { b.type === a.type && (b.isDirty = !0) }); x.prototype.remove.apply(a, arguments) }; h.defaultOptions = D(x.defaultOptions, {
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: z.neutralColor20, borderColor: z.neutralColor100 } },
dataLabels: { align: void 0, verticalAlign: void 0, y: void 0 },
startFromThreshold: !0,
stickyTracking: !1,
tooltip: { distance: 6 },
threshold: 0,
borderColor: z.backgroundColor
}); return h
}(x)); r(u.prototype, { cropShoulder: 0, directTouch: !0, drawLegendSymbol: E.drawRectangle, getSymbol: a, negStacks: !0, trackerGroups: ['group', 'dataLabelsGroup'] }); J.registerSeriesType('column', u); ''; ''; return u
})
M(a, 'Core/Series/DataLabel.js', [a['Core/Animation/AnimationUtilities.js'], a['Core/FormatUtilities.js'], a['Core/Color/Palette.js'], a['Core/Utilities.js']], function (a, w, C, E) {
var r = a.getDeferredAnimation; var x = w.format; var J = E.defined; var u = E.extend; var n = E.fireEvent; var m = E.isArray; var g = E.merge; var c = E.objectEach; var e = E.pick; var l = E.splat; var f; (function (a) {
function f (a, c, b, f, g) {
var d = this; var h = this.chart; var k = this.isCartesian && h.inverted; var l = this.enabledDataSorting; var m = e(a.dlBox && a.dlBox.centerX, a.plotX, -9999); var n = e(a.plotY, -9999); var p = c.getBBox(); var r =
b.rotation; var t = b.align; var q = h.isInsidePlot(m, Math.round(n), { inverted: k, paneCoordinates: !0, series: d }); var v = function (b) { l && d.xAxis && !B && d.setDataLabelStartPos(a, c, g, q, b) }; var B = e(b.overflow, l ? 'none' : 'justify') === 'justify'; var x = this.visible && !1 !== a.visible && (a.series.forceDL || l && !B || q || e(b.inside, !!this.options.stacking) && f && h.isInsidePlot(m, k ? f.x + 1 : f.y + f.height - 1, { inverted: k, paneCoordinates: !0, series: d })); if (x) {
var w = h.renderer.fontMetrics(h.styledMode ? void 0 : b.style.fontSize, c).b; f = u({
x: k ? this.yAxis.len - n : m,
y: Math.round(k
? this.xAxis.len - m : n),
width: 0,
height: 0
}, f); u(b, { width: p.width, height: p.height }); r ? (B = !1, m = h.renderer.rotCorr(w, r), m = { x: f.x + (b.x || 0) + f.width / 2 + m.x, y: f.y + (b.y || 0) + { top: 0, middle: 0.5, bottom: 1 }[b.verticalAlign] * f.height }, v(m), c[g ? 'attr' : 'animate'](m).attr({ align: t }), v = (r + 720) % 360, v = v > 180 && v < 360, t === 'left' ? m.y -= v ? p.height : 0 : t === 'center' ? (m.x -= p.width / 2, m.y -= p.height / 2) : t === 'right' && (m.x -= p.width, m.y -= v ? 0 : p.height), c.placed = !0, c.alignAttr = m) : (v(f), c.align(b, void 0, f), m = c.alignAttr); B && f.height >= 0 ? this.justifyDataLabel(c,
b, m, p, f, g) : e(b.crop, !0) && (x = h.isInsidePlot(m.x, m.y, { paneCoordinates: !0, series: d }) && h.isInsidePlot(m.x + p.width, m.y + p.height, { paneCoordinates: !0, series: d })); if (b.shape && !r)c[g ? 'attr' : 'animate']({ anchorX: k ? h.plotWidth - a.plotY : a.plotX, anchorY: k ? h.plotHeight - a.plotX : a.plotY })
}g && l && (c.placed = !1); x || l && !B || (c.hide(!0), c.placed = !1)
} function k (a, c) {
var b = c.filter; return b ? (c = b.operator, a = a[b.property], b = b.value, c === '>' && a > b || c === '<' && a < b || c === '>=' && a >= b || c === '<=' && a <= b || c === '==' && a == b || c === '===' && a === b ? !0
: !1) : !0
} function v () {
var a = this; var d = a.chart; var b = a.options; var f = a.points; var g = a.hasRendered || 0; var t = d.renderer; var q = b.dataLabels; var v; var u = q.animation; u = q.defer ? r(d, u, a) : { defer: 0, duration: 0 }; q = B(B(d.options.plotOptions && d.options.plotOptions.series && d.options.plotOptions.series.dataLabels, d.options.plotOptions && d.options.plotOptions[a.type] && d.options.plotOptions[a.type].dataLabels), q); n(this, 'drawDataLabels'); if (m(q) || q.enabled || a._hasPointLabels) {
var w = a.plotGroup('dataLabelsGroup', 'data-labels', g ? 'inherit' : 'hidden', q.zIndex ||
6); w.attr({ opacity: +g }); !g && (g = a.dataLabelsGroup) && (a.visible && w.show(!0), g[b.animation ? 'animate' : 'attr']({ opacity: 1 }, u)); f.forEach(function (f) {
v = l(B(q, f.dlOptions || f.options && f.options.dataLabels)); v.forEach(function (h, g) {
var l = h.enabled && (!f.isNull || f.dataLabelOnNull) && k(f, h); var m = f.connectors ? f.connectors[g] : f.connector; var n = f.dataLabels ? f.dataLabels[g] : f.dataLabel; var p = e(h.distance, f.labelDistance); var r = !n; if (l) {
var q = f.getLabelConfig(); var v = e(h[f.formatPrefix + 'Format'], h.format); q = J(v) ? x(v, q, d) : (h[f.formatPrefix +
'Formatter'] || h.formatter).call(q, h); v = h.style; var u = h.rotation; d.styledMode || (v.color = e(h.color, v.color, a.color, C.neutralColor100), v.color === 'contrast' ? (f.contrastColor = t.getContrast(f.color || a.color), v.color = !J(p) && h.inside || p < 0 || b.stacking ? f.contrastColor : C.neutralColor100) : delete f.contrastColor, b.cursor && (v.cursor = b.cursor)); var B = { r: h.borderRadius || 0, rotation: u, padding: h.padding, zIndex: 1 }; d.styledMode || (B.fill = h.backgroundColor, B.stroke = h.borderColor, B['stroke-width'] = h.borderWidth); c(B, function (a,
b) { typeof a === 'undefined' && delete B[b] })
}!n || l && J(q) ? l && J(q) && (n ? B.text = q : (f.dataLabels = f.dataLabels || [], n = f.dataLabels[g] = u ? t.text(q, 0, -9999, h.useHTML).addClass('highcharts-data-label') : t.label(q, 0, -9999, h.shape, null, null, h.useHTML, null, 'data-label'), g || (f.dataLabel = n), n.addClass(' highcharts-data-label-color-' + f.colorIndex + ' ' + (h.className || '') + (h.useHTML ? ' highcharts-tracker' : ''))), n.options = h, n.attr(B), d.styledMode || n.css(v).shadow(h.shadow), n.added || n.add(w), h.textPath && !h.useHTML && (n.setTextPath(f.getDataLabelPath &&
f.getDataLabelPath(n) || f.graphic, h.textPath), f.dataLabelPath && !h.textPath.enabled && (f.dataLabelPath = f.dataLabelPath.destroy())), a.alignDataLabel(f, n, h, null, r)) : (f.dataLabel = f.dataLabel && f.dataLabel.destroy(), f.dataLabels && (f.dataLabels.length === 1 ? delete f.dataLabels : delete f.dataLabels[g]), g || delete f.dataLabel, m && (f.connector = f.connector.destroy(), f.connectors && (f.connectors.length === 1 ? delete f.connectors : delete f.connectors[g])))
})
})
}n(this, 'afterDrawDataLabels')
} function w (a, c, b, e, f, g) {
var d = this.chart
var h = c.align; var k = c.verticalAlign; var l = a.box ? 0 : a.padding || 0; var m = c.x; m = void 0 === m ? 0 : m; var n = c.y; n = void 0 === n ? 0 : n; var p = (b.x || 0) + l; if (p < 0) { h === 'right' && m >= 0 ? (c.align = 'left', c.inside = !0) : m -= p; var r = !0 }p = (b.x || 0) + e.width - l; p > d.plotWidth && (h === 'left' && m <= 0 ? (c.align = 'right', c.inside = !0) : m += d.plotWidth - p, r = !0); p = b.y + l; p < 0 && (k === 'bottom' && n >= 0 ? (c.verticalAlign = 'top', c.inside = !0) : n -= p, r = !0); p = (b.y || 0) + e.height - l; p > d.plotHeight && (k === 'top' && n <= 0 ? (c.verticalAlign = 'bottom', c.inside = !0) : n += d.plotHeight - p, r = !0); r && (c.x = m,
c.y = n, a.placed = !g, a.align(c, void 0, f)); return r
} function B (a, c) { var b = []; var d; if (m(a) && !m(c))b = a.map(function (a) { return g(a, c) }); else if (m(c) && !m(a))b = c.map(function (b) { return g(a, b) }); else if (m(a) || m(c)) for (d = Math.max(a.length, c.length); d--;)b[d] = g(a[d], c[d]); else b = g(a, c); return b } function z (a, c, b, e, f) {
var d = this.chart; var h = d.inverted; var g = this.xAxis; var k = g.reversed; var l = h ? c.height / 2 : c.width / 2; a = (a = a.pointWidth) ? a / 2 : 0; c.startXPos = h ? f.x : k ? -l - a : g.width - l + a; c.startYPos = h ? k ? this.yAxis.height - l + a : -l - a : f.y; e ? c.visibility ===
'hidden' && (c.show(), c.attr({ opacity: 0 }).animate({ opacity: 1 })) : c.attr({ opacity: 1 }).animate({ opacity: 0 }, void 0, c.hide); d.hasRendered && (b && c.attr({ x: c.startXPos, y: c.startYPos }), c.placed = !0)
} var t = []; a.compose = function (a) { if (t.indexOf(a) === -1) { var c = a.prototype; t.push(a); c.alignDataLabel = f; c.drawDataLabels = v; c.justifyDataLabel = w; c.setDataLabelStartPos = z } }
})(f || (f = {})); ''; return f
}); M(a, 'Series/Column/ColumnDataLabel.js', [a['Core/Series/DataLabel.js'], a['Core/Series/SeriesRegistry.js'], a['Core/Utilities.js']],
function (a, w, C) {
var r = w.series; var z = C.merge; var x = C.pick; var J; (function (u) {
function n (a, c, e, l, f) {
var g = this.chart.inverted; var m = a.series; var k = a.dlBox || a.shapeArgs; var n = x(a.below, a.plotY > x(this.translatedThreshold, m.yAxis.len)); var u = x(e.inside, !!this.options.stacking); k && (l = z(k), l.y < 0 && (l.height += l.y, l.y = 0), k = l.y + l.height - m.yAxis.len, k > 0 && k < l.height && (l.height -= k), g && (l = { x: m.yAxis.len - l.y - l.height, y: m.xAxis.len - l.x - l.width, width: l.height, height: l.width }), u || (g ? (l.x += n ? 0 : l.width, l.width = 0) : (l.y += n ? l.height : 0, l.height = 0)))
e.align = x(e.align, !g || u ? 'center' : n ? 'right' : 'left'); e.verticalAlign = x(e.verticalAlign, g || u ? 'middle' : n ? 'top' : 'bottom'); r.prototype.alignDataLabel.call(this, a, c, e, l, f); e.inside && a.contrastColor && c.css({ color: a.contrastColor })
} var m = []; u.compose = function (g) { a.compose(r); m.indexOf(g) === -1 && (m.push(g), g.prototype.alignDataLabel = n) }
})(J || (J = {})); return J
}); M(a, 'Series/Bar/BarSeries.js', [a['Series/Column/ColumnSeries.js'], a['Core/Series/SeriesRegistry.js'], a['Core/Utilities.js']], function (a, w, C) {
var r = this &&
this.__extends || (function () { var a = function (r, n) { a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, g) { a.__proto__ = g } || function (a, g) { for (var c in g)g.hasOwnProperty(c) && (a[c] = g[c]) }; return a(r, n) }; return function (r, n) { function m () { this.constructor = r }a(r, n); r.prototype = n === null ? Object.create(n) : (m.prototype = n.prototype, new m()) } }()); var z = C.extend; var x = C.merge; C = (function (w) {
function u () { var a = w !== null && w.apply(this, arguments) || this; a.data = void 0; a.options = void 0; a.points = void 0; return a }r(u, w)
u.defaultOptions = x(a.defaultOptions, {}); return u
}(a)); z(C.prototype, { inverted: !0 }); w.registerSeriesType('bar', C); ''; return C
}); M(a, 'Series/Scatter/ScatterSeries.js', [a['Series/Column/ColumnSeries.js'], a['Series/Line/LineSeries.js'], a['Core/Series/SeriesRegistry.js'], a['Core/Utilities.js']], function (a, w, C, E) {
var r = this && this.__extends || (function () {
var a = function (m, g) {
a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, e) { a.__proto__ = e } || function (a, e) {
for (var c in e) {
e.hasOwnProperty(c) &&
(a[c] = e[c])
}
}; return a(m, g)
}; return function (m, g) { function c () { this.constructor = m }a(m, g); m.prototype = g === null ? Object.create(g) : (c.prototype = g.prototype, new c()) }
}()); var x = E.addEvent; var J = E.extend; var u = E.merge; E = (function (a) {
function m () { var g = a !== null && a.apply(this, arguments) || this; g.data = void 0; g.options = void 0; g.points = void 0; return g }r(m, a); m.prototype.applyJitter = function () {
var a = this; var c = this.options.jitter; var e = this.points.length; c && this.points.forEach(function (g, f) {
['x', 'y'].forEach(function (l, m) {
var k = 'plot' +
l.toUpperCase(); if (c[l] && !g.isNull) { var n = a[l + 'Axis']; var r = c[l] * n.transA; if (n && !n.isLog) { var q = Math.max(0, g[k] - r); n = Math.min(n.len, g[k] + r); m = 1E4 * Math.sin(f + m * e); g[k] = q + (n - q) * (m - Math.floor(m)); l === 'x' && (g.clientX = g.plotX) } }
})
})
}; m.prototype.drawGraph = function () { this.options.lineWidth ? a.prototype.drawGraph.call(this) : this.graph && (this.graph = this.graph.destroy()) }; m.defaultOptions = u(w.defaultOptions, {
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/>'
}
}); return m
}(w)); J(E.prototype, { drawTracker: a.prototype.drawTracker, sorted: !1, requireSorting: !1, noSharedTooltip: !0, trackerGroups: ['group', 'markerGroup', 'dataLabelsGroup'], takeOrdinalPosition: !1 }); x(E, 'afterTranslate', function () { this.applyJitter() }); C.registerSeriesType('scatter', E); ''; return E
}); M(a, 'Mixins/CenteredSeries.js', [a['Core/Globals.js'], a['Core/Series/Series.js'], a['Core/Utilities.js']], function (a, w, C) {
var r = C.isNumber; var z = C.pick
var x = C.relativeLength; var J = a.deg2rad; return a.CenteredSeriesMixin = {
getCenter: function () {
var a = this.options; var n = this.chart; var m = 2 * (a.slicedOffset || 0); var g = n.plotWidth - 2 * m; var c = n.plotHeight - 2 * m; var e = a.center; var l = Math.min(g, c); var f = a.size; var r = a.innerSize || 0; typeof f === 'string' && (f = parseFloat(f)); typeof r === 'string' && (r = parseFloat(r)); a = [z(e[0], '50%'), z(e[1], '50%'), z(f && f < 0 ? void 0 : a.size, '100%'), z(r && r < 0 ? void 0 : a.innerSize || 0, '0%')]; !n.angular || this instanceof w || (a[3] = 0); for (e = 0; e < 4; ++e) {
f = a[e], n = e < 2 || e === 2 && /%$/.test(f), a[e] =
x(f, [g, c, l, a[2]][e]) + (n ? m : 0)
}a[3] > a[2] && (a[3] = a[2]); return a
},
getStartAndEndRadians: function (a, n) { a = r(a) ? a : 0; n = r(n) && n > a && n - a < 360 ? n : a + 360; return { start: J * (a + -90), end: J * (n + -90) } }
}
}); M(a, 'Series/Pie/PiePoint.js', [a['Core/Animation/AnimationUtilities.js'], a['Core/Series/Point.js'], a['Core/Utilities.js']], function (a, w, C) {
var r = this && this.__extends || (function () {
var a = function (c, e) {
a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, c) { a.__proto__ = c } || function (a, c) {
for (var e in c) {
c.hasOwnProperty(e) &&
(a[e] = c[e])
}
}; return a(c, e)
}; return function (c, e) { function g () { this.constructor = c }a(c, e); c.prototype = e === null ? Object.create(e) : (g.prototype = e.prototype, new g()) }
}()); var z = a.setAnimation; var x = C.addEvent; var J = C.defined; a = C.extend; var u = C.isNumber; var n = C.pick; var m = C.relativeLength; w = (function (a) {
function c () { var c = a !== null && a.apply(this, arguments) || this; c.labelDistance = void 0; c.options = void 0; c.series = void 0; return c }r(c, a); c.prototype.getConnectorPath = function () {
var a = this.labelPosition; var c = this.series.options.dataLabels
var f = this.connectorShapes; var g = c.connectorShape; f[g] && (g = f[g]); return g.call(this, { x: a.final.x, y: a.final.y, alignment: a.alignment }, a.connectorPosition, c)
}; c.prototype.getTranslate = function () { return this.sliced ? this.slicedTranslation : { translateX: 0, translateY: 0 } }; c.prototype.haloPath = function (a) { var c = this.shapeArgs; return this.sliced || !this.visible ? [] : this.series.chart.renderer.symbols.arc(c.x, c.y, c.r + a, c.r + a, { innerR: c.r - 1, start: c.start, end: c.end }) }; c.prototype.init = function () {
var c = this; a.prototype.init.apply(this,
arguments); this.name = n(this.name, 'Slice'); var g = function (a) { c.slice(a.type === 'select') }; x(this, 'select', g); x(this, 'unselect', g); return this
}; c.prototype.isValid = function () { return u(this.y) && this.y >= 0 }; c.prototype.setVisible = function (a, c) {
var e = this; var g = this.series; var l = g.chart; var k = g.options.ignoreHiddenPoint; c = n(c, k); a !== this.visible && (this.visible = this.options.visible = a = typeof a === 'undefined' ? !this.visible : a, g.options.data[g.data.indexOf(this)] = this.options, ['graphic', 'dataLabel', 'connector', 'shadowGroup'].forEach(function (c) {
if (e[c]) {
e[c][a
? 'show' : 'hide'](a)
}
}), this.legendItem && l.legend.colorizeItem(this, a), a || this.state !== 'hover' || this.setState(''), k && (g.isDirty = !0), c && l.redraw())
}; c.prototype.slice = function (a, c, f) { var e = this.series; z(f, e.chart); n(c, !0); this.sliced = this.options.sliced = J(a) ? a : !this.sliced; e.options.data[e.data.indexOf(this)] = this.options; this.graphic && this.graphic.animate(this.getTranslate()); this.shadowGroup && this.shadowGroup.animate(this.getTranslate()) }; return c
}(w)); a(w.prototype, {
connectorShapes: {
fixedOffset: function (a,
c, e) { var g = c.breakAt; c = c.touchingSliceAt; return [['M', a.x, a.y], e.softConnector ? ['C', a.x + (a.alignment === 'left' ? -5 : 5), a.y, 2 * g.x - c.x, 2 * g.y - c.y, g.x, g.y] : ['L', g.x, g.y], ['L', c.x, c.y]] },
straight: function (a, c) { c = c.touchingSliceAt; return [['M', a.x, a.y], ['L', c.x, c.y]] },
crookedLine: function (a, c, e) {
c = c.touchingSliceAt; var g = this.series; var f = g.center[0]; var n = g.chart.plotWidth; var r = g.chart.plotLeft; g = a.alignment; var k = this.shapeArgs.r; e = m(e.crookDistance, 1); n = g === 'left' ? f + k + (n + r - f - k) * (1 - e) : r + (f - k) * e; e = ['L', n, a.y]; f = !0; if (g ===
'left' ? n > a.x || n < c.x : n < a.x || n > c.x)f = !1; a = [['M', a.x, a.y]]; f && a.push(e); a.push(['L', c.x, c.y]); return a
}
}
}); return w
}); M(a, 'Series/Pie/PieSeries.js', [a['Mixins/CenteredSeries.js'], a['Series/Column/ColumnSeries.js'], a['Core/Globals.js'], a['Core/Legend/LegendSymbol.js'], a['Core/Color/Palette.js'], a['Series/Pie/PiePoint.js'], a['Core/Series/Series.js'], a['Core/Series/SeriesRegistry.js'], a['Core/Renderer/SVG/Symbols.js'], a['Core/Utilities.js']], function (a, w, C, E, z, x, J, u, n, m) {
var g = this && this.__extends || (function () {
var a =
function (c, e) { a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (a, c) { a.__proto__ = c } || function (a, c) { for (var e in c)c.hasOwnProperty(e) && (a[e] = c[e]) }; return a(c, e) }; return function (c, e) { function f () { this.constructor = c }a(c, e); c.prototype = e === null ? Object.create(e) : (f.prototype = e.prototype, new f()) }
}()); var c = a.getStartAndEndRadians; C = C.noop; var e = m.clamp; var l = m.extend; var f = m.fireEvent; var r = m.merge; var q = m.pick; var k = m.relativeLength; m = (function (a) {
function l () {
var c = a !== null && a.apply(this, arguments) || this; c.center =
void 0; c.data = void 0; c.maxLabelDistance = void 0; c.options = void 0; c.points = void 0; return c
}g(l, a); l.prototype.animate = function (a) { var c = this; var e = c.points; var f = c.startAngleRad; a || e.forEach(function (a) { var b = a.graphic; var d = a.shapeArgs; b && d && (b.attr({ r: q(a.startR, c.center && c.center[3] / 2), start: f, end: f }), b.animate({ r: d.r, start: d.start, end: d.end }, c.options.animation)) }) }; l.prototype.drawEmpty = function () {
var a = this.startAngleRad; var c = this.endAngleRad; var e = this.options; if (this.total === 0 && this.center) {
var f = this.center[0]
var d = this.center[1]; this.graph || (this.graph = this.chart.renderer.arc(f, d, this.center[1] / 2, 0, a, c).addClass('highcharts-empty-series').add(this.group)); this.graph.attr({ d: n.arc(f, d, this.center[2] / 2, 0, { start: a, end: c, innerR: this.center[3] / 2 }) }); this.chart.styledMode || this.graph.attr({ 'stroke-width': e.borderWidth, fill: e.fillColor || 'none', stroke: e.color || z.neutralColor20 })
} else this.graph && (this.graph = this.graph.destroy())
}; l.prototype.drawPoints = function () {
var a = this.chart.renderer; this.points.forEach(function (c) {
c.graphic &&
c.hasNewShapeType() && (c.graphic = c.graphic.destroy()); c.graphic || (c.graphic = a[c.shapeType](c.shapeArgs).add(c.series.group), c.delayedRendering = !0)
})
}; l.prototype.generatePoints = function () { a.prototype.generatePoints.call(this); this.updateTotals() }; l.prototype.getX = function (a, c, f) {
var h = this.center; var d = this.radii ? this.radii[f.index] || 0 : h[2] / 2; a = Math.asin(e((a - h[1]) / (d + f.labelDistance), -1, 1)); return h[0] + (c ? -1 : 1) * Math.cos(a) * (d + f.labelDistance) + (f.labelDistance > 0 ? (c ? -1 : 1) * this.options.dataLabels.padding
: 0)
}; l.prototype.hasData = function () { return !!this.processedXData.length }; l.prototype.redrawPoints = function () {
var a = this; var c = a.chart; var e = c.renderer; var f = a.options.shadow; var d; var b; var g; var k; this.drawEmpty(); !f || a.shadowGroup || c.styledMode || (a.shadowGroup = e.g('shadow').attr({ zIndex: -1 }).add(a.group)); a.points.forEach(function (h) {
var l = {}; b = h.graphic; if (!h.isNull && b) {
var m = void 0; k = h.shapeArgs; d = h.getTranslate(); c.styledMode || (m = h.shadowGroup, f && !m && (m = h.shadowGroup = e.g('shadow').add(a.shadowGroup)), m && m.attr(d), g = a.pointAttribs(h,
h.selected && 'select')); h.delayedRendering ? (b.setRadialReference(a.center).attr(k).attr(d), c.styledMode || b.attr(g).attr({ 'stroke-linejoin': 'round' }).shadow(f, m), h.delayedRendering = !1) : (b.setRadialReference(a.center), c.styledMode || r(!0, l, g), r(!0, l, k, d), b.animate(l)); b.attr({ visibility: h.visible ? 'inherit' : 'hidden' }); b.addClass(h.getClassName(), !0)
} else b && (h.graphic = b.destroy())
})
}; l.prototype.sortByAngle = function (a, c) { a.sort(function (a, e) { return typeof a.angle !== 'undefined' && (e.angle - a.angle) * c }) }; l.prototype.translate =
function (a) {
this.generatePoints(); var e = this.options; var g = e.slicedOffset; var h = g + (e.borderWidth || 0); var d = c(e.startAngle, e.endAngle); var b = this.startAngleRad = d.start; d = (this.endAngleRad = d.end) - b; var l = this.points; var m = e.dataLabels.distance; e = e.ignoreHiddenPoint; var n = l.length; var r; var v = 0; a || (this.center = a = this.getCenter()); for (r = 0; r < n; r++) {
var u = l[r]; var x = b + v * d; !u.isValid() || e && !u.visible || (v += u.percentage / 100); var w = b + v * d; var B = { x: a[0], y: a[1], r: a[2] / 2, innerR: a[3] / 2, start: Math.round(1E3 * x) / 1E3, end: Math.round(1E3 * w) / 1E3 }
u.shapeType = 'arc'; u.shapeArgs = B; u.labelDistance = q(u.options.dataLabels && u.options.dataLabels.distance, m); u.labelDistance = k(u.labelDistance, B.r); this.maxLabelDistance = Math.max(this.maxLabelDistance || 0, u.labelDistance); w = (w + x) / 2; w > 1.5 * Math.PI ? w -= 2 * Math.PI : w < -Math.PI / 2 && (w += 2 * Math.PI); u.slicedTranslation = { translateX: Math.round(Math.cos(w) * g), translateY: Math.round(Math.sin(w) * g) }; B = Math.cos(w) * a[2] / 2; var z = Math.sin(w) * a[2] / 2; u.tooltipPos = [a[0] + 0.7 * B, a[1] + 0.7 * z]; u.half = w < -Math.PI / 2 || w > Math.PI / 2 ? 1 : 0; u.angle =
w; x = Math.min(h, u.labelDistance / 5); u.labelPosition = { natural: { x: a[0] + B + Math.cos(w) * u.labelDistance, y: a[1] + z + Math.sin(w) * u.labelDistance }, final: {}, alignment: u.labelDistance < 0 ? 'center' : u.half ? 'right' : 'left', connectorPosition: { breakAt: { x: a[0] + B + Math.cos(w) * x, y: a[1] + z + Math.sin(w) * x }, touchingSliceAt: { x: a[0] + B, y: a[1] + z } } }
}f(this, 'afterTranslate')
}; l.prototype.updateTotals = function () {
var a = this.points; var c = a.length; var e = this.options.ignoreHiddenPoint; var f; var d = 0; for (f = 0; f < c; f++) {
var b = a[f]; !b.isValid() || e && !b.visible ||
(d += b.y)
} this.total = d; for (f = 0; f < c; f++)b = a[f], b.percentage = d > 0 && (b.visible || !e) ? b.y / d * 100 : 0, b.total = d
}; l.defaultOptions = r(J.defaultOptions, {
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: z.backgroundColor,
borderWidth: 1,
lineWidth: void 0,
states: { hover: { brightness: 0.1 } }
}); return l
}(J)); l(m.prototype, { axisTypes: [], directTouch: !0, drawGraph: void 0, drawLegendSymbol: E.drawRectangle, drawTracker: w.prototype.drawTracker, getCenter: a.getCenter, getSymbol: C, isCartesian: !1, noSharedTooltip: !0, pointAttribs: w.prototype.pointAttribs, pointClass: x, requireSorting: !1, searchPoint: C, trackerGroups: ['group', 'dataLabelsGroup'] }); u.registerSeriesType('pie',
m); ''; return m
}); M(a, 'Series/Pie/PieDataLabel.js', [a['Core/Series/DataLabel.js'], a['Core/Globals.js'], a['Core/Color/Palette.js'], a['Core/Renderer/RendererUtilities.js'], a['Core/Series/SeriesRegistry.js'], a['Core/Utilities.js']], function (a, w, C, E, z, x) {
var r = w.noop; var u = E.distribute; var n = z.series; var m = x.arrayMax; var g = x.clamp; var c = x.defined; var e = x.merge; var l = x.pick; var f = x.relativeLength; var v; (function (q) {
function k () {
var a = this; var f = a.data; var d = a.chart; var b = a.options.dataLabels || {}; var g = b.connectorPadding; var k = d.plotWidth; var r = d.plotHeight; var q = d.plotLeft
var v = Math.round(d.chartWidth / 3); var w = a.center; var x = w[2] / 2; var B = w[1]; var z = [[], []]; var D = [0, 0, 0, 0]; var E = a.dataLabelPositioners; var I; var J; var M; var O; var Z; var A; var U; var N; var W; var X; var Y; var T; a.visible && (b.enabled || a._hasPointLabels) && (f.forEach(function (a) { a.dataLabel && a.visible && a.dataLabel.shortened && (a.dataLabel.attr({ width: 'auto' }).css({ width: 'auto', textOverflow: 'clip' }), a.dataLabel.shortened = !1) }), n.prototype.drawDataLabels.apply(a), f.forEach(function (a) {
a.dataLabel && (a.visible ? (z[a.half].push(a), a.dataLabel._pos = null, !c(b.style.width) && !c(a.options.dataLabels &&
a.options.dataLabels.style && a.options.dataLabels.style.width) && a.dataLabel.getBBox().width > v && (a.dataLabel.css({ width: Math.round(0.7 * v) + 'px' }), a.dataLabel.shortened = !0)) : (a.dataLabel = a.dataLabel.destroy(), a.dataLabels && a.dataLabels.length === 1 && delete a.dataLabels))
}), z.forEach(function (e, f) {
var h = e.length; var m = []; var n; if (h) {
a.sortByAngle(e, f - 0.5); if (a.maxLabelDistance > 0) {
var p = Math.max(0, B - x - a.maxLabelDistance); var t = Math.min(B + x + a.maxLabelDistance, d.plotHeight); e.forEach(function (a) {
a.labelDistance > 0 && a.dataLabel &&
(a.top = Math.max(0, B - x - a.labelDistance), a.bottom = Math.min(B + x + a.labelDistance, d.plotHeight), n = a.dataLabel.getBBox().height || 21, a.distributeBox = { target: a.labelPosition.natural.y - a.top + n / 2, size: n, rank: a.y }, m.push(a.distributeBox))
}); p = t + n - p; u(m, p, p / 5)
} for (Y = 0; Y < h; Y++) {
I = e[Y]; A = I.labelPosition; O = I.dataLabel; X = !1 === I.visible ? 'hidden' : 'inherit'; W = p = A.natural.y; m && c(I.distributeBox) && (typeof I.distributeBox.pos === 'undefined' ? X = 'hidden' : (U = I.distributeBox.size, W = E.radialDistributionY(I))); delete I.positionIndex
if (b.justify)N = E.justify(I, x, w); else switch (b.alignTo) { case 'connectors':N = E.alignToConnectors(e, f, k, q); break; case 'plotEdges':N = E.alignToPlotEdges(O, f, k, q); break; default:N = E.radialDistributionX(a, I, W, p) }O._attr = { visibility: X, align: A.alignment }; T = I.options.dataLabels || {}; O._pos = { x: N + l(T.x, b.x) + ({ left: g, right: -g }[A.alignment] || 0), y: W + l(T.y, b.y) - 10 }; A.final.x = N; A.final.y = W; l(b.crop, !0) && (Z = O.getBBox().width, p = null, N - Z < g && f === 1 ? (p = Math.round(Z - N + g), D[3] = Math.max(p, D[3])) : N + Z > k - g && f === 0 && (p = Math.round(N +
Z - k + g), D[1] = Math.max(p, D[1])), W - U / 2 < 0 ? D[0] = Math.max(Math.round(-W + U / 2), D[0]) : W + U / 2 > r && (D[2] = Math.max(Math.round(W + U / 2 - r), D[2])), O.sideOverflow = p)
}
}
}), m(D) === 0 || this.verifyDataLabelOverflow(D)) && (this.placeDataLabels(), this.points.forEach(function (c) {
T = e(b, c.options.dataLabels); if (J = l(T.connectorWidth, 1)) {
var f; M = c.connector; if ((O = c.dataLabel) && O._pos && c.visible && c.labelDistance > 0) {
X = O._attr.visibility; if (f = !M) {
c.connector = M = d.renderer.path().addClass('highcharts-data-label-connector highcharts-color-' +
c.colorIndex + (c.className ? ' ' + c.className : '')).add(a.dataLabelsGroup), d.styledMode || M.attr({ 'stroke-width': J, stroke: T.connectorColor || c.color || C.neutralColor60 })
}M[f ? 'attr' : 'animate']({ d: c.getConnectorPath() }); M.attr('visibility', X)
} else M && (c.connector = M.destroy())
}
}))
} function v () {
this.points.forEach(function (a) {
var c = a.dataLabel; var d; c && a.visible && ((d = c._pos) ? (c.sideOverflow && (c._attr.width = Math.max(c.getBBox().width - c.sideOverflow, 0), c.css({
width: c._attr.width + 'px',
textOverflow: (this.options.dataLabels.style ||
{}).textOverflow || 'ellipsis'
}), c.shortened = !0), c.attr(c._attr), c[c.moved ? 'animate' : 'attr'](d), c.moved = !0) : c && c.attr({ y: -9999 })); delete a.distributeBox
}, this)
} function w (a) {
var c = this.center; var d = this.options; var b = d.center; var e = d.minSize || 80; var k = d.size !== null; if (!k) {
if (b[0] !== null) var l = Math.max(c[2] - Math.max(a[1], a[3]), e); else l = Math.max(c[2] - a[1] - a[3], e), c[0] += (a[3] - a[1]) / 2; b[1] !== null ? l = g(l, e, c[2] - Math.max(a[0], a[2])) : (l = g(l, e, c[2] - a[0] - a[2]), c[1] += (a[0] - a[2]) / 2); l < c[2] ? (c[2] = l, c[3] = Math.min(f(d.innerSize ||
0, l), l), this.translate(c), this.drawDataLabels && this.drawDataLabels()) : k = !0
} return k
} var x = []; var z = {
radialDistributionY: function (a) { return a.top + a.distributeBox.pos },
radialDistributionX: function (a, c, d, b) { return a.getX(d < c.top + 2 || d > c.bottom - 2 ? b : d, c.half, c) },
justify: function (a, c, d) { return d[0] + (a.half ? -1 : 1) * (c + a.labelDistance) },
alignToPlotEdges: function (a, c, d, b) { a = a.getBBox().width; return c ? a + b : d - a - b },
alignToConnectors: function (a, c, d, b) {
var e = 0; var f; a.forEach(function (a) {
f = a.dataLabel.getBBox().width; f > e &&
(e = f)
}); return c ? e + b : d - e - b
}
}; q.compose = function (c) { a.compose(n); x.indexOf(c) === -1 && (x.push(c), c = c.prototype, c.dataLabelPositioners = z, c.alignDataLabel = r, c.drawDataLabels = k, c.placeDataLabels = v, c.verifyDataLabelOverflow = w) }
})(v || (v = {})); return v
}); M(a, 'Extensions/OverlappingDataLabels.js', [a['Core/Chart/Chart.js'], a['Core/Utilities.js']], function (a, w) {
function r (a, g) {
var c = !1; if (a) {
var e = a.newOpacity; a.oldOpacity !== e && (a.alignAttr && a.placed ? (a[e ? 'removeClass' : 'addClass']('highcharts-data-label-hidden'),
c = !0, a.alignAttr.opacity = e, a[a.isOld ? 'animate' : 'attr'](a.alignAttr, null, function () { g.styledMode || a.css({ pointerEvents: e ? 'auto' : 'none' }) }), z(g, 'afterHideOverlappingLabel')) : a.attr({ opacity: e })); a.isOld = !0
} return c
} var E = w.addEvent; var z = w.fireEvent; var x = w.isArray; var J = w.isNumber; var u = w.objectEach; var n = w.pick; E(a, 'render', function () {
var a = this; var g = []; (this.labelCollectors || []).forEach(function (a) { g = g.concat(a()) }); (this.yAxis || []).forEach(function (a) {
a.stacking && a.options.stackLabels && !a.options.stackLabels.allowOverlap &&
u(a.stacking.stacks, function (a) { u(a, function (a) { a.label && a.label.visibility !== 'hidden' && g.push(a.label) }) })
}); (this.series || []).forEach(function (c) {
var e = c.options.dataLabels; c.visible && (!1 !== e.enabled || c._hasPointLabels) && (e = function (c) {
return c.forEach(function (c) {
c.visible && (x(c.dataLabels) ? c.dataLabels : c.dataLabel ? [c.dataLabel] : []).forEach(function (e) {
var f = e.options; e.labelrank = n(f.labelrank, c.labelrank, c.shapeArgs && c.shapeArgs.height); f.allowOverlap ? (e.oldOpacity = e.opacity, e.newOpacity = 1, r(e,
a)) : g.push(e)
})
})
}, e(c.nodes || []), e(c.points))
}); this.hideOverlappingLabels(g)
}); a.prototype.hideOverlappingLabels = function (a) {
var g = this; var c = a.length; var e = g.renderer; var l; var f; var m; var n = !1; var k = function (a) {
var c; var f = a.box ? 0 : a.padding || 0; var g = c = 0; var d; if (a && (!a.alignAttr || a.placed)) {
var b = a.alignAttr || { x: a.attr('x'), y: a.attr('y') }; var k = a.parentGroup; a.width || (c = a.getBBox(), a.width = c.width, a.height = c.height, c = e.fontMetrics(null, a.element).h); var l = a.width - 2 * f; (d = { left: '0', center: '0.5', right: '1' }[a.alignValue]) ? g = +d * l : J(a.x) &&
Math.round(a.x) !== a.translateX && (g = a.x - a.translateX); return { x: b.x + (k.translateX || 0) + f - (g || 0), y: b.y + (k.translateY || 0) + f - c, width: a.width - 2 * f, height: a.height - 2 * f }
}
}; for (f = 0; f < c; f++) if (l = a[f])l.oldOpacity = l.opacity, l.newOpacity = 1, l.absoluteBox = k(l); a.sort(function (a, c) { return (c.labelrank || 0) - (a.labelrank || 0) }); for (f = 0; f < c; f++) {
var u = (k = a[f]) && k.absoluteBox; for (l = f + 1; l < c; ++l) {
var w = (m = a[l]) && m.absoluteBox; !u || !w || k === m || k.newOpacity === 0 || m.newOpacity === 0 || w.x >= u.x + u.width || w.x + w.width <= u.x || w.y >= u.y + u.height ||
w.y + w.height <= u.y || ((k.labelrank < m.labelrank ? k : m).newOpacity = 0)
}
}a.forEach(function (a) { r(a, g) && (n = !0) }); n && z(g, 'afterHideAllOverlappingLabels')
}
}); M(a, 'Core/Responsive.js', [a['Core/Utilities.js']], function (a) {
var r = a.extend; var C = a.find; var E = a.isArray; var z = a.isObject; var x = a.merge; var J = a.objectEach; var u = a.pick; var n = a.splat; var m = a.uniqueKey; var g; (function (a) {
var c = []; a.compose = function (a) { c.indexOf(a) === -1 && (c.push(a), r(a.prototype, g.prototype)); return a }; var g = (function () {
function a () {}a.prototype.currentOptions = function (a) {
function c (a,
f, g, k) { var h; J(a, function (a, b) { if (!k && e.collectionsWithUpdate.indexOf(b) > -1 && f[b]) for (a = n(a), g[b] = [], h = 0; h < Math.max(a.length, f[b].length); h++)f[b][h] && (void 0 === a[h] ? g[b][h] = f[b][h] : (g[b][h] = {}, c(a[h], f[b][h], g[b][h], k + 1))); else z(a) ? (g[b] = E(a) ? [] : {}, c(a, f[b] || {}, g[b], k + 1)) : g[b] = typeof f[b] === 'undefined' ? null : f[b] }) } var e = this; var f = {}; c(a, this.options, f, 0); return f
}; a.prototype.matchResponsiveRule = function (a, c) {
var e = a.condition; (e.callback || function () {
return this.chartWidth <= u(e.maxWidth, Number.MAX_VALUE) &&
this.chartHeight <= u(e.maxHeight, Number.MAX_VALUE) && this.chartWidth >= u(e.minWidth, 0) && this.chartHeight >= u(e.minHeight, 0)
}).call(this) && c.push(a._id)
}; a.prototype.setResponsive = function (a, c) {
var e = this; var f = this.options.responsive; var g = this.currentResponsive; var l = []; !c && f && f.rules && f.rules.forEach(function (a) { typeof a._id === 'undefined' && (a._id = m()); e.matchResponsiveRule(a, l) }, this); c = x.apply(void 0, l.map(function (a) { return C((f || {}).rules || [], function (c) { return c._id === a }) }).map(function (a) { return a && a.chartOptions }))
c.isResponsiveOptions = !0; l = l.toString() || void 0; l !== (g && g.ruleIds) && (g && this.update(g.undoOptions, a, !0), l ? (g = this.currentOptions(c), g.isResponsiveOptions = !0, this.currentResponsive = { ruleIds: l, mergedOptions: c, undoOptions: g }, this.update(c, a, !0)) : this.currentResponsive = void 0)
}; return a
}())
})(g || (g = {})); ''; ''; return g
}); M(a, 'masters/highcharts.src.js', [a['Core/Globals.js'], a['Core/Utilities.js'], a['Core/DefaultOptions.js'], a['Core/Animation/Fx.js'], a['Core/Animation/AnimationUtilities.js'], a['Core/Renderer/HTML/AST.js'],
a['Core/FormatUtilities.js'], a['Core/Renderer/RendererUtilities.js'], a['Core/Renderer/SVG/SVGElement.js'], a['Core/Renderer/SVG/SVGRenderer.js'], a['Core/Renderer/HTML/HTMLElement.js'], a['Core/Renderer/HTML/HTMLRenderer.js'], a['Core/Axis/Axis.js'], a['Core/Axis/DateTimeAxis.js'], a['Core/Axis/LogarithmicAxis.js'], a['Core/Axis/PlotLineOrBand/PlotLineOrBand.js'], a['Core/Axis/Tick.js'], a['Core/Tooltip.js'], a['Core/Series/Point.js'], a['Core/Pointer.js'], a['Core/MSPointer.js'], a['Core/Legend/Legend.js'], a['Core/Chart/Chart.js'],
a['Core/Series/Series.js'], a['Core/Series/SeriesRegistry.js'], a['Series/Column/ColumnSeries.js'], a['Series/Column/ColumnDataLabel.js'], a['Series/Pie/PieSeries.js'], a['Series/Pie/PieDataLabel.js'], a['Core/Series/DataLabel.js'], a['Core/Responsive.js'], a['Core/Color/Color.js'], a['Core/Time.js']], function (a, w, C, E, z, x, J, u, n, m, g, c, e, l, f, v, q, k, I, D, B, M, t, h, d, b, p, G, y, L, F, P, S) {
a.animate = z.animate; a.animObject = z.animObject; a.getDeferredAnimation = z.getDeferredAnimation; a.setAnimation = z.setAnimation; a.stop = z.stop
a.timers = E.timers; a.AST = x; a.Axis = e; a.Chart = t; a.chart = t.chart; a.Fx = E; a.Legend = M; a.PlotLineOrBand = v; a.Point = I; a.Pointer = B.isRequired() ? B : D; a.Series = h; a.SVGElement = n; a.SVGRenderer = m; a.Tick = q; a.Time = S; a.Tooltip = k; a.Color = P; a.color = P.parse; c.compose(m); g.compose(n); a.defaultOptions = C.defaultOptions; a.getOptions = C.getOptions; a.time = C.defaultTime; a.setOptions = C.setOptions; a.dateFormat = J.dateFormat; a.format = J.format; a.numberFormat = J.numberFormat; a.addEvent = w.addEvent; a.arrayMax = w.arrayMax; a.arrayMin = w.arrayMin
a.attr = w.attr; a.clearTimeout = w.clearTimeout; a.correctFloat = w.correctFloat; a.createElement = w.createElement; a.css = w.css; a.defined = w.defined; a.destroyObjectProperties = w.destroyObjectProperties; a.discardElement = w.discardElement; a.distribute = u.distribute; a.erase = w.erase; a.error = w.error; a.extend = w.extend; a.extendClass = w.extendClass; a.find = w.find; a.fireEvent = w.fireEvent; a.getMagnitude = w.getMagnitude; a.getStyle = w.getStyle; a.inArray = w.inArray; a.isArray = w.isArray; a.isClass = w.isClass; a.isDOMElement = w.isDOMElement
a.isFunction = w.isFunction; a.isNumber = w.isNumber; a.isObject = w.isObject; a.isString = w.isString; a.keys = w.keys; a.merge = w.merge; a.normalizeTickInterval = w.normalizeTickInterval; a.objectEach = w.objectEach; a.offset = w.offset; a.pad = w.pad; a.pick = w.pick; a.pInt = w.pInt; a.relativeLength = w.relativeLength; a.removeEvent = w.removeEvent; a.seriesType = d.seriesType; a.splat = w.splat; a.stableSort = w.stableSort; a.syncTimeout = w.syncTimeout; a.timeUnits = w.timeUnits; a.uniqueKey = w.uniqueKey; a.useSerialIds = w.useSerialIds; a.wrap = w.wrap
p.compose(b); L.compose(h); l.compose(e); f.compose(e); y.compose(G); v.compose(e); F.compose(t); return a
}); a['masters/highcharts.src.js']._modules = a; return a['masters/highcharts.src.js']
})
// # sourceMappingURL=highcharts.js.map