<html><head>
<script>/*
 * This is mostly copied from the example in https://www.chartjs.org/docs/latest/configuration/tooltip.html#external-custom-tooltips.
 */

setCustomTooltip = function(chartInput, extraTextByLabel) {
    chartInput.options = chartInput.options || {};
    chartInput.options.tooltips = chartInput.options.tooltips || {};
    chartInput.options.tooltips.enabled = false;
    chartInput.options.tooltips.custom = function (tooltipModel) {
        // `this` will be the overall tooltip
        var canvas = this._chart.canvas;
        return customTooltip(canvas, tooltipModel, extraTextByLabel);
    }

    return chartInput;
}
customTooltip = function(canvas, tooltipModel, extraTextByLabel) {
    // Tooltip Element
    var tooltipEl = document.getElementById('chartjs-tooltip');

    // Create element on first render
    if (!tooltipEl) {
        tooltipEl = document.createElement('div');
        tooltipEl.id = 'chartjs-tooltip';
        tooltipEl.innerHTML = '<table style="background: #cccd"></table>';
        document.body.appendChild(tooltipEl);
    }

    // Hide if no tooltip
    if (tooltipModel.opacity === 0) {
        tooltipEl.style.opacity = 0;
        return;
    }

    // Set caret Position
    tooltipEl.classList.remove('above', 'below', 'no-transform');
    if (tooltipModel.yAlign) {
        tooltipEl.classList.add(tooltipModel.yAlign);
    } else {
        tooltipEl.classList.add('no-transform');
    }

    function getBody(bodyItem) {
        return bodyItem.lines;
    }

    // Set Text
    if (tooltipModel.body) {
        var titleLines = tooltipModel.title || [];
        var bodyLines = tooltipModel.body.map(getBody);

        var innerHtml = '<thead>';

        titleLines.forEach(function(title) {
            innerHtml += '<tr><th>' + title + '</th></tr>';
        });
        innerHtml += '</thead><tbody>';

        bodyLines.forEach(function(body, i) {
            var colors = tooltipModel.labelColors[i];
            var style = 'background:' + colors.backgroundColor;
            style += '; border-color:' + colors.borderColor;
            style += '; border-width: 2px';
            var span = '<span style="' + style + '"></span>';
            innerHtml += '<tr><td>' + span + body + '</td></tr>';
        });

        // Set extra text.
        if (tooltipModel.dataPoints[0])
        {
            var tooltipItem = tooltipModel.dataPoints[0];
            var extra = extraTextByLabel[tooltipItem.label];
            innerHtml += '<tr><td><hr />' + escapeHtml(extra) + '</td></tr>';
        }

        innerHtml += '</tbody>';

        var tableRoot = tooltipEl.querySelector('table');
        tableRoot.innerHTML = innerHtml;
    }

    var position = canvas.getBoundingClientRect();

    // Display, position, and set styles for font
    tooltipEl.style.opacity = 1;
    tooltipEl.style.position = 'absolute';
    tooltipEl.style.left = '10px'
    tooltipEl.style.top = '10px'
    tooltipEl.style.fontFamily = tooltipModel._bodyFontFamily;
    tooltipEl.style.fontSize = tooltipModel.bodyFontSize + 'px';
    tooltipEl.style.fontStyle = tooltipModel._bodyFontStyle;
    tooltipEl.style.padding = tooltipModel.yPadding + 'px ' + tooltipModel.xPadding + 'px';
    tooltipEl.style.pointerEvents = 'none';
}

function escapeHtml(unsafe) {
    if(unsafe) {
        return unsafe
            .replace(/&/g, "&")
            .replace(/</g, "<")
            .replace(/>/g, ">")
            .replace(/"/g, """)
            .replace(/'/g, "'")
            .replace(/\n/g, "</br>");
    } else {
        return '';
    }
 }
</script><script>/*!
 * Chart.js v2.8.0
 * https://www.chartjs.org
 * (c) 2019 Chart.js Contributors
 * Released under the MIT License
 */
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(function(){try{return require("moment")}catch(t){}}()):"function"==typeof define&&define.amd?define(["require"],function(t){return e(function(){try{return t("moment")}catch(t){}}())}):t.Chart=e(t.moment)}(this,function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var e={rgb2hsl:i,rgb2hsv:n,rgb2hwb:a,rgb2cmyk:o,rgb2keyword:s,rgb2xyz:l,rgb2lab:d,rgb2lch:function(t){return x(d(t))},hsl2rgb:u,hsl2hsv:function(t){var e=t[0],i=t[1]/100,n=t[2]/100;if(0===n)return[0,0,0];return[e,100*(2*(i*=(n*=2)<=1?n:2-n)/(n+i)),100*((n+i)/2)]},hsl2hwb:function(t){return a(u(t))},hsl2cmyk:function(t){return o(u(t))},hsl2keyword:function(t){return s(u(t))},hsv2rgb:h,hsv2hsl:function(t){var e,i,n=t[0],a=t[1]/100,o=t[2]/100;return e=a*o,[n,100*(e=(e/=(i=(2-a)*o)<=1?i:2-i)||0),100*(i/=2)]},hsv2hwb:function(t){return a(h(t))},hsv2cmyk:function(t){return o(h(t))},hsv2keyword:function(t){return s(h(t))},hwb2rgb:c,hwb2hsl:function(t){return i(c(t))},hwb2hsv:function(t){return n(c(t))},hwb2cmyk:function(t){return o(c(t))},hwb2keyword:function(t){return s(c(t))},cmyk2rgb:f,cmyk2hsl:function(t){return i(f(t))},cmyk2hsv:function(t){return n(f(t))},cmyk2hwb:function(t){return a(f(t))},cmyk2keyword:function(t){return s(f(t))},keyword2rgb:w,keyword2hsl:function(t){return i(w(t))},keyword2hsv:function(t){return n(w(t))},keyword2hwb:function(t){return a(w(t))},keyword2cmyk:function(t){return o(w(t))},keyword2lab:function(t){return d(w(t))},keyword2xyz:function(t){return l(w(t))},xyz2rgb:p,xyz2lab:m,xyz2lch:function(t){return x(m(t))},lab2xyz:v,lab2rgb:y,lab2lch:x,lch2lab:k,lch2xyz:function(t){return v(k(t))},lch2rgb:function(t){return y(k(t))}};function i(t){var e,i,n=t[0]/255,a=t[1]/255,o=t[2]/255,r=Math.min(n,a,o),s=Math.max(n,a,o),l=s-r;return s==r?e=0:n==s?e=(a-o)/l:a==s?e=2+(o-n)/l:o==s&&(e=4+(n-a)/l),(e=Math.min(60*e,360))<0&&(e+=360),i=(r+s)/2,[e,100*(s==r?0:i<=.5?l/(s+r):l/(2-s-r)),100*i]}function n(t){var e,i,n=t[0],a=t[1],o=t[2],r=Math.min(n,a,o),s=Math.max(n,a,o),l=s-r;return i=0==s?0:l/s*1e3/10,s==r?e=0:n==s?e=(a-o)/l:a==s?e=2+(o-n)/l:o==s&&(e=4+(n-a)/l),(e=Math.min(60*e,360))<0&&(e+=360),[e,i,s/255*1e3/10]}function a(t){var e=t[0],n=t[1],a=t[2];return[i(t)[0],100*(1/255*Math.min(e,Math.min(n,a))),100*(a=1-1/255*Math.max(e,Math.max(n,a)))]}function o(t){var e,i=t[0]/255,n=t[1]/255,a=t[2]/255;return[100*((1-i-(e=Math.min(1-i,1-n,1-a)))/(1-e)||0),100*((1-n-e)/(1-e)||0),100*((1-a-e)/(1-e)||0),100*e]}function s(t){return _[JSON.stringify(t)]}function l(t){var e=t[0]/255,i=t[1]/255,n=t[2]/255;return[100*(.4124*(e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92)+.3576*(i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92)+.1805*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)),100*(.2126*e+.7152*i+.0722*n),100*(.0193*e+.1192*i+.9505*n)]}function d(t){var e=l(t),i=e[0],n=e[1],a=e[2];return n/=100,a/=108.883,i=(i/=95.047)>.008856?Math.pow(i,1/3):7.787*i+16/116,[116*(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116)-16,500*(i-n),200*(n-(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116))]}function u(t){var e,i,n,a,o,r=t[0]/360,s=t[1]/100,l=t[2]/100;if(0==s)return[o=255*l,o,o];e=2*l-(i=l<.5?l*(1+s):l+s-l*s),a=[0,0,0];for(var d=0;d<3;d++)(n=r+1/3*-(d-1))<0&&n++,n>1&&n--,o=6*n<1?e+6*(i-e)*n:2*n<1?i:3*n<2?e+(i-e)*(2/3-n)*6:e,a[d]=255*o;return a}function h(t){var e=t[0]/60,i=t[1]/100,n=t[2]/100,a=Math.floor(e)%6,o=e-Math.floor(e),r=255*n*(1-i),s=255*n*(1-i*o),l=255*n*(1-i*(1-o));n*=255;switch(a){case 0:return[n,l,r];case 1:return[s,n,r];case 2:return[r,n,l];case 3:return[r,s,n];case 4:return[l,r,n];case 5:return[n,r,s]}}function c(t){var e,i,n,a,o=t[0]/360,s=t[1]/100,l=t[2]/100,d=s+l;switch(d>1&&(s/=d,l/=d),n=6*o-(e=Math.floor(6*o)),0!=(1&e)&&(n=1-n),a=s+n*((i=1-l)-s),e){default:case 6:case 0:r=i,g=a,b=s;break;case 1:r=a,g=i,b=s;break;case 2:r=s,g=i,b=a;break;case 3:r=s,g=a,b=i;break;case 4:r=a,g=s,b=i;break;case 5:r=i,g=s,b=a}return[255*r,255*g,255*b]}function f(t){var e=t[0]/100,i=t[1]/100,n=t[2]/100,a=t[3]/100;return[255*(1-Math.min(1,e*(1-a)+a)),255*(1-Math.min(1,i*(1-a)+a)),255*(1-Math.min(1,n*(1-a)+a))]}function p(t){var e,i,n,a=t[0]/100,o=t[1]/100,r=t[2]/100;return i=-.9689*a+1.8758*o+.0415*r,n=.0557*a+-.204*o+1.057*r,e=(e=3.2406*a+-1.5372*o+-.4986*r)>.0031308?1.055*Math.pow(e,1/2.4)-.055:e*=12.92,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:i*=12.92,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:n*=12.92,[255*(e=Math.min(Math.max(0,e),1)),255*(i=Math.min(Math.max(0,i),1)),255*(n=Math.min(Math.max(0,n),1))]}function m(t){var e=t[0],i=t[1],n=t[2];return i/=100,n/=108.883,e=(e/=95.047)>.008856?Math.pow(e,1/3):7.787*e+16/116,[116*(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116)-16,500*(e-i),200*(i-(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116))]}function v(t){var e,i,n,a,o=t[0],r=t[1],s=t[2];return o<=8?a=(i=100*o/903.3)/100*7.787+16/116:(i=100*Math.pow((o+16)/116,3),a=Math.pow(i/100,1/3)),[e=e/95.047<=.008856?e=95.047*(r/500+a-16/116)/7.787:95.047*Math.pow(r/500+a,3),i,n=n/108.883<=.008859?n=108.883*(a-s/200-16/116)/7.787:108.883*Math.pow(a-s/200,3)]}function x(t){var e,i=t[0],n=t[1],a=t[2];return(e=360*Math.atan2(a,n)/2/Math.PI)<0&&(e+=360),[i,Math.sqrt(n*n+a*a),e]}function y(t){return p(v(t))}function k(t){var e,i=t[0],n=t[1];return e=t[2]/360*2*Math.PI,[i,n*Math.cos(e),n*Math.sin(e)]}function w(t){return M[t]}var M={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},_={};for(var C in M)_[JSON.stringify(M[C])]=C;var S=function(){return new T};for(var P in e){S[P+"Raw"]=function(t){return function(i){return"number"==typeof i&&(i=Array.prototype.slice.call(arguments)),e[t](i)}}(P);var I=/(\w+)2(\w+)/.exec(P),A=I[1],D=I[2];(S[A]=S[A]||{})[D]=S[P]=function(t){return function(i){"number"==typeof i&&(i=Array.prototype.slice.call(arguments));var n=e[t](i);if("string"==typeof n||void 0===n)return n;for(var a=0;a<n.length;a++)n[a]=Math.round(n[a]);return n}}(P)}var T=function(){this.convs={}};T.prototype.routeSpace=function(t,e){var i=e[0];return void 0===i?this.getValues(t):("number"==typeof i&&(i=Array.prototype.slice.call(e)),this.setValues(t,i))},T.prototype.setValues=function(t,e){return this.space=t,this.convs={},this.convs[t]=e,this},T.prototype.getValues=function(t){var e=this.convs[t];if(!e){var i=this.space,n=this.convs[i];e=S[i][t](n),this.convs[t]=e}return e},["rgb","hsl","hsv","cmyk","keyword"].forEach(function(t){T.prototype[t]=function(e){return this.routeSpace(t,arguments)}});var F=S,L={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},R={getRgba:O,getHsla:z,getRgb:function(t){var e=O(t);return e&&e.slice(0,3)},getHsl:function(t){var e=z(t);return e&&e.slice(0,3)},getHwb:B,getAlpha:function(t){var e=O(t);if(e)return e[3];if(e=z(t))return e[3];if(e=B(t))return e[3]},hexString:function(t,e){var e=void 0!==e&&3===t.length?e:t[3];return"#"+H(t[0])+H(t[1])+H(t[2])+(e>=0&&e<1?H(Math.round(255*e)):"")},rgbString:function(t,e){if(e<1||t[3]&&t[3]<1)return N(t,e);return"rgb("+t[0]+", "+t[1]+", "+t[2]+")"},rgbaString:N,percentString:function(t,e){if(e<1||t[3]&&t[3]<1)return W(t,e);var i=Math.round(t[0]/255*100),n=Math.round(t[1]/255*100),a=Math.round(t[2]/255*100);return"rgb("+i+"%, "+n+"%, "+a+"%)"},percentaString:W,hslString:function(t,e){if(e<1||t[3]&&t[3]<1)return V(t,e);return"hsl("+t[0]+", "+t[1]+"%, "+t[2]+"%)"},hslaString:V,hwbString:function(t,e){void 0===e&&(e=void 0!==t[3]?t[3]:1);return"hwb("+t[0]+", "+t[1]+"%, "+t[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"},keyword:function(t){return j[t.slice(0,3)]}};function O(t){if(t){var e=[0,0,0],i=1,n=t.match(/^#([a-fA-F0-9]{3,4})$/i),a="";if(n){a=(n=n[1])[3];for(var o=0;o<e.length;o++)e[o]=parseInt(n[o]+n[o],16);a&&(i=Math.round(parseInt(a+a,16)/255*100)/100)}else if(n=t.match(/^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i)){a=n[2],n=n[1];for(o=0;o<e.length;o++)e[o]=parseInt(n.slice(2*o,2*o+2),16);a&&(i=Math.round(parseInt(a,16)/255*100)/100)}else if(n=t.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(o=0;o<e.length;o++)e[o]=parseInt(n[o+1]);i=parseFloat(n[4])}else if(n=t.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(o=0;o<e.length;o++)e[o]=Math.round(2.55*parseFloat(n[o+1]));i=parseFloat(n[4])}else if(n=t.match(/(\w+)/)){if("transparent"==n[1])return[0,0,0,0];if(!(e=L[n[1]]))return}for(o=0;o<e.length;o++)e[o]=E(e[o],0,255);return i=i||0==i?E(i,0,1):1,e[3]=i,e}}function z(t){if(t){var e=t.match(/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var i=parseFloat(e[4]);return[E(parseInt(e[1]),0,360),E(parseFloat(e[2]),0,100),E(parseFloat(e[3]),0,100),E(isNaN(i)?1:i,0,1)]}}}function B(t){if(t){var e=t.match(/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var i=parseFloat(e[4]);return[E(parseInt(e[1]),0,360),E(parseFloat(e[2]),0,100),E(parseFloat(e[3]),0,100),E(isNaN(i)?1:i,0,1)]}}}function N(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"rgba("+t[0]+", "+t[1]+", "+t[2]+", "+e+")"}function W(t,e){return"rgba("+Math.round(t[0]/255*100)+"%, "+Math.round(t[1]/255*100)+"%, "+Math.round(t[2]/255*100)+"%, "+(e||t[3]||1)+")"}function V(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]+", "+t[1]+"%, "+t[2]+"%, "+e+")"}function E(t,e,i){return Math.min(Math.max(e,t),i)}function H(t){var e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}var j={};for(var q in L)j[L[q]]=q;var Y=function(t){return t instanceof Y?t:this instanceof Y?(this.valid=!1,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},void("string"==typeof t?(e=R.getRgba(t))?this.setValues("rgb",e):(e=R.getHsla(t))?this.setValues("hsl",e):(e=R.getHwb(t))&&this.setValues("hwb",e):"object"==typeof t&&(void 0!==(e=t).r||void 0!==e.red?this.setValues("rgb",e):void 0!==e.l||void 0!==e.lightness?this.setValues("hsl",e):void 0!==e.v||void 0!==e.value?this.setValues("hsv",e):void 0!==e.w||void 0!==e.whiteness?this.setValues("hwb",e):void 0===e.c&&void 0===e.cyan||this.setValues("cmyk",e)))):new Y(t);var e};Y.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var t=this.values;return 1!==t.alpha?t.hwb.concat([t.alpha]):t.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var t=this.values;return t.rgb.concat([t.alpha])},hslaArray:function(){var t=this.values;return t.hsl.concat([t.alpha])},alpha:function(t){return void 0===t?this.values.alpha:(this.setValues("alpha",t),this)},red:function(t){return this.setChannel("rgb",0,t)},green:function(t){return this.setChannel("rgb",1,t)},blue:function(t){return this.setChannel("rgb",2,t)},hue:function(t){return t&&(t=(t%=360)<0?360+t:t),this.setChannel("hsl",0,t)},saturation:function(t){return this.setChannel("hsl",1,t)},lightness:function(t){return this.setChannel("hsl",2,t)},saturationv:function(t){return this.setChannel("hsv",1,t)},whiteness:function(t){return this.setChannel("hwb",1,t)},blackness:function(t){return this.setChannel("hwb",2,t)},value:function(t){return this.setChannel("hsv",2,t)},cyan:function(t){return this.setChannel("cmyk",0,t)},magenta:function(t){return this.setChannel("cmyk",1,t)},yellow:function(t){return this.setChannel("cmyk",2,t)},black:function(t){return this.setChannel("cmyk",3,t)},hexString:function(){return R.hexString(this.values.rgb)},rgbString:function(){return R.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return R.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return R.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return R.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return R.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return R.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return R.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var t=this.values.rgb;return t[0]<<16|t[1]<<8|t[2]},luminosity:function(){for(var t=this.values.rgb,e=[],i=0;i<t.length;i++){var n=t[i]/255;e[i]=n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4)}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast:function(t){var e=this.luminosity(),i=t.luminosity();return e>i?(e+.05)/(i+.05):(i+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var t=this.values.rgb;return(299*t[0]+587*t[1]+114*t[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;e<3;e++)t[e]=255-this.values.rgb[e];return this.setValues("rgb",t),this},lighten:function(t){var e=this.values.hsl;return e[2]+=e[2]*t,this.setValues("hsl",e),this},darken:function(t){var e=this.values.hsl;return e[2]-=e[2]*t,this.setValues("hsl",e),this},saturate:function(t){var e=this.values.hsl;return e[1]+=e[1]*t,this.setValues("hsl",e),this},desaturate:function(t){var e=this.values.hsl;return e[1]-=e[1]*t,this.setValues("hsl",e),this},whiten:function(t){var e=this.values.hwb;return e[1]+=e[1]*t,this.setValues("hwb",e),this},blacken:function(t){var e=this.values.hwb;return e[2]+=e[2]*t,this.setValues("hwb",e),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(t){var e=this.values.alpha;return this.setValues("alpha",e-e*t),this},opaquer:function(t){var e=this.values.alpha;return this.setValues("alpha",e+e*t),this},rotate:function(t){var e=this.values.hsl,i=(e[0]+t)%360;return e[0]=i<0?360+i:i,this.setValues("hsl",e),this},mix:function(t,e){var i=t,n=void 0===e?.5:e,a=2*n-1,o=this.alpha()-i.alpha(),r=((a*o==-1?a:(a+o)/(1+a*o))+1)/2,s=1-r;return this.rgb(r*this.red()+s*i.red(),r*this.green()+s*i.green(),r*this.blue()+s*i.blue()).alpha(this.alpha()*n+i.alpha()*(1-n))},toJSON:function(){return this.rgb()},clone:function(){var t,e,i=new Y,n=this.values,a=i.values;for(var o in n)n.hasOwnProperty(o)&&(t=n[o],"[object Array]"===(e={}.toString.call(t))?a[o]=t.slice(0):"[object Number]"===e?a[o]=t:console.error("unexpected color value:",t));return i}},Y.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},Y.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},Y.prototype.getValues=function(t){for(var e=this.values,i={},n=0;n<t.length;n++)i[t.charAt(n)]=e[t][n];return 1!==e.alpha&&(i.a=e.alpha),i},Y.prototype.setValues=function(t,e){var i,n,a=this.values,o=this.spaces,r=this.maxes,s=1;if(this.valid=!0,"alpha"===t)s=e;else if(e.length)a[t]=e.slice(0,t.length),s=e[t.length];else if(void 0!==e[t.charAt(0)]){for(i=0;i<t.length;i++)a[t][i]=e[t.charAt(i)];s=e.a}else if(void 0!==e[o[t][0]]){var l=o[t];for(i=0;i<t.length;i++)a[t][i]=e[l[i]];s=e.alpha}if(a.alpha=Math.max(0,Math.min(1,void 0===s?a.alpha:s)),"alpha"===t)return!1;for(i=0;i<t.length;i++)n=Math.max(0,Math.min(r[t][i],a[t][i])),a[t][i]=Math.round(n);for(var d in o)d!==t&&(a[d]=F[t][d](a[t]));return!0},Y.prototype.setSpace=function(t,e){var i=e[0];return void 0===i?this.getValues(t):("number"==typeof i&&(i=Array.prototype.slice.call(e)),this.setValues(t,i),this)},Y.prototype.setChannel=function(t,e,i){var n=this.values[t];return void 0===i?n[e]:i===n[e]?this:(n[e]=i,this.setValues(t,n),this)},"undefined"!=typeof window&&(window.Color=Y);var U,X=Y,K={noop:function(){},uid:(U=0,function(){return U++}),isNullOrUndef:function(t){return null==t},isArray:function(t){if(Array.isArray&&Array.isArray(t))return!0;var e=Object.prototype.toString.call(t);return"[object"===e.substr(0,7)&&"Array]"===e.substr(-6)},isObject:function(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)},isFinite:function(t){return("number"==typeof t||t instanceof Number)&&isFinite(t)},valueOrDefault:function(t,e){return void 0===t?e:t},valueAtIndexOrDefault:function(t,e,i){return K.valueOrDefault(K.isArray(t)?t[e]:t,i)},callback:function(t,e,i){if(t&&"function"==typeof t.call)return t.apply(i,e)},each:function(t,e,i,n){var a,o,r;if(K.isArray(t))if(o=t.length,n)for(a=o-1;a>=0;a--)e.call(i,t[a],a);else for(a=0;a<o;a++)e.call(i,t[a],a);else if(K.isObject(t))for(o=(r=Object.keys(t)).length,a=0;a<o;a++)e.call(i,t[r[a]],r[a])},arrayEquals:function(t,e){var i,n,a,o;if(!t||!e||t.length!==e.length)return!1;for(i=0,n=t.length;i<n;++i)if(a=t[i],o=e[i],a instanceof Array&&o instanceof Array){if(!K.arrayEquals(a,o))return!1}else if(a!==o)return!1;return!0},clone:function(t){if(K.isArray(t))return t.map(K.clone);if(K.isObject(t)){for(var e={},i=Object.keys(t),n=i.length,a=0;a<n;++a)e[i[a]]=K.clone(t[i[a]]);return e}return t},_merger:function(t,e,i,n){var a=e[t],o=i[t];K.isObject(a)&&K.isObject(o)?K.merge(a,o,n):e[t]=K.clone(o)},_mergerIf:function(t,e,i){var n=e[t],a=i[t];K.isObject(n)&&K.isObject(a)?K.mergeIf(n,a):e.hasOwnProperty(t)||(e[t]=K.clone(a))},merge:function(t,e,i){var n,a,o,r,s,l=K.isArray(e)?e:[e],d=l.length;if(!K.isObject(t))return t;for(n=(i=i||{}).merger||K._merger,a=0;a<d;++a)if(e=l[a],K.isObject(e))for(s=0,r=(o=Object.keys(e)).length;s<r;++s)n(o[s],t,e,i);return t},mergeIf:function(t,e){return K.merge(t,e,{merger:K._mergerIf})},extend:function(t){for(var e=function(e,i){t[i]=e},i=1,n=arguments.length;i<n;++i)K.each(arguments[i],e);return t},inherits:function(t){var e=this,i=t&&t.hasOwnProperty("constructor")?t.constructor:function(){return e.apply(this,arguments)},n=function(){this.constructor=i};return n.prototype=e.prototype,i.prototype=new n,i.extend=K.inherits,t&&K.extend(i.prototype,t),i.__super__=e.prototype,i}},G=K;K.callCallback=K.callback,K.indexOf=function(t,e,i){return Array.prototype.indexOf.call(t,e,i)},K.getValueOrDefault=K.valueOrDefault,K.getValueAtIndexOrDefault=K.valueAtIndexOrDefault;var Z={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return-t*(t-2)},easeInOutQuad:function(t){return(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1)},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return(t-=1)*t*t+1},easeInOutCubic:function(t){return(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return-((t-=1)*t*t*t-1)},easeInOutQuart:function(t){return(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return(t-=1)*t*t*t*t+1},easeInOutQuint:function(t){return(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},easeInSine:function(t){return 1-Math.cos(t*(Math.PI/2))},easeOutSine:function(t){return Math.sin(t*(Math.PI/2))},easeInOutSine:function(t){return-.5*(Math.cos(Math.PI*t)-1)},easeInExpo:function(t){return 0===t?0:Math.pow(2,10*(t-1))},easeOutExpo:function(t){return 1===t?1:1-Math.pow(2,-10*t)},easeInOutExpo:function(t){return 0===t?0:1===t?1:(t/=.5)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*--t))},easeInCirc:function(t){return t>=1?t:-(Math.sqrt(1-t*t)-1)},easeOutCirc:function(t){return Math.sqrt(1-(t-=1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,i=0,n=1;return 0===t?0:1===t?1:(i||(i=.3),n<1?(n=1,e=i/4):e=i/(2*Math.PI)*Math.asin(1/n),-n*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i))},easeOutElastic:function(t){var e=1.70158,i=0,n=1;return 0===t?0:1===t?1:(i||(i=.3),n<1?(n=1,e=i/4):e=i/(2*Math.PI)*Math.asin(1/n),n*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/i)+1)},easeInOutElastic:function(t){var e=1.70158,i=0,n=1;return 0===t?0:2==(t/=.5)?1:(i||(i=.45),n<1?(n=1,e=i/4):e=i/(2*Math.PI)*Math.asin(1/n),t<1?n*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i)*-.5:n*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i)*.5+1)},easeInBack:function(t){var e=1.70158;return t*t*((e+1)*t-e)},easeOutBack:function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack:function(t){var e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:function(t){return 1-Z.easeOutBounce(1-t)},easeOutBounce:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},easeInOutBounce:function(t){return t<.5?.5*Z.easeInBounce(2*t):.5*Z.easeOutBounce(2*t-1)+.5}},$={effects:Z};G.easingEffects=Z;var J=Math.PI,Q=J/180,tt=2*J,et=J/2,it=J/4,nt=2*J/3,at={clear:function(t){t.ctx.clearRect(0,0,t.width,t.height)},roundedRect:function(t,e,i,n,a,o){if(o){var r=Math.min(o,a/2,n/2),s=e+r,l=i+r,d=e+n-r,u=i+a-r;t.moveTo(e,l),s<d&&l<u?(t.arc(s,l,r,-J,-et),t.arc(d,l,r,-et,0),t.arc(d,u,r,0,et),t.arc(s,u,r,et,J)):s<d?(t.moveTo(s,i),t.arc(d,l,r,-et,et),t.arc(s,l,r,et,J+et)):l<u?(t.arc(s,l,r,-J,0),t.arc(s,u,r,0,J)):t.arc(s,l,r,-J,J),t.closePath(),t.moveTo(e,i)}else t.rect(e,i,n,a)},drawPoint:function(t,e,i,n,a,o){var r,s,l,d,u,h=(o||0)*Q;if(!e||"object"!=typeof e||"[object HTMLImageElement]"!==(r=e.toString())&&"[object HTMLCanvasElement]"!==r){if(!(isNaN(i)||i<=0)){switch(t.beginPath(),e){default:t.arc(n,a,i,0,tt),t.closePath();break;case"triangle":t.moveTo(n+Math.sin(h)*i,a-Math.cos(h)*i),h+=nt,t.lineTo(n+Math.sin(h)*i,a-Math.cos(h)*i),h+=nt,t.lineTo(n+Math.sin(h)*i,a-Math.cos(h)*i),t.closePath();break;case"rectRounded":d=i-(u=.516*i),s=Math.cos(h+it)*d,l=Math.sin(h+it)*d,t.arc(n-s,a-l,u,h-J,h-et),t.arc(n+l,a-s,u,h-et,h),t.arc(n+s,a+l,u,h,h+et),t.arc(n-l,a+s,u,h+et,h+J),t.closePath();break;case"rect":if(!o){d=Math.SQRT1_2*i,t.rect(n-d,a-d,2*d,2*d);break}h+=it;case"rectRot":s=Math.cos(h)*i,l=Math.sin(h)*i,t.moveTo(n-s,a-l),t.lineTo(n+l,a-s),t.lineTo(n+s,a+l),t.lineTo(n-l,a+s),t.closePath();break;case"crossRot":h+=it;case"cross":s=Math.cos(h)*i,l=Math.sin(h)*i,t.moveTo(n-s,a-l),t.lineTo(n+s,a+l),t.moveTo(n+l,a-s),t.lineTo(n-l,a+s);break;case"star":s=Math.cos(h)*i,l=Math.sin(h)*i,t.moveTo(n-s,a-l),t.lineTo(n+s,a+l),t.moveTo(n+l,a-s),t.lineTo(n-l,a+s),h+=it,s=Math.cos(h)*i,l=Math.sin(h)*i,t.moveTo(n-s,a-l),t.lineTo(n+s,a+l),t.moveTo(n+l,a-s),t.lineTo(n-l,a+s);break;case"line":s=Math.cos(h)*i,l=Math.sin(h)*i,t.moveTo(n-s,a-l),t.lineTo(n+s,a+l);break;case"dash":t.moveTo(n,a),t.lineTo(n+Math.cos(h)*i,a+Math.sin(h)*i)}t.fill(),t.stroke()}}else t.drawImage(e,n-e.width/2,a-e.height/2,e.width,e.height)},_isPointInArea:function(t,e){return t.x>e.left-1e-6&&t.x<e.right+1e-6&&t.y>e.top-1e-6&&t.y<e.bottom+1e-6},clipArea:function(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()},unclipArea:function(t){t.restore()},lineTo:function(t,e,i,n){var a=i.steppedLine;if(a){if("middle"===a){var o=(e.x+i.x)/2;t.lineTo(o,n?i.y:e.y),t.lineTo(o,n?e.y:i.y)}else"after"===a&&!n||"after"!==a&&n?t.lineTo(e.x,i.y):t.lineTo(i.x,e.y);t.lineTo(i.x,i.y)}else i.tension?t.bezierCurveTo(n?e.controlPointPreviousX:e.controlPointNextX,n?e.controlPointPreviousY:e.controlPointNextY,n?i.controlPointNextX:i.controlPointPreviousX,n?i.controlPointNextY:i.controlPointPreviousY,i.x,i.y):t.lineTo(i.x,i.y)}},ot=at;G.clear=at.clear,G.drawRoundedRectangle=function(t){t.beginPath(),at.roundedRect.apply(at,arguments)};var rt={_set:function(t,e){return G.merge(this[t]||(this[t]={}),e)}};rt._set("global",{defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",defaultLineHeight:1.2,showLines:!0});var st=rt,lt=G.valueOrDefault;var dt={toLineHeight:function(t,e){var i=(""+t).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!i||"normal"===i[1])return 1.2*e;switch(t=+i[2],i[3]){case"px":return t;case"%":t/=100}return e*t},toPadding:function(t){var e,i,n,a;return G.isObject(t)?(e=+t.top||0,i=+t.right||0,n=+t.bottom||0,a=+t.left||0):e=i=n=a=+t||0,{top:e,right:i,bottom:n,left:a,height:e+n,width:a+i}},_parseFont:function(t){var e=st.global,i=lt(t.fontSize,e.defaultFontSize),n={family:lt(t.fontFamily,e.defaultFontFamily),lineHeight:G.options.toLineHeight(lt(t.lineHeight,e.defaultLineHeight),i),size:i,style:lt(t.fontStyle,e.defaultFontStyle),weight:null,string:""};return n.string=function(t){return!t||G.isNullOrUndef(t.size)||G.isNullOrUndef(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}(n),n},resolve:function(t,e,i){var n,a,o;for(n=0,a=t.length;n<a;++n)if(void 0!==(o=t[n])&&(void 0!==e&&"function"==typeof o&&(o=o(e)),void 0!==i&&G.isArray(o)&&(o=o[i]),void 0!==o))return o}},ut=G,ht=$,ct=ot,ft=dt;ut.easing=ht,ut.canvas=ct,ut.options=ft;var gt=function(t){ut.extend(this,t),this.initialize.apply(this,arguments)};ut.extend(gt.prototype,{initialize:function(){this.hidden=!1},pivot:function(){var t=this;return t._view||(t._view=ut.clone(t._model)),t._start={},t},transition:function(t){var e=this,i=e._model,n=e._start,a=e._view;return i&&1!==t?(a||(a=e._view={}),n||(n=e._start={}),function(t,e,i,n){var a,o,r,s,l,d,u,h,c,f=Object.keys(i);for(a=0,o=f.length;a<o;++a)if(d=i[r=f[a]],e.hasOwnProperty(r)||(e[r]=d),(s=e[r])!==d&&"_"!==r[0]){if(t.hasOwnProperty(r)||(t[r]=s),(u=typeof d)==typeof(l=t[r]))if("string"===u){if((h=X(l)).valid&&(c=X(d)).valid){e[r]=c.mix(h,n).rgbString();continue}}else if(ut.isFinite(l)&&ut.isFinite(d)){e[r]=l+(d-l)*n;continue}e[r]=d}}(n,a,i,t),e):(e._view=i,e._start=null,e)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return ut.isNumber(this._model.x)&&ut.isNumber(this._model.y)}}),gt.extend=ut.inherits;var pt=gt,mt=pt.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),vt=mt;Object.defineProperty(mt.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(mt.prototype,"chartInstance",{get:function(){return this.chart},set:function(t){this.chart=t}}),st._set("global",{animation:{duration:1e3,easing:"easeOutQuart",onProgress:ut.noop,onComplete:ut.noop}});var bt={animations:[],request:null,addAnimation:function(t,e,i,n){var a,o,r=this.animations;for(e.chart=t,e.startTime=Date.now(),e.duration=i,n||(t.animating=!0),a=0,o=r.length;a<o;++a)if(r[a].chart===t)return void(r[a]=e);r.push(e),1===r.length&&this.requestAnimationFrame()},cancelAnimation:function(t){var e=ut.findIndex(this.animations,function(e){return e.chart===t});-1!==e&&(this.animations.splice(e,1),t.animating=!1)},requestAnimationFrame:function(){var t=this;null===t.request&&(t.request=ut.requestAnimFrame.call(window,function(){t.request=null,t.startDigest()}))},startDigest:function(){this.advance(),this.animations.length>0&&this.requestAnimationFrame()},advance:function(){for(var t,e,i,n,a=this.animations,o=0;o<a.length;)e=(t=a[o]).chart,i=t.numSteps,n=Math.floor((Date.now()-t.startTime)/t.duration*i)+1,t.currentStep=Math.min(n,i),ut.callback(t.render,[e,t],e),ut.callback(t.onAnimationProgress,[t],e),t.currentStep>=i?(ut.callback(t.onAnimationComplete,[t],e),e.animating=!1,a.splice(o,1)):++o}},xt=ut.options.resolve,yt=["push","pop","shift","splice","unshift"];function kt(t,e){var i=t._chartjs;if(i){var n=i.listeners,a=n.indexOf(e);-1!==a&&n.splice(a,1),n.length>0||(yt.forEach(function(e){delete t[e]}),delete t._chartjs)}}var wt=function(t,e){this.initialize(t,e)};ut.extend(wt.prototype,{datasetElementType:null,dataElementType:null,initialize:function(t,e){this.chart=t,this.index=e,this.linkScales(),this.addElements()},updateIndex:function(t){this.index=t},linkScales:function(){var t=this,e=t.getMeta(),i=t.getDataset();null!==e.xAxisID&&e.xAxisID in t.chart.scales||(e.xAxisID=i.xAxisID||t.chart.options.scales.xAxes[0].id),null!==e.yAxisID&&e.yAxisID in t.chart.scales||(e.yAxisID=i.yAxisID||t.chart.options.scales.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return this.chart.scales[t]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this.update(!0)},destroy:function(){this._data&&kt(this._data,this)},createMetaDataset:function(){var t=this.datasetElementType;return t&&new t({_chart:this.chart,_datasetIndex:this.index})},createMetaData:function(t){var e=this.dataElementType;return e&&new e({_chart:this.chart,_datasetIndex:this.index,_index:t})},addElements:function(){var t,e,i=this.getMeta(),n=this.getDataset().data||[],a=i.data;for(t=0,e=n.length;t<e;++t)a[t]=a[t]||this.createMetaData(t);i.dataset=i.dataset||this.createMetaDataset()},addElementAndReset:function(t){var e=this.createMetaData(t);this.getMeta().data.splice(t,0,e),this.updateElement(e,t,!0)},buildOrUpdateElements:function(){var t,e,i=this,n=i.getDataset(),a=n.data||(n.data=[]);i._data!==a&&(i._data&&kt(i._data,i),a&&Object.isExtensible(a)&&(e=i,(t=a)._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),yt.forEach(function(e){var i="onData"+e.charAt(0).toUpperCase()+e.slice(1),n=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:function(){var e=Array.prototype.slice.call(arguments),a=n.apply(this,e);return ut.each(t._chartjs.listeners,function(t){"function"==typeof t[i]&&t[i].apply(t,e)}),a}})}))),i._data=a),i.resyncElements()},update:ut.noop,transition:function(t){for(var e=this.getMeta(),i=e.data||[],n=i.length,a=0;a<n;++a)i[a].transition(t);e.dataset&&e.dataset.transition(t)},draw:function(){var t=this.getMeta(),e=t.data||[],i=e.length,n=0;for(t.dataset&&t.dataset.draw();n<i;++n)e[n].draw()},removeHoverStyle:function(t){ut.merge(t._model,t.$previousStyle||{}),delete t.$previousStyle},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],i=t._index,n=t.custom||{},a=t._model,o=ut.getHoverColor;t.$previousStyle={backgroundColor:a.backgroundColor,borderColor:a.borderColor,borderWidth:a.borderWidth},a.backgroundColor=xt([n.hoverBackgroundColor,e.hoverBackgroundColor,o(a.backgroundColor)],void 0,i),a.borderColor=xt([n.hoverBorderColor,e.hoverBorderColor,o(a.borderColor)],void 0,i),a.borderWidth=xt([n.hoverBorderWidth,e.hoverBorderWidth,a.borderWidth],void 0,i)},resyncElements:function(){var t=this.getMeta(),e=this.getDataset().data,i=t.data.length,n=e.length;n<i?t.data.splice(n,i-n):n>i&&this.insertElements(i,n-i)},insertElements:function(t,e){for(var i=0;i<e;++i)this.addElementAndReset(t+i)},onDataPush:function(){var t=arguments.length;this.insertElements(this.getDataset().data.length-t,t)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(t,e){this.getMeta().data.splice(t,e),this.insertElements(t,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),wt.extend=ut.inherits;var Mt=wt;st._set("global",{elements:{arc:{backgroundColor:st.global.defaultColor,borderColor:"#fff",borderWidth:2,borderAlign:"center"}}});var _t=pt.extend({inLabelRange:function(t){var e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.radius+e.hoverRadius,2)},inRange:function(t,e){var i=this._view;if(i){for(var n=ut.getAngleFromPoint(i,{x:t,y:e}),a=n.angle,o=n.distance,r=i.startAngle,s=i.endAngle;s<r;)s+=2*Math.PI;for(;a>s;)a-=2*Math.PI;for(;a<r;)a+=2*Math.PI;var l=a>=r&&a<=s,d=o>=i.innerRadius&&o<=i.outerRadius;return l&&d}return!1},getCenterPoint:function(){var t=this._view,e=(t.startAngle+t.endAngle)/2,i=(t.innerRadius+t.outerRadius)/2;return{x:t.x+Math.cos(e)*i,y:t.y+Math.sin(e)*i}},getArea:function(){var t=this._view;return Math.PI*((t.endAngle-t.startAngle)/(2*Math.PI))*(Math.pow(t.outerRadius,2)-Math.pow(t.innerRadius,2))},tooltipPosition:function(){var t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,i=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*i,y:t.y+Math.sin(e)*i}},draw:function(){var t,e=this._chart.ctx,i=this._view,n=i.startAngle,a=i.endAngle,o="inner"===i.borderAlign?.33:0;e.save(),e.beginPath(),e.arc(i.x,i.y,Math.max(i.outerRadius-o,0),n,a),e.arc(i.x,i.y,i.innerRadius,a,n,!0),e.closePath(),e.fillStyle=i.backgroundColor,e.fill(),i.borderWidth&&("inner"===i.borderAlign?(e.beginPath(),t=o/i.outerRadius,e.arc(i.x,i.y,i.outerRadius,n-t,a+t),i.innerRadius>o?(t=o/i.innerRadius,e.arc(i.x,i.y,i.innerRadius-o,a+t,n-t,!0)):e.arc(i.x,i.y,o,a+Math.PI/2,n-Math.PI/2),e.closePath(),e.clip(),e.beginPath(),e.arc(i.x,i.y,i.outerRadius,n,a),e.arc(i.x,i.y,i.innerRadius,a,n,!0),e.closePath(),e.lineWidth=2*i.borderWidth,e.lineJoin="round"):(e.lineWidth=i.borderWidth,e.lineJoin="bevel"),e.strokeStyle=i.borderColor,e.stroke()),e.restore()}}),Ct=ut.valueOrDefault,St=st.global.defaultColor;st._set("global",{elements:{line:{tension:.4,backgroundColor:St,borderWidth:3,borderColor:St,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0}}});var Pt=pt.extend({draw:function(){var t,e,i,n,a=this._view,o=this._chart.ctx,r=a.spanGaps,s=this._children.slice(),l=st.global,d=l.elements.line,u=-1;for(this._loop&&s.length&&s.push(s[0]),o.save(),o.lineCap=a.borderCapStyle||d.borderCapStyle,o.setLineDash&&o.setLineDash(a.borderDash||d.borderDash),o.lineDashOffset=Ct(a.borderDashOffset,d.borderDashOffset),o.lineJoin=a.borderJoinStyle||d.borderJoinStyle,o.lineWidth=Ct(a.borderWidth,d.borderWidth),o.strokeStyle=a.borderColor||l.defaultColor,o.beginPath(),u=-1,t=0;t<s.length;++t)e=s[t],i=ut.previousItem(s,t),n=e._view,0===t?n.skip||(o.moveTo(n.x,n.y),u=t):(i=-1===u?i:s[u],n.skip||(u!==t-1&&!r||-1===u?o.moveTo(n.x,n.y):ut.canvas.lineTo(o,i._view,e._view),u=t));o.stroke(),o.restore()}}),It=ut.valueOrDefault,At=st.global.defaultColor;function Dt(t){var e=this._view;return!!e&&Math.abs(t-e.x)<e.radius+e.hitRadius}st._set("global",{elements:{point:{radius:3,pointStyle:"circle",backgroundColor:At,borderColor:At,borderWidth:1,hitRadius:1,hoverRadius:4,hoverBorderWidth:1}}});var Tt=pt.extend({inRange:function(t,e){var i=this._view;return!!i&&Math.pow(t-i.x,2)+Math.pow(e-i.y,2)<Math.pow(i.hitRadius+i.radius,2)},inLabelRange:Dt,inXRange:Dt,inYRange:function(t){var e=this._view;return!!e&&Math.abs(t-e.y)<e.radius+e.hitRadius},getCenterPoint:function(){var t=this._view;return{x:t.x,y:t.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y,padding:t.radius+t.borderWidth}},draw:function(t){var e=this._view,i=this._chart.ctx,n=e.pointStyle,a=e.rotation,o=e.radius,r=e.x,s=e.y,l=st.global,d=l.defaultColor;e.skip||(void 0===t||ut.canvas._isPointInArea(e,t))&&(i.strokeStyle=e.borderColor||d,i.lineWidth=It(e.borderWidth,l.elements.point.borderWidth),i.fillStyle=e.backgroundColor||d,ut.canvas.drawPoint(i,n,o,r,s,a))}}),Ft=st.global.defaultColor;function Lt(t){return t&&void 0!==t.width}function Rt(t){var e,i,n,a,o;return Lt(t)?(o=t.width/2,e=t.x-o,i=t.x+o,n=Math.min(t.y,t.base),a=Math.max(t.y,t.base)):(o=t.height/2,e=Math.min(t.x,t.base),i=Math.max(t.x,t.base),n=t.y-o,a=t.y+o),{left:e,top:n,right:i,bottom:a}}function Ot(t,e,i){return t===e?i:t===i?e:t}function zt(t,e,i){var n,a,o,r,s=t.borderWidth,l=function(t){var e=t.borderSkipped,i={};return e?(t.horizontal?t.base>t.x&&(e=Ot(e,"left","right")):t.base<t.y&&(e=Ot(e,"bottom","top")),i[e]=!0,i):i}(t);return ut.isObject(s)?(n=+s.top||0,a=+s.right||0,o=+s.bottom||0,r=+s.left||0):n=a=o=r=+s||0,{t:l.top||n<0?0:n>i?i:n,r:l.right||a<0?0:a>e?e:a,b:l.bottom||o<0?0:o>i?i:o,l:l.left||r<0?0:r>e?e:r}}function Bt(t,e,i){var n=null===e,a=null===i,o=!(!t||n&&a)&&Rt(t);return o&&(n||e>=o.left&&e<=o.right)&&(a||i>=o.top&&i<=o.bottom)}st._set("global",{elements:{rectangle:{backgroundColor:Ft,borderColor:Ft,borderSkipped:"bottom",borderWidth:0}}});var Nt=pt.extend({draw:function(){var t=this._chart.ctx,e=this._view,i=function(t){var e=Rt(t),i=e.right-e.left,n=e.bottom-e.top,a=zt(t,i/2,n/2);return{outer:{x:e.left,y:e.top,w:i,h:n},inner:{x:e.left+a.l,y:e.top+a.t,w:i-a.l-a.r,h:n-a.t-a.b}}}(e),n=i.outer,a=i.inner;t.fillStyle=e.backgroundColor,t.fillRect(n.x,n.y,n.w,n.h),n.w===a.w&&n.h===a.h||(t.save(),t.beginPath(),t.rect(n.x,n.y,n.w,n.h),t.clip(),t.fillStyle=e.borderColor,t.rect(a.x,a.y,a.w,a.h),t.fill("evenodd"),t.restore())},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){return Bt(this._view,t,e)},inLabelRange:function(t,e){var i=this._view;return Lt(i)?Bt(i,t,null):Bt(i,null,e)},inXRange:function(t){return Bt(this._view,t,null)},inYRange:function(t){return Bt(this._view,null,t)},getCenterPoint:function(){var t,e,i=this._view;return Lt(i)?(t=i.x,e=(i.y+i.base)/2):(t=(i.x+i.base)/2,e=i.y),{x:t,y:e}},getArea:function(){var t=this._view;return Lt(t)?t.width*Math.abs(t.y-t.base):t.height*Math.abs(t.x-t.base)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}}),Wt={},Vt=_t,Et=Pt,Ht=Tt,jt=Nt;Wt.Arc=Vt,Wt.Line=Et,Wt.Point=Ht,Wt.Rectangle=jt;var qt=ut.options.resolve;st._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",categoryPercentage:.8,barPercentage:.9,offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}});var Yt=Mt.extend({dataElementType:Wt.Rectangle,initialize:function(){var t;Mt.prototype.initialize.apply(this,arguments),(t=this.getMeta()).stack=this.getDataset().stack,t.bar=!0},update:function(t){var e,i,n=this.getMeta().data;for(this._ruler=this.getRuler(),e=0,i=n.length;e<i;++e)this.updateElement(n[e],e,t)},updateElement:function(t,e,i){var n=this,a=n.getMeta(),o=n.getDataset(),r=n._resolveElementOptions(t,e);t._xScale=n.getScaleForId(a.xAxisID),t._yScale=n.getScaleForId(a.yAxisID),t._datasetIndex=n.index,t._index=e,t._model={backgroundColor:r.backgroundColor,borderColor:r.borderColor,borderSkipped:r.borderSkipped,borderWidth:r.borderWidth,datasetLabel:o.label,label:n.chart.data.labels[e]},n._updateElementGeometry(t,e,i),t.pivot()},_updateElementGeometry:function(t,e,i){var n=this,a=t._model,o=n._getValueScale(),r=o.getBasePixel(),s=o.isHorizontal(),l=n._ruler||n.getRuler(),d=n.calculateBarValuePixels(n.index,e),u=n.calculateBarIndexPixels(n.index,e,l);a.horizontal=s,a.base=i?r:d.base,a.x=s?i?r:d.head:u.center,a.y=s?u.center:i?r:d.head,a.height=s?u.size:void 0,a.width=s?void 0:u.size},_getStacks:function(t){var e,i,n=this.chart,a=this._getIndexScale().options.stacked,o=void 0===t?n.data.datasets.length:t+1,r=[];for(e=0;e<o;++e)(i=n.getDatasetMeta(e)).bar&&n.isDatasetVisible(e)&&(!1===a||!0===a&&-1===r.indexOf(i.stack)||void 0===a&&(void 0===i.stack||-1===r.indexOf(i.stack)))&&r.push(i.stack);return r},getStackCount:function(){return this._getStacks().length},getStackIndex:function(t,e){var i=this._getStacks(t),n=void 0!==e?i.indexOf(e):-1;return-1===n?i.length-1:n},getRuler:function(){var t,e,i=this._getIndexScale(),n=this.getStackCount(),a=this.index,o=i.isHorizontal(),r=o?i.left:i.top,s=r+(o?i.width:i.height),l=[];for(t=0,e=this.getMeta().data.length;t<e;++t)l.push(i.getPixelForValue(null,t,a));return{min:ut.isNullOrUndef(i.options.barThickness)?function(t,e){var i,n,a,o,r=t.isHorizontal()?t.width:t.height,s=t.getTicks();for(a=1,o=e.length;a<o;++a)r=Math.min(r,Math.abs(e[a]-e[a-1]));for(a=0,o=s.length;a<o;++a)n=t.getPixelForTick(a),r=a>0?Math.min(r,n-i):r,i=n;return r}(i,l):-1,pixels:l,start:r,end:s,stackCount:n,scale:i}},calculateBarValuePixels:function(t,e){var i,n,a,o,r,s,l=this.chart,d=this.getMeta(),u=this._getValueScale(),h=u.isHorizontal(),c=l.data.datasets,f=+u.getRightValue(c[t].data[e]),g=u.options.minBarLength,p=u.options.stacked,m=d.stack,v=0;if(p||void 0===p&&void 0!==m)for(i=0;i<t;++i)(n=l.getDatasetMeta(i)).bar&&n.stack===m&&n.controller._getValueScaleId()===u.id&&l.isDatasetVisible(i)&&(a=+u.getRightValue(c[i].data[e]),(f<0&&a<0||f>=0&&a>0)&&(v+=a));return o=u.getPixelForValue(v),s=(r=u.getPixelForValue(v+f))-o,void 0!==g&&Math.abs(s)<g&&(s=g,r=f>=0&&!h||f<0&&h?o-g:o+g),{size:s,base:o,head:r,center:r+s/2}},calculateBarIndexPixels:function(t,e,i){var n=i.scale.options,a="flex"===n.barThickness?function(t,e,i){var n,a=e.pixels,o=a[t],r=t>0?a[t-1]:null,s=t<a.length-1?a[t+1]:null,l=i.categoryPercentage;return null===r&&(r=o-(null===s?e.end-e.start:s-o)),null===s&&(s=o+o-r),n=o-(o-Math.min(r,s))/2*l,{chunk:Math.abs(s-r)/2*l/e.stackCount,ratio:i.barPercentage,start:n}}(e,i,n):function(t,e,i){var n,a,o=i.barThickness,r=e.stackCount,s=e.pixels[t];return ut.isNullOrUndef(o)?(n=e.min*i.categoryPercentage,a=i.barPercentage):(n=o*r,a=1),{chunk:n/r,ratio:a,start:s-n/2}}(e,i,n),o=this.getStackIndex(t,this.getMeta().stack),r=a.start+a.chunk*o+a.chunk/2,s=Math.min(ut.valueOrDefault(n.maxBarThickness,1/0),a.chunk*a.ratio);return{base:r-s/2,head:r+s/2,center:r,size:s}},draw:function(){var t=this.chart,e=this._getValueScale(),i=this.getMeta().data,n=this.getDataset(),a=i.length,o=0;for(ut.canvas.clipArea(t.ctx,t.chartArea);o<a;++o)isNaN(e.getRightValue(n.data[o]))||i[o].draw();ut.canvas.unclipArea(t.ctx)},_resolveElementOptions:function(t,e){var i,n,a,o=this.chart,r=o.data.datasets[this.index],s=t.custom||{},l=o.options.elements.rectangle,d={},u={chart:o,dataIndex:e,dataset:r,datasetIndex:this.index},h=["backgroundColor","borderColor","borderSkipped","borderWidth"];for(i=0,n=h.length;i<n;++i)d[a=h[i]]=qt([s[a],r[a],l[a]],u,e);return d}}),Ut=ut.valueOrDefault,Xt=ut.options.resolve;st._set("bubble",{hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(t,e){var i=e.datasets[t.datasetIndex].label||"",n=e.datasets[t.datasetIndex].data[t.index];return i+": ("+t.xLabel+", "+t.yLabel+", "+n.r+")"}}}});var Kt=Mt.extend({dataElementType:Wt.Point,update:function(t){var e=this,i=e.getMeta().data;ut.each(i,function(i,n){e.updateElement(i,n,t)})},updateElement:function(t,e,i){var n=this,a=n.getMeta(),o=t.custom||{},r=n.getScaleForId(a.xAxisID),s=n.getScaleForId(a.yAxisID),l=n._resolveElementOptions(t,e),d=n.getDataset().data[e],u=n.index,h=i?r.getPixelForDecimal(.5):r.getPixelForValue("object"==typeof d?d:NaN,e,u),c=i?s.getBasePixel():s.getPixelForValue(d,e,u);t._xScale=r,t._yScale=s,t._options=l,t._datasetIndex=u,t._index=e,t._model={backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,hitRadius:l.hitRadius,pointStyle:l.pointStyle,rotation:l.rotation,radius:i?0:l.radius,skip:o.skip||isNaN(h)||isNaN(c),x:h,y:c},t.pivot()},setHoverStyle:function(t){var e=t._model,i=t._options,n=ut.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Ut(i.hoverBackgroundColor,n(i.backgroundColor)),e.borderColor=Ut(i.hoverBorderColor,n(i.borderColor)),e.borderWidth=Ut(i.hoverBorderWidth,i.borderWidth),e.radius=i.radius+i.hoverRadius},_resolveElementOptions:function(t,e){var i,n,a,o=this.chart,r=o.data.datasets[this.index],s=t.custom||{},l=o.options.elements.point,d=r.data[e],u={},h={chart:o,dataIndex:e,dataset:r,datasetIndex:this.index},c=["backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","hoverRadius","hitRadius","pointStyle","rotation"];for(i=0,n=c.length;i<n;++i)u[a=c[i]]=Xt([s[a],r[a],l[a]],h,e);return u.radius=Xt([s.radius,d?d.r:void 0,r.radius,l.radius],h,e),u}}),Gt=ut.options.resolve,Zt=ut.valueOrDefault;st._set("doughnut",{animation:{animateRotate:!0,animateScale:!1},hover:{mode:"single"},legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');var i=t.data,n=i.datasets,a=i.labels;if(n.length)for(var o=0;o<n[0].data.length;++o)e.push('<li><span style="background-color:'+n[0].backgroundColor[o]+'"></span>'),a[o]&&e.push(a[o]),e.push("</li>");return e.push("</ul>"),e.join("")},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map(function(i,n){var a=t.getDatasetMeta(0),o=e.datasets[0],r=a.data[n],s=r&&r.custom||{},l=t.options.elements.arc;return{text:i,fillStyle:Gt([s.backgroundColor,o.backgroundColor,l.backgroundColor],void 0,n),strokeStyle:Gt([s.borderColor,o.borderColor,l.borderColor],void 0,n),lineWidth:Gt([s.borderWidth,o.borderWidth,l.borderWidth],void 0,n),hidden:isNaN(o.data[n])||a.data[n].hidden,index:n}}):[]}},onClick:function(t,e){var i,n,a,o=e.index,r=this.chart;for(i=0,n=(r.data.datasets||[]).length;i<n;++i)(a=r.getDatasetMeta(i)).data[o]&&(a.data[o].hidden=!a.data[o].hidden);r.update()}},cutoutPercentage:50,rotation:-.5*Math.PI,circumference:2*Math.PI,tooltips:{callbacks:{title:function(){return""},label:function(t,e){var i=e.labels[t.index],n=": "+e.datasets[t.datasetIndex].data[t.index];return ut.isArray(i)?(i=i.slice())[0]+=n:i+=n,i}}}});var $t=Mt.extend({dataElementType:Wt.Arc,linkScales:ut.noop,getRingIndex:function(t){for(var e=0,i=0;i<t;++i)this.chart.isDatasetVisible(i)&&++e;return e},update:function(t){var e,i,n=this,a=n.chart,o=a.chartArea,r=a.options,s=o.right-o.left,l=o.bottom-o.top,d=Math.min(s,l),u={x:0,y:0},h=n.getMeta(),c=h.data,f=r.cutoutPercentage,g=r.circumference,p=n._getRingWeight(n.index);if(g<2*Math.PI){var m=r.rotation%(2*Math.PI),v=(m+=2*Math.PI*(m>=Math.PI?-1:m<-Math.PI?1:0))+g,b={x:Math.cos(m),y:Math.sin(m)},x={x:Math.cos(v),y:Math.sin(v)},y=m<=0&&v>=0||m<=2*Math.PI&&2*Math.PI<=v,k=m<=.5*Math.PI&&.5*Math.PI<=v||m<=2.5*Math.PI&&2.5*Math.PI<=v,w=m<=-Math.PI&&-Math.PI<=v||m<=Math.PI&&Math.PI<=v,M=m<=.5*-Math.PI&&.5*-Math.PI<=v||m<=1.5*Math.PI&&1.5*Math.PI<=v,_=f/100,C={x:w?-1:Math.min(b.x*(b.x<0?1:_),x.x*(x.x<0?1:_)),y:M?-1:Math.min(b.y*(b.y<0?1:_),x.y*(x.y<0?1:_))},S={x:y?1:Math.max(b.x*(b.x>0?1:_),x.x*(x.x>0?1:_)),y:k?1:Math.max(b.y*(b.y>0?1:_),x.y*(x.y>0?1:_))},P={width:.5*(S.x-C.x),height:.5*(S.y-C.y)};d=Math.min(s/P.width,l/P.height),u={x:-.5*(S.x+C.x),y:-.5*(S.y+C.y)}}for(e=0,i=c.length;e<i;++e)c[e]._options=n._resolveElementOptions(c[e],e);for(a.borderWidth=n.getMaxBorderWidth(),a.outerRadius=Math.max((d-a.borderWidth)/2,0),a.innerRadius=Math.max(f?a.outerRadius/100*f:0,0),a.radiusLength=(a.outerRadius-a.innerRadius)/(n._getVisibleDatasetWeightTotal()||1),a.offsetX=u.x*a.outerRadius,a.offsetY=u.y*a.outerRadius,h.total=n.calculateTotal(),n.outerRadius=a.outerRadius-a.radiusLength*n._getRingWeightOffset(n.index),n.innerRadius=Math.max(n.outerRadius-a.radiusLength*p,0),e=0,i=c.length;e<i;++e)n.updateElement(c[e],e,t)},updateElement:function(t,e,i){var n=this,a=n.chart,o=a.chartArea,r=a.options,s=r.animation,l=(o.left+o.right)/2,d=(o.top+o.bottom)/2,u=r.rotation,h=r.rotation,c=n.getDataset(),f=i&&s.animateRotate?0:t.hidden?0:n.calculateCircumference(c.data[e])*(r.circumference/(2*Math.PI)),g=i&&s.animateScale?0:n.innerRadius,p=i&&s.animateScale?0:n.outerRadius,m=t._options||{};ut.extend(t,{_datasetIndex:n.index,_index:e,_model:{backgroundColor:m.backgroundColor,borderColor:m.borderColor,borderWidth:m.borderWidth,borderAlign:m.borderAlign,x:l+a.offsetX,y:d+a.offsetY,startAngle:u,endAngle:h,circumference:f,outerRadius:p,innerRadius:g,label:ut.valueAtIndexOrDefault(c.label,e,a.data.labels[e])}});var v=t._model;i&&s.animateRotate||(v.startAngle=0===e?r.rotation:n.getMeta().data[e-1]._model.endAngle,v.endAngle=v.startAngle+v.circumference),t.pivot()},calculateTotal:function(){var t,e=this.getDataset(),i=this.getMeta(),n=0;return ut.each(i.data,function(i,a){t=e.data[a],isNaN(t)||i.hidden||(n+=Math.abs(t))}),n},calculateCircumference:function(t){var e=this.getMeta().total;return e>0&&!isNaN(t)?2*Math.PI*(Math.abs(t)/e):0},getMaxBorderWidth:function(t){var e,i,n,a,o,r,s,l,d=0,u=this.chart;if(!t)for(e=0,i=u.data.datasets.length;e<i;++e)if(u.isDatasetVisible(e)){t=(n=u.getDatasetMeta(e)).data,e!==this.index&&(o=n.controller);break}if(!t)return 0;for(e=0,i=t.length;e<i;++e)a=t[e],"inner"!==(r=o?o._resolveElementOptions(a,e):a._options).borderAlign&&(s=r.borderWidth,d=(l=r.hoverBorderWidth)>(d=s>d?s:d)?l:d);return d},setHoverStyle:function(t){var e=t._model,i=t._options,n=ut.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=Zt(i.hoverBackgroundColor,n(i.backgroundColor)),e.borderColor=Zt(i.hoverBorderColor,n(i.borderColor)),e.borderWidth=Zt(i.hoverBorderWidth,i.borderWidth)},_resolveElementOptions:function(t,e){var i,n,a,o=this.chart,r=this.getDataset(),s=t.custom||{},l=o.options.elements.arc,d={},u={chart:o,dataIndex:e,dataset:r,datasetIndex:this.index},h=["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"];for(i=0,n=h.length;i<n;++i)d[a=h[i]]=Gt([s[a],r[a],l[a]],u,e);return d},_getRingWeightOffset:function(t){for(var e=0,i=0;i<t;++i)this.chart.isDatasetVisible(i)&&(e+=this._getRingWeight(i));return e},_getRingWeight:function(t){return Math.max(Zt(this.chart.data.datasets[t].weight,1),0)},_getVisibleDatasetWeightTotal:function(){return this._getRingWeightOffset(this.chart.data.datasets.length)}});st._set("horizontalBar",{hover:{mode:"index",axis:"y"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{type:"category",position:"left",categoryPercentage:.8,barPercentage:.9,offset:!0,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{mode:"index",axis:"y"}});var Jt=Yt.extend({_getValueScaleId:function(){return this.getMeta().xAxisID},_getIndexScaleId:function(){return this.getMeta().yAxisID}}),Qt=ut.valueOrDefault,te=ut.options.resolve,ee=ut.canvas._isPointInArea;function ie(t,e){return Qt(t.showLine,e.showLines)}st._set("line",{showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}});var ne=Mt.extend({datasetElementType:Wt.Line,dataElementType:Wt.Point,update:function(t){var e,i,n=this,a=n.getMeta(),o=a.dataset,r=a.data||[],s=n.getScaleForId(a.yAxisID),l=n.getDataset(),d=ie(l,n.chart.options);for(d&&(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),o._scale=s,o._datasetIndex=n.index,o._children=r,o._model=n._resolveLineOptions(o),o.pivot()),e=0,i=r.length;e<i;++e)n.updateElement(r[e],e,t);for(d&&0!==o._model.tension&&n.updateBezierControlPoints(),e=0,i=r.length;e<i;++e)r[e].pivot()},updateElement:function(t,e,i){var n,a,o=this,r=o.getMeta(),s=t.custom||{},l=o.getDataset(),d=o.index,u=l.data[e],h=o.getScaleForId(r.yAxisID),c=o.getScaleForId(r.xAxisID),f=r.dataset._model,g=o._resolvePointOptions(t,e);n=c.getPixelForValue("object"==typeof u?u:NaN,e,d),a=i?h.getBasePixel():o.calculatePointY(u,e,d),t._xScale=c,t._yScale=h,t._options=g,t._datasetIndex=d,t._index=e,t._model={x:n,y:a,skip:s.skip||isNaN(n)||isNaN(a),radius:g.radius,pointStyle:g.pointStyle,rotation:g.rotation,backgroundColor:g.backgroundColor,borderColor:g.borderColor,borderWidth:g.borderWidth,tension:Qt(s.tension,f?f.tension:0),steppedLine:!!f&&f.steppedLine,hitRadius:g.hitRadius}},_resolvePointOptions:function(t,e){var i,n,a,o=this.chart,r=o.data.datasets[this.index],s=t.custom||{},l=o.options.elements.point,d={},u={chart:o,dataIndex:e,dataset:r,datasetIndex:this.index},h={backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},c=Object.keys(h);for(i=0,n=c.length;i<n;++i)d[a=c[i]]=te([s[a],r[h[a]],r[a],l[a]],u,e);return d},_resolveLineOptions:function(t){var e,i,n,a=this.chart,o=a.data.datasets[this.index],r=t.custom||{},s=a.options,l=s.elements.line,d={},u=["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill","cubicInterpolationMode"];for(e=0,i=u.length;e<i;++e)d[n=u[e]]=te([r[n],o[n],l[n]]);return d.spanGaps=Qt(o.spanGaps,s.spanGaps),d.tension=Qt(o.lineTension,l.tension),d.steppedLine=te([r.steppedLine,o.steppedLine,l.stepped]),d},calculatePointY:function(t,e,i){var n,a,o,r=this.chart,s=this.getMeta(),l=this.getScaleForId(s.yAxisID),d=0,u=0;if(l.options.stacked){for(n=0;n<i;n++)if(a=r.data.datasets[n],"line"===(o=r.getDatasetMeta(n)).type&&o.yAxisID===l.id&&r.isDatasetVisible(n)){var h=Number(l.getRightValue(a.data[e]));h<0?u+=h||0:d+=h||0}var c=Number(l.getRightValue(t));return c<0?l.getPixelForValue(u+c):l.getPixelForValue(d+c)}return l.getPixelForValue(t)},updateBezierControlPoints:function(){var t,e,i,n,a=this.chart,o=this.getMeta(),r=o.dataset._model,s=a.chartArea,l=o.data||[];function d(t,e,i){return Math.max(Math.min(t,i),e)}if(r.spanGaps&&(l=l.filter(function(t){return!t._model.skip})),"monotone"===r.cubicInterpolationMode)ut.splineCurveMonotone(l);else for(t=0,e=l.length;t<e;++t)i=l[t]._model,n=ut.splineCurve(ut.previousItem(l,t)._model,i,ut.nextItem(l,t)._model,r.tension),i.controlPointPreviousX=n.previous.x,i.controlPointPreviousY=n.previous.y,i.controlPointNextX=n.next.x,i.controlPointNextY=n.next.y;if(a.options.elements.line.capBezierPoints)for(t=0,e=l.length;t<e;++t)i=l[t]._model,ee(i,s)&&(t>0&&ee(l[t-1]._model,s)&&(i.controlPointPreviousX=d(i.controlPointPreviousX,s.left,s.right),i.controlPointPreviousY=d(i.controlPointPreviousY,s.top,s.bottom)),t<l.length-1&&ee(l[t+1]._model,s)&&(i.controlPointNextX=d(i.controlPointNextX,s.left,s.right),i.controlPointNextY=d(i.controlPointNextY,s.top,s.bottom)))},draw:function(){var t,e=this.chart,i=this.getMeta(),n=i.data||[],a=e.chartArea,o=n.length,r=0;for(ie(this.getDataset(),e.options)&&(t=(i.dataset._model.borderWidth||0)/2,ut.canvas.clipArea(e.ctx,{left:a.left,right:a.right,top:a.top-t,bottom:a.bottom+t}),i.dataset.draw(),ut.canvas.unclipArea(e.ctx));r<o;++r)n[r].draw(a)},setHoverStyle:function(t){var e=t._model,i=t._options,n=ut.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Qt(i.hoverBackgroundColor,n(i.backgroundColor)),e.borderColor=Qt(i.hoverBorderColor,n(i.borderColor)),e.borderWidth=Qt(i.hoverBorderWidth,i.borderWidth),e.radius=Qt(i.hoverRadius,i.radius)}}),ae=ut.options.resolve;st._set("polarArea",{scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');var i=t.data,n=i.datasets,a=i.labels;if(n.length)for(var o=0;o<n[0].data.length;++o)e.push('<li><span style="background-color:'+n[0].backgroundColor[o]+'"></span>'),a[o]&&e.push(a[o]),e.push("</li>");return e.push("</ul>"),e.join("")},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map(function(i,n){var a=t.getDatasetMeta(0),o=e.datasets[0],r=a.data[n].custom||{},s=t.options.elements.arc;return{text:i,fillStyle:ae([r.backgroundColor,o.backgroundColor,s.backgroundColor],void 0,n),strokeStyle:ae([r.borderColor,o.borderColor,s.borderColor],void 0,n),lineWidth:ae([r.borderWidth,o.borderWidth,s.borderWidth],void 0,n),hidden:isNaN(o.data[n])||a.data[n].hidden,index:n}}):[]}},onClick:function(t,e){var i,n,a,o=e.index,r=this.chart;for(i=0,n=(r.data.datasets||[]).length;i<n;++i)(a=r.getDatasetMeta(i)).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}}}});var oe=Mt.extend({dataElementType:Wt.Arc,linkScales:ut.noop,update:function(t){var e,i,n,a=this,o=a.getDataset(),r=a.getMeta(),s=a.chart.options.startAngle||0,l=a._starts=[],d=a._angles=[],u=r.data;for(a._updateRadius(),r.count=a.countVisibleElements(),e=0,i=o.data.length;e<i;e++)l[e]=s,n=a._computeAngle(e),d[e]=n,s+=n;for(e=0,i=u.length;e<i;++e)u[e]._options=a._resolveElementOptions(u[e],e),a.updateElement(u[e],e,t)},_updateRadius:function(){var t=this,e=t.chart,i=e.chartArea,n=e.options,a=Math.min(i.right-i.left,i.bottom-i.top);e.outerRadius=Math.max(a/2,0),e.innerRadius=Math.max(n.cutoutPercentage?e.outerRadius/100*n.cutoutPercentage:1,0),e.radiusLength=(e.outerRadius-e.innerRadius)/e.getVisibleDatasetCount(),t.outerRadius=e.outerRadius-e.radiusLength*t.index,t.innerRadius=t.outerRadius-e.radiusLength},updateElement:function(t,e,i){var n=this,a=n.chart,o=n.getDataset(),r=a.options,s=r.animation,l=a.scale,d=a.data.labels,u=l.xCenter,h=l.yCenter,c=r.startAngle,f=t.hidden?0:l.getDistanceFromCenterForValue(o.data[e]),g=n._starts[e],p=g+(t.hidden?0:n._angles[e]),m=s.animateScale?0:l.getDistanceFromCenterForValue(o.data[e]),v=t._options||{};ut.extend(t,{_datasetIndex:n.index,_index:e,_scale:l,_model:{backgroundColor:v.backgroundColor,borderColor:v.borderColor,borderWidth:v.borderWidth,borderAlign:v.borderAlign,x:u,y:h,innerRadius:0,outerRadius:i?m:f,startAngle:i&&s.animateRotate?c:g,endAngle:i&&s.animateRotate?c:p,label:ut.valueAtIndexOrDefault(d,e,d[e])}}),t.pivot()},countVisibleElements:function(){var t=this.getDataset(),e=this.getMeta(),i=0;return ut.each(e.data,function(e,n){isNaN(t.data[n])||e.hidden||i++}),i},setHoverStyle:function(t){var e=t._model,i=t._options,n=ut.getHoverColor,a=ut.valueOrDefault;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=a(i.hoverBackgroundColor,n(i.backgroundColor)),e.borderColor=a(i.hoverBorderColor,n(i.borderColor)),e.borderWidth=a(i.hoverBorderWidth,i.borderWidth)},_resolveElementOptions:function(t,e){var i,n,a,o=this.chart,r=this.getDataset(),s=t.custom||{},l=o.options.elements.arc,d={},u={chart:o,dataIndex:e,dataset:r,datasetIndex:this.index},h=["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"];for(i=0,n=h.length;i<n;++i)d[a=h[i]]=ae([s[a],r[a],l[a]],u,e);return d},_computeAngle:function(t){var e=this,i=this.getMeta().count,n=e.getDataset(),a=e.getMeta();if(isNaN(n.data[t])||a.data[t].hidden)return 0;var o={chart:e.chart,dataIndex:t,dataset:n,datasetIndex:e.index};return ae([e.chart.options.elements.arc.angle,2*Math.PI/i],o,t)}});st._set("pie",ut.clone(st.doughnut)),st._set("pie",{cutoutPercentage:0});var re=$t,se=ut.valueOrDefault,le=ut.options.resolve;st._set("radar",{scale:{type:"radialLinear"},elements:{line:{tension:0}}});var de=Mt.extend({datasetElementType:Wt.Line,dataElementType:Wt.Point,linkScales:ut.noop,update:function(t){var e,i,n=this,a=n.getMeta(),o=a.dataset,r=a.data||[],s=n.chart.scale,l=n.getDataset();for(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),o._scale=s,o._datasetIndex=n.index,o._children=r,o._loop=!0,o._model=n._resolveLineOptions(o),o.pivot(),e=0,i=r.length;e<i;++e)n.updateElement(r[e],e,t);for(n.updateBezierControlPoints(),e=0,i=r.length;e<i;++e)r[e].pivot()},updateElement:function(t,e,i){var n=this,a=t.custom||{},o=n.getDataset(),r=n.chart.scale,s=r.getPointPositionForValue(e,o.data[e]),l=n._resolvePointOptions(t,e),d=n.getMeta().dataset._model,u=i?r.xCenter:s.x,h=i?r.yCenter:s.y;t._scale=r,t._options=l,t._datasetIndex=n.index,t._index=e,t._model={x:u,y:h,skip:a.skip||isNaN(u)||isNaN(h),radius:l.radius,pointStyle:l.pointStyle,rotation:l.rotation,backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,tension:se(a.tension,d?d.tension:0),hitRadius:l.hitRadius}},_resolvePointOptions:function(t,e){var i,n,a,o=this.chart,r=o.data.datasets[this.index],s=t.custom||{},l=o.options.elements.point,d={},u={chart:o,dataIndex:e,dataset:r,datasetIndex:this.index},h={backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},c=Object.keys(h);for(i=0,n=c.length;i<n;++i)d[a=c[i]]=le([s[a],r[h[a]],r[a],l[a]],u,e);return d},_resolveLineOptions:function(t){var e,i,n,a=this.chart,o=a.data.datasets[this.index],r=t.custom||{},s=a.options.elements.line,l={},d=["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill"];for(e=0,i=d.length;e<i;++e)l[n=d[e]]=le([r[n],o[n],s[n]]);return l.tension=se(o.lineTension,s.tension),l},updateBezierControlPoints:function(){var t,e,i,n,a=this.getMeta(),o=this.chart.chartArea,r=a.data||[];function s(t,e,i){return Math.max(Math.min(t,i),e)}for(t=0,e=r.length;t<e;++t)i=r[t]._model,n=ut.splineCurve(ut.previousItem(r,t,!0)._model,i,ut.nextItem(r,t,!0)._model,i.tension),i.controlPointPreviousX=s(n.previous.x,o.left,o.right),i.controlPointPreviousY=s(n.previous.y,o.top,o.bottom),i.controlPointNextX=s(n.next.x,o.left,o.right),i.controlPointNextY=s(n.next.y,o.top,o.bottom)},setHoverStyle:function(t){var e=t._model,i=t._options,n=ut.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=se(i.hoverBackgroundColor,n(i.backgroundColor)),e.borderColor=se(i.hoverBorderColor,n(i.borderColor)),e.borderWidth=se(i.hoverBorderWidth,i.borderWidth),e.radius=se(i.hoverRadius,i.radius)}});st._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},showLines:!1,tooltips:{callbacks:{title:function(){return""},label:function(t){return"("+t.xLabel+", "+t.yLabel+")"}}}});var ue={bar:Yt,bubble:Kt,doughnut:$t,horizontalBar:Jt,line:ne,polarArea:oe,pie:re,radar:de,scatter:ne};function he(t,e){return t.native?{x:t.x,y:t.y}:ut.getRelativePosition(t,e)}function ce(t,e){var i,n,a,o,r;for(n=0,o=t.data.datasets.length;n<o;++n)if(t.isDatasetVisible(n))for(a=0,r=(i=t.getDatasetMeta(n)).data.length;a<r;++a){var s=i.data[a];s._view.skip||e(s)}}function fe(t,e){var i=[];return ce(t,function(t){t.inRange(e.x,e.y)&&i.push(t)}),i}function ge(t,e,i,n){var a=Number.POSITIVE_INFINITY,o=[];return ce(t,function(t){if(!i||t.inRange(e.x,e.y)){var r=t.getCenterPoint(),s=n(e,r);s<a?(o=[t],a=s):s===a&&o.push(t)}}),o}function pe(t){var e=-1!==t.indexOf("x"),i=-1!==t.indexOf("y");return function(t,n){var a=e?Math.abs(t.x-n.x):0,o=i?Math.abs(t.y-n.y):0;return Math.sqrt(Math.pow(a,2)+Math.pow(o,2))}}function me(t,e,i){var n=he(e,t);i.axis=i.axis||"x";var a=pe(i.axis),o=i.intersect?fe(t,n):ge(t,n,!1,a),r=[];return o.length?(t.data.datasets.forEach(function(e,i){if(t.isDatasetVisible(i)){var n=t.getDatasetMeta(i).data[o[0]._index];n&&!n._view.skip&&r.push(n)}}),r):[]}var ve={modes:{single:function(t,e){var i=he(e,t),n=[];return ce(t,function(t){if(t.inRange(i.x,i.y))return n.push(t),n}),n.slice(0,1)},label:me,index:me,dataset:function(t,e,i){var n=he(e,t);i.axis=i.axis||"xy";var a=pe(i.axis),o=i.intersect?fe(t,n):ge(t,n,!1,a);return o.length>0&&(o=t.getDatasetMeta(o[0]._datasetIndex).data),o},"x-axis":function(t,e){return me(t,e,{intersect:!1})},point:function(t,e){return fe(t,he(e,t))},nearest:function(t,e,i){var n=he(e,t);i.axis=i.axis||"xy";var a=pe(i.axis);return ge(t,n,i.intersect,a)},x:function(t,e,i){var n=he(e,t),a=[],o=!1;return ce(t,function(t){t.inXRange(n.x)&&a.push(t),t.inRange(n.x,n.y)&&(o=!0)}),i.intersect&&!o&&(a=[]),a},y:function(t,e,i){var n=he(e,t),a=[],o=!1;return ce(t,function(t){t.inYRange(n.y)&&a.push(t),t.inRange(n.x,n.y)&&(o=!0)}),i.intersect&&!o&&(a=[]),a}}};function be(t,e){return ut.where(t,function(t){return t.position===e})}function xe(t,e){t.forEach(function(t,e){return t._tmpIndex_=e,t}),t.sort(function(t,i){var n=e?i:t,a=e?t:i;return n.weight===a.weight?n._tmpIndex_-a._tmpIndex_:n.weight-a.weight}),t.forEach(function(t){delete t._tmpIndex_})}function ye(t,e){ut.each(t,function(t){e[t.position]+=t.isHorizontal()?t.height:t.width})}st._set("global",{layout:{padding:{top:0,right:0,bottom:0,left:0}}});var ke={defaults:{},addBox:function(t,e){t.boxes||(t.boxes=[]),e.fullWidth=e.fullWidth||!1,e.position=e.position||"top",e.weight=e.weight||0,t.boxes.push(e)},removeBox:function(t,e){var i=t.boxes?t.boxes.indexOf(e):-1;-1!==i&&t.boxes.splice(i,1)},configure:function(t,e,i){for(var n,a=["fullWidth","position","weight"],o=a.length,r=0;r<o;++r)n=a[r],i.hasOwnProperty(n)&&(e[n]=i[n])},update:function(t,e,i){if(t){var n=t.options.layout||{},a=ut.options.toPadding(n.padding),o=a.left,r=a.right,s=a.top,l=a.bottom,d=be(t.boxes,"left"),u=be(t.boxes,"right"),h=be(t.boxes,"top"),c=be(t.boxes,"bottom"),f=be(t.boxes,"chartArea");xe(d,!0),xe(u,!1),xe(h,!0),xe(c,!1);var g,p=d.concat(u),m=h.concat(c),v=p.concat(m),b=e-o-r,x=i-s-l,y=(e-b/2)/p.length,k=b,w=x,M={top:s,left:o,bottom:l,right:r},_=[];ut.each(v,function(t){var e,i=t.isHorizontal();i?(e=t.update(t.fullWidth?b:k,x/2),w-=e.height):(e=t.update(y,w),k-=e.width),_.push({horizontal:i,width:e.width,box:t})}),g=function(t){var e=0,i=0,n=0,a=0;return ut.each(t,function(t){if(t.getPadding){var o=t.getPadding();e=Math.max(e,o.top),i=Math.max(i,o.left),n=Math.max(n,o.bottom),a=Math.max(a,o.right)}}),{top:e,left:i,bottom:n,right:a}}(v),ut.each(p,T),ye(p,M),ut.each(m,T),ye(m,M),ut.each(p,function(t){var e=ut.findNextWhere(_,function(e){return e.box===t}),i={left:0,right:0,top:M.top,bottom:M.bottom};e&&t.update(e.width,w,i)}),ye(v,M={top:s,left:o,bottom:l,right:r});var C=Math.max(g.left-M.left,0);M.left+=C,M.right+=Math.max(g.right-M.right,0);var S=Math.max(g.top-M.top,0);M.top+=S,M.bottom+=Math.max(g.bottom-M.bottom,0);var P=i-M.top-M.bottom,I=e-M.left-M.right;I===k&&P===w||(ut.each(p,function(t){t.height=P}),ut.each(m,function(t){t.fullWidth||(t.width=I)}),w=P,k=I);var A=o+C,D=s+S;ut.each(d.concat(h),F),A+=k,D+=w,ut.each(u,F),ut.each(c,F),t.chartArea={left:M.left,top:M.top,right:M.left+k,bottom:M.top+w},ut.each(f,function(e){e.left=t.chartArea.left,e.top=t.chartArea.top,e.right=t.chartArea.right,e.bottom=t.chartArea.bottom,e.update(k,w)})}function T(t){var e=ut.findNextWhere(_,function(e){return e.box===t});if(e)if(e.horizontal){var i={left:Math.max(M.left,g.left),right:Math.max(M.right,g.right),top:0,bottom:0};t.update(t.fullWidth?b:k,x/2,i)}else t.update(e.width,w)}function F(t){t.isHorizontal()?(t.left=t.fullWidth?o:M.left,t.right=t.fullWidth?e-r:M.left+k,t.top=D,t.bottom=D+t.height,D=t.bottom):(t.left=A,t.right=A+t.width,t.top=M.top,t.bottom=M.top+w,A=t.right)}}};var we,Me=(we=Object.freeze({default:"@keyframes chartjs-render-animation{from{opacity:.99}to{opacity:1}}.chartjs-render-monitor{animation:chartjs-render-animation 1ms}.chartjs-size-monitor,.chartjs-size-monitor-expand,.chartjs-size-monitor-shrink{position:absolute;direction:ltr;left:0;top:0;right:0;bottom:0;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1}.chartjs-size-monitor-expand>div{position:absolute;width:1000000px;height:1000000px;left:0;top:0}.chartjs-size-monitor-shrink>div{position:absolute;width:200%;height:200%;left:0;top:0}"}))&&we.default||we,_e="$chartjs",Ce="chartjs-size-monitor",Se="chartjs-render-monitor",Pe="chartjs-render-animation",Ie=["animationstart","webkitAnimationStart"],Ae={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function De(t,e){var i=ut.getStyle(t,e),n=i&&i.match(/^(\d+)(\.\d+)?px$/);return n?Number(n[1]):void 0}var Te=!!function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("e",null,e)}catch(t){}return t}()&&{passive:!0};function Fe(t,e,i){t.addEventListener(e,i,Te)}function Le(t,e,i){t.removeEventListener(e,i,Te)}function Re(t,e,i,n,a){return{type:t,chart:e,native:a||null,x:void 0!==i?i:null,y:void 0!==n?n:null}}function Oe(t){var e=document.createElement("div");return e.className=t||"",e}function ze(t,e,i){var n,a,o,r,s=t[_e]||(t[_e]={}),l=s.resizer=function(t){var e=Oe(Ce),i=Oe(Ce+"-expand"),n=Oe(Ce+"-shrink");i.appendChild(Oe()),n.appendChild(Oe()),e.appendChild(i),e.appendChild(n),e._reset=function(){i.scrollLeft=1e6,i.scrollTop=1e6,n.scrollLeft=1e6,n.scrollTop=1e6};var a=function(){e._reset(),t()};return Fe(i,"scroll",a.bind(i,"expand")),Fe(n,"scroll",a.bind(n,"shrink")),e}((n=function(){if(s.resizer){var n=i.options.maintainAspectRatio&&t.parentNode,a=n?n.clientWidth:0;e(Re("resize",i)),n&&n.clientWidth<a&&i.canvas&&e(Re("resize",i))}},o=!1,r=[],function(){r=Array.prototype.slice.call(arguments),a=a||this,o||(o=!0,ut.requestAnimFrame.call(window,function(){o=!1,n.apply(a,r)}))}));!function(t,e){var i=t[_e]||(t[_e]={}),n=i.renderProxy=function(t){t.animationName===Pe&&e()};ut.each(Ie,function(e){Fe(t,e,n)}),i.reflow=!!t.offsetParent,t.classList.add(Se)}(t,function(){if(s.resizer){var e=t.parentNode;e&&e!==l.parentNode&&e.insertBefore(l,e.firstChild),l._reset()}})}function Be(t){var e=t[_e]||{},i=e.resizer;delete e.resizer,function(t){var e=t[_e]||{},i=e.renderProxy;i&&(ut.each(Ie,function(e){Le(t,e,i)}),delete e.renderProxy),t.classList.remove(Se)}(t),i&&i.parentNode&&i.parentNode.removeChild(i)}var Ne={disableCSSInjection:!1,_enabled:"undefined"!=typeof window&&"undefined"!=typeof document,_ensureLoaded:function(){var t,e,i;this._loaded||(this._loaded=!0,this.disableCSSInjection||(e=Me,i=(t=this)._style||document.createElement("style"),t._style||(t._style=i,e="/* Chart.js */\n"+e,i.setAttribute("type","text/css"),document.getElementsByTagName("head")[0].appendChild(i)),i.appendChild(document.createTextNode(e))))},acquireContext:function(t,e){"string"==typeof t?t=document.getElementById(t):t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas);var i=t&&t.getContext&&t.getContext("2d");return this._ensureLoaded(),i&&i.canvas===t?(function(t,e){var i=t.style,n=t.getAttribute("height"),a=t.getAttribute("width");if(t[_e]={initial:{height:n,width:a,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",null===a||""===a){var o=De(t,"width");void 0!==o&&(t.width=o)}if(null===n||""===n)if(""===t.style.height)t.height=t.width/(e.options.aspectRatio||2);else{var r=De(t,"height");void 0!==o&&(t.height=r)}}(t,e),i):null},releaseContext:function(t){var e=t.canvas;if(e[_e]){var i=e[_e].initial;["height","width"].forEach(function(t){var n=i[t];ut.isNullOrUndef(n)?e.removeAttribute(t):e.setAttribute(t,n)}),ut.each(i.style||{},function(t,i){e.style[i]=t}),e.width=e.width,delete e[_e]}},addEventListener:function(t,e,i){var n=t.canvas;if("resize"!==e){var a=i[_e]||(i[_e]={});Fe(n,e,(a.proxies||(a.proxies={}))[t.id+"_"+e]=function(e){i(function(t,e){var i=Ae[t.type]||t.type,n=ut.getRelativePosition(t,e);return Re(i,e,n.x,n.y,t)}(e,t))})}else ze(n,i,t)},removeEventListener:function(t,e,i){var n=t.canvas;if("resize"!==e){var a=((i[_e]||{}).proxies||{})[t.id+"_"+e];a&&Le(n,e,a)}else Be(n)}};ut.addEvent=Fe,ut.removeEvent=Le;var We=Ne._enabled?Ne:{acquireContext:function(t){return t&&t.canvas&&(t=t.canvas),t&&t.getContext("2d")||null}},Ve=ut.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},We);st._set("global",{plugins:{}});var Ee={_plugins:[],_cacheId:0,register:function(t){var e=this._plugins;[].concat(t).forEach(function(t){-1===e.indexOf(t)&&e.push(t)}),this._cacheId++},unregister:function(t){var e=this._plugins;[].concat(t).forEach(function(t){var i=e.indexOf(t);-1!==i&&e.splice(i,1)}),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(t,e,i){var n,a,o,r,s,l=this.descriptors(t),d=l.length;for(n=0;n<d;++n)if("function"==typeof(s=(o=(a=l[n]).plugin)[e])&&((r=[t].concat(i||[])).push(a.options),!1===s.apply(o,r)))return!1;return!0},descriptors:function(t){var e=t.$plugins||(t.$plugins={});if(e.id===this._cacheId)return e.descriptors;var i=[],n=[],a=t&&t.config||{},o=a.options&&a.options.plugins||{};return this._plugins.concat(a.plugins||[]).forEach(function(t){if(-1===i.indexOf(t)){var e=t.id,a=o[e];!1!==a&&(!0===a&&(a=ut.clone(st.global.plugins[e])),i.push(t),n.push({plugin:t,options:a||{}}))}}),e.descriptors=n,e.id=this._cacheId,n},_invalidate:function(t){delete t.$plugins}},He={constructors:{},defaults:{},registerScaleType:function(t,e,i){this.constructors[t]=e,this.defaults[t]=ut.clone(i)},getScaleConstructor:function(t){return this.constructors.hasOwnProperty(t)?this.constructors[t]:void 0},getScaleDefaults:function(t){return this.defaults.hasOwnProperty(t)?ut.merge({},[st.scale,this.defaults[t]]):{}},updateScaleDefaults:function(t,e){this.defaults.hasOwnProperty(t)&&(this.defaults[t]=ut.extend(this.defaults[t],e))},addScalesToLayout:function(t){ut.each(t.scales,function(e){e.fullWidth=e.options.fullWidth,e.position=e.options.position,e.weight=e.options.weight,ke.addBox(t,e)})}},je=ut.valueOrDefault;st._set("global",{tooltips:{enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:ut.noop,title:function(t,e){var i="",n=e.labels,a=n?n.length:0;if(t.length>0){var o=t[0];o.label?i=o.label:o.xLabel?i=o.xLabel:a>0&&o.index<a&&(i=n[o.index])}return i},afterTitle:ut.noop,beforeBody:ut.noop,beforeLabel:ut.noop,label:function(t,e){var i=e.datasets[t.datasetIndex].label||"";return i&&(i+=": "),ut.isNullOrUndef(t.value)?i+=t.yLabel:i+=t.value,i},labelColor:function(t,e){var i=e.getDatasetMeta(t.datasetIndex).data[t.index]._view;return{borderColor:i.borderColor,backgroundColor:i.backgroundColor}},labelTextColor:function(){return this._options.bodyFontColor},afterLabel:ut.noop,afterBody:ut.noop,beforeFooter:ut.noop,footer:ut.noop,afterFooter:ut.noop}}});var qe={average:function(t){if(!t.length)return!1;var e,i,n=0,a=0,o=0;for(e=0,i=t.length;e<i;++e){var r=t[e];if(r&&r.hasValue()){var s=r.tooltipPosition();n+=s.x,a+=s.y,++o}}return{x:n/o,y:a/o}},nearest:function(t,e){var i,n,a,o=e.x,r=e.y,s=Number.POSITIVE_INFINITY;for(i=0,n=t.length;i<n;++i){var l=t[i];if(l&&l.hasValue()){var d=l.getCenterPoint(),u=ut.distanceBetweenPoints(e,d);u<s&&(s=u,a=l)}}if(a){var h=a.tooltipPosition();o=h.x,r=h.y}return{x:o,y:r}}};function Ye(t,e){return e&&(ut.isArray(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function Ue(t){return("string"==typeof t||t instanceof String)&&t.indexOf("\n")>-1?t.split("\n"):t}function Xe(t){var e=st.global;return{xPadding:t.xPadding,yPadding:t.yPadding,xAlign:t.xAlign,yAlign:t.yAlign,bodyFontColor:t.bodyFontColor,_bodyFontFamily:je(t.bodyFontFamily,e.defaultFontFamily),_bodyFontStyle:je(t.bodyFontStyle,e.defaultFontStyle),_bodyAlign:t.bodyAlign,bodyFontSize:je(t.bodyFontSize,e.defaultFontSize),bodySpacing:t.bodySpacing,titleFontColor:t.titleFontColor,_titleFontFamily:je(t.titleFontFamily,e.defaultFontFamily),_titleFontStyle:je(t.titleFontStyle,e.defaultFontStyle),titleFontSize:je(t.titleFontSize,e.defaultFontSize),_titleAlign:t.titleAlign,titleSpacing:t.titleSpacing,titleMarginBottom:t.titleMarginBottom,footerFontColor:t.footerFontColor,_footerFontFamily:je(t.footerFontFamily,e.defaultFontFamily),_footerFontStyle:je(t.footerFontStyle,e.defaultFontStyle),footerFontSize:je(t.footerFontSize,e.defaultFontSize),_footerAlign:t.footerAlign,footerSpacing:t.footerSpacing,footerMarginTop:t.footerMarginTop,caretSize:t.caretSize,cornerRadius:t.cornerRadius,backgroundColor:t.backgroundColor,opacity:0,legendColorBackground:t.multiKeyBackground,displayColors:t.displayColors,borderColor:t.borderColor,borderWidth:t.borderWidth}}function Ke(t,e){return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-t.xPadding:t.x+t.xPadding}function Ge(t){return Ye([],Ue(t))}var Ze=pt.extend({initialize:function(){this._model=Xe(this._options),this._lastActive=[]},getTitle:function(){var t=this._options.callbacks,e=t.beforeTitle.apply(this,arguments),i=t.title.apply(this,arguments),n=t.afterTitle.apply(this,arguments),a=[];return a=Ye(a,Ue(e)),a=Ye(a,Ue(i)),a=Ye(a,Ue(n))},getBeforeBody:function(){return Ge(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(t,e){var i=this,n=i._options.callbacks,a=[];return ut.each(t,function(t){var o={before:[],lines:[],after:[]};Ye(o.before,Ue(n.beforeLabel.call(i,t,e))),Ye(o.lines,n.label.call(i,t,e)),Ye(o.after,Ue(n.afterLabel.call(i,t,e))),a.push(o)}),a},getAfterBody:function(){return Ge(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var t=this._options.callbacks,e=t.beforeFooter.apply(this,arguments),i=t.footer.apply(this,arguments),n=t.afterFooter.apply(this,arguments),a=[];return a=Ye(a,Ue(e)),a=Ye(a,Ue(i)),a=Ye(a,Ue(n))},update:function(t){var e,i,n,a,o,r,s,l,d,u,h=this,c=h._options,f=h._model,g=h._model=Xe(c),p=h._active,m=h._data,v={xAlign:f.xAlign,yAlign:f.yAlign},b={x:f.x,y:f.y},x={width:f.width,height:f.height},y={x:f.caretX,y:f.caretY};if(p.length){g.opacity=1;var k=[],w=[];y=qe[c.position].call(h,p,h._eventPosition);var M=[];for(e=0,i=p.length;e<i;++e)M.push((n=p[e],a=void 0,o=void 0,r=void 0,s=void 0,l=void 0,d=void 0,u=void 0,a=n._xScale,o=n._yScale||n._scale,r=n._index,s=n._datasetIndex,l=n._chart.getDatasetMeta(s).controller,d=l._getIndexScale(),u=l._getValueScale(),{xLabel:a?a.getLabelForIndex(r,s):"",yLabel:o?o.getLabelForIndex(r,s):"",label:d?""+d.getLabelForIndex(r,s):"",value:u?""+u.getLabelForIndex(r,s):"",index:r,datasetIndex:s,x:n._model.x,y:n._model.y}));c.filter&&(M=M.filter(function(t){return c.filter(t,m)})),c.itemSort&&(M=M.sort(function(t,e){return c.itemSort(t,e,m)})),ut.each(M,function(t){k.push(c.callbacks.labelColor.call(h,t,h._chart)),w.push(c.callbacks.labelTextColor.call(h,t,h._chart))}),g.title=h.getTitle(M,m),g.beforeBody=h.getBeforeBody(M,m),g.body=h.getBody(M,m),g.afterBody=h.getAfterBody(M,m),g.footer=h.getFooter(M,m),g.x=y.x,g.y=y.y,g.caretPadding=c.caretPadding,g.labelColors=k,g.labelTextColors=w,g.dataPoints=M,x=function(t,e){var i=t._chart.ctx,n=2*e.yPadding,a=0,o=e.body,r=o.reduce(function(t,e){return t+e.before.length+e.lines.length+e.after.length},0);r+=e.beforeBody.length+e.afterBody.length;var s=e.title.length,l=e.footer.length,d=e.titleFontSize,u=e.bodyFontSize,h=e.footerFontSize;n+=s*d,n+=s?(s-1)*e.titleSpacing:0,n+=s?e.titleMarginBottom:0,n+=r*u,n+=r?(r-1)*e.bodySpacing:0,n+=l?e.footerMarginTop:0,n+=l*h,n+=l?(l-1)*e.footerSpacing:0;var c=0,f=function(t){a=Math.max(a,i.measureText(t).width+c)};return i.font=ut.fontString(d,e._titleFontStyle,e._titleFontFamily),ut.each(e.title,f),i.font=ut.fontString(u,e._bodyFontStyle,e._bodyFontFamily),ut.each(e.beforeBody.concat(e.afterBody),f),c=e.displayColors?u+2:0,ut.each(o,function(t){ut.each(t.before,f),ut.each(t.lines,f),ut.each(t.after,f)}),c=0,i.font=ut.fontString(h,e._footerFontStyle,e._footerFontFamily),ut.each(e.footer,f),{width:a+=2*e.xPadding,height:n}}(this,g),b=function(t,e,i,n){var a=t.x,o=t.y,r=t.caretSize,s=t.caretPadding,l=t.cornerRadius,d=i.xAlign,u=i.yAlign,h=r+s,c=l+s;return"right"===d?a-=e.width:"center"===d&&((a-=e.width/2)+e.width>n.width&&(a=n.width-e.width),a<0&&(a=0)),"top"===u?o+=h:o-="bottom"===u?e.height+h:e.height/2,"center"===u?"left"===d?a+=h:"right"===d&&(a-=h):"left"===d?a-=c:"right"===d&&(a+=c),{x:a,y:o}}(g,x,v=function(t,e){var i,n,a,o,r,s=t._model,l=t._chart,d=t._chart.chartArea,u="center",h="center";s.y<e.height?h="top":s.y>l.height-e.height&&(h="bottom");var c=(d.left+d.right)/2,f=(d.top+d.bottom)/2;"center"===h?(i=function(t){return t<=c},n=function(t){return t>c}):(i=function(t){return t<=e.width/2},n=function(t){return t>=l.width-e.width/2}),a=function(t){return t+e.width+s.caretSize+s.caretPadding>l.width},o=function(t){return t-e.width-s.caretSize-s.caretPadding<0},r=function(t){return t<=f?"top":"bottom"},i(s.x)?(u="left",a(s.x)&&(u="center",h=r(s.y))):n(s.x)&&(u="right",o(s.x)&&(u="center",h=r(s.y)));var g=t._options;return{xAlign:g.xAlign?g.xAlign:u,yAlign:g.yAlign?g.yAlign:h}}(this,x),h._chart)}else g.opacity=0;return g.xAlign=v.xAlign,g.yAlign=v.yAlign,g.x=b.x,g.y=b.y,g.width=x.width,g.height=x.height,g.caretX=y.x,g.caretY=y.y,h._model=g,t&&c.custom&&c.custom.call(h,g),h},drawCaret:function(t,e){var i=this._chart.ctx,n=this._view,a=this.getCaretPosition(t,e,n);i.lineTo(a.x1,a.y1),i.lineTo(a.x2,a.y2),i.lineTo(a.x3,a.y3)},getCaretPosition:function(t,e,i){var n,a,o,r,s,l,d=i.caretSize,u=i.cornerRadius,h=i.xAlign,c=i.yAlign,f=t.x,g=t.y,p=e.width,m=e.height;if("center"===c)s=g+m/2,"left"===h?(a=(n=f)-d,o=n,r=s+d,l=s-d):(a=(n=f+p)+d,o=n,r=s-d,l=s+d);else if("left"===h?(n=(a=f+u+d)-d,o=a+d):"right"===h?(n=(a=f+p-u-d)-d,o=a+d):(n=(a=i.caretX)-d,o=a+d),"top"===c)s=(r=g)-d,l=r;else{s=(r=g+m)+d,l=r;var v=o;o=n,n=v}return{x1:n,x2:a,x3:o,y1:r,y2:s,y3:l}},drawTitle:function(t,e,i){var n=e.title;if(n.length){t.x=Ke(e,e._titleAlign),i.textAlign=e._titleAlign,i.textBaseline="top";var a,o,r=e.titleFontSize,s=e.titleSpacing;for(i.fillStyle=e.titleFontColor,i.font=ut.fontString(r,e._titleFontStyle,e._titleFontFamily),a=0,o=n.length;a<o;++a)i.fillText(n[a],t.x,t.y),t.y+=r+s,a+1===n.length&&(t.y+=e.titleMarginBottom-s)}},drawBody:function(t,e,i){var n,a=e.bodyFontSize,o=e.bodySpacing,r=e._bodyAlign,s=e.body,l=e.displayColors,d=e.labelColors,u=0,h=l?Ke(e,"left"):0;i.textAlign=r,i.textBaseline="top",i.font=ut.fontString(a,e._bodyFontStyle,e._bodyFontFamily),t.x=Ke(e,r);var c=function(e){i.fillText(e,t.x+u,t.y),t.y+=a+o};i.fillStyle=e.bodyFontColor,ut.each(e.beforeBody,c),u=l&&"right"!==r?"center"===r?a/2+1:a+2:0,ut.each(s,function(o,r){n=e.labelTextColors[r],i.fillStyle=n,ut.each(o.before,c),ut.each(o.lines,function(o){l&&(i.fillStyle=e.legendColorBackground,i.fillRect(h,t.y,a,a),i.lineWidth=1,i.strokeStyle=d[r].borderColor,i.strokeRect(h,t.y,a,a),i.fillStyle=d[r].backgroundColor,i.fillRect(h+1,t.y+1,a-2,a-2),i.fillStyle=n),c(o)}),ut.each(o.after,c)}),u=0,ut.each(e.afterBody,c),t.y-=o},drawFooter:function(t,e,i){var n=e.footer;n.length&&(t.x=Ke(e,e._footerAlign),t.y+=e.footerMarginTop,i.textAlign=e._footerAlign,i.textBaseline="top",i.fillStyle=e.footerFontColor,i.font=ut.fontString(e.footerFontSize,e._footerFontStyle,e._footerFontFamily),ut.each(n,function(n){i.fillText(n,t.x,t.y),t.y+=e.footerFontSize+e.footerSpacing}))},drawBackground:function(t,e,i,n){i.fillStyle=e.backgroundColor,i.strokeStyle=e.borderColor,i.lineWidth=e.borderWidth;var a=e.xAlign,o=e.yAlign,r=t.x,s=t.y,l=n.width,d=n.height,u=e.cornerRadius;i.beginPath(),i.moveTo(r+u,s),"top"===o&&this.drawCaret(t,n),i.lineTo(r+l-u,s),i.quadraticCurveTo(r+l,s,r+l,s+u),"center"===o&&"right"===a&&this.drawCaret(t,n),i.lineTo(r+l,s+d-u),i.quadraticCurveTo(r+l,s+d,r+l-u,s+d),"bottom"===o&&this.drawCaret(t,n),i.lineTo(r+u,s+d),i.quadraticCurveTo(r,s+d,r,s+d-u),"center"===o&&"left"===a&&this.drawCaret(t,n),i.lineTo(r,s+u),i.quadraticCurveTo(r,s,r+u,s),i.closePath(),i.fill(),e.borderWidth>0&&i.stroke()},draw:function(){var t=this._chart.ctx,e=this._view;if(0!==e.opacity){var i={width:e.width,height:e.height},n={x:e.x,y:e.y},a=Math.abs(e.opacity<.001)?0:e.opacity,o=e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length;this._options.enabled&&o&&(t.save(),t.globalAlpha=a,this.drawBackground(n,e,t,i),n.y+=e.yPadding,this.drawTitle(n,e,t),this.drawBody(n,e,t),this.drawFooter(n,e,t),t.restore())}},handleEvent:function(t){var e,i=this,n=i._options;return i._lastActive=i._lastActive||[],"mouseout"===t.type?i._active=[]:i._active=i._chart.getElementsAtEventForMode(t,n.mode,n),(e=!ut.arrayEquals(i._active,i._lastActive))&&(i._lastActive=i._active,(n.enabled||n.custom)&&(i._eventPosition={x:t.x,y:t.y},i.update(!0),i.pivot())),e}}),$e=qe,Je=Ze;Je.positioners=$e;var Qe=ut.valueOrDefault;function ti(){return ut.merge({},[].slice.call(arguments),{merger:function(t,e,i,n){if("xAxes"===t||"yAxes"===t){var a,o,r,s=i[t].length;for(e[t]||(e[t]=[]),a=0;a<s;++a)r=i[t][a],o=Qe(r.type,"xAxes"===t?"category":"linear"),a>=e[t].length&&e[t].push({}),!e[t][a].type||r.type&&r.type!==e[t][a].type?ut.merge(e[t][a],[He.getScaleDefaults(o),r]):ut.merge(e[t][a],r)}else ut._merger(t,e,i,n)}})}function ei(){return ut.merge({},[].slice.call(arguments),{merger:function(t,e,i,n){var a=e[t]||{},o=i[t];"scales"===t?e[t]=ti(a,o):"scale"===t?e[t]=ut.merge(a,[He.getScaleDefaults(o.type),o]):ut._merger(t,e,i,n)}})}function ii(t){return"top"===t||"bottom"===t}st._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var ni=function(t,e){return this.construct(t,e),this};ut.extend(ni.prototype,{construct:function(t,e){var i=this;e=function(t){var e=(t=t||{}).data=t.data||{};return e.datasets=e.datasets||[],e.labels=e.labels||[],t.options=ei(st.global,st[t.type],t.options||{}),t}(e);var n=Ve.acquireContext(t,e),a=n&&n.canvas,o=a&&a.height,r=a&&a.width;i.id=ut.uid(),i.ctx=n,i.canvas=a,i.config=e,i.width=r,i.height=o,i.aspectRatio=o?r/o:null,i.options=e.options,i._bufferedRender=!1,i.chart=i,i.controller=i,ni.instances[i.id]=i,Object.defineProperty(i,"data",{get:function(){return i.config.data},set:function(t){i.config.data=t}}),n&&a?(i.initialize(),i.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var t=this;return Ee.notify(t,"beforeInit"),ut.retinaScale(t,t.options.devicePixelRatio),t.bindEvents(),t.options.responsive&&t.resize(!0),t.ensureScalesHaveIDs(),t.buildOrUpdateScales(),t.initToolTip(),Ee.notify(t,"afterInit"),t},clear:function(){return ut.canvas.clear(this),this},stop:function(){return bt.cancelAnimation(this),this},resize:function(t){var e=this,i=e.options,n=e.canvas,a=i.maintainAspectRatio&&e.aspectRatio||null,o=Math.max(0,Math.floor(ut.getMaximumWidth(n))),r=Math.max(0,Math.floor(a?o/a:ut.getMaximumHeight(n)));if((e.width!==o||e.height!==r)&&(n.width=e.width=o,n.height=e.height=r,n.style.width=o+"px",n.style.height=r+"px",ut.retinaScale(e,i.devicePixelRatio),!t)){var s={width:o,height:r};Ee.notify(e,"resize",[s]),i.onResize&&i.onResize(e,s),e.stop(),e.update({duration:i.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var t=this.options,e=t.scales||{},i=t.scale;ut.each(e.xAxes,function(t,e){t.id=t.id||"x-axis-"+e}),ut.each(e.yAxes,function(t,e){t.id=t.id||"y-axis-"+e}),i&&(i.id=i.id||"scale")},buildOrUpdateScales:function(){var t=this,e=t.options,i=t.scales||{},n=[],a=Object.keys(i).reduce(function(t,e){return t[e]=!1,t},{});e.scales&&(n=n.concat((e.scales.xAxes||[]).map(function(t){return{options:t,dtype:"category",dposition:"bottom"}}),(e.scales.yAxes||[]).map(function(t){return{options:t,dtype:"linear",dposition:"left"}}))),e.scale&&n.push({options:e.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),ut.each(n,function(e){var n=e.options,o=n.id,r=Qe(n.type,e.dtype);ii(n.position)!==ii(e.dposition)&&(n.position=e.dposition),a[o]=!0;var s=null;if(o in i&&i[o].type===r)(s=i[o]).options=n,s.ctx=t.ctx,s.chart=t;else{var l=He.getScaleConstructor(r);if(!l)return;s=new l({id:o,type:r,options:n,ctx:t.ctx,chart:t}),i[s.id]=s}s.mergeTicksOptions(),e.isDefault&&(t.scale=s)}),ut.each(a,function(t,e){t||delete i[e]}),t.scales=i,He.addScalesToLayout(this)},buildOrUpdateControllers:function(){var t=this,e=[];return ut.each(t.data.datasets,function(i,n){var a=t.getDatasetMeta(n),o=i.type||t.config.type;if(a.type&&a.type!==o&&(t.destroyDatasetMeta(n),a=t.getDatasetMeta(n)),a.type=o,a.controller)a.controller.updateIndex(n),a.controller.linkScales();else{var r=ue[a.type];if(void 0===r)throw new Error('"'+a.type+'" is not a chart type.');a.controller=new r(t,n),e.push(a.controller)}},t),e},resetElements:function(){var t=this;ut.each(t.data.datasets,function(e,i){t.getDatasetMeta(i).controller.reset()},t)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(t){var e,i,n=this;if(t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]}),i=(e=n).options,ut.each(e.scales,function(t){ke.removeBox(e,t)}),i=ei(st.global,st[e.config.type],i),e.options=e.config.options=i,e.ensureScalesHaveIDs(),e.buildOrUpdateScales(),e.tooltip._options=i.tooltips,e.tooltip.initialize(),Ee._invalidate(n),!1!==Ee.notify(n,"beforeUpdate")){n.tooltip._data=n.data;var a=n.buildOrUpdateControllers();ut.each(n.data.datasets,function(t,e){n.getDatasetMeta(e).controller.buildOrUpdateElements()},n),n.updateLayout(),n.options.animation&&n.options.animation.duration&&ut.each(a,function(t){t.reset()}),n.updateDatasets(),n.tooltip.initialize(),n.lastActive=[],Ee.notify(n,"afterUpdate"),n._bufferedRender?n._bufferedRequest={duration:t.duration,easing:t.easing,lazy:t.lazy}:n.render(t)}},updateLayout:function(){!1!==Ee.notify(this,"beforeLayout")&&(ke.update(this,this.width,this.height),Ee.notify(this,"afterScaleUpdate"),Ee.notify(this,"afterLayout"))},updateDatasets:function(){if(!1!==Ee.notify(this,"beforeDatasetsUpdate")){for(var t=0,e=this.data.datasets.length;t<e;++t)this.updateDataset(t);Ee.notify(this,"afterDatasetsUpdate")}},updateDataset:function(t){var e=this.getDatasetMeta(t),i={meta:e,index:t};!1!==Ee.notify(this,"beforeDatasetUpdate",[i])&&(e.controller.update(),Ee.notify(this,"afterDatasetUpdate",[i]))},render:function(t){var e=this;t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]});var i=e.options.animation,n=Qe(t.duration,i&&i.duration),a=t.lazy;if(!1!==Ee.notify(e,"beforeRender")){var o=function(t){Ee.notify(e,"afterRender"),ut.callback(i&&i.onComplete,[t],e)};if(i&&n){var r=new vt({numSteps:n/16.66,easing:t.easing||i.easing,render:function(t,e){var i=ut.easing.effects[e.easing],n=e.currentStep,a=n/e.numSteps;t.draw(i(a),a,n)},onAnimationProgress:i.onProgress,onAnimationComplete:o});bt.addAnimation(e,r,n,a)}else e.draw(),o(new vt({numSteps:0,chart:e}));return e}},draw:function(t){var e=this;e.clear(),ut.isNullOrUndef(t)&&(t=1),e.transition(t),e.width<=0||e.height<=0||!1!==Ee.notify(e,"beforeDraw",[t])&&(ut.each(e.boxes,function(t){t.draw(e.chartArea)},e),e.drawDatasets(t),e._drawTooltip(t),Ee.notify(e,"afterDraw",[t]))},transition:function(t){for(var e=0,i=(this.data.datasets||[]).length;e<i;++e)this.isDatasetVisible(e)&&this.getDatasetMeta(e).controller.transition(t);this.tooltip.transition(t)},drawDatasets:function(t){var e=this;if(!1!==Ee.notify(e,"beforeDatasetsDraw",[t])){for(var i=(e.data.datasets||[]).length-1;i>=0;--i)e.isDatasetVisible(i)&&e.drawDataset(i,t);Ee.notify(e,"afterDatasetsDraw",[t])}},drawDataset:function(t,e){var i=this.getDatasetMeta(t),n={meta:i,index:t,easingValue:e};!1!==Ee.notify(this,"beforeDatasetDraw",[n])&&(i.controller.draw(e),Ee.notify(this,"afterDatasetDraw",[n]))},_drawTooltip:function(t){var e=this.tooltip,i={tooltip:e,easingValue:t};!1!==Ee.notify(this,"beforeTooltipDraw",[i])&&(e.draw(),Ee.notify(this,"afterTooltipDraw",[i]))},getElementAtEvent:function(t){return ve.modes.single(this,t)},getElementsAtEvent:function(t){return ve.modes.label(this,t,{intersect:!0})},getElementsAtXAxis:function(t){return ve.modes["x-axis"](this,t,{intersect:!0})},getElementsAtEventForMode:function(t,e,i){var n=ve.modes[e];return"function"==typeof n?n(this,t,i):[]},getDatasetAtEvent:function(t){return ve.modes.dataset(this,t,{intersect:!0})},getDatasetMeta:function(t){var e=this.data.datasets[t];e._meta||(e._meta={});var i=e._meta[this.id];return i||(i=e._meta[this.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null}),i},getVisibleDatasetCount:function(){for(var t=0,e=0,i=this.data.datasets.length;e<i;++e)this.isDatasetVisible(e)&&t++;return t},isDatasetVisible:function(t){var e=this.getDatasetMeta(t);return"boolean"==typeof e.hidden?!e.hidden:!this.data.datasets[t].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroyDatasetMeta:function(t){var e=this.id,i=this.data.datasets[t],n=i._meta&&i._meta[e];n&&(n.controller.destroy(),delete i._meta[e])},destroy:function(){var t,e,i=this,n=i.canvas;for(i.stop(),t=0,e=i.data.datasets.length;t<e;++t)i.destroyDatasetMeta(t);n&&(i.unbindEvents(),ut.canvas.clear(i),Ve.releaseContext(i.ctx),i.canvas=null,i.ctx=null),Ee.notify(i,"destroy"),delete ni.instances[i.id]},toBase64Image:function(){return this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var t=this;t.tooltip=new Je({_chart:t,_chartInstance:t,_data:t.data,_options:t.options.tooltips},t)},bindEvents:function(){var t=this,e=t._listeners={},i=function(){t.eventHandler.apply(t,arguments)};ut.each(t.options.events,function(n){Ve.addEventListener(t,n,i),e[n]=i}),t.options.responsive&&(i=function(){t.resize()},Ve.addEventListener(t,"resize",i),e.resize=i)},unbindEvents:function(){var t=this,e=t._listeners;e&&(delete t._listeners,ut.each(e,function(e,i){Ve.removeEventListener(t,i,e)}))},updateHoverStyle:function(t,e,i){var n,a,o,r=i?"setHoverStyle":"removeHoverStyle";for(a=0,o=t.length;a<o;++a)(n=t[a])&&this.getDatasetMeta(n._datasetIndex).controller[r](n)},eventHandler:function(t){var e=this,i=e.tooltip;if(!1!==Ee.notify(e,"beforeEvent",[t])){e._bufferedRender=!0,e._bufferedRequest=null;var n=e.handleEvent(t);i&&(n=i._start?i.handleEvent(t):n|i.handleEvent(t)),Ee.notify(e,"afterEvent",[t]);var a=e._bufferedRequest;return a?e.render(a):n&&!e.animating&&(e.stop(),e.render({duration:e.options.hover.animationDuration,lazy:!0})),e._bufferedRender=!1,e._bufferedRequest=null,e}},handleEvent:function(t){var e,i=this,n=i.options||{},a=n.hover;return i.lastActive=i.lastActive||[],"mouseout"===t.type?i.active=[]:i.active=i.getElementsAtEventForMode(t,a.mode,a),ut.callback(n.onHover||n.hover.onHover,[t.native,i.active],i),"mouseup"!==t.type&&"click"!==t.type||n.onClick&&n.onClick.call(i,t.native,i.active),i.lastActive.length&&i.updateHoverStyle(i.lastActive,a.mode,!1),i.active.length&&a.mode&&i.updateHoverStyle(i.active,a.mode,!0),e=!ut.arrayEquals(i.active,i.lastActive),i.lastActive=i.active,e}}),ni.instances={};var ai=ni;ni.Controller=ni,ni.types={},ut.configMerge=ei,ut.scaleMerge=ti;function oi(){throw new Error("This method is not implemented: either no adapter can be found or an incomplete integration was provided.")}function ri(t){this.options=t||{}}ut.extend(ri.prototype,{formats:oi,parse:oi,format:oi,add:oi,diff:oi,startOf:oi,endOf:oi,_create:function(t){return t}}),ri.override=function(t){ut.extend(ri.prototype,t)};var si={_date:ri},li={formatters:{values:function(t){return ut.isArray(t)?t:""+t},linear:function(t,e,i){var n=i.length>3?i[2]-i[1]:i[1]-i[0];Math.abs(n)>1&&t!==Math.floor(t)&&(n=t-Math.floor(t));var a=ut.log10(Math.abs(n)),o="";if(0!==t)if(Math.max(Math.abs(i[0]),Math.abs(i[i.length-1]))<1e-4){var r=ut.log10(Math.abs(t));o=t.toExponential(Math.floor(r)-Math.floor(a))}else{var s=-1*Math.floor(a);s=Math.max(Math.min(s,20),0),o=t.toFixed(s)}else o="0";return o},logarithmic:function(t,e,i){var n=t/Math.pow(10,Math.floor(ut.log10(t)));return 0===t?"0":1===n||2===n||5===n||0===e||e===i.length-1?t.toExponential():""}}},di=ut.valueOrDefault,ui=ut.valueAtIndexOrDefault;function hi(t){var e,i,n=[];for(e=0,i=t.length;e<i;++e)n.push(t[e].label);return n}function ci(t,e,i){return ut.isArray(e)?ut.longestText(t,i,e):t.measureText(e).width}st._set("scale",{display:!0,position:"left",offset:!1,gridLines:{display:!0,color:"rgba(0, 0, 0, 0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{display:!1,labelString:"",padding:{top:4,bottom:4}},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:li.formatters.values,minor:{},major:{}}});var fi=pt.extend({getPadding:function(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}},getTicks:function(){return this._ticks},mergeTicksOptions:function(){var t=this.options.ticks;for(var e in!1===t.minor&&(t.minor={display:!1}),!1===t.major&&(t.major={display:!1}),t)"major"!==e&&"minor"!==e&&(void 0===t.minor[e]&&(t.minor[e]=t[e]),void 0===t.major[e]&&(t.major[e]=t[e]))},beforeUpdate:function(){ut.callback(this.options.beforeUpdate,[this])},update:function(t,e,i){var n,a,o,r,s,l,d=this;for(d.beforeUpdate(),d.maxWidth=t,d.maxHeight=e,d.margins=ut.extend({left:0,right:0,top:0,bottom:0},i),d._maxLabelLines=0,d.longestLabelWidth=0,d.longestTextCache=d.longestTextCache||{},d.beforeSetDimensions(),d.setDimensions(),d.afterSetDimensions(),d.beforeDataLimits(),d.determineDataLimits(),d.afterDataLimits(),d.beforeBuildTicks(),s=d.buildTicks()||[],s=d.afterBuildTicks(s)||s,d.beforeTickToLabelConversion(),o=d.convertTicksToLabels(s)||d.ticks,d.afterTickToLabelConversion(),d.ticks=o,n=0,a=o.length;n<a;++n)r=o[n],(l=s[n])?l.label=r:s.push(l={label:r,major:!1});return d._ticks=s,d.beforeCalculateTickRotation(),d.calculateTickRotation(),d.afterCalculateTickRotation(),d.beforeFit(),d.fit(),d.afterFit(),d.afterUpdate(),d.minSize},afterUpdate:function(){ut.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){ut.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var t=this;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},afterSetDimensions:function(){ut.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){ut.callback(this.options.beforeDataLimits,[this])},determineDataLimits:ut.noop,afterDataLimits:function(){ut.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){ut.callback(this.options.beforeBuildTicks,[this])},buildTicks:ut.noop,afterBuildTicks:function(t){var e=this;return ut.isArray(t)&&t.length?ut.callback(e.options.afterBuildTicks,[e,t]):(e.ticks=ut.callback(e.options.afterBuildTicks,[e,e.ticks])||e.ticks,t)},beforeTickToLabelConversion:function(){ut.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var t=this.options.ticks;this.ticks=this.ticks.map(t.userCallback||t.callback,this)},afterTickToLabelConversion:function(){ut.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){ut.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var t=this,e=t.ctx,i=t.options.ticks,n=hi(t._ticks),a=ut.options._parseFont(i);e.font=a.string;var o=i.minRotation||0;if(n.length&&t.options.display&&t.isHorizontal())for(var r,s=ut.longestText(e,a.string,n,t.longestTextCache),l=s,d=t.getPixelForTick(1)-t.getPixelForTick(0)-6;l>d&&o<i.maxRotation;){var u=ut.toRadians(o);if(r=Math.cos(u),Math.sin(u)*s>t.maxHeight){o--;break}o++,l=r*s}t.labelRotation=o},afterCalculateTickRotation:function(){ut.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){ut.callback(this.options.beforeFit,[this])},fit:function(){var t=this,e=t.minSize={width:0,height:0},i=hi(t._ticks),n=t.options,a=n.ticks,o=n.scaleLabel,r=n.gridLines,s=t._isVisible(),l=n.position,d=t.isHorizontal(),u=ut.options._parseFont,h=u(a),c=n.gridLines.tickMarkLength;if(e.width=d?t.isFullWidth()?t.maxWidth-t.margins.left-t.margins.right:t.maxWidth:s&&r.drawTicks?c:0,e.height=d?s&&r.drawTicks?c:0:t.maxHeight,o.display&&s){var f=u(o),g=ut.options.toPadding(o.padding),p=f.lineHeight+g.height;d?e.height+=p:e.width+=p}if(a.display&&s){var m=ut.longestText(t.ctx,h.string,i,t.longestTextCache),v=ut.numberOfLabelLines(i),b=.5*h.size,x=t.options.ticks.padding;if(t._maxLabelLines=v,t.longestLabelWidth=m,d){var y=ut.toRadians(t.labelRotation),k=Math.cos(y),w=Math.sin(y)*m+h.lineHeight*v+b;e.height=Math.min(t.maxHeight,e.height+w+x),t.ctx.font=h.string;var M,_,C=ci(t.ctx,i[0],h.string),S=ci(t.ctx,i[i.length-1],h.string),P=t.getPixelForTick(0)-t.left,I=t.right-t.getPixelForTick(i.length-1);0!==t.labelRotation?(M="bottom"===l?k*C:k*b,_="bottom"===l?k*b:k*S):(M=C/2,_=S/2),t.paddingLeft=Math.max(M-P,0)+3,t.paddingRight=Math.max(_-I,0)+3}else a.mirror?m=0:m+=x+b,e.width=Math.min(t.maxWidth,e.width+m),t.paddingTop=h.size/2,t.paddingBottom=h.size/2}t.handleMargins(),t.width=e.width,t.height=e.height},handleMargins:function(){var t=this;t.margins&&(t.paddingLeft=Math.max(t.paddingLeft-t.margins.left,0),t.paddingTop=Math.max(t.paddingTop-t.margins.top,0),t.paddingRight=Math.max(t.paddingRight-t.margins.right,0),t.paddingBottom=Math.max(t.paddingBottom-t.margins.bottom,0))},afterFit:function(){ut.callback(this.options.afterFit,[this])},isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(t){if(ut.isNullOrUndef(t))return NaN;if(("number"==typeof t||t instanceof Number)&&!isFinite(t))return NaN;if(t)if(this.isHorizontal()){if(void 0!==t.x)return this.getRightValue(t.x)}else if(void 0!==t.y)return this.getRightValue(t.y);return t},getLabelForIndex:ut.noop,getPixelForValue:ut.noop,getValueForPixel:ut.noop,getPixelForTick:function(t){var e=this,i=e.options.offset;if(e.isHorizontal()){var n=(e.width-(e.paddingLeft+e.paddingRight))/Math.max(e._ticks.length-(i?0:1),1),a=n*t+e.paddingLeft;i&&(a+=n/2);var o=e.left+a;return o+=e.isFullWidth()?e.margins.left:0}var r=e.height-(e.paddingTop+e.paddingBottom);return e.top+t*(r/(e._ticks.length-1))},getPixelForDecimal:function(t){var e=this;if(e.isHorizontal()){var i=(e.width-(e.paddingLeft+e.paddingRight))*t+e.paddingLeft,n=e.left+i;return n+=e.isFullWidth()?e.margins.left:0}return e.top+t*e.height},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this.min,e=this.max;return this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0},_autoSkip:function(t){var e,i,n=this,a=n.isHorizontal(),o=n.options.ticks.minor,r=t.length,s=!1,l=o.maxTicksLimit,d=n._tickSize()*(r-1),u=a?n.width-(n.paddingLeft+n.paddingRight):n.height-(n.paddingTop+n.PaddingBottom),h=[];for(d>u&&(s=1+Math.floor(d/u)),r>l&&(s=Math.max(s,1+Math.floor(r/l))),e=0;e<r;e++)i=t[e],s>1&&e%s>0&&delete i.label,h.push(i);return h},_tickSize:function(){var t=this,e=t.isHorizontal(),i=t.options.ticks.minor,n=ut.toRadians(t.labelRotation),a=Math.abs(Math.cos(n)),o=Math.abs(Math.sin(n)),r=i.autoSkipPadding||0,s=t.longestLabelWidth+r||0,l=ut.options._parseFont(i),d=t._maxLabelLines*l.lineHeight+r||0;return e?d*a>s*o?s/a:d/o:d*o<s*a?d/a:s/o},_isVisible:function(){var t,e,i,n=this.chart,a=this.options.display;if("auto"!==a)return!!a;for(t=0,e=n.data.datasets.length;t<e;++t)if(n.isDatasetVisible(t)&&((i=n.getDatasetMeta(t)).xAxisID===this.id||i.yAxisID===this.id))return!0;return!1},draw:function(t){var e=this,i=e.options;if(e._isVisible()){var n,a,o,r=e.chart,s=e.ctx,l=st.global.defaultFontColor,d=i.ticks.minor,u=i.ticks.major||d,h=i.gridLines,c=i.scaleLabel,f=i.position,g=0!==e.labelRotation,p=d.mirror,m=e.isHorizontal(),v=ut.options._parseFont,b=d.display&&d.autoSkip?e._autoSkip(e.getTicks()):e.getTicks(),x=di(d.fontColor,l),y=v(d),k=y.lineHeight,w=di(u.fontColor,l),M=v(u),_=d.padding,C=d.labelOffset,S=h.drawTicks?h.tickMarkLength:0,P=di(c.fontColor,l),I=v(c),A=ut.options.toPadding(c.padding),D=ut.toRadians(e.labelRotation),T=[],F=h.drawBorder?ui(h.lineWidth,0,0):0,L=ut._alignPixel;"top"===f?(n=L(r,e.bottom,F),a=e.bottom-S,o=n-F/2):"bottom"===f?(n=L(r,e.top,F),a=n+F/2,o=e.top+S):"left"===f?(n=L(r,e.right,F),a=e.right-S,o=n-F/2):(n=L(r,e.left,F),a=n+F/2,o=e.left+S);if(ut.each(b,function(n,s){if(!ut.isNullOrUndef(n.label)){var l,d,u,c,v,b,x,y,w,M,P,I,A,R,O,z,B=n.label;s===e.zeroLineIndex&&i.offset===h.offsetGridLines?(l=h.zeroLineWidth,d=h.zeroLineColor,u=h.zeroLineBorderDash||[],c=h.zeroLineBorderDashOffset||0):(l=ui(h.lineWidth,s),d=ui(h.color,s),u=h.borderDash||[],c=h.borderDashOffset||0);var N=ut.isArray(B)?B.length:1,W=function(t,e,i){var n=t.getPixelForTick(e);return i&&(1===t.getTicks().length?n-=t.isHorizontal()?Math.max(n-t.left,t.right-n):Math.max(n-t.top,t.bottom-n):n-=0===e?(t.getPixelForTick(1)-n)/2:(n-t.getPixelForTick(e-1))/2),n}(e,s,h.offsetGridLines);if(m){var V=S+_;W<e.left-1e-7&&(d="rgba(0,0,0,0)"),v=x=w=P=L(r,W,l),b=a,y=o,A=e.getPixelForTick(s)+C,"top"===f?(M=L(r,t.top,F)+F/2,I=t.bottom,O=((g?1:.5)-N)*k,z=g?"left":"center",R=e.bottom-V):(M=t.top,I=L(r,t.bottom,F)-F/2,O=(g?0:.5)*k,z=g?"right":"center",R=e.top+V)}else{var E=(p?0:S)+_;W<e.top-1e-7&&(d="rgba(0,0,0,0)"),v=a,x=o,b=y=M=I=L(r,W,l),R=e.getPixelForTick(s)+C,O=(1-N)*k/2,"left"===f?(w=L(r,t.left,F)+F/2,P=t.right,z=p?"left":"right",A=e.right-E):(w=t.left,P=L(r,t.right,F)-F/2,z=p?"right":"left",A=e.left+E)}T.push({tx1:v,ty1:b,tx2:x,ty2:y,x1:w,y1:M,x2:P,y2:I,labelX:A,labelY:R,glWidth:l,glColor:d,glBorderDash:u,glBorderDashOffset:c,rotation:-1*D,label:B,major:n.major,textOffset:O,textAlign:z})}}),ut.each(T,function(t){var e=t.glWidth,i=t.glColor;if(h.display&&e&&i&&(s.save(),s.lineWidth=e,s.strokeStyle=i,s.setLineDash&&(s.setLineDash(t.glBorderDash),s.lineDashOffset=t.glBorderDashOffset),s.beginPath(),h.drawTicks&&(s.moveTo(t.tx1,t.ty1),s.lineTo(t.tx2,t.ty2)),h.drawOnChartArea&&(s.moveTo(t.x1,t.y1),s.lineTo(t.x2,t.y2)),s.stroke(),s.restore()),d.display){s.save(),s.translate(t.labelX,t.labelY),s.rotate(t.rotation),s.font=t.major?M.string:y.string,s.fillStyle=t.major?w:x,s.textBaseline="middle",s.textAlign=t.textAlign;var n=t.label,a=t.textOffset;if(ut.isArray(n))for(var o=0;o<n.length;++o)s.fillText(""+n[o],0,a),a+=k;else s.fillText(n,0,a);s.restore()}}),c.display){var R,O,z=0,B=I.lineHeight/2;if(m)R=e.left+(e.right-e.left)/2,O="bottom"===f?e.bottom-B-A.bottom:e.top+B+A.top;else{var N="left"===f;R=N?e.left+B+A.top:e.right-B-A.top,O=e.top+(e.bottom-e.top)/2,z=N?-.5*Math.PI:.5*Math.PI}s.save(),s.translate(R,O),s.rotate(z),s.textAlign="center",s.textBaseline="middle",s.fillStyle=P,s.font=I.string,s.fillText(c.labelString,0,0),s.restore()}if(F){var W,V,E,H,j=F,q=ui(h.lineWidth,b.length-1,0);m?(W=L(r,e.left,j)-j/2,V=L(r,e.right,q)+q/2,E=H=n):(E=L(r,e.top,j)-j/2,H=L(r,e.bottom,q)+q/2,W=V=n),s.lineWidth=F,s.strokeStyle=ui(h.color,0),s.beginPath(),s.moveTo(W,E),s.lineTo(V,H),s.stroke()}}}}),gi=fi.extend({getLabels:function(){var t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels},determineDataLimits:function(){var t,e=this,i=e.getLabels();e.minIndex=0,e.maxIndex=i.length-1,void 0!==e.options.ticks.min&&(t=i.indexOf(e.options.ticks.min),e.minIndex=-1!==t?t:e.minIndex),void 0!==e.options.ticks.max&&(t=i.indexOf(e.options.ticks.max),e.maxIndex=-1!==t?t:e.maxIndex),e.min=i[e.minIndex],e.max=i[e.maxIndex]},buildTicks:function(){var t=this,e=t.getLabels();t.ticks=0===t.minIndex&&t.maxIndex===e.length-1?e:e.slice(t.minIndex,t.maxIndex+1)},getLabelForIndex:function(t,e){var i=this,n=i.chart;return n.getDatasetMeta(e).controller._getValueScaleId()===i.id?i.getRightValue(n.data.datasets[e].data[t]):i.ticks[t-i.minIndex]},getPixelForValue:function(t,e){var i,n=this,a=n.options.offset,o=Math.max(n.maxIndex+1-n.minIndex-(a?0:1),1);if(null!=t&&(i=n.isHorizontal()?t.x:t.y),void 0!==i||void 0!==t&&isNaN(e)){t=i||t;var r=n.getLabels().indexOf(t);e=-1!==r?r:e}if(n.isHorizontal()){var s=n.width/o,l=s*(e-n.minIndex);return a&&(l+=s/2),n.left+l}var d=n.height/o,u=d*(e-n.minIndex);return a&&(u+=d/2),n.top+u},getPixelForTick:function(t){return this.getPixelForValue(this.ticks[t],t+this.minIndex,null)},getValueForPixel:function(t){var e=this,i=e.options.offset,n=Math.max(e._ticks.length-(i?0:1),1),a=e.isHorizontal(),o=(a?e.width:e.height)/n;return t-=a?e.left:e.top,i&&(t-=o/2),(t<=0?0:Math.round(t/o))+e.minIndex},getBasePixel:function(){return this.bottom}}),pi={position:"bottom"};gi._defaults=pi;var mi=ut.noop,vi=ut.isNullOrUndef;var bi=fi.extend({getRightValue:function(t){return"string"==typeof t?+t:fi.prototype.getRightValue.call(this,t)},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;if(e.beginAtZero){var i=ut.sign(t.min),n=ut.sign(t.max);i<0&&n<0?t.max=0:i>0&&n>0&&(t.min=0)}var a=void 0!==e.min||void 0!==e.suggestedMin,o=void 0!==e.max||void 0!==e.suggestedMax;void 0!==e.min?t.min=e.min:void 0!==e.suggestedMin&&(null===t.min?t.min=e.suggestedMin:t.min=Math.min(t.min,e.suggestedMin)),void 0!==e.max?t.max=e.max:void 0!==e.suggestedMax&&(null===t.max?t.max=e.suggestedMax:t.max=Math.max(t.max,e.suggestedMax)),a!==o&&t.min>=t.max&&(a?t.max=t.min+1:t.min=t.max-1),t.min===t.max&&(t.max++,e.beginAtZero||t.min--)},getTickLimit:function(){var t,e=this.options.ticks,i=e.stepSize,n=e.maxTicksLimit;return i?t=Math.ceil(this.max/i)-Math.floor(this.min/i)+1:(t=this._computeTickLimit(),n=n||11),n&&(t=Math.min(n,t)),t},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:mi,buildTicks:function(){var t=this,e=t.options.ticks,i=t.getTickLimit(),n={maxTicks:i=Math.max(2,i),min:e.min,max:e.max,precision:e.precision,stepSize:ut.valueOrDefault(e.fixedStepSize,e.stepSize)},a=t.ticks=function(t,e){var i,n,a,o,r=[],s=t.stepSize,l=s||1,d=t.maxTicks-1,u=t.min,h=t.max,c=t.precision,f=e.min,g=e.max,p=ut.niceNum((g-f)/d/l)*l;if(p<1e-14&&vi(u)&&vi(h))return[f,g];(o=Math.ceil(g/p)-Math.floor(f/p))>d&&(p=ut.niceNum(o*p/d/l)*l),s||vi(c)?i=Math.pow(10,ut._decimalPlaces(p)):(i=Math.pow(10,c),p=Math.ceil(p*i)/i),n=Math.floor(f/p)*p,a=Math.ceil(g/p)*p,s&&(!vi(u)&&ut.almostWhole(u/p,p/1e3)&&(n=u),!vi(h)&&ut.almostWhole(h/p,p/1e3)&&(a=h)),o=(a-n)/p,o=ut.almostEquals(o,Math.round(o),p/1e3)?Math.round(o):Math.ceil(o),n=Math.round(n*i)/i,a=Math.round(a*i)/i,r.push(vi(u)?n:u);for(var m=1;m<o;++m)r.push(Math.round((n+m*p)*i)/i);return r.push(vi(h)?a:h),r}(n,t);t.handleDirectionalChanges(),t.max=ut.max(a),t.min=ut.min(a),e.reverse?(a.reverse(),t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max)},convertTicksToLabels:function(){var t=this;t.ticksAsNumbers=t.ticks.slice(),t.zeroLineIndex=t.ticks.indexOf(0),fi.prototype.convertTicksToLabels.call(t)}}),xi={position:"left",ticks:{callback:li.formatters.linear}},yi=bi.extend({determineDataLimits:function(){var t=this,e=t.options,i=t.chart,n=i.data.datasets,a=t.isHorizontal();function o(e){return a?e.xAxisID===t.id:e.yAxisID===t.id}t.min=null,t.max=null;var r=e.stacked;if(void 0===r&&ut.each(n,function(t,e){if(!r){var n=i.getDatasetMeta(e);i.isDatasetVisible(e)&&o(n)&&void 0!==n.stack&&(r=!0)}}),e.stacked||r){var s={};ut.each(n,function(n,a){var r=i.getDatasetMeta(a),l=[r.type,void 0===e.stacked&&void 0===r.stack?a:"",r.stack].join(".");void 0===s[l]&&(s[l]={positiveValues:[],negativeValues:[]});var d=s[l].positiveValues,u=s[l].negativeValues;i.isDatasetVisible(a)&&o(r)&&ut.each(n.data,function(i,n){var a=+t.getRightValue(i);isNaN(a)||r.data[n].hidden||(d[n]=d[n]||0,u[n]=u[n]||0,e.relativePoints?d[n]=100:a<0?u[n]+=a:d[n]+=a)})}),ut.each(s,function(e){var i=e.positiveValues.concat(e.negativeValues),n=ut.min(i),a=ut.max(i);t.min=null===t.min?n:Math.min(t.min,n),t.max=null===t.max?a:Math.max(t.max,a)})}else ut.each(n,function(e,n){var a=i.getDatasetMeta(n);i.isDatasetVisible(n)&&o(a)&&ut.each(e.data,function(e,i){var n=+t.getRightValue(e);isNaN(n)||a.data[i].hidden||(null===t.min?t.min=n:n<t.min&&(t.min=n),null===t.max?t.max=n:n>t.max&&(t.max=n))})});t.min=isFinite(t.min)&&!isNaN(t.min)?t.min:0,t.max=isFinite(t.max)&&!isNaN(t.max)?t.max:1,this.handleTickRangeOptions()},_computeTickLimit:function(){var t;return this.isHorizontal()?Math.ceil(this.width/40):(t=ut.options._parseFont(this.options.ticks),Math.ceil(this.height/t.lineHeight))},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForValue:function(t){var e=this,i=e.start,n=+e.getRightValue(t),a=e.end-i;return e.isHorizontal()?e.left+e.width/a*(n-i):e.bottom-e.height/a*(n-i)},getValueForPixel:function(t){var e=this,i=e.isHorizontal(),n=i?e.width:e.height,a=(i?t-e.left:e.bottom-t)/n;return e.start+(e.end-e.start)*a},getPixelForTick:function(t){return this.getPixelForValue(this.ticksAsNumbers[t])}}),ki=xi;yi._defaults=ki;var wi=ut.valueOrDefault;var Mi={position:"left",ticks:{callback:li.formatters.logarithmic}};function _i(t,e){return ut.isFinite(t)&&t>=0?t:e}var Ci=fi.extend({determineDataLimits:function(){var t=this,e=t.options,i=t.chart,n=i.data.datasets,a=t.isHorizontal();function o(e){return a?e.xAxisID===t.id:e.yAxisID===t.id}t.min=null,t.max=null,t.minNotZero=null;var r=e.stacked;if(void 0===r&&ut.each(n,function(t,e){if(!r){var n=i.getDatasetMeta(e);i.isDatasetVisible(e)&&o(n)&&void 0!==n.stack&&(r=!0)}}),e.stacked||r){var s={};ut.each(n,function(n,a){var r=i.getDatasetMeta(a),l=[r.type,void 0===e.stacked&&void 0===r.stack?a:"",r.stack].join(".");i.isDatasetVisible(a)&&o(r)&&(void 0===s[l]&&(s[l]=[]),ut.each(n.data,function(e,i){var n=s[l],a=+t.getRightValue(e);isNaN(a)||r.data[i].hidden||a<0||(n[i]=n[i]||0,n[i]+=a)}))}),ut.each(s,function(e){if(e.length>0){var i=ut.min(e),n=ut.max(e);t.min=null===t.min?i:Math.min(t.min,i),t.max=null===t.max?n:Math.max(t.max,n)}})}else ut.each(n,function(e,n){var a=i.getDatasetMeta(n);i.isDatasetVisible(n)&&o(a)&&ut.each(e.data,function(e,i){var n=+t.getRightValue(e);isNaN(n)||a.data[i].hidden||n<0||(null===t.min?t.min=n:n<t.min&&(t.min=n),null===t.max?t.max=n:n>t.max&&(t.max=n),0!==n&&(null===t.minNotZero||n<t.minNotZero)&&(t.minNotZero=n))})});this.handleTickRangeOptions()},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;t.min=_i(e.min,t.min),t.max=_i(e.max,t.max),t.min===t.max&&(0!==t.min&&null!==t.min?(t.min=Math.pow(10,Math.floor(ut.log10(t.min))-1),t.max=Math.pow(10,Math.floor(ut.log10(t.max))+1)):(t.min=1,t.max=10)),null===t.min&&(t.min=Math.pow(10,Math.floor(ut.log10(t.max))-1)),null===t.max&&(t.max=0!==t.min?Math.pow(10,Math.floor(ut.log10(t.min))+1):10),null===t.minNotZero&&(t.min>0?t.minNotZero=t.min:t.max<1?t.minNotZero=Math.pow(10,Math.floor(ut.log10(t.max))):t.minNotZero=1)},buildTicks:function(){var t=this,e=t.options.ticks,i=!t.isHorizontal(),n={min:_i(e.min),max:_i(e.max)},a=t.ticks=function(t,e){var i,n,a=[],o=wi(t.min,Math.pow(10,Math.floor(ut.log10(e.min)))),r=Math.floor(ut.log10(e.max)),s=Math.ceil(e.max/Math.pow(10,r));0===o?(i=Math.floor(ut.log10(e.minNotZero)),n=Math.floor(e.minNotZero/Math.pow(10,i)),a.push(o),o=n*Math.pow(10,i)):(i=Math.floor(ut.log10(o)),n=Math.floor(o/Math.pow(10,i)));var l=i<0?Math.pow(10,Math.abs(i)):1;do{a.push(o),10==++n&&(n=1,l=++i>=0?1:l),o=Math.round(n*Math.pow(10,i)*l)/l}while(i<r||i===r&&n<s);var d=wi(t.max,o);return a.push(d),a}(n,t);t.max=ut.max(a),t.min=ut.min(a),e.reverse?(i=!i,t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max),i&&a.reverse()},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),fi.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForTick:function(t){return this.getPixelForValue(this.tickValues[t])},_getFirstTickValue:function(t){var e=Math.floor(ut.log10(t));return Math.floor(t/Math.pow(10,e))*Math.pow(10,e)},getPixelForValue:function(t){var e,i,n,a,o,r=this,s=r.options.ticks,l=s.reverse,d=ut.log10,u=r._getFirstTickValue(r.minNotZero),h=0;return t=+r.getRightValue(t),l?(n=r.end,a=r.start,o=-1):(n=r.start,a=r.end,o=1),r.isHorizontal()?(e=r.width,i=l?r.right:r.left):(e=r.height,o*=-1,i=l?r.top:r.bottom),t!==n&&(0===n&&(e-=h=wi(s.fontSize,st.global.defaultFontSize),n=u),0!==t&&(h+=e/(d(a)-d(n))*(d(t)-d(n))),i+=o*h),i},getValueForPixel:function(t){var e,i,n,a,o=this,r=o.options.ticks,s=r.reverse,l=ut.log10,d=o._getFirstTickValue(o.minNotZero);if(s?(i=o.end,n=o.start):(i=o.start,n=o.end),o.isHorizontal()?(e=o.width,a=s?o.right-t:t-o.left):(e=o.height,a=s?t-o.top:o.bottom-t),a!==i){if(0===i){var u=wi(r.fontSize,st.global.defaultFontSize);a-=u,e-=u,i=d}a*=l(n)-l(i),a/=e,a=Math.pow(10,l(i)+a)}return a}}),Si=Mi;Ci._defaults=Si;var Pi=ut.valueOrDefault,Ii=ut.valueAtIndexOrDefault,Ai=ut.options.resolve,Di={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0, 0, 0, 0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:li.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(t){return t}}};function Ti(t){var e=t.options;return e.angleLines.display||e.pointLabels.display?t.chart.data.labels.length:0}function Fi(t){var e=t.ticks;return e.display&&t.display?Pi(e.fontSize,st.global.defaultFontSize)+2*e.backdropPaddingY:0}function Li(t,e,i,n,a){return t===n||t===a?{start:e-i/2,end:e+i/2}:t<n||t>a?{start:e-i,end:e}:{start:e,end:e+i}}function Ri(t){return 0===t||180===t?"center":t<180?"left":"right"}function Oi(t,e,i,n){var a,o,r=i.y+n/2;if(ut.isArray(e))for(a=0,o=e.length;a<o;++a)t.fillText(e[a],i.x,r),r+=n;else t.fillText(e,i.x,r)}function zi(t,e,i){90===t||270===t?i.y-=e.h/2:(t>270||t<90)&&(i.y-=e.h)}function Bi(t){return ut.isNumber(t)?t:0}var Ni=bi.extend({setDimensions:function(){var t=this;t.width=t.maxWidth,t.height=t.maxHeight,t.paddingTop=Fi(t.options)/2,t.xCenter=Math.floor(t.width/2),t.yCenter=Math.floor((t.height-t.paddingTop)/2),t.drawingArea=Math.min(t.height-t.paddingTop,t.width)/2},determineDataLimits:function(){var t=this,e=t.chart,i=Number.POSITIVE_INFINITY,n=Number.NEGATIVE_INFINITY;ut.each(e.data.datasets,function(a,o){if(e.isDatasetVisible(o)){var r=e.getDatasetMeta(o);ut.each(a.data,function(e,a){var o=+t.getRightValue(e);isNaN(o)||r.data[a].hidden||(i=Math.min(o,i),n=Math.max(o,n))})}}),t.min=i===Number.POSITIVE_INFINITY?0:i,t.max=n===Number.NEGATIVE_INFINITY?0:n,t.handleTickRangeOptions()},_computeTickLimit:function(){return Math.ceil(this.drawingArea/Fi(this.options))},convertTicksToLabels:function(){var t=this;bi.prototype.convertTicksToLabels.call(t),t.pointLabels=t.chart.data.labels.map(t.options.pointLabels.callback,t)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},fit:function(){var t=this.options;t.display&&t.pointLabels.display?function(t){var e,i,n,a=ut.options._parseFont(t.options.pointLabels),o={l:0,r:t.width,t:0,b:t.height-t.paddingTop},r={};t.ctx.font=a.string,t._pointLabelSizes=[];var s,l,d,u=Ti(t);for(e=0;e<u;e++){n=t.getPointPosition(e,t.drawingArea+5),s=t.ctx,l=a.lineHeight,d=t.pointLabels[e]||"",i=ut.isArray(d)?{w:ut.longestText(s,s.font,d),h:d.length*l}:{w:s.measureText(d).width,h:l},t._pointLabelSizes[e]=i;var h=t.getIndexAngle(e),c=ut.toDegrees(h)%360,f=Li(c,n.x,i.w,0,180),g=Li(c,n.y,i.h,90,270);f.start<o.l&&(o.l=f.start,r.l=h),f.end>o.r&&(o.r=f.end,r.r=h),g.start<o.t&&(o.t=g.start,r.t=h),g.end>o.b&&(o.b=g.end,r.b=h)}t.setReductions(t.drawingArea,o,r)}(this):this.setCenterPoint(0,0,0,0)},setReductions:function(t,e,i){var n=this,a=e.l/Math.sin(i.l),o=Math.max(e.r-n.width,0)/Math.sin(i.r),r=-e.t/Math.cos(i.t),s=-Math.max(e.b-(n.height-n.paddingTop),0)/Math.cos(i.b);a=Bi(a),o=Bi(o),r=Bi(r),s=Bi(s),n.drawingArea=Math.min(Math.floor(t-(a+o)/2),Math.floor(t-(r+s)/2)),n.setCenterPoint(a,o,r,s)},setCenterPoint:function(t,e,i,n){var a=this,o=a.width-e-a.drawingArea,r=t+a.drawingArea,s=i+a.drawingArea,l=a.height-a.paddingTop-n-a.drawingArea;a.xCenter=Math.floor((r+o)/2+a.left),a.yCenter=Math.floor((s+l)/2+a.top+a.paddingTop)},getIndexAngle:function(t){return t*(2*Math.PI/Ti(this))+(this.chart.options&&this.chart.options.startAngle?this.chart.options.startAngle:0)*Math.PI*2/360},getDistanceFromCenterForValue:function(t){var e=this;if(null===t)return 0;var i=e.drawingArea/(e.max-e.min);return e.options.ticks.reverse?(e.max-t)*i:(t-e.min)*i},getPointPosition:function(t,e){var i=this.getIndexAngle(t)-Math.PI/2;return{x:Math.cos(i)*e+this.xCenter,y:Math.sin(i)*e+this.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(){var t=this.min,e=this.max;return this.getPointPositionForValue(0,this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0)},draw:function(){var t=this,e=t.options,i=e.gridLines,n=e.ticks;if(e.display){var a=t.ctx,o=this.getIndexAngle(0),r=ut.options._parseFont(n);(e.angleLines.display||e.pointLabels.display)&&function(t){var e=t.ctx,i=t.options,n=i.angleLines,a=i.gridLines,o=i.pointLabels,r=Pi(n.lineWidth,a.lineWidth),s=Pi(n.color,a.color),l=Fi(i);e.save(),e.lineWidth=r,e.strokeStyle=s,e.setLineDash&&(e.setLineDash(Ai([n.borderDash,a.borderDash,[]])),e.lineDashOffset=Ai([n.borderDashOffset,a.borderDashOffset,0]));var d=t.getDistanceFromCenterForValue(i.ticks.reverse?t.min:t.max),u=ut.options._parseFont(o);e.font=u.string,e.textBaseline="middle";for(var h=Ti(t)-1;h>=0;h--){if(n.display&&r&&s){var c=t.getPointPosition(h,d);e.beginPath(),e.moveTo(t.xCenter,t.yCenter),e.lineTo(c.x,c.y),e.stroke()}if(o.display){var f=0===h?l/2:0,g=t.getPointPosition(h,d+f+5),p=Ii(o.fontColor,h,st.global.defaultFontColor);e.fillStyle=p;var m=t.getIndexAngle(h),v=ut.toDegrees(m);e.textAlign=Ri(v),zi(v,t._pointLabelSizes[h],g),Oi(e,t.pointLabels[h]||"",g,u.lineHeight)}}e.restore()}(t),ut.each(t.ticks,function(e,s){if(s>0||n.reverse){var l=t.getDistanceFromCenterForValue(t.ticksAsNumbers[s]);if(i.display&&0!==s&&function(t,e,i,n){var a,o=t.ctx,r=e.circular,s=Ti(t),l=Ii(e.color,n-1),d=Ii(e.lineWidth,n-1);if((r||s)&&l&&d){if(o.save(),o.strokeStyle=l,o.lineWidth=d,o.setLineDash&&(o.setLineDash(e.borderDash||[]),o.lineDashOffset=e.borderDashOffset||0),o.beginPath(),r)o.arc(t.xCenter,t.yCenter,i,0,2*Math.PI);else{a=t.getPointPosition(0,i),o.moveTo(a.x,a.y);for(var u=1;u<s;u++)a=t.getPointPosition(u,i),o.lineTo(a.x,a.y)}o.closePath(),o.stroke(),o.restore()}}(t,i,l,s),n.display){var d=Pi(n.fontColor,st.global.defaultFontColor);if(a.font=r.string,a.save(),a.translate(t.xCenter,t.yCenter),a.rotate(o),n.showLabelBackdrop){var u=a.measureText(e).width;a.fillStyle=n.backdropColor,a.fillRect(-u/2-n.backdropPaddingX,-l-r.size/2-n.backdropPaddingY,u+2*n.backdropPaddingX,r.size+2*n.backdropPaddingY)}a.textAlign="center",a.textBaseline="middle",a.fillStyle=d,a.fillText(e,0,-l),a.restore()}}})}}}),Wi=Di;Ni._defaults=Wi;var Vi=ut.valueOrDefault,Ei=Number.MIN_SAFE_INTEGER||-9007199254740991,Hi=Number.MAX_SAFE_INTEGER||9007199254740991,ji={millisecond:{common:!0,size:1,steps:[1,2,5,10,20,50,100,250,500]},second:{common:!0,size:1e3,steps:[1,2,5,10,15,30]},minute:{common:!0,size:6e4,steps:[1,2,5,10,15,30]},hour:{common:!0,size:36e5,steps:[1,2,3,6,12]},day:{common:!0,size:864e5,steps:[1,2,5]},week:{common:!1,size:6048e5,steps:[1,2,3,4]},month:{common:!0,size:2628e6,steps:[1,2,3]},quarter:{common:!1,size:7884e6,steps:[1,2,3,4]},year:{common:!0,size:3154e7}},qi=Object.keys(ji);function Yi(t,e){return t-e}function Ui(t){var e,i,n,a={},o=[];for(e=0,i=t.length;e<i;++e)a[n=t[e]]||(a[n]=!0,o.push(n));return o}function Xi(t,e,i,n){var a=function(t,e,i){for(var n,a,o,r=0,s=t.length-1;r>=0&&r<=s;){if(a=t[(n=r+s>>1)-1]||null,o=t[n],!a)return{lo:null,hi:o};if(o[e]<i)r=n+1;else{if(!(a[e]>i))return{lo:a,hi:o};s=n-1}}return{lo:o,hi:null}}(t,e,i),o=a.lo?a.hi?a.lo:t[t.length-2]:t[0],r=a.lo?a.hi?a.hi:t[t.length-1]:t[1],s=r[e]-o[e],l=s?(i-o[e])/s:0,d=(r[n]-o[n])*l;return o[n]+d}function Ki(t,e){var i=t._adapter,n=t.options.time,a=n.parser,o=a||n.format,r=e;return"function"==typeof a&&(r=a(r)),ut.isFinite(r)||(r="string"==typeof o?i.parse(r,o):i.parse(r)),null!==r?+r:(a||"function"!=typeof o||(r=o(e),ut.isFinite(r)||(r=i.parse(r))),r)}function Gi(t,e){if(ut.isNullOrUndef(e))return null;var i=t.options.time,n=Ki(t,t.getRightValue(e));return null===n?n:(i.round&&(n=+t._adapter.startOf(n,i.round)),n)}function Zi(t){for(var e=qi.indexOf(t)+1,i=qi.length;e<i;++e)if(ji[qi[e]].common)return qi[e]}function $i(t,e,i,n){var a,o=t._adapter,r=t.options,s=r.time,l=s.unit||function(t,e,i,n){var a,o,r,s=qi.length;for(a=qi.indexOf(t);a<s-1;++a)if(r=(o=ji[qi[a]]).steps?o.steps[o.steps.length-1]:Hi,o.common&&Math.ceil((i-e)/(r*o.size))<=n)return qi[a];return qi[s-1]}(s.minUnit,e,i,n),d=Zi(l),u=Vi(s.stepSize,s.unitStepSize),h="week"===l&&s.isoWeekday,c=r.ticks.major.enabled,f=ji[l],g=e,p=i,m=[];for(u||(u=function(t,e,i,n){var a,o,r,s=e-t,l=ji[i],d=l.size,u=l.steps;if(!u)return Math.ceil(s/(n*d));for(a=0,o=u.length;a<o&&(r=u[a],!(Math.ceil(s/(d*r))<=n));++a);return r}(e,i,l,n)),h&&(g=+o.startOf(g,"isoWeek",h),p=+o.startOf(p,"isoWeek",h)),g=+o.startOf(g,h?"day":l),(p=+o.startOf(p,h?"day":l))<i&&(p=+o.add(p,1,l)),a=g,c&&d&&!h&&!s.round&&(a=+o.startOf(a,d),a=+o.add(a,~~((g-a)/(f.size*u))*u,l));a<p;a=+o.add(a,u,l))m.push(+a);return m.push(+a),m}var Ji=fi.extend({initialize:function(){this.mergeTicksOptions(),fi.prototype.initialize.call(this)},update:function(){var t=this.options,e=t.time||(t.time={}),i=this._adapter=new si._date(t.adapters.date);return e.format&&console.warn("options.time.format is deprecated and replaced by options.time.parser."),ut.mergeIf(e.displayFormats,i.formats()),fi.prototype.update.apply(this,arguments)},getRightValue:function(t){return t&&void 0!==t.t&&(t=t.t),fi.prototype.getRightValue.call(this,t)},determineDataLimits:function(){var t,e,i,n,a,o,r=this,s=r.chart,l=r._adapter,d=r.options.time,u=d.unit||"day",h=Hi,c=Ei,f=[],g=[],p=[],m=s.data.labels||[];for(t=0,i=m.length;t<i;++t)p.push(Gi(r,m[t]));for(t=0,i=(s.data.datasets||[]).length;t<i;++t)if(s.isDatasetVisible(t))if(a=s.data.datasets[t].data,ut.isObject(a[0]))for(g[t]=[],e=0,n=a.length;e<n;++e)o=Gi(r,a[e]),f.push(o),g[t][e]=o;else{for(e=0,n=p.length;e<n;++e)f.push(p[e]);g[t]=p.slice(0)}else g[t]=[];p.length&&(p=Ui(p).sort(Yi),h=Math.min(h,p[0]),c=Math.max(c,p[p.length-1])),f.length&&(f=Ui(f).sort(Yi),h=Math.min(h,f[0]),c=Math.max(c,f[f.length-1])),h=Gi(r,d.min)||h,c=Gi(r,d.max)||c,h=h===Hi?+l.startOf(Date.now(),u):h,c=c===Ei?+l.endOf(Date.now(),u)+1:c,r.min=Math.min(h,c),r.max=Math.max(h+1,c),r._horizontal=r.isHorizontal(),r._table=[],r._timestamps={data:f,datasets:g,labels:p}},buildTicks:function(){var t,e,i,n=this,a=n.min,o=n.max,r=n.options,s=r.time,l=[],d=[];switch(r.ticks.source){case"data":l=n._timestamps.data;break;case"labels":l=n._timestamps.labels;break;case"auto":default:l=$i(n,a,o,n.getLabelCapacity(a))}for("ticks"===r.bounds&&l.length&&(a=l[0],o=l[l.length-1]),a=Gi(n,s.min)||a,o=Gi(n,s.max)||o,t=0,e=l.length;t<e;++t)(i=l[t])>=a&&i<=o&&d.push(i);return n.min=a,n.max=o,n._unit=s.unit||function(t,e,i,n,a){var o,r;for(o=qi.length-1;o>=qi.indexOf(i);o--)if(r=qi[o],ji[r].common&&t._adapter.diff(a,n,r)>=e.length)return r;return qi[i?qi.indexOf(i):0]}(n,d,s.minUnit,n.min,n.max),n._majorUnit=Zi(n._unit),n._table=function(t,e,i,n){if("linear"===n||!t.length)return[{time:e,pos:0},{time:i,pos:1}];var a,o,r,s,l,d=[],u=[e];for(a=0,o=t.length;a<o;++a)(s=t[a])>e&&s<i&&u.push(s);for(u.push(i),a=0,o=u.length;a<o;++a)l=u[a+1],r=u[a-1],s=u[a],void 0!==r&&void 0!==l&&Math.round((l+r)/2)===s||d.push({time:s,pos:a/(o-1)});return d}(n._timestamps.data,a,o,r.distribution),n._offsets=function(t,e,i,n,a){var o,r,s=0,l=0;return a.offset&&e.length&&(a.time.min||(o=Xi(t,"time",e[0],"pos"),s=1===e.length?1-o:(Xi(t,"time",e[1],"pos")-o)/2),a.time.max||(r=Xi(t,"time",e[e.length-1],"pos"),l=1===e.length?r:(r-Xi(t,"time",e[e.length-2],"pos"))/2)),{start:s,end:l}}(n._table,d,0,0,r),r.ticks.reverse&&d.reverse(),function(t,e,i){var n,a,o,r,s=[];for(n=0,a=e.length;n<a;++n)o=e[n],r=!!i&&o===+t._adapter.startOf(o,i),s.push({value:o,major:r});return s}(n,d,n._majorUnit)},getLabelForIndex:function(t,e){var i=this,n=i._adapter,a=i.chart.data,o=i.options.time,r=a.labels&&t<a.labels.length?a.labels[t]:"",s=a.datasets[e].data[t];return ut.isObject(s)&&(r=i.getRightValue(s)),o.tooltipFormat?n.format(Ki(i,r),o.tooltipFormat):"string"==typeof r?r:n.format(Ki(i,r),o.displayFormats.datetime)},tickFormatFunction:function(t,e,i,n){var a=this._adapter,o=this.options,r=o.time.displayFormats,s=r[this._unit],l=this._majorUnit,d=r[l],u=+a.startOf(t,l),h=o.ticks.major,c=h.enabled&&l&&d&&t===u,f=a.format(t,n||(c?d:s)),g=c?h:o.ticks.minor,p=Vi(g.callback,g.userCallback);return p?p(f,e,i):f},convertTicksToLabels:function(t){var e,i,n=[];for(e=0,i=t.length;e<i;++e)n.push(this.tickFormatFunction(t[e].value,e,t));return n},getPixelForOffset:function(t){var e=this,i=e.options.ticks.reverse,n=e._horizontal?e.width:e.height,a=e._horizontal?i?e.right:e.left:i?e.bottom:e.top,o=Xi(e._table,"time",t,"pos"),r=n*(e._offsets.start+o)/(e._offsets.start+1+e._offsets.end);return i?a-r:a+r},getPixelForValue:function(t,e,i){var n=null;if(void 0!==e&&void 0!==i&&(n=this._timestamps.datasets[i][e]),null===n&&(n=Gi(this,t)),null!==n)return this.getPixelForOffset(n)},getPixelForTick:function(t){var e=this.getTicks();return t>=0&&t<e.length?this.getPixelForOffset(e[t].value):null},getValueForPixel:function(t){var e=this,i=e._horizontal?e.width:e.height,n=e._horizontal?e.left:e.top,a=(i?(t-n)/i:0)*(e._offsets.start+1+e._offsets.start)-e._offsets.end,o=Xi(e._table,"pos",a,"time");return e._adapter._create(o)},getLabelWidth:function(t){var e=this.options.ticks,i=this.ctx.measureText(t).width,n=ut.toRadians(e.maxRotation),a=Math.cos(n),o=Math.sin(n);return i*a+Vi(e.fontSize,st.global.defaultFontSize)*o},getLabelCapacity:function(t){var e=this,i=e.options.time.displayFormats.millisecond,n=e.tickFormatFunction(t,0,[],i),a=e.getLabelWidth(n),o=e.isHorizontal()?e.width:e.height,r=Math.floor(o/a);return r>0?r:1}}),Qi={position:"bottom",distribution:"linear",bounds:"data",adapters:{},time:{parser:!1,format:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}};Ji._defaults=Qi;var tn={category:gi,linear:yi,logarithmic:Ci,radialLinear:Ni,time:Ji},en={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};si._date.override("function"==typeof t?{_id:"moment",formats:function(){return en},parse:function(e,i){return"string"==typeof e&&"string"==typeof i?e=t(e,i):e instanceof t||(e=t(e)),e.isValid()?e.valueOf():null},format:function(e,i){return t(e).format(i)},add:function(e,i,n){return t(e).add(i,n).valueOf()},diff:function(e,i,n){return t.duration(t(e).diff(t(i))).as(n)},startOf:function(e,i,n){return e=t(e),"isoWeek"===i?e.isoWeekday(n).valueOf():e.startOf(i).valueOf()},endOf:function(e,i){return t(e).endOf(i).valueOf()},_create:function(e){return t(e)}}:{}),st._set("global",{plugins:{filler:{propagate:!0}}});var nn={dataset:function(t){var e=t.fill,i=t.chart,n=i.getDatasetMeta(e),a=n&&i.isDatasetVisible(e)&&n.dataset._children||[],o=a.length||0;return o?function(t,e){return e<o&&a[e]._view||null}:null},boundary:function(t){var e=t.boundary,i=e?e.x:null,n=e?e.y:null;return function(t){return{x:null===i?t.x:i,y:null===n?t.y:n}}}};function an(t,e,i){var n,a=t._model||{},o=a.fill;if(void 0===o&&(o=!!a.backgroundColor),!1===o||null===o)return!1;if(!0===o)return"origin";if(n=parseFloat(o,10),isFinite(n)&&Math.floor(n)===n)return"-"!==o[0]&&"+"!==o[0]||(n=e+n),!(n===e||n<0||n>=i)&&n;switch(o){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return o;default:return!1}}function on(t){var e,i=t.el._model||{},n=t.el._scale||{},a=t.fill,o=null;if(isFinite(a))return null;if("start"===a?o=void 0===i.scaleBottom?n.bottom:i.scaleBottom:"end"===a?o=void 0===i.scaleTop?n.top:i.scaleTop:void 0!==i.scaleZero?o=i.scaleZero:n.getBasePosition?o=n.getBasePosition():n.getBasePixel&&(o=n.getBasePixel()),null!=o){if(void 0!==o.x&&void 0!==o.y)return o;if(ut.isFinite(o))return{x:(e=n.isHorizontal())?o:null,y:e?null:o}}return null}function rn(t,e,i){var n,a=t[e].fill,o=[e];if(!i)return a;for(;!1!==a&&-1===o.indexOf(a);){if(!isFinite(a))return a;if(!(n=t[a]))return!1;if(n.visible)return a;o.push(a),a=n.fill}return!1}function sn(t){var e=t.fill,i="dataset";return!1===e?null:(isFinite(e)||(i="boundary"),nn[i](t))}function ln(t){return t&&!t.skip}function dn(t,e,i,n,a){var o;if(n&&a){for(t.moveTo(e[0].x,e[0].y),o=1;o<n;++o)ut.canvas.lineTo(t,e[o-1],e[o]);for(t.lineTo(i[a-1].x,i[a-1].y),o=a-1;o>0;--o)ut.canvas.lineTo(t,i[o],i[o-1],!0)}}var un={id:"filler",afterDatasetsUpdate:function(t,e){var i,n,a,o,r=(t.data.datasets||[]).length,s=e.propagate,l=[];for(n=0;n<r;++n)o=null,(a=(i=t.getDatasetMeta(n)).dataset)&&a._model&&a instanceof Wt.Line&&(o={visible:t.isDatasetVisible(n),fill:an(a,n,r),chart:t,el:a}),i.$filler=o,l.push(o);for(n=0;n<r;++n)(o=l[n])&&(o.fill=rn(l,n,s),o.boundary=on(o),o.mapper=sn(o))},beforeDatasetDraw:function(t,e){var i=e.meta.$filler;if(i){var n=t.ctx,a=i.el,o=a._view,r=a._children||[],s=i.mapper,l=o.backgroundColor||st.global.defaultColor;s&&l&&r.length&&(ut.canvas.clipArea(n,t.chartArea),function(t,e,i,n,a,o){var r,s,l,d,u,h,c,f=e.length,g=n.spanGaps,p=[],m=[],v=0,b=0;for(t.beginPath(),r=0,s=f+!!o;r<s;++r)u=i(d=e[l=r%f]._view,l,n),h=ln(d),c=ln(u),h&&c?(v=p.push(d),b=m.push(u)):v&&b&&(g?(h&&p.push(d),c&&m.push(u)):(dn(t,p,m,v,b),v=b=0,p=[],m=[]));dn(t,p,m,v,b),t.closePath(),t.fillStyle=a,t.fill()}(n,r,s,o,l,a._loop),ut.canvas.unclipArea(n))}}},hn=ut.noop,cn=ut.valueOrDefault;function fn(t,e){return t.usePointStyle&&t.boxWidth>e?e:t.boxWidth}st._set("global",{legend:{display:!0,position:"top",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(t,e){var i=e.datasetIndex,n=this.chart,a=n.getDatasetMeta(i);a.hidden=null===a.hidden?!n.data.datasets[i].hidden:null,n.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(t){var e=t.data;return ut.isArray(e.datasets)?e.datasets.map(function(e,i){return{text:e.label,fillStyle:ut.isArray(e.backgroundColor)?e.backgroundColor[0]:e.backgroundColor,hidden:!t.isDatasetVisible(i),lineCap:e.borderCapStyle,lineDash:e.borderDash,lineDashOffset:e.borderDashOffset,lineJoin:e.borderJoinStyle,lineWidth:e.borderWidth,strokeStyle:e.borderColor,pointStyle:e.pointStyle,datasetIndex:i}},this):[]}}},legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');for(var i=0;i<t.data.datasets.length;i++)e.push('<li><span style="background-color:'+t.data.datasets[i].backgroundColor+'"></span>'),t.data.datasets[i].label&&e.push(t.data.datasets[i].label),e.push("</li>");return e.push("</ul>"),e.join("")}});var gn=pt.extend({initialize:function(t){ut.extend(this,t),this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1},beforeUpdate:hn,update:function(t,e,i){var n=this;return n.beforeUpdate(),n.maxWidth=t,n.maxHeight=e,n.margins=i,n.beforeSetDimensions(),n.setDimensions(),n.afterSetDimensions(),n.beforeBuildLabels(),n.buildLabels(),n.afterBuildLabels(),n.beforeFit(),n.fit(),n.afterFit(),n.afterUpdate(),n.minSize},afterUpdate:hn,beforeSetDimensions:hn,setDimensions:function(){var t=this;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={width:0,height:0}},afterSetDimensions:hn,beforeBuildLabels:hn,buildLabels:function(){var t=this,e=t.options.labels||{},i=ut.callback(e.generateLabels,[t.chart],t)||[];e.filter&&(i=i.filter(function(i){return e.filter(i,t.chart.data)})),t.options.reverse&&i.reverse(),t.legendItems=i},afterBuildLabels:hn,beforeFit:hn,fit:function(){var t=this,e=t.options,i=e.labels,n=e.display,a=t.ctx,o=ut.options._parseFont(i),r=o.size,s=t.legendHitBoxes=[],l=t.minSize,d=t.isHorizontal();if(d?(l.width=t.maxWidth,l.height=n?10:0):(l.width=n?10:0,l.height=t.maxHeight),n)if(a.font=o.string,d){var u=t.lineWidths=[0],h=0;a.textAlign="left",a.textBaseline="top",ut.each(t.legendItems,function(t,e){var n=fn(i,r)+r/2+a.measureText(t.text).width;(0===e||u[u.length-1]+n+i.padding>l.width)&&(h+=r+i.padding,u[u.length-(e>0?0:1)]=i.padding),s[e]={left:0,top:0,width:n,height:r},u[u.length-1]+=n+i.padding}),l.height+=h}else{var c=i.padding,f=t.columnWidths=[],g=i.padding,p=0,m=0,v=r+c;ut.each(t.legendItems,function(t,e){var n=fn(i,r)+r/2+a.measureText(t.text).width;e>0&&m+v>l.height-c&&(g+=p+i.padding,f.push(p),p=0,m=0),p=Math.max(p,n),m+=v,s[e]={left:0,top:0,width:n,height:r}}),g+=p,f.push(p),l.width+=g}t.width=l.width,t.height=l.height},afterFit:hn,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var t=this,e=t.options,i=e.labels,n=st.global,a=n.defaultColor,o=n.elements.line,r=t.width,s=t.lineWidths;if(e.display){var l,d=t.ctx,u=cn(i.fontColor,n.defaultFontColor),h=ut.options._parseFont(i),c=h.size;d.textAlign="left",d.textBaseline="middle",d.lineWidth=.5,d.strokeStyle=u,d.fillStyle=u,d.font=h.string;var f=fn(i,c),g=t.legendHitBoxes,p=t.isHorizontal();l=p?{x:t.left+(r-s[0])/2+i.padding,y:t.top+i.padding,line:0}:{x:t.left+i.padding,y:t.top+i.padding,line:0};var m=c+i.padding;ut.each(t.legendItems,function(n,u){var h=d.measureText(n.text).width,v=f+c/2+h,b=l.x,x=l.y;p?u>0&&b+v+i.padding>t.left+t.minSize.width&&(x=l.y+=m,l.line++,b=l.x=t.left+(r-s[l.line])/2+i.padding):u>0&&x+m>t.top+t.minSize.height&&(b=l.x=b+t.columnWidths[l.line]+i.padding,x=l.y=t.top+i.padding,l.line++),function(t,i,n){if(!(isNaN(f)||f<=0)){d.save();var r=cn(n.lineWidth,o.borderWidth);if(d.fillStyle=cn(n.fillStyle,a),d.lineCap=cn(n.lineCap,o.borderCapStyle),d.lineDashOffset=cn(n.lineDashOffset,o.borderDashOffset),d.lineJoin=cn(n.lineJoin,o.borderJoinStyle),d.lineWidth=r,d.strokeStyle=cn(n.strokeStyle,a),d.setLineDash&&d.setLineDash(cn(n.lineDash,o.borderDash)),e.labels&&e.labels.usePointStyle){var s=f*Math.SQRT2/2,l=t+f/2,u=i+c/2;ut.canvas.drawPoint(d,n.pointStyle,s,l,u)}else 0!==r&&d.strokeRect(t,i,f,c),d.fillRect(t,i,f,c);d.restore()}}(b,x,n),g[u].left=b,g[u].top=x,function(t,e,i,n){var a=c/2,o=f+a+t,r=e+a;d.fillText(i.text,o,r),i.hidden&&(d.beginPath(),d.lineWidth=2,d.moveTo(o,r),d.lineTo(o+n,r),d.stroke())}(b,x,n,h),p?l.x+=v+i.padding:l.y+=m})}},_getLegendItemAt:function(t,e){var i,n,a,o=this;if(t>=o.left&&t<=o.right&&e>=o.top&&e<=o.bottom)for(a=o.legendHitBoxes,i=0;i<a.length;++i)if(t>=(n=a[i]).left&&t<=n.left+n.width&&e>=n.top&&e<=n.top+n.height)return o.legendItems[i];return null},handleEvent:function(t){var e,i=this,n=i.options,a="mouseup"===t.type?"click":t.type;if("mousemove"===a){if(!n.onHover&&!n.onLeave)return}else{if("click"!==a)return;if(!n.onClick)return}e=i._getLegendItemAt(t.x,t.y),"click"===a?e&&n.onClick&&n.onClick.call(i,t.native,e):(n.onLeave&&e!==i._hoveredItem&&(i._hoveredItem&&n.onLeave.call(i,t.native,i._hoveredItem),i._hoveredItem=e),n.onHover&&e&&n.onHover.call(i,t.native,e))}});function pn(t,e){var i=new gn({ctx:t.ctx,options:e,chart:t});ke.configure(t,i,e),ke.addBox(t,i),t.legend=i}var mn={id:"legend",_element:gn,beforeInit:function(t){var e=t.options.legend;e&&pn(t,e)},beforeUpdate:function(t){var e=t.options.legend,i=t.legend;e?(ut.mergeIf(e,st.global.legend),i?(ke.configure(t,i,e),i.options=e):pn(t,e)):i&&(ke.removeBox(t,i),delete t.legend)},afterEvent:function(t,e){var i=t.legend;i&&i.handleEvent(e)}},vn=ut.noop;st._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var bn=pt.extend({initialize:function(t){ut.extend(this,t),this.legendHitBoxes=[]},beforeUpdate:vn,update:function(t,e,i){var n=this;return n.beforeUpdate(),n.maxWidth=t,n.maxHeight=e,n.margins=i,n.beforeSetDimensions(),n.setDimensions(),n.afterSetDimensions(),n.beforeBuildLabels(),n.buildLabels(),n.afterBuildLabels(),n.beforeFit(),n.fit(),n.afterFit(),n.afterUpdate(),n.minSize},afterUpdate:vn,beforeSetDimensions:vn,setDimensions:function(){var t=this;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={width:0,height:0}},afterSetDimensions:vn,beforeBuildLabels:vn,buildLabels:vn,afterBuildLabels:vn,beforeFit:vn,fit:function(){var t=this,e=t.options,i=e.display,n=t.minSize,a=ut.isArray(e.text)?e.text.length:1,o=ut.options._parseFont(e),r=i?a*o.lineHeight+2*e.padding:0;t.isHorizontal()?(n.width=t.maxWidth,n.height=r):(n.width=r,n.height=t.maxHeight),t.width=n.width,t.height=n.height},afterFit:vn,isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},draw:function(){var t=this,e=t.ctx,i=t.options;if(i.display){var n,a,o,r=ut.options._parseFont(i),s=r.lineHeight,l=s/2+i.padding,d=0,u=t.top,h=t.left,c=t.bottom,f=t.right;e.fillStyle=ut.valueOrDefault(i.fontColor,st.global.defaultFontColor),e.font=r.string,t.isHorizontal()?(a=h+(f-h)/2,o=u+l,n=f-h):(a="left"===i.position?h+l:f-l,o=u+(c-u)/2,n=c-u,d=Math.PI*("left"===i.position?-.5:.5)),e.save(),e.translate(a,o),e.rotate(d),e.textAlign="center",e.textBaseline="middle";var g=i.text;if(ut.isArray(g))for(var p=0,m=0;m<g.length;++m)e.fillText(g[m],0,p,n),p+=s;else e.fillText(g,0,0,n);e.restore()}}});function xn(t,e){var i=new bn({ctx:t.ctx,options:e,chart:t});ke.configure(t,i,e),ke.addBox(t,i),t.titleBlock=i}var yn={},kn=un,wn=mn,Mn={id:"title",_element:bn,beforeInit:function(t){var e=t.options.title;e&&xn(t,e)},beforeUpdate:function(t){var e=t.options.title,i=t.titleBlock;e?(ut.mergeIf(e,st.global.title),i?(ke.configure(t,i,e),i.options=e):xn(t,e)):i&&(ke.removeBox(t,i),delete t.titleBlock)}};for(var _n in yn.filler=kn,yn.legend=wn,yn.title=Mn,ai.helpers=ut,function(){function t(t,e,i){var n;return"string"==typeof t?(n=parseInt(t,10),-1!==t.indexOf("%")&&(n=n/100*e.parentNode[i])):n=t,n}function e(t){return null!=t&&"none"!==t}function i(i,n,a){var o=document.defaultView,r=ut._getParentNode(i),s=o.getComputedStyle(i)[n],l=o.getComputedStyle(r)[n],d=e(s),u=e(l),h=Number.POSITIVE_INFINITY;return d||u?Math.min(d?t(s,i,a):h,u?t(l,r,a):h):"none"}ut.where=function(t,e){if(ut.isArray(t)&&Array.prototype.filter)return t.filter(e);var i=[];return ut.each(t,function(t){e(t)&&i.push(t)}),i},ut.findIndex=Array.prototype.findIndex?function(t,e,i){return t.findIndex(e,i)}:function(t,e,i){i=void 0===i?t:i;for(var n=0,a=t.length;n<a;++n)if(e.call(i,t[n],n,t))return n;return-1},ut.findNextWhere=function(t,e,i){ut.isNullOrUndef(i)&&(i=-1);for(var n=i+1;n<t.length;n++){var a=t[n];if(e(a))return a}},ut.findPreviousWhere=function(t,e,i){ut.isNullOrUndef(i)&&(i=t.length);for(var n=i-1;n>=0;n--){var a=t[n];if(e(a))return a}},ut.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},ut.almostEquals=function(t,e,i){return Math.abs(t-e)<i},ut.almostWhole=function(t,e){var i=Math.round(t);return i-e<t&&i+e>t},ut.max=function(t){return t.reduce(function(t,e){return isNaN(e)?t:Math.max(t,e)},Number.NEGATIVE_INFINITY)},ut.min=function(t){return t.reduce(function(t,e){return isNaN(e)?t:Math.min(t,e)},Number.POSITIVE_INFINITY)},ut.sign=Math.sign?function(t){return Math.sign(t)}:function(t){return 0==(t=+t)||isNaN(t)?t:t>0?1:-1},ut.log10=Math.log10?function(t){return Math.log10(t)}:function(t){var e=Math.log(t)*Math.LOG10E,i=Math.round(e);return t===Math.pow(10,i)?i:e},ut.toRadians=function(t){return t*(Math.PI/180)},ut.toDegrees=function(t){return t*(180/Math.PI)},ut._decimalPlaces=function(t){if(ut.isFinite(t)){for(var e=1,i=0;Math.round(t*e)/e!==t;)e*=10,i++;return i}},ut.getAngleFromPoint=function(t,e){var i=e.x-t.x,n=e.y-t.y,a=Math.sqrt(i*i+n*n),o=Math.atan2(n,i);return o<-.5*Math.PI&&(o+=2*Math.PI),{angle:o,distance:a}},ut.distanceBetweenPoints=function(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},ut.aliasPixel=function(t){return t%2==0?0:.5},ut._alignPixel=function(t,e,i){var n=t.currentDevicePixelRatio,a=i/2;return Math.round((e-a)*n)/n+a},ut.splineCurve=function(t,e,i,n){var a=t.skip?e:t,o=e,r=i.skip?e:i,s=Math.sqrt(Math.pow(o.x-a.x,2)+Math.pow(o.y-a.y,2)),l=Math.sqrt(Math.pow(r.x-o.x,2)+Math.pow(r.y-o.y,2)),d=s/(s+l),u=l/(s+l),h=n*(d=isNaN(d)?0:d),c=n*(u=isNaN(u)?0:u);return{previous:{x:o.x-h*(r.x-a.x),y:o.y-h*(r.y-a.y)},next:{x:o.x+c*(r.x-a.x),y:o.y+c*(r.y-a.y)}}},ut.EPSILON=Number.EPSILON||1e-14,ut.splineCurveMonotone=function(t){var e,i,n,a,o,r,s,l,d,u=(t||[]).map(function(t){return{model:t._model,deltaK:0,mK:0}}),h=u.length;for(e=0;e<h;++e)if(!(n=u[e]).model.skip){if(i=e>0?u[e-1]:null,(a=e<h-1?u[e+1]:null)&&!a.model.skip){var c=a.model.x-n.model.x;n.deltaK=0!==c?(a.model.y-n.model.y)/c:0}!i||i.model.skip?n.mK=n.deltaK:!a||a.model.skip?n.mK=i.deltaK:this.sign(i.deltaK)!==this.sign(n.deltaK)?n.mK=0:n.mK=(i.deltaK+n.deltaK)/2}for(e=0;e<h-1;++e)n=u[e],a=u[e+1],n.model.skip||a.model.skip||(ut.almostEquals(n.deltaK,0,this.EPSILON)?n.mK=a.mK=0:(o=n.mK/n.deltaK,r=a.mK/n.deltaK,(l=Math.pow(o,2)+Math.pow(r,2))<=9||(s=3/Math.sqrt(l),n.mK=o*s*n.deltaK,a.mK=r*s*n.deltaK)));for(e=0;e<h;++e)(n=u[e]).model.skip||(i=e>0?u[e-1]:null,a=e<h-1?u[e+1]:null,i&&!i.model.skip&&(d=(n.model.x-i.model.x)/3,n.model.controlPointPreviousX=n.model.x-d,n.model.controlPointPreviousY=n.model.y-d*n.mK),a&&!a.model.skip&&(d=(a.model.x-n.model.x)/3,n.model.controlPointNextX=n.model.x+d,n.model.controlPointNextY=n.model.y+d*n.mK))},ut.nextItem=function(t,e,i){return i?e>=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},ut.previousItem=function(t,e,i){return i?e<=0?t[t.length-1]:t[e-1]:e<=0?t[0]:t[e-1]},ut.niceNum=function(t,e){var i=Math.floor(ut.log10(t)),n=t/Math.pow(10,i);return(e?n<1.5?1:n<3?2:n<7?5:10:n<=1?1:n<=2?2:n<=5?5:10)*Math.pow(10,i)},ut.requestAnimFrame="undefined"==typeof window?function(t){t()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)},ut.getRelativePosition=function(t,e){var i,n,a=t.originalEvent||t,o=t.target||t.srcElement,r=o.getBoundingClientRect(),s=a.touches;s&&s.length>0?(i=s[0].clientX,n=s[0].clientY):(i=a.clientX,n=a.clientY);var l=parseFloat(ut.getStyle(o,"padding-left")),d=parseFloat(ut.getStyle(o,"padding-top")),u=parseFloat(ut.getStyle(o,"padding-right")),h=parseFloat(ut.getStyle(o,"padding-bottom")),c=r.right-r.left-l-u,f=r.bottom-r.top-d-h;return{x:i=Math.round((i-r.left-l)/c*o.width/e.currentDevicePixelRatio),y:n=Math.round((n-r.top-d)/f*o.height/e.currentDevicePixelRatio)}},ut.getConstraintWidth=function(t){return i(t,"max-width","clientWidth")},ut.getConstraintHeight=function(t){return i(t,"max-height","clientHeight")},ut._calculatePadding=function(t,e,i){return(e=ut.getStyle(t,e)).indexOf("%")>-1?i*parseInt(e,10)/100:parseInt(e,10)},ut._getParentNode=function(t){var e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e},ut.getMaximumWidth=function(t){var e=ut._getParentNode(t);if(!e)return t.clientWidth;var i=e.clientWidth,n=i-ut._calculatePadding(e,"padding-left",i)-ut._calculatePadding(e,"padding-right",i),a=ut.getConstraintWidth(t);return isNaN(a)?n:Math.min(n,a)},ut.getMaximumHeight=function(t){var e=ut._getParentNode(t);if(!e)return t.clientHeight;var i=e.clientHeight,n=i-ut._calculatePadding(e,"padding-top",i)-ut._calculatePadding(e,"padding-bottom",i),a=ut.getConstraintHeight(t);return isNaN(a)?n:Math.min(n,a)},ut.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},ut.retinaScale=function(t,e){var i=t.currentDevicePixelRatio=e||"undefined"!=typeof window&&window.devicePixelRatio||1;if(1!==i){var n=t.canvas,a=t.height,o=t.width;n.height=a*i,n.width=o*i,t.ctx.scale(i,i),n.style.height||n.style.width||(n.style.height=a+"px",n.style.width=o+"px")}},ut.fontString=function(t,e,i){return e+" "+t+"px "+i},ut.longestText=function(t,e,i,n){var a=(n=n||{}).data=n.data||{},o=n.garbageCollect=n.garbageCollect||[];n.font!==e&&(a=n.data={},o=n.garbageCollect=[],n.font=e),t.font=e;var r=0;ut.each(i,function(e){null!=e&&!0!==ut.isArray(e)?r=ut.measureText(t,a,o,r,e):ut.isArray(e)&&ut.each(e,function(e){null==e||ut.isArray(e)||(r=ut.measureText(t,a,o,r,e))})});var s=o.length/2;if(s>i.length){for(var l=0;l<s;l++)delete a[o[l]];o.splice(0,s)}return r},ut.measureText=function(t,e,i,n,a){var o=e[a];return o||(o=e[a]=t.measureText(a).width,i.push(a)),o>n&&(n=o),n},ut.numberOfLabelLines=function(t){var e=1;return ut.each(t,function(t){ut.isArray(t)&&t.length>e&&(e=t.length)}),e},ut.color=X?function(t){return t instanceof CanvasGradient&&(t=st.global.defaultColor),X(t)}:function(t){return console.error("Color.js not found!"),t},ut.getHoverColor=function(t){return t instanceof CanvasPattern||t instanceof CanvasGradient?t:ut.color(t).saturate(.5).darken(.1).rgbString()}}(),ai._adapters=si,ai.Animation=vt,ai.animationService=bt,ai.controllers=ue,ai.DatasetController=Mt,ai.defaults=st,ai.Element=pt,ai.elements=Wt,ai.Interaction=ve,ai.layouts=ke,ai.platform=Ve,ai.plugins=Ee,ai.Scale=fi,ai.scaleService=He,ai.Ticks=li,ai.Tooltip=Je,ai.helpers.each(tn,function(t,e){ai.scaleService.registerScaleType(e,t,t._defaults)}),yn)yn.hasOwnProperty(_n)&&ai.plugins.register(yn[_n]);ai.platform.initialize();var Cn=ai;return"undefined"!=typeof window&&(window.Chart=ai),ai.Chart=ai,ai.Legend=yn.legend._element,ai.Title=yn.title._element,ai.pluginService=ai.plugins,ai.PluginBase=ai.Element.extend({}),ai.canvasHelpers=ai.helpers.canvas,ai.layoutService=ai.layouts,ai.LinearScaleBase=bi,ai.helpers.each(["Bar","Bubble","Doughnut","Line","PolarArea","Radar","Scatter"],function(t){ai[t]=function(e,i){return new ai(e,ai.helpers.merge(i||{},{type:t.charAt(0).toLowerCase()+t.slice(1)}))}}),Cn});
</script></head><body style="padding: 20px"><canvas id="myChart"></canvas><script>var ctx = document.getElementById('myChart').getContext('2d');var commitMsgs = {
  "55e35c0b7e0f4b907dc21d42827b1cea4317226e": "Predicate, Equivalence derive via `.. -> a -> All'\n\n",
  "d7e0b57fda289e2715e7be86d4871503e3c09ee8": "hadrian: add a --freeze2 option to freeze stage 1 and 2\n\n",
  "d880d6b2e48268f5ed4d3eb751fe24cc833e9221": "Don't reload environment files on every setSessionDynFlags\n\nMakes `interpretPackageEnv` (which loads envirinment files) a part of\n`parseDynamicFlags` (parsing command-line arguments, which is typically\ndone once) instead of `setSessionDynFlags` (which is typically called\nseveral times). Making several (transitive) calls to `interpretPackageEnv`,\nas before, caused #18125 #16318, which should be fixed now.\n\n",
  "102cfd6784d16a0d0cc8bdf42d4de4c7b8dd0190": "Factor out HsPatSigType for pat sigs/RULE term sigs (#16762)\n\nThis implements chunks (2) and (3) of\nhttps://gitlab.haskell.org/ghc/ghc/issues/16762#note_270170. Namely,\nit introduces a dedicated `HsPatSigType` AST type, which represents\nthe types that can appear in pattern signatures and term-level `RULE`\nbinders. Previously, these were represented with `LHsSigWcType`.\nAlthough `LHsSigWcType` is isomorphic to `HsPatSigType`, the intended\nsemantics of the two types are slightly different, as evidenced by\nthe fact that they have different code paths in the renamer and\ntypechecker.\n\nSee also the new `Note [Pattern signature binders and scoping]` in\n`GHC.Hs.Types`.\n\n",
  "b17574f74173d0fa83b0def070dcba51b710be2e": "fix(documentation): Fix the RST links to GHC.Prim\n\n",
  "df021fb15bcef313f30e772997bcb263c8f34078": "Document (->) using inferred quantification for its runtime representations.\n\nFixes #18142.\n\n",
  "1a93ea57355d521b92daf4e3120de88a1f94deee": "Tweak man page for ghc command\n\nThis commit updates the ghc command's man page as followings:\n\n* Enable `man_show_urls` to show URL addresses in the `DESCRIPTION`\nsection of ghc.rst, because sphinx currently removes hyperlinks\nfor man pages.\n\n* Add a `SEE ALSO` section to point to the GHC homepage\n\n",
  "a951e1bab3dfd3e9de31b0d8bf5699a9216b181d": "GHCi: Add link to the user's guide in help message\n\nThis commit adds a link to the user's guide in ghci's\n`:help` message.\n\nNewcomers could easily reach to details of ghci.\n\n",
  "404581eaa3bf8d3f100da7610a6a38158bea17c4": "Handle single unused import\n\n",
  "1c999e5d4e63e7b407b174f51913cfa38e2dec46": "Ensure that printMinimalImports closes handle\n\nFixes #18166.\n\n",
  "c9f5a8f4653c4696a1fbb768bd0d8f672d4c7d5f": "hadrian: Tell testsuite driver about LLVM availability\n\nThis reflects the logic present in the Make build system into Hadrian.\n\nFixes #18167.\n\n",
  "c05c06596bd1b2852454af6243fc15ee852d2f45": "Improve some folds over Uniq[D]FM\n\n* Replace some non-deterministic lazy folds with\n  strict folds.\n* Replace some O(n log n) folds in deterministic order\n  with O(n) non-deterministic folds.\n* Replace some folds with set-operations on the underlying\n  IntMaps.\n\nThis reduces max residency when compiling\n`nofib/spectral/simple/Main.hs` with -O0 by about 1%.\n\nMaximum residency when compiling Cabal also seems reduced on the\norder of 3-9%.\n\n",
  "477f13bb4c5c2ba969d2c90890c51d7de01c5312": "Use Data.IntMap.disjoint\n\nData.IntMap gained a dedicated `disjoint` function in containers-0.6.2.1.\n\nThis patch applies this function where appropriate in hopes of modest\ncompiler performance improvements.\n\nCloses #16806.\n\n",
  "e9c0110ce9e753360d7e6523114109b7616f2f08": "IdInfo: Add reference to bitfield-packing ticket\n\n",
  "9bd20e83ff9b65bd5496fbb29d27072c9e4e84b9": "DmdAnal: Improve handling of precise exceptions\n\nThis patch does two things: Fix possible unsoundness in what was called\nthe \"IO hack\" and implement part 2.1 of the \"fixing precise exceptions\"\nplan in\nhttps://gitlab.haskell.org/ghc/ghc/wikis/fixing-precise-exceptions,\nwhich, in combination with !2956, supersedes !3014 and !2525.\n\n**IO hack**\n\nThe \"IO hack\" (which is a fallback to preserve precise exceptions\nsemantics and thus soundness, rather than some smart thing that\nincreases precision) is called `exprMayThrowPreciseException` now.\nI came up with two testcases exemplifying possible unsoundness (if\ntwisted enough) in the old approach:\n\n- `T13380d`: Demonstrating unsoundness of the \"IO hack\" when resorting\n             to manual state token threading and direct use of primops.\n             More details below.\n- `T13380e`: Demonstrating unsoundness of the \"IO hack\" when we have\n             Nested CPR. Not currently relevant, as we don't have Nested\n             CPR yet.\n- `T13380f`: Demonstrating unsoundness of the \"IO hack\" for safe FFI\n             calls.\n\nBasically, the IO hack assumed that precise exceptions can only be\nthrown from a case scrutinee of type `(# State# RealWorld, _ #)`. I\ncouldn't come up with a program using the `IO` abstraction that violates\nthis assumption. But it's easy to do so via manual state token threading\nand direct use of primops, see `T13380d`. Also similar code might be\ngenerated by Nested CPR in the (hopefully not too) distant future, see\n`T13380e`. Hence, we now have a more careful test in `forcesRealWorld`\nthat passes `T13380{d,e}` (and will hopefully be robust to Nested CPR).\n\n**Precise exceptions**\n\nIn #13380 and #17676 we saw that we didn't preserve precise exception\nsemantics in demand analysis. We fixed that with minimal changes in\n!2956, but that was terribly unprincipled.\n\nThat unprincipledness resulted in a loss of precision, which is tracked\nby these new test cases:\n\n- `T13380b`: Regression in dead code elimination, because !2956 was too\n             syntactic about `raiseIO#`\n- `T13380c`: No need to apply the \"IO hack\" when the IO action may not\n             throw a precise exception (and the existing IO hack doesn't\n             detect that)\n\nFixing both issues in !3014 turned out to be too complicated and had\nthe potential to regress in the future. Hence we decided to only fix\n`T13380b` and augment the `Divergence` lattice with a new middle-layer\nelement, `ExnOrDiv`, which means either `Diverges` (, throws an\nimprecise exception) or throws a *precise* exception.\n\nSee the wiki page on Step 2.1 for more implementational details:\nhttps://gitlab.haskell.org/ghc/ghc/wikis/fixing-precise-exceptions#dead-code-elimination-for-raiseio-with-isdeadenddiv-introducing-exnordiv-step-21\n\n",
  "568d7279a80cf945271f0659f11a94eea3f1433d": "GHC.Cmm.Opt: Handle MO_XX_Conv\n\nThis MachOp was introduced by 2c959a1894311e59cd2fd469c1967491c1e488f3\nbut a wildcard match in cmmMachOpFoldM hid the fact that it wasn't\nhandled. Ideally we would eliminate the match but this appears to be a\nlarger task.\n\nFixes #18141.\n\n",
  "5bcf86063c0e5b6ee0d162ea64c88fdaad89e620": "Remove duplicate Note [When to print foralls] in GHC.Core.TyCo.Ppr\n\nThere are two different Notes named `[When to print foralls]`. The\nmost up-to-date one is in `GHC.Iface.Type`, but there is a second\none in `GHC.Core.TyCo.Ppr`. The latter is less up-to-date, as it was\nwritten before GHC switched over to using ifaces to pretty-print\ntypes. I decided to just remove the latter and replace it with a\nreference to the former.\n\n[ci skip]\n\n",
  "55f0e783d234af103cf4e1d51cd31c99961c5abe": "base: Add Generic instances to various datatypes under GHC.*\n\n* GHC.Fingerprint.Types: Fingerprint\n* GHC.RTS.Flags: GiveGCStats, GCFlags, ConcFlags, DebugFlags, CCFlags, DoHeapProfile, ProfFlags, DoTrace, TraceFlags, TickyFlags, ParFlags and RTSFlags\n* GHC.Stats: RTSStats and GCStats\n* GHC.ByteOrder: ByteOrder\n* GHC.Unicode: GeneralCategory\n* GHC.Stack.Types: SrcLoc\n\nMetric Increase:\n    haddock.base\n\n",
  "a9311cd53d33439e8fe79967ba5fb85bcd114fec": "Explicit Specificity\n\nImplementation for Ticket #16393.\nExplicit specificity allows users to manually create inferred type variables,\nby marking them with braces.\nThis way, the user determines which variables can be instantiated through\nvisible type application.\n\nThe additional syntax is included in the parser, allowing users to write\nbraces in type variable binders (type signatures, data constructors etc).\nThis information is passed along through the renamer and verified in the\ntype checker.\nThe AST for type variable binders, data constructors, pattern synonyms,\npartial signatures and Template Haskell has been updated to include the\nspecificity of type variables.\n\nMinor notes:\n- Bumps haddock submodule\n- Disables pattern match checking in GHC.Iface.Type with GHC 8.8\n\n",
  "24e61aad37355fa3a5503b11a60ab7b314a3f405": "Lint should say when it is checking a rule\n\nIt is rather confusing that when lint finds an error in a rule attached\nto a binder, it reports the error as in the RHS, not the rule:\n  ...\n  In the RHS of foo\n\nWe add a clarifying line:\n  ...\n  In the RHS of foo\n  In a rule attached to foo\n\nThe implication that the rule lives inside the RHS is a bit odd, but\nthis niggle is already present for unfoldings, whose pattern we are\nfollowing.\n\n",
  "78c6523c5106fc56b653fc14fda5741913da8fdc": "nonmoving: Optimise the write barrier\n\n",
  "13f6c9d0376214b22d4cd16bd3a8cd7b8d864990": "Refactor linear reg alloc to remember past assignments.\n\nWhen assigning registers we now first try registers we\nassigned to in the past, instead of picking the \"first\"\none.\n\nThis is in extremely helpful when dealing with loops for\nwhich variables are dead for part of the loop.\n\nThis is important for patterns like this:\n\n        foo = arg1\n    loop:\n        use(foo)\n        ...\n        foo = getVal()\n        goto loop;\n\nThere we:\n* assign foo to the register of arg1.\n* use foo, it's dead after this use as it's overwritten after.\n* do other things.\n* look for a register to put foo in.\n\nIf we pick an arbitrary one it might differ from the register the\nstart of the loop expect's foo to be in.\nTo fix this we simply look for past register assignments for\nthe given variable. If we find one and the register is free we\nuse that register.\n\nThis reduces the need for fixup blocks which match the register\nassignment between blocks. In the example above between the end\nand the head of the loop.\n\nThis patch also moves branch weight estimation ahead of register\nallocation and adds a flag to control it (cmm-static-pred).\n* It means the linear allocator is more likely to assign the hotter\n  code paths first.\n* If it assign these first we are:\n  + Less likely to spill on the hot path.\n  + Less likely to introduce fixup blocks on the hot path.\n\nThese two measure combined are surprisingly effective. Based on nofib\nwe get in the mean:\n\n* -0.9% instructions executed\n* -0.1% reads/writes\n* -0.2% code size.\n* -0.1% compiler allocations.\n* -0.9% compile time.\n* -0.8% runtime.\n\nMost of the benefits are simply a result of removing redundant moves\nand spills.\n\nReduced compiler allocations likely are the result of less code being\ngenerated. (The added lookup is mostly non-allocating).\n\n",
  "edc2cc588add3f23b3650f15d3f495943f2c06f9": "NCG: Codelayout: Distinguish conditional and other branches.\n\nIn #18053 we ended up with a suboptimal code layout because\nthe code layout algorithm didn't distinguish between conditional\nand unconditional control flow.\n\nWe can completely eliminate unconditional control flow instructions\nby placing blocks next to each other, not so much for conditionals.\n\nIn terms of implementation we simply give conditional branches less\nweight before computing the layout.\n\nFixes #18053\n\n",
  "b7a6b2f4c690a9711339462114a538a85dcb7d83": "gitlab-ci: Set locale to C.UTF-8.\n\n",
  "a8c27cf6eef51adfa6ac9931d4f620645dc24dd3": "Allow spaces in GHCi :script file names\n\nThis patch updates the user interface of GHCi so that file names passed\nto the ':script' command may contain spaces escaped with a backslash.\n\nFor example:\n\n  :script foo\\ bar.script\n\nThe implementation uses a modified version of 'words' that does not\nbreak on escaped spaces.\n\nFixes #18027.\n\n",
  "82663959d2f1ddbb514a652593bc8064fd69d6aa": "Add extra tests for GHCi :script syntax checks\n\nThe syntax for GHCi's \":script\" command allows for only a single file\nname to be passed as an argument. This patch adds a test for the cases\nin which a file name is missing or multiple file names are passed.\n\nRelated to #T18027.\n\n",
  "a0b79e1b16887371d5cd14d53a607772ca730fb5": "Allow GHCi :script file names in double quotes\n\nThis patch updates the user interface of GHCi so that file names passed\nto the ':script' command can be wrapped in double quotes.\n\nFor example:\n\n  :script \"foo bar.script\"\n\nThe implementation uses a modified version of 'words' that treats\ncharacter sequences enclosed in double quotes as single words.\n\nFixes #18027.\n\n",
  "cf5663300c3d8b8b3c7dc2cd0dce2c923ec68987": "Update documentation for GHCi :script\n\nThis patch adds the fixes that allow for file names containing spaces to\nbe passed to GHCi's ':script' command to the release notes for 8.12 and\nexpands the user-guide documentation for ':script' by mentioning how\nsuch file names can be passed.\n\nRelated to #18027.\n\n",
  "0004ccb885e534c386ceae21580fc59ec7ad0ede": "llvmGen: Consider Relocatable read-only data as not constantReferences: #18137\n\n",
  "964d3ea21e734a4b2ad3ab97955274a003242121": "Use `Checker` for `tc_pat`\n\n",
  "b797aa420b65c8ee214a4fc94813d0d597352bb4": "Use `Checker` for `tc_lpat` and `tc_lpats`\n\n",
  "5108e84abb102920ab28e3aeb083ab6e483eb2f6": "More judiciously panic in `ts_pat`\n\n",
  "510e04515bb3eaed95d374d685b5322ad7e6389d": "Put `PatEnv` first in `GHC.Tc.Gen.Pat.Checker`\n\n",
  "cb4231db322f4a2bb146c456852df6cdf1498dca": "Tiny cleaup eta-reduce away a function argument\n\nIn GHC, not in the code being compiled!\n\n",
  "6890c38d4568ca444cccc47dd1a86c5e020c3521": "Use braces with do in `SplicePat` case for consistency\n\n",
  "3451584f98d4a6b26dba4079b9a703e70a49a3ab": "Fix spelling mistakes and typos\n\n",
  "b552e53136abfd6d728563338df99bf899d16139": "Add INLINABLE pragmas to Enum list producers\n\nThe INLINABLE pragmas ensure that we export stable (unoptimised) unfoldings in\nthe interface file so we can do list fusion at usage sites.\n\nRelated tickets: #15185, #8763, #18178.\n\n",
  "e748006355d85fcddd17ba206873b0051219abb1": "Piggyback on Enum Word methods for Word64\n\nIf we are on a 64 bit platform, we can use the efficient Enum Word\nmethods for the Enum Word64 instance.\n\n",
  "892b0c41816fca4eeea42ca03a43aac473311837": "Document INLINE(ABLE) pragmas that enable fusion\n\n",
  "2b363ebb988cbf8c92df24eef5366293a80ecb19": "MR template should ask for key part\n",
  "a95bbd0bdf06d7d61b0bef6de77b59ca31b2c32d": "Make `Int`'s `mod` and `rem` strict in their first arguments\n\nThey used to be strict until 4d2ac2d (9 years ago).\n\nIt's obviously better to be strict for performance reasons.\nIt also blocks #18067.\n\nNoFib results:\n\n```\n--------------------------------------------------------------------------------\n        Program         Allocs    Instrs\n--------------------------------------------------------------------------------\n        integer          -1.1%     +0.4%\n   wheel-sieve2         +21.2%    +20.7%\n--------------------------------------------------------------------------------\n            Min          -1.1%     -0.0%\n            Max         +21.2%    +20.7%\n Geometric Mean          +0.2%     +0.2%\n```\n\nThe regression in `wheel-sieve2` is due to reboxing that likely will go\naway with the resolution of #18067. See !3282 for details.\n\nFixes #18187.\n\n",
  "d3d055b8d10a549e42d18ae4859bc902f939f534": "Clarify pitfalls of NegativeLiterals; see #18022.\n",
  "1b508a9e14c7c894ff4f080f099f3947813f41ec": "Fix wording in primops documentation to reflect the correct reasoning:\n\n* Besides resizing functions, shrinking ones also mutate the\n  size of a mutable array and because of those two `sizeofMutabeByteArray`\n  and `sizeofSmallMutableArray` are now deprecated\n* Change reference in documentation to the newer functions `getSizeof*`\n  instead of `sizeof*` for shrinking functions\n* Fix incorrect mention of \"byte\" instead of \"small\"\n\n",
  "4ca0c8a17b9d3a7e8ff8a93cc9e83be5173f8e14": "Don't variable-length encode magic iface constant.\n\nWe changed to use variable length encodings for many types by default,\nincluding Word32. This makes sense for numbers but not when Word32 is\nmeant to represent four bytes.\n\nI added a FixedLengthEncoding newtype to Binary who's instances\ninterpret their argument as a collection of bytes instead of a number.\n\nWe then use this when writing/reading magic numbers to the iface file.\n\nI also took the libery to remove the dummy iface field.\n\nThis fixes #18180.\n\n",
  "a127508137ba69d2fe1e563d2bbb9fdd9120ae85": "Add a regression test for #11506\n\nThe testcase works now.\nSee explanation in https://gitlab.haskell.org/ghc/ghc/issues/11506#note_273202\n\n",
  "8a816e5fbe02c476f51ec92563cad8247ffc90ba": "Sort deterministically metric output\n\nPreviously, we sorted according to the test name and way,\nbut the metrics (max_bytes_used/peak_megabytes_allocated etc.)\nwere appearing in nondeterministic order.\n\n",
  "566cc73f46d67e2b36fda95d0253067bb0ecc12f": "Move isDynLinkName into GHC.Types.Name\n\nIt doesn't belong into GHC.Unit.State\n\n",
  "d830bbc9921bcc59164a0a18f0e0874ae4ce226e": "docs: fix formatting and add some links\n\n[skip ci]\n\n",
  "49301ad6226d9a83d110bee8c419615dd94f5ded": "Implement cstringLength# and FinalPtr\n\nThis function and its accompanying rule resolve issue #5218.\nA future PR to the bytestring library will make the internal\nData.ByteString.Internal.unsafePackAddress compute string length\nwith cstringLength#. This will improve the status quo because it is\neligible for constant folding.\n\nAdditionally, introduce a new data constructor to ForeignPtrContents\nnamed FinalPtr. This additional data constructor, when used in the\nIsString instance for ByteString, leads to more Core-to-Core\noptimization opportunities, fewer runtime allocations, and smaller\nbinaries.\n\nAlso, this commit re-exports all the functions from GHC.CString\n(including cstringLength#) in GHC.Exts. It also adds a new test\ndriver. This test driver is used to perform substring matches on Core\nthat is dumped after all the simplifier passes. In this commit, it is\nused to check that constant folding of cstringLength# works.\n\n",
  "dcd6bdcce57430d08b335014625722c487ea08e4": "simplCore: Ignore ticks in rule templates\n\nThis fixes #17619, where a tick snuck in to the template of a rule,\nresulting in a panic during rule matching. The tick in question was\nintroduced via post-inlining, as discussed in `Note [Simplifying\nrules]`. The solution we decided upon was to simply ignore ticks in the\nrule template, as discussed in `Note [Tick annotations in RULE\nmatching]`.\n\nFixes #18162.\nFixes #17619.\n\n",
  "82cb8913b38d44ef20e928ff8b08f3f0770ebf80": "Fix #18145 and also avoid needless work with implicit vars\n\n - `forAllOrNothing` now is monadic, so we can trace whether we bind\n   an explicit `forall` or not.\n\n - #18145 arose because the free vars calculation was needlessly\n   complex. It is now greatly simplified.\n\n - Replaced some other implicit var code with `filterFreeVarsToBind`.\n\nCo-authored-by: Ryan Scott <ryan.gl.scott@gmail.com>\n\n",
  "a60dc83552c38af9bbc159bd4e092531196db9c0": "Bump process submodule\n\nFixes #17926.\n\n",
  "856adf54ab50fc3be66d17a0b94ba3074453b279": "users-guide: Clarify meaning of -haddock flag\n\nFixes #18206.\n\n",
  "7ae57afd7abee9dec1050d9feace254ac04800bc": "git: Add ignored commits file\n\nThis can be used to tell git to ignore bulk renaming commits like the\nrecently-finished module hierarchy refactoring. Configured with,\n\n    git config blame.ignoreRevsFile .git-ignore-revs\n\n",
  "63d30e60b9ab76ed48fa9539957e7b29a2a8c611": "Add hie-bios script for windows systems\nIt is a direct translation of the sh script\n\n",
  "59182b88aaa72d346b480b6aa14a9244915e1189": "Honour previous values for CABAL and CABFLAGS\nThe immediate goal is let the hie-bios.bat script\nset CABFLAGS with `-v0` and remove all cabal output\nexcept the compiler arguments\n\n",
  "932dc54e13a8e2f60ea90af98682cc1011b9533e": "Add specific configuration for windows in hie.yaml\n\n",
  "e0eda0707d6cc3d5a85cfb13543df61623e82070": "Remove not needed hie-bios output\n\n",
  "a0ea59d641d400543e9e803007500da01eedf48a": "Move Config module into GHC.Settings\n\n",
  "37430251c3f684c46e893552dba78653d80e5243": "Rename GHC.Core.Arity into GHC.Core.Opt.Arity\n\n",
  "a426abb9b41de6097e888b9fdca7b275306b17c9": "Rename GHC.Hs.Types into GHC.Hs.Type\n\nSee discussion in https://gitlab.haskell.org/ghc/ghc/issues/13009#note_268610\n\n",
  "1c91a7a095331d8c776f6ecd74803026e0104502": "Bump haddock submodule\n\n",
  "66bd24d197251b9907cbffba3d5d8a3f5e3c2e80": "Add orderingTyCon to wiredInTyCons (#18185)\n\n`Ordering` needs to be wired in for use in the built-in `CmpNat` and\n`CmpSymbol` type families, but somehow it was never added to the list\nof `wiredInTyCons`, leading to the various oddities observed\nin #18185. Easily fixed by moving `orderingTyCon` from\n`basicKnownKeyNames` to `wiredInTyCons`.\n\nFixes #18185.\n\n",
  "01c43634d443bd3cc0b95b43a7180e12230b845d": "Remove unused hs-boot file\n\n",
  "7a07aa718110071ee30eebadf0b4b372e8e7fc8e": "Hadrian: fix cross-compiler build (#16051)\n\n",
  "15ccca16e2ecdde0a4e646c6d7515e00a7f364d3": "Hadrian: fix distDir per stage\n\n",
  "b420fb2474650e6dfbd66afd199f28492f900f75": "Hadrian: fix hp2ps error during cross-compilation\n\nFixed by @alp (see https://gitlab.haskell.org/ghc/ghc/issues/16051#note_274265)\n\n",
  "cd339ef0e8ce940902df79ed1d93b3af50ea6f77": "Make Unicode brackets opening/closing tokens (#18225)\n\nThe tokens `[|`, `|]`, `(|`, and `|)` are opening/closing tokens as\ndescribed in GHC Proposal #229. This commit makes the unicode\nvariants (`\u27e6`, `\u27e7`, `\u2987`, and `\u2988`) act the same as their ASCII\ncounterparts.\n\n",
  "013d71204be44d660f01f8eb255db2d48b832421": "Revert \"Specify kind variables for inferred kinds in base.\"\n\nAs noted in !3132, this has rather severe knock-on consequences in\nuser-code. We'll need to revisit this before merging something along\nthese lines.\n\nThis reverts commit 9749fe1223d182b1f8e7e4f7378df661c509f396.\n\n",
  "4c4312edd988b8aeeb65e095056743c30678df15": "Coverage: Drop redundant ad-hoc boot module check\n\nTo determine whether the module is a boot module\nCoverage.addTicksToBinds was checking for a `boot` suffix in the module\nsource filename. This is quite ad-hoc and shouldn't be necessary; the\ncallsite in `deSugar` already checks that the module isn't a boot\nmodule.\n\n",
  "1abf3c844821c98dad7f6f5b23cc3f7889dce64c": "Coverage: Make tickBoxCount strict\n\nThis could otherwise easily cause a leak of (+) thunks.\n\n",
  "b28137505a2fc3a15f2c0ba31c39c1869ce65cdc": "Coverage: Make ccIndices strict\n\nThis just seems like a good idea.\n\n",
  "02e278eb2ace60cf2acadd2f632b51b9017d5b56": "Coverage: Don't produce ModBreaks if not HscInterpreted\n\nemptyModBreaks contains a bottom and consequently it's important that we\ndon't use it unless necessary.\n\n",
  "b8c014ce27c279e0d506d5391a4e9bfa7f1c31f2": "Coverage: Factor out addMixEntry\n\n",
  "53814a6424240ab50201fdde81a6e7832c1aad3d": "Add info about typeclass evidence to .hie files\n\nSee `testsuite/tests/hiefile/should_run/HieQueries.hs` and\n`testsuite/tests/hiefile/should_run/HieQueries.stdout` for an example of this\n\nWe add two new fields, `EvidenceVarBind` and `EvidenceVarUse` to the\n`ContextInfo` associated with an Identifier. These are associated with the\nappropriate identifiers for the evidence variables collected when we come across\n`HsWrappers`, `TcEvBinds` and `IPBinds` while traversing the AST.\n\nInstance dictionary and superclass selector dictionaries from `tcg_insts` and\nclasses defined in `tcg_tcs` are also recorded in the AST as originating from\ntheir definition span\n\nThis allows us to save a complete picture of the evidence constructed by the\nconstraint solver, and will let us report this to the user, enabling features\nlike going to the instance definition from the invocation of a class method(or\nany other method taking a constraint) and finding all usages of a particular\ninstance.\n\nAdditionally,\n\n- Mark NodeInfo with an origin so we can differentiate between bindings\n  origininating in the source vs those in ghc\n- Along with typeclass evidence info, also include information on Implicit\n  Parameters\n- Add a few utility functions to HieUtils in order to query the new info\n\nUpdates haddock submodule\n\n",
  "6604906c8cfa37f5780a6d5c40506b751b1740db": "Make WorkWrap.Lib.isWorkerSmallEnough aware of the old arity\n\nWe should allow a wrapper with up to 82 parameters when the original\nfunction had 82 parameters to begin with.\n\nI verified that this made no difference on NoFib, but then again\nit doesn't use huge records...\n\nFixes #18122.\n\n",
  "cf772f19c06944f0fd03b4bdcd4a49e437084ba5": "Enhance Note [About units] for Backpack\n\n",
  "ede241268171e8eee1e750d88ff356ddbfc357f2": "core-spec: Modify file paths according to new module hierarchy\n\nThis patch updates file paths according to new module hierarchy [1]:\n\n  * GHC/Core.hs                <= coreSyn/CoreSyn.hs\n  * GHC/Core/Coercion.hs       <= types/Coercion.hs\n  * GHC/Core/Coercion/Axiom.hs <= types/CoAxiom.hs\n  * GHC/Core/Coercion/Opt.hs   <= types/OptCoercion.hs\n  * GHC/Core/DataCon.hs        <= basicTypes/DataCon.hs\n  * GHC/Core/FamInstEnv.hs     <= types/FamInstEnv.hs\n  * GHC/Core/Lint.hs           <= coreSyn/CoreLint.hs\n  * GHC/Core/Subst.hs          <= coreSyn/CoreSubst.hs\n  * GHC/Core/TyCo/Rep.hs       <= types/TyCoRep.hs\n  * GHC/Core/TyCon.hs          <= types/TyCon.hs\n  * GHC/Core/Type.hs           <= types/Type.hs\n  * GHC/Core/Unify.hs          <= types/Unify.hs\n  * GHC/Types/Literal.hs       <= basicTypes/Literal.hs\n  * GHC/Types/Var.hs           <= basicTypes/Var.hs\n\n[1]: https://gitlab.haskell.org/ghc/ghc/-/wikis/Make-GHC-codebase-more-modular\n\n[skip ci]\n\n",
  "04750304deae2128a8350e28224e1f62ae949820": "eventlog: Fix racy flushing\n\nPreviously no attempt was made to avoid multiple threads writing their\ncapability-local eventlog buffers to the eventlog writer simultaneously.\nThis could result in multiple eventlog streams being interleaved. Fix\nthis by documenting that the EventLogWriter's write() and flush()\nfunctions may be called reentrantly and fix the default writer to\nprotect its FILE* by a mutex.\n\nFixes #18210.\n\n",
  "d6203f24cf421749616a247c047a9b44192f963a": "Make `identifier` parse unparenthesized `->` (#18060)\n\n",
  "28deee2872d2501a781ae5b89f1db3dbf796ee74": "GHC.Core.Unfold: Refactor traceInline\n\nThis reduces duplication as well as fixes a bug wherein -dinlining-check\nwould override -ddump-inlinings. Moreover, the new variant\n\n",
  "1f393e1e0a2998fe67cfd06501e35f495758b98f": "Avoid unnecessary allocations due to tracing utilities\n\nWhile ticky-profiling the typechecker I noticed that hundreds of\nmillions of SDocs are being allocated just in case -ddump-*-trace is\nenabled. This is awful.\n\nWe avoid this by ensuring that the dump flag check is inlined into the\ncall site, ensuring that the tracing document needn't be allocated\nunless it's actually needed.\n\nSee Note [INLINE conditional tracing utilities] for details.\n\nFixes #18168.\n\nMetric Decrease:\n  T9961\n  haddock.Cabal\n  haddock.base\n  haddock.compiler\n\n",
  "5f621a78217237a4bdfb299b68827da6cc8f357e": "Add Semigroup/Monoid for Q (#18123)\n\n",
  "dc5f004c4dc27d78d3415adc54e9b6694b865145": "Fix #18071\n\nRun the core linter on candidate instances to ensure they are\nwell-kinded.\n\nBetter handle quantified constraints by using a CtWanted to avoid\nhaving unsolved constraints thrown away at the end by the solver.\n\n",
  "10e6982c6117e55b0151dc456e75ebc4798df73f": "FloatOut: Only eta-expand dead-end RHS if arity will increase (#18231)\n\nOtherwise we risk turning trivial RHS into non-trivial RHS, introducing\nunnecessary bindings in the next Simplifier run, resulting in more\nchurn.\n\nFixes #18231.\n\n",
  "08dab5f74e021ad054112cc5f6bb7e55d8796cd7": "DmdAnal: Recognise precise exceptions from case alternatives (#18086)\n\nConsider\n\n```hs\nm :: IO ()\nm = do\n  putStrLn \"foo\"\n  error \"bar\"\n```\n\n`m` (from #18086) always throws a (precise or imprecise) exception or\ndiverges. Yet demand analysis infers `<L,A>` as demand signature instead\nof `<L,A>x` for it.\n\nThat's because the demand analyser sees `putStrLn` occuring in a case\nscrutinee and decides that it has to `deferAfterPreciseException`,\nbecause `putStrLn` throws a precise exception on some control flow\npaths. This will mask the `botDiv` `Divergence`of the single case alt\ncontaining `error` to `topDiv`. Since `putStrLn` has `topDiv` itself,\nthe final `Divergence` is `topDiv`.\n\nThis is easily fixed: `deferAfterPreciseException` works by `lub`ing\nwith the demand type of a virtual case branch denoting the precise\nexceptional control flow. We used `nopDmdType` before, but we can be\nmore precise and use `exnDmdType`, which is `nopDmdType` with `exnDiv`.\n\nNow the `Divergence` from the case alt will degrade `botDiv` to `exnDiv`\ninstead of `topDiv`, which combines with the result from the scrutinee\nto `exnDiv`, and all is well.\n\nFixes #18086.\n\n",
  "aef95f11f946f7d3f2c4c9b695d632cbfc4a993d": "Ticky-ticky: Record DataCon name in ticker name\n\nThis makes it significantly easier to spot the nature of\nallocations regressions and comes at a reasonably low cost.\n\n",
  "8f021b8c474f328441982c90c6a12f716b5607eb": "hadrian: Don't track GHC's verbosity argument\n\nTeach hadrian to ignore GHC's -v argument in its recompilation check,\nthus fixing #18131.\n\n",
  "13d9380b1fc8b67057a9ad4fffe244040a7f9bc0": "Rip out CmmStackInfo(updfr_space)\n\nAs noted in #18232, this field is currently completely unused and\nmoreover doesn't have a clear meaning.\n\n",
  "f10d11fa49fa9a7a506c4fdbdf86521c2a8d3495": "Fix \"build/elem\" RULE.\n\nAn redundant constraint prevented the rule from matching.\n\nFixing this allows a call to elem on a known list to be translated\ninto a series of equality checks, and eventually a simple case\nexpression.\n\nSurprisingly this seems to regress elem for strings. To avoid\nthis we now also allow foldrCString to inline and add an UTF8\nvariant. This results in elem being compiled to a tight\nnon-allocating loop over the primitive string literal which\nperforms a linear search.\n\nIn the process this commit adds UTF8 variants for some of the\nfunctions in GHC.CString. This is required to make this work for\nboth ASCII and UTF8 strings.\n\nThere are also small tweaks to the CString related rules.\nWe now allow ourselfes the luxury to compare the folding function\nvia eqExpr, which helps to ensure the rule fires before we inline\nfoldrCString*. Together with a few changes to allow matching on both\nthe UTF8 and ASCII variants of the CString functions.\n\n",
  "bbeb2389596df61ace5778ec580895ea32cc3c6f": "CoreToStg: Add Outputable ArgInfo instance\n\n",
  "0e3361ca414012e3ec40a260c2323986ce770db6": "Make Lint check return type of a join point\n\nConsider\n   join x = rhs in body\nIt's important that the type of 'rhs' is the same as the type of\n'body', but Lint wasn't checking that invariant.\n\nNow it does!  This was exposed by investigation into !3113.\n\n",
  "c49f7df02ff02c8f09e6a6e00a271b867ca6b092": "Do not float join points in exprIsConApp_maybe\n\nWe hvae been making exprIsConApp_maybe cleverer in recent times:\n\n    commit b78cc64e923716ac0512c299f42d4d0012306c05\n    Date:   Thu Nov 15 17:14:31 2018 +0100\n    Make constructor wrappers inline only during the final phase\n\n    commit 7833cf407d1f608bebb1d38bb99d3035d8d735e6\n    Date:   Thu Jan 24 17:58:50 2019 +0100\n    Look through newtype wrappers (Trac #16254)\n\n    commit c25b135ff5b9c69a90df0ccf51b04952c2dc6ee1\n    Date:   Thu Feb 21 12:03:22 2019 +0000\n    Fix exprIsConApp_maybe\n\nBut alas there was still a bug, now immortalised in\n  Note [Don't float join points]\nin SimpleOpt.\n\nIt's quite hard to trigger because it requires a dead\njoin point, but it came up when compiling Cabal\nCabal.Distribution.Fields.Lexer.hs, when working on\n!3113.\n\nHappily, the fix is extremly easy.  Finding the\nbug was not so easy.\n\n",
  "46720997a0b1fa2971a884adf43de096ce130a7e": "Allow simplification through runRW#\n\nBecause runRW# inlines so late, we were previously able to do very\nlittle simplification across it. For instance, given even a simple\nprogram like\n\n    case runRW# (\\s -> let n = I# 42# in n) of\n      I# n# -> f n#\n\nwe previously had no way to avoid the allocation of the I#.\n\nThis patch allows the simplifier to push strict contexts into the\ncontinuation of a runRW# application, as explained in\nin Note [Simplification of runRW#] in GHC.CoreToStg.Prep.\n\nFixes #15127.\n\nMetric Increase:\n    T9961\nMetric Decrease:\n    ManyConstructors\n\nCo-Authored-By: Simon Peyton-Jone <simonpj@microsoft.com>\n\n",
  "277c2f26e6966e0cfaa1ddcd297af44766f37958": "Eta expand un-saturated primops\n\nNow since we no longer try to predict CAFfyness we have no need for the\nsolution to #16846. Eta expanding unsaturated primop applications is\nconceptually simpler, especially in the presence of levity polymorphism.\n\nThis essentially reverts cac8dc9f51e31e4c0a6cd9bc302f7e1bc7c03beb,\nas suggested in #18079.\n\nCloses #18079.\n\n",
  "f44d7ae08442ae6227db37cacc97fe0def8017c5": "base: Scrap deprecation plan for Data.Monoid.{First,Last}\n\nSee the discussion on the libraries mailing list for context:\n\nhttps://mail.haskell.org/pipermail/libraries/2020-April/030357.html\n\n",
  "8b4948951198f93290191d4ee32f92dffed803f4": "Fix typo in documentation\n\n",
  "998450f4c67e8f701455927c9619b8d53f2b733b": "Always define USE_PTHREAD_FOR_ITIMER for FreeBSD.\n\n",
  "f9a513e064bd8a33ad6f8aa5fb8673931507eca1": "hadrian: introduce 'install' target\n\nIts logic is very simple. It `need`s the `binary-dist-dir` target\nand runs suitable `configure` and `make install` commands for the\nuser. A new `--prefix` command line argument is introduced to\nspecify where GHC should be installed.\n\n",
  "67738db10010fd28a8e997b5c8f83ea591b88a0e": "Build a threaded stage 1 if the bootstrapping GHC supports it.\n\n",
  "aac19e6caa0c94e159610f124114186ee20bcdd1": "PPC NCG: No per-symbol .section \".toc\" directives\n\nAll position independent symbols are collected during code generation\nand emitted in one go. Prepending each symbol with a .section \".toc\"\ndirective is redundant. This patch drops the per-symbol directives\nleading to smaller assembler files.\n\nFixes #18250\n\n",
  "4413828b7c507872c56719fb8920e1c2322830f8": "rts: Teach getNumProcessors to return available processors\n\nPreviously we would report the number of physical processors, which\ncan be quite wrong in a containerized setting. Now we rather return how\nmany processors are in our affinity mask when possible.\n\nI also refactored the code to prefer platform-specific since this will\nreport logical CPUs instead of physical (using\n`machdep.cpu.thread_count` on Darwin and `cpuset_getaffinity` on FreeBSD).\n\nFixes #14781.\n\n",
  "1449435c7bf1075f5cd11098d8c98b99f8fe150a": "users-guide: Note change in getNumProcessors in users guide\n\n",
  "3d96016926cc88506db416f87b6e4b68a3a0d25f": "rts: Drop compatibility shims for Windows Vista\n\nWe can now assume that the thread and processor group interfaces are\navailable.\n\n",
  "7f8f948c024c46282228243391238d09b297cd9d": "PPC NCG: Fix .size directive on powerpc64 ELF v1\n\nThanks to Sergei Trofimovich for pointing out the issue.\n\nFixes #18237\n\n",
  "7c555b054bf074a9ab612f9d93e3475bfb8c6594": "Optimize GHC.Utils.Monad.\n\nMany functions in this module are recursive and as such are marked\nloop breakers. Which means they are unlikely to get an unfolding.\n\nThis is *bad*. We always want to specialize them to specific Monads.\nWhich requires a visible unfolding at the use site.\n\nI rewrote the recursive ones from:\n\n    foo f x = ... foo x' ...\n\nto\n\n    foo f x = go x\n      where\n        go x = ...\n\nAs well as giving some pragmas to make all of them available\nfor specialization.\n\nThe end result is a reduction of allocations of about -1.4% for\nnofib/spectral/simple/Main.hs when compiled with `-O`.\n\n-------------------------\nMetric Decrease:\n    T12425\n    T14683\n    T5631\n    T9233\n    T9675\n    T9961\n    WWRec\n-------------------------\n\n",
  "8b1cb5df126b1829fca8e8caf050dff4ca9df3f3": "Windows: Bump Windows toolchain to 0.2\n\n",
  "6947231abd8c33840860ad51699b76efd4725f0e": "Simplify contexts in GHC.Iface.Ext.Ast\n\n",
  "2ee4f36c779674f7237d730460ca83aec9a6808a": "Cleanup OVERWRITING_CLOSURE logic\n\nThe code is just more confusing than it needs to be. We don't need to mix\nthe threaded check with the ldv profiling check since ldv's init already\nchecks for this. Hence they can be two separate checks. Taking the sanity\nchecking into account is also cleaner via DebugFlags.sanity. No need for\nchecking the DEBUG define.\n\nThe ZERO_SLOP_FOR_LDV_PROF and ZERO_SLOP_FOR_SANITY_CHECK definitions the\nold code had also make things a lot more opaque IMO so I removed those.\n\n",
  "6159559b5eb71ed7287998e954f96cdfb2d48f04": "Fix OVERWRITING_CLOSURE assuming closures are not inherently used\n\nThe new ASSERT in LDV_recordDead() was being tripped up by MVars when\nremoveFromMVarBlockedQueue() calls OVERWRITING_CLOSURE() via\nOVERWRITE_INFO().\n\n",
  "389920858e0b9efe5234cb7dac55d06e955768f7": "Always zero shrunk mutable array slop when profiling\n\nWhen shrinking arrays in the profiling way we currently don't always zero\nthe leftover slop. This means we can't traverse such closures in the heap\nprofiler. The old Note [zeroing slop] and #8402 have some rationale for why\nthis is so but I belive the reasoning doesn't apply to mutable\nclosures. There users already have to ensure multiple threads don't step on\neach other's toes so zeroing should be safe.\n\n",
  "b0c1f2a619855a6fa22021a3118365c49f4cc0c4": "testsuite: Add test for #18151\n\n",
  "9a99a1787da1dda15c6da7509ab678f4131c7d68": "testsuite: Add test for desugaring of PostfixOperators\n\n",
  "2b89ca5b850b4097447cc4908cbb0631011ce979": "HsToCore: Eta expand left sections\n\nStrangely, the comment next to this code already alluded to the fact\nthat even simply eta-expanding will sacrifice laziness. It's quite\nunclear how we regressed so far.\n\nSee #18151.\n\n",
  "d412d7a3783b4fc5d3078541a60996e249b4157c": "Winferred-safe-imports: Do not exit with error\n\nCurrently, when -Winferred-safe-imports is enabled, even when it is not\nturned into an error, the compiler will still exit with exit code 1 if\nthis warning was emitted.\n\nMake sure it is really treated as a warning.\n\n",
  "f945eea569993a4e5ed953f4573e6eab785f309f": "nonmoving: Optimise log2_ceil\n\n",
  "aab606e4f028d3c418aafc9710003f32f8d8fe12": "Clarify description of fromListN\n",
  "7e5220e25baedfa7ae0ec055c03cb4429dd1af05": "Apply suggestion to libraries/base/GHC/Exts.hs\n",
  "f3fb1ce9759d1ca57b9ea4acf5518df8d086688e": "Add `isInScope` check to `lintCoercion`\n\nMirrors the behaviour of `lintType`.\n\n",
  "5ac4d94607d4a898f0015114e929ee9a38118985": "Lint rhs of IfaceRule\n\n",
  "1cef6126a97ea1f406ffe5e780478f6e200c0496": "Fix wording in documentation\n\nThe duplicate \"orphan instance\" phrase here doesn't make sense, and was\nprobably an accident.\n\n",
  "5aaf08f25ef0629432c792880dfc6785ff3ec8a3": "configure: Modify aclocal.m4 according to new module hierarchy\n\nThis patch updates file paths according to new module hierarchy [1]:\n\n* Rename:\n  * compiler/GHC/Parser.hs       <= compiler/parser/Parser.hs\n  * compiler/GHC/Parser/Lexer.hs <= compiler/Parser/Lexer.hs\n\n* Add:\n  * compiler/GHC/Cmm/Lexer.hs\n\n[1]: https://gitlab.haskell.org/ghc/ghc/-/wikis/Make-GHC-codebase-more-modular\n\n",
  "15857ad856b6072d2c6a34b2bf7aa7316d7e2b12": "testsuite: Don't fail if we can't unlink __symlink_test\n\nAfterall, it's possible we were unable to create it due to lack of\nsymlink permission.\n\n",
  "4a7229ef361307e16574b85f71f473f936728890": "testsuite: Refactor ghostscript detection\n\nTamar reported that he saw crashes due to unhandled exceptions.\n\n",
  "2ab37eaf9668b5aacc953c6d01fcab9e4f181bf7": "testsuite/perf_notes: Fix ill-typed assignments\n\n",
  "e45d5b667653f4c3ffc89fe7a83eac56d60b9364": "testsuite/testutil: Fix bytes/str mismatch\n\n",
  "7002d0cbbe1581dd157b530e95c62195f37cfe00": "testsuite: Work around spurious mypy failure\n\n",
  "11390e3ab038a18c2a7bf6b2423657614a439afb": "Clean up file paths for new module hierarchy\n\nThis updates comments only.\nThis patch replaces file references according to new module hierarchy.\n\nSee also:\n* https://gitlab.haskell.org/ghc/ghc/-/wikis/Make-GHC-codebase-more-modular\n* https://gitlab.haskell.org/ghc/ghc/issues/13009\n\n",
  "8f2e5732b0eec2d99b821a7f622aee8b2c00739a": "Modify file paths to module paths for new module hierarchy\n\nThis updates comments only.\n\nThis patch replaces module references according to new module\nhierarchy [1][2].\n\nFor files under the `compiler/` directory, I replace them as\nmodule paths instead of file paths. For instance,\n`GHC.Unit.State` instead of `compiler/GHC/Unit/State.hs` [3].\n\nFor current and future haddock's markup, this patch encloses\nthe module name with \"\" [4].\n\n[1]: https://gitlab.haskell.org/ghc/ghc/-/wikis/Make-GHC-codebase-more-modular\n[2]: https://gitlab.haskell.org/ghc/ghc/issues/13009\n[3]: https://gitlab.haskell.org/ghc/ghc/-/merge_requests/3375#note_276613\n[4]: https://haskell-haddock.readthedocs.io/en/latest/markup.html#linking-to-modules\n\n",
  "68b71c4a99ef7c009e0095823950cd12408ad7fe": "Rename the singleton tuple GHC.Tuple.Unit to GHC.Tuple.Solo\n\n",
  "95da76c2b9ffe2a4fb4230de0061918de3fc89a9": "Hadrian: fix binary-dist target for cross-compilation\n\n",
  "730fcd54467e82083d56fa87e44bbe346458c531": "Improve parser error messages for the @-operator\n\nSince GHC diverges from the Haskell Report by allowing the user\nto define (@) as an infix operator, we better give a good\nerror message when the user does so unintentionally.\n\nIn general, this is rather hard to do, as some failures will be\ndiscovered only in the renamer or the type checker:\n\n\tx :: (Integer, Integer)\n\tx @ (a, b) = (1, 2)\n\nThis patch does *not* address this general case.\n\nHowever, it gives much better error messages when the binding\nis not syntactically valid:\n\n\tpairs xs @ (_:xs') = zip xs xs'\n\nBefore this patch, the error message was rather puzzling:\n\n\t<interactive>:1:1: error: Parse error in pattern: pairs\n\nAfter this patch, the error message includes a hint:\n\n\t<interactive>:1:1: error:\n\t    Parse error in pattern: pairs\n\t    In a function binding for the \u2018@\u2019 operator.\n\t    Perhaps you meant an as-pattern, which must not be surrounded by whitespace\n\n",
  "0fde53770cacb0d54f0583707ef7ceec78f92c41": "Improve parser error messages for TypeApplications\n\nWith this patch, we always parse  f @t  as a type application,\nthereby producing better error messages.\n\nThis steals two syntactic forms:\n\n* Prefix form of the @-operator in expressions. Since the @-operator is\n  a divergence from the Haskell Report anyway, this is not a major loss.\n\n* Prefix form of @-patterns. Since we are stealing loose infix form\n  anyway, might as well sacrifice the prefix form for the sake of much\n  better error messages.\n\n",
  "c68e7e1e4c0bddd8b07cd8a2b3651c8cbb4b7851": "Improve parser error messages for TemplateHaskellQuotes\n\nWhile [e| |], [t| |], [d| |], and so on, steal syntax from list\ncomprehensions, [| |] and [|| ||] do not steal any syntax.\n\nThus we can improve error messages by always accepting them in the\nlexer. Turns out the renamer already performs necessary validation.\n\n",
  "120aedbdff7dbb9b394dadabb1f431608b42de67": "gitlab-ci: Disable use of ld.lld on ARMv7\n\nIt turns out that lld non-deterministically fails on ARMv7. I suspect\nthis may be due to the a kernel regression as this only started\nhappening when we upgraded to 5.4. Nevertheless, easily avoided by\nsimply sticking with gold.\n\nWorks around #18280.\n\n",
  "d6279ff0841edee10a665275ed0d2402565fac6d": "gitlab-ci: Ensure that workaround for #18280 applies to bindisttest\n\nWe need to ensure that the `configure` flags working around #18280 are\npropagated to the bindisttest `configure` as well.\n\n",
  "cb5c31b51b021ce86890bba73276fe6f7405f5d3": "gitlab-ci: Allow ARMv7 job to fail\n\nDue to #18298.\n\n",
  "32a4ae90b50cc56f2955f489ad0cf8c7ff5e131a": "Clean up boot vs non-boot disambiguating types\n\nWe often have (ModuleName, Bool) or (Module, Bool) pairs for \"extended\"\nmodule names (without or with a unit id) disambiguating boot and normal\nmodules. We think this is important enough across the compiler that it\ndeserves a new nominal product type. We do this with synnoyms and a\nfunctor named with a `Gen` prefix, matching other newly created\ndefinitions.\n\nIt was also requested that we keep custom `IsBoot` / `NotBoot` sum type.\nSo we have it too. This means changing many the many bools to use that\ninstead.\n\nUpdates `haddock` submodule.\n\n",
  "c05756cdef800f1d8e92114222bcc480bce758b9": "docs: Add more details on InterruptibleFFI.\n\nDetails from https://gitlab.haskell.org/ghc/ghc/issues/8684\nand https://github.com/takano-akio/filelock/pull/7#discussion_r280332430\n\n",
  "1b975aedb1b74b8694d14ba8fdc5955497f8f31c": "Allow finalizeForeignPtr to be called on FinalPtr/PlainPtr.\n\nMR 2165 (commit 49301ad6226d9a83d110bee8c419615dd94f5ded) regressed\nfinalizeForeignPtr by throwing exceptions when PlainPtr was encounterd.\nThis regression did not make it into a release of GHC. Here, the\noriginal behavior is restored, and FinalPtr is given the same treatment\nas PlainPtr.\n\n",
  "2bd3929ad1b06b01c1d22d513902507eefadc131": "Fix documentation on type families not being extracted\n\nIt looks like the location of the Names used for CoAxioms on type\nfamilies are now located at their type constructors. Previously, Docs.hs\nthought the Names were located in the RHS, so the RealSrcSpan in the\ninstanceMap and getInstLoc didn't match up. Fixes #18241\n\n",
  "6735b9d94605b4c7f75e70339bfaa4207f23e52b": "GHC.Hs.Instances: Compile with -O0\n\nThis module contains exclusively Data instances, which are going to be\nslow no matter what we do. Furthermore, they are incredibly slow to\ncompile with optimisation (see #9557). Consequently we compile this with\n-O0.  See #18254.\n\n",
  "c330331adc0a686f24b94844d0eb3a0711b928d7": "Add test for #17669\n\n",
  "cab684f0857c71c40996201d6fb3ba93eb38a701": "rts: Add Windows-specific implementation of rtsSleep\n\nPreviously we would use the POSIX path, which uses `nanosleep`. However,\nit turns out that `nanosleep` is provided by `libpthread` on Windows. In\ngeneral we don't want to incur such a dependency. Avoid this by simply\nusing `Sleep` on Windows.\n\nFixes #18272.\n\n",
  "ad44b50484f27beceab8213a061aa60c7a03f7ca": "compiler: Disable use of process jobs with process < 1.6.9\n\nDue to #17926.\n\n",
  "6a4098a4bb89b3d30cca26d82b82724913062536": "[linker] Adds void printLoadedObjects(void);\n\nThis allows us to dump in-memory object code locations for debugging.\n\nFixup printLoadedObjects prototype\n\n",
  "af5e3a885ddd09dd5f550552c535af3661ff3dbf": "base: fix sign confusion in log1mexp implementation (fix #17125)\n\nauthor: claude (https://gitlab.haskell.org/trac-claude)\n\nThe correct threshold for log1mexp is -(log 2) with the current specification\nof log1mexp. This change improves accuracy for large negative inputs.\n\nTo avoid code duplication, a small helper function is added;\nit isn't the default implementation in Floating because it needs Ord.\n\nThis patch does nothing to address that the Haskell specification is\ndifferent from that in common use in other languages.\n\n",
  "2b792facab46f7cdd09d12e79499f4e0dcd4293f": "Simple subsumption\n\nThis patch simplifies GHC to use simple subsumption.\n  Ticket #17775\n\nImplements GHC proposal #287\n   https://github.com/ghc-proposals/ghc-proposals/blob/master/\n   proposals/0287-simplify-subsumption.rst\n\nAll the motivation is described there; I will not repeat it here.\nThe implementation payload:\n * tcSubType and friends become noticably simpler, because it no\n   longer uses eta-expansion when checking subsumption.\n * No deeplyInstantiate or deeplySkolemise\n\nThat in turn means that some tests fail, by design; they can all\nbe fixed by eta expansion.  There is a list of such changes below.\n\nImplementing the patch led me into a variety of sticky corners, so\nthe patch includes several othe changes, some quite significant:\n\n* I made String wired-in, so that\n    \"foo\" :: String   rather than\n    \"foo\" :: [Char]\n  This improves error messages, and fixes #15679\n\n* The pattern match checker relies on knowing about in-scope equality\n  constraints, andd adds them to the desugarer's environment using\n  addTyCsDs.  But the co_fn in a FunBind was missed, and for some reason\n  simple-subsumption ends up with dictionaries there. So I added a\n  call to addTyCsDs.  This is really part of #18049.\n\n* I moved the ic_telescope field out of Implication and into\n  ForAllSkol instead.  This is a nice win; just expresses the code\n  much better.\n\n* There was a bug in GHC.Tc.TyCl.Instance.tcDataFamInstHeader.\n  We called checkDataKindSig inside tc_kind_sig, /before/\n  solveEqualities and zonking.  Obviously wrong, easily fixed.\n\n* solveLocalEqualitiesX: there was a whole mess in here, around\n  failing fast enough.  I discovered a bad latent bug where we\n  could successfully kind-check a type signature, and use it,\n  but have unsolved constraints that could fill in coercion\n  holes in that signature --  aargh.\n\n  It's all explained in Note [Failure in local type signatures]\n  in GHC.Tc.Solver. Much better now.\n\n* I fixed a serious bug in anonymous type holes. IN\n    f :: Int -> (forall a. a -> _) -> Int\n  that \"_\" should be a unification variable at the /outer/\n  level; it cannot be instantiated to 'a'.  This was plain\n  wrong.  New fields mode_lvl and mode_holes in TcTyMode,\n  and auxiliary data type GHC.Tc.Gen.HsType.HoleMode.\n\n  This fixes #16292, but makes no progress towards the more\n  ambitious #16082\n\n* I got sucked into an enormous refactoring of the reporting of\n  equality errors in GHC.Tc.Errors, especially in\n      mkEqErr1\n      mkTyVarEqErr\n      misMatchMsg\n      misMatchMsgOrCND\n  In particular, the very tricky mkExpectedActualMsg function\n  is gone.\n\n  It took me a full day.  But the result is far easier to understand.\n  (Still not easy!)  This led to various minor improvements in error\n  output, and an enormous number of test-case error wibbles.\n\n  One particular point: for occurs-check errors I now just say\n     Can't match 'a' against '[a]'\n  rather than using the intimidating language of \"occurs check\".\n\n* Pretty-printing AbsBinds\n\nTests review\n\n* Eta expansions\n   T11305: one eta expansion\n   T12082: one eta expansion (undefined)\n   T13585a: one eta expansion\n   T3102:  one eta expansion\n   T3692:  two eta expansions (tricky)\n   T2239:  two eta expansions\n   T16473: one eta\n   determ004: two eta expansions (undefined)\n   annfail06: two eta (undefined)\n   T17923: four eta expansions (a strange program indeed!)\n   tcrun035: one eta expansion\n\n* Ambiguity check at higher rank.  Now that we have simple\n  subsumption, a type like\n     f :: (forall a. Eq a => Int) -> Int\n  is no longer ambiguous, because we could write\n     g :: (forall a. Eq a => Int) -> Int\n     g = f\n  and it'd typecheck just fine.  But f's type is a bit\n  suspicious, and we might want to consider making the\n  ambiguity check do a check on each sub-term.  Meanwhile,\n  these tests are accepted, whereas they were previously\n  rejected as ambiguous:\n     T7220a\n     T15438\n     T10503\n     T9222\n\n* Some more interesting error message wibbles\n   T13381: Fine: one error (Int ~ Exp Int)\n           rather than two (Int ~ Exp Int, Exp Int ~ Int)\n   T9834:  Small change in error (improvement)\n   T10619: Improved\n   T2414:  Small change, due to order of unification, fine\n   T2534:  A very simple case in which a change of unification order\n           means we get tow unsolved constraints instead of one\n   tc211: bizarre impredicative tests; just accept this for now\n\nUpdates Cabal and haddock submodules.\n\nMetric Increase:\n  T12150\n  T12234\n  T5837\n  haddock.base\nMetric Decrease:\n  haddock.compiler\n  haddock.Cabal\n  haddock.base\n\nMerge note: This appears to break the\n`UnliftedNewtypesDifficultUnification` test. It has been marked as\nbroken in the interest of merging.\n\n(cherry picked from commit 66b7b195cb3dce93ed5078b80bf568efae904cc5)\n\n",
  "2dff814158e08aed53036bf6ebd7c3c8394af438": "Simplify bindLHsTyVarBndrs and bindHsQTyVars\n\nBoth `bindLHsTyVarBndrs` and `bindHsQTyVars` take two separate\n`Maybe` arguments, which I find terribly confusing. Thankfully, it's\npossible to remove one `Maybe` argument from each of these functions,\nwhich this patch accomplishes:\n\n* `bindHsQTyVars` takes a `Maybe SDoc` argument, which is `Just` if\n  GHC should warn about any of the quantified type variables going\n  unused. However, every call site uses `Nothing` in practice. This\n  makes sense, since it doesn't really make sense to warn about\n  unused type variables bound by an `LHsQTyVars`. For instance, you\n  wouldn't warn about the `a` in `data Proxy a = Proxy` going unused.\n\n  As a result, I simply remove this `Maybe SDoc` argument altogether.\n* `bindLHsTyVarBndrs` also takes a `Maybe SDoc` argument for the same\n  reasons that `bindHsQTyVars` took one. To make things more\n  confusing, however, `bindLHsTyVarBndrs` also takes a separate\n  `HsDocContext` argument, which is pretty-printed (to an `SDoc`) in\n  warnings and error messages.\n\n  In practice, the `Maybe SDoc` and the `HsDocContext` often contain\n  the same text. See the call sites for `bindLHsTyVarBndrs` in\n  `rnFamInstEqn` and `rnConDecl`, for instance. There are only a\n  handful of call sites where the text differs between the\n  `Maybe SDoc` and `HsDocContext` arguments:\n\n  * In `rnHsRuleDecl`, where the `Maybe SDoc` says \"`In the rule`\"\n    and the `HsDocContext` says \"`In the transformation rule`\".\n  * In `rnHsTyKi`/`rn_ty`, where the `Maybe SDoc` says\n    \"`In the type`\" but the `HsDocContext` is inhereted from the\n    surrounding context (e.g., if `rnHsTyKi` were called on a\n    top-level type signature, the `HsDocContext` would be\n    \"`In the type signature`\" instead)\n\n  In both cases, warnings/error messages arguably _improve_ by\n  unifying making the `Maybe SDoc`'s text match that of the\n  `HsDocContext`. As a result, I decided to remove the `Maybe SDoc`\n  argument to `bindLHsTyVarBndrs` entirely and simply reuse the text\n  from the `HsDocContext`. (I decided to change the phrase\n  \"transformation rule\" to \"rewrite rule\" while I was in the area.)\n\n  The `Maybe SDoc` argument has one other purpose: signaling when to\n  emit \"`Unused quantified type variable`\" warnings. To recover this\n  functionality, I replaced the `Maybe SDoc` argument with a\n  boolean-like `WarnUnusedForalls` argument. The only\n  `bindLHsTyVarBndrs` call site that chooses _not_ to emit these\n  warnings in `bindHsQTyVars`.\n\n",
  "e372331b3212e5d8eddfa6f8d2c3840b7e95c2b3": "hadrian: Add missing deriveConstants dependency on ghcplatform.h\n\nderiveConstants wants to compile C sources which #include PosixSource.h,\nwhich itself #includes ghcplatform.h. Make sure that Hadrian knows\nabout this dependency.\n\nFixes #18290.\n\n",
  "b022051a50d30e39d86ee21e565e899e7e98255f": "ghc-prim needs to depend on libc and libm\n\nlibm is just an empty shell on musl, and all the math functions are contained in\nlibc.\n\n",
  "6dae65484f9552239652f743e2303fa17aae953b": "Disable DLL loading if without system linker\n\nSome platforms (musl, aarch64) do not have a working dynamic linker\nimplemented in the libc, even though we might see dlopen.  It will\nultimately just return that this is not supported.  Hence we'll add\na flag to the compiler to flat our disable loading dlls.  This is\nneeded as we will otherwise try to load the shared library even\nif this will subsequently fail.  At that point we have given up\nlooking for static options though.\n\n",
  "4a158ffc4e0ac250897aefaf6caf03eb5f688182": "Range is actually +/-2^32, not +/-2^31\n\nSee also: https://static.docs.arm.com/ihi0056/g/aaelf64.pdf\n\n",
  "f1bfb806683b3092fc5ead84e7ecff928c55fbc4": "OccurAnal: Avoid exponential behavior due to where clauses\n\nPreviously the `Var` case of `occAnalApp` could in some cases (namely\nin the case of `runRW#` applications) call `occAnalRhs` two. In the case\nof nested `runRW#`s this results in exponential complexity. In some\ncases the compilation time that resulted would be very long indeed\n(see #18296).\n\nFixes #18296.\n\nMetric Decrease:\n    T9961\n    T12150\n    T12234\n\n",
  "9b607671b9158c60470b2bd57804a7684d3ea33f": "Add link to GHC's wiki in the GHC API header\n\nThis adds a URL to point to GHC's wiki in the GHC API header.\nNewcomers could easily find more information from the GHC API's\nweb like [1].\n\n[1]: Current version, https://ghc.gitlab.haskell.org/ghc/doc/libraries/ghc-8.11.0.20200604/index.html\n\n[skip ci]\n\n",
  "72c7fe9a1e147dfeaf043f6d591d724a126cce45": "Make GADT constructors adhere to the forall-or-nothing rule properly\n\nIssue #18191 revealed that the types of GADT constructors don't quite\nadhere to the `forall`-or-nothing rule. This patch serves to clean up\nthis sad state of affairs somewhat. The main change is not in the\ncode itself, but in the documentation, as this patch introduces two\nsections to the GHC User's Guide:\n\n* A \"Formal syntax for GADTs\" section that presents a BNF-style\n  grammar for what is and isn't allowed in GADT constructor types.\n  This mostly exists to codify GHC's existing behavior, but it also\n  imposes a new restriction that addresses #18191: the outermost\n  `forall` and/or context in a GADT constructor is not allowed to be\n  surrounded by parentheses. Doing so would make these\n  `forall`s/contexts nested, and GADTs do not support nested\n  `forall`s/contexts at present.\n\n* A \"`forall`-or-nothing rule\" section that describes exactly what\n  the `forall`-or-nothing rule is all about. Surprisingly, there was\n  no mention of this anywhere in the User's Guide up until now!\n\nTo adhere the new specification in the \"Formal syntax for GADTs\"\nsection of the User's Guide, the following code changes were made:\n\n* A new function, `GHC.Hs.Type.splitLHsGADTPrefixTy`, was introduced.\n  This is very much like `splitLHsSigmaTy`, except that it avoids\n  splitting apart any parentheses, which can be syntactically\n  significant for GADT types. See\n  `Note [No nested foralls or contexts in GADT constructors]` in\n  `GHC.Hs.Type`.\n\n* `ConDeclGADTPrefixPs`, an extension constructor for `XConDecl`, was\n  introduced so that `GHC.Parser.PostProcess.mkGadtDecl` can return\n  it when given a prefix GADT constructor. Unlike `ConDeclGADT`,\n  `ConDeclGADTPrefixPs` does not split the GADT type into its argument\n  and result types, as this cannot be done until after the type is\n  renamed (see `Note [GADT abstract syntax]` in `GHC.Hs.Decls` for why\n  this is the case).\n\n* `GHC.Renamer.Module.rnConDecl` now has an additional case for\n  `ConDeclGADTPrefixPs` that (1) splits apart the full `LHsType` into\n  its `forall`s, context, argument types, and result type, and\n  (2) checks for nested `forall`s/contexts. Step (2) used to be\n  performed the typechecker (in `GHC.Tc.TyCl.badDataConTyCon`) rather\n  than the renamer, but now the relevant code from the typechecker\n  can simply be deleted.\n\n  One nice side effect of this change is that we are able to give a\n  more accurate error message for GADT constructors that use visible\n  dependent quantification (e.g., `MkFoo :: forall a -> a -> Foo a`),\n  which improves the stderr in the `T16326_Fail6` test case.\n\nFixes #18191. Bumps the Haddock submodule.\n\n",
  "a47e6442bc4be4a33339499d876792ba109e8d32": "Always use rnImplicitBndrs to bring implicit tyvars into scope\n\nThis implements a first step towards #16762 by changing the renamer\nto always use `rnImplicitBndrs` to bring implicitly bound type\nvariables into scope. The main change is in `rnFamInstEqn` and\n`bindHsQTyVars`, which previously used _ad hoc_ methods of binding\ntheir implicit tyvars.\n\nThere are a number of knock-on consequences:\n\n* One of the reasons that `rnFamInstEqn` used an _ad hoc_ binding\n  mechanism was to give more precise source locations in\n  `-Wunused-type-patterns` warnings. (See\n  https://gitlab.haskell.org/ghc/ghc/issues/16762#note_273343 for an\n  example of this.) However, these warnings are actually a little\n  _too_ precise, since implicitly bound type variables don't have\n  exact binding sites like explicitly bound type variables do.\n  A similar problem existed for\n  \"`Different names for the same type variable`\" errors involving\n  implicit tyvars bound by `bindHsQTyVars`.\n  Therefore, we simply accept the less precise (but more accurate)\n  source locations from `rnImplicitBndrs` in `rnFamInstEqn` and\n  `bindHsQTyVars`. See\n  `Note [Source locations for implicitly bound type variables]` in\n  `GHC.Rename.HsType` for the full story.\n* In order for `rnImplicitBndrs` to work in `rnFamInstEqn`, it needs\n  to be able to look up names from the parent class (in the event\n  that we are renaming an associated type family instance). As a\n  result, `rnImplicitBndrs` now takes an argument of type\n  `Maybe assoc`, which is `Just` in the event that a type family\n  instance is associated with a class.\n* Previously, GHC kept track of three type synonyms for free type\n  variables in the renamer: `FreeKiTyVars`, `FreeKiTyVarsDups`\n  (which are allowed to contain duplicates), and\n  `FreeKiTyVarsNoDups` (which contain no duplicates). However, making\n  is a distinction between `-Dups` and `-NoDups` is now pointless, as\n  all code that returns `FreeKiTyVars{,Dups,NoDups}` will eventually\n  end up being passed to `rnImplicitBndrs`, which removes duplicates.\n  As a result, I decided to just get rid of `FreeKiTyVarsDups` and\n  `FreeKiTyVarsNoDups`, leaving only `FreeKiTyVars`.\n* The `bindLRdrNames` and `deleteBys` functions are now dead code, so\n  I took the liberty of removing them.\n\n",
  "2487912938f188cb264e4a11d21bf750adccc5e7": "Clarify leaf module names for new module hierarchy\n\nThis updates comments only.\n\nThis patch replaces leaf module names according to new module\nhierarchy [1][2] as followings:\n\n* Expand leaf names to easily find the module path:\n  for instance, `Id.hs` to `GHC.Types.Id`.\n\n* Modify leaf names according to new module hierarchy:\n  for instance, `Convert.hs` to `GHC.ThToHs`.\n\n* Fix typo:\n  for instance, `GHC.Core.TyCo.Rep.hs` to `GHC.Core.TyCo.Rep`\n\nSee also !3375\n\n[1]: https://gitlab.haskell.org/ghc/ghc/-/wikis/Make-GHC-codebase-more-modular\n[2]: https://gitlab.haskell.org/ghc/ghc/issues/13009\n\n",
  "92de9e25aa1a6f7aa73154868521bcf4f0dc9d1e": "rts: Remove unused GET_ENTRY closure macro\n\nThis macro is not used and got broken in the meantime, as ENTRY_CODE was\ndeleted.\n\n",
  "87102928cce33d9029ca4cc449dde6efc802b8ec": "Fix -fkeep-cafs flag name in users guide\n\n",
  "ccd6843d4a39920b4fa02badbe82e529390d4a74": "Expose impliedGFlags, impledOffGFlags, impliedXFlags\n\n",
  "7a737e898014d92bdbeed2e1cf5c35fc0a91a547": "Cross-module LambdaFormInfo passing\n\n- Store LambdaFormInfos of exported Ids in interface files\n- Use them in importing modules\n\nThis is for optimization purposes: if we know LambdaFormInfo of imported\nIds we can generate more efficient calling code, see `getCallMethod`.\n\nExporting (putting them in interface files or in ModDetails) and\nimporting (reading them from interface files) are both optional. We\ndon't assume known LambdaFormInfos anywhere and do not change how we\ncall Ids with unknown LambdaFormInfos.\n\nRuntime, allocation, and residency numbers when building\nCabal-the-library (commit 0d4ee7ba3):\n\n(Log and .hp files are in the MR: !2842)\n\n|     | GHC HEAD | This patch | Diff           |\n|-----|----------|------------|----------------|\n| -O0 |  0:35.89 |    0:34.10 | -1.78s, -4.98% |\n| -O1 |  2:24.01 |    2:23.62 | -0.39s, -0.27% |\n| -O2 |  2:52.23 |    2:51.35 | -0.88s, -0.51% |\n\n|     | GHC HEAD        | This patch      | Diff                       |\n|-----|-----------------|-----------------|----------------------------|\n| -O0 |  54,843,608,416 |  54,878,769,544 |  +35,161,128 bytes, +0.06% |\n| -O1 | 227,136,076,400 | 227,569,045,168 | +432,968,768 bytes, +0.19% |\n| -O2 | 266,147,063,296 | 266,749,643,440 | +602,580,144 bytes, +0.22% |\n\nNOTE: Residency is measured with extra runtime args: `-i0 -h` which effectively\nturn all GCs into major GCs, and do GC more often.\n\n|     | GHC HEAD                   | This patch                   | Diff                       |\n|-----|----------------------------|------------------------------|----------------------------|\n| -O0 | 410,284,000 (910 samples)  | 411,745,008 (906 samples)    | +1,461,008 bytes, +0.35%   |\n| -O1 | 928,580,856 (2109 samples) | 943,506,552 (2103 samples)   | +14,925,696 bytes, +1.60%  |\n| -O2 | 993,951,352 (2549 samples) | 1,010,156,328 (2545 samples) | +16,204,9760 bytes, +1.63% |\n\nNoFib results:\n\n--------------------------------------------------------------------------------\n        Program           Size    Allocs    Instrs     Reads    Writes\n--------------------------------------------------------------------------------\n             CS           0.0%      0.0%     +0.0%     +0.0%     +0.0%\n            CSD           0.0%      0.0%      0.0%     +0.0%     +0.0%\n             FS           0.0%      0.0%     +0.0%     +0.0%     +0.0%\n              S           0.0%      0.0%     +0.0%     +0.0%     +0.0%\n             VS           0.0%      0.0%     +0.0%     +0.0%     +0.0%\n            VSD           0.0%      0.0%     +0.0%     +0.0%     +0.1%\n            VSM           0.0%      0.0%     +0.0%     +0.0%     +0.0%\n           anna           0.0%      0.0%     -0.3%     -0.8%     -0.0%\n           ansi           0.0%      0.0%     -0.0%     -0.0%      0.0%\n           atom           0.0%      0.0%     -0.0%     -0.0%      0.0%\n         awards           0.0%      0.0%     -0.1%     -0.3%      0.0%\n         banner           0.0%      0.0%     -0.0%     -0.0%     -0.0%\n     bernouilli           0.0%      0.0%     -0.0%     -0.0%     -0.0%\n   binary-trees           0.0%      0.0%     -0.0%     -0.0%     +0.0%\n          boyer           0.0%      0.0%     -0.0%     -0.0%      0.0%\n         boyer2           0.0%      0.0%     -0.0%     -0.0%      0.0%\n           bspt           0.0%      0.0%     -0.0%     -0.2%      0.0%\n      cacheprof           0.0%      0.0%     -0.1%     -0.4%     +0.0%\n       calendar           0.0%      0.0%     -0.0%     -0.0%      0.0%\n       cichelli           0.0%      0.0%     -0.9%     -2.4%      0.0%\n        circsim           0.0%      0.0%     -0.0%     -0.0%      0.0%\n       clausify           0.0%      0.0%     -0.1%     -0.3%      0.0%\n  comp_lab_zift           0.0%      0.0%     -0.0%     -0.0%     +0.0%\n       compress           0.0%      0.0%     -0.0%     -0.0%     -0.0%\n      compress2           0.0%      0.0%     -0.0%     -0.0%      0.0%\n    constraints           0.0%      0.0%     -0.1%     -0.2%     -0.0%\n   cryptarithm1           0.0%      0.0%     -0.0%     -0.0%      0.0%\n   cryptarithm2           0.0%      0.0%     -1.4%     -4.1%     -0.0%\n            cse           0.0%      0.0%     -0.0%     -0.0%     -0.0%\n   digits-of-e1           0.0%      0.0%     -0.0%     -0.0%     -0.0%\n   digits-of-e2           0.0%      0.0%     -0.0%     -0.0%     -0.0%\n         dom-lt           0.0%      0.0%     -0.1%     -0.2%      0.0%\n          eliza           0.0%      0.0%     -0.5%     -1.5%      0.0%\n          event           0.0%      0.0%     -0.0%     -0.0%     -0.0%\n    exact-reals           0.0%      0.0%     -0.1%     -0.3%     +0.0%\n         exp3_8           0.0%      0.0%     -0.0%     -0.0%     -0.0%\n         expert           0.0%      0.0%     -0.3%     -1.0%     -0.0%\n fannkuch-redux           0.0%      0.0%     +0.0%     +0.0%     +0.0%\n          fasta           0.0%      0.0%     -0.0%     -0.0%     +0.0%\n            fem           0.0%      0.0%     -0.0%     -0.0%      0.0%\n            fft           0.0%      0.0%     -0.0%     -0.0%      0.0%\n           fft2           0.0%      0.0%     -0.0%     -0.0%      0.0%\n       fibheaps           0.0%      0.0%     -0.0%     -0.0%     +0.0%\n           fish           0.0%      0.0%      0.0%     -0.0%     +0.0%\n          fluid           0.0%      0.0%     -0.4%     -1.2%     +0.0%\n         fulsom           0.0%      0.0%     -0.0%     -0.0%      0.0%\n         gamteb           0.0%      0.0%     -0.1%     -0.3%      0.0%\n            gcd           0.0%      0.0%     -0.0%     -0.0%      0.0%\n    gen_regexps           0.0%      0.0%     -0.0%     -0.0%     -0.0%\n         genfft           0.0%      0.0%     -0.0%     -0.0%      0.0%\n             gg           0.0%      0.0%     -0.0%     -0.0%     +0.0%\n           grep           0.0%      0.0%     -0.0%     -0.0%     -0.0%\n         hidden           0.0%      0.0%     -0.1%     -0.4%     -0.0%\n            hpg           0.0%      0.0%     -0.2%     -0.5%     +0.0%\n            ida           0.0%      0.0%     -0.0%     -0.0%     +0.0%\n          infer           0.0%      0.0%     -0.3%     -0.8%     -0.0%\n        integer           0.0%      0.0%     -0.0%     -0.0%     +0.0%\n      integrate           0.0%      0.0%     -0.0%     -0.0%      0.0%\n   k-nucleotide           0.0%      0.0%     -0.0%     -0.0%     +0.0%\n          kahan           0.0%      0.0%     -0.0%     -0.0%     +0.0%\n        knights           0.0%      0.0%     -2.2%     -5.4%      0.0%\n         lambda           0.0%      0.0%     -0.6%     -1.8%      0.0%\n     last-piece           0.0%      0.0%     -0.0%     -0.0%      0.0%\n           lcss           0.0%      0.0%     -0.0%     -0.1%      0.0%\n           life           0.0%      0.0%     -0.0%     -0.1%      0.0%\n           lift           0.0%      0.0%     -0.2%     -0.6%     +0.0%\n         linear           0.0%      0.0%     -0.0%     -0.0%     -0.0%\n      listcompr           0.0%      0.0%     -0.0%     -0.0%      0.0%\n       listcopy           0.0%      0.0%     -0.0%     -0.0%      0.0%\n       maillist           0.0%      0.0%     -0.1%     -0.3%     +0.0%\n         mandel           0.0%      0.0%     -0.0%     -0.0%      0.0%\n        mandel2           0.0%      0.0%     -0.0%     -0.0%     -0.0%\n           mate          +0.0%      0.0%     -0.0%     -0.0%     -0.0%\n        minimax           0.0%      0.0%     -0.2%     -1.0%      0.0%\n        mkhprog           0.0%      0.0%     -0.1%     -0.2%     -0.0%\n     multiplier           0.0%      0.0%     -0.0%     -0.0%     -0.0%\n         n-body           0.0%      0.0%     -0.0%     -0.0%     +0.0%\n       nucleic2           0.0%      0.0%     -0.1%     -0.2%      0.0%\n           para           0.0%      0.0%     -0.0%     -0.0%     -0.0%\n      paraffins           0.0%      0.0%     -0.0%     -0.0%      0.0%\n         parser           0.0%      0.0%     -0.2%     -0.7%      0.0%\n        parstof           0.0%      0.0%     -0.0%     -0.0%     +0.0%\n            pic           0.0%      0.0%     -0.0%     -0.0%      0.0%\n       pidigits           0.0%      0.0%     +0.0%     +0.0%     +0.0%\n          power           0.0%      0.0%     -0.2%     -0.6%     +0.0%\n         pretty           0.0%      0.0%     -0.0%     -0.0%     -0.0%\n         primes           0.0%      0.0%     -0.0%     -0.0%      0.0%\n      primetest           0.0%      0.0%     -0.0%     -0.0%     -0.0%\n         prolog           0.0%      0.0%     -0.3%     -1.1%      0.0%\n         puzzle           0.0%      0.0%     -0.0%     -0.0%      0.0%\n         queens           0.0%      0.0%     -0.0%     -0.0%     +0.0%\n        reptile           0.0%      0.0%     -0.0%     -0.0%      0.0%\nreverse-complem           0.0%      0.0%     -0.0%     -0.0%     +0.0%\n        rewrite           0.0%      0.0%     -0.7%     -2.5%     -0.0%\n           rfib           0.0%      0.0%     -0.0%     -0.0%      0.0%\n            rsa           0.0%      0.0%     -0.0%     -0.0%      0.0%\n            scc           0.0%      0.0%     -0.1%     -0.2%     -0.0%\n          sched           0.0%      0.0%     -0.0%     -0.0%     -0.0%\n            scs           0.0%      0.0%     -1.0%     -2.6%     +0.0%\n         simple           0.0%      0.0%     +0.0%     -0.0%     +0.0%\n          solid           0.0%      0.0%     -0.0%     -0.0%      0.0%\n        sorting           0.0%      0.0%     -0.6%     -1.6%      0.0%\n  spectral-norm           0.0%      0.0%     +0.0%      0.0%     +0.0%\n         sphere           0.0%      0.0%     -0.0%     -0.0%     -0.0%\n         symalg           0.0%      0.0%     -0.0%     -0.0%     +0.0%\n            tak           0.0%      0.0%     -0.0%     -0.0%      0.0%\n      transform           0.0%      0.0%     -0.0%     -0.0%      0.0%\n       treejoin           0.0%      0.0%     -0.0%     -0.0%      0.0%\n      typecheck           0.0%      0.0%     -0.0%     -0.0%     +0.0%\n        veritas          +0.0%      0.0%     -0.2%     -0.4%     +0.0%\n           wang           0.0%      0.0%     -0.0%     -0.0%      0.0%\n      wave4main           0.0%      0.0%     -0.0%     -0.0%     -0.0%\n   wheel-sieve1           0.0%      0.0%     -0.0%     -0.0%     -0.0%\n   wheel-sieve2           0.0%      0.0%     -0.0%     -0.0%     +0.0%\n           x2n1           0.0%      0.0%     -0.0%     -0.0%     -0.0%\n--------------------------------------------------------------------------------\n            Min           0.0%      0.0%     -2.2%     -5.4%     -0.0%\n            Max          +0.0%      0.0%     +0.0%     +0.0%     +0.1%\n Geometric Mean          -0.0%     -0.0%     -0.1%     -0.3%     +0.0%\n\nMetric increases micro benchmarks tracked in #17686:\n\nMetric Increase:\n    T12150\n    T12234\n    T12425\n    T13035\n    T5837\n    T6048\n    T9233\n\nCo-authored-by: Andreas Klebinger <klebinger.andreas@gmx.at>\n\n",
  "3b22b14a7a1c1819fc8682fc127acf7448c5630c": "Give Language a Bounded instance\n\n",
  "9454511b0bdfcd79a1899d7f24bf65a3eb0d06e3": "Optimisation in Unique.Supply\n\nThis patch switches on -fno-state-hack in GHC.Types.Unique.Supply.\n\nIt turned out that my fixes for #18078 (coercion floating) changed the\noptimisation pathway for mkSplitUniqSupply in such a way that we had\nan extra allocation inside the inner loop.  Adding -fno-state-hack\nfixed that -- and indeed the loop in mkSplitUniqSupply is a classic\nexample of the way in which -fno-state-hack can be bad; see #18238.\n\nMoreover, the new code is better than the old.  They allocate\nthe same, but the old code ends up with a partial application.\nThe net effect is that the test\n    perf/should_run/UniqLoop\nruns 20% faster!   From 2.5s down to 2.0s.  The allocation numbers\nare the same -- but elapsed time falls. Good!\n\nThe bad thing about this is that it's terribly delicate.  But\nat least it's a good example of such delicacy in action.\n\nThere is a long Note [Optimising the unique supply] which now\nexplains all this.\n\n",
  "6d49d5be904c0c01788fa7aae1b112d5b4dfaf1c": "Implement cast worker/wrapper properly\n\nThe cast worker/wrapper transformation transforms\n   x = e |> co\ninto\n   y = e\n   x = y |> co\n\nThis is done by the simplifier, but we were being\ncareless about transferring IdInfo from x to y,\nand about what to do if x is a NOINLNE function.\nThis resulted in a series of bugs:\n     #17673, #18093, #18078.\n\nThis patch fixes all that:\n\n* Main change is in GHC.Core.Opt.Simplify, and\n  the new prepareBinding function, which does this\n  cast worker/wrapper transform.\n  See Note [Cast worker/wrappers].\n\n* There is quite a bit of refactoring around\n  prepareRhs, makeTrivial etc.  It's nicer now.\n\n* Some wrappers from strictness and cast w/w, notably those for\n  a function with a NOINLINE, should inline very late. There\n  wasn't really a mechanism for that, which was an existing bug\n  really; so I invented a new finalPhase = Phase (-1).  It's used\n  for all simplifier runs after the user-visible phase 2,1,0 have\n  run.  (No new runs of the simplifier are introduced thereby.)\n\n  See new Note [Compiler phases] in GHC.Types.Basic;\n  the main changes are in GHC.Core.Opt.Driver\n\n* Doing this made me trip over two places where the AnonArgFlag on a\n  FunTy was being lost so we could end up with (Num a -> ty)\n  rather than (Num a => ty)\n    - In coercionLKind/coercionRKind\n    - In contHoleType in the Simplifier\n\n  I fixed the former by defining mkFunctionType and using it in\n  coercionLKind/RKind.\n\n  I could have done the same for the latter, but the information\n  is almost to hand.  So I fixed the latter by\n    - adding sc_hole_ty to ApplyToVal (like ApplyToTy),\n    - adding as_hole_ty to ValArg (like TyArg)\n    - adding sc_fun_ty to StrictArg\n  Turned out I could then remove ai_type from ArgInfo.  This is\n  just moving the deck chairs around, but it worked out nicely.\n\n  See the new Note [AnonArgFlag] in GHC.Types.Var\n\n* When looking at the 'arity decrease' thing (#18093) I discovered\n  that stable unfoldings had a much lower arity than the actual\n  optimised function.  That's what led to the arity-decrease\n  message.  Simple solution: eta-expand.\n\n  It's described in Note [Eta-expand stable unfoldings]\n  in GHC.Core.Opt.Simplify\n\n* I also discovered that unsafeCoerce wasn't being inlined if\n  the context was boring.  So (\\x. f (unsafeCoerce x)) would\n  create a thunk -- yikes!  I fixed that by making inlineBoringOK\n  a bit cleverer: see Note [Inline unsafeCoerce] in GHC.Core.Unfold.\n\n  I also found that unsafeCoerceName was unused, so I removed it.\n\nI made a test case for #18078, and a very similar one for #17673.\n\nThe net effect of all this on nofib is very modest, but positive:\n\n--------------------------------------------------------------------------------\n        Program           Size    Allocs   Runtime   Elapsed  TotalMem\n--------------------------------------------------------------------------------\n           anna          -0.4%     -0.1%     -3.1%     -3.1%      0.0%\n fannkuch-redux          -0.4%     -0.3%     -0.1%     -0.1%      0.0%\n       maillist          -0.4%     -0.1%     -7.8%     -1.0%    -14.3%\n      primetest          -0.4%    -15.6%     -7.1%     -6.6%      0.0%\n--------------------------------------------------------------------------------\n            Min          -0.9%    -15.6%    -13.3%    -14.2%    -14.3%\n            Max          -0.3%      0.0%    +12.1%    +12.4%      0.0%\n Geometric Mean          -0.4%     -0.2%     -2.3%     -2.2%     -0.1%\n\nAll following metric decreases are compile-time allocation decreases\nbetween -1% and -3%:\n\nMetric Decrease:\n  T5631\n  T13701\n  T14697\n  T15164\n\n",
  "32fd37f5e1e6dc6e3b664ae41e0041ed8a19ae21": "Fix lookupGlobalOccRn_maybe sometimes reporting an error\n\nIn some cases it was possible for lookupGlobalOccRn_maybe to return an\nerror, when it should be returning a Nothing. If it called\nlookupExactOcc_either when there were no matching GlobalRdrElts in the\notherwise case, it would return an error message. This could be caused\nwhen lookupThName_maybe in Template Haskell was looking in different\nnamespaces (thRdrNameGuesses), guessing different namespaces that the\nname wasn't guaranteed to be found in.\n\nHowever, by addressing this some more accurate errors were being lost in\nthe conversion to Maybes. So some of the lookup* functions have been\nshuffled about so that errors should always be ignored in\nlookup*_maybes, and propagated otherwise.\n\nThis fixes #18263\n\n",
  "9b283e1b2a46af614d89b0e3a0dfd23871511c17": "Initialize the allocation counter in GHCi to 0 (Fixes #16012)\n\nAccording to the documentation for the function `getAllocationCounter` in\n[System.Mem](http://hackage.haskell.org/package/base-4.14.0.0/docs/System-Mem.html)\ninitialize the allocationCounter also in GHCi to 0.\n\n",
  "8d07c48ce3fde32a3c08c84764e0859b84eee461": "test: fix conc038\n\nWe had spurious failures of conc038 test on CI with stdout:\n\n```\n newThread started\n-mainThread\n-Haskell: 2\n newThread back again\n+mainThread\n 1 sec later\n\n shutting down\n+Haskell: 2\n```\n\n",
  "4c7e9689f6fcc3eb974f0a76ae8078abda30026d": "Release Notes: Add news from the pattern-match checker [skip ci]\n\n",
  "3445b9652671280920755ee3d2b49780eeb3a991": "Only test T16190 with the NCG\n\nT16190 is meant to test a NCG feature. It has already caused spurious\nfailures in other MRs (e.g. !2165) when LLVM is used.\n\n",
  "2517a51c0f949c1021de9f7c16f67345c6ab78a9": "DynFlags refactoring VIII (#17957)\n\n* Remove several uses of `sdocWithDynFlags`, especially in GHC.Llvm.*\n\n* Add LlvmOpts datatype to store Llvm backend options\n\n* Remove Outputable instances (for LlvmVar, LlvmLit, LlvmStatic and\n  Llvm.MetaExpr) which require LlvmOpts.\n\n* Rename ppMetaExpr into ppMetaAnnotExpr (pprMetaExpr is now used in place of `ppr :: MetaExpr -> SDoc`)\n\n",
  "7a02599afe836ac32c2e732671415d0afdfbf7fb": "Remove unused code\n\n",
  "72d086106d49bc18277f3a066e671e87e9b37a1b": "Refactor homeUnit\n\n* rename thisPackage into homeUnit\n* document and refactor several Backpack things\n\n",
  "8dc71f5577a541168951371bd55b51a588b57813": "Rename unsafeGetUnitInfo into unsafeLookupUnit\n\n",
  "f6be6e432e53108075905c1fc7785d8b1f18a33f": "Add allowVirtualUnits field in PackageState\n\nInstead of always querying DynFlags to know whether we are allowed to\nuse virtual units (i.e. instantiated on-the-fly, cf Note [About units]\nin GHC.Unit), we store it once for all in\n`PackageState.allowVirtualUnits`.\n\nThis avoids using DynFlags too much (cf #17957) and is preliminary work\nfor #14335.\n\n",
  "e7272d53e67e72580caceae40e766c4bfeb1c398": "Enhance UnitId use\n\n* use UnitId instead of String to identify wired-in units\n* use UnitId instead of Unit in the backend (Unit are only use by\n  Backpack to produce type-checked interfaces, not real code)\n* rename lookup functions for consistency\n* documentation\n\n",
  "9c5572cd29924dcc6effd8e102c9bb30d7b39bec": "Remove LinkerUnitId type alias\n\n",
  "d345edfe96a3fdf35b8e953c1a4aacc325ca948e": "Refactor WiredMap\n\n* Remove WiredInUnitId and WiredUnitId type aliases\n\n",
  "3d171cd6d5cfbc8eae12cd1b152541d4f285b245": "Document and refactor `mkUnit` and `mkUnitInfoMap`\n\n",
  "d2109b4f10ddbe09ac3397486922142f0cadaacc": "Remove PreloadUnitId type alias\n\n",
  "f50c19b8a78da9252cb39f49c1c66db4a684cc3b": "Rename listUnitInfoMap into listUnitInfo\n\nThere is no Map involved\n\n",
  "ed533ec217667423e4fce30040f24053dbcc7de4": "Rename Package into Unit\n\nThe terminology changed over time and now package databases contain\n\"units\" (there can be several units compiled from a single Cabal\npackage: one per-component, one for each option set, one per\ninstantiation, etc.). We should try to be consistent internally and use\n\"units\": that's what this renaming does. Maybe one day we'll fix the UI\ntoo (e.g. replace -package-id with -unit-id, we already have\n-this-unit-id and ghc-pkg has -unit-id...) but it's not done in this\npatch.\n\n* rename getPkgFrameworkOpts into getUnitFrameworkOpts\n* rename UnitInfoMap into ClosureUnitInfoMap\n* rename InstalledPackageIndex into UnitInfoMap\n* rename UnusablePackages into UnusableUnits\n* rename PackagePrecedenceIndex into UnitPrecedenceMap\n* rename PackageDatabase into UnitDatabase\n* rename pkgDatabase into unitDatabases\n* rename pkgState into unitState\n* rename initPackages into initUnits\n* rename renamePackage into renameUnitInfo\n* rename UnusablePackageReason into UnusableUnitReason\n* rename getPackage* into getUnit*\n* etc.\n\n",
  "202728e529f2faa88731b9f4b34b2ac567eb7c95": "Make ClosureUnitInfoMap uses UnitInfoMap\n\n",
  "55b4263e1a53cc27b1da9227249bdcd20139ddc9": "Remove ClosureUnitInfoMap\n\n",
  "653d17bdd57ec8ca9b11b19e45860982bd1e7c9e": "Rename Package into Unit (2)\n\n* rename PackageState into UnitState\n* rename findWiredInPackages into findWiredInUnits\n* rename lookupModuleInAll[Packages,Units]\n* etc.\n\n",
  "ae900605c4860684c51584dac271956635eb60cc": "Move dump_mod_map into initUnits\n\n",
  "598cc1dde543807902fd502b5e2f8050ebac1fa5": "Move wiring of homeUnitInstantiations outside of mkUnitState\n\n",
  "437265eb26b45a2de3ac537b6bc9a81986d4f7ae": "Avoid timing module map dump in initUnits\n\n",
  "9400aa934880695b83201e192998de2576cfdf92": "Remove preload parameter of mkUnitState\n\n* Remove preload parameter (unused)\n* Don't explicitly return preloaded units: redundant because already\n  returned as \"preloadUnits\" field of UnitState\n\n",
  "266bc3d9c3735620598ab18ff6ac9c44134cbbff": "DynFlags: refactor unwireUnit\n\n",
  "9e715c1b84702dc60fe31fd19dacf85335d59b27": "Document getPreloadUnitsAnd\n\n",
  "bd5810dc4e23331ca4f73ec3b1818c3350b5bbd7": "DynFlags: remove useless add_package parameter\n\n",
  "36e1daf0a604d98a34d9a066a01dd4f5439b4aca": "DynFlags: make listVisibleModuleNames take a UnitState\n\n",
  "5226da37845ae82bff0e3e6b16be7453e3d9370d": "Refactor and document add_package\n\n",
  "4b53aac1e2128fa9baa5fd4623fcb3afd2602870": "Refactor and document closeUnitDeps\n\n",
  "42c054f6cd7a9890c3e9d2d0c444252abe08a8d5": "DynFlags: findWiredInUnits\n\n",
  "a444d01bc97be99b7743b752a33ca9982de4c0f1": "DynFlags: reportCycles, reportUnusable\n\n",
  "8408d521a67e2af4012d886d6a7e2af02ce42add": "DynFlags: merge_databases\n\n",
  "fca2d25ff76d442d0825847643ed7448492e0e55": "DynFlags: add UnitConfig datatype\n\nAvoid directly querying flags from DynFlags to build the UnitState.\nInstead go via UnitConfig so that we could reuse this to make another\nUnitState for plugins.\n\n",
  "4274688a6333abffdfe7c7bda252c566f947afdf": "Move distrustAll into mkUnitState\n\n",
  "28d804e1e12a6be9bcd94b4667e27ba73beade38": "Create helper upd_wired_in_home_instantiations\n\n",
  "ac964c8350ba41082e9dca9cf1b7ff02aea2a636": "Put database cache in UnitConfig\n\n",
  "bfd0a78cdd0287c26998a4d9419174e4dc305c6f": "Don't return preload units when we set DyNFlags\n\nPreload units can be retrieved in UnitState when needed (i.e. in GHCi)\n\n",
  "1fbb4bf5f3d31f115e5a824588efc529cebf3185": "NCGConfig: remove useless ncgUnitId field\n\n",
  "c10ff7e7e5e5bd687938b5a4256e980cf58fcad1": "Doc: fix some comments\n\n",
  "456e17f035238984e487870fe8007f5fb5f726cf": "Bump haddock submodule and allow metric decrease\n\nMetric Decrease:\n    T12150\n    T12234\n    T5837\n\nMetric Increase:\n    T16190\n\n",
  "429539025450757e30124fa9ee33206deeb951a2": "Trim the demand for recursive product types\n\nTicket #18304 showed that we need to be very careful\nwhen exploring the demand (esp usage demand) on recursive\nproduct types.\n\nThis patch solves the problem by trimming the demand on such types --\nin effect, a form of \"widening\".\n\nSee the Note [Trimming a demand to a type] in DmdAnal, which explains\nhow I did this by piggy-backing on an existing mechansim for trimming\ndemands becuase of GADTs.  The significant payload of this patch is\nvery small indeed:\n\n* Make GHC.Core.Opt.WorkWrap.Utils.typeShape use RecTcChecker to\n  avoid looking through recursive types.\n\nBut on the way\n\n* I found that ae_rec_tc was entirely inoperative and did nothing.\n  So I removed it altogether from DmdAnal.\n\n* I moved some code around in DmdAnal and Demand.\n  (There are no actual changes in dmdFix.)\n\n* I changed the API of DmsAnal.dmdAnalRhsLetDown to return\n  a StrictSig rather than a decorated Id\n\n* I removed the dead function peelTsFuns from Demand\n\nPerformance effects:\n\nNofib: 0.0% changes.  Not surprising, because they don't\n       use recursive products\n\nPerf tests\n\nT12227:\n  1% increase in compiler allocation, becuase $cto gets w/w'd.\n  It did not w/w before because it takes a deeply nested\n  argument, so the worker gets too many args, so we abandon w/w\n  altogether (see GHC.Core.Opt.WorkWrap.Utils.isWorkerSmallEnough)\n\n  With this patch we trim the demands.  That is not strictly\n  necessary (since these Generic type constructors are like\n  tuples -- they can't cause a loop) but the net result is that\n  we now w/w $cto which is fine.\n\nUniqLoop:\n  16% decrease in /runtime/ allocation. The UniqSupply is a\n  recursive product, so currently we abandon all strictness on\n  'churn'.  With this patch 'churn' gets useful strictness, and\n  we w/w it.  Hooray\n\nMetric Decrease:\n    UniqLoop\n\nMetric Increase:\n    T12227\n\n",
  "87d504f475471c61305b29578da2656f9ff9653e": "Add introductory prose for Data.Traversable\n\n",
  "9f09b608eecf07ad6c27729f7b6f74aca4e17e6c": "Fix #12073: Add MonadFix Q instance\n\n",
  "220c2d34a34727d696cc4b44a1b87aba83231ce4": "testsuite: Increase size of T12150\n\nAs noted in #18319, this test was previously very fragile. Increase its\nsize to make it more likely that its fails with its newly-increased\nacceptance threshold.\n\nMetric Increase:\n    T12150\n\n",
  "8bba1c26193e704d2d6bb2be9a2fac668b0ea54c": "gitlab-ci: Always push perf notes\n\nPreviously we ci.sh would run with `set -e` implying that we wouldn't\npush perf notes if the testsuite were to fail, even if it *only* failed\ndue to perf notes. This rendered the whole performance testing story\nquite fragile as a single regressing commit would cause every successive\ncommit to fail since a new baseline would not be uploaded.\n\nFix this by ensuring that we always push performance notes.\n\n",
  "7a773f169cfe072c7b29924c53075e4dfa4e2adb": "gitlab-ci: Eliminate redundant push of CI metrics\n\n",
  "a31218f7737a65b6333ec7905e88dc094703f025": "Use HsForAllTelescope to avoid inferred, visible foralls\n\nCurrently, `HsForAllTy` permits the combination of `ForallVis` and\n`Inferred`, but you can't actually typecheck code that uses it\n(e.g., `forall {a} ->`). This patch refactors `HsForAllTy` to use a\nnew `HsForAllTelescope` data type that makes a type-level distinction\nbetween visible and invisible `forall`s such that visible `forall`s\ndo not track `Specificity`. That part of the patch is actually quite\nsmall; the rest is simply changing consumers of `HsType` to\naccommodate this new type.\n\nFixes #18235. Bumps the `haddock` submodule.\n\n",
  "c0e6dee99242eff08420176a36d77b715972f1f2": "winio: Add Atomic Exchange PrimOp and implement Atomic Ptr exchanges.\n\nThe initial version was rewritten by Tamar Christina.\nIt was rewritten in large parts by Andreas Klebinger.\n\nCo-authored-by: Andreas Klebinger <klebinger.andreas@gmx.at>\n\n",
  "9a7462fb6b8bdd6326a607bbd7b9453eb588193b": "codeGen: Don't discard live case binders in unsafeEqualityProof logic\n\nPreviously CoreToStg would unconditionally discard cases of the form:\n\n    case unsafeEqualityProof of wild { _ -> rhs }\n\nand rather replace the whole thing with `rhs`. However, in some cases\n(see #18227) the case binder is still live, resulting in unbound\noccurrences in `rhs`. Fix this by only discarding the case if the case\nbinder is dead.\n\nFixes #18227.\n\n",
  "e4137c486a3df66b49395beea7efc6e200cc9bac": "testsuite: Add tests for #18227\n\nT18227A is the original issue which gave rise to the ticket and depends\nupon bytestring. T18227B is a minimized reproducer.\n\n",
  "8bab9ff1e09c1566a4105146bd636634a24928b9": "hadrian: Fix rts include and library paths\n\nFixes two bugs:\n\n * (?) and (<>) associated in a surprising way\n * We neglected to include libdw paths in the rts configure flags\n\n",
  "bd761185561747fe0b3adc22602f75d7b50cd248": "hadrian: Drop redundant GHC arguments\n\nCabal should already be passing this arguments to GHC.\n\n",
  "01f7052cc182c0ced85522dc775ebc490bf094ce": "FFI: Fix pass small ints in foreign call wrappers\n\nThe Haskell calling convention requires integer parameters smaller\nthan wordsize to be promoted to wordsize (where the upper bits are\ndon't care). To access such small integer parameter read a word from\nthe parameter array and then cast that word to the small integer\ntarget type.\n\nFixes #15933\n\n",
  "502647f7583be626319482adf4ea3d905db0006d": "Fix \"ndecreasingIndentation\" in manual (#18116)\n\n",
  "9a9cc0897b676ffd6612562a46600ea98c53a58d": "Use foldl' in unionManyUniqDSets\n\n",
  "761dcb84cd4c50c6fbb361eb26fb429af87392a3": "Load .lo as well.\n\nSome archives contain so called linker objects, with the affectionate\n.lo suffic.  For example the musl libc.a will come in that form.  We\nstill want to load those objects, hence we should not discard them and\nlook for .lo as well.  Ultimately we might want to fix this proerly by\nlooking at the file magic.\n\n",
  "cf01477f03da13caaf78caacc5b001cb46a86685": "User's Guide: KnownNat evidence is Natural\n\nThis bit of documentation got outdated after commit\n1fcede43d2b30f33b7505e25eb6b1f321be0407f\n\n",
  "d0dcbfe646e52d0a1ef6d6e59a059323485775eb": "Fix typos and formatting in user guide\n\n",
  "56a9e95fd6c2f213d676c9a2bd0a6cf93c531dbb": "Resolve TODO\n\n",
  "3e884d14102948ad49d75611da247beff25911a4": "Rename TcHoleErrors to GHC.Tc.Errors.Hole\n\n",
  "d23fc67847a27222ad8a0c193e6a10b5a4c0cf48": "hadrian: Build with threaded runtime if available\n\nSee #16873.\n\n",
  "0639dc10e214280a90dd6b75ce86cf43d1eb2286": "T16190: only measure bytes_allocated\n\nJust adding `{-# LANGUAGE BangPatterns #-}` makes the two other metrics\nfluctuate by 13%.\n\n",
  "4cab68974dba3e674016514c939946ce60e58273": "docs: fix formatting in users guide\n\n",
  "eb8115a8c4cbc842b66798480fefc7ab64d31931": "Move CLabel assertions into smart constructors (#17957)\n\nIt avoids using DynFlags in the Outputable instance of Clabel to check\nassertions at pretty-printing time.\n\n",
  "7faa4509cd7dbc6e2f873e4997e8888bd6ec3507": "base: Bump to 4.15.0.0\n\n",
  "20616959a7f4821034e14a64c3c9bf288c9bc956": "configure: Use grep -q instead of --quiet\n\nThe latter is apparently not supported by busybox.\n\n",
  "40fa237e1daab7a76b9871bb6c50b953a1addf23": "Linear types (#15981)\n\nThis is the first step towards implementation of the linear types proposal\n(https://github.com/ghc-proposals/ghc-proposals/pull/111).\n\nIt features\n\n* A language extension -XLinearTypes\n* Syntax for linear functions in the surface language\n* Linearity checking in Core Lint, enabled with -dlinear-core-lint\n* Core-to-core passes are mostly compatible with linearity\n* Fields in a data type can be linear or unrestricted; linear fields\n  have multiplicity-polymorphic constructors.\n  If -XLinearTypes is disabled, the GADT syntax defaults to linear fields\n\nThe following items are not yet supported:\n\n* a # m -> b syntax (only prefix FUN is supported for now)\n* Full multiplicity inference (multiplicities are really only checked)\n* Decent linearity error messages\n* Linear let, where, and case expressions in the surface language\n  (each of these currently introduce the unrestricted variant)\n* Multiplicity-parametric fields\n* Syntax for annotating lambda-bound or let-bound with a multiplicity\n* Syntax for non-linear/multiple-field-multiplicity records\n* Linear projections for records with a single linear field\n* Linear pattern synonyms\n* Multiplicity coercions (test LinearPolyType)\n\nA high-level description can be found at\nhttps://ghc.haskell.org/trac/ghc/wiki/LinearTypes/Implementation\nFollowing the link above you will find a description of the changes made to Core.\nThis commit has been authored by\n\n* Richard Eisenberg\n* Krzysztof Gogolewski\n* Matthew Pickering\n* Arnaud Spiwack\n\nWith contributions from:\n\n* Mark Barbone\n* Alexander Vershilov\n\nUpdates haddock submodule.\n\n",
  "6cb84c469bf1ab6b03e099f5d100e78800ca09e0": "Various performance improvements\n\nThis implements several general performance improvements to GHC,\nto offset the effect of the linear types change.\n\nGeneral optimisations:\n- Add a `coreFullView` function which iterates `coreView` on the\n  head. This avoids making function recursive solely because the\n  iterate `coreView` themselves. As a consequence, this functions can\n  be inlined, and trigger case-of-known constructor (_e.g._\n  `kindRep_maybe`, `isLiftedRuntimeRep`, `isMultiplicityTy`,\n  `getTyVar_maybe`, `splitAppTy_maybe`, `splitFunType_maybe`,\n  `tyConAppTyCon_maybe`). The common pattern about all these functions\n  is that they are almost always used as views, and immediately\n  consumed by a case expression. This commit also mark them asx `INLINE`.\n- In `subst_ty` add a special case for nullary `TyConApp`, which avoid\n  allocations altogether.\n- Use `mkTyConApp` in `subst_ty` for the general `TyConApp`. This\n  required quite a bit of module shuffling.\n  case. `myTyConApp` enforces crucial sharing, which was lost during\n  substitution. See also !2952 .\n- Make `subst_ty` stricter.\n- In `eqType` (specifically, in `nonDetCmpType`), add a special case,\n  tested first, for the very common case of nullary `TyConApp`.\n  `nonDetCmpType` has been made `INLINE` otherwise it is actually a\n  regression. This is similar to the optimisations in !2952.\n\nLinear-type specific optimisations:\n- Use `tyConAppTyCon_maybe` instead of the more complex `eqType` in\n  the definition of the pattern synonyms `One` and `Many`.\n- Break the `hs-boot` cycles between `Multiplicity.hs` and `Type.hs`:\n  `Multiplicity` now import `Type` normally, rather than from the\n  `hs-boot`. This way `tyConAppTyCon_maybe` can inline properly in the\n  `One` and `Many` pattern synonyms.\n- Make `updateIdTypeAndMult` strict in its type and multiplicity\n- The `scaleIdBy` gets a specialised definition rather than being an\n  alias to `scaleVarBy`\n- `splitFunTy_maybe` is given the type `Type -> Maybe (Mult, Type,\n  Type)` instead of `Type -> Maybe (Scaled Type, Type)`\n- Remove the `MultMul` pattern synonym in favour of a view `isMultMul`\n  because pattern synonyms appear not to inline well.\n- in `eqType`, in a `FunTy`, compare multiplicities last: they are\n  almost always both `Many`, so it helps failing faster.\n- Cache `manyDataConTy` in `mkTyConApp`, to make sure that all the\n  instances of `TyConApp ManyDataConTy []` are physically the same.\n\nThis commit has been authored by\n* Richard Eisenberg\n* Krzysztof Gogolewski\n* Arnaud Spiwack\n\nMetric Decrease:\n    haddock.base\n    T12227\n    T12545\n    T12990\n    T1969\n    T3064\n    T5030\n    T9872b\n\nMetric Increase:\n    haddock.base\n    haddock.Cabal\n    haddock.compiler\n    T12150\n    T12234\n    T12425\n    T12707\n    T13035\n    T13056\n    T15164\n    T16190\n    T18304\n    T1969\n    T3064\n    T3294\n    T5631\n    T5642\n    T5837\n    T6048\n    T9020\n    T9233\n    T9675\n    T9872a\n    T9961\n    WWRec\n\n",
  "57db91d8ee501c7cf176c4bb1e2101d3092fd0f6": "Remove integer-simple\n\ninteger-simple uses lists of words (`[Word]`) to represent big numbers\ninstead of ByteArray#:\n\n   * it is less efficient than the newer ghc-bignum native backend\n\n   * it isn't compatible with the big number representation that is now\n     shared by all the ghc-bignum backends (based on the one that was\n     used only in integer-gmp before).\n\nAs a consequence, we simply drop integer-simple\n\n",
  "9f96bc127d6231b5e76bbab442244eb303b08867": "ghc-bignum library\n\nghc-bignum is a newer package that aims to replace the legacy\ninteger-simple and integer-gmp packages.\n\n* it supports several backends. In particular GMP is still supported and\n  most of the code from integer-gmp has been merged in the \"gmp\"\n  backend.\n\n* the pure Haskell \"native\" backend is new and is much faster than the\n  previous pure Haskell implementation provided by integer-simple\n\n* new backends are easier to write because they only have to provide a\n  few well defined functions. All the other code is common to all\n  backends. In particular they all share the efficient small/big number\n  distinction previously used only in integer-gmp.\n\n* backends can all be tested against the \"native\" backend with a simple\n  Cabal flag. Backends are only allowed to differ in performance, their\n  results should be the same.\n\n* Add `integer-gmp` compat package: provide some pattern synonyms and\n  function aliases for those in `ghc-bignum`. It is intended to avoid\n  breaking packages that depend on `integer-gmp` internals.\n\nUpdate submodules: text, bytestring\n\nMetric Decrease:\n    Conversions\n    ManyAlternatives\n    ManyConstructors\n    Naperian\n    T10359\n    T10547\n    T10678\n    T12150\n    T12227\n    T12234\n    T12425\n    T13035\n    T13719\n    T14936\n    T1969\n    T4801\n    T4830\n    T5237\n    T5549\n    T5837\n    T8766\n    T9020\n    parsing001\n    space_leak_001\n    T16190\n    haddock.base\n\nOn ARM and i386, T17499 regresses (+6% > 5%).\nOn x86_64 unregistered, T13701 sometimes regresses (+2.2% > 2%).\n\nMetric Increase:\n    T17499\n    T13701\n\n",
  "96aa57878fd6e6a7b92e841a0df8b5255a559c97": "Update compiler\n\nThanks to ghc-bignum, the compiler can be simplified:\n\n* Types and constructors of Integer and Natural can be wired-in. It\n  means that we don't have to query them from interfaces. It also means\n  that numeric literals don't have to carry their type with them.\n\n* The same code is used whatever ghc-bignum backend is enabled. In\n  particular, conversion of bignum literals into final Core expressions\n  is now much more straightforward. Bignum closure inspection too.\n\n* GHC itself doesn't depend on any integer-* package anymore\n\n* The `integerLibrary` setting is gone.\n\n",
  "0f67e3447e5a0089b5348940d404ed876fddddfc": "Update `base` package\n\n* GHC.Natural isn't implemented in `base` anymore. It is provided by\n  ghc-bignum in GHC.Num.Natural. It means that we can safely use Natural\n  primitives in `base` without fearing issues with built-in rewrite\n  rules (cf #15286)\n\n* `base` doesn't conditionally depend on an integer-* package anymore,\n  it depends on ghc-bignum\n\n* Some duplicated code in integer-* can now be factored in GHC.Float\n\n* ghc-bignum tries to use a uniform naming convention so most of the\n  other changes are renaming\n\n",
  "aa9e7b7196f03f84579e3b4a09068c668cbe6ffb": "Update `make` based build system\n\n* replace integer-* package selection with ghc-bignum backend selection\n\n",
  "f817d816e60a487bca64037095c01e9956225b64": "Update testsuite\n\n* support detection of slow ghc-bignum backend (to replace the detection\n  of integer-simple use). There are still some test cases that the\n  native backend doesn't handle efficiently enough.\n\n* remove tests for GMP only functions that have been removed from\n  ghc-bignum\n\n* fix test results showing dependent packages (e.g. integer-gmp) or\n  showing suggested instances\n\n* fix test using Integer/Natural API or showing internal names\n\n",
  "dceecb093c3ee1e4dc970bb6669ff855ec37f6ac": "Update Hadrian\n\n* support ghc-bignum backend selection in flavours and command-line\n\n* support ghc-bignum \"--check\" flag (compare results of selected backend\n  against results of the native one) in flavours and command-line (e.g.\n  pass --bignum=check-gmp\" to check the \"gmp\" backend)\n\n* remove the hack to workaround #15286\n\n* build GMP only when the gmp backend is used\n\n* remove hacks to workaround `text` package flags about integer-*. We\n  fix `text` to use ghc-bignum unconditionally in another patch\n\n",
  "fa4281d672e462b8421098b3506bd3c4c6a1f819": "Bump bytestring and text submodules\n\n",
  "1a3f6f348004a80d3d7add81b22e4217b648b145": "docs: mention -hiedir in docs for -outputdir\n\n[skip ci]\n\n",
  "729bcb02716593ae46d7baecce4776b3f353e3f7": "Hadrian: fix build on Mac OS Catalina (#17798)\n\n",
  "95e18292731cd799e024976f11c18fdf34bcb777": "Relax allocation threshold for T12150.\n\nThis test performs little work, so the most minor allocation\nchanges often cause the test to fail.\n\nIncreasing the threshold to 2% should help with this.\n\n",
  "8ce6c393888fad5d52dfe0bff9b72cd1cf9facc0": "hadrian: Bump pinned cabal.project to an existent index-state\n\n",
  "08c1cb0f30770acbf366423f085f8ef92f7f6a06": "Fix uninitialized field read in Linker.c\n\nValgrind report of the bug when running the test `linker_unload`:\n\n    ==29666== Conditional jump or move depends on uninitialised value(s)\n    ==29666==    at 0x369C5B4: setOcInitialStatus (Linker.c:1305)\n    ==29666==    by 0x369C6C5: mkOc (Linker.c:1347)\n    ==29666==    by 0x36C027A: loadArchive_ (LoadArchive.c:522)\n    ==29666==    by 0x36C0600: loadArchive (LoadArchive.c:626)\n    ==29666==    by 0x2C144CD: ??? (in /home/omer/haskell/ghc_2/testsuite/tests/rts/linker/linker_unload.run/linker_unload)\n    ==29666==\n    ==29666== Conditional jump or move depends on uninitialised value(s)\n    ==29666==    at 0x369C5B4: setOcInitialStatus (Linker.c:1305)\n    ==29666==    by 0x369C6C5: mkOc (Linker.c:1347)\n    ==29666==    by 0x369C9F6: preloadObjectFile (Linker.c:1507)\n    ==29666==    by 0x369CA8D: loadObj_ (Linker.c:1536)\n    ==29666==    by 0x369CB17: loadObj (Linker.c:1557)\n    ==29666==    by 0x3866BC: main (linker_unload.c:33)\n\nThe problem is `mkOc` allocates a new `ObjectCode` and calls\n`setOcInitialStatus` without initializing the `status` field.\n`setOcInitialStatus` reads the field as first thing:\n\n    static void setOcInitialStatus(ObjectCode* oc) {\n        if (oc->status == OBJECT_DONT_RESOLVE)\n          return;\n\n        if (oc->archiveMemberName == NULL) {\n            oc->status = OBJECT_NEEDED;\n        } else {\n            oc->status = OBJECT_LOADED;\n        }\n    }\n\n`setOcInitialStatus` is unsed in two places for two different purposes:\nin `mkOc` where we don't have the `status` field initialized yet (`mkOc`\nis supposed to initialize it), and `loadOc` where we do have `status`\nfield initialized and we want to update it. Instead of splitting the\nfunction into two functions which are both called just once I inline the\nfunctions in the use sites and remove it.\n\nFixes #18342\n\n",
  "da18ff9935e72c7fe6127cb5d5d0c53654a204b0": "fix windows bootstrap due to linker changes\n\n",
  "2af0ec9059b94e1fa6b37eda60216e0222e1a53d": "DynFlags: store default depth in SDocContext (#17957)\n\nIt avoids having to use DynFlags to reach for pprUserLength.\n\n",
  "d4a0be758003f32b9d9d89cfd14b9839ac002f4d": "Move tablesNextToCode field into Platform\n\ntablesNextToCode is a platform setting and doesn't belong into DynFlags\n(#17957). Doing this is also a prerequisite to fix #14335 where we deal\nwith two platforms (target and host) that may have different platform\nsettings.\n\n",
  "809caedffe489931efa8c96a60eaed6d7ff739b9": "Switch from HscSource to IsBootInterface for module lookup in GhcMake\n\nWe look up modules by their name, and not their contents. There is no\nway to separately reference a signature vs regular module; you get what\nyou get. Only boot files can be referenced indepenently with `import {-#\nSOURCE #-}`.\n\n",
  "7750bd456f32c3e91b9165587fe290122b9c2444": "Cmm: introduce SAVE_REGS/RESTORE_REGS\n\nWe don't want to save both Fn and Dn register sets on x86-64 as they are\naliased to the same arch register (XMMn).\n\nMoreover, when SAVE_STGREGS was used in conjunction with `jump foo [*]`\nwhich makes a set of Cmm registers alive so that they cover all arch\nregisters used to pass parameter, we could have Fn, Dn and XMMn alive at\nthe same time. It made the LLVM code generator choke (see #17920).\n\nNow `SAVE_REGS/RESTORE_REGS` and `jump foo [*]` use the same set of\nregisters.\n\n",
  "2636794d1a1d0c4c2666d5afb002b0ba73600f8a": "CmmToC: don't add extern decl to parsed Cmm data\n\nPreviously, if a .cmm file *not in the RTS* contained something like:\n\n```cmm\nsection \"rodata\" { msg : bits8[] \"Test\\n\"; }\n```\n\nIt would get compiled by CmmToC into:\n\n```c\nERW_(msg);\nconst char msg[] = \"Test\\012\";\n```\n\nand fail with:\n\n```\n/tmp/ghc32129_0/ghc_4.hc:5:12: error:\n     error: conflicting types for \\u2018msg\\u2019\n     const char msg[] = \"Test\\012\";\n                ^~~\n\nIn file included from /tmp/ghc32129_0/ghc_4.hc:3:0: error:\n\n/tmp/ghc32129_0/ghc_4.hc:4:6: error:\n     note: previous declaration of \\u2018msg\\u2019 was here\n     ERW_(msg);\n          ^\n\n/builds/hsyl20/ghc/_build/install/lib/ghc-8.11.0.20200605/lib/../lib/x86_64-linux-ghc-8.11.0.20200605/rts-1.0/include/Stg.h:253:46: error:\n     note: in definition of macro \\u2018ERW_\\u2019\n     #define ERW_(X)   extern       StgWordArray (X)\n                                                  ^\n```\n\nSee the rationale for this on https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary/compiler/backends/ppr-c#prototypes\n\nNow we don't generate these extern declarations (ERW_, etc.) for\ntop-level data. It shouldn't change anything for the RTS (the only place\nwe use .cmm files) as it is already special cased in\n`GHC.Cmm.CLabel.needsCDecl`. And hand-written Cmm can use explicit\nextern declarations when needed.\n\nNote that it allows `cgrun069` test to pass with CmmToC (cf #15467).\n\n",
  "5f6a0665512717271ac2b249d107e2a0cb18ae86": "LLVM: refactor and comment register padding code (#17920)\n\n",
  "cad62ef11972490b180fad3cd4a5c7754fa218e4": "Add tests for #17920\n\nMetric Decrease:\n    T12150\n    T12234\n\n",
  "a2a9006b068ba9af9d41711307a8d597d2bb03d7": "Fix issue #18262 by zonking constraints after solving\n\nZonk residual constraints in checkForExistence to reveal user type\nerrors.\n\nPreviously when `:instances` was used with instances that have TypeError\nconstraints the result would look something like:\n\ninstance [safe] s0 => Err 'A -- Defined at ../Bug2.hs:8:10\n\nwhereas after zonking, `:instances` now sees the `TypeError` and\nproperly eliminates the constraint from the results.\n\n",
  "181516bcd6f18f22e1df3915bfca0c36524a725b": "Fix a buglet in Simplify.simplCast\n\nThis bug, revealed by #18347, is just a missing update to\nsc_hole_ty in simplCast.  I'd missed a code path when I\nmade the recentchanges in\n\n    commit 6d49d5be904c0c01788fa7aae1b112d5b4dfaf1c\n    Author: Simon Peyton Jones <simonpj@microsoft.com>\n    Date:   Thu May 21 12:53:35 2020 +0100\n\n    Implement cast worker/wrapper properly\n\nThe fix is very easy.\n\nTwo other minor changes\n\n* Tidy up in SimpleOpt.simple_opt_expr. In fact I think this is an\n  outright bug, introduced in the fix to #18112: we were simplifying\n  the same coercion twice *with the same substitution*, which is just\n  wrong.  It'd be a hard bug to trigger, so I just fixed it; less code\n  too.\n\n* Better debug printing of ApplyToVal\n\n",
  "625a7f5465d51d054c6930772412bad7d87189c5": "Two small tweaks to Coercion.simplifyArgsWorker\n\nThese tweaks affect the inner loop of simplifyArgsWorker, which\nin turn is called from the flattener in Flatten.hs.  This is\na key perf bottleneck to T9872{a,b,c,d}.\n\nThese two small changes have a modest but useful benefit.\nNo change in functionality whatsoever.\n\nRelates to #18354\n\n",
  "b5768cce0214e20937f8e1d41ef1d9b5613b02ae": "Don't use timesInt2# with GHC < 8.11 (fix #18358)\n\n",
  "7ad4085c22a8d5030545cc9e0fedd0784836ecbf": "Fix invalid printf format\n\n",
  "a1f34d37b47826e86343e368a5c00f1a4b1f2bce": "Add missing entry to freeNamesItem (#18369)\n\n",
  "03a708ba8e8c323b07d8d2e0115d6eb59987cc02": "Enable large address space optimization on windows.\n\nStarting with Win 8.1/Server 2012 windows no longer preallocates\npage tables for reserverd memory eagerly, which prevented us from\nusing this approach in the past.\n\nWe also try to allocate the heap high in the memory space.\nHopefully this makes it easier to allocate things in the low\n4GB of memory that need to be there. Like jump islands for the\nlinker.\n\n",
  "7e6d3d09d983337df30d12e5aaa96bae9b81b324": "In `:break ident` allow out of scope and nested identifiers (Fix #3000)\n\nThis patch fixes the bug and implements the feature request of #3000.\n\n1. If `Module` is a real module name and `identifier` a name of a\ntop-level function in `Module` then `:break Module.identifer` works\nalso for an `identifier` that is out of scope.\n\n2. Extend the syntax for `:break identifier` to:\n\n    :break [ModQual.]topLevelIdent[.nestedIdent]...[.nestedIdent]\n\n`ModQual` is optional and is either the effective name of a module or\nthe local alias of a qualified import statement.\n\n`topLevelIdent` is the name of a top level function in the module\nreferenced by `ModQual`.\n\n`nestedIdent` is optional and the name of a function nested in a let or\nwhere clause inside the previously mentioned function `nestedIdent` or\n`topLevelIdent`.\n\nIf `ModQual` is a module name, then `topLevelIdent` can be any top level\nidentifier in this module. If `ModQual` is missing or a local alias of a\nqualified import, then `topLevelIdent` must be in scope.\n\nBreakpoints can be set on arbitrarily deeply nested functions, but the\nwhole chain of nested function names must be specified.\n\n3. To support the new functionality rewrite the code to tab complete `:break`.\n\n",
  "30e42652ed895c3ed086e7834be46f93ba1cc61b": "make: Respect XELATEX variable\n\nPreviously we simply ignored the XELATEX variable when building\nPDF documentation.\n\n",
  "4acc2934952f4849c2082015d9bebef446d46545": "hadrian/make: Detect makeindex\n\nPreviously we would simply assume that makeindex was available.\nNow we correctly detect it in `configure` and respect this conclusion in\nhadrian and make.\n\n",
  "0d61f866b43d3385be3a8521ba24503c13e8d404": "Expunge GhcTcId\n\nGHC.Hs.Extension had\n\n  type GhcPs   = GhcPass 'Parsed\n  type GhcRn   = GhcPass 'Renamed\n  type GhcTc   = GhcPass 'Typechecked\n  type GhcTcId = GhcTc\n\nThe last of these, GhcTcId, is a vestige of the past.\n\nThis patch expunges it from GHC.\n\n",
  "8ddbed4ad1772ac7dfc96b352a3dc35d958a5f9b": "add examples to Data.Traversable\n\n",
  "284001d00995c82a1f2b38f696138ad683b5364b": "Export readBinIface_\n\n",
  "90f438724dbc1ef9e4b371034d44170738fe3224": "Export everything from HsToCore.\n\nThis lets us reuse these functions in haddock, avoiding synchronization bugs.\n\nAlso fixed some divergences with haddock in that file\n\nUpdates haddock submodule\n\n",
  "c7dd6da7e066872a949be7c914cc700182307cd2": "Clean up haddock hyperlinks of GHC.* (part1)\n\nThis updates haddock comments only.\n\nThis patch focuses to update for hyperlinks in GHC API's haddock comments,\nbecause broken links especially discourage newcomers.\n\nThis includes the following hierarchies:\n  - GHC.Hs.*\n  - GHC.Core.*\n  - GHC.Stg.*\n  - GHC.Cmm.*\n  - GHC.Types.*\n  - GHC.Data.*\n  - GHC.Builtin.*\n  - GHC.Parser.*\n  - GHC.Driver.*\n  - GHC top\n\n",
  "1eb997a84669f158de9dd16a9e54d279cec22293": "Clean up haddock hyperlinks of GHC.* (part2)\n\nThis updates haddock comments only.\n\nThis patch focuses to update for hyperlinks in GHC API's haddock comments,\nbecause broken links especially discourage newcomers.\n\nThis includes the following hierarchies:\n\n  - GHC.Iface.*\n  - GHC.Llvm.*\n\n  - GHC.Rename.*\n  - GHC.Tc.*\n\n  - GHC.HsToCore.*\n  - GHC.StgToCmm.*\n  - GHC.CmmToAsm.*\n\n  - GHC.Runtime.*\n\n  - GHC.Unit.*\n  - GHC.Utils.*\n  - GHC.SysTools.*\n\n",
  "67a86b4d4d21954bae7aaddec7617228025a8270": "Add MonadZip and MonadFix instances for Complex\n\nThese instances are taken from\nhttps://hackage.haskell.org/package/linear-1.21/docs/Linear-Instances.html\n\nThey are the unique possible, so let they be in `base`.\n\n",
  "c50ef26edaa537c0a13ac1a574632f9078c5671b": "test suite: add reproducer for #17516\n\n",
  "fe281b27d544920a2c2ddc00f6284006b85ab294": "Enable maxBound checks for OverloadedLists (Fixes #18172)\n\nConsider the Literal `[256] :: [Data.Word.Word8]`\n\nWhen the `OverloadedLists` extension is not active, then the `ol_ext` field\nin the `OverLitTc` record that is passed to the function `getIntegralLit`\ncontains the type `Word8`. This is a simple type, and we can use its\ntype constructor immediately for the `warnAboutOverflowedLiterals` function.\n\nWhen the `OverloadedLists` extension is active, then the `ol_ext` field\ncontains the type family `Item [Word8]`. The function `nomaliseType` is used\nto convert it to the needed type `Word8`.\n\n",
  "a788d4d17ad332dbfbe08e6822c52ae0de6ef496": "rts/Hash: Simplify freeing of HashListChunks\n\nWhile looking at #18348 I noticed that the treatment of HashLists are a\nbit more complex than necessary (which lead to some initial confusion on\nmy part). Specifically, we allocate HashLists in chunks. Each chunk\nallocation makes two allocations: one for the chunk itself and one for a\nHashListChunk to link together the chunks for the purposes of freeing.\n\nSimplify this (and hopefully make the relationship between these\nclearer) but allocating the HashLists and HashListChunk in a single\nmalloc. This will both make the implementation easier to follow and\nreduce C heap fragmentation.\n\nNote that even after this patch we fail to bound the size of the free\nHashList pool. However, this is a separate bug.\n\n",
  "d3c2d59bafe253dd7e4966a46564fb16acb1af5c": "RTS: avoid overflow on 32-bit arch (#18375)\n\nWe're now correctly computing allocated bytes on 32-bit arch, so we get\nhuge increases.\n\nMetric Increase:\n    haddock.Cabal\n    haddock.base\n    haddock.compiler\n    space_leak_001\n\n",
  "a3d69dc6c2134afe239caf4f881ba5542d2c2be0": "GHC.Core.Unify: Make UM actions one-shot by default\n\nThis MR makes the UM monad in GHC.Core.Unify into a one-shot\nmonad.  See the long Note [The one-shot state monad trick].\n\nSee also #18202 and !3309, which applies this to all Reader/State-like\nmonads in GHC for compile-time perf improvements. The pattern used\nhere enables something similar to the state-hack, but is applicable to\nuser-defined monads, not just `IO`.\n\nMetric Decrease 'runtime/bytes allocated' (test_env='i386-linux-deb9'):\n    haddock.Cabal\n\n",
  "9ee58f8d900884ac8b721b6b95dbfa6500f39431": "Implement the proposed -XQualifiedDo extension\n\nCo-authored-by: Facundo Dom\u00ednguez <facundo.dominguez@tweag.io>\n\nQualifiedDo is implemented using the same placeholders for operation names in\nthe AST that were devised for RebindableSyntax. Whenever the renamer checks\nwhich names to use for do syntax, it first checks if the do block is qualified\n(e.g. M.do { stmts }), in which case it searches for qualified names in\nthe module M.\n\nThis allows users to write\n\n    {-# LANGUAGE QualifiedDo #-}\n    import qualified SomeModule as M\n\n    f x = M.do           -- desugars to:\n      y <- M.return x    -- M.return x M.>>= \\y ->\n      M.return y         -- M.return y M.>>\n      M.return y         -- M.return y\n\nSee Note [QualifiedDo] and the users' guide for more details.\n\nIssue #18214\n\nProposal:\nhttps://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0216-qualified-do.rst\n\nSince we change the constructors `ITdo` and `ITmdo` to carry the new module\nname, we need to bump the haddock submodule to account or the new shape of\nthese constructors.\n\n",
  "ce987865d7594ecbcb3d27435eef773e95b2db85": "Revamp the treatment of auxiliary bindings for derived instances\n\nThis started as a simple fix for #18321 that organically grew into a\nmuch more sweeping refactor of how auxiliary bindings for derived\ninstances are handled. I have rewritten `Note [Auxiliary binders]`\nin `GHC.Tc.Deriv.Generate` to explain all of the moving parts, but\nthe highlights are:\n\n* Previously, the OccName of each auxiliary binding would be given\n  a suffix containing a hash of its package name, module name, and\n  parent data type to avoid name clashes. This was needlessly\n  complicated, so we take the more direct approach of generating\n  `Exact` `RdrName`s for each auxiliary binding with the same\n  `OccName`, but using an underlying `System` `Name` with a fresh\n  `Unique` for each binding. Unlike hashes, allocating new `Unique`s\n  does not require any cleverness and avoid name clashes all the\n  same...\n* ...speaking of which, in order to convince the renamer that multiple\n  auxiliary bindings with the same `OccName` (but different\n  `Unique`s) are kosher, we now use `rnLocalValBindsLHS` instead of\n  `rnTopBindsLHS` to rename auxiliary bindings. Again, see\n  `Note [Auxiliary binders]` for the full story.\n* I have removed the `DerivHsBind` constructor for\n  `DerivStuff`\u2014which was only used for `Data.Data`-related\n  auxiliary bindings\u2014and refactored `gen_Data_binds` to use\n  `DerivAuxBind` instead. This brings the treatment of\n  `Data.Data`-related auxiliary bindings in line with every other\n  form of auxiliary binding.\n\nFixes #18321.\n\n",
  "a403eb917bd26caf96c29d67bfe91163b593b2c9": "ghc-bignum: fix division by zero (#18359)\n\n",
  "1b3d13b68c95ef9bbeca4437028531d184abcbea": "Fix ghc-bignum exceptions\n\nWe must ensure that exceptions are not simplified. Previously we used:\n\n   case raiseDivZero of\n      _ -> 0## -- dummyValue\n\nBut it was wrong because the evaluation of `raiseDivZero` was removed and\nthe dummy value was directly returned. See new Note [ghc-bignum exceptions].\n\nI've also removed the exception triggering primops which were fragile.\nWe don't need them to be primops, we can have them exported by ghc-prim.\n\nI've also added a test for #18359 which triggered this patch.\n\n",
  "a74ec37c9d7679a5563ab86a8759c79c3c5de6f0": "Better loop detection in findTypeShape\n\nAndreas pointed out, in !3466, that my fix for #18304 was not\nquite right.  This patch fixes it properly, by having just one\nRecTcChecker rather than (implicitly) two nested ones, in\nfindTypeShape.\n\n",
  "a04020b88d4935d675f989806aff251f459561e9": "DynFlags: don't store buildTag\n\n`DynFlags.buildTag` was a field created from the set of Ways in\n`DynFlags.ways`. It had to be kept in sync with `DynFlags.ways` which\nwas fragile. We want to avoid global state like this (#17957).\n\nMoreover in #14335 we also want to support loading units with different\nways: target units would still use `DynFlags.ways` but plugins would use\n`GHC.Driver.Ways.hostFullWays`. To avoid having to deal both with build\ntag and with ways, we recompute the buildTag on-the-fly (should be\npretty cheap) and we remove `DynFlags.buildTag` field.\n\n",
  "0e83efa24636c72811e4c79fe1c7e4f7cf3170cd": "Don't generalize when typechecking a tuple section\n\nThe code is simpler and cleaner.\n\n",
  "d8ba9e6f951a2f8c6e2429a8b2dcb035c392908f": "RTS: Refactor Haskell-C glue for PPC 64-bit\n\nMake sure the stack is 16 byte aligned even when reserved stack\nbytes are not a multiple of 16 bytes.\n\nAvoid saving r2 (TOC). On ELF v1 the function descriptor of StgReturn\nhas the same TOC as StgRun, on ELF v2 the TOC is recomputed in the\nfunction prologue.\n\nUse the ABI provided functions to save clobbered GPRs and FPRs.\n\nImprove comments. Describe what the stack looks like and how it relates\nto the respective ABIs.\n\n",
  "42f797b0ad034a92389e7081aa50ef4ab3434d01": "Use NHsCoreTy to embed types into GND-generated code\n\n`GeneralizedNewtypeDeriving` is in the unique situation where it must\nproduce an `LHsType GhcPs` from a Core `Type`. Historically, this was\ndone with the `typeToLHsType` function, which walked over the entire\n`Type` and attempted to construct an `LHsType` with the same overall\nstructure. `typeToLHsType` is quite complicated, however, and has\nbeen the subject of numerous bugs over the years (e.g., #14579).\n\nLuckily, there is an easier way to accomplish the same thing: the\n`XHsType` constructor of `HsType`. `XHsType` bundles an `NHsCoreTy`,\nwhich allows embedding a Core `Type` directly into an `HsType`,\navoiding the need to laboriously convert from one to another (as\n`typeToLHsType` did). Moreover, renaming and typechecking an\n`XHsType` is simple, since one doesn't need to do anything to a\nCore `Type`...\n\n...well, almost. For the reasons described in\n`Note [Typechecking NHsCoreTys]` in `GHC.Tc.Gen.HsType`, we must\napply a substitution that we build from the local `tcl_env` type\nenvironment. But that's a relatively modest price to pay.\n\nNow that `GeneralizedNewtypeDeriving` uses `NHsCoreTy`, the\n`typeToLHsType` function no longer has any uses in GHC, so this patch\nrips it out. Some additional tweaks to `hsTypeNeedsParens` were\nnecessary to make the new `-ddump-deriv` output correctly\nparenthesized, but other than that, this patch is quite\nstraightforward.\n\nThis is a mostly internal refactoring, although it is likely that\n`GeneralizedNewtypeDeriving`-generated code will now need fewer\nlanguage extensions in certain situations than it did before.\n\n",
  "68530b1cd45629e5a353a37df80195ac54d26ade": "Fix duplicated words and typos in comments and user guide\n\n",
  "15b79befc246aa9c63dd084012dc7843ea93daaa": "Add integer-gmp's ghc.mk and GNUmakefile to .gitignore\n\n",
  "bfa5698b1ab0190820a2df19487d3d72d3a7924d": "Fix a typo in Lint\n\nThis simple error in GHC.Core.Litn.lintJoinLams meant that\nLint reported bogus errors.\n\nFixes #18399\n\n",
  "71006532abb88a53df7c7e0b3a5e2c8af99a48d1": "Reject nested foralls/contexts in instance types more consistently\n\nGHC is very wishy-washy about rejecting instance declarations with\nnested `forall`s or contexts that are surrounded by outermost\nparentheses. This can even lead to some strange interactions with\n`ScopedTypeVariables`, as demonstrated in #18240. This patch makes\nGHC more consistently reject instance types with nested\n`forall`s/contexts so as to prevent these strange interactions.\n\nOn the implementation side, this patch tweaks `splitLHsInstDeclTy`\nand `getLHsInstDeclHead` to not look through parentheses, which can\nbe semantically significant. I've added a\n`Note [No nested foralls or contexts in instance types]` in\n`GHC.Hs.Type` to explain why. This also introduces a\n`no_nested_foralls_contexts_err` function in `GHC.Rename.HsType` to\ncatch nested `forall`s/contexts in instance types. This function is\nnow used in `rnClsInstDecl` (for ordinary instance declarations) and\n`rnSrcDerivDecl` (for standalone `deriving` declarations), the latter\nof which fixes #18271.\n\nOn the documentation side, this adds a new\n\"Formal syntax for instance declaration types\" section to the GHC\nUser's Guide that presents a BNF-style grammar for what is and isn't\nallowed in instance types.\n\nFixes #18240. Fixes #18271.\n\n",
  "bccf3351a28638fba94953c4bb244ecfc3a1a044": "Add ghc-bignum to 8.12 release notes\n\n",
  "81704a6f3b155b0bfbc20f53cd821be3cb9006a7": "Update ssh keys in CI performance metrics upload script\n\n",
  "85310fb83fdb7d7294bd453026102fc42000bf14": "Add missing Ix instances for tuples of size 6 through 15 (#16643)\n\n",
  "cbb6b62f54c77637e29bc66e3d1214541c347753": "Implement -XLexicalNegation (GHC Proposal #229)\n\nThis patch introduces a new extension, -XLexicalNegation, which detects\nwhether the minus sign stands for negation or subtraction using the\nwhitespace-based rules described in GHC Proposal #229.\n\nUpdates haddock submodule.\n\n",
  "fb5a0d01d575cdb830918a6a0406f385de2749c2": "#17169: Clarify Fixed's Enum instance.\n\n",
  "b316804dbafe1d0287fd33f656b7ce5711ec34f7": "Improve debug tracing for substitution\n\nThis patch improves debug tracing a bit (#18395)\n\n* Remove the ancient SDoc argument to substitution, replacing it\n  with a HasDebugCallStack constraint. The latter does the same\n  job (indicate the call site) but much better.\n\n* Add HasDebugCallStack to simpleOptExpr, exprIsConApp_maybe\n  I needed this to help nail the lookupIdSubst panic in\n  #18326, #17784\n\n",
  "5c9fabb82b39aed9e61c6b78c72312b20a568c68": "Add most common return values for `os` and `arch`\n\n",
  "76d8cc744977d98f6a427b1816198709e2d2e856": "Desugar quoted uses of DerivingVia and expression type signatures properly\n\nThe way that `GHC.HsToCore.Quote` desugared quoted `via` types (e.g.,\n`deriving via forall a. [a] instance Eq a => Eq (List a)`) and\nexplicit type annotations in signatures (e.g.,\n`f = id @a :: forall a. a -> a`) was completely wrong, as it did not\nimplement the scoping guidelines laid out in\n`Note [Scoped type variables in bindings]`. This is easily fixed.\n\nWhile I was in town, I did some minor cleanup of related Notes:\n\n* `Note [Scoped type variables in bindings]` and\n  `Note [Scoped type variables in class and instance declarations]`\n  say very nearly the same thing. I decided to just consolidate the\n  two Notes into `Note [Scoped type variables in quotes]`.\n* `Note [Don't quantify implicit type variables in quotes]` is\n  somewhat outdated, as it predates GHC 8.10, where the\n  `forall`-or-nothing rule requires kind variables to be explicitly\n  quantified in the presence of an explicit `forall`. As a result,\n  the running example in that Note doesn't even compile. I have\n  changed the example to something simpler that illustrates the\n  same point that the original Note was making.\n\nFixes #18388.\n\n",
  "44d6a3352d708785b75aeb616bfc7efff839184e": "T16012: Be verbose on failure.\n\n",
  "f985333002c1690bf49debcc64fc65ed1d1de244": "Bump ghc-prim version to 0.7.0\n\nFixes #18279. Bumps the `text` submodule.\n\n"
};var chartData = {
  "type": "line",
  "data": {
    "labels": [
      "Predicate, Equivalence derive via `.. -> a -> All' (55e35c0b)",
      "hadrian: add a --freeze2 option to freeze stage 1 and 2 (d7e0b57f)",
      "Don't reload environment files on every setSessionDynFlags (d880d6b2)",
      "Factor out HsPatSigType for pat sigs/RULE term sigs (#16762) (102cfd67)",
      "fix(documentation): Fix the RST links to GHC.Prim (b17574f7)",
      "Document (->) using inferred quantification for its runtime representations. (df021fb1)",
      "Tweak man page for ghc command (1a93ea57)",
      "GHCi: Add link to the user's guide in help message (a951e1ba)",
      "Handle single unused import (404581ea)",
      "Ensure that printMinimalImports closes handle (1c999e5d)",
      "hadrian: Tell testsuite driver about LLVM availability (c9f5a8f4)",
      "Improve some folds over Uniq[D]FM (c05c0659)",
      "Use Data.IntMap.disjoint (477f13bb)",
      "IdInfo: Add reference to bitfield-packing ticket (e9c0110c)",
      "DmdAnal: Improve handling of precise exceptions (9bd20e83)",
      "GHC.Cmm.Opt: Handle MO_XX_Conv (568d7279)",
      "Remove duplicate Note [When to print foralls] in GHC.Core.TyCo.Ppr (5bcf8606)",
      "base: Add Generic instances to various datatypes under GHC.* (55f0e783)",
      "Explicit Specificity (a9311cd5)",
      "Lint should say when it is checking a rule (24e61aad)",
      "nonmoving: Optimise the write barrier (78c6523c)",
      "Refactor linear reg alloc to remember past assignments. (13f6c9d0)",
      "NCG: Codelayout: Distinguish conditional and other branches. (edc2cc58)",
      "gitlab-ci: Set locale to C.UTF-8. (b7a6b2f4)",
      "Allow spaces in GHCi :script file names (a8c27cf6)",
      "Add extra tests for GHCi :script syntax checks (82663959)",
      "Allow GHCi :script file names in double quotes (a0b79e1b)",
      "Update documentation for GHCi :script (cf566330)",
      "llvmGen: Consider Relocatable read-only data as not constantReferences: #18137 (0004ccb8)",
      "Use `Checker` for `tc_pat` (964d3ea2)",
      "Use `Checker` for `tc_lpat` and `tc_lpats` (b797aa42)",
      "More judiciously panic in `ts_pat` (5108e84a)",
      "Put `PatEnv` first in `GHC.Tc.Gen.Pat.Checker` (510e0451)",
      "Tiny cleaup eta-reduce away a function argument (cb4231db)",
      "Use braces with do in `SplicePat` case for consistency (6890c38d)",
      "Fix spelling mistakes and typos (3451584f)",
      "Add INLINABLE pragmas to Enum list producers (b552e531)",
      "Piggyback on Enum Word methods for Word64 (e7480063)",
      "Document INLINE(ABLE) pragmas that enable fusion (892b0c41)",
      "MR template should ask for key part (2b363ebb)",
      "Make `Int`'s `mod` and `rem` strict in their first arguments (a95bbd0b)",
      "Clarify pitfalls of NegativeLiterals; see #18022. (d3d055b8)",
      "Fix wording in primops documentation to reflect the correct reasoning: (1b508a9e)",
      "Don't variable-length encode magic iface constant. (4ca0c8a1)",
      "Add a regression test for #11506 (a1275081)",
      "Sort deterministically metric output (8a816e5f)",
      "Move isDynLinkName into GHC.Types.Name (566cc73f)",
      "docs: fix formatting and add some links (d830bbc9)",
      "Implement cstringLength# and FinalPtr (49301ad6)",
      "simplCore: Ignore ticks in rule templates (dcd6bdcc)",
      "Fix #18145 and also avoid needless work with implicit vars (82cb8913)",
      "Bump process submodule (a60dc835)",
      "users-guide: Clarify meaning of -haddock flag (856adf54)",
      "git: Add ignored commits file (7ae57afd)",
      "Add hie-bios script for windows systems (63d30e60)",
      "Honour previous values for CABAL and CABFLAGS (59182b88)",
      "Add specific configuration for windows in hie.yaml (932dc54e)",
      "Remove not needed hie-bios output (e0eda070)",
      "Move Config module into GHC.Settings (a0ea59d6)",
      "Rename GHC.Core.Arity into GHC.Core.Opt.Arity (37430251)",
      "Rename GHC.Hs.Types into GHC.Hs.Type (a426abb9)",
      "Bump haddock submodule (1c91a7a0)",
      "Add orderingTyCon to wiredInTyCons (#18185) (66bd24d1)",
      "Remove unused hs-boot file (01c43634)",
      "Hadrian: fix cross-compiler build (#16051) (7a07aa71)",
      "Hadrian: fix distDir per stage (15ccca16)",
      "Hadrian: fix hp2ps error during cross-compilation (b420fb24)",
      "Make Unicode brackets opening/closing tokens (#18225) (cd339ef0)",
      "Revert \"Specify kind variables for inferred kinds in base.\" (013d7120)",
      "Coverage: Drop redundant ad-hoc boot module check (4c4312ed)",
      "Coverage: Make tickBoxCount strict (1abf3c84)",
      "Coverage: Make ccIndices strict (b2813750)",
      "Coverage: Don't produce ModBreaks if not HscInterpreted (02e278eb)",
      "Coverage: Factor out addMixEntry (b8c014ce)",
      "Add info about typeclass evidence to .hie files (53814a64)",
      "Make WorkWrap.Lib.isWorkerSmallEnough aware of the old arity (6604906c)",
      "Enhance Note [About units] for Backpack (cf772f19)",
      "core-spec: Modify file paths according to new module hierarchy (ede24126)",
      "eventlog: Fix racy flushing (04750304)",
      "Make `identifier` parse unparenthesized `->` (#18060) (d6203f24)",
      "GHC.Core.Unfold: Refactor traceInline (28deee28)",
      "Avoid unnecessary allocations due to tracing utilities (1f393e1e)",
      "Add Semigroup/Monoid for Q (#18123) (5f621a78)",
      "Fix #18071 (dc5f004c)",
      "FloatOut: Only eta-expand dead-end RHS if arity will increase (#18231) (10e6982c)",
      "DmdAnal: Recognise precise exceptions from case alternatives (#18086) (08dab5f7)",
      "Ticky-ticky: Record DataCon name in ticker name (aef95f11)",
      "hadrian: Don't track GHC's verbosity argument (8f021b8c)",
      "Rip out CmmStackInfo(updfr_space) (13d9380b)",
      "Fix \"build/elem\" RULE. (f10d11fa)",
      "CoreToStg: Add Outputable ArgInfo instance (bbeb2389)",
      "Make Lint check return type of a join point (0e3361ca)",
      "Do not float join points in exprIsConApp_maybe (c49f7df0)",
      "Allow simplification through runRW# (46720997)",
      "Eta expand un-saturated primops (277c2f26)",
      "base: Scrap deprecation plan for Data.Monoid.{First,Last} (f44d7ae0)",
      "Fix typo in documentation (8b494895)",
      "Always define USE_PTHREAD_FOR_ITIMER for FreeBSD. (998450f4)",
      "hadrian: introduce 'install' target (f9a513e0)",
      "Build a threaded stage 1 if the bootstrapping GHC supports it. (67738db1)",
      "PPC NCG: No per-symbol .section \".toc\" directives (aac19e6c)",
      "rts: Teach getNumProcessors to return available processors (4413828b)",
      "users-guide: Note change in getNumProcessors in users guide (1449435c)",
      "rts: Drop compatibility shims for Windows Vista (3d960169)",
      "PPC NCG: Fix .size directive on powerpc64 ELF v1 (7f8f948c)",
      "Optimize GHC.Utils.Monad. (7c555b05)",
      "Windows: Bump Windows toolchain to 0.2 (8b1cb5df)",
      "Simplify contexts in GHC.Iface.Ext.Ast (6947231a)",
      "Cleanup OVERWRITING_CLOSURE logic (2ee4f36c)",
      "Fix OVERWRITING_CLOSURE assuming closures are not inherently used (6159559b)",
      "Always zero shrunk mutable array slop when profiling (38992085)",
      "testsuite: Add test for #18151 (b0c1f2a6)",
      "testsuite: Add test for desugaring of PostfixOperators (9a99a178)",
      "HsToCore: Eta expand left sections (2b89ca5b)",
      "Winferred-safe-imports: Do not exit with error (d412d7a3)",
      "nonmoving: Optimise log2_ceil (f945eea5)",
      "Clarify description of fromListN (aab606e4)",
      "Apply suggestion to libraries/base/GHC/Exts.hs (7e5220e2)",
      "Add `isInScope` check to `lintCoercion` (f3fb1ce9)",
      "Lint rhs of IfaceRule (5ac4d946)",
      "Fix wording in documentation (1cef6126)",
      "configure: Modify aclocal.m4 according to new module hierarchy (5aaf08f2)",
      "testsuite: Don't fail if we can't unlink __symlink_test (15857ad8)",
      "testsuite: Refactor ghostscript detection (4a7229ef)",
      "testsuite/perf_notes: Fix ill-typed assignments (2ab37eaf)",
      "testsuite/testutil: Fix bytes/str mismatch (e45d5b66)",
      "testsuite: Work around spurious mypy failure (7002d0cb)",
      "Clean up file paths for new module hierarchy (11390e3a)",
      "Modify file paths to module paths for new module hierarchy (8f2e5732)",
      "Rename the singleton tuple GHC.Tuple.Unit to GHC.Tuple.Solo (68b71c4a)",
      "Hadrian: fix binary-dist target for cross-compilation (95da76c2)",
      "Improve parser error messages for the @-operator (730fcd54)",
      "Improve parser error messages for TypeApplications (0fde5377)",
      "Improve parser error messages for TemplateHaskellQuotes (c68e7e1e)",
      "gitlab-ci: Disable use of ld.lld on ARMv7 (120aedbd)",
      "gitlab-ci: Ensure that workaround for #18280 applies to bindisttest (d6279ff0)",
      "gitlab-ci: Allow ARMv7 job to fail (cb5c31b5)",
      "Clean up boot vs non-boot disambiguating types (32a4ae90)",
      "docs: Add more details on InterruptibleFFI. (c05756cd)",
      "Allow finalizeForeignPtr to be called on FinalPtr/PlainPtr. (1b975aed)",
      "Fix documentation on type families not being extracted (2bd3929a)",
      "GHC.Hs.Instances: Compile with -O0 (6735b9d9)",
      "Add test for #17669 (c330331a)",
      "rts: Add Windows-specific implementation of rtsSleep (cab684f0)",
      "compiler: Disable use of process jobs with process < 1.6.9 (ad44b504)",
      "[linker] Adds void printLoadedObjects(void); (6a4098a4)",
      "base: fix sign confusion in log1mexp implementation (fix #17125) (af5e3a88)",
      "Simple subsumption (2b792fac)",
      "Simplify bindLHsTyVarBndrs and bindHsQTyVars (2dff8141)",
      "hadrian: Add missing deriveConstants dependency on ghcplatform.h (e372331b)",
      "ghc-prim needs to depend on libc and libm (b022051a)",
      "Disable DLL loading if without system linker (6dae6548)",
      "Range is actually +/-2^32, not +/-2^31 (4a158ffc)",
      "OccurAnal: Avoid exponential behavior due to where clauses (f1bfb806)",
      "Add link to GHC's wiki in the GHC API header (9b607671)",
      "Make GADT constructors adhere to the forall-or-nothing rule properly (72c7fe9a)",
      "Always use rnImplicitBndrs to bring implicit tyvars into scope (a47e6442)",
      "Clarify leaf module names for new module hierarchy (24879129)",
      "rts: Remove unused GET_ENTRY closure macro (92de9e25)",
      "Fix -fkeep-cafs flag name in users guide (87102928)",
      "Expose impliedGFlags, impledOffGFlags, impliedXFlags (ccd6843d)",
      "Cross-module LambdaFormInfo passing (7a737e89)",
      "Give Language a Bounded instance (3b22b14a)",
      "Optimisation in Unique.Supply (9454511b)",
      "Implement cast worker/wrapper properly (6d49d5be)",
      "Fix lookupGlobalOccRn_maybe sometimes reporting an error (32fd37f5)",
      "Initialize the allocation counter in GHCi to 0 (Fixes #16012) (9b283e1b)",
      "test: fix conc038 (8d07c48c)",
      "Release Notes: Add news from the pattern-match checker [skip ci] (4c7e9689)",
      "Only test T16190 with the NCG (3445b965)",
      "DynFlags refactoring VIII (#17957) (2517a51c)",
      "Remove unused code (7a02599a)",
      "Refactor homeUnit (72d08610)",
      "Rename unsafeGetUnitInfo into unsafeLookupUnit (8dc71f55)",
      "Add allowVirtualUnits field in PackageState (f6be6e43)",
      "Enhance UnitId use (e7272d53)",
      "Remove LinkerUnitId type alias (9c5572cd)",
      "Refactor WiredMap (d345edfe)",
      "Document and refactor `mkUnit` and `mkUnitInfoMap` (3d171cd6)",
      "Remove PreloadUnitId type alias (d2109b4f)",
      "Rename listUnitInfoMap into listUnitInfo (f50c19b8)",
      "Rename Package into Unit (ed533ec2)",
      "Make ClosureUnitInfoMap uses UnitInfoMap (202728e5)",
      "Remove ClosureUnitInfoMap (55b4263e)",
      "Rename Package into Unit (2) (653d17bd)",
      "Move dump_mod_map into initUnits (ae900605)",
      "Move wiring of homeUnitInstantiations outside of mkUnitState (598cc1dd)",
      "Avoid timing module map dump in initUnits (437265eb)",
      "Remove preload parameter of mkUnitState (9400aa93)",
      "DynFlags: refactor unwireUnit (266bc3d9)",
      "Document getPreloadUnitsAnd (9e715c1b)",
      "DynFlags: remove useless add_package parameter (bd5810dc)",
      "DynFlags: make listVisibleModuleNames take a UnitState (36e1daf0)",
      "Refactor and document add_package (5226da37)",
      "Refactor and document closeUnitDeps (4b53aac1)",
      "DynFlags: findWiredInUnits (42c054f6)",
      "DynFlags: reportCycles, reportUnusable (a444d01b)",
      "DynFlags: merge_databases (8408d521)",
      "DynFlags: add UnitConfig datatype (fca2d25f)",
      "Move distrustAll into mkUnitState (4274688a)",
      "Create helper upd_wired_in_home_instantiations (28d804e1)",
      "Put database cache in UnitConfig (ac964c83)",
      "Don't return preload units when we set DyNFlags (bfd0a78c)",
      "NCGConfig: remove useless ncgUnitId field (1fbb4bf5)",
      "Doc: fix some comments (c10ff7e7)",
      "Bump haddock submodule and allow metric decrease (456e17f0)",
      "Trim the demand for recursive product types (42953902)",
      "Add introductory prose for Data.Traversable (87d504f4)",
      "Fix #12073: Add MonadFix Q instance (9f09b608)",
      "testsuite: Increase size of T12150 (220c2d34)",
      "gitlab-ci: Always push perf notes (8bba1c26)",
      "gitlab-ci: Eliminate redundant push of CI metrics (7a773f16)",
      "Use HsForAllTelescope to avoid inferred, visible foralls (a31218f7)",
      "winio: Add Atomic Exchange PrimOp and implement Atomic Ptr exchanges. (c0e6dee9)",
      "codeGen: Don't discard live case binders in unsafeEqualityProof logic (9a7462fb)",
      "testsuite: Add tests for #18227 (e4137c48)",
      "hadrian: Fix rts include and library paths (8bab9ff1)",
      "hadrian: Drop redundant GHC arguments (bd761185)",
      "FFI: Fix pass small ints in foreign call wrappers (01f7052c)",
      "Fix \"ndecreasingIndentation\" in manual (#18116) (502647f7)",
      "Use foldl' in unionManyUniqDSets (9a9cc089)",
      "Load .lo as well. (761dcb84)",
      "User's Guide: KnownNat evidence is Natural (cf01477f)",
      "Fix typos and formatting in user guide (d0dcbfe6)",
      "Resolve TODO (56a9e95f)",
      "Rename TcHoleErrors to GHC.Tc.Errors.Hole (3e884d14)",
      "hadrian: Build with threaded runtime if available (d23fc678)",
      "T16190: only measure bytes_allocated (0639dc10)",
      "docs: fix formatting in users guide (4cab6897)",
      "Move CLabel assertions into smart constructors (#17957) (eb8115a8)",
      "base: Bump to 4.15.0.0 (7faa4509)",
      "configure: Use grep -q instead of --quiet (20616959)",
      "Linear types (#15981) (40fa237e)",
      "Various performance improvements (6cb84c46)",
      "Remove integer-simple (57db91d8)",
      "ghc-bignum library (9f96bc12)",
      "Update compiler (96aa5787)",
      "Update `base` package (0f67e344)",
      "Update `make` based build system (aa9e7b71)",
      "Update testsuite (f817d816)",
      "Update Hadrian (dceecb09)",
      "Bump bytestring and text submodules (fa4281d6)",
      "docs: mention -hiedir in docs for -outputdir (1a3f6f34)",
      "Hadrian: fix build on Mac OS Catalina (#17798) (729bcb02)",
      "Relax allocation threshold for T12150. (95e18292)",
      "hadrian: Bump pinned cabal.project to an existent index-state (8ce6c393)",
      "Fix uninitialized field read in Linker.c (08c1cb0f)",
      "fix windows bootstrap due to linker changes (da18ff99)",
      "DynFlags: store default depth in SDocContext (#17957) (2af0ec90)",
      "Move tablesNextToCode field into Platform (d4a0be75)",
      "Switch from HscSource to IsBootInterface for module lookup in GhcMake (809caedf)",
      "Cmm: introduce SAVE_REGS/RESTORE_REGS (7750bd45)",
      "CmmToC: don't add extern decl to parsed Cmm data (2636794d)",
      "LLVM: refactor and comment register padding code (#17920) (5f6a0665)",
      "Add tests for #17920 (cad62ef1)",
      "Fix issue #18262 by zonking constraints after solving (a2a9006b)",
      "Fix a buglet in Simplify.simplCast (181516bc)",
      "Two small tweaks to Coercion.simplifyArgsWorker (625a7f54)",
      "Don't use timesInt2# with GHC < 8.11 (fix #18358) (b5768cce)",
      "Fix invalid printf format (7ad4085c)",
      "Add missing entry to freeNamesItem (#18369) (a1f34d37)",
      "Enable large address space optimization on windows. (03a708ba)",
      "In `:break ident` allow out of scope and nested identifiers (Fix #3000) (7e6d3d09)",
      "make: Respect XELATEX variable (30e42652)",
      "hadrian/make: Detect makeindex (4acc2934)",
      "Expunge GhcTcId (0d61f866)",
      "add examples to Data.Traversable (8ddbed4a)",
      "Export readBinIface_ (284001d0)",
      "Export everything from HsToCore. (90f43872)",
      "Clean up haddock hyperlinks of GHC.* (part1) (c7dd6da7)",
      "Clean up haddock hyperlinks of GHC.* (part2) (1eb997a8)",
      "Add MonadZip and MonadFix instances for Complex (67a86b4d)",
      "test suite: add reproducer for #17516 (c50ef26e)",
      "Enable maxBound checks for OverloadedLists (Fixes #18172) (fe281b27)",
      "rts/Hash: Simplify freeing of HashListChunks (a788d4d1)",
      "RTS: avoid overflow on 32-bit arch (#18375) (d3c2d59b)",
      "GHC.Core.Unify: Make UM actions one-shot by default (a3d69dc6)",
      "Implement the proposed -XQualifiedDo extension (9ee58f8d)",
      "Revamp the treatment of auxiliary bindings for derived instances (ce987865)",
      "ghc-bignum: fix division by zero (#18359) (a403eb91)",
      "Fix ghc-bignum exceptions (1b3d13b6)",
      "Better loop detection in findTypeShape (a74ec37c)",
      "DynFlags: don't store buildTag (a04020b8)",
      "Don't generalize when typechecking a tuple section (0e83efa2)",
      "RTS: Refactor Haskell-C glue for PPC 64-bit (d8ba9e6f)",
      "Use NHsCoreTy to embed types into GND-generated code (42f797b0)",
      "Fix duplicated words and typos in comments and user guide (68530b1c)",
      "Add integer-gmp's ghc.mk and GNUmakefile to .gitignore (15b79bef)",
      "Fix a typo in Lint (bfa5698b)",
      "Reject nested foralls/contexts in instance types more consistently (71006532)",
      "Add ghc-bignum to 8.12 release notes (bccf3351)",
      "Update ssh keys in CI performance metrics upload script (81704a6f)",
      "Add missing Ix instances for tuples of size 6 through 15 (#16643) (85310fb8)",
      "Implement -XLexicalNegation (GHC Proposal #229) (cbb6b62f)",
      "#17169: Clarify Fixed's Enum instance. (fb5a0d01)",
      "Improve debug tracing for substitution (b316804d)",
      "Add most common return values for `os` and `arch` (5c9fabb8)",
      "Desugar quoted uses of DerivingVia and expression type signatures properly (76d8cc74)",
      "T16012: Be verbose on failure. (44d6a335)",
      "Bump ghc-prim version to 0.7.0 (f9853330)"
    ],
    "datasets": [
      {
        "label": "T9203(normal) runtime/bytes allocated - aarch64-linux-deb9",
        "data": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56045440.0",
          "56045440.0",
          "56045440.0",
          "56045440.0",
          null,
          "56045440.0",
          null,
          "56045440.0",
          "56045440.0",
          "56045440.0",
          "56045440.0",
          "56045440.0",
          "56045440.0",
          null,
          null,
          "56045440.0",
          null,
          "56045440.0",
          "56045440.0",
          "56045440.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56046952.0",
          null,
          "56046952.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56046952.0",
          null,
          "56046952.0",
          "56046952.0",
          "56046952.0",
          "56046952.0",
          "56046952.0",
          "56046952.0"
        ],
        "fill": "false",
        "spanGaps": "true",
        "lineTension": 0,
        "backgroundColor": "rgb(0, 229, 212)",
        "borderColor": "rgb(0, 229, 212)"
      },
      {
        "label": "T9203(normal) runtime/bytes allocated - \"x86_64-linux-deb9-unreg-hadrian\"",
        "data": [
          null,
          null,
          null,
          null,
          "109653712.0",
          "109653712.0",
          "109653712.0",
          "109653712.0",
          null,
          "109653712.0",
          "109653712.0",
          "109653712.0",
          "109653712.0",
          "109653712.0",
          null,
          "109653712.0",
          null,
          "109653712.0",
          "109653712.0",
          "109653712.0",
          "109653712.0",
          "109653712.0",
          "109653712.0",
          null,
          null,
          null,
          null,
          "109653712.0",
          "109653712.0",
          null,
          null,
          null,
          null,
          null,
          "109653712.0",
          null,
          null,
          null,
          null,
          "109653712.0",
          "109653712.0",
          "109653712.0",
          "109653712.0",
          "109653712.0",
          "109653712.0",
          "109653712.0",
          "109653712.0",
          null,
          "109653712.0",
          "109653712.0",
          "109653712.0",
          "109653712.0",
          null,
          "109653712.0",
          null,
          null,
          null,
          "109653712.0",
          null,
          null,
          null,
          "109653712.0",
          "109653712.0",
          "109653712.0",
          null,
          null,
          "109653712.0",
          "109653712.0",
          "109653712.0",
          null,
          null,
          null,
          null,
          "109653712.0",
          "109653712.0",
          "109653712.0",
          "109653712.0",
          null,
          "109653712.0",
          "109653712.0",
          null,
          "109653712.0",
          "109653712.0",
          "109653712.0",
          null,
          "109653712.0",
          "109653712.0",
          "109653712.0",
          "109653712.0",
          "109653712.0",
          null,
          null,
          null,
          "109653696.0",
          "109653696.0",
          "109653696.0",
          null,
          "109653696.0",
          "109653696.0",
          "109653696.0",
          "109653696.0",
          null,
          null,
          "109653696.0",
          "109653696.0",
          "109653696.0",
          "109653696.0",
          "109653696.0",
          null,
          null,
          "109653696.0",
          null,
          null,
          "109653696.0",
          "109653696.0",
          "109653696.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "109653696.0",
          null,
          null,
          "109653696.0",
          "109653696.0",
          "109653696.0",
          "109653696.0",
          "109653696.0",
          "109653696.0",
          "109653696.0",
          "109653696.0",
          "109653696.0",
          "109653696.0",
          null,
          "109653696.0",
          "109653696.0",
          "109653696.0",
          "109653696.0",
          null,
          null,
          null,
          null,
          null,
          "109653696.0",
          null,
          "109653696.0",
          "109653696.0",
          "109653696.0",
          "109653696.0",
          "109653696.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "108853392.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "108853392.0",
          "108853392.0",
          "108853392.0",
          "108853392.0",
          null,
          "108853392.0",
          null,
          "108853392.0",
          "108853392.0",
          "108853392.0",
          "108853392.0",
          "108853392.0",
          "108853392.0",
          null,
          null,
          "108853392.0",
          null,
          "108853392.0",
          "108853392.0",
          "108853392.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "108857752.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "108857752.0",
          null,
          "108857752.0",
          "108857752.0",
          "108857752.0",
          "108857752.0",
          "108857752.0",
          "108857752.0"
        ],
        "fill": "false",
        "spanGaps": "true",
        "lineTension": 0,
        "backgroundColor": "rgb(161, 0, 229)",
        "borderColor": "rgb(161, 0, 229)"
      },
      {
        "label": "T9203(normal) runtime/bytes allocated - x86_64-linux-deb10",
        "data": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          "56845760.0",
          null,
          "56845760.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          null,
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56045440.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56045440.0",
          null,
          null,
          null,
          null,
          null,
          null,
          "56045440.0",
          null,
          null,
          "56045440.0",
          null,
          null,
          null,
          null,
          null,
          null,
          "56045440.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56046952.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56046952.0",
          null,
          null,
          null,
          null,
          "56046952.0",
          null,
          null
        ],
        "fill": "false",
        "spanGaps": "true",
        "lineTension": 0,
        "backgroundColor": "rgb(0, 229, 135)",
        "borderColor": "rgb(0, 229, 135)"
      },
      {
        "label": "T9203(normal) runtime/bytes allocated - x86_64-linux-fedora27",
        "data": [
          "56845760.0",
          null,
          null,
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          null,
          null,
          null,
          "56845760.0",
          "56845760.0",
          null,
          null,
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          null,
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          "56845760.0",
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          null,
          null,
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          "56845760.0",
          "56845760.0",
          null,
          "56845760.0",
          "56845760.0",
          null,
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          null,
          null,
          "56845744.0",
          "56845744.0",
          "56845744.0",
          null,
          null,
          "56845744.0",
          "56845744.0",
          "56845744.0",
          null,
          null,
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          null,
          null,
          "56845744.0",
          null,
          null,
          "56845744.0",
          "56845744.0",
          "56845744.0",
          null,
          "56845744.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56845744.0",
          null,
          null,
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          null,
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          null,
          null,
          null,
          null,
          null,
          "56845744.0",
          null,
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56045440.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56045440.0",
          "56045440.0",
          "56045440.0",
          "56045440.0",
          null,
          "56045440.0",
          null,
          "56045440.0",
          "56045440.0",
          "56045440.0",
          "56045440.0",
          "56045440.0",
          "56045440.0",
          null,
          null,
          "56045440.0",
          null,
          "56045440.0",
          "56045440.0",
          "56045440.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56046952.0",
          null,
          "56046952.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56046952.0",
          null,
          "56046952.0",
          "56046952.0",
          "56046952.0",
          "56046952.0",
          "56046952.0",
          "56046952.0"
        ],
        "fill": "false",
        "spanGaps": "true",
        "lineTension": 0,
        "backgroundColor": "rgb(91, 229, 0)",
        "borderColor": "rgb(91, 229, 0)"
      },
      {
        "label": "T9203(normal) runtime/bytes allocated - \"x86_64-linux-deb9-hadrian\"",
        "data": [
          "109260496.0",
          null,
          null,
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          null,
          null,
          null,
          "109260496.0",
          "109260496.0",
          null,
          null,
          null,
          null,
          null,
          "109260496.0",
          null,
          null,
          null,
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          "109260496.0",
          null,
          null,
          null,
          "109260496.0",
          null,
          null,
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          null,
          null,
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          "109260496.0",
          "109260496.0",
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          null,
          null,
          "109260480.0",
          "109260480.0",
          "109260480.0",
          null,
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          null,
          null,
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          null,
          null,
          "109260480.0",
          null,
          null,
          "109260480.0",
          "109260480.0",
          "109260480.0",
          null,
          "109260480.0",
          null,
          "109260480.0",
          "109260480.0",
          "109260480.0",
          null,
          null,
          null,
          null,
          "109260480.0",
          null,
          "109260480.0",
          "109260480.0",
          "109260480.0",
          null,
          null,
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          null,
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          null,
          null,
          null,
          null,
          null,
          "109260480.0",
          null,
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "108460176.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "108460176.0",
          "108460176.0",
          "108460176.0",
          "108460176.0",
          null,
          "108460176.0",
          null,
          "108460176.0",
          "108460176.0",
          "108460176.0",
          "108460176.0",
          "108460176.0",
          "108460176.0",
          null,
          null,
          "108460176.0",
          "108460176.0",
          "108460176.0",
          "108460176.0",
          "108460176.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "108464536.0",
          null,
          "108464536.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "108464536.0",
          null,
          "108464536.0",
          "108464536.0",
          "108464536.0",
          "108464536.0",
          "108464536.0",
          "108464536.0"
        ],
        "fill": "false",
        "spanGaps": "true",
        "lineTension": 0,
        "backgroundColor": "rgb(229, 0, 141)",
        "borderColor": "rgb(229, 0, 141)"
      },
      {
        "label": "T9203(normal) runtime/bytes allocated - x86_64-linux-deb9-dwarf",
        "data": [
          "56845760.0",
          null,
          null,
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          null,
          null,
          null,
          "56845760.0",
          "56845760.0",
          null,
          null,
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          null,
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          "56845760.0",
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          null,
          null,
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          "56845760.0",
          "56845760.0",
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          null,
          null,
          "56845744.0",
          "56845744.0",
          "56845744.0",
          null,
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          null,
          null,
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          null,
          null,
          "56845744.0",
          null,
          null,
          "56845744.0",
          null,
          "56845744.0",
          null,
          "56845744.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          null,
          "56845744.0",
          "56845744.0",
          "56845744.0",
          null,
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          null,
          null,
          null,
          null,
          null,
          "56845744.0",
          null,
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56045440.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56045440.0",
          "56045440.0",
          "56045440.0",
          "56045440.0",
          null,
          "56045440.0",
          null,
          "56045440.0",
          "56045440.0",
          "56045440.0",
          "56045440.0",
          "56045440.0",
          "56045440.0",
          null,
          null,
          "56045440.0",
          null,
          "56045440.0",
          "56045440.0",
          "56045440.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56046952.0",
          null,
          "56046952.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56046952.0",
          null,
          "56046952.0",
          "56046952.0",
          "56046952.0",
          "56046952.0",
          "56046952.0",
          "56046952.0"
        ],
        "fill": "false",
        "spanGaps": "true",
        "lineTension": 0,
        "backgroundColor": "rgb(229, 169, 0)",
        "borderColor": "rgb(229, 169, 0)"
      },
      {
        "label": "T9203(normal) runtime/bytes allocated - x86_64-linux-deb9-integer-simple",
        "data": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          "56845760.0",
          null,
          "56845760.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          null,
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56845744.0",
          null,
          null,
          null,
          null,
          null,
          null,
          "56845744.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56845744.0",
          "56845744.0",
          "56845744.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56845744.0",
          null,
          null,
          "56845744.0",
          null,
          null,
          null,
          null,
          null,
          "56845744.0",
          null,
          "56845744.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56045440.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56045440.0",
          null,
          null,
          null,
          null,
          null,
          null,
          "56045440.0",
          null,
          null,
          "56045440.0",
          null,
          null,
          null,
          null,
          null,
          null,
          "56045440.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56046952.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56046952.0",
          null,
          null,
          null,
          null,
          "56046952.0",
          null,
          null
        ],
        "fill": "false",
        "spanGaps": "true",
        "lineTension": 0,
        "backgroundColor": "rgb(229, 209, 0)",
        "borderColor": "rgb(229, 209, 0)"
      },
      {
        "label": "T9203(normal) runtime/bytes allocated - x86_64-linux-deb9-integer-simple-validate",
        "data": [
          "109260496.0",
          null,
          null,
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          null,
          null,
          null,
          "109260496.0",
          "109260496.0",
          null,
          null,
          null,
          null,
          null,
          "109260496.0",
          null,
          null,
          null,
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          "109260496.0",
          null,
          null,
          null,
          "109260496.0",
          null,
          null,
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          null,
          null,
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          "109260496.0",
          "109260496.0",
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          null,
          null,
          "109260480.0",
          "109260480.0",
          "109260480.0",
          null,
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          null,
          null,
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          null,
          null,
          "109260480.0",
          null,
          null,
          "109260480.0",
          "109260480.0",
          "109260480.0",
          null,
          "109260480.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "109260480.0",
          null,
          null,
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          null,
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          null,
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          null,
          null,
          null,
          null,
          null,
          "109260480.0",
          null,
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "108460176.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "108460176.0",
          "108460176.0",
          "108460176.0",
          "108460176.0",
          null,
          "108460176.0",
          null,
          "108460176.0",
          "108460176.0",
          "108460176.0",
          "108460176.0",
          "108460176.0",
          "108460176.0",
          null,
          null,
          "108460176.0",
          null,
          "108460176.0",
          "108460176.0",
          "108460176.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "108464536.0",
          null,
          "108464536.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "108464536.0",
          null,
          "108464536.0",
          "108464536.0",
          "108464536.0",
          "108464536.0",
          "108464536.0",
          "108464536.0"
        ],
        "fill": "false",
        "spanGaps": "true",
        "lineTension": 0,
        "backgroundColor": "rgb(0, 142, 229)",
        "borderColor": "rgb(0, 142, 229)"
      },
      {
        "label": "T9203(normal) runtime/bytes allocated - x86_64-windows",
        "data": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "108456728.0",
          "108456728.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "108456728.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "108461072.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "108461072.0",
          null,
          null,
          null,
          null,
          null,
          "108461072.0",
          "108461072.0"
        ],
        "fill": "false",
        "spanGaps": "true",
        "lineTension": 0,
        "backgroundColor": "rgb(0, 229, 36)",
        "borderColor": "rgb(0, 229, 36)"
      },
      {
        "label": "T9203(normal) runtime/bytes allocated - x86_64-freebsd",
        "data": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "108460176.0",
          null,
          null,
          null,
          null,
          null,
          null,
          "108460176.0",
          null,
          null,
          "108460176.0",
          null,
          null,
          null,
          null,
          null,
          null,
          "108460176.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "108464536.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "108464536.0",
          null,
          null,
          null,
          null,
          "108464536.0",
          null,
          null
        ],
        "fill": "false",
        "spanGaps": "true",
        "lineTension": 0,
        "backgroundColor": "rgb(229, 0, 121)",
        "borderColor": "rgb(229, 0, 121)"
      },
      {
        "label": "T9203(normal) runtime/bytes allocated - armv7-linux-deb9",
        "data": [
          "76456184.0",
          null,
          null,
          null,
          "76456184.0",
          "76456184.0",
          "76456184.0",
          "76456184.0",
          null,
          "76456184.0",
          "76456184.0",
          "76456184.0",
          "76456184.0",
          "76456184.0",
          "76456184.0",
          "76456184.0",
          null,
          null,
          "76456184.0",
          "76456184.0",
          "76456184.0",
          "76456184.0",
          "76456184.0",
          null,
          null,
          null,
          null,
          "76456184.0",
          "76456184.0",
          null,
          null,
          null,
          null,
          null,
          "76456184.0",
          null,
          null,
          null,
          null,
          "76456184.0",
          "76456184.0",
          "76456184.0",
          "76456184.0",
          "76456184.0",
          "76456184.0",
          "76456184.0",
          "76456184.0",
          null,
          "76456184.0",
          "76456184.0",
          "76456184.0",
          "76456184.0",
          null,
          "76456184.0",
          null,
          null,
          null,
          "76456184.0",
          null,
          null,
          null,
          "76456184.0",
          "76456184.0",
          "76456184.0",
          null,
          null,
          "76456184.0",
          "76456184.0",
          "76456184.0",
          null,
          null,
          null,
          null,
          "76456184.0",
          "76456184.0",
          "76456184.0",
          "76456184.0",
          null,
          "76456184.0",
          "76456184.0",
          null,
          "76456184.0",
          "76456184.0",
          "76456184.0",
          null,
          "76456184.0",
          "76456184.0",
          "76456184.0",
          "76456184.0",
          "76456184.0",
          null,
          null,
          null,
          "76456176.0",
          "76456176.0",
          null,
          null,
          "76456176.0",
          "76456176.0",
          "76456176.0",
          "76456176.0",
          null,
          null,
          "76456176.0",
          null,
          "76456176.0",
          "76456176.0",
          "76456176.0",
          null,
          null,
          "76456176.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "76456176.0",
          null,
          null,
          "76456176.0",
          "76456176.0",
          null,
          null,
          "76456176.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "76056024.0",
          "76056024.0",
          "76056024.0",
          "76056024.0",
          null,
          "76056024.0",
          null,
          "76056024.0",
          "76056024.0",
          "76056024.0",
          "76056024.0",
          "76056024.0",
          "76056024.0",
          null,
          null,
          "76056024.0",
          null,
          "76056024.0",
          "76056024.0",
          "76056024.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "76059536.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "76059536.0",
          null,
          "76059536.0",
          "76059536.0",
          "76059536.0",
          "76059536.0",
          "76059536.0",
          "76059536.0"
        ],
        "fill": "false",
        "spanGaps": "true",
        "lineTension": 0,
        "backgroundColor": "rgb(229, 118, 0)",
        "borderColor": "rgb(229, 118, 0)"
      },
      {
        "label": "T9203(normal) runtime/bytes allocated - x86_64-darwin",
        "data": [
          "56845760.0",
          null,
          null,
          null,
          "56845760.0",
          null,
          "56845760.0",
          "56845760.0",
          null,
          "56845760.0",
          "56845760.0",
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          null,
          null,
          null,
          "56845760.0",
          "56845760.0",
          null,
          null,
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          null,
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          "56845760.0",
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          null,
          null,
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          "56845760.0",
          "56845760.0",
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          "56845760.0",
          null,
          null,
          null,
          "56845744.0",
          "56845744.0",
          "56845744.0",
          null,
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          null,
          null,
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          null,
          null,
          "56845744.0",
          null,
          null,
          "56845744.0",
          null,
          "56845744.0",
          null,
          "56845744.0",
          null,
          "56845744.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56845744.0",
          null,
          null,
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          null,
          "56845744.0",
          "56845744.0",
          "56845744.0",
          "56845744.0",
          null,
          null,
          null,
          null,
          null,
          "56845744.0",
          null,
          "56845744.0",
          null,
          "56845744.0",
          "56845744.0",
          "56845744.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56045440.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56045440.0",
          "56045440.0",
          "56045440.0",
          "56045440.0",
          null,
          "56045440.0",
          null,
          "56045440.0",
          "56045440.0",
          "56045440.0",
          "56045440.0",
          "56045440.0",
          "56045440.0",
          null,
          null,
          "56045440.0",
          null,
          "56045440.0",
          "56045440.0",
          "56045440.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56046952.0",
          null,
          "56046952.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56046952.0",
          null,
          "56046952.0",
          "56046952.0",
          "56046952.0",
          "56046952.0",
          "56046952.0",
          "56046952.0"
        ],
        "fill": "false",
        "spanGaps": "true",
        "lineTension": 0,
        "backgroundColor": "rgb(229, 0, 33)",
        "borderColor": "rgb(229, 0, 33)"
      },
      {
        "label": "T9203(normal) runtime/bytes allocated - x86_64-linux-deb9",
        "data": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          "56845760.0",
          null,
          "56845760.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          null,
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56845760.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56845744.0",
          null,
          null,
          null,
          null,
          null,
          null,
          "56845744.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56845744.0",
          "56845744.0",
          "56845744.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56845744.0",
          null,
          null,
          "56845744.0",
          null,
          null,
          null,
          null,
          null,
          "56845744.0",
          null,
          "56845744.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56045440.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56045440.0",
          null,
          null,
          null,
          null,
          null,
          null,
          "56045440.0",
          null,
          null,
          "56045440.0",
          null,
          null,
          null,
          null,
          null,
          null,
          "56045440.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56046952.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56046952.0",
          null,
          null,
          null,
          null,
          "56046952.0",
          null,
          null
        ],
        "fill": "false",
        "spanGaps": "true",
        "lineTension": 0,
        "backgroundColor": "rgb(0, 229, 177)",
        "borderColor": "rgb(0, 229, 177)"
      },
      {
        "label": "T9203(normal) runtime/bytes allocated - x86_64-linux-deb9-llvm",
        "data": [
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "56046952.0",
          null,
          null,
          null,
          null,
          "56046952.0",
          null,
          null
        ],
        "fill": "false",
        "spanGaps": "true",
        "lineTension": 0,
        "backgroundColor": "rgb(0, 153, 229)",
        "borderColor": "rgb(0, 153, 229)"
      },
      {
        "label": "T9203(normal) runtime/bytes allocated - x86_64-linux-deb9-debug",
        "data": [
          "109260496.0",
          null,
          null,
          null,
          "109260496.0",
          null,
          "109260496.0",
          "109260496.0",
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          null,
          null,
          null,
          "109260496.0",
          "109260496.0",
          null,
          null,
          null,
          null,
          null,
          "109260496.0",
          null,
          null,
          null,
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          null,
          "109260496.0",
          null,
          null,
          null,
          "109260496.0",
          null,
          null,
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          null,
          "109260496.0",
          "109260496.0",
          null,
          null,
          null,
          null,
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          "109260496.0",
          "109260496.0",
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          "109260496.0",
          null,
          null,
          null,
          "109260480.0",
          "109260480.0",
          "109260480.0",
          null,
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          null,
          null,
          "109260480.0",
          "109260480.0",
          "109260480.0",
          null,
          "109260480.0",
          null,
          null,
          "109260480.0",
          null,
          null,
          "109260480.0",
          "109260480.0",
          "109260480.0",
          null,
          "109260480.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "109260480.0",
          null,
          null,
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          null,
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          null,
          null,
          null,
          null,
          null,
          "109260480.0",
          null,
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          "109260480.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "108460176.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "108460176.0",
          "108460176.0",
          "108460176.0",
          "108460176.0",
          null,
          "108460176.0",
          null,
          "108460176.0",
          "108460176.0",
          "108460176.0",
          "108460176.0",
          "108460176.0",
          "108460176.0",
          null,
          null,
          "108460176.0",
          null,
          "108460176.0",
          "108460176.0",
          "108460176.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "108464536.0",
          null,
          "108464536.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "108464536.0",
          null,
          "108464536.0",
          "108464536.0",
          "108464536.0",
          "108464536.0",
          "108464536.0",
          "108464536.0"
        ],
        "fill": "false",
        "spanGaps": "true",
        "lineTension": 0,
        "backgroundColor": "rgb(0, 27, 229)",
        "borderColor": "rgb(0, 27, 229)"
      },
      {
        "label": "T9203(normal) runtime/bytes allocated - i386-linux-deb9",
        "data": [
          "76652792.0",
          null,
          null,
          null,
          "76652792.0",
          "76652792.0",
          "76652792.0",
          "76652792.0",
          null,
          "76652792.0",
          "76652792.0",
          "76652792.0",
          "76652792.0",
          "76652792.0",
          "76652792.0",
          "76652792.0",
          null,
          "76652792.0",
          "76652792.0",
          "76652792.0",
          "76652792.0",
          "76652792.0",
          "76652792.0",
          null,
          null,
          null,
          null,
          "76652792.0",
          "76652792.0",
          null,
          null,
          null,
          null,
          null,
          "76652792.0",
          null,
          null,
          null,
          null,
          "76652792.0",
          "76652792.0",
          "76652792.0",
          "76652792.0",
          "76652792.0",
          "76652792.0",
          "76652792.0",
          "76652792.0",
          null,
          "76652792.0",
          "76652792.0",
          "76652792.0",
          "76652792.0",
          null,
          "76652792.0",
          null,
          null,
          null,
          "76652792.0",
          null,
          null,
          null,
          "76652792.0",
          "76652792.0",
          "76652792.0",
          null,
          null,
          "76652792.0",
          "76652792.0",
          "76652792.0",
          null,
          null,
          null,
          null,
          "76652792.0",
          "76652792.0",
          "76652792.0",
          "76652792.0",
          null,
          "76652792.0",
          "76652792.0",
          null,
          "76652792.0",
          "76652792.0",
          "76652792.0",
          null,
          "76652792.0",
          "76652792.0",
          "76652792.0",
          "76652792.0",
          "76652792.0",
          null,
          null,
          null,
          "76652784.0",
          "76652784.0",
          "76652784.0",
          null,
          "76652784.0",
          "76652784.0",
          "76652784.0",
          "76652784.0",
          null,
          null,
          "76652784.0",
          "76652784.0",
          "76652784.0",
          "76652784.0",
          "76652784.0",
          null,
          null,
          "76652784.0",
          null,
          null,
          "76652784.0",
          "76652784.0",
          "76652784.0",
          null,
          "76652784.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "76652784.0",
          null,
          null,
          "76652784.0",
          "76652784.0",
          "76652784.0",
          "76652784.0",
          "76652784.0",
          "76652784.0",
          "76652784.0",
          "76652784.0",
          "76652784.0",
          "76652784.0",
          null,
          "76652784.0",
          "76652784.0",
          "76652784.0",
          "76652784.0",
          null,
          null,
          null,
          null,
          null,
          "76652784.0",
          null,
          "76652784.0",
          "76652784.0",
          "76652784.0",
          "76652784.0",
          "76652784.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "76252632.0",
          "76252632.0",
          "76252632.0",
          "76252632.0",
          null,
          "76252632.0",
          null,
          "76252632.0",
          "76252632.0",
          "76252632.0",
          "76252632.0",
          "76252632.0",
          "76252632.0",
          null,
          null,
          "76252632.0",
          null,
          "76252632.0",
          "76252632.0",
          "76252632.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "76256144.0",
          null,
          "76256144.0",
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          null,
          "76256144.0",
          null,
          "76256144.0",
          "76256144.0",
          "76256144.0",
          "76256144.0",
          "76256144.0",
          "76256144.0"
        ],
        "fill": "false",
        "spanGaps": "true",
        "lineTension": 0,
        "backgroundColor": "rgb(0, 80, 229)",
        "borderColor": "rgb(0, 80, 229)"
      }
    ]
  },
  "options": {
    "scales": {
      "yAxes": [
        {
          "ticks": {
            "beginAtZero": true
          }
        }
      ]
    }
  }
};var chart = new Chart(ctx, setCustomTooltip(chartData, commitMsgs));</script></body></html>