PageSourceSearch

https://www.suvtv.com.ar/assets/js/plugins/chart.min.js?v=202305311003

js suvtv.com.ar collected 2026-10-04 23:13:43 UTC 249,307 bytes, 3,912 lines download raw bytes

1/*!
2 * Chart.js
3 * http://chartjs.org/
4 * Version: 2.1.6
5 *
6 * Copyright 2016 Nick Downie
7 * Released under the MIT license
8 * https://github.com/chartjs/Chart.js/blob/master/LICENSE.md
9 */
10!function (t) {
11    if ("object" == typeof exports && "undefined" != typeof module)module.exports = t(); else if ("function" == typeof define && define.amd)define([], t); else {
12        var e;
13        e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this, e.Chart = t()
14    }
15}(function () {
16    return function t(e, a, i) {
17        function n(r, l) {
18            if (!a[r]) {
19                if (!e[r]) {
20                    var s = "function" == typeof require && require;
21                    if (!l && s)return s(r, !0);
22                    if (o)return o(r, !0);
23                    var d = new Error("Cannot find module '" + r + "'");
24                    throw d.code = "MODULE_NOT_FOUND", d
25                }
26                var u = a[r] = {exports: {}};
27                e[r][0].call(u.exports, function (t) {
28                    var a = e[r][1][t];
29                    return n(a ? a : t)
30                }, u, u.exports, t, e, a, i)
31            }
32            return a[r].exports
33        }
34
35        for (var o = "function" == typeof require && require, r = 0; r < i.length; r++)n(i[r]);
36        return n
37    }({
38        1: [function (t, e, a) {
39        }, {}], 2: [function (t, e, a) {
40            function i(t) {
41                if (t) {
42                    var e = /^#([a-fA-F0-9]{3})$/, a = /^#([a-fA-F0-9]{6})$/, i = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/, n = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/, o = /(\w+)/, r = [0, 0, 0], l = 1, s = t.match(e);
43                    if (s) {
44                        s = s[1];
45                        for (var d = 0; d < r.length; d++)r[d] = parseInt(s[d] + s[d], 16)
46                    } else if (s = t.match(a)) {
47                        s = s[1];
48                        for (var d = 0; d < r.length; d++)r[d] = parseInt(s.slice(2 * d, 2 * d + 2), 16)
49                    } else if (s = t.match(i)) {
50                        for (var d = 0; d < r.length; d++)r[d] = parseInt(s[d + 1]);
51                        l = parseFloat(s[4])
52                    } else if (s = t.match(n)) {
53                        for (var d = 0; d < r.length; d++)r[d] = Math.round(2.55 * parseFloat(s[d + 1]));
54                        l = parseFloat(s[4])
55                    } else if (s = t.match(o)) {
56                        if ("transparent" == s[1])return [0, 0, 0, 0];
57                        if (r = y[s[1]], !r)return
58                    }
59                    for (var d = 0; d < r.length; d++)r[d] = v(r[d], 0, 255);
60                    return l = l || 0 == l ? v(l, 0, 1) : 1, r[3] = l, r
61                }
62            }
63
64            function n(t) {
65                if (t) {
66                    var e = /^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/, a = t.match(e);
67                    if (a) {
68                        var i = parseFloat(a[4]), n = v(parseInt(a[1]), 0, 360), o = v(parseFloat(a[2]), 0, 100), r = v(parseFloat(a[3]), 0, 100), l = v(isNaN(i) ? 1 : i, 0, 1);
69                        return [n, o, r, l]
70                    }
71                }
72            }
73
74            function o(t) {
75                if (t) {
76                    var e = /^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/, a = t.match(e);
77                    if (a) {
78                        var i = parseFloat(a[4]), n = v(parseInt(a[1]), 0, 360), o = v(parseFloat(a[2]), 0, 100), r = v(parseFloat(a[3]), 0, 100), l = v(isNaN(i) ? 1 : i, 0, 1);
79                        return [n, o, r, l]
80                    }
81                }
82            }
83
84            function r(t) {
85                var e = i(t);
86                return e && e.slice(0, 3)
87            }
88
89            function l(t) {
90                var e = n(t);
91                return e && e.slice(0, 3)
92            }
93
94            function s(t) {
95                var e = i(t);
96                return e ? e[3] : (e = n(t)) ? e[3] : (e = o(t)) ? e[3] : void 0
97            }
98
99            function d(t) {
100                return "#" + x(t[0]) + x(t[1]) + x(t[2])
101            }
102
103            function u(t, e) {
104                return 1 > e || t[3] && t[3] < 1 ? c(t, e) : "rgb(" + t[0] + ", " + t[1] + ", " + t[2] + ")"
105            }
106
107            function c(t, e) {
108                return void 0 === e && (e = void 0 !== t[3] ? t[3] : 1), "rgba(" + t[0] + ", " + t[1] + ", " + t[2] + ", " + e + ")"
109            }
110
111            function h(t, e) {
112                if (1 > e || t[3] && t[3] < 1)return f(t, e);
113                var a = Math.round(t[0] / 255 * 100), i = Math.round(t[1] / 255 * 100), n = Math.round(t[2] / 255 * 100);
114                return "rgb(" + a + "%, " + i + "%, " + n + "%)"
115            }
116
117            function f(t, e) {
118                var a = Math.round(t[0] / 255 * 100), i = Math.round(t[1] / 255 * 100), n = Math.round(t[2] / 255 * 100);
119                return "rgba(" + a + "%, " + i + "%, " + n + "%, " + (e || t[3] || 1) + ")"
120            }
121
122            function g(t, e) {
123                return 1 > e || t[3] && t[3] < 1 ? p(t, e) : "hsl(" + t[0] + ", " + t[1] + "%, " + t[2] + "%)"
124            }
125
126            function p(t, e) {
127                return void 0 === e && (e = void 0 !== t[3] ? t[3] : 1), "hsla(" + t[0] + ", " + t[1] + "%, " + t[2] + "%, " + e + ")"
128            }
129
130            function m(t, e) {
131                return void 0 === e && (e = void 0 !== t[3] ? t[3] : 1), "hwb(" + t[0] + ", " + t[1] + "%, " + t[2] + "%" + (void 0 !== e && 1 !== e ? ", " + e : "") + ")"
132            }
133
134            function b(t) {
135                return k[t.slice(0, 3)]
136            }
137
138            function v(t, e, a) {
139                return Math.min(Math.max(e, t), a)
140            }
141
142            function x(t) {
143                var e = t.toString(16).toUpperCase();
144                return e.length < 2 ? "0" + e : e
145            }
146
147            var y = t(6);
148            e.exports = {
149                getRgba: i,
150                getHsla: n,
151                getRgb: r,
152                getHsl: l,
153                getHwb: o,
154                getAlpha: s,
155                hexString: d,
156                rgbString: u,
157                rgbaString: c,
158                percentString: h,
159                percentaString: f,
160                hslString: g,
161                hslaString: p,
162                hwbString: m,
163                keyword: b
164            };
165            var k = {};
166            for (var S in y)k[y[S]] = S
167        }, {6: 6}], 3: [function (t, e, a) {
168            var i = t(5), n = t(2), o = function (t) {
169                if (t instanceof o)return t;
170                if (!(this instanceof o))return new o(t);
171                this.values = {
172                    rgb: [0, 0, 0],
173                    hsl: [0, 0, 0],
174                    hsv: [0, 0, 0],
175                    hwb: [0, 0, 0],
176                    cmyk: [0, 0, 0, 0],
177                    alpha: 1
178                };
179                var e;
180                if ("string" == typeof t)if (e = n.getRgba(t))this.setValues("rgb", e); else if (e = n.getHsla(t))this.setValues("hsl", e); else {
181                    if (!(e = n.getHwb(t)))throw new Error('Unable to parse color from string "' + t + '"');
182                    this.setValues("hwb", e)
183                } else if ("object" == typeof t)if (e = t, void 0 !== e.r || void 0 !== e.red)this.setValues("rgb", e); else if (void 0 !== e.l || void 0 !== e.lightness)this.setValues("hsl", e); else if (void 0 !== e.v || void 0 !== e.value)this.setValues("hsv", e); else if (void 0 !== e.w || void 0 !== e.whiteness)this.setValues("hwb", e); else {
184                    if (void 0 === e.c && void 0 === e.cyan)throw new Error("Unable to parse color from object " + JSON.stringify(t));
185                    this.setValues("cmyk", e)
186                }
187            };
188            o.prototype = {
189                rgb: function () {
190                    return this.setSpace("rgb", arguments)
191                }, hsl: function () {
192                    return this.setSpace("hsl", arguments)
193                }, hsv: function () {
194                    return this.setSpace("hsv", arguments)
195                }, hwb: function () {
196                    return this.setSpace("hwb", arguments)
197                }, cmyk: function () {
198                    return this.setSpace("cmyk", arguments)
199                }, rgbArray: function () {
200                    return this.values.rgb
201                }, hslArray: function () {
202                    return this.values.hsl
203                }, hsvArray: function () {
204                    return this.values.hsv
205                }, hwbArray: function () {
206                    var t = this.values;
207                    return 1 !== t.alpha ? t.hwb.concat([t.alpha]) : t.hwb
208                }, cmykArray: function () {
209                    return this.values.cmyk
210                }, rgbaArray: function () {
211                    var t = this.values;
212                    return t.rgb.concat([t.alpha])
213                }, hslaArray: function () {
214                    var t = this.values;
215                    return t.hsl.concat([t.alpha])
216                }, alpha: function (t) {
217                    return void 0 === t ? this.values.alpha : (this.setValues("alph
217a", t), this)
218                }, red: function (t) {
219                    return this.setChannel("rgb", 0, t)
220                }, green: function (t) {
221                    return this.setChannel("rgb", 1, t)
222                }, blue: function (t) {
223                    return this.setChannel("rgb", 2, t)
224                }, hue: function (t) {
225                    return t && (t %= 360, t = 0 > t ? 360 + t : t), this.setChannel("hsl", 0, t)
226                }, saturation: function (t) {
227                    return this.setChannel("hsl", 1, t)
228                }, lightness: function (t) {
229                    return this.setChannel("hsl", 2, t)
230                }, saturationv: function (t) {
231                    return this.setChannel("hsv", 1, t)
232                }, whiteness: function (t) {
233                    return this.setChannel("hwb", 1, t)
234                }, blackness: function (t) {
235                    return this.setChannel("hwb", 2, t)
236                }, value: function (t) {
237                    return this.setChannel("hsv", 2, t)
238                }, cyan: function (t) {
239                    return this.setChannel("cmyk", 0, t)
240                }, magenta: function (t) {
241                    return this.setChannel("cmyk", 1, t)
242                }, yellow: function (t) {
243                    return this.setChannel("cmyk", 2, t)
244                }, black: function (t) {
245                    return this.setChannel("cmyk", 3, t)
246                }, hexString: function () {
247                    return n.hexString(this.values.rgb)
248                }, rgbString: function () {
249                    return n.rgbString(this.values.rgb, this.values.alpha)
250                }, rgbaString: function () {
251                    return n.rgbaString(this.values.rgb, this.values.alpha)
252                }, percentString: function () {
253                    return n.percentString(this.values.rgb, this.values.alpha)
254                }, hslString: function () {
255                    return n.hslString(this.values.hsl, this.values.alpha)
256                }, hslaString: function () {
257                    return n.hslaString(this.values.hsl, this.values.alpha)
258                }, hwbString: function () {
259                    return n.hwbString(this.values.hwb, this.values.alpha)
260                }, keyword: function () {
261                    return n.keyword(this.values.rgb, this.values.alpha)
262                }, rgbNumber: function () {
263                    var t = this.values.rgb;
264                    return t[0] << 16 | t[1] << 8 | t[2]
265                }, luminosity: function () {
266                    for (var t = this.values.rgb, e = [], a = 0; a < t.length; a++) {
267                        var i = t[a] / 255;
268                        e[a] = .03928 >= i ? i / 12.92 : Math.pow((i + .055) / 1.055, 2.4)
269                    }
270                    return .2126 * e[0] + .7152 * e[1] + .0722 * e[2]
271                }, contrast: function (t) {
272                    var e = this.luminosity(), a = t.luminosity();
273                    return e > a ? (e + .05) / (a + .05) : (a + .05) / (e + .05)
274                }, level: function (t) {
275                    var e = this.contrast(t);
276                    return e >= 7.1 ? "AAA" : e >= 4.5 ? "AA" : ""
277                }, dark: function () {
278                    var t = this.values.rgb, e = (299 * t[0] + 587 * t[1] + 114 * t[2]) / 1e3;
279                    return 128 > e
280                }, light: function () {
281                    return !this.dark()
282                }, negate: function () {
283                    for (var t = [], e = 0; 3 > e; e++)t[e] = 255 - this.values.rgb[e];
284                    return this.setValues("rgb", t), this
285                }, lighten: function (t) {
286                    var e = this.values.hsl;
287                    return e[2] += e[2] * t, this.setValues("hsl", e), this
288                }, darken: function (t) {
289                    var e = this.values.hsl;
290                    return e[2] -= e[2] * t, this.setValues("hsl", e), this
291                }, saturate: function (t) {
292                    var e = this.values.hsl;
293                    return e[1] += e[1] * t, this.setValues("hsl", e), this
294                }, desaturate: function (t) {
295                    var e = this.values.hsl;
296                    return e[1] -= e[1] * t, this.setValues("hsl", e), this
297                }, whiten: function (t) {
298                    var e = this.values.hwb;
299                    return e[1] += e[1] * t, this.setValues("hwb", e), this
300                }, blacken: function (t) {
301                    var e = this.values.hwb;
302                    return e[2] += e[2] * t, this.setValues("hwb", e), this
303                }, greyscale: function () {
304                    var t = this.values.rgb, e = .3 * t[0] + .59 * t[1] + .11 * t[2];
305                    return this.setValues("rgb", [e, e, e]), this
306                }, clearer: function (t) {
307                    var e = this.values.alpha;
308                    return this.setValues("alpha", e - e * t), this
309                }, opaquer: function (t) {
310                    var e = this.values.alpha;
311                    return this.setValues("alpha", e + e * t), this
312                }, rotate: function (t) {
313                    var e = this.values.hsl, a = (e[0] + t) % 360;
314                    return e[0] = 0 > a ? 360 + a : a, this.setValues("hsl", e), this
315                }, mix: function (t, e) {
316                    var a = this, i = t, n = void 0 === e ? .5 : e, o = 2 * n - 1, r = a.alpha() - i.alpha(), l = ((o * r === -1 ? o : (o + r) / (1 + o * r)) + 1) / 2, s = 1 - l;
317                    return this.rgb(l * a.red() + s * i.red(), l * a.green() + s * i.green(), l * a.blue() + s * i.blue()).alpha(a.alpha() * n + i.alpha() * (1 - n))
318                }, toJSON: function () {
319                    return this.rgb()
320                }, clone: function () {
321                    var t, e, a = new o, i = this.values, n = a.values;
322                    for (var r in i)i.hasOwnProperty(r) && (t = i[r], e = {}.toString.call(t), "[object Array]" === e ? n[r] = t.slice(0) : "[object Number]" === e ? n[r] = t : console.error("unexpected color value:", t));
323                    return a
324                }
325            }, o.prototype.spaces = {
326                rgb: ["red", "green", "blue"],
327                hsl: ["hue", "saturation", "lightness"],
328                hsv: ["hue", "saturation", "value"],
329                hwb: ["hue", "whiteness", "blackness"],
330                cmyk: ["cyan", "magenta", "yellow", "black"]
331            }, o.prototype.maxes = {
332                rgb: [255, 255, 255],
333                hsl: [360, 100, 100],
334                hsv: [360, 100, 100],
335                hwb: [360, 100, 100],
336                cmyk: [100, 100, 100, 100]
337            }, o.prototype.getValues = function (t) {
338                for (var e = this.values, a = {}, i = 0; i < t.length; i++)a[t.charAt(i)] = e[t][i];
339                return 1 !== e.alpha && (a.a = e.alpha), a
340            }, o.prototype.setValues = function (t, e) {
341                var a, n = this.values, o = this.spaces, r = this.maxes, l = 1;
342                if ("alpha" === t)l = e; else if (e.length)n[t] = e.slice(0, t.length), l = e[t.length]; else if (void 0 !== e[t.charAt(0)]) {
343                    for (a = 0; a < t.length; a++)n[t][a] = e[t.charAt(a)];
344                    l = e.a
345                } else if (void 0 !== e[o[t][0]]) {
346                    var s = o[t];
347                    for (a = 0; a < t.length; a++)n[t][a] = e[s[a]];
348                    l = e.alpha
349                }
350                if (n.alpha = Math.max(0, Math.min(1, void 0 === l ? n.alpha : l)), "alpha" === t)return !1;
351                var d;
352                for (a = 0; a < t.length; a++)d = Math.max(0, Math.min(r[t][a], n[t][a])), n[t][a] = Math.round(d);
353                for (var u in o)u !== t && (n[u] = i[t][u](n[t]));
354                return !0
355            }, o.prototype.setSpace = function (t, e) {
356                var a = e[0];
357                return void 0 === a ? this.getValues(t) : ("number" == typeof a && (a = Array.prototype.slice.call(e)), this.setValues(t, a), this)
358            }, o.prototype.setChannel = function (t, e, a) {
359                var i = this.values[t];
360                return void 0 === a ? i[e] : a === i[e] ? this : (i[e] = a, this.setValues(t, i), this)
361            }, "undefined" != typeof window && (window.Color = o), e.exports = o
362        }, {2: 2, 5: 5}], 4: [function (t, e, a) {
363            function i(t) {
364                var e, a, i, n = t[0] / 255, o = t[1] / 255, r = t[2] / 255, l = Math.min(n, o, r), s = Math.max(n, o, r), d = s - l;
365                return s == l ? e = 0 : n == s ? e = (o - r) / d : o == s ? e = 2 + (r - n) / d : r == s && (e = 4 + (n - o) / d), e = Math.min(60 * e, 360), 0 > e && (e += 360), i = (l + s) / 2, a = s == l ? 0 : .5 >= i ? d / (s + l) : d / (2 - s - l), [e, 100 * a, 100 * i]
366            }
367
368            function n(t) {
369                var e, a, i, n = t[0], o = t[1], r = t[2], l = Math.min(n, o, r), s = Math.max(n, o, r), d = s - l;
370                return a = 0 == s ? 0 : d / s * 1e3 / 10, s == l ? e = 0 : n == s ? e = (o - r) / d : o == s ? e = 2 + (r - n) / d : r == s && (e = 4 + (n - o) / d), e = Math.min(60 * e, 360), 0 > e && (e += 360), i = s / 255 * 1e3 / 10, [e, a, i]
371            }
372
373            function o(t) {
374                var e = t[0], a = t[1], n = t[2], o = i(t)[0], r = 1 / 255 * Math.min(e, Math.min(a, n)), n = 1 - 1 / 255 * Math.max(e, Math.max(a, n));
375                return [o, 100 * r, 100 * n]
376            }
377
378            function l(t) {
379                var e, a, i, n, o = t[0] / 255, r = t[1] / 255, l = t[2] / 255;
380                return n = Math.min(1 - o, 1 - r, 1 - l), e = (1 - o - n) / (1 - n) || 0, a = (1 - r - n) / (1 - n) || 0, i = (1 - l - n) / (1 - n) || 0, [100 * e, 100 * a, 100 * i, 100 * n]
381            }
382
383            function s(t) {
384                return Q[JSON.stringify(t)]
385            }
386
387            function d(t) {
388                var e = t[0] / 255, a = t[1] / 255, i = t[2] / 255;
389                e = e > .04045 ? Math.pow((e + .055) / 1.055, 2.4) : e / 12.92, a = a > .04045 ? Math.pow((a + .055) / 1.055, 2.4) : a / 12.92, i = i > .04045 ? Math.pow((i + .055) / 1.055, 2.4) : i / 12.92;
390                var n = .4124 * e + .3576 * a + .1805 * i, o = .2126 * e + .7152 * a + .0722 * i, r = .0193 * e + .1192 * a + .9505 * i;
391                return [100 * n, 100 * o, 100 * r]
392            }
393
394            function u(t) {
395                var e, a, i, n = d(t), o = n[0], r = n[1], l = n[2];
396                return o /= 95.047, r /= 100, l /= 108.883, o = o > .008856 ? Math.pow(o, 1 / 3) : 7.787 * o + 16 / 116, r = r > .008856 ? Math.pow(r, 1 / 3) : 7.787 * r + 16 / 116, l = l > .008856 ? Math.pow(l, 1 / 3) : 7.787 * l + 16 / 116, e = 116 * r - 16, a = 500 * (o - r), i = 200 * (r - l), [e, a, i]
397            }
398
399            function c(t) {
400                return W(u(t))
401            }
402
403            function h(t) {
404                var e, a, i, n, o, r = t[0] / 360, l = t[1] / 100, s = t[2] / 100;
405                if (0 == l)return o = 255 * s, [o, o, o];
406                a = .5 > s ? s * (1 + l) : s + l - s * l, e = 2 * s - a, n = [0, 0, 0];
407                for (var d = 0; 3 > d; d++)i = r + 1 / 3 * -(d - 1), 0 > i && i++, i > 1 && i--, o = 1 > 6 * i ? e + 6 * (a - e) * i : 1 > 2 * i ? a : 2 > 3 * i ? e + (a - e) * (2 / 3 - i) * 6 : e, n[d] = 255 * o;
408                return n
409            }
410
411            function f(t) {
412                var e, a, i = t[0], n = t[1] / 100, o = t[2] / 100;
413                return 0 === o ? [0, 0, 0] : (o *= 2, n *= 1 >= o ? o : 2 - o, a = (o + n) / 2, e = 2 * n / (o + n), [i, 100 * e, 100 * a])
414            }
415
416            function p(t) {
417                return o(h(t))
418            }
419
420            function m(t) {
421                return l(h(t))
422            }
423
424            function v(t) {
425                return s(h(t))
426            }
427
428            function x(t) {
429                var e = t[0] / 60, a = t[1] / 100, i = t[2] / 100, n = Math.floor(e) % 6, o = e - Math.floor(e), r = 255 * i * (1 - a), l = 255 * i * (1 - a * o), s = 255 * i * (1 - a * (1 - o)), i = 255 * i;
430                switch (n) {
431                    case 0:
432                        return [i, s, r];
433                    case 1:
434                        return [l, i, r];
435                    case 2:
436                        return [r, i, s];
437                    case 3:
438                        return [r, l, i];
439                    case 4:
440                        return [s, r, i];
441                    case 5:
442                        return [i, r, l]
443                }
444            }
445
446            function y(t) {
447                var e, a, i = t[0], n = t[1] / 100, o = t[2] / 100;
448                return a = (2 - n) * o, e = n * o, e /= 1 >= a ? a : 2 - a, e = e || 0, a /= 2, [i, 100 * e, 100 * a]
449            }
450
451            function k(t) {
452                return o(x(t))
453            }
454
455            function S(t) {
456                return l(x(t))
457            }
458
459            function w(t) {
460                return s(x(t))
461            }
462
463            function C(t) {
464                var e, a, i, n, o = t[0] / 360, l = t[1] / 100, s = t[2] / 100, d = l + s;
465                switch (d > 1 && (l /= d, s /= d), e = Math.floor(6 * o), a = 1 - s, i = 6 * o - e, 0 != (1 & e) && (i = 1 - i), n = l + i * (a - l), e) {
466                    default:
467                    case 6:
468                    case 0:
469                        r = a, g = n, b = l;
470                        break;
471                    case 1:
472                        r = n, g = a, b = l;
473                        break;
474                    case 2:
475                        r = l, g = a, b = n;
476                        break;
477                    case 3:
478                        r = l, g = n, b = a;
479                        break;
480                    case 4:
481                        r = n, g = l, b = a;
482                        break;
483                    case 5:
484                        r = a, g = l, b = n
485                }
486                return [255 * r, 255 * g, 255 * b]
487            }
488
489            function M(t) {
490                return i(C(t))
491            }
492
493            function D(t) {
494                return n(C(t))
495            }
496
497            function A(t) {
498                return l(C(t))
499            }
500
501            function I(t) {
502                return s(C(t))
503            }
504
505            function F(t) {
506                var e, a, i, n = t[0] / 100, o = t[1] / 100, r = t[2] / 100, l = t[3] / 100;
507                return e = 1 - Math.min(1, n * (1 - l) + l), a = 1 - Math.min(1, o * (1 - l) + l), i = 1 - Math.min(1, r * (1 - l) + l), [255 * e, 255 * a, 255 * i]
508            }
509
510            function T(t) {
511                return i(F(t))
512            }
513
514            function P(t) {
515                return n(F(t))
516            }
517
518            function _(t) {
519                return o(F(t))
520            }
521
522            function R(t) {
523                return s(F(t))
524            }
525
526            function V(t) {
527                var e, a, i, n = t[0] / 100, o = t[1] / 100, r = t[2] / 100;
528                return e = 3.2406 * n + -1.5372 * o + r * -.4986, a = n * -.9689 + 1.8758 * o + .0415 * r, i = .0557 * n + o * -.204 + 1.057 * r, e = e > .0031308 ? 1.055 * Math.pow(e, 1 / 2.4) - .055 : e = 12.92 * e, a = a > .0031308 ? 1.055 * Math.pow(a, 1 / 2.4) - .055 : a = 12.92 * a, i = i > .0031308 ? 1.055 * Math.pow(i, 1 / 2.4) - .055 : i = 12.92 * i, e = Math.min(Math.max(0, e), 1), a = Math.min(Math.max(0, a), 1), i = Math.min(Math.max(0, i), 1), [255 * e, 255 * a, 255 * i]
529            }
530
531            function O(t) {
532                var e, a, i, n = t[0], o = t[1], r = t[2];
533                return n /= 95.047, o /= 100, r /= 108.883, n = n > .008856 ? Math.pow(n, 1 / 3) : 7.787 * n + 16 / 116, o = o > .008856 ? Math.pow(o, 1 / 3) : 7.787 * o + 16 / 116, r = r > .008856 ? Math.pow(r, 1 / 3) : 7.787 * r + 16 / 116, e = 116 * o - 16, a = 500 * (n - o), i = 200 * (o - r), [e, a, i]
534            }
535
536            function L(t) {
537                return W(O(t))
538            }
539
540            function B(t) {
541                var e, a, i, n, o = t[0], r = t[1], l = t[2];
542                return 8 >= o ? (a = 100 * o / 903.3, n = 7.787 * (a / 100) + 16 / 116) : (a = 100 * Math.pow((o + 16) / 116, 3), n = Math.pow(a / 100, 1 / 3)), e = .008856 >= e / 95.047 ? e = 95.047 * (r / 500 + n - 16 / 116) / 7.787 : 95.047 * Math.pow(r / 500 + n, 3), i = .008859 >= i / 108.883 ? i = 108.883 * (n - l / 200 - 16 / 116) / 7.787 : 108.883 * Math.pow(n - l / 200, 3), [e, a, i]
543            }
544
545            function W(t) {
546                var e, a, i, n = t[0], o = t[1], r = t[2];
547                return e = Math.atan2(r, o), a = 360 * e / 2 / Math.PI, 0 > a && (a += 360), i = Math.sqrt(o * o + r * r), [n, i, a]
548            }
549
550            function z(t) {
551                return V(B(t))
552            }
553
554            function H(t) {
555                var e, a, i, n = t[0], o = t[1], r = t[2];
556                return i = r / 360 * 2 * Math.PI, e = o * Math.cos(i), a = o * Math.sin(i), [n, e, a]
557            }
558
559            function N(t) {
560                return B(H(t))
561            }
562
563            function E(t) {
564                return z(H(t))
565            }
566
567            function U(t) {
568                return G[t]
569            }
570
571            function q(t) {
572                return i(U(t))
573            }
574
575            function j(t) {
576                return n(U(t))
577            }
578
579            function Y(t) {
580                return o(U(t))
581            }
582
583            function J(t) {
584                return l(U(t))
585            }
586
587            function X(t) {
588                return u(U(t))
589            }
590
591            function Z(t) {
592                return d(U(t))
593            }
594
595            e.exports = {
596                rgb2hsl: i,
597                rgb2hsv: n,
598                rgb2hwb: o,
599                rgb2cmyk: l,
600                rgb2keyword: s,
601                rgb2xyz: d,
602                rgb2lab: u,
603                rgb2lch: c,
604                hsl2rgb: h,
605                hsl2hsv: f,
606                hsl2hwb: p,
607                hsl2cmyk: m,
608                hsl2keyword: v,
609                hsv2rgb: x,
610                hsv2hsl: y,
611                hsv2hwb: k,
612                hsv2cmyk: S,
613                hsv2keyword: w,
614                hwb2rgb: C,
615                hwb2hsl: M,
616                hwb2hsv: D,
617                hwb2cmyk: A,
618                hwb2keyword: I,
619                cmyk2rgb: F,
620                cmyk2hsl: T,
621                cmyk2hsv: P,
622                cmyk2hwb: _,
623                cmyk2keyword: R,
624                keyword2rgb: U,
625                keyword2hsl: q,
626                keyword2hsv: j,
627                keyword2hwb: Y,
628                keyword2cmyk: J,
629                keyword2lab: X,
630                keyword2xyz: Z,
631                xyz2rgb: V,
632                xyz2lab: O,
633                xyz2lch: L,
634                lab2xyz: B,
635                lab2rgb: z,
636                lab2lch: W,
637                lch2lab: H,
638                lch2xyz: N,
639                lch2rgb: E
640            };
641            var G = {
642                aliceblue: [240, 248, 255],
643                antiquewhite: [250, 235, 215],
644                aqua: [0, 255, 255],
645                aquamarine: [127, 255, 212],
646                azure: [240, 255, 255],
647                beige: [245, 245, 220],
648                bisque: [255, 228, 196],
649                black: [0, 0, 0],
650                blanchedalmond: [255, 235, 205],
651                blue: [0, 0, 255],
652                blueviolet: [138, 43, 226],
653                brown: [165, 42, 42],
654                burlywood: [222, 184, 135],
655                cadetblue: [95, 158, 160],
656                chartreuse: [127, 255, 0],
657                chocolate: [210, 105, 30],
658                coral: [255, 127, 80],
659                cornflowerblue: [100, 149, 237],
660                cornsilk: [255, 248, 220],
661                crimson: [220, 20, 60],
662                cyan: [0, 255, 255],
663                darkblue: [0, 0, 139],
664                darkcyan: [0, 139, 139],
665                darkgoldenrod: [184, 134, 11],
666                darkgray: [169, 169, 169],
667                darkgreen: [0, 100, 0],
668                darkgrey: [169, 169, 169],
669                darkkhaki: [189, 183, 107],
670                darkmagenta: [139, 0, 139],
671                darkolivegreen: [85, 107, 47],
672                darkorange: [255, 140, 0],
673                darkorchid: [153, 50, 204],
674                darkred: [139, 0, 0],
675                darksalmon: [233, 150, 122],
676                darkseagreen: [143, 188, 143],
677                darkslateblue: [72, 61, 139],
678                darkslategray: [47, 79, 79],
679                darkslategrey: [47, 79, 79],
680                darkturquoise: [0, 206, 209],
681                darkviolet: [148, 0, 211],
682                deeppink: [255, 20, 147],
683                deepskyblue: [0, 191, 255],
684                dimgray: [105, 105, 105],
685                dimgrey: [105, 105, 105],
686                dodgerblue: [30, 144, 255],
687                firebrick: [178, 34, 34],
688                floralwhite: [255, 250, 240],
689                forestgreen: [34, 139, 34],
690                fuchsia: [255, 0, 255],
691                gainsboro: [220, 220, 220],
692                ghostwhite: [248, 248, 255],
693                gold: [255, 215, 0],
694                goldenrod: [218, 165, 32],
695                gray: [128, 128, 128],
696                green: [0, 128, 0],
697                greenyellow: [173, 255, 47],
698                grey: [128, 128, 128],
699                honeydew: [240, 255, 240],
700                hotpink: [255, 105, 180],
701                indianred: [205, 92, 92],
702                indigo: [75, 0, 130],
703                ivory: [255, 255, 240],
704                khaki: [240, 230, 140],
705                lavender: [230, 230, 250],
706                lavenderblush: [255, 240, 245],
707                lawngreen: [124, 252, 0],
708                lemonchiffon: [255, 250, 205],
709                lightblue: [173, 216, 230],
710                lightcoral: [240, 128, 128],
711                lightcyan: [224, 255, 255],
712                lightgoldenrodyellow: [250, 250, 210],
713                lightgray: [211, 211, 211],
714                lightgreen: [144, 238, 144],
715                lightgrey: [211, 211, 211],
716                lightpink: [255, 182, 193],
717                lightsalmon: [255, 160, 122],
718                lightseagreen: [32, 178, 170],
719                lightskyblue: [135, 206, 250],
720                lightslategray: [119, 136, 153],
721                lightslategrey: [119, 136, 153],
722                lightsteelblue: [176, 196, 222],
723                lightyellow: [255, 255, 224],
724                lime: [0, 255, 0],
725                limegreen: [50, 205, 50],
726                linen: [250, 240, 230],
727                magenta: [255, 0, 255],
728                maroon: [128, 0, 0],
729                mediumaquamarine: [102, 205, 170],
730                mediumblue: [0, 0, 205],
731                mediumorchid: [186, 85, 211],
732                mediumpurple: [147, 112, 219],
733                mediumseagreen: [60, 179, 113],
734                mediumslateblue: [123, 104, 238],
735                mediumspringgreen: [0, 250, 154],
736                mediumturquoise: [72, 209, 204],
737                mediumvioletred: [199, 21, 133],
738                midnightblue: [25, 25, 112],
739                mintcream: [245, 255, 250],
740                mistyrose: [255, 228, 225],
741                moccasin: [255, 228, 181],
742                navajowhite: [255, 222, 173],
743                navy: [0, 0, 128],
744                oldlace: [253, 245, 230],
745                olive: [128, 128, 0],
746                olivedrab: [107, 142, 35],
747                orange: [255, 165, 0],
748                orangered: [255, 69, 0],
749                orchid: [218, 112, 214],
750                palegoldenrod: [238, 232, 170],
751                palegreen: [152, 251, 152],
752                paleturquoise: [175, 238, 238],
753                palevioletred: [219, 112, 147],
754                papayawhip: [255, 239, 213],
755                peachpuff: [255, 218, 185],
756                peru: [205, 133, 63],
757                pink: [255, 192, 203],
758                plum: [221, 160, 221],
759                powderblue: [176, 224, 230],
760                purple: [128, 0, 128],
761                rebeccapurple: [102, 51, 153],
762                red: [255, 0, 0],
763                rosybrown: [188, 143, 143],
764                royalblue: [65, 105, 225],
765                saddlebrown: [139, 69, 19],
766                salmon: [250, 128, 114],
767                sandybrown: [244, 164, 96],
768                seagreen: [46, 139, 87],
769                seashell: [255, 245, 238],
770                sienna: [160, 82, 45],
771                silver: [192, 192, 192],
772                skyblue: [135, 206, 235],
773                slateblue: [106, 90, 205],
774                slategray: [112, 128, 144],
775                slategrey: [112, 128, 144],
776                snow: [255, 250, 250],
777                springgreen: [0, 255, 127],
778                steelblue: [70, 130, 180],
779                tan: [210, 180, 140],
780                teal: [0, 128, 128],
781                thistle: [216, 191, 216],
782                tomato: [255, 99, 71],
783                turquoise: [64, 224, 208],
784                violet: [238, 130, 238],
785                wheat: [245, 222, 179],
786                white: [255, 255, 255],
787                whitesmoke: [245, 245, 245],
788                yellow: [255, 255, 0],
789                yellowgreen: [154, 205, 50]
790            }, Q = {};
791            for (var $ in G)Q[JSON.stringify(G[$])] = $
792        }, {}], 5: [function (t, e, a) {
793            var i = t(4), n = function () {
794                return new d
795            };
796            for (var o in i) {
797                n[o + "Raw"] = function (t) {
798                    return function (e) {
799                        return "number" == typeof e && (e = Array.prototype.slice.call(arguments)), i[t](e)
800                    }
801                }(o);
802 
802               var r = /(\w+)2(\w+)/.exec(o), l = r[1], s = r[2];
803                n[l] = n[l] || {}, n[l][s] = n[o] = function (t) {
804                    return function (e) {
805                        "number" == typeof e && (e = Array.prototype.slice.call(arguments));
806                        var a = i[t](e);
807                        if ("string" == typeof a || void 0 === a)return a;
808                        for (var n = 0; n < a.length; n++)a[n] = Math.round(a[n]);
809                        return a
810                    }
811                }(o)
812            }
813            var d = function () {
814                this.convs = {}
815            };
816            d.prototype.routeSpace = function (t, e) {
817                var a = e[0];
818                return void 0 === a ? this.getValues(t) : ("number" == typeof a && (a = Array.prototype.slice.call(e)), this.setValues(t, a))
819            }, d.prototype.setValues = function (t, e) {
820                return this.space = t, this.convs = {}, this.convs[t] = e, this
821            }, d.prototype.getValues = function (t) {
822                var e = this.convs[t];
823                if (!e) {
824                    var a = this.space, i = this.convs[a];
825                    e = n[a][t](i), this.convs[t] = e
826                }
827                return e
828            }, ["rgb", "hsl", "hsv", "cmyk", "keyword"].forEach(function (t) {
829                d.prototype[t] = function (e) {
830                    return this.routeSpace(t, arguments)
831                }
832            }), e.exports = n
833        }, {4: 4}], 6: [function (t, e, a) {
834            e.exports = {
835                aliceblue: [240, 248, 255],
836                antiquewhite: [250, 235, 215],
837                aqua: [0, 255, 255],
838                aquamarine: [127, 255, 212],
839                azure: [240, 255, 255],
840                beige: [245, 245, 220],
841                bisque: [255, 228, 196],
842                black: [0, 0, 0],
843                blanchedalmond: [255, 235, 205],
844                blue: [0, 0, 255],
845                blueviolet: [138, 43, 226],
846                brown: [165, 42, 42],
847                burlywood: [222, 184, 135],
848                cadetblue: [95, 158, 160],
849                chartreuse: [127, 255, 0],
850                chocolate: [210, 105, 30],
851                coral: [255, 127, 80],
852                cornflowerblue: [100, 149, 237],
853                cornsilk: [255, 248, 220],
854                crimson: [220, 20, 60],
855                cyan: [0, 255, 255],
856                darkblue: [0, 0, 139],
857                darkcyan: [0, 139, 139],
858                darkgoldenrod: [184, 134, 11],
859                darkgray: [169, 169, 169],
860                darkgreen: [0, 100, 0],
861                darkgrey: [169, 169, 169],
862                darkkhaki: [189, 183, 107],
863                darkmagenta: [139, 0, 139],
864                darkolivegreen: [85, 107, 47],
865                darkorange: [255, 140, 0],
866                darkorchid: [153, 50, 204],
867                darkred: [139, 0, 0],
868                darksalmon: [233, 150, 122],
869                darkseagreen: [143, 188, 143],
870                darkslateblue: [72, 61, 139],
871                darkslategray: [47, 79, 79],
872                darkslategrey: [47, 79, 79],
873                darkturquoise: [0, 206, 209],
874                darkviolet: [148, 0, 211],
875                deeppink: [255, 20, 147],
876                deepskyblue: [0, 191, 255],
877                dimgray: [105, 105, 105],
878                dimgrey: [105, 105, 105],
879                dodgerblue: [30, 144, 255],
880                firebrick: [178, 34, 34],
881                floralwhite: [255, 250, 240],
882                forestgreen: [34, 139, 34],
883                fuchsia: [255, 0, 255],
884                gainsboro: [220, 220, 220],
885                ghostwhite: [248, 248, 255],
886                gold: [255, 215, 0],
887                goldenrod: [218, 165, 32],
888                gray: [128, 128, 128],
889                green: [0, 128, 0],
890                greenyellow: [173, 255, 47],
891                grey: [128, 128, 128],
892                honeydew: [240, 255, 240],
893                hotpink: [255, 105, 180],
894                indianred: [205, 92, 92],
895                indigo: [75, 0, 130],
896                ivory: [255, 255, 240],
897                khaki: [240, 230, 140],
898                lavender: [230, 230, 250],
899                lavenderblush: [255, 240, 245],
900                lawngreen: [124, 252, 0],
901                lemonchiffon: [255, 250, 205],
902                lightblue: [173, 216, 230],
903                lightcoral: [240, 128, 128],
904                lightcyan: [224, 255, 255],
905                lightgoldenrodyellow: [250, 250, 210],
906                lightgray: [211, 211, 211],
907                lightgreen: [144, 238, 144],
908                lightgrey: [211, 211, 211],
909                lightpink: [255, 182, 193],
910                lightsalmon: [255, 160, 122],
911                lightseagreen: [32, 178, 170],
912                lightskyblue: [135, 206, 250],
913                lightslategray: [119, 136, 153],
914                lightslategrey: [119, 136, 153],
915                lightsteelblue: [176, 196, 222],
916                lightyellow: [255, 255, 224],
917                lime: [0, 255, 0],
918                limegreen: [50, 205, 50],
919                linen: [250, 240, 230],
920                magenta: [255, 0, 255],
921                maroon: [128, 0, 0],
922                mediumaquamarine: [102, 205, 170],
923                mediumblue: [0, 0, 205],
924                mediumorchid: [186, 85, 211],
925                mediumpurple: [147, 112, 219],
926                mediumseagreen: [60, 179, 113],
927                mediumslateblue: [123, 104, 238],
928                mediumspringgreen: [0, 250, 154],
929                mediumturquoise: [72, 209, 204],
930                mediumvioletred: [199, 21, 133],
931                midnightblue: [25, 25, 112],
932                mintcream: [245, 255, 250],
933                mistyrose: [255, 228, 225],
934                moccasin: [255, 228, 181],
935                navajowhite: [255, 222, 173],
936                navy: [0, 0, 128],
937                oldlace: [253, 245, 230],
938                olive: [128, 128, 0],
939                olivedrab: [107, 142, 35],
940                orange: [255, 165, 0],
941                orangered: [255, 69, 0],
942                orchid: [218, 112, 214],
943                palegoldenrod: [238, 232, 170],
944                palegreen: [152, 251, 152],
945                paleturquoise: [175, 238, 238],
946                palevioletred: [219, 112, 147],
947                papayawhip: [255, 239, 213],
948                peachpuff: [255, 218, 185],
949                peru: [205, 133, 63],
950                pink: [255, 192, 203],
951                plum: [221, 160, 221],
952                powderblue: [176, 224, 230],
953                purple: [128, 0, 128],
954                rebeccapurple: [102, 51, 153],
955                red: [255, 0, 0],
956                rosybrown: [188, 143, 143],
957                royalblue: [65, 105, 225],
958                saddlebrown: [139, 69, 19],
959                salmon: [250, 128, 114],
960                sandybrown: [244, 164, 96],
961                seagreen: [46, 139, 87],
962                seashell: [255, 245, 238],
963                sienna: [160, 82, 45],
964                silver: [192, 192, 192],
965                skyblue: [135, 206, 235],
966                slateblue: [106, 90, 205],
967                slategray: [112, 128, 144],
968                slategrey: [112, 128, 144],
969                snow: [255, 250, 250],
970                springgreen: [0, 255, 127],
971                steelblue: [70, 130, 180],
972                tan: [210, 180, 140],
973                teal: [0, 128, 128],
974                thistle: [216, 191, 216],
975                tomato: [255, 99, 71],
976                turquoise: [64, 224, 208],
977                violet: [238, 130, 238],
978                wheat: [245, 222, 179],
979                white: [255, 255, 255],
980                whitesmoke: [245, 245, 245],
981                yellow: [255, 255, 0],
982                yellowgreen: [154, 205, 50]
983            }
984        }, {}], 7: [function (t, e, a) {
985            var i = t(26)();
986            t(25)(i), t(24)(i), t(21)(i), t(22)(i), t(23)(i), t(27)(i), t(31)(i), t(29)(i), t(30)(i), t(32)(i), t(28)(i), t(33)(i), t(34)(i), t(35)(i), t(36)(i), t(37)(i), t(40)(i), t(38)(i), t(39)(i), t(41)(i), t(42)(i), t(43)(i), t(15)(i), t(16)(i), t(17)(i), t(18)(i), t(19)(i), t(20)(i), t(8)(i), t(9)(i), t(10)(i), t(11)(i), t(12)(i), t(13)(i), t(14)(i), window.Chart = e.exports = i
987        }, {
988            10: 10,
989            11: 11,
990            12: 12,
991            13: 13,
992            14: 14,
993            15: 15,
994            16: 16,
995            17: 17,
996            18: 18,
997            19: 19,
998            20: 20,
999            21: 21,
1000            22: 22,
1001            23: 23,
1002            24: 24,
1003            25: 25,
1004            26: 26,
1005            27: 27,
1006            28: 28,
1007            29: 29,
1008            30: 30,
1009            31: 31,
1010            32: 32,
1011            33: 33,
1012            34: 34,
1013            35: 35,
1014            36: 36,
1015            37: 37,
1016            38: 38,
1017            39: 39,
1018            40: 40,
1019            41: 41,
1020            42: 42,
1021            43: 43,
1022            8: 8,
1023            9: 9
1024        }], 8: [function (t, e, a) {
1025            "use strict";
1026            e.exports = function (t) {
1027                t.Bar = function (e, a) {
1028                    return a.type = "bar", new t(e, a)
1029                }
1030            }
1031        }, {}], 9: [function (t, e, a) {
1032            "use strict";
1033            e.exports = function (t) {
1034                t.Bubble = function (e, a) {
1035                    return a.type = "bubble", new t(e, a)
1036                }
1037            }
1038        }, {}], 10: [function (t, e, a) {
1039            "use strict";
1040            e.exports = function (t) {
1041                t.Doughnut = function (e, a) {
1042                    return a.type = "doughnut", new t(e, a)
1043                }
1044            }
1045        }, {}], 11: [function (t, e, a) {
1046            "use strict";
1047            e.exports = function (t) {
1048                t.Line = function (e, a) {
1049                    return a.type = "line", new t(e, a)
1050                }
1051            }
1052        }, {}], 12: [function (t, e, a) {
1053            "use strict";
1054            e.exports = function (t) {
1055                t.PolarArea = function (e, a) {
1056                    return a.type = "polarArea", new t(e, a)
1057                }
1058            }
1059        }, {}], 13: [function (t, e, a) {
1060            "use strict";
1061            e.exports = function (t) {
1062                t.Radar = function (e, a) {
1063                    return a.options = t.helpers.configMerge({aspectRatio: 1}, a.options), a.type = "radar", new t(e, a)
1064                }
1065            }
1066        }, {}], 14: [function (t, e, a) {
1067            "use strict";
1068            e.exports = function (t) {
1069                var e = {
1070                    hover: {mode: "single"},
1071                    scales: {
1072                        xAxes: [{type: "linear", position: "bottom", id: "x-axis-1"}],
1073                        yAxes: [{type: "linear", position: "left", id: "y-axis-1"}]
1074                    },
1075                    tooltips: {
1076                        callbacks: {
1077                            title: function (t, e) {
1078                                return ""
1079                            }, label: function (t, e) {
1080                                return "(" + t.xLabel + ", " + t.yLabel + ")"
1081                            }
1082                        }
1083                    }
1084                };
1085                t.defaults.scatter = e, t.controllers.scatter = t.controllers.line, t.Scatter = function (e, a) {
1086                    return a.type = "scatter", new t(e, a)
1087                }
1088            }
1089        }, {}], 15: [function (t, e, a) {
1090            "use strict";
1091            e.exports = function (t) {
1092                var e = t.helpers;
1093                t.defaults.bar = {
1094                    hover: {mode: "label"},
1095                    scales: {
1096                        xAxes: [{
1097                            type: "category",
1098                            categoryPercentage: .8,
1099                            barPercentage: .9,
1100                            gridLines: {offsetGridLines: !0}
1101                        }], yAxes: [{type: "linear"}]
1102                    }
1103                }, t.controllers.bar = t.DatasetController.extend({
1104                    dataElementType: t.elements.Rectangle,
1105                    initialize: function (e, a) {
1106                        t.DatasetController.prototype.initialize.call(this, e, a), this.getMeta().bar = !0
1107                    },
1108                    getBarCount: function () {
1109                        var t = this, a = 0;
1110                        return e.each(t.chart.data.datasets, function (e, i) {
1111                            var n = t.chart.getDatasetMeta(i);
1112                            n.bar && t.chart.isDatasetVisible(i) && ++a
1113                        }, t), a
1114                    },
1115                    update: function (t) {
1116                        var a = this;
1117                        e.each(a.getMeta().data, function (e, i) {
1118                            a.updateElement(e, i, t)
1119                        }, a)
1120                    },
1121                    updateElement: function (t, a, i) {
1122                        var n = this, o = n.getMeta(), r = n.getScaleForId(o.xAxisID), l = n.getScaleForId(o.yAxisID), s = l.getBasePixel(), d = n.chart.options.elements.rectangle, u = t.custom || {}, c = n.getDataset();
1123                        e.extend(t, {
1124                            _xScale: r,
1125                            _yScale: l,
1126                            _datasetIndex: n.index,
1127                            _index: a,
1128                            _model: {
1129                                x: n.calculateBarX(a, n.index),
1130                                y: i ? s : n.calculateBarY(a, n.index),
1131                                label: n.chart.data.labels[a],
1132                                datasetLabel: c.label,
1133                                base: i ? s : n.calculateBarBase(n.index, a),
1134                                width: n.calculateBarWidth(a),
1135                                backgroundColor: u.backgroundColor ? u.backgroundColor : e.getValueAtIndexOrDefault(c.backgroundColor, a, d.backgroundColor),
1136                                borderSkipped: u.borderSkipped ? u.borderSkipped : d.borderSkipped,
1137                                borderColor: u.borderColor ? u.borderColor : e.getValueAtIndexOrDefault(c.borderColor, a, d.borderColor),
1138                                borderWidth: u.borderWidth ? u.borderWidth : e.getValueAtIndexOrDefault(c.borderWidth, a, d.borderWidth)
1139                            }
1140                        }), t.pivot()
1141                    },
1142                    calculateBarBase: function (t, e) {
1143                        var a = this, i = a.getMeta(), n = a.getScaleForId(i.yAxisID), o = 0;
1144                        if (n.options.stacked) {
1145                            var r = a.chart, l = r.data.datasets, s = l[t].data[e];
1146                            if (0 > s)for (var d = 0; t > d; d++) {
1147                                var u = l[d], c = r.getDatasetMeta(d);
1148                                c.bar && c.yAxisID === n.id && r.isDatasetVisible(d) && (o += u.data[e] < 0 ? u.data[e] : 0)
1149                            } else for (var h = 0; t > h; h++) {
1150                                var f = l[h], g = r.getDatasetMeta(h);
1151                                g.bar && g.yAxisID === n.id && r.isDatasetVisible(h) && (o += f.data[e] > 0 ? f.data[e] : 0)
1152                            }
1153                            return n.getPixelForValue(o)
1154                        }
1155                        return n.getBasePixel()
1156                    },
1157                    getRuler: function (t) {
1158                        var e, a = this, i = a.getMeta(), n = a.getScaleForId(i.xAxisID), o = a.getBarCount();
1159                        e = "category" === n.options.type ? n.getPixelForTick(t + 1) - n.getPixelForTick(t) : n.width / n.ticks.length;
1160                        var r = e * n.options.categoryPercentage, l = (e - e * n.options.categoryPercentage) / 2, s = r / o;
1161                        if (n.ticks.length !== a.chart.data.labels.length) {
1162                            var d = n.ticks.length / a.chart.data.labels.length;
1163                            s *= d
1164                        }
1165                        var u = s * n.options.barPercentage, c = s - s * n.options.barPercentage;
1166                        return {
1167                            datasetCount: o,
1168                            tickWidth: e,
1169                            categoryWidth: r,
1170                            categorySpacing: l,
1171                            fullBarWidth: s,
1172                            barWidth: u,
1173                            barSpacing: c
1174                        }
1175                    },
1176                    calculateBarWidth: function (t) {
1177                        var e = this.getScaleForId(this.getMeta().xAxisID), a = this.getRuler(t);
1178                        return e.options.stacked ? a.categoryWidth : a.barWidth
1179                    },
1180                    getBarIndex: function (t) {
1181                        var e, a, i = 0;
1182                        for (a = 0; t > a; ++a)e = this.chart.getDatasetMeta(a), e.bar && this.chart.isDatasetVisible(a) && ++i;
1183                        return i
1184                    },
1185                    calculateBarX: function (t, e) {
1186                        var a = this, i = a.getMeta(), n = a.getScaleForId(i.xAxisID), o = a.getBarIndex(e), r = a.getRuler(t), l = n.getPixelForValue(null, t, e, a.chart.isCombo);
1187                        return l -= a.chart.isCombo ? r.tickWidth / 2 : 0, n.options.stacked ? l + r.categoryWidth / 2 + r.categorySpacing : l + r.barWidth / 2 + r.categorySpacing + r.barWidth * o + r.barSpacing / 2 + r.barSpacing * o
1188                    },
1189                    calculateBarY: function (t, e) {
1190                        var a = this, i = a.getMeta(), n = a.getScaleForId(i.yAxisID), o = a.getDataset().data[t];
1191                        if (n.options.stacked) {
1192                            for (var r = 0, l = 0, s = 0; e > s; s++) {
1193                                var d = a.chart.data.datasets[s], u = a.chart.getDatasetMeta(s);
1194                                u.bar && u.yAxisID === n.id && a.chart.isDatasetVisible(s) && (d.data[t] < 0 ? l += d.data[t] || 0 : r += d.data[t] || 0)
1195                            }
1196                            return 0 > o ? n.getPixelForValue(l + o) : n.getPixelForValue(r + o)
1197                        }
1198                        return n.getPixelForValue(o)
1199                    },
1200                    draw: function (t) {
1201                        var a = this, i = t || 1;
1202                        e.each(a.getMeta().data, function (t, e) {
1203                            var n = a.getDataset().data[e];
1204                            null === n || void 0 === n || isNaN(n) || t.transition(i).draw()
1205                        }, a)
1206                    },
1207                    setHoverStyle: function (t) {
1208                        var a = this.chart.data.datasets[t._datasetIndex], i = t._index, n = t.custom || {}, o = t._model;
1209                        o.backgroundColor = n.hoverBackgroundColor ? n.hoverBackgroundColor : e.getValueAtIndexOrDefault(a.hoverBackgroundColor, i, e.getHoverColor(o.backgroundColor)), o.borderColor = n.hoverBorderColor ? n.hoverBorderColor : e.getValueAtIndexOrDefault(a.hoverBorderColor, i, e.getHoverColor(o.borderColor)), o.borderWidth = n.hoverBorderWidth ? n.hoverBorderWidth : e.getValueAtIndexOrDefault(a.hoverBorderWidth, i, o.borderWidth)
1210                    },
1211                    removeHoverStyle: function (t) {
1212                        var a = this.chart.data.datasets[t._datasetIndex], i = t._index, n = t.custom || {}, o = t._model, r = this.chart.options.elements.rectangle;
1213                        o.backgroundColor = n.backgroundColor ? n.backgroundColor : e.getValueAtIndexOrDefault(a.backgroundColor, i, r.backgroundColor), o.borderColor = n.borderColor ? n.borderColor : e.getValueAtIndexOrDefault(a.borderColor, i, r.borderColor), o.borderWidth = n.borderWidth ? n.borderWidth : e.getValueAtIndexOrDefault(a.borderWidth, i, r.borderWidth)
1214                    }
1215                }), t.defaults.horizontalBar = {
1216                    hover: {mode: "label"},
1217                    scales: {
1218                        xAxes: [{type: "linear", position: "bottom"}],
1219                        yAxes: [{
1220                            position: "left",
1221                            type: "category",
1222                            categoryPercentage: .8,
1223                            barPercentage: .9,
1224                            gridLines: {offsetGridLines: !0}
1225                        }]
1226                    },
1227                    elements: {rectangle: {borderSkipped: "left"}},
1228                    tooltips: {
1229                        callbacks: {
1230                            title: function (t, e) {
1231                                var a = "";
1232                                return t.length > 0 && (t[0].yLabel ? a = t[0].yLabel : e.labels.length > 0 && t[0].index < e.labels.length && (a = e.labels[t[0].index])), a
1233                            }, label: function (t, e) {
1234                                var a = e.datasets[t.datasetIndex].label || "";
1235                                return a + ": " + t.xLabel
1236                            }
1237                        }
1238                    }
1239                }, t.controllers.horizontalBar = t.controllers.bar.extend({
1240                    updateElement: function (t, a, i, n) {
1241                        var o = this, r = o.getMeta(), l = o.getScaleForId(r.xAxisID), s = o.getScaleForId(r.yAxisID), d = l.getBasePixel(), u = t.custom || {}, c = o.getDataset(), h = o.chart.options.elements.rectangle;
1242                        e.extend(t, {
1243                            _xScale: l,
1244                            _yScale: s,
1245                            _datasetIndex: o.index,
1246                            _index: a,
1247                            _model: {
1248                                x: i ? d : o.calculateBarX(a, o.index),
1249                                y: o.calculateBarY(a, o.index),
1250                                label: o.chart.data.labels[a],
1251                                datasetLabel: c.label,
1252                                base: i ? d : o.calculateBarBase(o.index, a),
1253                                height: o.calculateBarHeight(a),
1254                                backgroundColor: u.backgroundColor ? u.backgroundColor : e.getValueAtIndexOrDefault(c.backgroundColor, a, h.backgroundColor),
1255                                borderSkipped: u.borderSkipped ? u.borderSkipped : h.borderSkipped,
1256                                borderColor: u.borderColor ? u.borderColor : e.getValueAtIndexOrDefault(c.borderColor, a, h.borderColor),
1257                                borderWidth: u.borderWidth ? u.borderWidth : e.getValueAtIndexOrDefault(c.borderWidth, a, h.borderWidth)
1258                            },
1259                            draw: function () {
1260                                function t(t) {
1261                                    return s[(u + t) % 4]
1262                                }
1263
1264                                var e = this._chart.ctx, a = this._view, i = a.height / 2, n = a.y - i, o = a.y + i, r = a.base - (a.base - a.x), l = a.borderWidth / 2;
1265                                a.borderWidth && (n += l, o -= l, r += l), e.beginPath(), e.fillStyle = a.backgroundColor, e.strokeStyle = a.borderColor, e.lineWidth = a.borderWidth;
1266                                var s = [[a.base, o], [a.base, n], [r, n], [r, o]], d = ["bottom", "left", "top", "right"], u = d.indexOf(a.borderSkipped, 0);
1267                                -1 === u && (u = 0), e.moveTo.apply(e, t(0));
1268                                for (var c = 1; 4 > c; c++)e.lineTo.apply(e, t(c));
1269                                e.fill(), a.borderWidth && e.stroke()
1270                            },
1271                            inRange: function (t, e) {
1272                                var a = this._view, i = !1;
1273                                return a && (i = a.x < a.base ? e >= a.y - a.height / 2 && e <= a.y + a.height / 2 && t >= a.x && t <= a.base : e >= a.y - a.height / 2 && e <= a.y + a.height / 2 && t >= a.base && t <= a.x), i
1274                            }
1275                        }), t.pivot()
1276                    }, calculateBarBase: function (t, e) {
1277                        var a = this, i = a.getMeta(), n = a.getScaleForId(i.xAxisID), o = 0;
1278                        if (n.options.stacked) {
1279                            var r = a.chart.data.datasets[t].data[e];
1280                            if (0 > r)for (var l = 0; t > l; l++) {
1281                                var s = a.chart.data.datasets[l], d = a.chart.getDatasetMeta(l);
1282                                d.bar && d.xAxisID === n.id && a.chart.isDatasetVisible(l) && (o += s.data[e] < 0 ? s.data[e] : 0)
1283                            } else for (var u = 0; t > u; u++) {
1284                                var c = a.chart.data.datasets[u], h = a.chart.getDatasetMeta(u);
1285                                h.bar && h.xAxisID === n.id && a.chart.isDatasetVisible(u) && (o += c.data[e] > 0 ? c.data[e] : 0)
1286                            }
1287                            return n.getPixelForValue(o)
1288                        }
1289                        return n.getBasePixel()
1290                    }, getRuler: function (t) {
1291                        var e, a = this, i = a.getMeta(), n = a.getScaleForId(i.yAxisID), o = a.getBarCount();
1292                        e = "category" === n.options.type ? n.getPixelForTick(t + 1) - n.getPixelForTick(t) : n.width / n.ticks.length;
1293                        var r = e * n.options.categoryPercentage, l = (e - e * n.options.categoryPercentage) / 2, s = r / o;
1294                        if (n.ticks.length !== a.chart.data.labels.length) {
1295                            var d = n.ticks.length / a.chart.data.labels.length;
1296                            s *= d
1297                        }
1298                        var u = s * n.options.barPercentage, c = s - s * n.options.barPercentage;
1299                        return {
1300                            datasetCount: o,
1301                            tickHeight: e,
1302                            categoryHeight: r,
1303                            categorySpacing: l,
1304                            fullBarHeight: s,
1305                            barHeight: u,
1306                            barSpacing: c
1307                        }
1308                    }, calculateBarHeight: function (t) {
1309                        var e = this, a = e.getScaleForId(e.getMeta().yAxisID), i = e.getRuler(t);
1310                        return a.options.stacked ? i.categoryHeight : i.barHeight
1311                    }, calculateBarX: function (t, e) {
1312                        var a = this, i = a.getMeta(), n = a.getScaleForId(i.xAxisID), o = a.getDataset().data[t];
1313                        if (n.options.stacked) {
1314                            for (var r = 0, l = 0, s = 0; e > s; s++) {
1315                                var d = a.chart.data.datasets[s], u = a.chart.getDatasetMeta(s);
1316                                u.bar && u.xAxisID === n.id && a.chart.isDatasetVisible(s) && (d.data[t] < 0 ? l += d.data[t] || 0 : r += d.data[t] || 0)
1317                            }
1318                            return 0 > o ? n.getPixelForValue(l + o) : n.getPixelForValue(r + o)
1319                        }
1320                        return n.getPixelForValue(o)
1321                    }, calculateBarY: function (t, e) {
1322                        var a = this, i = a.getMeta(), n = a.getScaleForId(i.yAxisID), o = a.getBarIndex(e), r = a.getRuler(t), l = n.getPixelForValue(null, t, e, a.chart.isCombo);
1323                        return l -= a.chart.isCombo ? r.tickHeight / 2 : 0, n.options.stacked ? l + r.categoryHeight / 2 + r.categorySpacing : l + r.barHeight / 2 + r.categorySpacing + r.barHeight * o + r.barSpacing / 2 + r.barSpacing * o
1324                    }
1325                })
1326            }
1327        }, {}], 16: [function (t, e, a) {
1328            "use strict";
1329            e.exports = function (t) {
1330                var e = t.helpers;
1331                t.defaults.bubble = {
1332                    hover: {mode: "single"},
1333                    scales: {
1334                        xAxes: [{type: "linear", position: "bottom", id: "x-axis-0"}],
1335                        yAxes: [{type: "linear", position: "left", id: "y-axis-0"}]
1336                    },
1337                    tooltips: {
1338                        callbacks: {
1339                            title: function (t, e) {
1340                                return ""
1341                            }, label: function (t, e) {
1342                                var a = e.datasets[t.datasetIndex].label || "", i = e.datasets[t.datasetIndex].data[t.index];
1343                                return a + ": (" + i.x + ", " + i.y + ", " + i.r + ")"
1344                            }
1345                        }
1346                    }
1347                }, t.controllers.bubble = t.DatasetController.extend({
1348                    dataElementType: t.elements.Point,
1349                    update: function (t) {
1350                        var a = this, i = a.getMeta(), n = i.data;
1351                        e.each(n, function (e, i) {
1352                            a.updateElement(e, i, t)
1353                        })
1354                    },
1355                    updateElement: function (a, i, n) {
1356                        var o = this, r = o.getMeta(), l = o.getScaleForId(r.xAxisID), s = o.getScaleForId(r.yAxisID), d = a.custom || {}, u = o.getDataset(), c = u.data[i], h = o.chart.options.elements.point, f = o.index;
1357                        e.extend(a, {
1358                            _xScale: l,
1359                            _yScale: s,
1360                            _datasetIndex: f,
1361                            _index: i,
1362                            _model: {
1363                                x: n ? l.getPixelForDecimal(.5) : l.getPixelForValue(c, i, f, o.chart.isCombo),
1364                                y: n ? s.getBasePixel() : s.getPixelForValue(c, i, f),
1365                                radius: n ? 0 : d.radius ? d.radius : o.getRadius(c),
1366                                hitRadius: d.hitRadius ? d.hitRadius : e.getValueAtIndexOrDefault(u.hitRadius, i, h.hitRadius)
1367                            }
1368                        }), t.DatasetController.prototype.removeHoverStyle.call(o, a, h);
1369                        var g = a._model;
1370                        g.skip = d.skip ? d.skip : isNaN(g.x) || isNaN(g.y), a.pivot()
1371                    },
1372                    getRadius: function (t) {
1373                        return t.r || this.chart.options.elements.point.radius
1374                    },
1375                    setHoverStyle: function (a) {
1376                        var i = this;
1377                        t.DatasetController.prototype.setHoverStyle.call(i, a);
1378                        var n = i.chart.data.datasets[a._datasetIndex], o = a._index, r = a.
1378custom || {}, l = a._model;
1379                        l.radius = r.hoverRadius ? r.hoverRadius : e.getValueAtIndexOrDefault(n.hoverRadius, o, i.chart.options.elements.point.hoverRadius) + i.getRadius(n.data[o])
1380                    },
1381                    removeHoverStyle: function (e) {
1382                        var a = this;
1383                        t.DatasetController.prototype.removeHoverStyle.call(a, e, a.chart.options.elements.point);
1384                        var i = a.chart.data.datasets[e._datasetIndex].data[e._index], n = e.custom || {}, o = e._model;
1385                        o.radius = n.radius ? n.radius : a.getRadius(i)
1386                    }
1387                })
1388            }
1389        }, {}], 17: [function (t, e, a) {
1390            "use strict";
1391            e.exports = function (t) {
1392                var e = t.helpers, a = t.defaults;
1393                a.doughnut = {
1394                    animation: {animateRotate: !0, animateScale: !1},
1395                    aspectRatio: 1,
1396                    hover: {mode: "single"},
1397                    legendCallback: function (t) {
1398                        var e = [];
1399                        e.push('<ul class="' + t.id + '-legend">');
1400                        var a = t.data, i = a.datasets, n = a.labels;
1401                        if (i.length)for (var o = 0; o < i[0].data.length; ++o)e.push('<li><span style="background-color:' + i[0].backgroundColor[o] + '"></span>'), n[o] && e.push(n[o]), e.push("</li>");
1402                        return e.push("</ul>"), e.join("")
1403                    },
1404                    legend: {
1405                        labels: {
1406                            generateLabels: function (t) {
1407                                var a = t.data;
1408                                return a.labels.length && a.datasets.length ? a.labels.map(function (i, n) {
1409                                    var o = t.getDatasetMeta(0), r = a.datasets[0], l = o.data[n], s = l.custom || {}, d = e.getValueAtIndexOrDefault, u = t.options.elements.arc, c = s.backgroundColor ? s.backgroundColor : d(r.backgroundColor, n, u.backgroundColor), h = s.borderColor ? s.borderColor : d(r.borderColor, n, u.borderColor), f = s.borderWidth ? s.borderWidth : d(r.borderWidth, n, u.borderWidth);
1410                                    return {
1411                                        text: i,
1412                                        fillStyle: c,
1413                                        strokeStyle: h,
1414                                        lineWidth: f,
1415                                        hidden: isNaN(r.data[n]) || o.data[n].hidden,
1416                                        index: n
1417                                    }
1418                                }) : []
1419                            }
1420                        }, onClick: function (t, e) {
1421                            var a, i, n, o = e.index, r = this.chart;
1422                            for (a = 0, i = (r.data.datasets || []).length; i > a; ++a)n = r.getDatasetMeta(a), n.data[o].hidden = !n.data[o].hidden;
1423                            r.update()
1424                        }
1425                    },
1426                    cutoutPercentage: 50,
1427                    rotation: Math.PI * -.5,
1428                    circumference: 2 * Math.PI,
1429                    tooltips: {
1430                        callbacks: {
1431                            title: function () {
1432                                return ""
1433                            }, label: function (t, e) {
1434                                return e.labels[t.index] + ": " + e.datasets[t.datasetIndex].data[t.index]
1435                            }
1436                        }
1437                    }
1438                }, a.pie = e.clone(a.doughnut), e.extend(a.pie, {cutoutPercentage: 0}), t.controllers.doughnut = t.controllers.pie = t.DatasetController.extend({
1439                    dataElementType: t.elements.Arc,
1440                    linkScales: e.noop,
1441                    getRingIndex: function (t) {
1442                        for (var e = 0, a = 0; t > a; ++a)this.chart.isDatasetVisible(a) && ++e;
1443                        return e
1444                    },
1445                    update: function (t) {
1446                        var a = this, i = a.chart, n = i.chartArea, o = i.options, r = o.elements.ar
1446c, l = n.right - n.left - r.borderWidth, s = n.bottom - n.top - r.borderWidth, d = Math.min(l, s), u = {
1447                            x: 0,
1448                            y: 0
1449                        }, c = a.getMeta(), h = o.cutoutPercentage, f = o.circumference;
1450                        if (f < 2 * Math.PI) {
1451                            var g = o.rotation % (2 * Math.PI);
1452                            g += 2 * Math.PI * (g >= Math.PI ? -1 : g < -Math.PI ? 1 : 0);
1453                            var p = g + f, m = {x: Math.cos(g), y: Math.sin(g)}, b = {
1454                                x: Math.cos(p),
1455                                y: Math.sin(p)
1456                            }, v = 0 >= g && p >= 0 || g <= 2 * Math.PI && 2 * Math.PI <= p, x = g <= .5 * Math.PI && .5 * Math.PI <= p || g <= 2.5 * Math.PI && 2.5 * Math.PI <= p, y = g <= -Math.PI && -Math.PI <= p || g <= Math.PI && Math.PI <= p, k = g <= .5 * -Math.PI && .5 * -Math.PI <= p || g <= 1.5 * Math.PI && 1.5 * Math.PI <= p, S = h / 100, w = {
1457                                x: y ? -1 : Math.min(m.x * (m.x < 0 ? 1 : S), b.x * (b.x < 0 ? 1 : S)),
1458                                y: k ? -1 : Math.min(m.y * (m.y < 0 ? 1 : S), b.y * (b.y < 0 ? 1 : S))
1459                            }, C = {
1460                                x: v ? 1 : Math.max(m.x * (m.x > 0 ? 1 : S), b.x * (b.x > 0 ? 1 : S)),
1461                                y: x ? 1 : Math.max(m.y * (m.y > 0 ? 1 : S), b.y * (b.y > 0 ? 1 : S))
1462                            }, M = {width: .5 * (C.x - w.x), height: .5 * (C.y - w.y)};
1463                            d = Math.min(l / M.width, s / M.height), u = {x: (C.x + w.x) * -.5, y: (C.y + w.y) * -.5}
1464                        }
1465                        i.outerRadius = Math.max(d / 2, 0), i.innerRadius = Math.max(h ? i.outerRadius / 100 * h : 1, 0), i.radiusLength = (i.outerRadius - i.innerRadius) / i.getVisibleDatasetCount(), i.offsetX = u.x * i.outerRadius, i.offsetY = u.y * i.outerRadius, c.total = a.calculateTotal(), a.outerRadius = i.outerRadius - i.radiusLength * a.getRingIndex(a.index), a.innerRadius = a.outerRadius - i.radiusLength, e.each(c.data, function (e, i) {
1466                            a.updateElement(e, i, t)
1467                        })
1468                    },
1469                    updateElement: function (t, a, i) {
1470                        var n = this, o = n.chart, r = o.chartArea, l = o.options, s = l.animation, d = (l.elements.arc, (r.left + r.right) / 2), u = (r.top + r.bottom) / 2, c = l.rotation, h = l.rotation, f = n.getDataset(), g = i && s.animateRotate ? 0 : t.hidden ? 0 : n.calculateCircumference(f.data[a]) * (l.circumference / (2 * Math.PI)), p = i && s.animateScale ? 0 : n.innerRadius, m = i && s.animateScale ? 0 : n.outerRadius, b = (t.custom || {}, e.getValueAtIndexOrDefault);
1471                        e.extend(t, {
1472                            _datasetIndex: n.index,
1473                            _index: a,
1474                            _model: {
1475                                x: d + o.offsetX,
1476                                y: u + o.offsetY,
1477                                startAngle: c,
1478                                endAngle: h,
1479                                circumference: g,
1480                                outerRadius: m,
1481                                innerRadius: p,
1482                                label: b(f.label, a, o.data.labels[a])
1483                            }
1484                        });
1485                        var v = t._model;
1486                        this.removeHoverStyle(t), i && s.animateRotate || (0 === a ? v.startAngle = l.rotation : v.startAngle = n.getMeta().data[a - 1]._model.endAngle, v.endAngle = v.startAngle + v.circumference), t.pivot()
1487                    },
1488                    removeHoverStyle: function (e) {
1489                        t.DatasetController.prototype.removeHoverStyle.call(this, e, this.chart.options.elements.arc)
1490                    },
1491                    calculateTotal: function () {
1492                        var t, a = this.getDataset(), i = this.getMeta(), n = 0;
1493                        return e.each(i.data, function (e, i) {
1494                            t = a.data[i], isNaN(t) || e.hidden || (n += Math.abs(t))
1495                        }), n
1496                    },
1497                    calculateCircumference: function (t) {
1498                        var e = this.getMeta().total;
1499                        return e > 0 && !isNaN(t) ? 2 * Math.PI * (t / e) : 0
1500                    }
1501                })
1502            }
1503        }, {}], 18: [function (t, e, a) {
1504            "use strict";
1505            e.exports = function (t) {
1506                function e(t, e) {
1507                    return a.getValueOrDefault(t.showLine, e.showLines)
1508                }
1509
1510                var a = t.helpers;
1511                t.defaults.line = {
1512                    showLines: !0,
1513                    hover: {mode: "label"},
1514                    scales: {xAxes: [{type: "category", id: "x-axis-0"}], yAxes: [{type: "linear", id: "y-axis-0"}]}
1515                }, t.controllers.line = t.DatasetController.extend({
1516                    datasetElementType: t.elements.Line,
1517                    dataElementType: t.elements.Point,
1518                    addElementAndReset: function (a) {
1519                        var i = this, n = i.chart.options, o = i.getMeta();
1520                        t.DatasetController.prototype.addElementAndReset.call(i, a), e(i.getDataset(), n) && 0 !== o.dataset._model.tension && i.updateBezierControlPoints()
1521                    },
1522                    update: function (t) {
1523                        var i, n, o, r = this, l = r.getMeta(), s = l.dataset, d = l.data || [], u = r.chart.options, c = u.elements.line, h = r.getScaleForId(l.yAxisID), f = r.getDataset(), g = e(f, u);
1524                        for (g && (o = s.custom || {}, void 0 !== f.tension && void 0 === f.lineTension && (f.lineTension = f.tension), s._scale = h, s._datasetIndex = r.index, s._children = d, s._model = {
1525                            spanGaps: f.spanGaps ? f.spanGaps : !1,
1526                            tension: o.tension ? o.tension : a.getValueOrDefault(f.lineTension, c.tension),
1527                            backgroundColor: o.backgroundColor ? o.backgroundColor : f.backgroundColor || c.backgroundColor,
1528                            borderWidth: o.borderWidth ? o.borderWidth : f.borderWidth || c.borderWidth,
1529                            borderColor: o.borderColor ? o.borderColor : f.borderColor || c.borderColor,
1530                            borderCapStyle: o.borderCapStyle ? o.borderCapStyle : f.borderCapStyle || c.borderCapStyle,
1531                            borderDash: o.borderDash ? o.borderDash : f.borderDash || c.borderDash,
1532                            borderDashOffset: o.borderDashOffset ? o.borderDashOffset : f.borderDashOffset || c.borderDashOffset,
1533                            borderJoinStyle: o.borderJoinStyle ? o.borderJoinStyle : f.borderJoinStyle || c.borderJoinStyle,
1534                            fill: o.fill ? o.fill : void 0 !== f.fill ? f.fill : c.fill,
1535                            scaleTop: h.top,
1536                            scaleBottom: h.bottom,
1537                            scaleZero: h.getBasePixel()
1538                        }, s.pivot()), i = 0, n = d.length; n > i; ++i)r.updateElement(d[i], i, t);
1539                        for (g && 0 !== s._model.tension && r.updateBezierControlPoints(), i = 0, n = d.length; n > i; ++i)d[i].pivot()
1540                    },
vendor: 2,301 bytes, lines 1541-1561
1541                    getPointBackgroundColor: function (t, e) {
1542                        var i = this.chart.options.elements.point.backgroundColor, n = this.getDataset(), o = t.custom || {};
1543                        return o.backgroundColor ? i = o.backgroundColor : n.pointBackgroundColor ? i = a.getValueAtIndexOrDefault(n.pointBackgroundColor, e, i) : n.backgroundColor && (i = n.backgroundColor), i
1544                    },
1545                    getPointBorderColor: function (t, e) {
1546                        var i = this.chart.options.elements.point.borderColor, n = this.getDataset(), o = t.custom || {};
1547                        return o.borderColor ? i = o.borderColor : n.pointBorderColor ? i = a.getValueAtIndexOrDefault(n.pointBorderColor, e, i) : n.borderColor && (i = n.borderColor), i
1548                    },
1549                    getPointBorderWidth: function (t, e) {
1550                        var i = this.chart.options.elements.point.borderWidth, n = this.getDataset(), o = t.custom || {};
1551                        return o.borderWidth ? i = o.borderWidth : n.pointBorderWidth ? i = a.getValueAtIndexOrDefault(n.pointBorderWidth, e, i) : n.borderWidth && (i = n.borderWidth), i
1552                    },
1553                    updateElement: function (t, e, i) {
1554                        var n, o, r = this, l = r.getMeta(), s = t.custom || {}, d = r.getDataset(), u = r.index, c = d.data[e], h = r.getScaleForId(l.yAxisID), f = r.getScaleForId(l.xAxisID), g = r.chart.options.elements.point;
1555                        void 0 !== d.radius && void 0 === d.pointRadius && (d.pointRadius = d.radius), void 0 !== d.hitRadius && void 0 === d.pointHitRadius && (d.pointHitRadius = d.hitRadius), n = f.getPixelForValue(c, e, u, r.chart.isCombo), o = i ? h.getBasePixel() : r.calculatePointY(c, e, u, r.chart.isCombo), t._xScale = f, t._yScale = h, t._datasetIndex = u, t._index = e, t._model = {
1556                            x: n,
1557                            y: o,
1558                            skip: s.skip || isNaN(n) || isNaN(o),
1559                            radius: s.radius || a.getValueAtIndexOrDefault(d.pointRadius, e, g.radius),
1560                            pointStyle: s.pointStyle || a.getValueAtIndexOrDefault(d.pointStyle, e, g.pointStyle),
1561                            backgroundColor: r.getPointBackgroun
1561dColor(t, e),
1562                            borderColor: r.getPointBorderColor(t, e),
1563                            borderWidth: r.getPointBorderWidth(t, e),
1564                            tension: l.dataset._model ? l.dataset._model.tension : 0,
1565                            hitRadius: s.hitRadius || a.getValueAtIndexOrDefault(d.pointHitRadius, e, g.hitRadius)
1566                        }
1567                    },
1568                    calculatePointY: function (t, e, a, i) {
1569                        var n, o, r, l = this, s = l.chart, d = l.getMeta(), u = l.getScaleForId(d.yAxisID), c = 0, h = 0;
1570                        if (u.options.stacked) {
1571                            for (n = 0; a > n; n++)o = s.data.datasets[n], r = s.getDatasetMeta(n), "line" === r.type && s.isDatasetVisible(n) && (o.data[e] < 0 ? h += o.data[e] || 0 : c += o.data[e] || 0);
1572                            return 0 > t ? u.getPixelForValue(h + t) : u.getPixelForValue(c + t)
1573                        }
1574                        return u.getPixelForValue(t)
1575                    },
1576                    updateBezierControlPoints: function () {
1577                        var t, e, i, n, o, r = this.getMeta(), l = (this.chart.chartArea, r.data || []);
1578                        for (t = 0, e = l.length; e > t; ++t)i = l[t], n = i._model, o = a.splineCurve(a.previousItem(l, t)._model, n, a.nextItem(l, t)._model, r.dataset._model.tension), n.controlPointPreviousX = o.previous.x, n.controlPointPreviousY = o.previous.y, n.controlPointNextX = o.next.x, n.controlPointNextY = o.next.y
1579                    },
1580                    draw: function (t) {
1581                        var a, i, n = this, o = n.getMeta(), r = o.data || [], l = t || 1;
1582                        for (a = 0, i = r.length; i > a; ++a)r[a].transition(l);
1583                        for (e(n.getDataset(), n.chart.options) && o.dataset.transition(l).draw(), a = 0, i = r.length; i > a; ++a)r[a].draw()
1584                    },
1585                    setHoverStyle: function (t) {
1586                        var e = this.chart.data.datasets[t._datasetIndex], i = t._index, n = t.custom || {}, o = t._model;
1587                        o.radius = n.hoverRadius || a.getValueAtIndexOrDefault(e.pointHoverRadius, i, this.chart.options.elements.point.hoverRadius), o.backgroundColor = n.hoverBackgroundColor || a.getValueAtIndexOrDefault(e.pointHoverBackgroundColor, i, a.getHoverColor(o.backgroundColor)), o.borderColor = n.hoverBorderColor || a.getValueAtIndexOrDefault(e.pointHoverBorderColor, i, a.getHoverColor(o.borderColor)), o.borderWidth = n.hoverBorderWidth || a.getValueAtIndexOrDefault(e.pointHoverBorderWidth, i, o.borderWidth)
1588                    },
1589                    removeHoverStyle: function (t) {
1590                        var e = this, i = e.chart.data.datasets[t._datasetIndex], n = t._index, o = t.custom || {}, r = t._model;
1591                        void 0 !== i.radius && void 0 === i.pointRadius && (i.pointRadius = i.radius), r.radius = o.radius || a.getValueAtIndexOrDefault(i.pointRadius, n, e.chart.options.elements.point.radius), r.backgroundColor = e.getPointBackgroun
1591dColor(t, n), r.borderColor = e.getPointBorderColor(t, n), r.borderWidth = e.getPointBorderWidth(t, n)
1592                    }
1593                })
1594            }
1595        }, {}], 19: [function (t, e, a) {
1596            "use strict";
1597            e.exports = function (t) {
1598                var e = t.helpers;
1599                t.defaults.polarArea = {
1600                    scale: {type: "radialLinear", lineArc: !0},
1601                    animation: {animateRotate: !0, animateScale: !0},
1602                    aspectRatio: 1,
1603                    legendCallback: function (t) {
1604                        var e = [];
1605                        e.push('<ul class="' + t.id + '-legend">');
1606                        var a = t.data, i = a.datasets, n = a.labels;
1607                        if (i.length)for (var o = 0; o < i[0].data.length; ++o)e.push('<li><span style="background-color:' + i[0].backgroundColor[o] + '">'), n[o] && e.push(n[o]), e.push("</span></li>");
1608                        return e.push("</ul>"), e.join("")
1609                    },
1610                    legend: {
1611                        labels: {
1612                            generateLabels: function (t) {
1613                                var a = t.data;
1614                                return a.labels.length && a.datasets.length ? a.labels.map(function (i, n) {
1615                                    var o = t.getDatasetMeta(0), r = a.datasets[0], l = o.data[n], s = l.custom || {}, d = e.getValueAtIndexOrDefault, u = t.options.elements.arc, c = s.backgroundColor ? s.backgroundColor : d(r.backgroundColor, n, u.backgroundColor), h = s.borderColor ? s.borderColor : d(r.borderColor, n, u.borderColor), f = s.borderWidth ? s.borderWidth : d(r.borderWidth, n, u.borderWidth);
1616                                    return {
1617                                        text: i,
1618                                        fillStyle: c,
1619                                        strokeStyle: h,
1620                                        lineWidth: f,
1621                                        hidden: isNaN(r.data[n]) || o.data[n].hidden,
1622                                        index: n
1623                                    }
1624                                }) : []
1625                            }
1626                        }, onClick: function (t, e) {
1627                            var a, i, n, o = e.index, r = this.chart;
1628                            for (a = 0, i = (r.data.datasets || []).length; i > a; ++a)n = r.getDatasetMeta(a), n.data[o].hidden = !n.data[o].hidden;
1629                            r.update()
1630                        }
1631                    },
1632                    tooltips: {
1633                        callbacks: {
1634                            title: function () {
1635                                return ""
1636                            }, label: function (t, e) {
1637                                return e.labels[t.index] + ": " + t.yLabel
1638                            }
1639                        }
1640                    }
1641                }, t.controllers.polarArea = t.DatasetController.extend({
1642                    dataElementType: t.elements.Arc,
1643                    linkScales: e.noop,
1644                    update: function (t) {
1645                        var a = this, i = a.chart, n = i.chartArea, o = a.getMeta(), r = i.options, l = r.elements.arc, s = Math.min(n.right - n.left, n.bottom - n.top);
1646                        i.outerRadius = Math.max((s - l.borderWidth / 2) / 2, 0), i.innerRadius = Math.max(r.cutoutPercentage ? i.outerRadius / 100 * r.cutoutPercentage : 1, 0), i.radiusLength = (i.outerRadius - i.innerRadius) / i.getVisibleDatasetCount(), a.outerRadius = i.outerRadius - i.radiusLength * a.index, a.innerRadius = a.outerRadius - i.radiusLength, o.count = a.countVisibleElements(), e.each(o.data, function (e, i) {
1647                            a.updateElement(e, i, t)
1648                        })
1649                    },
1650                    updateElement: function (t, a, i) {
1651                        for (var n = this, o = n.chart, r = o.chartArea, l = n.getDataset(), s = o.options, d = s.animation, u = (s.elements.arc, t.custom || {}, o.scale), c = e.getValueAtIndexOrDefault, h = o.data.labels, f = n.calculateCircumference(l.data[a]), g = (r.left + r.right) / 2, p = (r.top + r.bottom) / 2, m = 0, b = n.getMeta(), v = 0; a > v; ++v)isNaN(l.data[v]) || b.data[v].hidden || ++m;
1652                        var x = -.5 * Math.PI, y = t.hidden ? 0 : u.getDistanceFromCenterForValue(l.data[a]), k = x + f * m, S = k + (t.hidden ? 0 : f), w = d.animateScale ? 0 : u.getDistanceFromCenterForValue(l.data[a]);
1653                        e.extend(t, {
1654                            _datasetIndex: n.index,
1655                            _index: a,
1656                            _scale: u,
1657                            _model: {
1658                                x: g,
1659                                y: p,
1660                                innerRadius: 0,
1661                                outerRadius: i ? w : y,
1662                                startAngle: i && d.animateRotate ? x : k,
1663                                endAngle: i && d.animateRotate ? x : S,
1664                                label: c(h, a, h[a])
1665                            }
1666                        }), n.removeHoverStyle(t), t.pivot()
1667                    },
1668                    removeHoverStyle: function (e) {
1669                        t.DatasetController.prototype.removeHoverStyle.call(this, e, this.chart.options.elements.ar
vendor: 4,191 bytes, lines 1669-1732
1669c)
1670                    },
1671                    countVisibleElements: function () {
1672                        var t = this.getDataset(), a = this.getMeta(), i = 0;
1673                        return e.each(a.data, function (e, a) {
1674                            isNaN(t.data[a]) || e.hidden || i++
1675                        }), i
1676                    },
1677                    calculateCircumference: function (t) {
1678                        var e = this.getMeta().count;
1679                        return e > 0 && !isNaN(t) ? 2 * Math.PI / e : 0
1680                    }
1681                })
1682            }
1683        }, {}], 20: [function (t, e, a) {
1684            "use strict";
1685            e.exports = function (t) {
1686                var e = t.helpers;
1687                t.defaults.radar = {
1688                    scale: {type: "radialLinear"},
1689                    elements: {line: {tension: 0}}
1690                }, t.controllers.radar = t.DatasetController.extend({
1691                    datasetElementType: t.elements.Line,
1692                    dataElementType: t.elements.Point,
1693                    linkScales: e.noop,
1694                    addElementAndReset: function (e) {
1695                        t.DatasetController.prototype.addElementAndReset.call(this, e), this.updateBezierControlPoints()
1696                    },
1697                    update: function (t) {
1698                        var a = this, i = a.getMeta(), n = i.dataset, o = i.data, r = n.custom || {}, l = a.getDataset(), s = a.chart.options.elements.line, d = a.chart.scale;
1699                        void 0 !== l.tension && void 0 === l.lineTension && (l.lineTension = l.tension), e.extend(i.dataset, {
1700                            _datasetIndex: a.index,
1701                            _children: o,
1702                            _loop: !0,
1703                            _model: {
1704                                tension: r.tension ? r.tension : e.getValueOrDefault(l.lineTension, s.tension),
1705                                backgroundColor: r.backgroundColor ? r.backgroundColor : l.backgroundColor || s.backgroundColor,
1706                                borderWidth: r.borderWidth ? r.borderWidth : l.borderWidth || s.borderWidth,
1707                                borderColor: r.borderColor ? r.borderColor : l.borderColor || s.borderColor,
1708                                fill: r.fill ? r.fill : void 0 !== l.fill ? l.fill : s.fill,
1709                                borderCapStyle: r.borderCapStyle ? r.borderCapStyle : l.borderCapStyle || s.borderCapStyle,
1710                                borderDash: r.borderDash ? r.borderDash : l.borderDash || s.borderDash,
1711                                borderDashOffset: r.borderDashOffset ? r.borderDashOffset : l.borderDashOffset || s.borderDashOffset,
1712                                borderJoinStyle: r.borderJoinStyle ? r.borderJoinStyle : l.borderJoinStyle || s.borderJoinStyle,
1713                                scaleTop: d.top,
1714                                scaleBottom: d.bottom,
1715                                scaleZero: d.getBasePosition()
1716                            }
1717                        }), i.dataset.pivot(), e.each(o, function (e, i) {
1718                            a.updateElement(e, i, t)
1719                        }, a), a.updateBezierControlPoints()
1720                    },
1721                    updateElement: function (t, a, i) {
1722                        var n = this, o = t.custom || {}, r = n.getDataset(), l = n.chart.scale, s = n.chart.options.elements.point, d = l.getPointPositionForValue(a, r.data[a]);
1723                        e.extend(t, {
1724                            _datasetIndex: n.index,
1725                            _index: a,
1726                            _scale: l,
1727                            _model: {
1728                                x: i ? l.xCenter : d.x,
1729                                y: i ? l.yCenter : d.y,
1730                                tension: o.tension ? o.tension : e.getValueOrDefault(r.tension, n.chart.options.elements.line.tension),
1731                                radius: o.radius ? o.radius : e.getValueAtIndexOrDefault(r.pointRadius, a, s.radius),
1732                                backgroundColor: o.backgroundColor ? o.backgroundColor : e.getValueAtIndexOrDefault(r.pointBackgroun
1732dColor, a, s.backgroundColor),
1733                                borderColor: o.borderColor ? o.borderColor : e.getValueAtIndexOrDefault(r.pointBorderColor, a, s.borderColor),
1734                                borderWidth: o.borderWidth ? o.borderWidth : e.getValueAtIndexOrDefault(r.pointBorderWidth, a, s.borderWidth),
1735                                pointStyle: o.pointStyle ? o.pointStyle : e.getValueAtIndexOrDefault(r.pointStyle, a, s.pointStyle),
1736                                hitRadius: o.hitRadius ? o.hitRadius : e.getValueAtIndexOrDefault(r.hitRadius, a, s.hitRadius)
1737                            }
1738                        }), t._model.skip = o.skip ? o.skip : isNaN(t._model.x) || isNaN(t._model.y)
1739                    },
1740                    updateBezierControlPoints: function () {
1741                        var t = this.chart.chartArea, a = this.getMeta();
1742                        e.each(a.data, function (i, n) {
1743                            var o = i._model, r = e.splineCurve(e.previousItem(a.data, n, !0)._model, o, e.nextItem(a.data, n, !0)._model, o.tension);
1744                            o.controlPointPreviousX = Math.max(Math.min(r.previous.x, t.right), t.left), o.controlPointPreviousY = Math.max(Math.min(r.previous.y, t.bottom), t.top), o.controlPointNextX = Math.max(Math.min(r.next.x, t.right), t.left), o.controlPointNextY = Math.max(Math.min(r.next.y, t.bottom), t.top), i.pivot()
1745                        })
1746                    },
1747                    draw: function (t) {
1748                        var a = this.getMeta(), i = t || 1;
1749                        e.each(a.data, function (t, e) {
1750                            t.transition(i)
1751                        }), a.dataset.transition(i).draw(), e.each(a.data, function (t) {
1752                            t.draw()
1753                        })
1754                    },
1755                    setHoverStyle: function (t) {
1756                        var a = this.chart.data.datasets[t._datasetIndex], i = t.custom || {}, n = t._index, o = t._model;
1757                        o.radius = i.hoverRadius ? i.hoverRadius : e.getValueAtIndexOrDefault(a.pointHoverRadius, n, this.chart.options.elements.point.hoverRadius), o.backgroundColor = i.hoverBackgroundColor ? i.hoverBackgroundColor : e.getValueAtIndexOrDefault(a.pointHoverBackgroundColor, n, e.getHoverColor(o.backgroundColor)), o.borderColor = i.hoverBorderColor ? i.hoverBorderColor : e.getValueAtIndexOrDefault(a.pointHoverBorderColor, n, e.getHoverColor(o.borderColor)), o.borderWidth = i.hoverBorderWidth ? i.hoverBorderWidth : e.getValueAtIndexOrDefault(a.pointHoverBorderWidth, n, o.borderWidth)
1758                    },
1759                    removeHoverStyle: function (t) {
1760                        var a = this.chart.data.datasets[t._datasetIndex], i = t.custom || {}, n = t._index, o = t._model, r = this.chart.options.elements.point;
1761                        o.radius = i.radius ? i.radius : e.getValueAtIndexOrDefault(a.radius, n, r.radius), o.backgroundColor = i.backgroundColor ? i.backgroundColor : e.getValueAtIndexOrDefault(a.pointBackgroun
1761dColor, n, r.backgroundColor), o.borderColor = i.borderColor ? i.borderColor : e.getValueAtIndexOrDefault(a.pointBorderColor, n, r.borderColor), o.borderWidth = i.borderWidth ? i.borderWidth : e.getValueAtIndexOrDefault(a.pointBorderWidth, n, r.borderWidth)
1762                    }
1763                })
1764            }
1765        }, {}], 21: [function (t, e, a) {
1766            "use strict";
1767            e.exports = function (t) {
1768                var e = t.helpers;
1769                t.defaults.global.animation = {
1770                    duration: 1e3,
1771                    easing: "easeOutQuart",
1772                    onProgress: e.noop,
1773                    onComplete: e.noop
1774                }, t.Animation = t.Element.extend({
1775                    currentStep: null,
1776                    numSteps: 60,
1777                    easing: "",
1778                    render: null,
1779                    onAnimationProgress: null,
1780                    onAnimationComplete: null
1781                }), t.animationService = {
1782                    frameDuration: 17,
1783                    animations: [],
1784                    dropFrames: 0,
1785                    request: null,
1786                    addAnimation: function (t, e, a, i) {
1787                        var n = this;
1788                        i || (t.animating = !0);
1789                        for (var o = 0; o < n.animations.length; ++o)if (n.animations[o].chartInstance === t)return void(n.animations[o].animationObject = e);
1790                        n.animations.push({
1791                            chartInstance: t,
1792                            animationObject: e
1793                        }), 1 === n.animations.length && n.requestAnimationFrame()
1794                    },
1795                    cancelAnimation: function (t) {
1796                        var a = e.findIndex(this.animations, function (e) {
1797                            return e.chartInstance === t
1798                        });
1799                        -1 !== a && (this.animations.splice(a, 1), t.animating = !1)
1800                    },
1801                    requestAnimationFrame: function () {
1802                        var t = this;
1803                        null === t.request && (t.request = e.requestAnimFrame.call(window, function () {
1804                            t.request = null, t.startDigest()
1805                        }))
1806                    },
1807                    startDigest: function () {
1808                        var t = this, e = Date.now(), a = 0;
1809                        t.dropFrames > 1 && (a = Math.floor(t.dropFrames), t.dropFrames = t.dropFrames % 1);
1810                        for (var i = 0; i < t.animations.length;)null === t.animations[i].animationObject.currentStep && (t.animations[i].animationObject.currentStep = 0), t.animations[i].animationObject.currentStep += 1 + a, t.animations[i].animationObject.currentStep > t.animations[i].animationObject.numSteps && (t.animations[i].animationObject.currentStep = t.animations[i].animationObject.numSteps), t.animations[i].animationObject.render(t.animations[i].chartInstance, t.animations[i].animationObject), t.animations[i].animationObject.onAnimationProgress && t.animations[i].animationObject.onAnimationProgress.call && t.animations[i].animationObject.onAnimationProgress.call(t.animations[i].chartInstance, t.animations[i]), t.animations[i].animationObject.currentStep === t.animations[i].animationObject.numSteps ? (t.animations[i].animationObject.onAnimationComplete && t.animations[i].animationObject.onAnimationComplete.call && t.animations[i].animationObject.onAnimationComplete.call(t.animations[i].chartInstance, t.animations[i]), t.animations[i].chartInstance.animating = !1, t.animations.splice(i, 1)) : ++i;
1811                        var n = Date.now(), o = (n - e) / t.frameDuration;
1812                        t.dropFrames += o, t.animations.length > 0 && t.requestAnimationFrame()
1813                    }
1814                }
1815            }
1816        }, {}], 22: [function (t, e, a) {
1817            "use strict";
1818            e.exports = function (t) {
1819                var e = t.helpers;
1820                t.types = {}, t.instances = {}, t.controllers = {}, t.Controller = function (a) {
1821                    return this.chart = a, this.config = a.config, this.options = this.config.options = e.configMerge(t.defaults.global, t.defaults[this.config.type], this.config.options || {}), this.id = e.uid(), Object.defineProperty(this, "data", {
1822                        get: function () {
1823                            return this.config.data
1824                        }
1825                    }), t.instances[this.id] = this, this.options.responsive && this.resize(!0), this.initialize(), this
1826                }, e.extend(t.Controller.prototype, {
1827                    initialize: function () {
1828                        var e = this;
1829                        return t.plugins.notify("beforeInit", [e]), e.bindEvents(), e.ensureScalesHaveIDs(), e.buildOrUpdateControllers(), e.buildScales(), e.updateLayout(), e.resetElements(), e.initToolTip(), e.update(
1829), t.plugins.notify("afterInit", [e]), e
1830                    }, clear: function () {
1831                        return e.clear(this.chart), this
1832                    }, stop: function () {
1833                        return t.animationService.cancelAnimation(this), this
1834                    }, resize: function (a) {
1835                        var i = this, n = i.chart, o = n.canvas, r = e.getMaximumWidth(o), l = n.aspectRatio, s = i.options.maintainAspectRatio && isNaN(l) === !1 && isFinite(l) && 0 !== l ? r / l : e.getMaximumHeight(o), d = n.width !== r || n.height !== s;
1836                        if (!d)return i;
1837                        o.width = n.width = r, o.height = n.height = s, e.retinaScale(n);
1838                        var u = {width: r, height: s};
1839                        return t.plugins.notify("resize", [i, u]), i.options.onResize && i.options.onResize(i, u), a || (i.stop(), i.update(i.options.responsiveAnimationDuration)), i
1840                    }, ensureScalesHaveIDs: function () {
1841                        var t = this.options, a = t.scales || {}, i = t.scale;
1842                        e.each(a.xAxes, function (t, e) {
1843                            t.id = t.id || "x-axis-" + e
1844                        }), e.each(a.yAxes, function (t, e) {
1845                            t.id = t.id || "y-axis-" + e
1846                        }), i && (i.id = i.id || "scale")
1847                    }, buildScales: function () {
1848                        var a = this, i = a.options, n = a.scales = {}, o = [];
1849                        i.scales && (o = o.concat((i.scales.xAxes || []).map(function (t) {
1850                            return {options: t, dtype: "category"}
1851                        }), (i.scales.yAxes || []).map(function (t) {
1852                            return {options: t, dtype: "linear"}
1853                        }))), i.scale && o.push({
1854                            options: i.scale,
1855                            dtype: "radialLinear",
1856                            isDefault: !0
1857                        }), e.each(o, function (i, o) {
1858                            var r = i.options, l = e.getValueOrDefault(r.type, i.dtype), s = t.scaleService.getScaleConstructor(l);
1859                            if (s) {
1860                                var d = new s({id: r.id, options: r, ctx: a.chart.ctx, chart: a});
1861                                n[d.id] = d, i.isDefault && (a.scale = d)
1862                            }
1863                        }), t.scaleService.addScalesToLayout(this)
1864                    }, updateLayout: function () {
1865                        t.layoutService.update(this, this.chart.width, this.chart.height)
1866                    }, buildOrUpdateControllers: function () {
1867                        var a = this, i = [], n = [];
1868                        if (e.each(a.data.datasets, function (e, o) {
1869                                var r = a.getDatasetMeta(o);
1870                                r.type || (r.type = e.type || a.config.type), i.push(r.type), r.controller ? r.controller.updateIndex(o) : (r.controller = new t.controllers[r.type](a, o), n.push(r.controller))
1871                            }, a), i.length > 1)for (var o = 1; o < i.length; o++)if (i[o] !== i[o - 1]) {
1872                            a.isCombo = !0;
1873                            break
1874                        }
1875                        return n
1876                    }, resetElements: function () {
1877                        var t = this;
1878                        e.each(t.data.datasets, function (e, a) {
1879                            t.getDatasetMeta(a).controller.reset()
1880                        }, t)
1881                    }, update: function (a, i) {
1882                        var n = this;
1883                        t.plugins.notify("beforeUpdate", [n]), n.tooltip._data = n.data;
1884                        var o = n.buildOrUpdateControllers();
1885                        e.each(n.data.datasets, function (t, e) {
1886                            n.getDatasetMeta(e).controller.buildOrUpdateElements()
1887                        }, n), t.layoutService.update(n, n.chart.width, n.chart.height), t.plugins.notify("afterScaleUpdate", [n]), e.each(o, function (t) {
1888                            t.reset()
1889                        }), n.updateDatasets(), t.plugins.notify("afterUpdate", [n]), n.render(a, i)
1890                    }, updateDatasets: function () {
1891                        var e, a, i = this;
1892                        if (t.plugins.notify("beforeDatasetsUpdate", [i])) {
1893                            for (e = 0, a = i.data.datasets.length; a > e;
1893 ++e)i.getDatasetMeta(e).controller.update();
1894                            t.plugins.notify("afterDatasetsUpdate", [i])
1895                        }
1896                    }, render: function (a, i) {
1897                        var n = this;
1898                        t.plugins.notify("beforeRender", [n]);
1899                        var o = n.options.animation;
1900                        if (o && ("undefined" != typeof a && 0 !== a || "undefined" == typeof a && 0 !== o.duration)) {
1901                            var r = new t.Animation;
1902                            r.numSteps = (a || o.duration) / 16.66, r.easing = o.easing, r.render = function (t, a) {
1903                                var i = e.easingEffects[a.easing], n = a.currentStep / a.numSteps, o = i(n);
1904                                t.draw(o, n, a.currentStep)
1905                            }, r.onAnimationProgress = o.onProgress, r.onAnimationComplete = o.onComplete, t.animationService.addAnimation(n, r, a, i)
1906                        } else n.draw(), o && o.onComplete && o.onComplete.call && o.onComplete.call(n);
1907                        return n
1908                    }, draw: function (a) {
1909                        var i = this, n = a || 1;
1910                        i.clear(), t.plugins.notify("beforeDraw", [i, n]), e.each(i.boxes, function (t) {
1911                            t.draw(i.chartArea)
1912                        }, i), i.scale && i.scale.draw(), t.plugins.notify("beforeDatasetsDraw", [i, n]), e.each(i.data.datasets, function (t, e) {
1913                            i.isDatasetVisible(e) && i.getDatasetMeta(e).controller.draw(a)
1914                        }, i, !0), t.plugins.notify("afterDatasetsDraw", [i, n]), i.tooltip.transition(n).draw(), t.plugins.notify("afterDraw", [i, n])
1915                    }, getElementAtEvent: function (t) {
1916                        var a = this, i = e.getRelativePosition(t, a.chart), n = [];
1917                        return e.each(a.data.datasets, function (t, o) {
1918                            if (a.isDatasetVisible(o)) {
1919                                var r = a.getDatasetMeta(o);
1920                                e.each(r.data, function (t, e) {
1921                                    return t.inRange(i.x, i.y) ? (n.push(t), n) : void 0
1922                                })
1923                            }
1924                        }), n
1925                    }, getElementsAtEvent: function (t) {
1926                        var a = this, i = e.getRelativePosition(t, a.chart), n = [], o = function () {
1927                            if (a.data.datasets)for (var t = 0; t < a.data.datasets.length; t++) {
1928                                var e = a.getDatasetMeta(t);
1929                                if (a.isDatasetVisible(t))for (var n = 0; n < e.data.length; n++)if (e.data[n].inRange(i.x, i.y))return e.data[n]
1930                            }
1931                        }.call(a);
1932                        return o ? (e.each(a.data.datasets, function (t, e) {
1933                            if (a.isDatasetVisible(e)) {
1934                                var i = a.getDatasetMeta(e);
1935                                n.push(i.data[o._index])
1936                            }
1937                        }, a), n) : n
1938                    }, getElementsAtEventForMode: function (t, e) {
1939                        var a = this;
1940                        switch (e) {
1941                            case"single":
1942                                return a.getElementAtEvent(t);
1943                            case"label":
1944                                return a.getElementsAtEvent(t);
1945                            case"dataset":
1946                                return a.getDatasetAtEvent(t);
1947                            default:
1948                                return t
1949                        }
1950                    }, getDatasetAtEvent: function (t) {
1951                        var e = this.getElementAtEvent(t);
1952                        return e.length > 0 && (e = this.getDatasetMeta(e[0]._datasetIndex).data), e
1953                    }, getDatasetMeta: function (t) {
1954                        var e = this, a = e.data.datasets[t];
1955                        a._meta || (a._meta = {});
1956                        var i = a._meta[e.id];
1957                        return i || (i = a._meta[e.id] = {
1958                            type: null,
1959                            data: [],
1960                            dataset: null,
1961                            controller: null,
1962                            hidden: null,
1963                            xAxisID: null,
1964                            yAxisID: null
1965                        }), i
1966                    }, getVisibleDatasetCount: function () {
1967                        for (var t = 0, e = 0, a = this.data.datasets.length; a > e; ++e)this.isDatasetVisible(e) && t++;
1968                        return t
1969                    }, isDatasetVisible: function (t) {
1970                        var e = this.getDatasetMeta(t);
1971                        return "boolean" == typeof e.hidden ? !e.hidden : !this.data.datasets[t].hidden
1972                    }, generateLegend: function () {
1973                        return this.options.legendCallback(this)
1974                    }, destroy: function () {
1975                        var a = this;
1976                        a.stop(), a.clear(), e.unbindEvents(a, a.events), e.removeResizeListener(a.chart.canvas.parentNode);
1977                        var i = a.chart.canvas;
1978                        i.width = a.chart.width, i.height = a.chart.height, void 0 !== a.chart.originalDevicePixelRatio && a.chart.ctx.scale(1 / a.chart.originalDevicePixelRatio, 1 / a.chart.originalDevicePixelRatio), i.style.width = a.chart.originalCanvasStyleWidth, i.style.height = a.chart.originalCanvasStyleHeight, t.plugins.notify("destroy", [a]), delete t.instances[a.id]
1979                    }, toBase64Image: function () {
1980                        return this.chart.canvas.toDataURL.apply(this.chart.canvas, arguments)
1981                    }, initToolTip: function () {
1982                        var e = this;
1983                        e.tooltip = new t.Tooltip({
1984                            _chart: e.chart,
1985                            _chartInstance: e,
1986                            _data: e.data,
1987                            _options: e.options.tooltips
1988                        }, e)
1989                    }, bindEvents: function () {
1990                        var t = this;
1991                        e.bindEvents(t, t.options.events, function (e) {
1992                            t.eventHandler(e)
1993                        })
1994                    }, updateHoverStyle: function (t, e, a) {
1995                        var i, n, o, r = a ? "setHoverStyle" : "removeHoverStyle";
1996                        switch (e) {
1997                            case"single":
1998                                t = [t[0]];
1999                                break;
2000                            case"label":
2001                            case"dataset":
2002                                break;
2003                            default:
2004                                return
2005                        }
2006                        for (n = 0, o = t.length; o > n; ++n)i = t[n], i && this.getDatasetMeta(i._datasetIndex).controller[r](i)
2007                    }, eventHandler: function (t) {
2008                        var a = this, i = a.tooltip, n = a.options || {}, o = n.hover, r = n.tooltips;
2009                        return a.lastActive = a.lastActive || [], a.lastTooltipActive = a.lastTooltipActive || [], "mouseout" === t.type ? (a.active = [], a.tooltipActive = []) : (a.active = a.getElementsAtEventForMode(t, o.mode), a.tooltipActive = a.getElementsAtEventForMode(t, r.mode)), o.onHover && o.onHover.call(a, a.active), ("mouseup" === t.type || "click" === t.type) && (n.onClick && n.onClick.call(a, t, a.active), a.legend && a.legend.handleEvent && a.legend.handleEvent(t)), a.lastActive.length && a.updateHoverStyle(a.lastActive, o.mode, !1), a.active.length && o.mode && a.updateHoverStyle(a.active, o.mode, !0), (r.enabled || r.custom) && (i.initialize(), i._active = a.tooltipActive, i.update(!0)), i.pivot(), a.animating || e.arrayEquals(a.active, a.lastActive) && e.arrayEquals(a.tooltipActive, a.lastTooltipActive) || (a.stop(), (r.enabled || r.custom) && i.update(!0), a.render(o.animationDuration, !0)), a.lastActive = a.active, a.lastTooltipActive = a.tooltipActive, a
2010                    }
2011                })
2012            }
2013        }, {}], 23: [function (t, e, a) {
2014            "use strict";
2015            e.exports = function (t) {
2016                var e = t.helpers, a = e.noop;
2017                t.DatasetController = function (t, e) {
2018                    this.initialize.call(this, t, e)
2019                }, e.extend(t.DatasetController.prototype, {
2020                    datasetElementType: null, dataElementType: null, initialize: function (t, e) {
2021                        var a = this;
2022                        a.chart = t, a.index = e, a.linkScales(), a.addElements()
2023                    }, updateIndex: function (t) {
2024                        this.index = t
2025                    }, linkScales: function () {
2026                        var t = this, e = t.getMeta(), a = t.getDataset();
2027                        null === e.xAxisID && (e.xAxisID = a.xAxisID || t.chart.options.scales.xAxes[0].id), null === e.yAxisID && (e.yAxisID = a.yAxisID || t.chart.options.scales.yAxes[0].id);
2028                    }, getDataset: function () {
2029                        return this.chart.data.datasets[this.index]
2030                    }, getMeta: function () {
2031                        return this.chart.getDatasetMeta(this.index)
2032                    }, getScaleForId: function (t) {
2033                        return this.chart.scales[t]
2034                    }, reset: function () {
2035                        this.update(!0)
2036                    }, createMetaDataset: function () {
2037                        var t = this, e = t.datasetElementType;
2038                        return e && new e({_chart: t.chart.chart, _datasetIndex: t.index})
2039                    }, createMetaData: function (t) {
2040                        var e = this, a = e.dataElementType;
2041                        return a && new a({_chart: e.chart.chart, _datasetIndex: e.index, _index: t})
2042                    }, addElements: function () {
2043                        var t, e, a = this, i = a.getMeta(), n = a.getDataset().data || [], o = i.data;
2044                        for (t = 0, e = n.length; e > t; ++t)o[t] = o[t] || a.createMetaData(i, t);
2045                        i.dataset = i.dataset || a.createMetaDataset()
2046                    }, addElementAndReset: function (t) {
2047                        var e = this, a = e.createMetaData(t);
2048                        e.getMeta().data.splice(t, 0, a), e.updateElement(a, t, !0)
2049                    }, buildOrUpdateElements: function () {
2050                        var t = this.getMeta(), e = t.data, a = this.getDataset().data.length, i = e.length;
2051                        if (i > a)e.splice(a, i - a); else if (a > i)for (var n = i; a > n; ++n)this.addElementAndReset(n)
2052                    }, update: a, draw: function (t) {
2053                        var a = t || 1;
2054                        e.each(this.getMeta().data, function (t, e) {
2055                            t.transition(a).draw()
2056                        })
2057                    }, removeHoverStyle: function (t, a) {
2058                        var i = this.chart.data.datasets[t._datasetIndex], n = t._index, o = t.custom || {}, r = e.getValueAtIndexOrDefault, l = (e.color, t._model);
2059                        l.backgroundColor = o.backgroundColor ? o.backgroundColor : r(i.backgroundColor, n, a.backgroundColor), l.borderColor = o.borderColor ? o.borderColor : r(i.borderColor, n, a.borderColor), l.borderWidth = o.borderWidth ? o.borderWidth : r(i.borderWidth, n, a.borderWidth)
2060                    }, setHoverStyle: function (t) {
2061                        var a = this.chart.data.datasets[t._datasetIndex], i = t._index, n = t.custom || {}, o = e.getValueAtIndexOrDefault, r = (e.color, e.getHoverColor), l = t._model;
2062                        l.backgroundColor = n.hoverBackgroundColor ? n.hoverBackgroundColor : o(a.hoverBackgroundColor, i, r(l.backgroundColor)), l.borderColor = n.hoverBorderColor ? n.hoverBorderColor : o(a.hoverBorderColor, i, r(l.borderColor)), l.borderWidth = n.hoverBorderWidth ? n.hoverBorderWidth : o(a.hoverBorderWidth, i, l.borderWidth)
2063                    }
2064                }), t.DatasetController.extend = e.inherits
2065            }
2066        }, {}], 24: [function (t, e, a) {
2067            "use strict";
2068            e.exports = function (t) {
2069                var e = t.helpers;
2070                t.elements = {}, t.Element = function (t) {
2071                    e.extend(this, t), this.initialize.apply(this, arguments)
2072                }, e.extend(t.Element.prototype, {
2073                    initialize: function () {
2074                        this.hidden = !1
2075                    }, pivot: function () {
2076                        var t = this;
2077                        return t._view || (t._view = e.clone(t._model)), t._start = e.clone(t._view), t
2078                    }, transition: function (t) {
2079                        var a = this;
2080                        return a._view || (a._view = e.clone(a._model)), 1 === t ? (a._view = a._model, a._start = null, a) : (a._start || a.pivot(), e.each(a._model, function (i, n) {
2081                            if ("_" === n[0]); else if (a._view.hasOwnProperty(n))if (i === a._view[n]); else if ("string" == typeof i)try {
2082                                var o = e.color(a._model[n]).mix(e.color(a._start[n]), t);
2083                                a._view[n] = o.rgbString()
2084                            } catch (r) {
2085                                a._view[n] = i
2086                            } else if ("number" == typeof i) {
2087                                var l = void 0 !== a._start[n] && isNaN(a._start[n]) === !1 ? a._start[n] : 0;
2088                                a._view[n] = (a._model[n] - l) * t + l
2089                            } else a._view[n] = i; else"number" != typeof i || isNaN(a._view[n]) ? a._view[n] = i : a._view[n] = i * t
2090                        }, a), a)
2091                    }, tooltipPosition: function () {
2092                        return {x: this._model.x, y: this._model.y}
2093                    }, hasValue: function () {
2094                        return e.isNumber(this._model.x) && e.isNumber(this._model.y)
2095                    }
2096                }), t.Element.extend = e.inherits
2097            }
2098        }, {}], 25: [function (t, e, a) {
2099            "use strict";
2100            var i = t(3);
2101            e.exports = function (t) {
2102                function e(t, e, a) {
2103                    var i;
2104                    return "string" == typeof t ? (i = parseInt(t, 10), -1 != t.indexOf("%") && (i = i / 100 * e.parentNode[a])) : i = t, i
2105                }
2106
2107                function a(t) {
2108                    return void 0 !== t && null !== t && "none" !== t
2109                }
2110
2111                function n(t, i, n) {
2112                    var o = document.defaultView, r = t.parentNode, l = o.getComputedStyle(t)[i], s = o.getComputedStyle(r)[i], d = a(l), u = a(s), c = Number.POSITIVE_INFINITY;
2113                    return d || u ? Math.min(d ? e(l, t, n) : c, u ? e(s, r, n) : c) : "none"
2114                }
2115
2116                var o = t.helpers = {};
2117                o.each = function (t, e, a, i) {
2118                    var n, r;
2119                    if (o.isArray(t))if (r = t.length, i)for (n = r - 1; n >= 0; n--)e.call(a, t[n], n); else for (n = 0; r > n; n++)e.call(a, t[n], n); else if ("object" == typeof t) {
2120                        var l = Object.keys(t);
2121                        for (r = l.length, n = 0; r > n; n++)e.call(a, t[l[n]], l[n])
2122                    }
2123                }, o.clone = function (t) {
2124                    var e = {};
2125                    return o.each(t, function (t, a) {
2126                        o.isArray(t) ? e[a] = t.slice(0) : "object" == typeof t && null !== t ? e[a] = o.clone(t) : e[a] = t
2127                    }), e
2128                }, o.extend = function (t) {
2129                    for (var e = function (e, a) {
2130                        t[a] = e
2131                    }, a = 1, i = arguments.length; i > a; a++)o.each(arguments[a], e);
2132                    return t
2133                }, o.configMerge = function (e) {
2134                    var a = o.clone(e);
2135                    return o.each(Array.prototype.slice.call(arguments, 1), function (e) {
2136                        o.each(e, function (e, i) {
2137                            if ("scales" === i)a[i] = o.scaleMerge(a.hasOwnProperty(i) ? a[i] : {}, e); else if ("scale" === i)a[i] = o.configMerge(a.hasOwnProperty(i) ? a[i] : {}, t.scaleService.getScaleDefaults(e.type), e); else if (a.hasOwnProperty(i) && o.isArray(a[i]) && o.isArray(e)) {
2138                                var n = a[i];
2139                                o.each(e, function (t, e) {
2140                                    e < n.length ? "object" == typeof n[e] && null !== n[e] && "object" == typeof t && null !== t ? n[e] = o.configMerge(n[e], t) : n[e] = t : n.push(t)
2141                                })
2142                            } else a.hasOwnProperty(i) && "object" == typeof a[i] && null !== a[i] && "object" == typeof e ? a[i] = o.configMerge(a[i], e) : a[i] = e
2143                        })
2144                    }), a
2145                }, o.scaleMerge = function (e, a) {
2146                    var i = o.clone(e);
2147                    return o.each(a, function (e, a) {
2148                        "xAxes" === a || "yAxes" === a ? i.hasOwnProperty(a) ? o.each(e, function (e, n) {
2149                            var r = o.getValueOrDefault(e.type, "xAxes" === a ? "category" : "linear"), l = t.scaleService.getScaleDefaults(r);
2150                            n >= i[a].length || !i[a][n].type ? i[a].push(o.configMerge(l, e)) : e.type && e.type !== i[a][n].type ? i[a][n] = o.configMerge(i[a][n], l, e) : i[a][n] = o.configMerge(i[a][n], e)
2151                        }) : (i[a] = [], o.each(e, function (e) {
2152                            var n = o.getValueOrDefault(e.type, "xAxes" === a ? "category" : "linear");
2153                            i[a].push(o.configMerge(t.scaleService.getScaleDefaults(n), e))
2154                        })) : i.hasOwnProperty(a) && "object" == typeof i[a] && null !== i[a] && "object" == typeof e ? i[a] = o.configMerge(i[a], e) : i[a] = e
2155                    }), i
2156                }, o.getValueAtIndexOrDefault = function (t, e, a) {
2157                    return void 0 === t || null === t ? a : o.isArray(t) ? e < t.length ? t[e] : a : t
2158                }, o.getValueOrDefault = function (t, e) {
2159                    return void 0 === t ? e : t
2160                }, o.indexOf = Array.prototype.indexOf ? function (t, e) {
2161                    return t.indexOf(e)
2162                } : function (t, e) {
2163                    for (var a = 0, i = t.length; i > a; ++a)if (t[a] === e)return a;
2164                    return -1
2165                }, o.where = function (t, e) {
2166                    if (o.isArray(t) && Array.prototype.filter)return t.filter(e);
2167                    var a = [];
2168                    return o.each(t, function (t) {
2169                        e(t) && a.push(t)
2170                    }), a
2171                }, o.findIndex = Array.prototype.findIndex ? function (t, e, a) {
2172                    return t.findIndex(e, a)
2173                } : function (t, e, a) {
2174                    a = void 0 === a ? t : a;
2175                    for (var i = 0, n = t.length; n > i; ++i)if (e.call(a, t[i], i, t))return i;
2176                    return -1
2177                }, o.findNextWhere = function (t, e, a) {
2178                    (void 0 === a || null === a) && (a = -1);
2179                    for (var i = a + 1; i < t.length; i++) {
2180                        var n = t[i];
2181                        if (e(n))return n
2182                    }
2183                }, o.findPreviousWhere = function (t, e, a) {
2184                    (void 0 === a || null === a) && (a = t.length);
2185                    for (var i = a - 1; i >= 0; i--) {
2186                        var n = t[i];
2187                        if (e(n))return n
2188                    }
2189                }, o.inherits = function (t) {
2190                    var e = this, a = t && t.hasOwnProperty("constructor") ? t.constructor : function () {
2191                        return e.apply(this, arguments)
2192                    }, i = function () {
2193                        this.constructor = a
2194                    };
2195                    return i.prototype = e.prototype, a.prototype = new i, a.extend = o.inherits, t && o.extend(a.prototype, t), a.__super__ = e.prototype, a
2196                }, o.noop = function () {
2197                }, o.uid = function () {
2198                    var t = 0;
2199                    return function () {
2200                        return t++
2201                    }
2202                }(), o.isNumber = function (t) {
2203                    return !isNaN(parseFloat(t)) && isFinite(t)
2204                }, o.almostEquals = function (t, e, a) {
2205                    return Math.abs(t - e) < a
2206                }, o.max = function (t) {
2207                    return t.reduce(function (t, e) {
2208                        return isNaN(e) ? t : Math.max(t, e)
2209                    }, Number.NEGATIVE_INFINITY)
2210                }, o.min = function (t) {
2211                    return t.reduce(function (t, e) {
2212                        return isNaN(e) ? t : Math.min(t, e)
2213                    }, Number.POSITIVE_INFINITY)
2214                }, o.sign = Math.sign ? function (t) {
2215                    return Math.sign(t)
2216                } : function (t) {
2217                    return t = +t, 0 === t || isNaN(t) ? t : t > 0 ? 1 : -1
2218                }, o.log10 = Math.log10 ? function (t) {
2219                    return Math.log10(t)
2220                } : function (t) {
2221                    return Math.log(t) / Math.LN10
2222                }, o.toRadians = function (t) {
2223                    return t * (Math.PI / 180)
2224                }, o.toDegrees = function (t) {
2225                    return t * (180 / Math.PI)
2226                }, o.getAngleFromPoint = function (t, e) {
2227                    var a = e.x - t.x, i = e.y - t.y, n = Math.sqrt(a * a + i * i), o = Math.atan2(i, a);
2228                    return o < -.5 * Math.PI && (o += 2 * Math.PI), {angle: o, distance: n}
2229                }, o.aliasPixel = function (t) {
2230                    return t % 2 === 0 ? 0 : .5
2231                }, o.splineCurve = function (t, e, a, i) {
2232                    var n = t.skip ? e : t, o = e, r = a.skip ? e : a, l = Math.sqrt(Math.pow(o.x - n.x, 2) + Math.pow(o.y - n.y, 2)), s = Math.sqrt(Math.pow(r.x - o.x, 2) + Math.pow(r.y - o.y, 2)), d = l / (l + s), u = s / (l + s);
2233                    d = isNaN(d) ? 0 : d, u = isNaN(u) ? 0 : u;
2234                    var c = i * d, h = i * u;
2235                    return {
2236                        previous: {x: o.x - c * (r.x - n.x), y: o.y - c * (r.y - n.y)},
2237                        next: {x: o.x + h * (r.x - n.x), y: o.y + h * (r.y - n.y)}
2238                    }
2239                }, o.nextItem = function (t, e, a) {
2240                    return a ? e >= t.length - 1 ? t[0] : t[e + 1] : e >= t.length - 1 ? t[t.length - 1] : t[e + 1]
2241                }, o.previousItem = function (t, e, a) {
2242                    return a ? 0 >= e ? t[t.length - 1] : t[e - 1] : 0 >= e ? t[0] : t[e - 1]
2243                }, o.niceNum = function (t, e) {
2244                    var a, i = Math.floor(o.log10(t)), n = t / Math.pow(10, i);
2245                    return a = e ? 1.5 > n ? 1 : 3 > n ? 2 : 7 > n ? 5 : 10 : 1 >= n ? 1 : 2 >= n ? 2 : 5 >= n ? 5 : 10, a * Math.pow(10, i)
2246                };
2247                var r = o.easingEffects = {
2248                    linear: function (t) {
2249                        return t
2250                    }, easeInQuad: function (t) {
2251                        return t * t
2252                    }, easeOutQuad: function (t) {
2253                        return -1 * t * (t - 2)
2254                    }, easeInOutQuad: function (t) {
2255                        return (t /= .5) < 1 ? .5 * t * t : -0.5 * (--t * (t - 2) - 1)
2256                    }, easeInCubic: function (t) {
2257                        return t * t * t
2258                    }, easeOutCubic: function (t) {
2259                        return 1 * ((t = t / 1 - 1) * t * t + 1)
2260                    }, easeInOutCubic: function (t) {
2261                        return (t /= .5) < 1 ? .5 * t * t * t : .5 * ((t -= 2) * t * t + 2)
2262                    }, easeInQuart: function (t) {
2263                        return t * t * t * t
2264                    }, easeOutQuart: function (t) {
2265                        return -1 * ((t = t / 1 - 1) * t * t * t - 1)
2266                    }, easeInOutQuart: function (t) {
2267                        return (t /= .5) < 1 ? .5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2)
2268                    }, easeInQuint: function (t) {
2269                        return 1 * (t /= 1) * t * t * t * t
2270                    }, easeOutQuint: function (t) {
2271                        return 1 * ((t = t / 1 - 1) * t * t * t * t + 1)
2272                    }, easeInOutQuint: function (t) {
2273                        return (t /= .5) < 1 ? .5 * t * t * t * t * t : .5 * ((t -= 2) * t * t * t * t + 2)
2274                    }, easeInSine: function (t) {
2275                        return -1 * Math.cos(t / 1 * (Math.PI / 2)) + 1
2276                    }, easeOutSine: function (t) {
2277                        return 1 * Math.sin(t / 1 * (Math.PI / 2))
2278                    }, easeInOutSine: function (t) {
2279                        return -0.5 * (Math.cos(Math.PI * t / 1) - 1)
2280                    }, easeInExpo: function (t) {
2281                        return 0 === t ? 1 : 1 * Math.pow(2, 10 * (t / 1 - 1))
2282                    }, easeOutExpo: function (t) {
2283                        return 1 === t ? 1 : 1 * (-Math.pow(2, -10 * t / 1) + 1)
2284                    }, easeInOutExpo: function (t) {
2285                        return 0 === t ? 0 : 1 === t ? 1 : (t /= .5) < 1 ? .5 * Math.pow(2, 10 * (t - 1)) : .5 * (-Math.pow(2, -10 * --t) + 2)
2286                    }, easeInCirc: function (t) {
2287                        return t >= 1 ? t : -1 * (Math.sqrt(1 - (t /= 1) * t) - 1)
2288                    }, easeOutCirc: function (t) {
2289                        return 1 * Math.sqrt(1 - (t = t / 1 - 1) * t)
2290                    }, easeInOutCirc: function (t) {
2291                        return (t /= .5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : .5 * (Math.sqrt(1 - (t -= 2) * t) + 1)
2292                    }, easeInElastic: function (t) {
2293                        var e = 1.70158, a = 0, i = 1;
2294                        return 0 === t ? 0 : 1 === (t /= 1) ? 1 : (a || (a = .3), i < Math.abs(1) ? (i = 1, e = a / 4) : e = a / (2 * Math.PI) * Math.asin(1 / i), -(i * Math.pow(2, 10 * (t -= 1)) * Math.sin((1 * t - e) * (2 * Math.PI) / a)))
2295                    }, easeOutElastic: function (t) {
2296                        var e = 1.70158, a = 0, i = 1;
2297                        return 0 === t ? 0 : 1 === (t /= 1) ? 1 : (a || (a = .3), i < Math.abs(1) ? (i = 1, e = a / 4) : e = a / (2 * Math.PI) * Math.asin(1 / i), i * Math.pow(2, -10 * t) * Math.sin((1 * t - e) * (2 * Math.PI) / a) + 1)
2298                    }, easeInOutElastic: function (t) {
2299                        var e = 1.70158, a = 0, i = 1;
2300                        return 0 === t ? 0 : 2 === (t /= .5) ? 1 : (a || (a = 1 * (.3 * 1.5)), i < Math.abs(1) ? (i = 1, e = a / 4) : e = a / (2 * Math.PI) * Math.asin(1 / i), 1 > t ? -.5 * (i * Math.pow(2, 10 * (t -= 1)) * Math.sin((1 * t - e) * (2 * Math.PI) / a)) : i * Math.pow(2, -10 * (t -= 1)) * Math.sin((1 * t - e) * (2 * Math.PI) / a) * .5 + 1)
2301                    }, easeInBack: function (t) {
2302                        var e = 1.70158;
2303                        return 1 * (t /= 1) * t * ((e + 1) * t - e)
2304                    }, easeOutBack: function (t) {
2305                        var e = 1.70158;
2306                        return 1 * ((t = t / 1 - 1) * t * ((e + 1) * t + e) + 1)
2307                    }, easeInOutBack: function (t) {
2308                        var e = 1.70158;
2309                        return (t /= .5) < 1 ? .5 * (t * t * (((e *= 1.525) + 1) * t - e)) : .5 * ((t -= 2) * t * (((e *= 1.525) + 1) * t + e) + 2)
2310                    }, easeInBounce: function (t) {
2311                        return 1 - r.easeOutBounce(1 - t)
2312                    }, easeOutBounce: function (t) {
2313                        return (t /= 1) < 1 / 2.75 ? 1 * (7.5625 * t * t) : 2 / 2.75 > t ? 1 * (7.5625 * (t -= 1.5 / 2.75) * t + .75) : 2.5 / 2.75 > t ? 1 * (7.5625 * (t -= 2.25 / 2.75) * t + .9375) : 1 * (7.5625 * (t -= 2.625 / 2.75) * t + .984375)
2314                    }, easeInOutBounce: function (t) {
2315                        return .5 > t ? .5 * r.easeInBounce(2 * t) : .5 * r.easeOutBounce(2 * t - 1) + .5
2316                    }
2317                };
2318                o.requestAnimFrame = function () {
2319                    return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (t) {
2320                            return window.setTimeout(t, 1e3 / 60)
2321                        }
2322                }(), o.cancelAnimFrame = function () {
2323                    return window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || window.msCancelAnimationFrame || function (t) {
2324                            return window.clearTimeout(t, 1e3 / 60)
2325                        }
2326                }(), o.getRelativePosition = function (t, e) {
2327                    var a, i, n = t.originalEvent || t, r = t.currentTarget || t.srcElement, l = r.getBoundingClientRect(), s = n.touches;
2328                    s && s.length > 0 ? (a = s[0].clientX, i = s[0].clientY) : (a = n.clientX, i = n.clientY);
2329                    var d = parseFloat(o.getStyle(r, "padding-left")), u = parseFloat(o.getStyle(r, "padding-top")), c = parseFloat(o.getStyle(r, "padding-right")), h = parseFloat(o.getStyle(r, "padding-bottom")), f = l.right - l.left - d - c, g = l.bottom - l.top - u - h;
2330                    return a = Math.round((a - l.left - d) / f * r.width / e.currentDevicePixelRatio), i = Math.round((i - l.top - u) / g * r.height / e.currentDevicePixelRatio), {
2331                        x: a,
2332                        y: i
2333                    }
2334                }, o.addEvent = function (t, e, a) {
2335                    t.addEventListener ? t.addEventListener(e, a) : t.attachEvent ? t.attachEvent("on" + e, a) : t["on" + e] = a
2336                }, o.removeEvent = function (t, e, a) {
2337                    t.removeEventListener ? t.removeEventListener(e, a, !1) : t.detachEvent ? t.detachEvent("on" + e, a) : t["on" + e] = o.no
2337op
2338                }, o.bindEvents = function (t, e, a) {
2339                    var i = t.events = t.events || {};
2340                    o.each(e, function (e) {
2341                        i[e] = function () {
2342                            a.apply(t, arguments)
2343                        }, o.addEvent(t.chart.canvas, e, i[e])
2344                    })
2345                }, o.unbindEvents = function (t, e) {
2346                    var a = t.chart.canvas;
2347                    o.each(e, function (t, e) {
2348                        o.removeEvent(a, e, t)
2349                    })
2350                }, o.getConstraintWidth = function (t) {
2351                    return n(t, "max-width", "clientWidth")
2352                }, o.getConstraintHeight = function (t) {
2353                    return n(t, "max-height", "clientHeight")
2354                }, o.getMaximumWidth = function (t) {
2355                    var e = t.parentNode, a = parseInt(o.getStyle(e, "padding-left")) + parseInt(o.getStyle(e, "padding-right")), i = e.clientWidth - a, n = o.getConstraintWidth(t);
2356                    return isNaN(n) ? i : Math.min(i, n)
2357                }, o.getMaximumHeight = function (t) {
2358                    var e = t.parentNode, a = parseInt(o.getStyle(e, "padding-top")) + parseInt(o.getStyle(e, "padding-bottom")), i = e.clientHeight - a, n = o.getConstraintHeight(t);
2359                    return isNaN(n) ? i : Math.min(i, n)
2360                }, o.getStyle = function (t, e) {
2361                    return t.currentStyle ? t.currentStyle[e] : document.defaultView.getComputedStyle(t, null).getPropertyValue(e)
2362                }, o.retinaScale = function (t) {
2363                    var e = t.ctx, a = t.canvas, i = a.width, n = a.height, o = t.currentDevicePixelRatio = window.devicePixelRatio || 1;
2364                    1 !== o && (a.height = n * o, a.width = i * o, e.scale(o, o), t.originalDevicePixelRatio = t.originalDevicePixelRatio || o), a.style.width = i + "px", a.style.height = n + "px"
2365                }, o.clear = function (t) {
2366                    t.ctx.clearRect(0, 0, t.width, t.height)
2367                }, o.fontString = function (t, e, a) {
2368                    return e + " " + t + "px " + a
2369                }, o.longestText = function (t, e, a, i) {
2370                    i = i || {};
2371                    var n = i.data = i.data || {}, r = i.garbageCollect = i.garbageCollect || [];
2372                    i.font !== e && (n = i.data = {}, r = i.garbageCollect = [], i.font = e), t.font = e;
2373                    var l = 0;
2374                    o.each(a, function (e) {
2375                        void 0 !== e && null !== e && o.isArray(e) !== !0 ? l = o.measureText(t, n, r, l, e) : o.isArray(e) && o.each(e, function (e) {
2376                            void 0 === e || null === e || o.isArray(e) || (l = o.measureText(t, n, r, l, e))
2377                        })
2378                    });
2379                    var s = r.length / 2;
2380                    if (s > a.length) {
2381                        for (var d = 0; s > d; d++)delete n[r[d]];
2382                        r.splice(0, s)
2383                    }
2384                    return l
2385                }, o.measureText = function (t, e, a, i, n) {
2386                    var o = e[n];
2387                    return o || (o = e[n] = t.measureText(n).width, a.push(n)), o > i && (i = o), i
2388                }, o.numberOfLabelLines = function (t) {
2389                    var e = 1;
2390                    return o.each(t, function (t) {
2391                        o.isArray(t) && t.length > e && (e = t.length)
2392                    }), e
2393                }, o.drawRoundedRectangle = function (t, e, a, i, n, o) {
2394                    t.beginPath(), t.moveTo(e + o, a), t.lineTo(e + i - o, a), t.quadraticCurveTo(e + i, a, e + i, a + o), t.lineTo(e + i, a + n - o), t.quadraticCurveTo(e + i, a + n, e + i - o, a + n), t.lineTo(e + o, a + n), t.quadraticCurveTo(e, a + n, e, a + n - o), t.lineTo(e, a + o), t.quadraticCurveTo(e, a, e + o, a), t.closePath()
2395                }, o.color = function (e) {
2396                    return i ? i(e instanceof CanvasGradient ? t.defaults.global.defaultColor : e) : (console.log("Color.js not found!"), e)
2397                }, o.addResizeListener = function (t, e) {
2398                    var a = document.createElement("iframe"), i = "chartjs-hidden-iframe";
2399                    a.classlist ? a.classlist.add(i) : a.setAttribute("class", i);
2400                    var n = a.style;
2401                    n.width = "100%", n.display = "block", n.border = 0, n.height = 0, n.margin = 0, n.position = "absolute", n.left = 0, n.right = 0, n.top = 0, n.bottom = 0, t.insertBefore(a, t.firstChild), (a.contentWindow || a).onresize = function () {
2402                        e && e()
2403                    }
2404                }, o.removeResizeListener = function (t) {
2405                    var e = t.querySelector(".chartjs-hidden-iframe");
2406                    e && e.parentNode.removeChild(e)
2407                }, o.isArray = Array.isArray ? function (t) {
2408                    return Array.isArray(t)
2409                } : function (t) {
2410                    return "[object Array]" === Object.prototype.toString.call(t)
2411                }, o.arrayEquals = function (t, e) {
2412                    var a, i, n, r;
2413                    if (!t || !e || t.length != e.length)return !1;
2414                    for (a = 0, i = t.length; i > a; ++a)if (n = t[a], r = e[a], n instanceof Array && r instanceof Array) {
2415                        if (!o.arrayEquals(n, r))return !1
2416                    } else if (n != r)return !1;
2417                    return !0
2418                }
2418, o.callCallback = function (t, e, a) {
2419                    t && "function" == typeof t.call && t.apply(a, e)
2420                }, o.getHoverColor = function (t) {
2421                    return t instanceof CanvasPattern ? t : o.color(t).saturate(.5).darken(.1).rgbString()
2422                }
2423            }
2424        }, {3: 3}], 26: [function (t, e, a) {
2425            "use strict";
2426            e.exports = function () {
2427                var t = function (e, a) {
2428                    var i = this, n = t.helpers;
2429                    return i.config = a, e.length && e[0].getContext && (e = e[0]), e.getContext && (e = e.getContext("2d")), i.ctx = e, i.canvas = e.canvas, e.canvas.style.display = e.canvas.style.display || "block", i.width = e.canvas.width || parseInt(n.getStyle(e.canvas, "width"), 10) || n.getMaximumWidth(e.canvas), i.height = e.canvas.height || parseInt(n.getStyle(e.canvas, "height"), 10) || n.getMaximumHeight(e.canvas), i.aspectRatio = i.width / i.height, (isNaN(i.aspectRatio) || isFinite(i.aspectRatio) === !1) && (i.aspectRatio = void 0 !== a.aspectRatio ? a.aspectRatio : 2), i.originalCanvasStyleWidth = e.canvas.style.width, i.originalCanvasStyleHeight = e.canvas.style.height, n.retinaScale(i), a && (i.controller = new t.Controller(i)), n.addResizeListener(e.canvas.parentNode, function () {
2430                        i.controller && i.controller.config.options.responsive && i.controller.resize()
2431                    }), i.controller ? i.controller : i
2432                };
2433                return t.defaults = {
2434                    global: {
2435                        responsive: !0,
2436                        responsiveAnimationDuration: 0,
2437                        maintainAspectRatio: !0,
2438                        events: ["mousemove", "mouseout", "click", "touchstart", "touchmove"],
2439                        hover: {onHover: null, mode: "single", animationDuration: 400},
2440                        onClick: null,
2441                        defaultColor: "rgba(0,0,0,0.1)",
2442                        defaultFontColor: "#666",
2443                        defaultFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
2444                        defaultFontSize: 12,
2445                        defaultFontStyle: "normal",
2446                        showLines: !0,
2447                        elements: {},
2448                        legendCallback: function (t) {
2449                            var e = [];
2450                            e.push('<ul class="' + t.id + '-legend">');
2451                            for (var a = 0; a < t.data.datasets.length; a++)e.push('<li><span style="background-color:' + t.data.datasets[a].backgroundColor + '"></span>'), t.data.datasets[a].label && e.push(t.data.datasets[a].label), e.push("</li>");
2452                            return e.push("</ul>"), e.join("")
2453                        }
2454                    }
2455                }, t.Chart = t, t
2456            }
2457        }, {}], 27: [function (t, e, a) {
2458            "use strict";
2459            e.exports = function (t) {
2460                var e = t.helpers;
2461                t.layoutService = {
2462                    defaults: {}, addBox: function (t, e) {
2463                        t.boxes || (t.boxes = []), t.boxes.push(e)
2464                    }, removeBox: function (t, e) {
2465                        t.boxes && t.boxes.splice(t.boxes.indexOf(e), 1)
2466                    }, update: function (t, a, i) {
2467                        function n(t) {
2468                            var e, a = t.isHorizontal();
2469                            a ? (e = t.update(t.options.fullWidth ? p : k, y), S -= e.height) : (e = t.update(x, v), k -= e.width), w.push({
2470                                horizontal: a,
2471                                minSize: e,
2472                                box: t
2473                            })
2474                        }
2475
2476                        function o(t) {
2477                            var a = e.findNextWhere(w, function (e) {
2478                                return e.box === t
2479                            });
2480                            if (a)if (t.isHorizontal()) {
2481                                var i = {left: C, right: M, top: 0, bottom: 0};
2482                                t.update(t.options.fullWidth ? p : k, m / 2, i)
2483                            } else t.update(a.minSize.width, S)
2484                        }
2485
2486                        function r(t) {
2487                            var a = e.findNextWhere(w, function (e) {
2488                                return e.box === t
2489                            }), i = {left: 0, right: 0, top: D, bottom: A};
2490                            a && t.update(a.minSize.width, S, i)
2491                        }
2492
2493                        function l(t) {
2494                            t.isHorizontal() ? (t.left = t.options.fullWidth ? s : C, t.right = t.options.fullWidth ? a - s : C + k, t.top = P, t.bottom = P + t.height, P = t.bottom) : (t.left = T, t.right = T + t.width, t.top = D, t.bottom = D + S, T = t.right)
2495                        }
2496
2497                        if (t) {
2498                            var s = 0, d = 0, u = e.where(t.boxes, function (t) {
2499                                return "left" === t.options.position
2500                            }), c = e.where(t.boxes, function (t) {
2501                                return "right" === t.options.position
2502                            }), h = e.where(t.boxes, function (t) {
2503                                return "top" === t.options.position
2504                            }), f = e.where(t.boxes, function (t) {
2505                                return "bottom" === t.options.position
2506                            }), g = e.where(t.boxes, function (t) {
2507                                return "chartArea" === t.options.position
2508                            });
2509                            h.sort(function (t, e) {
2510                                return (e.options.fullWidth ? 1 : 0) - (t.options.fullWidth ? 1 : 0)
2511                            }), f.sort(function (t, e) {
2512                                return (t.options.fullWidth ? 1 : 0) - (e.options.fullWidth ? 1 : 0)
2513                            });
2514                            var p = a - 2 * s, m = i - 2 * d, b = p / 2, v = m / 2, x = (a 
2514- b) / (u.length + c.length), y = (i - v) / (h.length + f.length), k = p, S = m, w = [];
2515                            e.each(u.concat(c, h, f), n);
2516                            var C = s, M = s, D = d, A = d;
2517                            e.each(u.concat(c), o), e.each(u, function (t) {
2518                                C += t.width
2519                            }), e.each(c, function (t) {
2520                                M += t.width
2521                            }), e.each(h.concat(f), o), e.each(h, function (t) {
2522                                D += t.height
2523                            }), e.each(f, function (t) {
2524                                A += t.height
2525                            }), e.each(u.concat(c), r), C = s, M = s, D = d, A = d, e.each(u, function (t) {
2526                                C += t.width
2527                            }), e.each(c, function (t) {
2528                                M += t.width
2529                            }), e.each(h, function (t) {
2530                                D += t.height
2531                            }), e.each(f, function (t) {
2532                                A += t.height
2533                            });
2534                            var I = i - D - A, F = a - C - M;
2535                            (F !== k || I !== S) && (e.each(u, function (t) {
2536                                t.height = I
2537                            }), e.each(c, function (t) {
2538                                t.height = I
2539                            }), e.each(h, function (t) {
2540                                t.options.fullWidth || (t.width = F)
2541                            }), e.each(f, function (t) {
2542                                t.options.fullWidth || (t.width = F)
2543                            }), S = I, k = F);
2544                            var T = s, P = d;
2545                            e.each(u.concat(h), l), T += k, P += S, e.each(c, l), e.each(f, l), t.chartArea = {
2546                                left: C,
2547                                top: D,
2548                                right: C + k,
2549                                bottom: D + S
2550                            }, e.each(g, function (e) {
2551                                e.left = t.chartArea.left, e.top = t.chartArea.top, e.right = t.chartArea.right, e.bottom = t.chartArea.bottom, e.update(k, S)
2552                            })
2553                        }
2554                    }
2555                }
2556            }
2557        }, {}], 28: [function (t, e, a) {
2558            "use strict";
2559            e.exports = function (t) {
2560                var e = t.helpers, a = e.noop;
2561                t.defaults.global.legend = {
2562                    display: !0,
2563                    position: "top",
2564                    fullWidth: !0,
2565                    reverse: !1,
2566                    onClick: function (t, e) {
2567                        var a = e.datasetIndex, i = this.chart, n = i.getDatasetMeta(a);
2568                        n.hidden = null === n.hidden ? !i.data.datasets[a].hidden : null, i.update()
2569                    },
2570                    labels: {
2571                        boxWidth: 40, padding: 10, generateLabels: function (t) {
2572                            var a = t.data;
2573                            return e.isArray(a.datasets) ? a.datasets.map(function (a, i) {
2574                                return {
2575                                    text: a.label,
2576                                    fillStyle: e.isArray(a.backgroundColor) ? a.backgroundColor[0] : a.backgroundColor,
2577                                    hidden: !t.isDatasetVisible(i),
2578                                    lineCap: a.borderCapStyle,
2579                                    lineDash: a.borderDash,
2580                                    lineDashOffset: a.borderDashOffset,
2581                                    lineJoin: a.borderJoinStyle,
2582                                    lineWidth: a.borderWidth,
2583                                    strokeStyle: a.borderColor,
2584                                    datasetIndex: i
2585                                }
2586                            }, this) : []
2587                        }
2588                    }
2589                }, t.Legend = t.Element.extend({
2590                    initialize: function (t) {
2591                        e.extend(this, t), this.legendHitBoxes = [], this.doughnutMode = !1
2592                    }, beforeUpdate: a, update: function (t, e, a) {
2593                        var i = this;
2594                        return i.beforeUpdate(), i.maxWidth = t, i.maxHeight = e, i.margins = a, i.beforeSetDimensions(), i.setDimensions(), i.afterSetDimensions(), i.beforeBuildLabels(), i.buildLabels(), i.afterBuildLabels(), i.beforeFit(), i.fit(), i.afterFit(), i.afterUpdate(), i.minSize
2595                    }, afterUpdate: a, beforeSetDimensions: a, setDimensions: function () {
2596                        var t = this;
2597                        t.isHorizontal() ? (t.width = t.maxWidth, t.left = 0, t.right = t.width) : (t.height = t.maxHeight, t.top = 0, t.bottom = t.height), t.paddingLeft = 0, t.paddingTop = 0, t.paddingRight = 0, t.paddingBottom = 0, t.minSize = {
2598                            width: 0,
2599                            height: 0
2600                        }
2601                    }, afterSetDimensions: a, beforeBuildLabels: a, buildLabels: function () {
2602                        var t = this;
2603                        t.legendItems = t.options.labels.generateLabels.call(t, t.chart), t.options.reverse && t.legendItems.reverse()
2604                    }, afterBuildLabels: a, beforeFit: a, fit: function () {
2605                        var a = this, i = a.options, n = i.labels, o = i.display, r = a.
2605ctx, l = t.defaults.global, s = e.getValueOrDefault, d = s(n.fontSize, l.defaultFontSize), u = s(n.fontStyle, l.defaultFontStyle), c = s(n.fontFamily, l.defaultFontFamily), h = e.fontString(d, u, c), f = a.legendHitBoxes = [], g = a.minSize, p = a.isHorizontal();
2606                        if (p ? (g.width = a.maxWidth, g.height = o ? 10 : 0) : (g.width = o ? 10 : 0, g.height = a.maxHeight), o)if (r.font = h, p) {
2607                            var m = a.lineWidths = [0], b = a.legendItems.length ? d + n.padding : 0;
2608                            r.textAlign = "left", r.textBaseline = "top", e.each(a.legendItems, function (t, e) {
2609                                var i = n.boxWidth + d / 2 + r.measureText(t.text).width;
2610                                m[m.length - 1] + i + n.padding >= a.width && (b += d + n.padding, m[m.length] = a.left), f[e] = {
2611                                    left: 0,
2612                                    top: 0,
2613                                    width: i,
2614                                    height: d
2615                                }, m[m.length - 1] += i + n.padding
2616                            }), g.height += b
2617                        } else {
2618                            var v = n.padding, x = a.columnWidths = [], y = n.padding, k = 0, S = 0, w = d + v;
2619                            e.each(a.legendItems, function (t, e) {
2620                                var a = n.boxWidth + d / 2 + r.measureText(t.text).width;
2621                                S + w > g.height && (y += k + n.padding, x.push(k), k = 0, S = 0), k = Math.max(k, a), S += w, f[e] = {
2622                                    left: 0,
2623                                    top: 0,
2624                                    width: a,
2625                                    height: d
2626                                }
2627                            }), y += k, x.push(k), g.width += y
2628                        }
2629                        a.width = g.width, a.height = g.height
2630                    }, afterFit: a, isHorizontal: function () {
2631                        return "top" === this.options.position || "bottom" === this.options.position
2632                    }, draw: function () {
2633                        var a = this, i = a.options, n = i.labels, o = t.defaults.global, r = o.elements.line, l = a.width, s = (a.height, a.lineWidths);
2634                        if (i.display) {
2635                            var d, u = a.ctx, c = e.getValueOrDefault, h = c(n.fontColor, o.defaultFontColor), f = c(n.fontSize, o.defaultFontSize), g = c(n.fontStyle, o.defaultFontStyle), p = c(n.fontFamily, o.defaultFontFamily), m = e.fontString(f, g, p);
2636                            u.textAlign = "left", u.textBaseline = "top", u.lineWidth = .5, u.strokeStyle = h, u.fillStyle = h, u.font = m;
2637                            var b = n.boxWidth, v = a.legendHitBoxes, x = function (t, e, a) {
2638                                u.save(), u.fillStyle = c(a.fillStyle, o.defaultColor), u.lineCap = c(a.lineCap, r.borderCapStyle), u.lineDashOffset = c(a.lineDashOffset, r.borderDashOffset), u.lineJoin = c(a.lineJoin, r.borderJoinStyle), u.lineWidth = c(a.lineWidth, r.borderWidth), u.strokeStyle = c(a.strokeStyle, o.defaultColor), u.setLineDash && u.setLineDash(c(a.lineDash, r.borderDash)), u.strokeRect(t, e, b, f), u.fillRect(t, e, b, f), u.restore()
2639                            }, y = function (t, e, a, i) {
2640                                u.fillText(a.text, b + f / 2 + t, e), a.hidden && (u.beginPath(), u.lineWidth = 2, u.moveTo(b + f / 2 + t, e + f / 2), u.lineTo(b + f / 2 + t + i, e + f / 2), u.stroke())
2641                            }, k = a.isHorizontal();
2642                            d = k ? {x: a.left + (l - s[0]) / 2, y: a.top + n.padding, line: 0} : {
2643                                x: a.left + n.padding,
2644                                y: a.top,
2645                                line: 0
2646                            };
2647                            var S = f + n.padding;
2648                            e.each(a.legendItems, function (t, e) {
2649                                var i = u.measureText(t.text).width, o = b + f / 2 + i, r = d.x, c = d.y;
2650                                k ? r + o >= l && (c = d.y += f + n.padding, d.line++, r = d.x = a.left + (l - s[d.line]) / 2) : c + S > a.bottom && (r = d.x = r + a.columnWidths[d.line] + n.padding, c = d.y = a.top, d.line++), x(r, c, t), v[e].left = r, v[e].top = c, y(r, c, t, i), k ? d.x += o + n.padding : d.y += S
2651                            })
2652                        }
2653                    }, handleEvent: function (t) {
2654                        var a = this, i = e.getRelativePosition(t, a.chart.chart), n = i.x, o = i.y, r = a.options;
2655                        if (n >= a.left && n <= a.right && o >= a.top && o <= a.bottom)for (var l = a.legendHitBoxes, s = 0; s < l.length; ++s) {
2656                            var d = l[s];
2657                            if (n >= d.left && n <= d.left + d.width && o >= d.top && o <= d.top + d.height) {
2658                                r.onClick && r.onClick.call(a, t, a.legendItems[s]);
2659                                break
2660                            }
2661                        }
2662                    }
2663                }), t.plugins.register({
2664                    beforeInit: function (e) {
2665                        var a = e.options, i = a.legend;
2666                        i && (e.legend = new t.Legend({
2667                            ctx: e.chart.ctx,
2668                            options: i,
2669                            chart: e
2670                        }), t.layoutService.addBox(e, e.legend))
2671                    }
2672                })
2673            }
2674        }, {}], 29: [function (t, e, a) {
2675            "use strict";
2676            e.exports = function (t) {
2677                var e = t.helpers.noop;
2678                t.plugins = {
2679                    _plugins: [], register: function (t) {
2680                        var e = this._plugins;
2681                        [].concat(t).forEach(function (t) {
2682                            -1 === e.indexOf(t) && e.push(t)
2683                        })
2684                    }, unregister: function (t) {
2685                        var e = this._plugins;
2686                        [].concat(t).forEach(function (t) {
2687                            var a = e.indexOf(t);
2688                            -1 !== a && e.splice(a, 1)
2689                        })
2690                    }, clear: function () {
2691                        this._plugins = []
2692                    }, count: function () {
2693                        return this._plugins.length
2694                    }, getAll: function () {
2695                        return this._plugins
2696                    }, notify: function (t, e) {
2697                        var a, i, n = this._plugins, o = n.length;
2698                        for (a = 0; o > a; ++a)if (i = n[a], "function" == typeof i[t] && i[t].apply(i, e || []) === !1)return !1;
2699                        return !0
2700                    }
2701                }, t.PluginBase = t.Element.extend({
2702                    beforeInit: e,
2703                    afterInit: e,
2704                    beforeUpdate: e,
2705                    afterUpdate: e,
2706                    beforeDraw: e,
2707                    afterDraw: e,
2708                    destroy: e
2709                }), t.pluginService = t.plugins
2710            }
2711        }, {}], 30: [function (t, e, a) {
2712            "use strict";
2713            e.exports = function (t) {
2714                var e = t.helpers;
2715                t.defaults.scale = {
2716                    display: !0,
2717                    position: "left",
2718                    gridLines: {
2719                        display: !0,
2720                        color: "rgba(0, 0, 0, 0.1)",
2721                        lineWidth: 1,
2722                        drawBorder: !0,
2723                        drawOnChartArea: !0,
2724                        drawTicks: !0,
2725                        tickMarkLength: 10,
2726                        zeroLineWidth: 1,
2727                        zeroLineColor: "rgba(0,0,0,0.25)",
2728                        offsetGridLines: !1
2729                    },
2730                    scaleLabel: {labelString: "", display: !1},
2731                    ticks: {
2732                        beginAtZero: !1,
2733                        minRotation: 0,
2734                        maxRotation: 50,
2735                        mirror: !1,
2736                        padding: 10,
2737                        reverse: !1,
2738                        display: !0,
2739                        autoSkip: !0,
2740                        autoSkipPadding: 0,
2741                        labelOffset: 0,
2742                        callback: function (t) {
2743                            return e.isArray(t) ? t : "" + t
2744                        }
2745                    }
2746                }, t.Scale = t.Element.extend({
2747                    beforeUpdate: function () {
2748                        e.callCallback(this.options.beforeUpdate, [this])
2749                    },
2750                    update: function (t, a, i) {
2751                        var n = this;
2752                        return n.beforeUpdate(), n.maxWidth = t, n.maxHeight = a, n.margins = e.extend({
2753                            left: 0,
2754                            right: 0,
2755                            top: 0,
2756                            bottom: 0
2757                        }, i), n.beforeSetDimensions(), n.setDimensions(), n.afterSetDimensions(), n.beforeDataLimits(), n.determineDataLimits(), n.afterDataLimits(), n.beforeBuildTicks(), n.buildTicks(), n.afterBuildTicks(), n.beforeTickToLabelConversion(), n.convertTicksToLabels(), n.afterTickToLabelConversion(), n.beforeCalculateTickRotation(), n.calculateTickRotation(), n.afterCalculateTickRotation(), n.beforeFit(), n.fit(), n.afterFit(), n.afterUpdate(), n.minSize
2758                    },
2759                    afterUpdate: function () {
2760                        e.callCallback(this.options.afterUpdate, [this])
2761                    },
2762                    beforeSetDimensions: function () {
2763                        e.callCallback(this.options.beforeSetDimensions, [this])
2764                    },
2765                    setDimensions: function () {
2766                        var t = this;
2767                        t.isHorizontal() ? (t.width = t.maxWidth, t.left = 0, t.right = t.width) : (t.height = t.maxHeight, t.top = 0, t.bottom = t.height), t.paddingLeft = 0, t.paddingTop = 0, t.paddingRight = 0, t.paddingBottom = 0
2768                    },
2769                    afterSetDimensions: function () {
2770                        e.callCallback(this.options.afterSetDimensions, [this])
2771                    },
2772                    beforeDataLimits: function () {
2773                        e.callCallback(this.options.beforeDataLimits, [this])
2774                    },
2775                    determineDataLimits: e.noop,
2776                    afterDataLimits: function () {
2777                        e.callCallback(this.options.afterDataLimits, [this])
2778                    },
2779                    beforeBuildTicks: function () {
2780                        e.callCallback(this.options.beforeBuildTicks, [this])
2781                    },
2782                    buildTicks: e.noop,
2783                    afterBuildTicks: function () {
2784                        e.callCallback(this.options.afterBuildTicks, [this])
2785                    },
2786                    beforeTickToLabelConversion: function () {
2787                        e.callCallback(this.options.beforeTickToLabelConversion, [this])
2788                    },
2789                    convertTicksToLabels: function () {
2790                        var t = this;
2791                        t.ticks = t.ticks.map(function (e, a, i) {
2792                            return t.options.ticks.userCallback ? t.options.ticks.userCallback(e, a, i) : t.options.ticks.callback(e, a, i)
2793                        }, t)
2794                    },
2795                    afterTickToLabelConversion: function () {
2796                        e.callCallback(this.options.afterTickToLabelConversion, [this])
2797                    },
2798                    beforeCalculateTickRotation: function () {
2799                        e.callCallback(this.options.beforeCalculateTickRotation, [this])
2800                    },
2801                    calculateTickRotation: function () {
2802                        var a = this, i = a.ctx, n = t.defaults.global, o = a.options.ticks, r = e.getValueOrDefault(o.fontSize, n.defaultFontSize), l = e.getValueOrDefault(o.fontStyle, n.defaultFontStyle), s = e.getValueOrDefault(o.fontFamily, n.defaultFontFamily), d = e.fontString(r, l, s);
2803                        i.font = d;
2804                        var u, c = i.measureText(a.ticks[0]).width, h = i.measureText(a.ticks[a.ticks.length - 1]).width;
2805                        if (a.labelRotation = o.minRotation || 0, a.paddingRight = 0, a.paddingLeft = 0, a.options.display && a.isHorizontal()) {
2806                            a.paddingRight = h / 2 + 3, a.paddingLeft = c / 2 + 3, a.longestTextCache || (a.longestTextCache = {});
2807                            for (var f, g, p = e.longestText(i, d, a.ticks, a.longestTextCache), m = p, b = a.getPixelForTick(1) - a.getPixelForTick(0) - 6; m > b && a.labelRotation < o.maxRotation;) {
2808                                if (f = Math.cos(e.toRadians(a.labelRotation)), g = Math.sin(e.toRadians(a.labelRotation)), u = f * c, u + r / 2 > a.yLabelWidth && (a.paddingLeft = u + r / 2), a.paddingRight = r / 2, g * p > a.maxHeight) {
2809                                    a.labelRotation--;
2810                                    break
2811                                }
2812                                a.labelRotation++, m = f * p
2813                            }
2814                        }
2815                        a.margins && (a.paddingLeft = Math.max(a.paddingLeft - a.margins.left, 0), a.paddingRight = Math.max(a.paddingRight - a.margins.right, 0))
2816                    },
2817                    afterCalculateTickRotation: function () {
2818                        e.callCallback(this.options.afterCalculateTickRotation, [this])
2819                    },
2820                    beforeFit: function () {
2821                        e.callCallback(this.options.beforeFit, [this])
2822                    },
2823                    fit: function () {
2824                        var a = this, i = a.minSize = {
2825                            width: 0,
2826                            height: 0
2827                        }, n = a.options, o = t.defaults.global, r = n.ticks, l = n.scaleLabel, s = n.display, d = a.isHorizontal(), u = e.getValueOrDefault(r.fontSize, o.defaultFontSize), c = e.getValueOrDefault(r.fontStyle, o.defaultFontStyle), h = e.getValueOrDefault(r.fontFamily, o.defaultFontFamily), f = e.fontString(u, c, h), g = e.getValueOrDefault(l.fontSize, o.defaultFontSize), p = e.getValueOrDefault(l.fontStyle, o.defaultFontStyle), m = e.getValueOrDefault(l.fontFamily, o.defaultFontFamily), b = (e.fontString(g, p, m), n.gridLines.tickMarkLength);
2828                        if (d ? i.width = a.isFullWidth() ? a.maxWidth - a.margins.left - a.margins.right : a.maxWidth : i.width = s ? b : 0, d ? i.height = s ? b : 0 : i.height = a.maxHeight, l.display && s && (d ? i.height += 1.5 * g : i.width += 1.5 * g), r.display && s) {
2829                            a.longestTextCache || (a.longestTextCache = {});
2830                            var v = e.longestText(a.ctx, f, a.ticks, a.longestTextCache), x = e.numberOfLabelLines(a.ticks), y = .5 * u;
2831                            if (d) {
2832                                a.longestLabelWidth = v;
2833                                var k = Math.sin(e.toRadians(a.labelRotation)) * a.longestLabelWidth + u * x + y * x;
2834                                i.height = Math.min(a.maxHeight, i.height + k), a.ctx.font = f;
2835                                var S = a.ctx.measureText(a.ticks[0]).width, w = a.ctx.measureText(a.ticks[a.ticks.length - 1]).width, C = Math.cos(e.toRadians(a.labelRotation)), M = Math.sin(e.toRadians(a.labelRotation));
2836                                a.paddingLeft = 0 !== a.labelRotation ? C * S + 3 : S / 2 + 3, a.paddingRight = 0 !== a.labelRotation ? M * (u / 2) + 3 : w / 2 + 3
2837                            } else {
2838                                var D = a.maxWidth - i.width, A = r.mirror;
2839                                A ? v = 0 : v += a.options.ticks.padding, D > v ? i.width += v : i.width = a.maxWidth, a.paddingTop = u / 2, a.paddingBottom = u / 2
2840                            }
2841                        }
2842                        a.margins && (a.paddingLeft = Math.max(a.paddingLeft - a.margins.left, 0), a.paddingTop = Math.max(a.paddingTop - a.margins.top, 0), a.paddingRight = Math.max(a.paddingRight - a.margins.right, 0), a.paddingBottom = Math.max(a.paddingBottom - a.margins.bottom, 0)), a.width = i.width, a.height = i.height
2843                    },
2844                    afterFit: function () {
2845                        e.callCallback(this.options.afterFit, [this])
2846                    },
2847                    isHorizontal: function () {
2848                        return "top" === this.options.position || "bottom" === this.options.position
2849                    },
2850                    isFullWidth: function () {
2851                        return this.options.fullWidth
2852                    },
2853                    getRightValue: function a(t) {
2854                        return null === t || "undefined" == typeof t ? NaN : "number" == typeof t && isNaN(t) ? NaN : "object" == typeof t ? t instanceof Date || t.isValid ? t : a(this.isHorizontal() ? t.x : t.
2854y) : t
2855                    },
2856                    getLabelForIndex: e.noop,
2857                    getPixelForValue: e.noop,
2858                    getValueForPixel: e.noop,
2859                    getPixelForTick: function (t, e) {
2860                        var a = this;
2861                        if (a.isHorizontal()) {
2862                            var i = a.width - (a.paddingLeft + a.paddingRight), n = i / Math.max(a.ticks.length - (a.options.gridLines.offsetGridLines ? 0 : 1), 1), o = n * t + a.paddingLeft;
2863                            e && (o += n / 2);
2864                            var r = a.left + Math.round(o);
2865                            return r += a.isFullWidth() ? a.margins.left : 0
2866                        }
2867                        var l = a.height - (a.paddingTop + a.paddingBottom);
2868                        return a.top + t * (l / (a.ticks.length - 1))
2869                    },
2870                    getPixelForDecimal: function (t) {
2871                        var e = this;
2872                        if (e.isHorizontal()) {
2873                            var a = e.width - (e.paddingLeft + e.paddingRight), i = a * t + e.paddingLeft, n = e.left + Math.round(i);
2874                            return n += e.isFullWidth() ? e.margins.left : 0
2875                        }
2876                        return e.top + t * e.height
2877                    },
2878                    getBasePixel: function () {
2879                        var t = this, e = t.min, a = t.max;
2880                        return t.getPixelForValue(t.beginAtZero ? 0 : 0 > e && 0 > a ? a : e > 0 && a > 0 ? e : 0)
2881                    },
2882                    draw: function (a) {
2883                        var i = this, n = i.options;
2884                        if (n.display) {
2885                            var o, r, l = i.ctx, s = t.defaults.global, d = n.ticks, u = n.gridLines, c = n.scaleLabel, h = 0 !== i.labelRotation, f = d.autoSkip, g = i.isHorizontal();
2886                            d.maxTicksLimit && (r = d.maxTicksLimit);
2887                            var p = e.getValueOrDefault(d.fontColor, s.defaultFontColor), m = e.getValueOrDefault(d.fontSize, s.defaultFontSize), b = e.getValueOrDefault(d.fontStyle, s.defaultFontStyle), v = e.getValueOrDefault(d.fontFamily, s.defaultFontFamily), x = e.fontString(m, b, v), y = u.tickMarkLength, k = e.getValueOrDefault(c.fontColor, s.defaultFontColor), S = e.getValueOrDefault(c.fontSize, s.defaultFontSize), w = e.getValueOrDefault(c.fontStyle, s.defaultFontStyle), C = e.getValueOrDefault(c.fontFamily, s.defaultFontFamily), M = e.fontString(S, w, C), D = e.toRadians(i.labelRotation), A = Math.cos(D), I = (Math.sin(D), i.longestLabelWidth * A);
2888                            l.fillStyle = p;
2889                            var F = [];
2890                            if (g) {
2891                                if (o = !1, h && (I /= 2), (I + d.autoSkipPadding) * i.ticks.length > i.width - (i.paddingLeft + i.paddingRight) && (o = 1 + Math.floor((I + d.autoSkipPadding) * i.ticks.length / (i.width - (i.paddingLeft + i.paddingRight)))), r && i.ticks.length > r)for (; !o || i.ticks.length / (o || 1) > r;)o || (o = 1), o += 1;
2892                                f || (o = !1)
2893                            }
2894                            var T = "right" === n.position ? i.left : i.right - y, P = "right" === n.position ? i.left + y : i.right, _ = "bottom" === n.position ? i.top : i.bottom - y, R = "bottom" === n.position ? i.top + y : i.bottom;
2895                            if (e.each(i.ticks, function (t, r) {
2896                                    if (void 0 !== t && null !== t) {
2897                                        var l = i.ticks.length === r + 1, s = o > 1 && r % o > 0 || r % o === 0 && r + o >= i.ticks.length;
2898                                        if ((!s || l) && void 0 !== t && null !== t) {
2899                                            var c, f;
2900                                            r === ("undefined" != typeof i.zeroLineIndex ? i.zeroLineIndex : 0) ? (c = u.zeroLineWi
2900dth, f = u.zeroLineColor) : (c = e.getValueAtIndexOrDefault(u.lineWidth, r), f = e.getValueAtIndexOrDefault(u.color, r));
2901                                            var p, m, b, v, x, k, S, w, C, M, A, I = "middle";
2902                                            if (g) {
2903                                                h || (I = "top" === n.position ? "bottom" : "top"), A = h ? "right" : "center";
2904                                                var V = i.getPixelForTick(r) + e.aliasPixel(c);
2905                                                C = i.getPixelForTick(r, u.offsetGridLines) + d.labelOffset, M = h ? i.top + 12 : "top" === n.position ? i.bottom - y : i.top + y, p = b = x = S = V, m = _, v = R, k = a.top, w = a.bottom
2906                                            } else {
2907                                                "left" === n.position ? d.mirror ? (C = i.right + d.padding, A = "left") : (C = i.right - d.padding, A = "right") : d.mirror ? (C = i.left - d.padding, A = "right") : (C = i.left + d.padding, A = "left");
2908                                                var O = i.getPixelForTick(r);
2909                                                O += e.aliasPixel(c), M = i.getPixelForTick(r, u.offsetGridLines), p = T, b = P, x = a.left, S = a.right, m = v = k = w = O
2910                                            }
2911                                            F.push({
2912                                                tx1: p,
2913                                                ty1: m,
2914                                                tx2: b,
2915                                                ty2: v,
2916                                                x1: x,
2917                                                y1: k,
2918                                                x2: S,
2919                                                y2: w,
2920                                                labelX: C,
2921                                                labelY: M,
2922                                                glWidth: c,
2923                                                glColor: f,
2924                                                rotation: -1 * D,
2925                                                label: t,
2926                                                textBaseline: I,
2927                                                textAlign: A
2928                                            })
2929                                        }
2930                                    }
2931                                }), e.each(F, function (t) {
2932                                    if (u.display && (l.lineWidth = t.glWidth, l.strokeStyle = t.glColor, l.beginPath(), u.drawTicks && (l.moveTo(t.tx1, t.ty1), l.lineTo(t.tx2, t.ty2)), u.drawOnChartArea && (l.moveTo(t.x1, t.y1), l.lineTo(t.x2, t.y2)), l.stroke()), d.display) {
2933                                        l.save(), l.translate(t.labelX, t.labelY), l.rotate(t.rotation), l.font = x, l.textBaseline = t.textBaseline, l.textAlign = t.textAlign;
2934                                        var a = t.label;
2935                                        if (e.isArray(a))for (var i = 0, n = 0; i < a.length; ++i)l.fillText("" + a[i], 0, n), n += 1.5 * m; else l.fillText(a, 0, 0);
2936                                        l.restore()
2937                                    }
2938                                }), c.display) {
2939                                var V, O, L = 0;
2940                                if (g)V = i.left + (i.right - i.left) / 2, O = "bottom" === n.position ? i.bottom - S / 2 : i.top + S / 2; else {
2941                                    var B = "left" === n.position;
2942                                    V = B ? i.left + S / 2 : i.right - S / 2, O = i.top + (i.bottom - i.top) / 2, L = B ? -.5 * Math.PI : .5 * Math.PI
2943                                }
2944                                l.save(), l.translate(V, O), l.rotate(L), l.textAlign = "center", l.textBaseline = "middle", l.fillStyle = k, l.font = M, l.fillText(c.labelString, 0, 0
2944), l.restore()
2945                            }
2946                            if (u.drawBorder) {
2947                                l.lineWidth = e.getValueAtIndexOrDefault(u.lineWidth, 0), l.strokeStyle = e.getValueAtIndexOrDefault(u.color, 0);
2948                                var W = i.left, z = i.right, H = i.top, N = i.bottom, E = e.aliasPixel(l.lineWidth);
2949                                g ? (H = N = "top" === n.position ? i.bottom : i.top, H += E, N += E) : (W = z = "left" === n.position ? i.right : i.left, W += E, z += E), l.beginPath(), l.moveTo(W, H), l.lineTo(z, N), l.stroke()
2950                            }
2951                        }
2952                    }
2953                })
2954            }
2955        }, {}], 31: [function (t, e, a) {
2956            "use strict";
2957            e.exports = function (t) {
2958                var e = t.helpers;
2959                t.scaleService = {
2960                    constructors: {}, defaults: {}, registerScaleType: function (t, a, i) {
2961                        this.constructors[t] = a, this.defaults[t] = e.clone(i)
2962                    }, getScaleConstructor: function (t) {
2963                        return this.constructors.hasOwnProperty(t) ? this.constructors[t] : void 0
2964                    }, getScaleDefaults: function (a) {
2965                        return this.defaults.hasOwnProperty(a) ? e.scaleMerge(t.defaults.scale, this.defaults[a]) : {}
2966                    }, updateScaleDefaults: function (t, a) {
2967                        var i = this.defaults;
2968                        i.hasOwnProperty(t) && (i[t] = e.extend(i[t], a))
2969                    }, addScalesToLayout: function (a) {
2970                        e.each(a.scales, function (e) {
2971                            t.layoutService.addBox(a, e)
2972                        })
2973                    }
2974                }
2975            }
2976        }, {}], 32: [function (t, e, a) {
2977            "use strict";
2978            e.exports = function (t) {
2979                var e = t.helpers;
2980                t.defaults.global.title = {
2981                    display: !1,
2982                    position: "top",
2983                    fullWidth: !0,
2984                    fontStyle: "bold",
2985                    padding: 10,
2986                    text: ""
2987                };
2988                var a = e.noop;
2989                t.Title = t.Element.extend({
2990                    initialize: function (a) {
2991                        var i = this;
2992                        e.extend(i, a), i.options = e.configMerge(t.defaults.global.title, a.options), i.legendHitBoxes = []
2993                    },
2994                    beforeUpdate: function () {
2995                        var a = this.chart.options;
2996                        a && a.title && (this.options = e.configMerge(t.defaults.global.title, a.title))
2997                    },
2998                    update: function (t, e, a) {
2999                        var i = this;
3000                        return i.beforeUpdate(), i.maxWidth = t, i.maxHeight = e, i.margins = a, i.beforeSetDimensions(), i.setDimensions(), i.afterSetDimensions(), i.beforeBuildLabels(), i.buildLabels(), i.afterBuildLabels(), i.beforeFit(), i.fit(), i.afterFit(), i.afterUpdate(), i.minSize
3001                    },
3002                    afterUpdate: a,
3003                    beforeSetDimensions: a,
3004                    setDimensions: function () {
3005                        var t = this;
3006                        t.isHorizontal() ? (t.width = t.maxWidth, t.left = 0, t.right = t.width) : (t.height = t.maxHeight, t.top = 0, t.bottom = t.height), t.paddingLeft = 0, t.paddingTop = 0, t.paddingRight = 0, t.paddingBottom = 0, t.minSize = {
3007                            width: 0,
3008                            height: 0
3009                        }
3010                    },
3011                    afterSetDimensions: a,
3012                    beforeBuildLabels: a,
3013                    buildLabels: a,
3014                    afterBuildLabels: a,
3015                    beforeFit: a,
3016                    fit: function () {
3017                        var a = this, i = (a.ctx, e.getValueOrDefault), n = a.options, o = t.defaults.global, r = n.display, l = i(n.fontSize, o.defaultFontSize), s = a.minSize;
3018                        a.isHorizontal() ? (s.width = a.maxWidth, s.height = r ? l + 2 * n.padding : 0) : (s.width = r ? l + 2 * n.padding : 0, s.height = a.maxHeight), a.width = s.width, a.height = s.height
3019                    },
3020                    afterFit: a,
3021                    isHorizontal: function () {
3022                        var t = this.options.position;
3023                        return "top" === t || "bottom" === t
3024                    },
3025                    draw: function () {
3026                        var a = this, i = a.ctx, n = e.getValueOrDefault, o = a.options, r = t.defaults.global;
3027                        if (o.display) {
3028                            var l, s, d = n(o.fontSize, r.defaultFontSize), u = n(o.fontStyle, r.defaultFontStyle), c = n(o.fontFamily, r.defaultFontFamily), h = e.fontString(d, u, c), f = 0, g = a.top, p = a.left, m = a.bottom, b = a.right;
3029                            i.fillStyle = n(o.fontColor, r.defaultFontColor), i.font = h, a.isHorizontal() ? (l = p + (b - p) / 2, s = g + (m - g) / 2) : (l = "left" === o.position ? p + d / 2 : b - d / 2, s = g + (m - g) / 2, f = Math.PI * ("left" === o.position ? -.5 : .5)), i.save(), i.translate(l, s), i.rotate(f), i.textAlign = "center", i.textBaseline = "middle", i.fillText(o.text, 0, 0
3029), i.restore()
3030                        }
3031                    }
3032                }), t.plugins.register({
3033                    beforeInit: function (e) {
3034                        var a = e.options, i = a.title;
3035                        i && (e.titleBlock = new t.Title({
3036                            ctx: e.chart.ctx,
3037                            options: i,
3038                            chart: e
3039                        }), t.layoutService.addBox(e, e.titleBlock))
3040                    }
3041                })
3042            }
3043        }, {}], 33: [function (t, e, a) {
3044            "use strict";
3045            e.exports = function (t) {
3046                function e(t, e) {
3047                    return e && (n.isArray(e) ? Array.prototype.push.apply(t, e) : t.push(e)), t
3048                }
3049
3050                function a(t) {
3051                    if (!t.length)return !1;
3052                    var e, a, i = [], n = [];
3053                    for (e = 0, a = t.length; a > e; ++e) {
3054                        var o = t[e];
3055                        if (o && o.hasValue()) {
3056                            var r = o.tooltipPosition();
3057                            i.push(r.x), n.push(r.y)
3058                        }
3059                    }
3060                    var l = 0, s = 0;
3061                    for (e = 0, a - i.length; a > e; ++e)l += i[e], s += n[e];
3062                    return {x: Math.round(l / i.length), y: Math.round(s / i.length)}
3063                }
3064
3065                function i(t) {
3066                    var e = t._xScale, a = t._yScale || t._scale, i = t._index, n = t._datasetIndex;
3067                    return {
3068                        xLabel: e ? e.getLabelForIndex(i, n) : "",
3069                        yLabel: a ? a.getLabelForIndex(i, n) : "",
3070                        index: i,
3071                        datasetIndex: n
3072                    }
3073                }
3074
3075                var n = t.helpers;
3076                t.defaults.global.tooltips = {
3077                    enabled: !0,
3078                    custom: null,
3079                    mode: "single",
3080                    backgroundColor: "rgba(0,0,0,0.8)",
3081                    titleFontStyle: "bold",
3082                    titleSpacing: 2,
3083                    titleMarginBottom: 6,
3084                    titleFontColor: "#fff",
3085                    titleAlign: "left",
3086                    bodySpacing: 2,
3087                    bodyFontColor: "#fff",
3088                    bodyAlign: "left",
3089                    footerFontStyle: "bold",
3090                    footerSpacing: 2,
3091                    footerMarginTop: 6,
3092                    footerFontColor: "#fff",
3093                    footerAlign: "left",
3094                    yPadding: 6,
3095                    xPadding: 6,
3096                    yAlign: "center",
3097                    xAlign: "center",
3098                    caretSize: 5,
3099                    cornerRadius: 6,
3100                    multiKeyBackground: "#fff",
3101                    callbacks: {
3102                        beforeTitle: n.noop,
3103                        title: function (t, e) {
3104                            var a = "", i = e.labels, n = i ? i.length : 0;
3105                            if (t.length > 0) {
3106                                var o = t[0];
3107                                o.xLabel ? a = o.xLabel : n > 0 && o.index < n && (a = i[o.index])
3108                            }
3109                            return a
3110                        },
3111                        afterTitle: n.noop,
3112                        beforeBody: n.noop,
3113                        beforeLabel: n.noop,
3114                        label: function (t, e) {
3115                            var a = e.datasets[t.datasetIndex].label || "";
3116                            return a + ": " + t.yLabel
3117                        },
3118                        labelColor: function (t, e) {
3119                            var a = e.getDatasetMeta(t.datasetIndex), i = a.data[t.index], n = i._view;
3120                            return {borderColor: n.borderColor, backgroundColor: n.backgroundColor}
3121                        },
3122                        afterLabel: n.noop,
3123                        afterBody: n.noop,
3124                        beforeFooter: n.noop,
3125                        footer: n.noop,
3126                        afterFooter: n.noop
3127                    }
3128                }, t.Tooltip = t.Element.extend({
3129                    initialize: function () {
3130                        var e = this, a = t.defaults.global, i = e._options, o = n.getValueOrDefault;
3131                        n.extend(e, {
3132                            _model: {
3133                                xPadding: i.xPadding,
3134                                yPadding: i.yPadding,
3135                                xAlign: i.yAlign,
3136                                yAlign: i.xAlign,
3137                                bodyFontColor: i.bodyFontColor,
3138                                _bodyFontFamily: o(i.bodyFontFamily, a.defaultFontFamily),
3139                                _bodyFontStyle: o(i.bodyFontStyle, a.defaultFontStyle),
3140                                _bodyAlign: i.bodyAlign,
3141                                bodyFontSize: o(i.bodyFontSize, a.defaultFontSize),
3142                                bodySpacing: i.bodySpacing,
3143                                titleFontColor: i.titleFontColor,
3144                                _titleFontFamily: o(i.titleFontFamily, a.defaultFontFamily),
3145                                _titleFontStyle: o(i.titleFontStyle, a.defaultFontStyle),
3146                                titleFontSize: o(i.titleFontSize, a.defaultFontSize),
3147                                _titleAlign: i.titleAlign,
3148                                titleSpacing: i.titleSpacing,
3149                                titleMarginBottom: i.titleMarginBottom,
3150                                footerFontColor: i.footerFontColor,
3151                                _footerFontFamily: o(i.footerFontFamily, a.defaultFontFamily),
3152                                _footerFontStyle: o(i.footerFontStyle, a.defaultFontStyle),
3153                                footerFontSize: o(i.footerFontSize, a.defaultFontSize),
3154                                _footerAlign: i.footerAlign,
3155                                footerSpacing: i.footerSpacing,
3156                                footerMarginTop: i.footerMarginTop,
3157                                caretSize: i.caretSize,
3158                                cornerRadius: i.cornerRadius,
3159                                backgroundColor: i.backgroundColor,
3160                                opacity: 0,
3161                                legendColorBackground: i.multiKeyBackground
3162                            }
3163                        })
3164                    }, getTitle: function () {
3165                        var t = this, a = t._options, i = a.callbacks, n = i.beforeTitle.apply(t, arguments), o = i.title.apply(t, arguments), r = i.afterTitle.apply(t, arguments), l = [];
3166                        return l = e(l, n), l = e(l, o), l = e(l, r)
3167                    }, getBeforeBody: function () {
3168                        var t = this._options.callbacks.beforeBody.apply(this, arguments);
3169                        return n.isArray(t) ? t : void 0 !== t ? [t] : []
3170                    }, getBody: function (t, a) {
3171                        var i = this, o = i._options.callbacks, r = [];
3172                        return n.each(t, function (t) {
3173                            var n = {before: [], lines: [], after: []};
3174                            e(n.before, o.beforeLabel.call(i, t, a)), e(n.lines, o.label.call(i, t, a)), e(n.after, o.afterLabel.call(i, t, a)), r.push(n)
3175                        }), r
3176                    }, getAfterBody: function () {
3177                        var t = this._options.callbacks.afterBody.apply(this, arguments);
3178                        return n.isArray(t) ? t : void 0 !== t ? [t] : []
3179                    }, getFooter: function () {
3180                        var t = this, a = t._options.callbacks, i = a.beforeFooter.apply(t, arguments), n = a.footer.apply(t, arguments), o = a.afterFooter.apply(t, arguments), r = [];
3181                        return r = e(r, i), r = e(r, n), r = e(r, o)
3182                    }, update: function (t) {
3183                        var e, o, r = this, l = r._options, s = r._model, d = r._active, u = r._data, c = r._chartInstance;
3184                        if (d.length) {
3185                            s.opacity = 1;
3186                            var h = [], f = a(d), g = [];
3187                            for (e = 0, o = d.length; o > e; ++e)g.push(i(d[e]));
3188                            l.itemSort && (g = g.sort(l.itemSort)), d.length > 1 && n.each(g, function (t) {
3189                                h.push(l.callbacks.labelColor.call(r, t, c))
3190                            }), n.extend(s, {
3191                                title: r.getTitle(g, u),
3192                                beforeBody: r.getBeforeBody(g, u),
3193                                body: r.getBody(g, u),
3194                                afterBody: r.getAfterBody(g, u),
3195                                footer: r.getFooter(g, u),
3196                                x: Math.round(f.x),
3197                                y: Math.round(f.y),
3198                                caretPadding: n.getValueOrDefault(f.padding, 2),
3199                                labelColors: h
3200                            });
3201                            var p = r.getTooltipSize(s);
3202                            r.determineAlignment(p), n.extend(s, r.getBackgroundPoint(s, p))
3203                        } else r._model.opacity = 0;
3204                        return t && l.custom && l.custom.call(r, s), r
3205                    }, getTooltipSize: function (t) {
3206                        var e = this._chart.ctx, a = {
3207                            height: 2 * t.yPadding,
3208                            width: 0
3209                        }, i = t.body, o = i.reduce(function (t, e) {
3210                            return t + e.before.length + e.lines.length + e.after.length
3211                        }, 0);
3212                        o += t.beforeBody.length + t.afterBody.length;
3213                        var r = t.title.length, l = t.footer.length, s = t.titleFontSize, d = t.bodyFontSize, u = t.footerFontSize;
3214                        a.height += r * s, a.height += (r - 1) * t.titleSpacing, a.height += r ? t.titleMarginBottom : 0, a.height += o * d, a.height += o ? (o - 1) * t.bodySpacing : 0, a.height += l ? t.footerMarginTop : 0, a.height += l * u, a.height += l ? (l - 1) * t.footerSpacing : 0;
3215                        var c = 0, h = function (t) {
3216                            a.width = Math.max(a.width, e.measureText(t).width + c)
3217                        };
3218                        return e.font = n.fontString(s, t._titleFontStyle, t._titleFontFamily), n.each(t.title, h), e.font = n.fontString(d, t._bodyFontStyle, t._bodyFontFamily), n.each(t.beforeBody.concat(t.afterBody), h), c = i.length > 1 ? d + 2 : 0, n.each(i, function (t) {
3219                            n.each(t.before, h), n.each(t.lines, h), n.each(t.after, h)
3220                        }), c = 0, e.font = n.fontString(u, t._footerFontStyle, t._footerFontFamily), n.each(t.footer, h), a.width += 2 * t.xPadding, a
3221                    }, determineAlignment: function (t) {
3222                        var e = this, a = e._model, i = e._chart, n = e._chartInstance.chartArea;
3223                        a.y < t.height ? a.yAlign = "top" : a.y > i.height - t.height && (a.yAlign = "bottom");
3224                        var o, r, l, s, d, u = (n.left + n.right) / 2, c = (n.top + n.bottom) / 2;
3225                        "center" === a.yAlign ? (o = function (t) {
3226                            return u >= t
3227                        }, r = function (t) {
3228                            return t > u
3229                        }) : (o = function (e) {
3230                            return e <= t.width / 2
3231                        }, r = function (e) {
3232                            return e >= i.width - t.width / 2
3233                        }), l = function (e) {
3234                            return e + t.width > i.width
3235                        }, s = function (e) {
3236                            return e - t.width < 0
3237                        }, d = function (t) {
3238                            return c >= t ? "top" : "bottom"
3239                        }
3239, o(a.x) ? (a.xAlign = "left", l(a.x) && (a.xAlign = "center", a.yAlign = d(a.y))) : r(a.x) && (a.xAlign = "right", s(a.x) && (a.xAlign = "center", a.yAlign = d(a.y)))
3240                    }, getBackgroundPoint: function (t, e) {
3241                        var a = {
3242                            x: t.x,
3243                            y: t.y
3244                        }, i = t.caretSize, n = t.caretPadding, o = t.cornerRadius, r = t.xAlign, l = t.yAlign, s = i + n, d = o + n;
3245                        return "right" === r ? a.x -= e.width : "center" === r && (a.x -= e.width / 2), "top" === l ? a.y += s : "bottom" === l ? a.y -= e.height + s : a.y -= e.height / 2, "center" === l ? "left" === r ? a.x += s : "right" === r && (a.x -= s) : "left" === r ? a.x -= d : "right" === r && (a.x += d), a
3246                    }, drawCaret: function (t, e, a, i) {
3247                        var o, r, l, s, d, u, c = this._view, h = this._chart.ctx, f = c.caretSize, g = c.cornerRadius, p = c.xAlign, m = c.yAlign, b = t.x, v = t.y, x = e.width, y = e.height;
3248                        "center" === m ? ("left" === p ? (o = b, r = o - f, l = o) : (o = b + x, r = o + f, l = o), d = v + y / 2, s = d - f, u = d + f) : ("left" === p ? (o = b + g, r = o + f, l = r + f) : "right" === p ? (o = b + x - g, r = o - f, l = r - f) : (r = b + x / 2, o = r - f, l = r + f), "top" === m ? (s = v, d = s - f, u = s) : (s = v + y, d = s + f, u = s));
3249                        var k = n.color(c.backgroundColor);
3250                        h.fillStyle = k.alpha(a * k.alpha()).rgbString(), h.beginPath(), h.moveTo(o, s), h.lineTo(r, d), h.lineTo(l, u), h.closePath(), h.fill()
3251                    }, drawTitle: function (t, e, a, i) {
3252                        var o = e.title;
3253                        if (o.length) {
3254                            a.textAlign = e._titleAlign, a.textBaseline = "top";
3255                            var r = e.titleFontSize, l = e.titleSpacing, s = n.color(e.titleFontColor);
3256                            a.fillStyle = s.alpha(i * s.alpha()).rgbString(), a.font = n.fontString(r, e._titleFontStyle, e._titleFontFamily);
3257                            var d, u;
3258                            for (d = 0, u = o.length; u > d; ++d)a.fillText(o[d], t.x, t.y), t.y += r + l, d + 1 === o.length && (t.y += e.titleMarginBottom - l)
3259                        }
3260                    }, drawBody: function (t, e, a, i) {
3261                        var o = e.bodyFontSize, r = e.bodySpacing, l = e.body;
3262                        a.textAlign = e._bodyAlign, a.textBaseline = "top";
3263                        var s = n.color(e.bodyFontColor), d = s.alpha(i * s.alpha()).rgbString();
3264                        a.fillStyle = d, a.font = n.fontString(o, e._bodyFontStyle, e._bodyFontFamily);
3265                        var u = 0, c = function (e) {
3266                            a.fillText(e, t.x + u, t.y), t.y += o + r
3267                        };
3268                        n.each(e.beforeBody, c);
3269                        var h = l.length > 1;
3270                        u = h ? o + 2 : 0, n.each(l, function (r, l) {
3271                            n.each(r.before, c), n.each(r.lines, function (r) {
3272                                h && (a.fillStyle = n.color(e.legendColorBackground).alpha(i).rgbaString(), a.fillRect(t.x, t.y, o, o), a.strokeStyle = n.color(e.labelColors[l].borderColor).alpha(i).rgbaString(), a.strokeRect(t.x, t.y, o, o), a.fillStyle = n.color(e.labelColors[l].backgroundColor).alpha(i).rgbaString(), a.fillRect(t.x + 1, t.y + 1, o - 2, o - 2), a.fillStyle = d), c(r)
3273                            }), n.each(r.after, c)
3274                        }), u = 0, n.each(e.afterBody, c), t.y -= r
3275                    }, drawFooter: function (t, e, a, i) {
3276                        var o = e.footer;
3277                        if (o.length) {
3278                            t.y += e.footerMarginTop, a.textAlign = e._footerAlign, a.textBaseline = "top";
3279                            var r = n.color(e.footerFontColor);
3280                            a.fillStyle = r.alpha(i * r.alpha()).rgbString(), a.font = n.fontString(e.footerFontSize, e._footerFontStyle, e._footerFontFamily), n.each(o, function (i) {
3281                                a.fillText(i, t.x, t.y), t.y += e.footerFontSize + e.footerSpacing
3282                            })
3283                        }
3284                    }, draw: function () {
3285                        var t = this._chart.ctx, e = this._view;
3286                        if (0 !== e.opacity) {
3287                            var a = this.getTooltipSize(e), i = {
3288                                x: e.x,
3289                                y: e.y
3290                            }, o = Math.abs(e.opacity < .001) ? 0 : e.opacity;
3291                            if (this._options.enabled) {
3292                                var r = n.color(e.backgroundColor);
3293                                t.fillStyle = r.alpha(o * r.alpha()).rgbString(), n.drawRoundedRectangle(t, i.x, i.y, a.width, a.height, e.cornerRadius), t.fill(), this.drawCaret(i, a, o, e.caretPadding), i.x += e.xPadding, i.y += e.yPadding, this.drawTitle(i, e, t, o), this.drawBody(i, e, t, o), this.drawFooter(i, e, t, o)
3294                            }
3295                        }
3296                    }
3297                })
3298            }
3299        }, {}], 34: [function (t, e, a) {
3300            "use strict";
3301            e.exports = function (t, e) {
3302                var a = t.helpers, i = t.defaults.global;
3303                i.elements.arc = {
3304                    backgroundColor: i.defaultColor,
3305                    borderColor: "#fff",
3306                    borderWidth: 2
3307                }, t.elements.Arc = t.Element.extend({
3308                    inLabelRange: function (t) {
3309                        var e = this._view;
3310                        return e ? Math.pow(t - e.x, 2) < Math.pow(e.radius + e.hoverRadius, 2) : !1
3311                    }, inRange: function (t, e) {
3312                        var i = this._view;
3313                        if (i) {
3314                            for (var n = a.getAngleFromPoint(i, {
3315                                x: t,
3316                                y: e
3317                            }), o = n.angle, r = n.distance, l = i.startAngle, s = i.endAngle; l > s;)s += 2 * Math.PI;
3318                            for (; o > s;)o -= 2 * Math.PI;
3319                            for (; l > o;)o += 2 * Math.PI;
3320                            var d = o >= l && s >= o, u = r >= i.innerRadius && r <= i.outerRadius;
3321                            return d && u
3322                        }
3323                        return !1
3324                    }, tooltipPosition: function () {
3325                        var t = this._view, e = t.startAngle + (t.endAngle - t.startAngle) / 2, a = (t.outerRadius - t.innerRadius) / 2 + t.innerRadius;
3326                        return {x: t.x + Math.cos(e) * a, y: t.y + Math.sin(e) * a}
3327                    }, draw: function () {
3328                        var t = this._chart.ctx, e = this._view, a = e.startAngle, i = e.endAngle;
3329                        t.beginPath(), t.arc(e.x, e.y, e.outerRadius, a, i), t.arc(e.x, e.y, e.innerRadius, i, a, !0), t.closePath(), t.strokeStyle = e.borderColor, t.lineWidth = e.borderWidth, t.fillStyle = e.backgroundColor, t.fill(), t.lineJoin = "bevel", e.borderWidth && t.stroke()
3330                    }
3331                })
3332            }
3333        }, {}], 35: [function (t, e, a) {
3334            "use strict";
3335            e.exports = function (t) {
3336                var e = t.helpers, a = t.defaults.global;
3337                t.defaults.global.elements.line = {
3338                    tension: .4,
3339                    backgroundColor: a.defaultColor,
3340                    borderWidth: 3,
3341                    borderColor: a.defaultColor,
3342                    borderCapStyle: "butt",
3343                    borderDash: [],
3344                    borderDashOffset: 0,
3345                    borderJoinStyle: "miter",
3346                    fill: !0
3347                }, t.elements.Line = t.Element.extend({
3348                    lineToNextPoint: function (t, e, a, i, n) {
3349                        var o = this, r = o._chart.ctx, l = o._view ? o._view.spanGaps : !1;
3350                        e._view.skip && !l ? i.call(o, t, e, a) : t._view.skip && !l ? n.call(o, t, e, a) : 0 === e._view.tension ? r.lineTo(e._view.x, e._view.y) : r.bezierCurveTo(t._view.controlPointNextX, t._view.controlPointNextY, e._view.controlPointPreviousX, e._view.controlPointPreviousY, e._view.x, e._view.y)
3351                    }, draw: function () {
3352                        function t(t) {
3353                            r._view.skip || l._view.skip ? t && o.lineTo(i._view.scaleZero.x, i._view.scaleZero.y) : o.bezierCurveTo(l._view.controlPointNextX, l._view.controlPointNextY, r._view.controlPointPreviousX, r._view.controlPointPreviousY, r._view.x, r._view.y)
3354                        }
3355
3356                        var i = this, n = i._view, o = i._chart.ctx, r = i._children[0], l = i._children[i._children.length - 1];
3357                        o.save(), i._children.length > 0 && n.fill && (o.beginPath(), e.each(i._children, function (t, a) {
3358                            var r = e.previousItem(i._children, a), l = e.nextItem(i._children, a);
3359                            0 === a ? (i._loop ? o.moveTo(n.scaleZero.x, n.scaleZero.y) : o.moveTo(t._view.x, n.scaleZero), t._view.skip ? i._loop || o.moveTo(l._view.x, i._view.scaleZero) : o.lineTo(t._view.x, t._view.y)) : i.lineToNextPoint(r, t, l, function (t, e, a) {
3360                                i._loop ? o.lineTo(i._view.scaleZero.x, i._view.scaleZero.y) : (o.lineTo(t._view.x, i._view.scaleZero), o.moveTo(a._view.x, i._view.scaleZero))
3361                            }, function (t, e) {
3362                                o.lineTo(e._view.x, e._view.y)
3363                            })
3364                        }, i), i._loop ? t(!0) : (o.lineTo(i._children[i._children.length - 1]._view.x, n.scaleZero), o.lineTo(i._children[0]._view.x, n.scaleZero)), o.fillStyle = n.backgroundColor || a.defaultColor, o.closePath(), o.fill());
3365                        var s = a.elements.line;
3366                        o.lineCap = n.borderCapStyle || s.borderCapStyle, o.setLineDash && o.setLineDash(n.borderDash || s.borderDash), o.lineDashOffset = n.borderDashOffset || s.borderDashOffset, o.lineJoin = n.borderJoinStyle || s.borderJoinStyle, o.lineWidth = n.borderWidth || s.borderWidth, o.strokeStyle = n.borderColor || a.defaultColor, o.beginPath(), e.each(i._children, function (t, a) {
3367                            var n = e.previousItem(i._children, a), r = e.nextItem(i._children, a);
3368                            0 === a ? o.moveTo(t._view.x, t._view.y) : i.lineToNextPoint(n, t, r, function (t, e, a) {
3369                                o.moveTo(a._view.x, a._view.y)
3370                            }, function (t, e) {
3371                                o.moveTo(e._view.x, e._view.y)
3372                            })
3373                        }, i), i._loop && i._children.length >
3373 0 && t(), o.stroke(), o.restore()
3374                    }
3375                })
3376            }
3377        }, {}], 36: [function (t, e, a) {
3378            "use strict";
3379            e.exports = function (t) {
3380                var e = t.helpers, a = t.defaults.global, i = a.defaultColor;
3381                a.elements.point = {
3382                    radius: 3,
3383                    pointStyle: "circle",
3384                    backgroundColor: i,
3385                    borderWidth: 1,
3386                    borderColor: i,
3387                    hitRadius: 1,
3388                    hoverRadius: 4,
3389                    hoverBorderWidth: 1
3390                }, t.elements.Point = t.Element.extend({
3391                    inRange: function (t, e) {
3392                        var a = this._view;
3393                        return a ? Math.pow(t - a.x, 2) + Math.pow(e - a.y, 2) < Math.pow(a.hitRadius + a.radius, 2) : !1
3394                    }, inLabelRange: function (t) {
3395                        var e = this._view;
3396                        return e ? Math.pow(t - e.x, 2) < Math.pow(e.radius + e.hitRadius, 2) : !1
3397                    }, tooltipPosition: function () {
3398                        var t = this._view;
3399                        return {x: t.x, y: t.y, padding: t.radius + t.borderWidth}
3400                    }, draw: function () {
3401                        var t, n, o, r, l, s, d = this._view, u = this._chart.ctx, c = d.pointStyle, h = d.radius, f = d.x, g = d.y;
3402                        if (!d.skip) {
3403                            if ("object" == typeof c && (t = c.toString(), "[object HTMLImageElement]" === t || "[object HTMLCanvasElement]" === t))return void u.drawImage(c, f - c.width / 2, g - c.height / 2);
3404                            if (!(isNaN(h) || 0 >= h)) {
3405                                switch (u.strokeStyle = d.borderColor || i, u.lineWidth = e.getValueOrDefault(d.borderWidth, a.elements.point.borderWidth), u.fillStyle = d.backgroundColor || i, c) {
3406                                    default:
3407                                        u.beginPath(), u.arc(f, g, h, 0, 2 * Math.PI), u.closePath(), u.fill();
3408                                        break;
3409                                    case"triangle":
3410                                        u.beginPath(), n = 3 * h / Math.sqrt(3), l = n * Math.sqrt(3) / 2, u.moveTo(f - n / 2, g + l / 3), u.lineTo(f + n / 2, g + l / 3), u.lineTo(f, g - 2 * l / 3), u.closePath(), u.fill();
3411                                        break;
3412                                    case"rect":
3413                                        s = 1 / Math.SQRT2 * h, u.fillRect(f - s, g - s, 2 * s, 2 * s), u.strokeRect(f - s, g - s, 2 * s, 2 * s);
3414                                        break;
3415                                    case"rectRot":
3416                                        s = 1 / Math.SQRT2 * h, u.beginPath(), u.moveTo(f - s, g), u.lineTo(f, g + s), u.lineTo(f + s, g), u.lineTo(f, g - s), u.closePath(), u.fill();
3417                                        break;
3418                                    case"cross":
3419                                        u.beginPath(), u.moveTo(f, g + h), u.lineTo(f, g - h), u.moveTo(f - h, g), u.lineTo(f + h, g), u.closePath();
3420                                        break;
3421                                    case"crossRot":
3422                                        u.beginPath(), o = Math.cos(Math.PI / 4) * h, r = Math.sin(Math.PI / 4) * h, u.moveTo(f - o, g - r), u.lineTo(f + o, g + r), u.moveTo(f - o, g + r), u.lineTo(f + o, g - r), u.closePath();
3423                                        break;
3424                                    case"star":
3425                                        u.beginPath(), u.moveTo(f, g + h), u.lineTo(f, g - h), u.moveTo(f - h, g), u.lineTo(f + h, g), o = Math.cos(Math.PI / 4) * h, r = Math.sin(Math.PI / 4) * h, u.moveTo(f - o, g - r), u.lineTo(f + o, g + r), u.moveTo(f - o, g + r), u.lineTo(f + o, g - r), u.closePath();
3426                                        break;
3427                                    case"line":
3428                                        u.beginPath(), u.moveTo(f - h, g), u.lineTo(f + h, g), u.closePath();
3429                                        break;
3430                                    case"dash":
3431                                        u.beginPath(), u.moveTo(f, g), u.lineTo(f + h, g), u.closePath()
3432                                }
3433                                u.stroke()
3434                            }
3435                        }
3436                    }
3437                })
3438            }
3439        }, {}], 37: [function (t, e, a) {
3440            "use strict";
3441            e.exports = function (t) {
3442                var e = (t.helpers, t.defaults.global);
3443                e.elements.rectangle = {
3444                    backgroundColor: e.defaultColor,
3445                    borderWidth: 0,
3446                    borderColor: e.defaultColor,
3447                    borderSkipped: "bottom"
3448                }, t.elements.Rectangle = t.Element.extend({
3449                    draw: function () {
3450                        function t(t) {
3451                            return s[(u + t) % 4]
3452                        }
3453
3454                        var e = this._chart.ctx, a = this._view, i = a.width / 2, n = a.x - i, o = a.x + i, r = a.base - (a.base - a.y), l = a.borderWidth / 2;
3455                        a.borderWidth && (n += l, o -= l, r += l), e.beginPath(), e.fillStyle = a.backgroundColor, e.strokeStyle = a.borderColor, e.lineWidth = a.borderWidth;
3456                        var s = [[n, a.base], [n, r], [o, r], [o, a.base]], d = ["bottom", "left", "top", "right"], u = d.indexOf(a.borderSkipped, 0);
3457                        -1 === u && (u = 0), e.moveTo.apply(e, t(0));
3458                        for (var c = 1; 4 > c; c++)e.lineTo.apply(e, t(c));
3459                        e.fill(), a.borderWidth && e.stroke()
3460                    }, height: function () {
3461                        var t = this._view;
3462                        return t.base - t.y
3463                    }, inRange: function (t, e) {
3464                        var a = this._view;
3465                        return a ? a.y < a.base ? t >= a.x - a.width / 2 && t <= a.x + a.width / 2 && e >= a.y && e <= a.base : t >= a.x - a.width / 2 && t <= a.x + a.width / 2 && e >= a.base && e <= a.y : !1
3466                    }, inLabelRange: function (t) {
3467                        var e = this._view;
3468                        return e ? t >= e.x - e.width / 2 && t <= e.x + e.width / 2 : !1
3469                    }, tooltipPosition: function () {
3470                        var t = this._view;
3471                        return {x: t.x, y: t.y}
3472                    }
3473                })
3474            }
3475        }, {}], 38: [function (t, e, a) {
3476            "use strict";
3477            e.exports = function (t) {
3478                var e = t.helpers, a = {position: "bottom"}, i = t.Scale.extend({
3479                    determineDataLimits: function () {
3480                        var t = this;
3481                        t.minIndex = 0, t.maxIndex = t.chart.data.labels.length - 1;
3482                        var a;
3483                        void 0 !== t.options.ticks.min && (a = e.indexOf(t.chart.data.labels, t.options.ticks.min), t.minIndex = -1 !== a ? a : t.minIndex), void 0 !== t.options.ticks.max && (a = e.indexOf(t.chart.data.labels, t.options.ticks.max), t.maxIndex = -1 !== a ? a : t.maxIndex), t.min = t.chart.data.labels[t.minIndex], t.max = t.chart.data.labels[t.maxIndex]
3484                    }, buildTicks: function (t) {
3485                        var e = this;
3486                        e.ticks = 0 === e.minIndex && e.maxIndex === e.chart.data.labels.length - 1 ? e.chart.data.labels : e.chart.data.labels.slice(e.minIndex, e.maxIndex + 1)
3487                    }, getLabelForIndex: function (t, e) {
3488                        return this.ticks[t]
3489                    }, getPixelForValue: function (t, e, a, i) {
3490                        var n = this, o = Math.max(n.maxIndex + 1 - n.minIndex - (n.options.gridLines.offsetGridLines ? 0 : 1), 1);
3491                        if (n.isHorizontal()) {
3492                            var r = n.width - (n.paddingLeft + n.paddingRight), l = r / o, s = l * (e - n.minIndex) + n.paddingLeft;
3493                            return n.options.gridLines.offsetGridLines && i && (s += l / 2), n.left + Math.round(s)
3494                        }
3495                        var d = n.height - (n.paddingTop + n.paddingBottom), u = d / o, c = u * (e - n.minIndex) + n.paddingTop;
3496                        return n.options.gridLines.offsetGridLines && i && (c += u / 2), n.top + Math.round(c)
3497                    }, getPixelForTick: function (t, e) {
3498                        return this.getPixelForValue(this.ticks[t], t + this.minIndex, null, e)
3499                    }, getValueForPixel: function (t) {
3500                        var e, a = this, i = Math.max(a.ticks.length - (a.options.gridLines.offsetGridLines ? 0 : 1), 1), n = a.isHorizontal(), o = n ? a.width - (a.paddingLeft + a.paddingRight) : a.height - (a.paddingTop + a.paddingBottom), r = o / i;
3501                        return a.options.gridLines.offsetGridLines && (t -= r / 2), t -= n ? a.paddingLeft : a.paddingTop, e = 0 >= t ? 0 : Math.round(t / r)
3502                    }
3503                });
3504                t.scaleService.registerScaleType("category", i, a)
3505            }
3506        }, {}], 39: [function (t, e, a) {
3507            "use strict";
3508            e.exports = function (t) {
3509                var e = t.helpers, a = {
3510                    position: "left", ticks: {
3511                        callback: function (t, a, i) {
3512                            var n = i.length > 3 ? i[2] - i[1] : i[1] - i[0];
3513                            Math.abs(n) > 1 && t !== Math.floor(t) && (n = t - Math.floor(t));
3514                            var o = e.log10(Math.abs(n)), r = "";
3515                            if (0 !== t) {
3516                                var l = -1 * Math.floor(o);
3517                                l = Math.max(Math.min(l, 20), 0), r = t.toFixed(l)
3518                            } else r = "0";
3519                            return r
3520                        }
3521                    }
3522                }, i = t.LinearScaleBase.extend({
3523                    determineDataLimits: function () {
3524                        function t(t) {
3525                            return l ? t.xAxisID === a.id : t.yAxisID === a.id
3526                        }
3527
3528                        var a = this, i = a.options, n = (i.ticks, a.chart), o = n.data, r = o.datasets, l = a.isHorizontal();
3529                        if (a.min = null, a.max = null, i.stacked) {
3530                            var s = {}, d = !1, u = !1;
3531                            e.each(r, function (o, r) {
3532                                var l = n.getDatasetMeta(r);
3533                                void 0 === s[l.type] && (s[l.type] = {positiveValues: [], negativeValues: []});
3534                                var c = s[l.type].positiveValues, h = s[l.type].negativeValues;
3535                                n.isDatasetVisible(r) && t(l) && e.each(o.data, function (t, e) {
3536                                    var n = +a.getRightValue(t);
3537                                    isNaN(n) || l.data[e].hidden || (c[e] = c[e] || 0, h[e] = h[e] || 0, i.relativePoints ? c[e] = 100 : 0 > n ? (u = !0, h[e] += n) : (d = !0, c[e] += n))
3538                                })
3539                            }), e.each(s, function (t) {
3540                                var i = t.positiveValues.concat(t.negativeValues), n = e.min(i), o = e.max(i);
3541                                a.min = null === a.min ? n : Math.min(a.min, n), a.max = null === a.max ? o : Math.max(a.max, o)
3542                            })
3543                        } else e.each(r, function (i, o) {
3544                            var r = n.getDatasetMeta(o);
3545                            n.isDatasetVisible(o) && t(r) && e.each(i.data, function (t, e) {
3546                                var i = +a.getRightValue(t);
3547                                isNaN(i) || r.data[e].hidden || (null === a.min ? a.min = i : i < a.min && (a.min = i), null === a.max ? a.max = i : i > a.max && (a.max = i))
3548                            })
3549                        });
3550                        this.handleTickRangeOptions()
3551                    }, getTickLimit: function () {
3552                        var a, i = this, n = i.options.ticks;
3553                        if (i.isHorizontal())a = Math.min(n.maxTicksLimit ? n.maxTicksLimit : 11, Math.ceil(i.width / 50)); else {
3554                            var o = e.getValueOrDefault(n.fontSize, t.defaults.global.defaultFontSize);
3555                            a = Math.min(n.maxTicksLimit ? n.maxTicksLimit : 11, Math.ceil(i.height / (2 * o)))
3556                        }
3557                        return a
3558                    }, handleDirectionalChanges: function () {
3559                        this.isHorizontal() || this.ticks.reverse()
3560                    }, getLabelForIndex: function (t, e) {
3561                        return +this.getRightValue(this.chart.data.datasets[e].data[t])
3562                    }, getPixelForValue: function (t, e, a, i) {
3563                        var n, o, r = this, l = r.paddingLeft, s = r.paddingBottom, d = r.start, u = +r.getRightValue(t), c = r.end - d;
3564                        return r.isHorizontal() ? (o = r.width - (l + r.paddingRight), n = r.left + o / c * (u - d), Math.round(n + l)) : (o = r.height - (r.paddingTop + s), n = r.bottom - s - o / c * (u - d), Math.round(n))
3565                    }, getValueForPixel: function (t) {
3566                        var e = this, a = e.isHorizontal(), i = e.paddingLeft, n = e.paddingBottom, o = a ? e.width - (i + e.paddingRight) : e.height - (e.paddingTop + n), r = (a ? t - e.left - i : e.bottom - n - t) / o;
3567                        return e.start + (e.end - e.start) * r
3568                    }, getPixelForTick: function (t, e) {
3569                        return this.getPixelForValue(this.ticksAsNumbers[t], null, null, e)
3570                    }
3571                });
3572                t.scaleService.registerScaleType("linear", i, a)
3573            }
3574        }, {}], 40: [function (t, e, a) {
3575            "use strict";
3576            e.exports = function (t) {
3577                var e = t.helpers, a = e.noop;
3578                t.LinearScaleBase = t.Scale.extend({
3579                    handleTickRangeOptions: function () {
3580                        var t = this, a = t.options, i = a.ticks;
3581                        if (i.beginAtZero) {
3582                            var n = e.sign(t.min), o = e.sign(t.max);
3583                            0 > n && 0 > o ? t.max = 0 : n > 0 && o > 0 && (t.min = 0)
3584                        }
3585                        void 0 !== i.min ? t.min = i.min : void 0 !== i.suggestedMin && (t.min = Math.min(t.min, i.suggestedMin)), void 0 !== i.max ? t.max = i.max : void 0 !== i.suggestedMax && (t.max = Math.max(t.max, i.suggestedMax)), t.min === t.max && (t.max++, i.beginAtZero || t.min--)
3586                    }, getTickLimit: a, handleDirectionalChanges: a, buildTicks: function () {
3587                        var t = this, a = t.options, i = a.ticks, n = e.getValueOrDefault, o = (t.isHorizontal(), t.ticks = []), r = t.getTickLimit();
3588                        r = Math.max(2, r);
3589                        var l, s = i.fixedStepSize && i.fixedStepSize > 0 || i.stepSize && i.stepSize > 0;
3590                        if (s)l = n(i.fixedStepSize, i.stepSize); else {
3591                            var d = e.niceNum(t.max - t.min, !1);
3592                            l = e.niceNum(d / (r - 1), !0)
3593                        }
3594                        var u = Math.floor(t.min / l) * l, c = Math.ceil(t.max / l) * l, h = (c - u) / l;
3595                        h = e.almostEquals(h, Math.round(h), l / 1e3) ? Math.round(h) : Math.ceil(h), o.push(void 0 !== i.min ? i.min : u);
3596                        for (var f = 1; h > f; ++f)o.push(u + f * l);
3597                        o.push(void 0 !== i.max ? i.max : c), t.handleDirectionalChanges(), t.max = e.max(o), t.min = e.min(o), i.reverse ? (o.reverse(), t.start = t.max, t.end = t.min) : (t.start = t.min, t.end = t.max)
3598                    }, convertTicksToLabels: function () {
3599                        var e = this;
3600                        e.ticksAsNumbers = e.ticks.slice(), e.zeroLineIndex = e.ticks.indexOf(0), t.Scale.prototype.convertTicksToLabels.call(e)
3601                    }
3602                })
3603            }
3604        }, {}], 41: [function (t, e, a) {
3605            "use strict";
3605
3606            e.exports = function (t) {
3607                var e = t.helpers, a = {
3608                    position: "left", ticks: {
3609                        callback: function (t, a, i) {
3610                            var n = t / Math.pow(10, Math.floor(e.log10(t)));
3611                            return 1 === n || 2 === n || 5 === n || 0 === a || a === i.length - 1 ? t.toExponential() : ""
3612                        }
3613                    }
3614                }, i = t.Scale.extend({
3615                    determineDataLimits: function () {
3616                        function t(t) {
3617                            return d ? t.xAxisID === a.id : t.yAxisID === a.id
3618                        }
3619
3620                        var a = this, i = a.options, n = i.ticks, o = a.chart, r = o.data, l = r.datasets, s = e.getValueOrDefault, d = a.isHorizontal();
3621                        if (a.min = null, a.max = null, i.stacked) {
3622                            var u = {};
3623                            e.each(l, function (n, r) {
3624                                var l = o.getDatasetMeta(r);
3625                                o.isDatasetVisible(r) && t(l) && (void 0 === u[l.type] && (u[l.type] = []), e.each(n.data, function (t, e) {
3626                                    var n = u[l.type], o = +a.getRightValue(t);
3627                                    isNaN(o) || l.data[e].hidden || (n[e] = n[e] || 0, i.relativePoints ? n[e] = 100 : n[e] += o)
3628                                }))
3629                            }), e.each(u, function (t) {
3630                                var i = e.min(t), n = e.max(t);
3631                                a.min = null === a.min ? i : Math.min(a.min, i), a.max = null === a.max ? n : Math.max(a.max, n)
3632                            })
3633                        } else e.each(l, function (i, n) {
3634                            var r = o.getDatasetMeta(n);
3635                            o.isDatasetVisible(n) && t(r) && e.each(i.data, function (t, e) {
3636                                var i = +a.getRightValue(t);
3637                                isNaN(i) || r.data[e].hidden || (null === a.min ? a.min = i : i < a.min && (a.min = i), null === a.max ? a.max = i : i > a.max && (a.max = i))
3638                            })
3639                        });
3640                        a.min = s(n.min, a.min), a.max = s(n.max, a.max), a.min === a.max && (0 !== a.min && null !== a.min ? (a.min = Math.pow(10, Math.floor(e.log10(a.min)) - 1), a.max = Math.pow(10, Math.floor(e.log10(a.max)) + 1)) : (a.min = 1, a.max = 10))
3641                    }, buildTicks: function () {
3642                        for (var t = this, a = t.options, i = a.ticks, n = e.getValueOrDefault, o = t.ticks = [], r = n(i.min, Math.pow(10, Math.floor(e.log10(t.min)))); r < t.max;) {
3643                            o.push(r);
3644                            var l = Math.floor(e.log10(r)), s = Math.floor(r / Math.pow(10, l)) + 1;
3645                            10 === s && (s = 1, ++l), r = s * Math.pow(10, l)
3646                        }
3647                        var d = n(i.max, r);
3648                        o.push(d), t.isHorizontal() || o.reverse(), t.max = e.max(o), t.min = e.min(o), i.reverse ? (o.reverse(), t.start = t.max, t.end = t.min) : (t.start = t.min, t.end = t.max)
3649                    }, convertTicksToLabels: function () {
3650                        this.tickValues = this.ticks.slice(), t.Scale.prototype.convertTicksToLabels.call(this)
3651                    }, getLabelForIndex: function (t, e) {
3652                        return +this.getRightValue(this.chart.data.datasets[e].data[t])
3653                    }, getPixelForTick: function (t, e) {
3654                        return this.getPixelForValue(this.tickValues[t], null, null, e)
3655                    }, getPixelForValue: function (t, a, i, n) {
3656                        var o, r, l = this, s = l.start, d = +l.getRightValue(t), u = e.log10(l.end) - e.log10(s), c = l.paddingTop, h = l.paddingBottom, f = l.paddingLeft;
3657                        return l.isHorizontal() ? 0 === d ? r = l.left + f : (o = l.width - (f + l.paddingRight), r = l.left + o / u * (e.log10(d) - e.log10(s)), r += f) : 0 === d ? r = l.top + c : (o = l.height - (c + h), r = l.bottom - h - o / u * (e.log10(d) - e.log10(s))), r
3658                    }, getValueForPixel: function (t) {
3659                        var a, i, n = this, o = e.log10(n.end) - e.log10(n.start);
3660                        return n.isHorizontal() ? (i = n.width - (n.paddingLeft + n.paddingRight), a = n.start * Math.pow(10, (t - n.left - n.paddingLeft) * o / i)) : (i = n.height - (n.paddingTop + n.paddingBottom), a = Math.pow(10, (n.bottom - n.paddingBottom - t) * o / i) / n.start), a
3661                    }
3662                });
3663                t.scaleService.registerScaleType("logarithmic", i, a)
3664            }
3665        }, {}], 42: [function (t, e, a) {
3666            "use strict";
3667            e.exports = function (t) {
3668                var e = t.helpers, a = t.defaults.global, i = {
3669                    display: !0,
3670                    animate: !0,
3671                    lineArc: !1,
3672                    position: "chartArea",
3673                    angleLines: {display: !0, color: "rgba(0, 0, 0, 0.1)", lineWidth: 1},
3674                    ticks: {
3675                        showLabelBackdrop: !0,
3676                        backdropColor: "rgba(255,255,255,0.75)",
3677                        backdropPaddingY: 2,
3678                        backdropPaddingX: 2
3679                    },
3680                    pointLabels: {
3681                        fontSize: 10, callback: function (t) {
3682                            return t
3683                        }
3684                    }
3685                }, n = t.LinearScaleBase.extend({
3686                    getValueCount: function () {
3687                        return this.chart.data.labels.length
3688                    }, setDimensions: function () {
3689                        var t = this, i = t.options, n = i.ticks;
3690                        t.width = t.maxWidth, t.height = t.maxHeight, t.xCenter = Math.round(t.width / 2), t.yCenter = Math.round(t.height / 2);
3691                        var o = e.min([t.height, t.width]), r = e.getValueOrDefault(n.fontSize, a.defaultFontSize);
3692                        t.drawingArea = i.display ? o / 2 - (r / 2 + n.backdropPaddingY) : o / 2
3693                    }, determineDataLimits: function () {
3694                        var t = this, a = t.chart;
3695                        t.min = null, t.max = null, e.each(a.data.datasets, function (i, n) {
3696                            if (a.isDatasetVisible(n)) {
3697                                var o = a.getDatasetMeta(n);
3698                                e.each(i.data, function (e, a) {
3699                                    var i = +t.getRightValue(e);
3700                                    isNaN(i) || o.data[a].hidden || (null === t.min ? t.min = i : i < t.min && (t.min = i), null === t.max ? t.max = i : i > t.max && (t.max = i))
3701                                })
3702                            }
3703                        }), t.handleTickRangeOptions()
3704                    }, getTickLimit: function () {
3705                        var t = this.options.ticks, i = e.getValueOrDefault(t.fontSize, a.defaultFontSize);
3706                        return Math.min(t.maxTicksLimit ? t.maxTicksLimit : 11, Math.ceil(this.drawingArea / (1.5 * i)))
3707                    }, convertTicksToLabels: function () {
3708                        var e = this;
3709                        t.LinearScaleBase.prototype.convertTicksToLabels.call(e), e.pointLabels = e.chart.data.labels.map(e.options.pointLabels.callback, e)
3710                    }, getLabelForIndex: function (t, e) {
3711                        return +this.getRightValue(this.chart.data.datasets[e].data[t])
3712                    }, fit: function () {
3713                        var t, i, n, o, r, l, s, d, u, c, h, f, g = this.options.pointLabels, p = e.getValueOrDefault(g.fontSize, a.defaultFontSize), m = e.getValueOrDefault(g.fontStyle, a.defaultFontStyle), b = e.getValueOrDefault(g.fontFamily, a.defaultFontFamily), v = e.fontString(p, m, b), x = e.min([this.height / 2 - p - 5, this.width / 2]), y = this.width, k = 0;
3714                        for (this.ctx.font = v, i = 0; i < this.getValueCount(); i++)t = this.getPointPosition(i, x), n = this.ctx.measureText(this.pointLabels[i] ? this.pointLabels[i] : "").width + 5, 0 === i || i === this.getValueCount() / 2 ? (o = n / 2, t.x + o > y && (y = t.x + o, r = i), t.x - o < k && (k = t.x - o, s = i)) : i < this.getValueCount() / 2 ? t.x + n >
3714 y && (y = t.x + n, r = i) : i > this.getValueCount() / 2 && t.x - n < k && (k = t.x - n, s = i);
3715                        u = k, c = Math.ceil(y - this.width), l = this.getIndexAngle(r), d = this.getIndexAngle(s), h = c / Math.sin(l + Math.PI / 2), f = u / Math.sin(d + Math.PI / 2), h = e.isNumber(h) ? h : 0, f = e.isNumber(f) ? f : 0, this.drawingArea = Math.round(x - (f + h) / 2), this.setCenterPoint(f, h)
3716                    }, setCenterPoint: function (t, e) {
3717                        var a = this, i = a.width - e - a.drawingArea, n = t + a.drawingArea;
3718                        a.xCenter = Math.round((n + i) / 2 + a.left), a.yCenter = Math.round(a.height / 2 + a.top)
3719                    }, getIndexAngle: function (t) {
3720                        var e = 2 * Math.PI / this.getValueCount();
3721                        return t * e - Math.PI / 2
3722                    }, getDistanceFromCenterForValue: function (t) {
3723                        var e = this;
3724                        if (null === t)return 0;
3725                        var a = e.drawingArea / (e.max - e.min);
3726                        return e.options.reverse ? (e.max - t) * a : (t - e.min) * a
3727                    }, getPointPosition: function (t, e) {
3728                        var a = this, i = a.getIndexAngle(t);
3729                        return {x: Math.round(Math.cos(i) * e) + a.xCenter, y: Math.round(Math.sin(i) * e) + a.yCenter}
3730                    }, getPointPositionForValue: function (t, e) {
3731                        return this.getPointPosition(t, this.getDistanceFromCenterForValue(e))
3732                    }, getBasePosition: function () {
3733                        var t = this, e = t.min, a = t.max;
3734                        return t.getPointPositionForValue(0, t.beginAtZero ? 0 : 0 > e && 0 > a ? a : e > 0 && a > 0 ? e : 0)
3735                    }, draw: function () {
3736                        var t = this, i = t.options, n = i.gridLines, o = i.ticks, r = i.angleLines, l = i.pointLabels, s = e.getValueOrDefault;
3737                        if (i.display) {
3738                            var d = t.ctx, u = s(o.fontSize, a.defaultFontSize), c = s(o.fontStyle, a.defaultFontStyle), h = s(o.fontFamily, a.defaultFontFamily), f = e.fontString(u, c, h);
3739                            if (e.each(t.ticks, function (r, l) {
3740                                    if (l > 0 || i.reverse) {
3741                                        var c = t.getDistanceFromCenterForValue(t.ticksAsNumbers[l]), h = t.yCenter - c;
3742                                        if (n.display && 0 !== l)if (d.strokeStyle = e.getValueAtIndexOrDefault(n.color, l - 1), d.lineWidth = e.getValueAtIndexOrDefault(n.lineWidth, l - 1), i.lineArc)d.beginPath(), d.arc(t.xCenter, t.yCenter, c, 0, 2 * Math.PI), d.closePath(), d.stroke(); else {
3743                                            d.beginPath();
3744                                            for (var g = 0; g < t.getValueCount(); g++) {
3745                                                var p = t.getPointPosition(g, c);
3746                                                0 === g ? d.moveTo(p.x, p.y) : d.lineTo(p.x, p.y)
3747                                            }
3748                                            d.closePath(), d.stroke()
3749                                        }
3750                                        if (o.display) {
3751                                            var m = s(o.fontColor, a.defaultFontColor);
3752                                            if (d.font = f, o.showLabelBackdrop) {
3753                                                var b = d.measureText(r).width;
3754                                                d.fillStyle = o.backdropColor, d.fillRect(t.xCenter - b / 2 - o.backdropPaddingX, h - u / 2 - o.backdropPaddingY, b + 2 * o.backdropPaddingX, u + 2 * o.backdropPaddingY)
3755                                            }
3756                                            d.textAlign = "center", d.textBaseline = "middle", d.fillStyle = m, d.fillText(r, t.xCenter, h)
3757                                        }
3758                                    }
3759                                }), !i.lineArc) {
3760                                d.lineWidth = r.lineWidth, d.strokeStyle = r.color;
3761                                for (var g = t.getDistanceFromCenterForValue(i.reverse ? t.min : t.max), p = s(l.fontSize, a.defaultFontSize), m = s(l.fontStyle, a.defaultFontStyle), b = s(l.fontFamily, a.defaultFontFamily), v = e.fontString(p, m, b), x = t.getValueCount() - 1; x >= 0; x--) {
3762                                    if (r.display) {
3763                                        var y = t.getPointPosition(x, g);
3764                                        d.beginPath(), d.moveTo(t.xCenter, t.yCenter), d.lineTo(y.x, y.y), d.stroke(), d.closePath()
3765                                    }
3766                                    var k = t.getPointPosition(x, g + 5), S = s(l.fontColor, a.defaultFontColor);
3767                                    d.font = v, d.fillStyle = S;
3768                                    var w = t.pointLabels, C = w.length, M = w.length / 2, D = M / 2, A = D > x || x > C - D, I = x === D || x === C - D;
3769                                    0 === x ? d.textAlign = "center" : x === M ? d.textAlign = "center" : M > x ? d.textAlign = "left" : d.textAlign = "right", I ? d.textBaseline = "middle" : A ? d.textBaseline = "bottom" : d.textBaseline = "top", d.fillText(w[x] ? w[x] : "", k.x, k.y)
3770                                }
3771                            }
3772                        }
3773                    }
3774                });
3775                t.scaleService.registerScaleType("radialLinear", n, i)
3776            }
3777        }, {}], 43: [function (t, e, a) {
3778            "use strict";
3779            var i = t(1);
3780            i = "function" == typeof i ? i : window.moment, e.exports = function (t) {
3781                var e = t.helpers, a = {
3782                    units: [{
3783                        name: "millisecond",
3784                        steps: [1, 2, 5, 10, 20, 50, 100, 250, 500]
3785                    }, {name: "second", steps: [1, 2, 5, 10, 30]}, {
3786                        name: "minute",
3787                        steps: [1, 2, 5, 10, 30]
3788                    }, {name: "hour", steps: [1, 2, 3, 6, 12]}, {name: "day", steps: [1, 2, 5]}, {
3789                        name: "week",
3790                        maxStep: 4
3791                    }, {name: "month", maxStep: 3}, {name: "quarter", maxStep: 4}, {name: "year", maxStep: !1}]
3792                }, n = {
3793                    position: "bottom",
3794                    time: {
3795                        parser: !1,
3796                        format: !1,
3797                        unit: !1,
3798                        round: !1,
3799                        displayFormat: !1,
3800                        isoWeekday: !1,
3801                        displayFormats: {
3802                            millisecond: "h:mm:ss.SSS a",
3803                            second: "h:mm:ss a",
3804                            minute: "h:mm:ss a",
3805                            hour: "MMM D, hA",
3806                            day: "ll",
3807                            week: "ll",
3808                            month: "MMM YYYY",
3809                            quarter: "[Q]Q - YYYY",
3810                            year: "YYYY"
3811                        }
3812                    },
3813                    ticks: {autoSkip: !1}
3814                }, o = t.Scale.extend({
3815                    initialize: function () {
3816                        if (!i)throw new Error("Chart.js - Moment.js could not be found! You must include it before Chart.js to use the time scale. Download at https://momentjs.com");
3817                        t.Scale.prototype.initialize.call(this)
3818                    }, getLabelMoment: function (t, e) {
3819                        return this.labelMoments[t][e]
3820                    }, getMomentStartOf: function (t) {
3821                        var e = this;
3822                        return "week" === e.options.time.unit && e.options.time.isoWeekday !== !1 ? t.clone().startOf("isoWeek").isoWeekday(e.options.time.isoWeekday) : t.clone().startOf(e.tickUnit)
3823                    }, determineDataLimits: function () {
3824                        var t = this;
3825                        t.labelMoments = [];
3826                        var a = [];
3827                        t.chart.data.labels && t.chart.data.labels.length > 0 ? (e.each(t.chart.data.labels, function (e, i) {
3828                            var n = t.parseTime(e);
3829                            n.isValid() && (t.options.time.round && n.startOf(t.options.time.round), a.push(n))
3830                        }, t), t.firstTick = i.min.call(t, a), t.lastTick = i.max.call(t, a)) : (t.firstTick = null, t.lastTick = null), e.each(t.chart.data.datasets, function (n, o) {
3831                            var r = [], l = t.chart.isDatasetVisible(o);
3832                            "object" == typeof n.data[0] && null !== n.data[0] ? e.each(n.data, function (e, a) {
3833                                var n = t.parseTime(t.getRightValue(e));
3834                                n.isValid() && (t.options.time.round && n.startOf(t.options.time.round), r.push(n), l && (t.firstTick = null !== t.firstTick ? i.min(t.firstTick, n) : n, t.lastTick = null !== t.lastTick ? i.max(t.lastTick, n) : n))
3835                            }, t) : r = a, t.labelMoments.push(r)
3836                        }, t), t.options.time.min && (t.firstTick = t.parseTime(t.options.time.min)), t.options.time.max && (t.lastTick = t.parseTime(t.options.time.max)), t.firstTick = (t.firstTick || i()).clone(), t.lastTick = (t.lastTick || i()).clone()
3837                    }, buildTicks: function (i) {
3838                        var n = this;
3839                        n.ctx.save();
3840                        var o = e.getValueOrDefault(n.options.ticks.fontSize, t.defaults.global.defaultFontSize), r = e.getValueOrDefault(n.options.ticks.fontStyle, t.defaults.global.defaultFontStyle), l = e.getValueOrDefault(n.options.ticks.fontFamily, t.defaults.global.defaultFontFamily), s = e.fontString(o, r, l);
3841                        if (n.ctx.font = s, n.ticks = [], n.unitScale = 1, n.scaleSizeInUnits = 0, n.options.time.unit)n.tickUnit = n.options.time.unit || "day", n.displayFormat = n.options.time.displayFormats[n.tickUnit], n.scaleSizeInUnits = n.lastTick.diff(n.firstTick, n.tickUnit, !0), n.unitScale = e.getValueOrDefault(n.options.time.unitStepSize, 1); else {
3842                            var d = n.isHorizontal() ? n.width - (n.paddingLeft + n.paddingRight) : n.height - (n.paddingTop + n.paddingBottom), u = n.tickFormatFunction(n.firstTick, 0, []), c = n.ctx.measureText(u).width, h = Math.cos(e.toRadians(n.options.ticks.maxRotation)), f = Math.sin(e.toRadians(n.options.ticks.maxRotation));
3843                            c = c * h + o * f;
3844                            var g = d / c;
3845                            n.tickUnit = "millisecond", n.scaleSizeInUnits = n.lastTick.diff(n.firstTick, n.tickUnit, !0), n.displayFormat = n.options.time.displayFormats[n.tickUnit];
3846                            for (var p = 0, m = a.units[p]; p < a.units.length;) {
3847                                if (n.unitScale = 1, e.isArray(m.steps) && Math.ceil(n.scaleSizeInUnits / g) < e.max(m.steps)) {
3848                                    for (var b = 0; b < m.steps.length; ++b)if (m.steps[b] >= Math.ceil(n.scaleSizeInUnits / g)) {
3849                                        n.unitScale = e.getValueOrDefault(n.options.time.unitStepSize, m.steps[b]);
3850                                        break
3851                                    }
3852                                    break
3853                                }
3854                                if (m.maxStep === !1 || Math.ceil(n.scaleSizeInUnits / g) < m.maxStep) {
3855                                    n.unitScale = e.getValueOrDefault(n.options.time.unitStepSize, Math.ceil(n.scaleSizeInUnits / g));
3856                                    break
3857                                }
3858                                ++p, m = a.units[p], n.tickUnit = m.name;
3859                                var v = n.firstTick.diff(n.getMomentStartOf(n.firstTick), n.tickUnit, !0), x = n.getMomentStartOf(n.lastTick.clone().add(1, n.tickUnit)).diff(n.lastTick, n.tickUnit, !0);
3860                                n.scaleSizeInUnits = n.lastTick.diff(n.firstTick, n.tickUnit, !0) + v + x, n.displayFormat = n.options.time.displayFormats[m.name]
3861                            }
3862                        }
3863                        var y;
3864                        if (n.options.time.min ? y = n.getMomentStartOf(n.firstTick) : (n.firstTick = n.getMomentStartOf(n.firstTick), y = n.firstTick), !n.options.time.max) {
3865                            var k = n.getMomentStartOf(n.lastTick);
3866                            0 !== k.diff(n.lastTick, n.tickUnit, !0) && (n.lastTick = n.getMomentStartOf(n.lastTick.add(1, n.tickUnit)))
3867                        }
3868                        n.smallestLabelSeparation = n.width, e.each(n.chart.data.datasets, function (t, e) {
3869                            for (var a = 1; a < n.labelMoments[e].length; a++)n.smallestLabelSeparation = Math.min(n.smallestLabelSeparation, n.labelMoments[e][a].diff(n.labelMoments[e][a - 1], n.tickUnit, !0))
3870                        }, n), n.options.time.displayFormat && (n.displayFormat = n.options.time.displayFormat), n.ticks.push(n.firstTick.clone());
3871                        for (var S = 1; S <= n.scaleSizeInUnits; ++S) {
3872                            var w = y.clone().add(S, n.tickUnit);
3873                            if (n.options.time.max && w.diff(n.lastTick, n.tickUnit, !0) >= 0)break;
3874                            S % n.unitScale === 0 && n.ticks.push(w)
3875                        }
3876                        var C = n.ticks[n.ticks.length - 1].diff(n.lastTick, n.tickUnit);
3877                        (0 !== C || 0 === n.scaleSizeInUnits) && (n.options.time.max ? (n.ticks.push(n.lastTick.clone()), n.scaleSizeInUnits = n.lastTick.diff(n.ticks[0], n.tickUnit, !0)) : (n.ticks.push(n.lastTick.clone()), n.scaleSizeInUnits = n.lastTick.diff(n.firstTick, n.tickUnit, !0))), n.ctx.restore(
3877)
3878                    }, getLabelForIndex: function (t, e) {
3879                        var a = this, i = a.chart.data.labels && t < a.chart.data.labels.length ? a.chart.data.labels[t] : "";
3880                        return "object" == typeof a.chart.data.datasets[e].data[0] && (i = a.getRightValue(a.chart.data.datasets[e].data[t])), a.options.time.tooltipFormat && (i = a.parseTime(i).format(a.options.time.tooltipFormat)), i
3881                    }, tickFormatFunction: function (t, a, i) {
3882                        var n = t.format(this.displayFormat), o = this.options.ticks, r = e.getValueOrDefault(o.callback, o.userCallback);
3883                        return r ? r(n, a, i) : n
3884                    }, convertTicksToLabels: function () {
3885                        var t = this;
3886                        t.tickMoments = t.ticks, t.ticks = t.ticks.map(t.tickFormatFunction, t)
3887                    }, getPixelForValue: function (t, e, a, i) {
3888                        var n = this, o = t && t.isValid && t.isValid() ? t : n.getLabelMoment(a, e);
3889                        if (o) {
3890                            var r = o.diff(n.firstTick, n.tickUnit, !0), l = r / n.scaleSizeInUnits;
3891                            if (n.isHorizontal()) {
3892                                var s = n.width - (n.paddingLeft + n.paddingRight), d = (s / Math.max(n.ticks.length - 1, 1), s * l + n.paddingLeft);
3893                                return n.left + Math.round(d)
3894                            }
3895                            var u = n.height - (n.paddingTop + n.paddingBottom), c = (u / Math.max(n.ticks.length - 1, 1), u * l + n.paddingTop);
3896                            return n.top + Math.round(c)
3897                        }
3898                    }, getPixelForTick: function (t, e) {
3899                        return this.getPixelForValue(this.tickMoments[t], null, null, e)
3900                    }, getValueForPixel: function (t) {
3901                        var e = this, a = e.isHorizontal() ? e.width - (e.paddingLeft + e.paddingRight) : e.height - (e.paddingTop + e.paddingBottom), n = (t - (e.isHorizontal() ? e.left + e.paddingLeft : e.top + e.paddingTop)) / a;
3902                        return n *= e.scaleSizeInUnits, e.firstTick.clone().add(i.duration(n, e.tickUnit).asSeconds(), "seconds")
3903                    }, parseTime: function (t) {
3904                        var e = this;
3905                        return "string" == typeof e.options.time.parser ? i(t, e.options.time.parser) : "function" == typeof e.options.time.parser ? e.options.time.parser(t) : "function" == typeof t.getMonth || "number" == typeof t ? i(t) : t.isValid && t.isValid() ? t : "string" != typeof e.options.time.format && e.options.time.format.call ? (console.warn("options.time.format is deprecated and replaced by options.time.parser. See http://nnnick.github.io/Chart.js/docs-v2/#scales-time-scale"), e.options.time.format(t)) : i(t, e.options.time.format)
3906                    }
3907                });
3908                t.scaleService.registerScaleType("time", o, n)
3909            }
3910        }, {1: 1}]
3911    }, {}, [7])(7)
3912});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.