2016-05-14 21:50:02 +02:00
/ * !
2016-04-10 10:05:50 +02:00
* Chart . js
* http : //chartjs.org/
2016-11-08 20:50:05 +01:00
* Version : 2.3 . 0
2016-04-10 10:05:50 +02:00
*
2016-05-14 21:50:02 +02:00
* Copyright 2016 Nick Downie
2016-04-10 10:05:50 +02:00
* Released under the MIT license
2016-05-14 21:50:02 +02:00
* https : //github.com/chartjs/Chart.js/blob/master/LICENSE.md
2016-04-10 10:05:50 +02:00
* /
2016-11-08 20:50:05 +01:00
! function ( t ) { if ( "object" == typeof exports && "undefined" != typeof module ) module . exports = t ( ) ; else if ( "function" == typeof define && define . amd ) define ( [ ] , t ) ; else { var e ; e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this , e . Chart = t ( ) } } ( function ( ) { var t ; return function e ( t , n , i ) { function a ( r , s ) { if ( ! n [ r ] ) { if ( ! t [ r ] ) { var l = "function" == typeof require && require ; if ( ! s && l ) return l ( r , ! 0 ) ; if ( o ) return o ( r , ! 0 ) ; var d = new Error ( "Cannot find module '" + r + "'" ) ; throw d . code = "MODULE_NOT_FOUND" , d } var u = n [ r ] = { exports : { } } ; t [ r ] [ 0 ] . call ( u . exports , function ( e ) { var n = t [ r ] [ 1 ] [ e ] ; return a ( n ? n : e ) } , u , u . exports , e , t , n , i ) } return n [ r ] . exports } for ( var o = "function" == typeof require && require , r = 0 ; r < i . length ; r ++ ) a ( i [ r ] ) ; return a } ( { 1 : [ function ( t , e , n ) { function i ( t ) { if ( t ) { var e = /^#([a-fA-F0-9]{3})$/ , n = /^#([a-fA-F0-9]{6})$/ , i = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/ , a = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/ , o = /(\w+)/ , r = [ 0 , 0 , 0 ] , s = 1 , l = t . match ( e ) ; if ( l ) { l = l [ 1 ] ; for ( var d = 0 ; d < r . length ; d ++ ) r [ d ] = parseInt ( l [ d ] + l [ d ] , 16 ) } else if ( l = t . match ( n ) ) { l = l [ 1 ] ; for ( var d = 0 ; d < r . length ; d ++ ) r [ d ] = parseInt ( l . slice ( 2 * d , 2 * d + 2 ) , 16 ) } else if ( l = t . match ( i ) ) { for ( var d = 0 ; d < r . length ; d ++ ) r [ d ] = parseInt ( l [ d + 1 ] ) ; s = parseFloat ( l [ 4 ] ) } else if ( l = t . match ( a ) ) { for ( var d = 0 ; d < r . length ; d ++ ) r [ d ] = Math . round ( 2.55 * parseFloat ( l [ d + 1 ] ) ) ; s = parseFloat ( l [ 4 ] ) } else if ( l = t . match ( o ) ) { if ( "transparent" == l [ 1 ] ) return [ 0 , 0 , 0 , 0 ] ; if ( r = x [ l [ 1 ] ] , ! r ) return } for ( var d = 0 ; d < r . length ; d ++ ) r [ d ] = b ( r [ d ] , 0 , 255 ) ; return s = s || 0 == s ? b ( s , 0 , 1 ) : 1 , r [ 3 ] = s , r } } function a ( t ) { if ( t ) { var e = /^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/ , n = t . match ( e ) ; if ( n ) { var i = parseFloat ( n [ 4 ] ) , a = b ( parseInt ( n [ 1 ] ) , 0 , 360 ) , o = b ( parseFloat ( n [ 2 ] ) , 0 , 100 ) , r = b ( parseFloat ( n [ 3 ] ) , 0 , 100 ) , s = b ( isNaN ( i ) ? 1 : i , 0 , 1 ) ; return [ a , o , r , s ] } } } function o ( t ) { if ( t ) { var e = /^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/ , n = t . match ( e ) ; if ( n ) { var i = parseFloat ( n [ 4 ] ) , a = b ( parseInt ( n [ 1 ] ) , 0 , 360 ) , o = b ( parseFloat ( n [ 2 ] ) , 0 , 100 ) , r = b ( parseFloat ( n [ 3 ] ) , 0 , 100 ) , s = b ( isNaN ( i ) ? 1 : i , 0 , 1 ) ; return [ a , o , r , s ] } } } function r ( t ) { var e = i ( t ) ; return e && e . slice ( 0 , 3 ) } function s ( t ) { var e = a ( t ) ; return e && e . slice ( 0 , 3 ) } function l ( t ) { var e = i ( t ) ; return e ? e [ 3 ] : ( e = a ( t ) ) ? e [ 3 ] : ( e = o ( t ) ) ? e [ 3 ] : void 0 } function d ( t ) { return "#" + y ( t [ 0 ] ) + y ( t [ 1 ] ) + y ( t [ 2 ] ) } function u ( t , e ) { return 1 > e || t [ 3 ] && t [ 3 ] < 1 ? c ( t , e ) : "rgb(" + t [ 0 ] + ", " + t [ 1 ] + ", " + t [ 2 ] + ")" } function c ( t , e ) { return void 0 === e && ( e = void 0 !== t [ 3 ] ? t [ 3 ] : 1 ) , "rgba(" + t [ 0 ] + ", " + t [ 1 ] + ", " + t [ 2 ] + ", " + e + ")" } function h ( t , e ) { if ( 1 > e || t [ 3 ] && t [ 3 ] < 1 ) return f ( t , e ) ; var n = Math . round ( t [ 0 ] / 255 * 100 ) , i = Math . round ( t [ 1 ] / 255 * 100 ) , a = Math . round ( t [ 2 ] / 255 * 100 ) ; return "rgb(" + n + "%, " + i + "%, " + a + "%)" } function f ( t , e ) { var n = Math . round ( t [ 0 ] / 255 * 100 ) , i = Math . round ( t [ 1 ] / 255 * 100 ) , a = Math . round ( t [ 2 ] / 255 * 100 ) ; return "rgba(" + n + "%, " + i + "%, " + a + "%, " + ( e || t [ 3 ] || 1 ) + ")" } function g ( t , e ) { return 1 > e || t [ 3 ] && t [ 3 ] < 1 ? m ( t , e ) : "hsl(" + t [ 0 ] + ", " + t [ 1 ] + "%, " + t [ 2 ] + "%)" } function m ( t , e ) { return void 0 === e && ( e = void 0 !== t [ 3 ] ? t [ 3 ] : 1 ) , "hsla(" + t [ 0 ] + ", " + t [ 1 ] + "%, " + t [ 2 ] + "%, " + e + ")" } function p ( t , e ) { 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 : "" ) + ")" } function v ( t ) { return k [ t . slice ( 0 , 3 ) ] } function b ( t , e , n ) { return Math . min ( Math . max ( e , t ) , n ) } function y ( t ) { var e = t . toString ( 16 ) . toUpperCase ( ) ; return e . length < 2 ? "0" + e : e } var x = t ( 5 ) ; e . exports = { getRgba : i , getHsla : a , getRgb : r , getHsl : s , getHwb : o , getAlpha : l , hexString : d , rgbString : u , rgbaString : c , percentString : h , percentaString : f , hslString : g , hslaString : m , hwbString : p , keyword : v } ; var k = { } ; for ( var S in x ) k [ x [ S ] ] = S } , { 5 : 5 } ] , 2 : [ function ( t , e , n ) { var i = t ( 4 ) , a = t ( 1 ) , o = function ( t ) { if ( t instanceof o ) return t ; if ( ! ( this instanceof o ) ) return new o ( t ) ; this . values = { rgb : [ 0 , 0 , 0 ] , hsl : [ 0 , 0 , 0 ] , hsv : [ 0 , 0 , 0 ] , hwb : [ 0 , 0 , 0 ] , cmyk : [ 0 , 0 , 0 , 0 ] , alpha : 1 } ; var e ; if ( "string" == typeof t ) if ( e = a . getRgba ( t ) ) this . setValues ( "rgb" , e ) ; else if ( e = a . getHsla ( t ) ) this . setValues ( "hsl" , e ) ; else { if ( ! ( e = a . getHwb ( t ) ) ) throw new Error ( 'Unable to parse color from string "' + t + '"' ) ; this . setValues ( "hwb" , e ) } else if ( "object"
t . updateOffset ( this , ! 0 ) , this ) : N ( this , "Month" ) } function ht ( ) { return ot ( this . year ( ) , this . month ( ) ) } function ft ( t ) { return this . _monthsParseExact ? ( d ( this , "_monthsRegex" ) || mt . call ( this ) , t ? this . _monthsShortStrictRegex : this . _monthsShortRegex ) : ( d ( this , "_monthsShortRegex" ) || ( this . _monthsShortRegex = ca ) , this . _monthsShortStrictRegex && t ? this . _monthsShortStrictRegex : this . _monthsShortRegex ) } function gt ( t ) { return this . _monthsParseExact ? ( d ( this , "_monthsRegex" ) || mt . call ( this ) , t ? this . _monthsStrictRegex : this . _monthsRegex ) : ( d ( this , "_monthsRegex" ) || ( this . _monthsRegex = ha ) , this . _monthsStrictRegex && t ? this . _monthsStrictRegex : this . _monthsRegex ) } function mt ( ) { function t ( t , e ) { return e . length - t . length } var e , n , i = [ ] , a = [ ] , o = [ ] ; for ( e = 0 ; 12 > e ; e ++ ) n = c ( [ 2e3 , e ] ) , i . push ( this . monthsShort ( n , "" ) ) , a . push ( this . months ( n , "" ) ) , o . push ( this . months ( n , "" ) ) , o . push ( this . monthsShort ( n , "" ) ) ; for ( i . sort ( t ) , a . sort ( t ) , o . sort ( t ) , e = 0 ; 12 > e ; e ++ ) i [ e ] = et ( i [ e ] ) , a [ e ] = et ( a [ e ] ) ; for ( e = 0 ; 24 > e ; e ++ ) o [ e ] = et ( o [ e ] ) ; this . _monthsRegex = new RegExp ( "^(" + o . join ( "|" ) + ")" , "i" ) , this . _monthsShortRegex = this . _monthsRegex , this . _monthsStrictRegex = new RegExp ( "^(" + a . join ( "|" ) + ")" , "i" ) , this . _monthsShortStrictRegex = new RegExp ( "^(" + i . join ( "|" ) + ")" , "i" ) } function pt ( t ) { return vt ( t ) ? 366 : 365 } function vt ( t ) { return t % 4 === 0 && t % 100 !== 0 || t % 400 === 0 } function bt ( ) { return vt ( this . year ( ) ) } function yt ( t , e , n , i , a , o , r ) { var s = new Date ( t , e , n , i , a , o , r ) ; return 100 > t && t >= 0 && isFinite ( s . getFullYear ( ) ) && s . setFullYear ( t ) , s } function xt ( t ) { var e = new Date ( Date . UTC . apply ( null , arguments ) ) ; return 100 > t && t >= 0 && isFinite ( e . getUTCFullYear ( ) ) && e . setUTCFullYear ( t ) , e } function kt ( t , e , n ) { var i = 7 + e - n , a = ( 7 + xt ( t , 0 , i ) . getUTCDay ( ) - e ) % 7 ; return - a + i - 1 } function St ( t , e , n , i , a ) { var o , r , s = ( 7 + n - i ) % 7 , l = kt ( t , i , a ) , d = 1 + 7 * ( e - 1 ) + s + l ; return 0 >= d ? ( o = t - 1 , r = pt ( o ) + d ) : d > pt ( t ) ? ( o = t + 1 , r = d - pt ( t ) ) : ( o = t , r = d ) , { year : o , dayOfYear : r } } function wt ( t , e , n ) { var i , a , o = kt ( t . year ( ) , e , n ) , r = Math . floor ( ( t . dayOfYear ( ) - o - 1 ) / 7 ) + 1 ; return 1 > r ? ( a = t . year ( ) - 1 , i = r + _t ( a , e , n ) ) : r > _t ( t . year ( ) , e , n ) ? ( i = r - _t ( t . year ( ) , e , n ) , a = t . year ( ) + 1 ) : ( a = t . year ( ) , i = r ) , { week : i , year : a } } function _t ( t , e , n ) { var i = kt ( t , e , n ) , a = kt ( t + 1 , e , n ) ; return ( pt ( t ) - i + a ) / 7 } function Mt ( t ) { return wt ( t , this . _week . dow , this . _week . doy ) . week } function Dt ( ) { return this . _week . dow } function Ct ( ) { return this . _week . doy } function Tt ( t ) { var e = this . localeData ( ) . week ( this ) ; return null == t ? e : this . add ( 7 * ( t - e ) , "d" ) } function Pt ( t ) { var e = wt ( this , 1 , 4 ) . week ; return null == t ? e : this . add ( 7 * ( t - e ) , "d" ) } function Ft ( t , e ) { return "string" != typeof t ? t : isNaN ( t ) ? ( t = e . weekdaysParse ( t ) , "number" == typeof t ? t : null ) : parseInt ( t , 10 ) } function It ( t , e ) { return "string" == typeof t ? e . weekdaysParse ( t ) % 7 || 7 : isNaN ( t ) ? null : t } function At ( t , e ) { return t ? a ( this . _weekdays ) ? this . _weekdays [ t . day ( ) ] : this . _weekdays [ this . _weekdays . isFormat . test ( e ) ? "format" : "standalone" ] [ t . day ( ) ] : this . _weekdays } function Ot ( t ) { return t ? this . _weekdaysShort [ t . day ( ) ] : this . _weekdaysShort } function Rt ( t ) { return t ? this . _weekdaysMin [ t . day ( ) ] : this . _weekdaysMin } function Wt ( t , e , n ) { var i , a , o , r = t . toLocaleLowerCase ( ) ; if ( ! this . _weekdaysParse ) for ( this . _weekdaysParse = [ ] , this . _shortWeekdaysParse = [ ] , this . _minWeekdaysParse = [ ] , i = 0 ; 7 > i ; ++ i ) o = c ( [ 2e3 , 1 ] ) . day ( i ) , this . _minWeekdaysParse [ i ] = this . weekdaysMin ( o , "" ) . toLocaleLowerCase ( ) , this . _shortWeekdaysParse [ i ] = this . weekdaysShort ( o , "" ) . toLocaleLowerCase ( ) , this . _weekdaysParse [ i ] = this . weekdays ( o , "" ) . toLocaleLowerCase ( ) ; return n ? "dddd" === e ? ( a = ki . call ( this . _weekdaysParse , r ) , - 1 !== a ? a : null ) : "ddd" === e ? ( a = ki . call ( this . _shortWeekdaysParse , r ) , - 1 !== a ? a : null ) : ( a = ki . call ( this . _minWeekdaysParse , r ) , - 1 !== a ? a : null ) : "dddd" === e ? ( a = ki . call ( this . _weekdaysParse , r ) , - 1 !== a ? a : ( a = ki . call ( this . _shortWeekdaysParse , r ) , - 1 !== a ? a : ( a = ki . call ( this . _minWeekdaysParse , r ) , - 1 !== a ? a : null ) ) ) : "ddd" === e ? ( a = ki . call ( this . _shortWeekdaysParse , r ) , - 1 !== a ? a : ( a = ki . call ( this . _weekdaysParse , r ) , - 1 !== a ? a : ( a = ki . call ( this . _minWeekdaysParse , r ) , - 1 !== a ? a : null ) ) ) : ( a = ki . call ( this . _minWeekdaysParse , r ) , - 1 !== a ? a : ( a = ki . call ( this . _weekdaysParse , r ) , - 1 !== a ? a : ( a = ki . call ( this . _shortWeekdaysParse , r ) , - 1 !== a ? a : null ) ) ) } function Lt ( t , e , n ) { var i , a , o ; if ( this . _weekdaysParseExact ) return Wt . call ( this , t , e , n ) ; for ( this . _weekdaysParse || ( this . _weekdaysParse = [ ] , this . _minWeekdaysParse = [ ] , this . _shortWeekdaysPar
t . createFromInputFallback = _ ( "value provided is not in a recognized ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info." , function ( t ) { t . _d = new Date ( t . _i + ( t . _useUTC ? " UTC" : "" ) ) } ) , t . ISO _8601 = function ( ) { } ; var Aa = _ ( "moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/" , function ( ) { var t = ye . apply ( null , arguments ) ; return this . isValid ( ) && t . isValid ( ) ? this > t ? this : t : m ( ) } ) , Oa = _ ( "moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/" , function ( ) { var t = ye . apply ( null , arguments ) ; return this . isValid ( ) && t . isValid ( ) ? t > this ? this : t : m ( ) } ) , Ra = function ( ) { return Date . now ? Date . now ( ) : + new Date } ; De ( "Z" , ":" ) , De ( "ZZ" , "" ) , Q ( "Z" , Zi ) , Q ( "ZZ" , Zi ) , nt ( [ "Z" , "ZZ" ] , function ( t , e , n ) { n . _useUTC = ! 0 , n . _tzm = Ce ( Zi , t ) } ) ; var Wa = /([\+\-]|\d\d)/gi ; t . updateOffset = function ( ) { } ; var La = /^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/ , Va = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/ ; He . fn = we . prototype ; var Ba = je ( 1 , "add" ) , Ya = je ( - 1 , "subtract" ) ; t . defaultFormat = "YYYY-MM-DDTHH:mm:ssZ" , t . defaultFormatUtc = "YYYY-MM-DDTHH:mm:ss[Z]" ; var za = _ ( "moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages." , function ( t ) { return void 0 === t ? this . localeData ( ) : this . locale ( t ) } ) ; q ( 0 , [ "gg" , 2 ] , 0 , function ( ) { return this . weekYear ( ) % 100 } ) , q ( 0 , [ "GG" , 2 ] , 0 , function ( ) { return this . isoWeekYear ( ) % 100 } ) , Dn ( "gggg" , "weekYear" ) , Dn ( "ggggg" , "weekYear" ) , Dn ( "GGGG" , "isoWeekYear" ) , Dn ( "GGGGG" , "isoWeekYear" ) , L ( "weekYear" , "gg" ) , L ( "isoWeekYear" , "GG" ) , Y ( "weekYear" , 1 ) , Y ( "isoWeekYear" , 1 ) , Q ( "G" , Gi ) , Q ( "g" , Gi ) , Q ( "GG" , Yi , Wi ) , Q ( "gg" , Yi , Wi ) , Q ( "GGGG" , Ei , Vi ) , Q ( "gggg" , Ei , Vi ) , Q ( "GGGGG" , Ui , Bi ) , Q ( "ggggg" , Ui , Bi ) , it ( [ "gggg" , "ggggg" , "GGGG" , "GGGGG" ] , function ( t , e , n , i ) { e [ i . substr ( 0 , 2 ) ] = k ( t ) } ) , it ( [ "gg" , "GG" ] , function ( e , n , i , a ) { n [ a ] = t . parseTwoDigitYear ( e ) } ) , q ( "Q" , 0 , "Qo" , "quarter" ) , L ( "quarter" , "Q" ) , Y ( "quarter" , 7 ) , Q ( "Q" , Ri ) , nt ( "Q" , function ( t , e ) { e [ ta ] = 3 * ( k ( t ) - 1 ) } ) , q ( "D" , [ "DD" , 2 ] , "Do" , "date" ) , L ( "date" , "D" ) , Y ( "date" , 9 ) , Q ( "D" , Yi ) , Q ( "DD" , Yi , Wi ) , Q ( "Do" , function ( t , e ) { return t ? e . _ordinalParse : e . _ordinalParseLenient } ) , nt ( [ "D" , "DD" ] , ea ) , nt ( "Do" , function ( t , e ) { e [ ea ] = k ( t . match ( Yi ) [ 0 ] , 10 ) } ) ; var Ha = H ( "Date" , ! 0 ) ; q ( "DDD" , [ "DDDD" , 3 ] , "DDDo" , "dayOfYear" ) , L ( "dayOfYear" , "DDD" ) , Y ( "dayOfYear" , 4 ) , Q ( "DDD" , Ni ) , Q ( "DDDD" , Li ) , nt ( [ "DDD" , "DDDD" ] , function ( t , e , n ) { n . _dayOfYear = k ( t ) } ) , q ( "m" , [ "mm" , 2 ] , 0 , "minute" ) , L ( "minute" , "m" ) , Y ( "minute" , 14 ) , Q ( "m" , Yi ) , Q ( "mm" , Yi , Wi ) , nt ( [ "m" , "mm" ] , ia ) ; var Na = H ( "Minutes" , ! 1 ) ; q ( "s" , [ "ss" , 2 ] , 0 , "second" ) , L ( "second" , "s" ) , Y ( "second" , 15 ) , Q ( "s" , Yi ) , Q ( "ss" , Yi , Wi ) , nt ( [ "s" , "ss" ] , aa ) ; var Ea = H ( "Seconds" , ! 1 ) ; q ( "S" , 0 , 0 , function ( ) { return ~ ~ ( this . millisecond ( ) / 100 ) } ) , q ( 0 , [ "SS" , 2 ] , 0 , function ( ) { return ~ ~ ( this . millisecond ( ) / 10 ) } ) , q ( 0 , [ "SSS" , 3 ] , 0 , "millisecond" ) , q ( 0 , [ "SSSS" , 4 ] , 0 , function ( ) { return 10 * this . millisecond ( ) } ) , q ( 0 , [ "SSSSS" , 5 ] , 0 , function ( ) { return 100 * this . millisecond ( ) } ) , q ( 0 , [ "SSSSSS" , 6 ] , 0 , function ( ) { return 1e3 * this . millisecond ( ) } ) , q ( 0 , [ "SSSSSSS" , 7 ] , 0 , function ( ) { return 1e4 * this . millisecond ( ) } ) , q ( 0 , [ "SSSSSSSS" , 8 ] , 0 , function ( ) { return 1e5 * this . millisecond ( ) } ) , q ( 0 , [ "SSSSSSSSS" , 9 ] , 0 , function ( ) { return 1e6 * this . millisecond ( ) } ) , L ( "millisecond" , "ms" ) , Y ( "millisecond" , 16 ) , Q ( "S" , Ni , Ri ) , Q ( "SS" , Ni , Wi ) , Q ( "SSS" , Ni , Li ) ; var Ua ; for ( Ua = "SSSS" ; Ua . length <= 9 ; Ua += "S" ) Q ( Ua , ji ) ; for ( Ua = "S" ; Ua . length <= 9 ; Ua += "S" ) nt ( Ua , Wn ) ; var ja = H ( "Milliseconds" , ! 1 ) ; q ( "z" , 0 , 0 , "zoneAbbr" ) , q ( "zz" , 0 , 0 , "zoneName" ) ; var Ga = b . prototype ; Ga . add = Ba , Ga . calendar = Ze , Ga . clone = Je , Ga . diff = nn , Ga . endOf = mn , Ga . format = sn , Ga . from = ln , Ga . fromNow = dn , Ga . to = un , Ga . toNow = cn , Ga . get = U , Ga . invalidAt = _n , Ga . isAfter = Xe , Ga . isBefore = Ke , Ga . isBetween = Qe , Ga . isSame = $e , Ga . isSameOrAfter = tn , Ga . isSameOrBefore = en , Ga . isValid = Sn , Ga . lang = za , Ga . locale = hn , Ga . localeData = fn , Ga . max = Oa , Ga . min = Aa , Ga . parsingFlags = wn , Ga . set = j , Ga . startOf = gn , Ga . subtract = Ya , Ga . toArray = yn , Ga . toObject = xn
text : i , fillStyle : c , strokeStyle : h , lineWidth : f , hidden : isNaN ( r . data [ a ] ) || o . data [ a ] . hidden , index : a } } ) : [ ] } } , onClick : function ( t , e ) { var n , i , a , o = e . index , r = this . chart ; for ( n = 0 , i = ( r . data . datasets || [ ] ) . length ; i > n ; ++ n ) a = r . getDatasetMeta ( n ) , a . data [ o ] . hidden = ! a . data [ o ] . hidden ; r . update ( ) } } , tooltips : { callbacks : { title : function ( ) { return "" } , label : function ( t , e ) { return e . labels [ t . index ] + ": " + t . yLabel } } } } , t . controllers . polarArea = t . DatasetController . extend ( { dataElementType : t . elements . Arc , linkScales : e . noop , update : function ( t ) { var n = this , i = n . chart , a = i . chartArea , o = n . getMeta ( ) , r = i . options , s = r . elements . arc , l = Math . min ( a . right - a . left , a . bottom - a . top ) ; i . outerRadius = Math . max ( ( l - s . 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 ( ) , n . outerRadius = i . outerRadius - i . radiusLength * n . index , n . innerRadius = n . outerRadius - i . radiusLength , o . count = n . countVisibleElements ( ) , e . each ( o . data , function ( e , i ) { n . updateElement ( e , i , t ) } ) } , updateElement : function ( t , n , i ) { for ( var a = this , o = a . chart , r = a . getDataset ( ) , s = o . options , l = s . animation , d = o . scale , u = e . getValueAtIndexOrDefault , c = o . data . labels , h = a . calculateCircumference ( r . data [ n ] ) , f = d . xCenter , g = d . yCenter , m = 0 , p = a . getMeta ( ) , v = 0 ; n > v ; ++ v ) isNaN ( r . data [ v ] ) || p . data [ v ] . hidden || ++ m ; var b = s . startAngle , y = t . hidden ? 0 : d . getDistanceFromCenterForValue ( r . data [ n ] ) , x = b + h * m , k = x + ( t . hidden ? 0 : h ) , S = l . animateScale ? 0 : d . getDistanceFromCenterForValue ( r . data [ n ] ) ; e . extend ( t , { _datasetIndex : a . index , _index : n , _scale : d , _model : { x : f , y : g , innerRadius : 0 , outerRadius : i ? S : y , startAngle : i && l . animateRotate ? b : x , endAngle : i && l . animateRotate ? b : k , label : u ( c , n , c [ n ] ) } } ) , a . removeHoverStyle ( t ) , t . pivot ( ) } , removeHoverStyle : function ( e ) { t . DatasetController . prototype . removeHoverStyle . call ( this , e , this . chart . options . elements . arc ) } , countVisibleElements : function ( ) { var t = this . getDataset ( ) , n = this . getMeta ( ) , i = 0 ; return e . each ( n . data , function ( e , n ) { isNaN ( t . data [ n ] ) || e . hidden || i ++ } ) , i } , calculateCircumference : function ( t ) { var e = this . getMeta ( ) . count ; return e > 0 && ! isNaN ( t ) ? 2 * Math . PI / e : 0 } } ) } } , { } ] , 20 : [ function ( t , e , n ) { "use strict" ; e . exports = function ( t ) { var e = t . helpers ; t . defaults . radar = { scale : { type : "radialLinear" } , elements : { line : { tension : 0 } } } , t . controllers . radar = t . DatasetController . extend ( { datasetElementType : t . elements . Line , dataElementType : t . elements . Point , linkScales : e . noop , addElementAndReset : function ( e ) { t . DatasetController . prototype . addElementAndReset . call ( this , e ) , this . updateBezierControlPoints ( ) } , update : function ( t ) { var n = this , i = n . getMeta ( ) , a = i . dataset , o = i . data , r = a . custom || { } , s = n . getDataset ( ) , l = n . chart . options . elements . line , d = n . chart . scale ; void 0 !== s . tension && void 0 === s . lineTension && ( s . lineTension = s . tension ) , e . extend ( i . dataset , { _datasetIndex : n . index , _children : o , _loop : ! 0 , _model : { tension : r . tension ? r . tension : e . getValueOrDefault ( s . lineTension , l . tension ) , backgroundColor : r . backgroundColor ? r . backgroundColor : s . backgroundColor || l . backgroundColor , borderWidth : r . borderWidth ? r . borderWidth : s . borderWidth || l . borderWidth , borderColor : r . borderColor ? r . borderColor : s . borderColor || l . borderColor , fill : r . fill ? r . fill : void 0 !== s . fill ? s . fill : l . fill , borderCapStyle : r . borderCapStyle ? r . borderCapStyle : s . borderCapStyle || l . borderCapStyle , borderDash : r . borderDash ? r . borderDash : s . borderDash || l . borderDash , borderDashOffset : r . borderDashOffset ? r . borderDashOffset : s . borderDashOffset || l . borderDashOffset , borderJoinStyle : r . borderJoinStyle ? r . borderJoinStyle : s . borderJoinStyle || l . borderJoinStyle , scaleTop : d . top , scaleBottom : d . bottom , scaleZero : d . getBasePosition ( ) } } ) , i . dataset . pivot ( ) , e . each ( o , function ( e , i ) { n . updateElement ( e , i , t ) } , n ) , n . updateBezierControlPoints ( ) } , updateElement : function ( t , n , i ) { var a = this , o = t . custom || { } , r = a . getDataset ( ) , s = a . chart . scale , l = a . chart . options . elements . point , d = s . getPointPositionForValue ( n , r . data [ n ] ) ; e . extend ( t , { _datasetIndex : a . index , _index : n , _scale : s , _model : { x : i ? s . xCenter : d . x , y : i ? s . yCenter : d . y , tension : o . tension ? o . tension : e . getValueOrDefault ( r . tension , a . chart . options . elements . line . tension ) , radius : o . radius ? o . radius : e . getValueAtIndexOrDefault ( r . pointRadius , n , l . radius ) , backgroundColor : o . backgroundColor ? o . backgroundColor : e . getValu
return n = Math . round ( ( n - s . left - d ) / f * r . width / e . currentDevicePixelRatio ) , i = Math . round ( ( i - s . top - u ) / g * r . height / e . currentDevicePixelRatio ) , { x : n , y : i } } , o . addEvent = function ( t , e , n ) { t . addEventListener ? t . addEventListener ( e , n ) : t . attachEvent ? t . attachEvent ( "on" + e , n ) : t [ "on" + e ] = n } , o . removeEvent = function ( t , e , n ) { t . removeEventListener ? t . removeEventListener ( e , n , ! 1 ) : t . detachEvent ? t . detachEvent ( "on" + e , n ) : t [ "on" + e ] = o . noop } , o . bindEvents = function ( t , e , n ) { var i = t . events = t . events || { } ; o . each ( e , function ( e ) { i [ e ] = function ( ) { n . apply ( t , arguments ) } , o . addEvent ( t . chart . canvas , e , i [ e ] ) } ) } , o . unbindEvents = function ( t , e ) { var n = t . chart . canvas ; o . each ( e , function ( t , e ) { o . removeEvent ( n , e , t ) } ) } , o . getConstraintWidth = function ( t ) { return a ( t , "max-width" , "clientWidth" ) } , o . getConstraintHeight = function ( t ) { return a ( t , "max-height" , "clientHeight" ) } , o . getMaximumWidth = function ( t ) { var e = t . parentNode , n = parseInt ( o . getStyle ( e , "padding-left" ) , 10 ) , i = parseInt ( o . getStyle ( e , "padding-right" ) , 10 ) , a = e . clientWidth - n - i , r = o . getConstraintWidth ( t ) ; return isNaN ( r ) ? a : Math . min ( a , r ) } , o . getMaximumHeight = function ( t ) { var e = t . parentNode , n = parseInt ( o . getStyle ( e , "padding-top" ) , 10 ) , i = parseInt ( o . getStyle ( e , "padding-bottom" ) , 10 ) , a = e . clientHeight - n - i , r = o . getConstraintHeight ( t ) ; return isNaN ( r ) ? a : Math . min ( a , r ) } , o . getStyle = function ( t , e ) { return t . currentStyle ? t . currentStyle [ e ] : document . defaultView . getComputedStyle ( t , null ) . getPropertyValue ( e ) } , o . retinaScale = function ( t ) { var e = t . ctx , n = t . canvas , i = n . width , a = n . height , o = t . currentDevicePixelRatio = window . devicePixelRatio || 1 ; 1 !== o && ( n . height = a * o , n . width = i * o , e . scale ( o , o ) , t . originalDevicePixelRatio = t . originalDevicePixelRatio || o ) , n . style . width = i + "px" , n . style . height = a + "px" } , o . clear = function ( t ) { t . ctx . clearRect ( 0 , 0 , t . width , t . height ) } , o . fontString = function ( t , e , n ) { return e + " " + t + "px " + n } , o . longestText = function ( t , e , n , i ) { i = i || { } ; var a = i . data = i . data || { } , r = i . garbageCollect = i . garbageCollect || [ ] ; i . font !== e && ( a = i . data = { } , r = i . garbageCollect = [ ] , i . font = e ) , t . font = e ; var s = 0 ; o . each ( n , function ( e ) { void 0 !== e && null !== e && o . isArray ( e ) !== ! 0 ? s = o . measureText ( t , a , r , s , e ) : o . isArray ( e ) && o . each ( e , function ( e ) { void 0 === e || null === e || o . isArray ( e ) || ( s = o . measureText ( t , a , r , s , e ) ) } ) } ) ; var l = r . length / 2 ; if ( l > n . length ) { for ( var d = 0 ; l > d ; d ++ ) delete a [ r [ d ] ] ; r . splice ( 0 , l ) } return s } , o . measureText = function ( t , e , n , i , a ) { var o = e [ a ] ; return o || ( o = e [ a ] = t . measureText ( a ) . width , n . push ( a ) ) , o > i && ( i = o ) , i } , o . numberOfLabelLines = function ( t ) { var e = 1 ; return o . each ( t , function ( t ) { o . isArray ( t ) && t . length > e && ( e = t . length ) } ) , e } , o . drawRoundedRectangle = function ( t , e , n , i , a , o ) { t . beginPath ( ) , t . moveTo ( e + o , n ) , t . lineTo ( e + i - o , n ) , t . quadraticCurveTo ( e + i , n , e + i , n + o ) , t . lineTo ( e + i , n + a - o ) , t . quadraticCurveTo ( e + i , n + a , e + i - o , n + a ) , t . lineTo ( e + o , n + a ) , t . quadraticCurveTo ( e , n + a , e , n + a - o ) , t . lineTo ( e , n + o ) , t . quadraticCurveTo ( e , n , e + o , n ) , t . closePath ( ) } , o . color = function ( e ) { return i ? i ( e instanceof CanvasGradient ? t . defaults . global . defaultColor : e ) : ( console . error ( "Color.js not found!" ) , e ) } , o . addResizeListener = function ( t , e ) { var n = document . createElement ( "iframe" ) , i = "chartjs-hidden-iframe" ; n . classlist ? n . classlist . add ( i ) : n . setAttribute ( "class" , i ) , n . tabIndex = - 1 ; var a = n . style ; a . width = "100%" , a . display = "block" , a . border = 0 , a . height = 0 , a . margin = 0 , a . position = "absolute" , a . left = 0 , a . right = 0 , a . top = 0 , a . bottom = 0 , t . insertBefore ( n , t . firstChild ) , ( n . contentWindow || n ) . onresize = function ( ) { return e ? e ( ) : void 0 } } , o . removeResizeListener = function ( t ) { var e = t . querySelector ( ".chartjs-hidden-iframe" ) ; e && e . parentNode . removeChild ( e ) } , o . isArray = Array . isArray ? function ( t ) { return Array . isArray ( t ) } : function ( t ) { return "[object Array]" === Object . prototype . toString . call ( t ) } , o . arrayEquals = function ( t , e ) { var n , i , a , r ; if ( ! t || ! e || t . length !== e . length ) return ! 1 ; for ( n = 0 , i = t . length ; i > n ; ++ n ) if ( a = t [ n ] , r = e [ n ] , a instanceof Array && r instanceof Array ) { if ( ! o . arrayEquals ( a , r ) ) return ! 1 } else if ( a !== r ) return ! 1 ; return ! 0 } , o . callCallback = function ( t , e , n ) { t && "function" == typeof t . call && t . apply ( n , e ) } , o . getHoverColor = function ( t ) { return t instanceof CanvasPattern ? t : o . color ( t ) . saturate ( . 5 ) . darken ( . 1 ) . rgbString ( ) } } } , { 2 : 2 } ] , 27 : [ function ( t , e , n ) { "use strict" ; e . exports = function ( ) { var t = function ( e , n ) { var i = this , a = t . helpers ; return i . config = n || { data : { datasets : [ ] } } , e . length &
return t + e . before . length + e . lines . length + e . after . length } , 0 ) ; o += t . beforeBody . length + t . afterBody . length ; var r = t . title . length , s = t . footer . length , l = t . titleFontSize , d = t . bodyFontSize , u = t . footerFontSize ; n . height += r * l , n . height += ( r - 1 ) * t . titleSpacing , n . height += r ? t . titleMarginBottom : 0 , n . height += o * d , n . height += o ? ( o - 1 ) * t . bodySpacing : 0 , n . height += s ? t . footerMarginTop : 0 , n . height += s * u , n . height += s ? ( s - 1 ) * t . footerSpacing : 0 ; var c = 0 , h = function ( t ) { n . width = Math . max ( n . width , e . measureText ( t ) . width + c ) } ; return e . font = a . fontString ( l , t . _titleFontStyle , t . _titleFontFamily ) , a . each ( t . title , h ) , e . font = a . fontString ( d , t . _bodyFontStyle , t . _bodyFontFamily ) , a . each ( t . beforeBody . concat ( t . afterBody ) , h ) , c = i . length > 1 ? d + 2 : 0 , a . each ( i , function ( t ) { a . each ( t . before , h ) , a . each ( t . lines , h ) , a . each ( t . after , h ) } ) , c = 0 , e . font = a . fontString ( u , t . _footerFontStyle , t . _footerFontFamily ) , a . each ( t . footer , h ) , n . width += 2 * t . xPadding , n } , determineAlignment : function ( t ) { var e = this , n = e . _model , i = e . _chart , a = e . _chartInstance . chartArea ; n . y < t . height ? n . yAlign = "top" : n . y > i . height - t . height && ( n . yAlign = "bottom" ) ; var o , r , s , l , d , u = ( a . left + a . right ) / 2 , c = ( a . top + a . bottom ) / 2 ; "center" === n . yAlign ? ( o = function ( t ) { return u >= t } , r = function ( t ) { return t > u } ) : ( o = function ( e ) { return e <= t . width / 2 } , r = function ( e ) { return e >= i . width - t . width / 2 } ) , s = function ( e ) { return e + t . width > i . width } , l = function ( e ) { return e - t . width < 0 } , d = function ( t ) { return c >= t ? "top" : "bottom" } , o ( n . x ) ? ( n . xAlign = "left" , s ( n . x ) && ( n . xAlign = "center" , n . yAlign = d ( n . y ) ) ) : r ( n . x ) && ( n . xAlign = "right" , l ( n . x ) && ( n . xAlign = "center" , n . yAlign = d ( n . y ) ) ) } , getBackgroundPoint : function ( t , e ) { var n = { x : t . x , y : t . y } , i = t . caretSize , a = t . caretPadding , o = t . cornerRadius , r = t . xAlign , s = t . yAlign , l = i + a , d = o + a ; return "right" === r ? n . x -= e . width : "center" === r && ( n . x -= e . width / 2 ) , "top" === s ? n . y += l : "bottom" === s ? n . y -= e . height + l : n . y -= e . height / 2 , "center" === s ? "left" === r ? n . x += l : "right" === r && ( n . x -= l ) : "left" === r ? n . x -= d : "right" === r && ( n . x += d ) , n } , drawCaret : function ( t , e , n ) { var i , o , r , s , l , d , u = this . _view , c = this . _chart . ctx , h = u . caretSize , f = u . cornerRadius , g = u . xAlign , m = u . yAlign , p = t . x , v = t . y , b = e . width , y = e . height ; "center" === m ? ( "left" === g ? ( i = p , o = i - h , r = i ) : ( i = p + b , o = i + h , r = i ) , l = v + y / 2 , s = l - h , d = l + h ) : ( "left" === g ? ( i = p + f , o = i + h , r = o + h ) : "right" === g ? ( i = p + b - f , o = i - h , r = o - h ) : ( o = p + b / 2 , i = o - h , r = o + h ) , "top" === m ? ( s = v , l = s - h , d = s ) : ( s = v + y , l = s + h , d = s ) ) ; var x = a . color ( u . backgroundColor ) ; c . fillStyle = x . alpha ( n * x . alpha ( ) ) . rgbString ( ) , c . beginPath ( ) , c . moveTo ( i , s ) , c . lineTo ( o , l ) , c . lineTo ( r , d ) , c . closePath ( ) , c . fill ( ) } , drawTitle : function ( t , e , n , i ) { var o = e . title ; if ( o . length ) { n . textAlign = e . _titleAlign , n . textBaseline = "top" ; var r = e . titleFontSize , s = e . titleSpacing , l = a . color ( e . titleFontColor ) ; n . fillStyle = l . alpha ( i * l . alpha ( ) ) . rgbString ( ) , n . font = a . fontString ( r , e . _titleFontStyle , e . _titleFontFamily ) ; var d , u ; for ( d = 0 , u = o . length ; u > d ; ++ d ) n . fillText ( o [ d ] , t . x , t . y ) , t . y += r + s , d + 1 === o . length && ( t . y += e . titleMarginBottom - s ) } } , drawBody : function ( t , e , n , i ) { var o = e . bodyFontSize , r = e . bodySpacing , s = e . body ; n . textAlign = e . _bodyAlign , n . textBaseline = "top" ; var l = a . color ( e . bodyFontColor ) , d = l . alpha ( i * l . alpha ( ) ) . rgbString ( ) ; n . fillStyle = d , n . font = a . fontString ( o , e . _bodyFontStyle , e . _bodyFontFamily ) ; var u = 0 , c = function ( e ) { n . fillText ( e , t . x + u , t . y ) , t . y += o + r } ; a . each ( e . beforeBody , c ) ; var h = s . length > 1 ; u = h ? o + 2 : 0 , a . each ( s , function ( r , s ) { a . each ( r . before , c ) , a . each ( r . lines , function ( r ) { h && ( n . fillStyle = a . color ( e . legendColorBackground ) . alpha ( i ) . rgbaString ( ) , n . fillRect ( t . x , t . y , o , o ) , n . strokeStyle = a . color ( e . labelColors [ s ] . borderColor ) . alpha ( i ) . rgbaString ( ) , n . strokeRect ( t . x , t . y , o , o ) , n . fillStyle = a . color ( e . labelColors [ s ] . backgroundColor ) . alpha ( i ) . rgbaString ( ) , n . fillRect ( t . x + 1 , t . y + 1 , o - 2 , o - 2 ) , n . fillStyle = d ) , c ( r ) } ) , a . each ( r . after , c ) } ) , u = 0 , a . each ( e . afterBody , c ) , t . y -= r } , drawFooter : function ( t , e , n , i ) { var o = e . footer ; if ( o . length ) { t . y += e . footerMarginTop , n . textAlign = e . _footerAlign , n . textBaseline = "top" ; var r = a . color ( e . footerFontColor ) ; n . fillStyle = r . alpha ( i * r . alpha ( ) ) . rgbString ( ) , n . font = a . fontString ( e . footerFontSize , e . _footerFontStyle , e . _footerFontFamily ) , a . each ( o , function ( i ) { n . fillText ( i , t . x , t . y ) , t . y += e . footerFontSize + e . footerSpacing } ) } } , draw : function ( ) { var t = this . _chart . ctx , e = this . _view ; if ( 0 !== e . opacity ) { var n = this . getTooltipSize ( e ) , i = { x : e . x , y : e . y } , o = Math . abs ( e . opacity < . 001