/**
 * almond 0.2.5 Copyright (c) 2011-2012, The Dojo Foundation All Rights Reserved.
 * Available via the MIT or new BSD license.
 * see: http://github.com/jrburke/almond for details
 */

// (c) 2010-2013 Thomas Fuchs

// Zepto.js may be freely distributed under the MIT license.

// Copyright 2006 Google Inc.

//   http://www.apache.org/licenses/LICENSE-2.0

/*!
 * ZRender, a lightweight canvas library with a MVC architecture, data-driven 
 * and provides an event model like DOM.
 *  
 * Copyright (c) 2013, Baidu Inc.
 * All rights reserved.
 * 
 * LICENSE
 * https://github.com/ecomfe/zrender/blob/master/LICENSE.txt
 */

/*!
 * ECharts, a javascript interactive chart library.
 *  
 * Copyright (c) 2013, Baidu Inc.
 * All rights reserved.
 * 
 * LICENSE
 * https://github.com/ecomfe/echarts/blob/master/LICENSE.txt
 */

(function(e){var t,n,r;(function(e){function d(e,t){return h.call(e,t)}function v(e,t){var n,r,i,s,o,u,a,f,c,h,p=t&&t.split("/"),d=l.map,v=d&&d["*"]||{};if(e&&e.charAt(0)===".")if(t){p=p.slice(0,p.length-1),e=p.concat(e.split("/"));for(f=0;f<e.length;f+=1){h=e[f];if(h===".")e.splice(f,1),f-=1;else if(h===".."){if(f===1&&(e[2]===".."||e[0]===".."))break;f>0&&(e.splice(f-1,2),f-=2)}}e=e.join("/")}else e.indexOf("./")===0&&(e=e.substring(2));if((p||v)&&d){n=e.split("/");for(f=n.length;f>0;f-=1){r=n.slice(0,f).join("/");if(p)for(c=p.length;c>0;c-=1){i=d[p.slice(0,c).join("/")];if(i){i=i[r];if(i){s=i,o=f;break}}}if(s)break;!u&&v&&v[r]&&(u=v[r],a=f)}!s&&u&&(s=u,o=a),s&&(n.splice(0,o,s),e=n.join("/"))}return e}function m(t,n){return function(){return s.apply(e,p.call(arguments,0).concat([t,n]))}}function g(e){return function(t){return v(t,e)}}function y(e){return function(t){a[e]=t}}function b(t){if(d(f,t)){var n=f[t];delete f[t],c[t]=!0,i.apply(e,n)}if(!d(a,t)&&!d(c,t))throw new Error("No "+t);return a[t]}function w(e){var t,n=e?e.indexOf("!"):-1;return n>-1&&(t=e.substring(0,n),e=e.substring(n+1,e.length)),[t,e]}function E(e){return function(){return l&&l.config&&l.config[e]||{}}}var i,s,o,u,a={},f={},l={},c={},h=Object.prototype.hasOwnProperty,p=[].slice;o=function(e,t){var n,r=w(e),i=r[0];return e=r[1],i&&(i=v(i,t),n=b(i)),i?n&&n.normalize?e=n.normalize(e,g(t)):e=v(e,t):(e=v(e,t),r=w(e),i=r[0],e=r[1],i&&(n=b(i))),{f:i?i+"!"+e:e,n:e,pr:i,p:n}},u={require:function(e){return m(e)},exports:function(e){var t=a[e];return typeof t!="undefined"?t:a[e]={}},module:function(e){return{id:e,uri:"",exports:a[e],config:E(e)}}},i=function(t,n,r,i){var s,l,h,p,v,g=[],w;i=i||t;if(typeof r=="function"){n=!n.length&&r.length?["require","exports","module"]:n;for(v=0;v<n.length;v+=1){p=o(n[v],i),l=p.f;if(l==="require")g[v]=u.require(t);else if(l==="exports")g[v]=u.exports(t),w=!0;else if(l==="module")s=g[v]=u.module(t);else if(d(a,l)||d(f,l)||d(c,l))g[v]=b(l);else{if(!p.p)throw new Error(t+" missing "+l);p.p.load(p.n,m(i,!0),y(l),{}),g[v]=a[l]}}h=r.apply(a[t],g);if(t)if(s&&s.exports!==e&&s.exports!==a[t])a[t]=s.exports;else if(h!==e||!w)a[t]=h}else t&&(a[t]=r)},t=n=s=function(t,n,r,a,f){return typeof t=="string"?u[t]?u[t](n):b(o(t,n).f):(t.splice||(l=t,n.splice?(t=n,n=r,r=null):t=e),n=n||function(){},typeof r=="function"&&(r=a,a=f),a?i(e,t,n,r):setTimeout(function(){i(e,t,n,r)},4),s)},s.config=function(e){return l=e,l.deps&&s(l.deps,l.callback),s},r=function(e,t,n){t.splice||(n=t,t=[]),!d(a,e)&&!d(f,e)&&(f[e]=[e,t,n])},r.amd={jQuery:!0}})(),r("zrender/tool/env",[],function(){function e(e){var t=this.os={},n=this.browser={},r=e.match(/Web[kK]it[\/]{0,1}([\d.]+)/),i=e.match(/(Android);?[\s\/]+([\d.]+)?/),s=e.match(/(iPad).*OS\s([\d_]+)/),o=e.match(/(iPod)(.*OS\s([\d_]+))?/),u=!s&&e.match(/(iPhone\sOS)\s([\d_]+)/),a=e.match(/(webOS|hpwOS)[\s\/]([\d.]+)/),f=a&&e.match(/TouchPad/),l=e.match(/Kindle\/([\d.]+)/),c=e.match(/Silk\/([\d._]+)/),h=e.match(/(BlackBerry).*Version\/([\d.]+)/),p=e.match(/(BB10).*Version\/([\d.]+)/),d=e.match(/(RIM\sTablet\sOS)\s([\d.]+)/),v=e.match(/PlayBook/),m=e.match(/Chrome\/([\d.]+)/)||e.match(/CriOS\/([\d.]+)/),g=e.match(/Firefox\/([\d.]+)/),y=e.match(/MSIE ([\d.]+)/),b=r&&e.match(/Mobile\//)&&!m,w=e.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/)&&!m,y=e.match(/MSIE\s([\d.]+)/);if(n.webkit=!!r)n.version=r[1];return i&&(t.android=!0,t.version=i[2]),u&&!o&&(t.ios=t.iphone=!0,t.version=u[2].replace(/_/g,".")),s&&(t.ios=t.ipad=!0,t.version=s[2].replace(/_/g,".")),o&&(t.ios=t.ipod=!0,t.version=o[3]?o[3].replace(/_/g,"."):null),a&&(t.webos=!0,t.version=a[2]),f&&(t.touchpad=!0),h&&(t.blackberry=!0,t.version=h[2]),p&&(t.bb10=!0,t.version=p[2]),d&&(t.rimtabletos=!0,t.version=d[2]),v&&(n.playbook=!0),l&&(t.kindle=!0,t.version=l[1]),c&&(n.silk=!0,n.version=c[1]),!c&&t.android&&e.match(/Kindle Fire/)&&(n.silk=!0),m&&(n.chrome=!0,n.version=m[1]),g&&(n.firefox=!0,n.version=g[1]),y&&(n.ie=!0,n.version=y[1]),b&&(e.match(/Safari/)||!!t.ios)&&(n.safari=!0),w&&(n.webview=!0),y&&(n.ie=!0,n.version=y[1]),t.tablet=!!(s||v||i&&!e.match(/Mobile/)||g&&e.match(/Tablet/)||y&&!e.match(/Phone/)&&e.match(/Touch/)),t.phone=!!(!t.tablet&&!t.ipod&&(i||u||a||h||p||m&&e.match(/Android/)||m&&e.match(/CriOS\/([\d.]+)/)||g&&e.match(/Mobile/)||y&&e.match(/Touch/))),{browser:n,os:t,canvasSupported:document.createElement("canvas").getContext?!0:!1}}return e(navigator.userAgent)}),r("echarts/config",[],function(){var e={CHART_TYPE_LINE:"line",CHART_TYPE_BAR:"bar",CHART_TYPE_SCATTER:"scatter",CHART_TYPE_PIE:"pie",CHART_TYPE_RADAR:"radar",CHART_TYPE_MAP:"map",CHART_TYPE_K:"k",CHART_TYPE_ISLAND:"island",CHART_TYPE_FORCE:"force",CHART_TYPE_CHORD:"chord",COMPONENT_TYPE_TITLE:"title",COMPONENT_TYPE_LEGEND:"legend",COMPONENT_TYPE_DATARANGE:"dataRange",COMPONENT_TYPE_DATAVIEW:"dataView",COMPONENT_TYPE_DATAZOOM:"dataZoom",COMPONENT_TYPE_TOOLBOX:"toolbox",COMPONENT_TYPE_TOOLTIP:"tooltip",COMPONENT_TYPE_GRID:"grid",COMPONENT_TYPE_AXIS:"axis",COMPONENT_TYPE_POLAR:"polar",COMPONENT_TYPE_X_AXIS:"xAxis",COMPONENT_TYPE_Y_AXIS:"yAxis",COMPONENT_TYPE_AXIS_CATEGORY:"categoryAxis",COMPONENT_TYPE_AXIS_VALUE:"valueAxis",color:["#ff7f50","#87cefa","#da70d6","#32cd32","#6495ed","#ff69b4","#ba55d3","#cd5c5c","#ffa500","#40e0d0","#1e90ff","#ff6347","#7b68ee","#00fa9a","#ffd700","#6699FF","#ff6666","#3cb371","#b8860b","#30e0e0"],title:{text:"",subtext:"",x:"left",y:"top",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,textStyle:{fontSize:18,fontWeight:"bolder",color:"#333"},subtextStyle:{color:"#aaa"}},legend:{orient:"horizontal",x:"center",y:"top",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,itemWidth:20,itemHeight:14,textStyle:{color:"#333"},selectedMode:!0},dataRange:{orient:"vertical",x:"left",y:"bottom",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,itemWidth:20,itemHeight:14,precision:0,splitNumber:5,calculable:!1,realtime:!0,color:["#006edd","#e0ffff"],textStyle:{color:"#333"}},toolbox:{show:!1,orient:"horizontal",x:"right",y:"top",color:["#1e90ff","#22bb22","#4b0082","#d2691e"],backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,itemSize:16,showTitle:!0,feature:{mark:{show:!1,title:{mark:"辅助线开关",markUndo:"删除辅助线",markClear:"清空辅助线"},lineStyle:{width:1,color:"#1e90ff",type:"dashed"}},dataZoom:{show:!1,title:{dataZoom:"区域缩放",dataZoomReset:"区域缩放后退"}},dataView:{show:!1,title:"数据视图",readOnly:!1,lang:["Data View","close","refresh"]},magicType:{show:!1,title:{line:"折线图切换",bar:"柱形图切换",stack:"堆叠",tiled:"平铺"},type:[]},restore:{show:!1,title:"还原"},saveAsImage:{show:!1,title:"保存为图片",type:"png",lang:["点击保存"]}}},tooltip:{show:!0,showContent:!0,trigger:"item",islandFormatter:"{a} <br/>{b} : {c}",showDelay:20,hideDelay:100,transitionDuration:.4,backgroundColor:"rgba(0,0,0,0.7)",borderColor:"#333",borderRadius:4,borderWidth:0,padding:5,axisPointer:{type:"line",lineStyle:{color:"#48b",width:2,type:"solid"},areaStyle:{size:"auto",color:"rgba(150,150,150,0.3)"}},textStyle:{color:"#fff"}},dataZoom:{show:!1,orient:"horizontal",backgroundColor:"rgba(0,0,0,0)",dataBackgroundColor:"#eee",fillerColor:"rgba(144,197,237,0.2)",handleColor:"rgba(70,130,180,0.8)",realtime:!0},grid:{x:80,y:60,x2:80,y2:60,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"},categoryAxis:{position:"bottom",name:"",nameLocation:"end",nameTextStyle:{},boundaryGap:!0,axisLine:{show:!0,lineStyle:{color:"#48b",width:2,type:"solid"}},axisTick:{show:!0,interval:"auto",inside:!1,length:5,lineStyle:{color:"#333",width:1}},axisLabel:{show:!0,interval:"auto",rotate:0,margin:8,textStyle:{color:"#333"}},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}},valueAxis:{position:"left",name:"",nameLocation:"end",nameTextStyle:{},boundaryGap:[0,0],precision:0,power:100,splitNumber:5,axisLine:{show:!0,lineStyle:{color:"#48b",width:2,type:"solid"}},axisTick:{show:!1,inside:!1,length:5,lineStyle:{color:"#333",width:1}},axisLabel:{show:!0,rotate:0,margin:8,textStyle:{color:"#333"}},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}},polar:{center:["50%","50%"],radius:"75%",startAngle:90,splitNumber:5,name:{show:!0,textStyle:{color:"#333"}},axisLine:{show:!0,lineStyle:{color:"#ccc",width:1,type:"solid"}},axisLabel:{show:!1,textStyle:{color:"#333"}},splitArea:{show:!0,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}},splitLine:{show:!0,lineStyle:{width:1,color:"#ccc"}}},bar:{xAxisIndex:0,yAxisIndex:0,barMinHeight:0,barGap:"30%",barCategoryGap:"20%",itemStyle:{normal:{borderColor:"#fff",borderRadius:0,borderWidth:0,label:{show:!1}},emphasis:{borderColor:"#fff",borderRadius:0,borderWidth:0,label:{show:!1}}}},line:{xAxisIndex:0,yAxisIndex:0,itemStyle:{normal:{label:{show:!1},lineStyle:{width:2,type:"solid",shadowColor:"rgba(0,0,0,0)",shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0}},emphasis:{label:{show:!1}}},symbolSize:2,showAllSymbol:!1},k:{xAxisIndex:0,yAxisIndex:0,itemStyle:{normal:{color:"#fff",color0:"#00aa11",lineStyle:{width:1,color:"#ff3200",color0:"#00aa11"}},emphasis:{}}},scatter:{xAxisIndex:0,yAxisIndex:0,symbolSize:4,large:!1,largeThreshold:2e3,itemStyle:{normal:{label:{show:!1,formatter:function(e,t,n){return typeof n[2]!="undefined"?n[2]:n[0]+" , "+n[1]}}},emphasis:{label:{show:!1,formatter:function(e,t,n){return typeof n[2]!="undefined"?n[2]:n[0]+" , "+n[1]}}}}},radar:{polarIndex:0,itemStyle:{normal:{label:{show:!1},lineStyle:{width:2,type:"solid"}},emphasis:{label:{show:!1}}},symbolSize:2},pie:{center:["50%","50%"],radius:[0,"75%"],clockWise:!0,startAngle:90,minAngle:0,selectedOffset:10,itemStyle:{normal:{borderColor:"#fff",borderWidth:1,label:{show:!0,position:"outer"},labelLine:{show:!0,length:20,lineStyle:{width:1,type:"solid"}}},emphasis:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!1},labelLine:{show:!1,length:20,lineStyle:{width:1,type:"solid"}}}}},map:{mapType:"china",mapLocation:{x:"center",y:"center"},mapValuePrecision:0,showLegendSymbol:!0,hoverable:!0,itemStyle:{normal:{borderColor:"#fff",borderWidth:1,areaStyle:{color:"#ccc"},label:{show:!1,textStyle:{color:"rgb(139,69,19)"}}},emphasis:{borderColor:"rgba(0,0,0,0)",borderWidth:1,areaStyle:{color:"rgba(255,215,0,0.8)"},label:{show:!1,textStyle:{color:"rgb(100,0,0)"}}}}},force:{minRadius:10,maxRadius:20,density:1,attractiveness:1,initSize:300,centripetal:1,coolDown:.99,categories:[],itemStyle:{normal:{label:{show:!1},nodeStyle:{brushType:"both",color:"#f08c2e",strokeColor:"#5182ab"},linkStyle:{strokeColor:"#5182ab"}},emphasis:{label:{show:!1},nodeStyle:{},linkStyle:{}}}},chord:{radius:["65%","75%"],center:["50%","50%"],padding:2,sort:"none",sortSub:"none",startAngle:90,clockWise:!1,showScale:!1,showScaleText:!1,itemStyle:{normal:{label:{show:!0},lineStyle:{width:0,color:"#000"},chordStyle:{lineStyle:{width:1,color:"#666"}}},emphasis:{lineStyle:{width:0,color:"#000"},chordStyle:{lineStyle:{width:2,color:"#333"}}}},matrix:[]},island:{r:15,calculateStep:.1},markPoint:{symbol:"pin",symbolSize:10,effect:{show:!1,period:15,scaleSize:2},itemStyle:{normal:{borderWidth:2,label:{show:!0,position:"inside"}},emphasis:{label:{show:!0}}}},markLine:{symbol:["circle","arrow"],symbolSize:[2,4],effect:{show:!1,period:15,scaleSize:2},itemStyle:{normal:{borderWidth:1.5,label:{show:!0,position:"end"},lineStyle:{type:"dashed",shadowColor:"rgba(0,0,0,0)",shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0}},emphasis:{label:{show:!1},lineStyle:{}}}},textStyle:{decoration:"none",fontFamily:"Arial, Verdana, sans-serif",fontFamily2:"微软雅黑",fontSize:12,fontStyle:"normal",fontWeight:"normal"},EVENT:{REFRESH:"refresh",RESTORE:"restore",RESIZE:"resize",CLICK:"click",HOVER:"hover",DATA_CHANGED:"dataChanged",DATA_ZOOM:"dataZoom",DATA_RANGE:"dataRange",LEGEND_SELECTED:"legendSelected",MAP_SELECTED:"mapSelected",PIE_SELECTED:"pieSelected",MAGIC_TYPE_CHANGED:"magicTypeChanged",DATA_VIEW_CHANGED:"dataViewChanged",MAP_ROAM:"mapRoam",TOOLTIP_HOVER:"tooltipHover",TOOLTIP_IN_GRID:"tooltipInGrid",TOOLTIP_OUT_GRID:"tooltipOutGrid"},DRAG_ENABLE_TIME:150,symbolList:["circle","rectangle","triangle","diamond","emptyCircle","emptyRectangle","emptyTriangle","emptyDiamond"],loadingText:"Loading...",calculable:!1,calculableColor:"rgba(255,165,0,0.6)",calculableHolderColor:"#ccc",nameConnector:" & ",valueConnector:" : ",animation:!0,addDataAnimation:!0,animationThreshold:2500,animationDuration:2e3,animationEasing:"ExponentialOut"};return e}),r("zrender/tool/vector",[],function(){var e=typeof Float32Array=="undefined"?Array:Float32Array,t={create:function(t,n){var r=new e(2);return r[0]=t||0,r[1]=n||0,r},copy:function(e,t){e[0]=t[0],e[1]=t[1]},set:function(e,t,n){e[0]=t,e[1]=n},add:function(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e},scaleAndAdd:function(e,t,n,r){return e[0]=t[0]+n[0]*r,e[1]=t[1]+n[1]*r,e},sub:function(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e},length:function(e){return Math.sqrt(this.lengthSquare(e))},lengthSquare:function(e){return e[0]*e[0]+e[1]*e[1]},mul:function(e,t,n){return e[0]=t[0]*n[0],e[1]=t[1]*n[1],e},dot:function(e,t){return e[0]*t[0]+e[1]*t[1]},scale:function(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e},normalize:function(e,n){var r=t.length(n);return r===0?(e[0]=0,e[1]=0):(e[0]=n[0]/r,e[1]=n[1]/r),e},distance:function(e,t){return Math.sqrt((e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1]))},negate:function(e,t){e[0]=-t[0],e[1]=-t[1]},middle:function(e,t,n){return e[0]=(t[0]+n[0])/2,e[1]=(t[1]+n[1])/2,e}};return t}),r("zrender/lib/excanvas",["require"],function(e){return document.createElement("canvas").getContext?G_vmlCanvasManager=!1:function(){function f(){return this.context_||(this.context_=new I(this))}function c(e,t,n){var r=l.call(arguments,2);return function(){return e.apply(t,r.concat(l.call(arguments)))}}function h(e){return String(e).replace(/&/g,"&amp;").replace(/"/g,"&quot;")}function p(e,t,n){e.namespaces[t]||e.namespaces.add(t,n,"#default#VML")}function d(e){p(e,"g_vml_","urn:schemas-microsoft-com:vml"),p(e,"g_o_","urn:schemas-microsoft-com:office:office");if(!e.styleSheets.ex_canvas_){var t=e.createStyleSheet();t.owningElement.id="ex_canvas_",t.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}function m(e){var t=e.srcElement;switch(e.propertyName){case"width":t.getContext().clearRect(),t.style.width=t.attributes.width.nodeValue+"px",t.firstChild.style.width=t.clientWidth+"px";break;case"height":t.getContext().clearRect(),t.style.height=t.attributes.height.nodeValue+"px",t.firstChild.style.height=t.clientHeight+"px"}}function g(e){var t=e.srcElement;t.firstChild&&(t.firstChild.style.width=t.clientWidth+"px",t.firstChild.style.height=t.clientHeight+"px")}function E(){return[[1,0,0],[0,1,0],[0,0,1]]}function S(e,t){var n=E();for(var r=0;r<3;r++)for(var i=0;i<3;i++){var s=0;for(var o=0;o<3;o++)s+=e[r][o]*t[o][i];n[r][i]=s}return n}function x(e,t){t.fillStyle=e.fillStyle,t.lineCap=e.lineCap,t.lineJoin=e.lineJoin,t.lineWidth=e.lineWidth,t.miterLimit=e.miterLimit,t.shadowBlur=e.shadowBlur,t.shadowColor=e.shadowColor,t.shadowOffsetX=e.shadowOffsetX,t.shadowOffsetY=e.shadowOffsetY,t.strokeStyle=e.strokeStyle,t.globalAlpha=e.globalAlpha,t.font=e.font,t.textAlign=e.textAlign,t.textBaseline=e.textBaseline,t.arcScaleX_=e.arcScaleX_,t.arcScaleY_=e.arcScaleY_,t.lineScale_=e.lineScale_}function N(e){var t=e.indexOf("(",3),n=e.indexOf(")",t+1),r=e.substring(t+1,n).split(",");if(r.length!=4||e.charAt(3)!="a")r[3]=1;return r}function C(e){return parseFloat(e)/100}function k(e,t,n){return Math.min(n,Math.max(t,e))}function L(e){var t,n,r,i,s,o;i=parseFloat(e[0])/360%360,i<0&&i++,s=k(C(e[1]),0,1),o=k(C(e[2]),0,1);if(s==0)t=n=r=o;else{var u=o<.5?o*(1+s):o+s-o*s,a=2*o-u;t=A(a,u,i+1/3),n=A(a,u,i),r=A(a,u,i-1/3)}return"#"+y[Math.floor(t*255)]+y[Math.floor(n*255)]+y[Math.floor(r*255)]}function A(e,t,n){return n<0&&n++,n>1&&n--,6*n<1?e+(t-e)*6*n:2*n<1?t:3*n<2?e+(t-e)*(2/3-n)*6:e}function M(e){if(e in O)return O[e];var t,n=1;e=String(e);if(e.charAt(0)=="#")t=e;else if(/^rgb/.test(e)){var r=N(e),t="#",i;for(var s=0;s<3;s++)r[s].indexOf("%")!=-1?i=Math.floor(C(r[s])*255):i=+r[s],t+=y[k(i,0,255)];n=+r[3]}else if(/^hsl/.test(e)){var r=N(e);t=L(r),n=r[3]}else t=T[e]||e;return O[e]={color:t,alpha:n}}function P(e){if(D[e])return D[e];var t=document.createElement("div"),n=t.style,r;try{n.font=e,r=n.fontFamily.split(",")[0]}catch(i){}return D[e]={style:n.fontStyle||_.style,variant:n.fontVariant||_.variant,weight:n.fontWeight||_.weight,size:n.fontSize||_.size,family:r||_.family}}function H(e,t){var n={};for(var r in e)n[r]=e[r];var i=parseFloat(t.currentStyle.fontSize),s=parseFloat(e.size);return typeof e.size=="number"?n.size=e.size:e.size.indexOf("px")!=-1?n.size=s:e.size.indexOf("em")!=-1?n.size=i*s:e.size.indexOf("%")!=-1?n.size=i/100*s:e.size.indexOf("pt")!=-1?n.size=s/.75:n.size=i,n}function B(e){return e.style+" "+e.variant+" "+e.weight+" "+e.size+"px '"+e.family+"'"}function F(e){return j[e]||"square"}function I(e){this.m_=E(),this.mStack_=[],this.aStack_=[],this.currentPath_=[],this.strokeStyle="#000",this.fillStyle="#000",this.lineWidth=1,this.lineJoin="miter",this.lineCap="butt",this.miterLimit=o*1,this.globalAlpha=1,this.font="12px 微软雅黑",this.textAlign="left",this.textBaseline="alphabetic",this.canvas=e;var t="width:"+e.clientWidth+"px;height:"+e.clientHeight+"px;overflow:hidden;position:absolute",n=e.ownerDocument.createElement("div");n.style.cssText=t,e.appendChild(n);var r=n.cloneNode(!1);r.style.backgroundColor="#fff",r.style.filter="alpha(opacity=0)",e.appendChild(r),this.element_=n,this.arcScaleX_=1,this.arcScaleY_=1,this.lineScale_=1}function R(e,t,n,r){e.currentPath_.push({type:"bezierCurveTo",cp1x:t.x,cp1y:t.y,cp2x:n.x,cp2y:n.y,x:r.x,y:r.y}),e.currentX_=r.x,e.currentY_=r.y}function U(e,t){var n=M(e.strokeStyle),r=n.color,i=n.alpha*e.globalAlpha,s=e.lineScale_*e.lineWidth;s<1&&(i*=s),t.push("<g_vml_:stroke",' opacity="',i,'"',' joinstyle="',e.lineJoin,'"',' miterlimit="',e.miterLimit,'"',' endcap="',F(e.lineCap),'"',' weight="',s,'px"',' color="',r,'" />')}function z(t,n,r,i){var s=t.fillStyle,u=t.arcScaleX_,a=t.arcScaleY_,f=i.x-r.x,l=i.y-r.y;if(s instanceof $){var c=0,h={x:0,y:0},p=0,d=1;if(s.type_=="gradient"){var v=s.x0_/u,m=s.y0_/a,g=s.x1_/u,y=s.y1_/a,b=W(t,v,m),w=W(t,g,y),E=w.x-b.x,S=w.y-b.y;c=Math.atan2(E,S)*180/Math.PI,c<0&&(c+=360),c<1e-6&&(c=0)}else{var b=W(t,s.x0_,s.y0_);h={x:(b.x-r.x)/f,y:(b.y-r.y)/l},f/=u*o,l/=a*o;var x=e.max(f,l);p=2*s.r0_/x,d=2*s.r1_/x-p}var T=s.colors_;T.sort(function(e,t){return e.offset-t.offset});var N=T.length,C=T[0].color,k=T[N-1].color,L=T[0].alpha*t.globalAlpha,A=T[N-1].alpha*t.globalAlpha,O=[];for(var _=0;_<N;_++){var D=T[_];O.push(D.offset*d+p+" "+D.color)}n.push('<g_vml_:fill type="',s.type_,'"',' method="none" focus="100%"',' color="',C,'"',' color2="',k,'"',' colors="',O.join(","),'"',' opacity="',A,'"',' g_o_:opacity2="',L,'"',' angle="',c,'"',' focusposition="',h.x,",",h.y,'" />')}else if(s instanceof J){if(f&&l){var P=-r.x,H=-r.y;n.push("<g_vml_:fill",' position="',P/f*u*u,",",H/l*a*a,'"',' type="tile"',' src="',s.src_,'" />')}}else{var B=M(t.fillStyle),j=B.color,F=B.alpha*t.globalAlpha;n.push('<g_vml_:fill color="',j,'" opacity="',F,'" />')}}function W(e,t,n){var r=e.m_;return{x:o*(t*r[0][0]+n*r[1][0]+r[2][0])-u,y:o*(t*r[0][1]+n*r[1][1]+r[2][1])-u}}function X(e){return isFinite(e[0][0])&&isFinite(e[0][1])&&isFinite(e[1][0])&&isFinite(e[1][1])&&isFinite(e[2][0])&&isFinite(e[2][1])}function V(e,t,n){if(!X(t))return;e.m_=t;if(n){var r=t[0][0]*t[1][1]-t[0][1]*t[1][0];e.lineScale_=s(i(r))}}function $(e){this.type_=e,this.x0_=0,this.y0_=0,this.r0_=0,this.x1_=0,this.y1_=0,this.r1_=0,this.colors_=[]}function J(e,t){Q(e);switch(t){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=t;break;default:K("SYNTAX_ERR")}this.src_=e.src,this.width_=e.width,this.height_=e.height}function K(e){throw new G(e)}function Q(e){(!e||e.nodeType!=1||e.tagName!="IMG")&&K("TYPE_MISMATCH_ERR"),e.readyState!="complete"&&K("INVALID_STATE_ERR")}function G(e){this.code=this[e],this.message=e+": DOM Exception "+this.code}var e=Math,t=e.round,n=e.sin,r=e.cos,i=e.abs,s=e.sqrt,o=10,u=o/2,a=+navigator.userAgent.match(/MSIE ([\d.]+)?/)[1],l=Array.prototype.slice;d(document);var v={init:function(e){var t=e||document;t.createElement("canvas"),t.attachEvent("onreadystatechange",c(this.init_,this,t))},init_:function(e){var t=e.getElementsByTagName("canvas");for(var n=0;n<t.length;n++)this.initElement(t[n])},initElement:function(e){if(!e.getContext){e.getContext=f,d(e.ownerDocument),e.innerHTML="",e.attachEvent("onpropertychange",m),e.attachEvent("onresize",g);var t=e.attributes;t.width&&t.width.specified?e.style.width=t.width.nodeValue+"px":e.width=e.clientWidth,t.height&&t.height.specified?e.style.height=t.height.nodeValue+"px":e.height=e.clientHeight}return e}};v.init();var y=[];for(var b=0;b<16;b++)for(var w=0;w<16;w++)y[b*16+w]=b.toString(16)+w.toString(16);var T={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"},O={},_={style:"normal",variant:"normal",weight:"normal",size:12,family:"微软雅黑"},D={},j={butt:"flat",round:"round"},q=I.prototype;q.clearRect=function(){this.textMeasureEl_&&(this.textMeasureEl_.removeNode(!0),this.textMeasureEl_=null),this.element_.innerHTML=""},q.beginPath=function(){this.currentPath_=[]},q.moveTo=function(e,t){var n=W(this,e,t);this.currentPath_.push({type:"moveTo",x:n.x,y:n.y}),this.currentX_=n.x,this.currentY_=n.y},q.lineTo=function(e,t){var n=W(this,e,t);this.currentPath_.push({type:"lineTo",x:n.x,y:n.y}),this.currentX_=n.x,this.currentY_=n.y},q.bezierCurveTo=function(e,t,n,r,i,s){var o=W(this,i,s),u=W(this,e,t),a=W(this,n,r);R(this,u,a,o)},q.quadraticCurveTo=function(e,t,n,r){var i=W(this,e,t),s=W(this,n,r),o={x:this.currentX_+2/3*(i.x-this.currentX_),y:this.currentY_+2/3*(i.y-this.currentY_)},u={x:o.x+(s.x-this.currentX_)/3,y:o.y+(s.y-this.currentY_)/3};R(this,o,u,s)},q.arc=function(e,t,i,s,a,f){i*=o;var l=f?"at":"wa",c=e+r(s)*i-u,h=t+n(s)*i-u,p=e+r(a)*i-u,d=t+n(a)*i-u;c==p&&!f&&(c+=.125);var v=W(this,e,t),m=W(this,c,h),g=W(this,p,d);this.currentPath_.push({type:l,x:v.x,y:v.y,radius:i,xStart:m.x,yStart:m.y,xEnd:g.x,yEnd:g.y})},q.rect=function(e,t,n,r){this.moveTo(e,t),this.lineTo(e+n,t),this.lineTo(e+n,t+r),this.lineTo(e,t+r),this.closePath()},q.strokeRect=function(e,t,n,r){var i=this.currentPath_;this.beginPath(),this.moveTo(e,t),this.lineTo(e+n,t),this.lineTo(e+n,t+r),this.lineTo(e,t+r),this.closePath(),this.stroke(),this.currentPath_=i},q.fillRect=function(e,t,n,r){var i=this.currentPath_;this.beginPath(),this.moveTo(e,t),this.lineTo(e+n,t),this.lineTo(e+n,t+r),this.lineTo(e,t+r),this.closePath(),this.fill(),this.currentPath_=i},q.createLinearGradient=function(e,t,n,r){var i=new $("gradient");return i.x0_=e,i.y0_=t,i.x1_=n,i.y1_=r,i},q.createRadialGradient=function(e,t,n,r,i,s){var o=new $("gradientradial");return o.x0_=e,o.y0_=t,o.r0_=n,o.x1_=r,o.y1_=i,o.r1_=s,o},q.drawImage=function(n,r){var i,s,u,a,f,l,c,h,p=n.runtimeStyle.width,d=n.runtimeStyle.height;n.runtimeStyle.width="auto",n.runtimeStyle.height="auto";var v=n.width,m=n.height;n.runtimeStyle.width=p,n.runtimeStyle.height=d;if(arguments.length==3)i=arguments[1],s=arguments[2],f=l=0,c=u=v,h=a=m;else if(arguments.length==5)i=arguments[1],s=arguments[2],u=arguments[3],a=arguments[4],f=l=0,c=v,h=m;else{if(arguments.length!=9)throw Error("Invalid number of arguments");f=arguments[1],l=arguments[2],c=arguments[3],h=arguments[4],i=arguments[5],s=arguments[6],u=arguments[7],a=arguments[8]}var g=W(this,i,s),y=c/2,b=h/2,w=[],E=10,S=10,x=scaleY=1;w.push(" <g_vml_:group",' coordsize="',o*E,",",o*S,'"',' coordorigin="0,0"',' style="width:',E,"px;height:",S,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]||this.m_[1][1]!=1||this.m_[1][0]){var T=[];x=Math.sqrt(this.m_[0][0]*this.m_[0][0]+this.m_[0][1]*this.m_[0][1]),scaleY=Math.sqrt(this.m_[1][0]*this.m_[1][0]+this.m_[1][1]*this.m_[1][1]),T.push("M11=",this.m_[0][0]/x,",","M12=",this.m_[1][0]/scaleY,",","M21=",this.m_[0][1]/x,",","M22=",this.m_[1][1]/scaleY,",","Dx=",t(g.x/o),",","Dy=",t(g.y/o),"");var N=g,C=W(this,i+u,s),k=W(this,i,s+a),L=W(this,i+u,s+a);N.x=e.max(N.x,C.x,k.x,L.x),N.y=e.max(N.y,C.y,k.y,L.y),w.push("padding:0 ",t(N.x/o),"px ",t(N.y/o),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",T.join(""),", sizingmethod='clip');")}else w.push("top:",t(g.y/o),"px;left:",t(g.x/o),"px;");w.push(' ">'),(f||l)&&w.push('<div style="overflow: hidden; width:',Math.ceil((u+f*u/c)*x),"px;"," height:",Math.ceil((a+l*a/h)*scaleY),"px;"," filter:progid:DxImageTransform.Microsoft.Matrix(Dx=",-f*u/c*x,",Dy=",-l*a/h*scaleY,');">'),w.push('<div style="width:',Math.round(x*v*u/c),"px;"," height:",Math.round(scaleY*m*a/h),"px;"," filter:"),this.globalAlpha<1&&w.push(" progid:DXImageTransform.Microsoft.Alpha(opacity="+this.globalAlpha*100+")"),w.push(" progid:DXImageTransform.Microsoft.AlphaImageLoader(src=",n.src,',sizingMethod=scale)">'),(f||l)&&w.push("</div>"),w.push("</div></div>"),this.element_.insertAdjacentHTML("BeforeEnd",w.join(""))},q.stroke=function(e){var n=[],r=!1,i=10,s=10;n.push("<g_vml_:shape",' filled="',!!e,'"',' style="position:absolute;width:',i,"px;height:",s,'px;"',' coordorigin="0,0"',' coordsize="',o*i,",",o*s,'"',' stroked="',!e,'"',' path="');var u=!1,a={x:null,y:null},f={x:null,y:null};for(var l=0;l<this.currentPath_.length;l++){var c=this.currentPath_[l],h;switch(c.type){case"moveTo":h=c,n.push(" m ",t(c.x),",",t(c.y));break;case"lineTo":n.push(" l ",t(c.x),",",t(c.y));break;case"close":n.push(" x "),c=null;break;case"bezierCurveTo":n.push(" c ",t(c.cp1x),",",t(c.cp1y),",",t(c.cp2x),",",t(c.cp2y),",",t(c.x),",",t(c.y));break;case"at":case"wa":n.push(" ",c.type," ",t(c.x-this.arcScaleX_*c.radius),",",t(c.y-this.arcScaleY_*c.radius)," ",t(c.x+this.arcScaleX_*c.radius),",",t(c.y+this.arcScaleY_*c.radius)," ",t(c.xStart),",",t(c.yStart)," ",t(c.xEnd),",",t(c.yEnd))}if(c){if(a.x==null||c.x<a.x)a.x=c.x;if(f.x==null||c.x>f.x)f.x=c.x;if(a.y==null||c.y<a.y)a.y=c.y;if(f.y==null||c.y>f.y)f.y=c.y}}n.push(' ">'),e?z(this,n,a,f):U(this,n),n.push("</g_vml_:shape>"),this.element_.insertAdjacentHTML("beforeEnd",n.join(""))},q.fill=function(){this.stroke(!0)},q.closePath=function(){this.currentPath_.push({type:"close"})},q.save=function(){var e={};x(this,e),this.aStack_.push(e),this.mStack_.push(this.m_),this.m_=S(E(),this.m_)},q.restore=function(){this.aStack_.length&&(x(this.aStack_.pop(),this),this.m_=this.mStack_.pop())},q.translate=function(e,t){var n=[[1,0,0],[0,1,0],[e,t,1]];V(this,S(n,this.m_),!1)},q.rotate=function(e){var t=r(e),i=n(e),s=[[t,i,0],[-i,t,0],[0,0,1]];V(this,S(s,this.m_),!1)},q.scale=function(e,t){this.arcScaleX_*=e,this.arcScaleY_*=t;var n=[[e,0,0],[0,t,0],[0,0,1]];V(this,S(n,this.m_),!0)},q.transform=function(e,t,n,r,i,s){var o=[[e,t,0],[n,r,0],[i,s,1]];V(this,S(o,this.m_),!0)},q.setTransform=function(e,t,n,r,i,s){var o=[[e,t,0],[n,r,0],[i,s,1]];V(this,o,!0)},q.drawText_=function(e,n,r,i,s){var u=this.m_,a=1e3,f=0,l=a,c={x:0,y:0},p=[],d=H(P(this.font),this.element_),v=B(d),m=this.element_.currentStyle,g=this.textAlign.toLowerCase();switch(g){case"left":case"center":case"right":break;case"end":g=m.direction=="ltr"?"right":"left";break;case"start":g=m.direction=="rtl"?"right":"left";break;default:g="left"}switch(this.textBaseline){case"hanging":case"top":c.y=d.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":c.y=-d.size/2.25}switch(g){case"right":f=a,l=.05;break;case"center":f=l=a/2}var y=W(this,n+c.x,r+c.y);p.push('<g_vml_:line from="',-f,' 0" to="',l,' 0.05" ',' coordsize="100 100" coordorigin="0 0"',' filled="',!s,'" stroked="',!!s,'" style="position:absolute;width:1px;height:1px;">'),s?U(this,p):z(this,p,{x:-f,y:0},{x:l,y:d.size});var b=u[0][0].toFixed(3)+","+u[1][0].toFixed(3)+","+u[0][1].toFixed(3)+","+u[1][1].toFixed(3)+",0,0",w=t(y.x/o)+","+t(y.y/o);p.push('<g_vml_:skew on="t" matrix="',b,'" ',' offset="',w,'" origin="',f,' 0" />','<g_vml_:path textpathok="true" />','<g_vml_:textpath on="true" string="',h(e),'" style="v-text-align:',g,";font:",h(v),'" /></g_vml_:line>'),this.element_.insertAdjacentHTML("beforeEnd",p.join(""))},q.fillText=function(e,t,n,r){this.drawText_(e,t,n,r,!1)},q.strokeText=function(e,t,n,r){this.drawText_(e,t,n,r,!0)},q.measureText=function(e){if(!this.textMeasureEl_){var t='<span style="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;"></span>';this.element_.insertAdjacentHTML("beforeEnd",t),this.textMeasureEl_=this.element_.lastChild}var n=this.element_.ownerDocument;return this.textMeasureEl_.innerHTML="",this.textMeasureEl_.style.font=this.font,this.textMeasureEl_.appendChild(n.createTextNode(e)),{width:this.textMeasureEl_.offsetWidth}},q.clip=function(){},q.arcTo=function(){},q.createPattern=function(e,t){return new J(e,t)},$.prototype.addColorStop=function(e,t){t=M(t),this.colors_.push({offset:e,color:t.color,alpha:t.alpha})};var Y=G.prototype=new Error;Y.INDEX_SIZE_ERR=1,Y.DOMSTRING_SIZE_ERR=2,Y.HIERARCHY_REQUEST_ERR=3,Y.WRONG_DOCUMENT_ERR=4,Y.INVALID_CHARACTER_ERR=5,Y.NO_DATA_ALLOWED_ERR=6,Y.NO_MODIFICATION_ALLOWED_ERR=7,Y.NOT_FOUND_ERR=8,Y.NOT_SUPPORTED_ERR=9,Y.INUSE_ATTRIBUTE_ERR=10,Y.INVALID_STATE_ERR=11,Y.SYNTAX_ERR=12,Y.INVALID_MODIFICATION_ERR=13,Y.NAMESPACE_ERR=14,Y.INVALID_ACCESS_ERR=15,Y.VALIDATION_ERR=16,Y.TYPE_MISMATCH_ERR=17,G_vmlCanvasManager=v,CanvasRenderingContext2D=I,CanvasGradient=$,CanvasPattern=J,DOMException=G}(),G_vmlCanvasManager}),r("zrender/tool/util",["require","./vector","../lib/excanvas"],function(e){function n(e){var t={"[object Function]":1,"[object RegExp]":1,"[object Date]":1,"[object Error]":1,"[object CanvasGradient]":1},n=e,r,i;if(!e||e instanceof Number||e instanceof String||e instanceof Boolean)return n;if(e instanceof Array){n=[];var s=0;for(r=0,i=e.length;r<i;r++)n[s++]=this.clone(e[r])}else if("object"==typeof e){if(t[Object.prototype.toString.call(e)]||e.__nonRecursion)return n;n={};for(r in e)e.hasOwnProperty(r)&&(n[r]=this.clone(e[r]))}return n}function i(e,t,n,r){if(!e||!t)return;if(t instanceof Object)for(var s in t)if(t.hasOwnProperty(s))if(t[s]instanceof Object&&r&&e[s])i(e[s],t[s],n,r);else if(n||!e.hasOwnProperty(s))e[s]=t[s]}function o(){if(!s){e("../lib/excanvas");if(G_vmlCanvasManager){var t=document.createElement("div");t.style.position="absolute",t.style.top="-1000px",document.body.appendChild(t),s=G_vmlCanvasManager.initElement(t).getContext("2d")}else s=document.createElement("canvas").getContext("2d")}return s}function p(){return a||(u=document.createElement("canvas"),f=u.width,l=u.height,a=u.getContext("2d")),a}function d(e,t){var n=100,r=!1;e+c>f&&(f=e+c+n,u.width=f,r=!0),t+h>l&&(l=t+h+n,u.height=l,r=!0),e<-c&&(c=Math.ceil(-e/n)*n,f+=c,u.width=f,r=!0),t<-h&&(h=Math.ceil(-t/n)*n,l+=h,u.height=l,r=!0),r&&a.translate(c,h)}function v(){return{x:c,y:h}}function m(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1}function g(e,t,n){if(e.length===0)return;var r=e[0][0],i=e[0][0],s=e[0][1],o=e[0][1];for(var u=1;u<e.length;u++){var a=e[u];a[0]<r&&(r=a[0]),a[0]>i&&(i=a[0]),a[1]<s&&(s=a[1]),a[1]>o&&(o=a[1])}t[0]=r,t[1]=s,n[0]=i,n[1]=o}function y(e,t,n,r,i,s){var o=b(e[0],t[0],n[0],r[0]),u=b(e[1],t[1],n[1],r[1]);o.push(e[0],r[0]),u.push(e[1],r[1]);var a=Math.min.apply(null,o),f=Math.max.apply(null,o),l=Math.min.apply(null,u),c=Math.max.apply(null,u);i[0]=a,i[1]=l,s[0]=f,s[1]=c}function b(e,t,n,r){var i=[],s=6*n-12*t+6*e,o=9*t+3*r-3*e-9*n,u=3*t-3*e,a=s*s-4*o*u;if(a>0){var f=Math.sqrt(a),l=(-s+f)/(2*o),c=(-s-f)/(2*o);i.push(l,c)}else a===0&&i.push(-s/(2*o));var h=[];for(var p=0;p<i.length;p++){var d=i[p];if(Math.abs(2*o*d+s)>1e-4&&d<1&&d>0){var v=1-d,m=v*v*v*e+3*v*v*d*t+3*v*d*d*n+d*d*d*r;h.push(m)}}return h}function w(e,t,n,r,i){var s=e[0]+n[0]-2*t[0],o;s===0?o=.5:o=(e[0]-t[0])/s,s=e[1]+n[1]-2*t[1];var u;s===0?u=.5:u=(e[1]-t[1])/s,o=Math.max(Math.min(o,1),0),u=Math.max(Math.min(u,1),0);var a=1-o,f=1-u,l=a*a*e[0]+2*a*o*t[0]+o*o*n[0],c=a*a*e[1]+2*a*o*t[1]+o*o*n[1],h=f*f*e[0]+2*f*u*t[0]+u*u*n[0],p=f*f*e[1]+2*f*u*t[1]+u*u*n[1];return g([e.slice(),n.slice(),[l,c],[h,p]],r,i)}var t=e("./vector"),r=function(){function t(t,n,i,s,o){if(n.hasOwnProperty(i))if(o&&typeof t[i]=="object"&&e[Object.prototype.toString.call(t[i])]!=1)r(t[i],n[i],{overwrite:s,recursive:o});else if(s||!(i in t))t[i]=n[i]}var e={"[object Function]":1,"[object RegExp]":1,"[object Date]":1,"[object Error]":1,"[object CanvasGradient]":1};return function(e,n,r){var i=0,s=r||{},o=s.overwrite,u=s.whiteList,a=s.recursive,f;if(u&&u.length){f=u.length;for(;i<f;++i)t(e,n,u[i],o,a)}else for(i in n)t(e,n,i,o,a);return e}}(),s,u,a,f,l,c=0,h=0,E=function(){var e=[],n=[],r=[[],[],[],[]];return function(i,s,o,u,a,f,l){a=a?1:-1,e[0]=Math.cos(o),e[1]=Math.sin(o)*a,t.scale(e,e,s),t.add(e,e,i),n[0]=Math.cos(u),n[1]=Math.sin(u)*a,t.scale(n,n,s),t.add(n,n,i),o%=Math.PI*2,o<0&&(o+=Math.PI*2),u%=Math.PI*2,u<0&&(u+=Math.PI*2),o>u&&(u+=Math.PI*2);var c=0;for(var h=0;h<u;h+=Math.PI/2)if(h>o){var p=r[c++];p[0]=Math.cos(h),p[1]=Math.sin(h)*a,t.scale(p,p,s),t.add(p,p,i)}var d=r.slice(0,c);d.push(e,n),g(d,f,l)}}();return{clone:n,merge:r,mergeFast:i,getContext:o,getPixelContext:p,getPixelOffset:v,adjustCanvasSize:d,computeBoundingBox:g,computeCubeBezierBoundingBox:y,computeQuadraticBezierBoundingBox:w,computeArcBoundingBox:E,indexOf:m}}),r("zrender/shape",[],function(){var e={},t={};return e.define=function(n,r){return t[n]=r,e},e.get=function(e){return t[e]},e}),r("zrender/tool/area",["require","../tool/util","../shape"],function(e){function r(e,r,u,a){if(!r||!e)return!1;var f=e.type;n||(n=t.getContext());if(!h(r.__rect||e.getRect(r),u,a))return!1;var l=i(f,r,u,a);if(typeof l!="undefined")return l;if(f!="beziercurve"&&e.buildPath&&n.isPointInPath)return s(e,n,r,u,a);if(n.getImageData)return o(e,r,u,a);switch(f){case"heart":return!0;case"droplet":return!0;case"ellipse":return!0;case"trochoid":var c=r.location=="out"?r.r1+r.r2+r.d:r.r1-r.r2+r.d;return p(r,u,a,c);case"rose":return p(r,u,a,r.maxr);default:return!1}}function i(e,t,n,r){switch(e){case"line":return f(t,n,r);case"brokenLine":return l(t,n,r);case"text":return!0;case"ring":return c(t,n,r);case"rectangle":return!0;case"circle":return p(t,n,r,t.r);case"sector":return d(t,n,r);case"path":return m(t,n,r);case"polygon":case"star":case"isogon":return v(t,n,r);case"image":return!0}}function s(e,t,n,r,i){return t.beginPath(),e.buildPath(t,n),t.closePath(),t.isPointInPath(r,i)}function o(e,n,r,i){var s=n.__rect||e.getRect(n),o=t.getPixelContext(),a=t.getPixelOffset();return t.adjustCanvasSize(r,i),o.clearRect(s.x,s.y,s.width,s.height),o.beginPath(),e.brush(o,{style:n}),o.closePath(),u(o,r+a.x,i+a.y)}function u(e,t,n,r){var i;typeof r!="undefined"?(r=Math.floor((r||1)/2),i=e.getImageData(t-r,n-r,r+r,r+r).data):i=e.getImageData(t,n,1,1).data;var s=i.length;while(s--)if(i[s]!==0)return!0;return!1}function a(e,t,n,i){return!r(e,t,n,i)}function f(e,t,n){var r=e.xStart,i=e.yStart,s=e.xEnd,o=e.yEnd,u=Math.max(e.lineWidth,5),a=0,f=r;if(r===s)return Math.abs(t-r)<=u/2;a=(i-o)/(r-s),f=(r*o-s*i)/(r-s);var l=(a*t-n+f)*(a*t-n+f)/(a*a+1);return l<=u/2*u/2}function l(e,t,n){var r=e.pointList,i,s=!1;for(var o=0,u=r.length-1;o<u;o++){i={xStart:r[o][0],yStart:r[o][1],xEnd:r[o+1][0],yEnd:r[o+1][1],lineWidth:Math.max(e.lineWidth,10)};if(!h({x:Math.min(i.xStart,i.xEnd)-i.lineWidth,y:Math.min(i.yStart,i.yEnd)-i.lineWidth,width:Math.abs(i.xStart-i.xEnd)+i.lineWidth,height:Math.abs(i.yStart-i.yEnd)+i.lineWidth},t,n))continue;s=f(i,t,n);if(s)break}return s}function c(e,t,n){return p(e,t,n,e.r)&&!p({x:e.x,y:e.y},t,n,e.r0||0)?!0:!1}function h(e,t,n){return t>=e.x&&t<=e.x+e.width&&n>=e.y&&n<=e.y+e.height?!0:!1}function p(e,t,n,r){return(t-e.x)*(t-e.x)+(n-e.y)*(n-e.y)<r*r}function d(e,t,n){if(!p(e,t,n,e.r)||e.r0>0&&p({x:e.x,y:e.y},t,n,e.r0))return!1;if(Math.abs(e.endAngle-e.startAngle)>=360)return!0;var r=(360-Math.atan2(n-e.y,t-e.x)/Math.PI*180)%360,i=(360+e.endAngle)%360,s=(360+e.startAngle)%360;return i>s?r>=s&&r<=i:!(r>=i&&r<=s)}function v(e,t,n){var r,i,s=e.pointList,o=s.length,u=!1,a=!0,f;for(r=0;r<o;++r)if(s[r][0]==t&&s[r][1]==n){a=!1,u=!0;break}if(a){a=!1,u=!1;for(r=0,i=o-1;r<o;i=r++)if(s[r][1]<n&&n<s[i][1]||s[i][1]<n&&n<s[r][1]){if(t<=s[r][0]||t<=s[i][0]){f=(n-s[r][1])*(s[i][0]-s[r][0])/(s[i][1]-s[r][1])+s[r][0];if(t<f)u=!u;else if(t==f){u=!0;break}}}else if(n==s[r][1]){if(t<s[r][0]){s[r][1]>s[i][1]?--n:++n;break}}else if(s[r][1]==s[i][1]&&n==s[r][1]&&(s[r][0]<t&&t<s[i][0]||s[i][0]<t&&t<s[r][0])){u=!0;break}}return u}function m(t,r,i){t.pointList||e("../shape").get("path").buildPath(n,t);var s=t.pointList,o=!1;for(var u=0,a=s.length;u<a;u++){o=v({pointList:s[u]},r,i);if(o)break}return o}function g(e,r){n||(n=t.getContext()),n.save(),r&&(n.font=r),e=(e+"").split("\n");var i=0;for(var s=0,o=e.length;s<o;s++)i=Math.max(n.measureText(e[s]).width,i);return n.restore(),i}function y(e,r){n||(n=t.getContext()),n.save(),r&&(n.font=r),e=(e+"").split("\n");var i=(n.measureText("国").width+2)*e.length;return n.restore(),i}var t=e("../tool/util"),n;return{isInside:r,isOutside:a,getTextWidth:g,getTextHeight:y}}),r("zrender/tool/matrix",[],function(){var e={create:function(){return[1,0,0,1,0,0]},identity:function(e){e[0]=1,e[1]=0,e[2]=0,e[3]=1,e[4]=0,e[5]=0},mul:function(e,t,n){return e[0]=t[0]*n[0]+t[2]*n[1],e[1]=t[1]*n[0]+t[3]*n[1],e[2]=t[0]*n[2]+t[2]*n[3],e[3]=t[1]*n[2]+t[3]*n[3],e[4]=t[0]*n[4]+t[2]*n[5]+t[4],e[5]=t[1]*n[4]+t[3]*n[5]+t[5],e},translate:function(e,t,n){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4]+n[0],e[5]=t[5]+n[1],e},rotate:function(e,t,n){var r=t[0],i=t[2],s=t[4],o=t[1],u=t[3],a=t[5],f=Math.sin(n),l=Math.cos(n);return e[0]=r*l+o*f,e[1]=-r*f+o*l,e[2]=i*l+u*f,e[3]=-i*f+l*u,e[4]=l*s+f*a,e[5]=l*a-f*s,e},scale:function(e,t,n){var r=n[0],i=n[1];return e[0]=t[0]*r,e[1]=t[1]*i,e[2]=t[2]*r,e[3]=t[3]*i,e[4]=t[4]*r,e[5]=t[5]*i,e},invert:function(e,t){var n=t[0],r=t[2],i=t[4],s=t[1],o=t[3],u=t[5],a=n*o-s*r;return a?(a=1/a,e[0]=o*a,e[1]=-s*a,e[2]=-r*a,e[3]=n*a,e[4]=(r*u-o*i)*a,e[5]=(s*i-n*u)*a,e):null},mulVector:function(e,t,n){var r=t[0],i=t[2],s=t[4],o=t[1],u=t[3],a=t[5];return e[0]=n[0]*r+n[1]*i+s,e[1]=n[0]*o+n[1]*u+a,e}};return e}),r("zrender/tool/color",["require","../tool/util"],function(e){function f(e){r=e}function l(){r=i}function c(e,t){return e=+e||0,t=t||r,t[e%t.length]}function h(e){s=e}function p(){o=s}function d(){return s}function v(e,r,i,s,o,u,a){n||(n=t.getContext());var f=n.createRadialGradient(e,r,i,s,o,u);for(var l=0,c=a.length;l<c;l++)f.addColorStop(a[l][0],a[l][1]);return f.__nonRecursion=!0,f}function m(e,r,i,s,o){n||(n=t.getContext());var u=n.createLinearGradient(e,r,i,s);for(var a=0,f=o.length;a<f;a++)u.addColorStop(o[a][0],o[a][1]);return u.__nonRecursion=!0,u}function g(e,t,n){e=S(e),t=S(t),e=F(e),t=F(t);var r=[],i=(t[0]-e[0])/n,s=(t[1]-e[1])/n,o=(t[2]-e[2])/n;for(var u=0,a=e[0],f=e[1],l=e[2];u<n;u++)r[u]=b([R(Math.floor(a),[0,255]),R(Math.floor(f),[0,255]),R(Math.floor(l),[0,255])]),a+=i,f+=s,l+=o;return a=t[0],f=t[1],l=t[2],r[u]=b([a,f,l]),r}function y(e,t){var n=[],r=e.length;t===undefined&&(t=20);if(r===1)n=g(e[0],e[0],t);else if(r>1)for(var i=0,s=r-1;i<s;i++){var o=g(e[i],e[i+1],t);i<s-1&&o.pop(),n=n.concat(o)}return n}function b(e,t){t=t||"rgb";if(e&&(e.length===3||e.length===4)){e=q(e,function(e){return e>1?Math.ceil(e):e});if(t.indexOf("hex")>-1)return e=q(e.slice(0,3),function(e){return e=Number(e).toString(16),e.length===1?"0"+e:e}),"#"+e.join("");if(t.indexOf("hs")>-1){var n=q(e.slice(1,3),function(e){return e+"%"});e[1]=n[0],e[2]=n[1]}return t.indexOf("a")>-1?(e.length===3&&e.push(1),e[3]=R(e[3],[0,1]),t+"("+e.slice(0,4).join(",")+")"):t+"("+e.slice(0,3).join(",")+")"}}function w(e){e=_(e),e.indexOf("#")>-1&&(e=x(e));var t=e.replace(/[rgbahsvl%\(\)]/ig,"").split(",");return t=q(t,function(e){return Number(e)}),t}function E(e,t){var n=F(e),r=n[3];return typeof r=="undefined"&&(r=1),e.indexOf("hsb")>-1?n=U(n):e.indexOf("hsl")>-1&&(n=z(n)),t.indexOf("hsb")>-1||t.indexOf("hsv")>-1?n=X(n):t.indexOf("hsl")>-1&&(n=V(n)),n[3]=r,b(n,t)}function S(e){return E(e,"rgba")}function x(e){return E(e,"rgb")}function T(e){return E(e,"hex")}function N(e){return E(e,"hsva")}function C(e){return E(e,"hsv")}function k(e){return E(e,"hsba")}function L(e){return E(e,"hsb")}function A(e){return E(e,"hsla")}function O(e){return E(e,"hsl")}function M(e){for(var t in a)if(T(a[t])===T(e))return t;return null}function _(e){return e=String(e),e=e.replace(/(^\s*)|(\s*$)/g,""),/^[^#]*?$/i.test(e)&&(e=e.replace(/\s/g,"")),e}function D(e){a[e]&&(e=a[e]),e=_(e),e=e.replace(/hsv/i,"hsb");if(/^#[0-9a-f]{3}$/i.test(e)){var t=e.replace("#","").split("");e="#"+t[0]+t[0]+t[1]+t[1]+t[2]+t[2]}return e}function P(e,t){var n=t>0?1:-1;typeof t=="undefined"&&(t=0),t=Math.abs(t)>1?1:Math.abs(t),e=x(e);var r=F(e);for(var i=0;i<3;i++)n===1?r[i]=Math.floor(r[i]*(1-t)):r[i]=Math.floor((255-r[i])*t+r[i]);return"rgb("+r.join(",")+")"}function H(e){var t=F(S(e));return t=q(t,function(e){return 255-e}),b(t,"rgb")}function B(e,t,n){typeof n=="undefined"&&(n=.5),n=1-R(n,[0,1]);var r=n*2-1,i=F(S(e)),s=F(S(t)),o=i[3]-s[3],u=((r*o===-1?r:(r+o)/(1+r*o))+1)/2,a=1-u,f=[];for(var l=0;l<3;l++)f[l]=i[l]*u+s[l]*a;var c=i[3]*n+s[3]*(1-n);return c=Math.max(0,Math.min(1,c)),i[3]===1&&s[3]===1?b(f,"rgb"):(f[3]=c,b(f,"rgba"))}function j(){return T("rgb("+Math.round(Math.random()*256)+","+Math.round(Math.random()*256)+","+Math.round(Math.random()*256)+")")}function F(e){e=D(e);var t=e.match(u);if(t===null)throw new Error("The color format error");var n,r,i=[],s;if(t[2])n=t[2].replace("#","").split(""),s=[n[0]+n[1],n[2]+n[3],n[4]+n[5]],i=q(s,function(e){return R(parseInt(e,16),[0,255])});else if(t[4]){var o=t[4].split(",");r=o[3],s=o.slice(0,3),i=q(s,function(e){return e=Math.floor(e.indexOf("%")>0?parseInt(e,0)*2.55:e),R(e,[0,255])}),typeof r!="undefined"&&i.push(R(parseFloat(r),[0,1]))}else if(t[5]||t[6]){var a=(t[5]||t[6]).split(","),f=parseInt(a[0],0)/360,l=a[1],c=a[2];r=a[3],i=q([l,c],function(e){return R(parseFloat(e)/100,[0,1])}),i.unshift(f),typeof r!="undefined"&&i.push(R(parseFloat(r),[0,1]))}return i}function I(e,t){t===null&&(t=1);var n=F(S(e));return n[3]=R(Number(t).toFixed(4),[0,1]),b(n,"rgba")}function q(e,t){if(typeof t!="function")throw new TypeError;var n=e?e.length:0;for(var r=0;r<n;r++)e[r]=t(e[r]);return e}function R(e,t){return e<=t[0]?e=t[0]:e>=t[1]&&(e=t[1]),e}function U(e){var t=e[0],n=e[1],r=e[2],i,s,o;if(n===0)i=r*255,s=r*255,o=r*255;else{var u=t*6;u===6&&(u=0);var a=Math.floor(u),f=r*(1-n),l=r*(1-n*(u-a)),c=r*(1-n*(1-(u-a))),h=0,p=0,d=0;a===0?(h=r,p=c,d=f):a===1?(h=l,p=r,d=f):a===2?(h=f,p=r,d=c):a===3?(h=f,p=l,d=r):a===4?(h=c,p=f,d=r):(h=r,p=f,d=l),i=h*255,s=p*255,o=d*255}return[i,s,o]}function z(e){var t=e[0],n=e[1],r=e[2],i,s,o;if(n===0)i=r*255,s=r*255,o=r*255;else{var u;r<.5?u=r*(1+n):u=r+n-n*r;var a=2*r-u;i=255*W(a,u,t+1/3),s=255*W(a,u,t),o=255*W(a,u,t-1/3)}return[i,s,o]}function W(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),6*n<1?e+(t-e)*6*n:2*n<1?t:3*n<2?e+(t-e)*(2/3-n)*6:e}function X(e){var t=e[0]/255,n=e[1]/255,r=e[2]/255,i=Math.min(t,n,r),s=Math.max(t,n,r),o=s-i,u=s,a,f;if(o===0)a=0,f=0;else{f=o/s;var l=((s-t)/6+o/2)/o,c=((s-n)/6+o/2)/o,h=((s-r)/6+o/2)/o;t===s?a=h-c:n===s?a=1/3+l-h:r===s&&(a=2/3+c-l),a<0&&(a+=1),a>1&&(a-=1)}return a*=360,f*=100,u*=100,[a,f,u]}function V(e){var t=e[0]/255,n=e[1]/255,r=e[2]/255,i=Math.min(t,n,r),s=Math.max(t,n,r),o=s-i,u=(s+i)/2,a,f;if(o===0)a=0,f=0;else{u<.5?f=o/(s+i):f=o/(2-s-i);var l=((s-t)/6+o/2)/o,c=((s-n)/6+o/2)/o,h=((s-r)/6+o/2)/o;t===s?a=h-c:n===s?a=1/3+l-h:r===s&&(a=2/3+c-l),a<0&&(a+=1),a>1&&(a-=1)}return a*=360,f*=100,u*=100,[a,f,u]}var t=e("../tool/util"),n,r=["#ff9277"," #dddd00"," #ffc877"," #bbe3ff"," #d5ffbb","#bbbbff"," #ddb000"," #b0dd00"," #e2bbff"," #ffbbe3","#ff7777"," #ff9900"," #83dd00"," #77e3ff"," #778fff","#c877ff"," #ff77ab"," #ff6600"," #aa8800"," #77c7ff","#ad77ff"," #ff77ff"," #dd0083"," #777700"," #00aa00","#0088aa"," #8400dd"," #aa0088"," #dd0000"," #772e00"],i=r,s="rgba(255,255,0,0.5)",o=s,u=/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+%?)?)\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i,a={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#0ff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000",blanchedalmond:"#ffebcd",blue:"#00f",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#0ff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgrey:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#f0f",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#789",lightslategrey:"#789",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#0f0",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#f0f",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#f00",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#fff",whitesmoke:"#f5f5f5",yellow:"#ff0",yellowgreen:"#9acd32"};return{customPalette:f,resetPalette:l,getColor:c,getHighlightColor:d,customHighlight:h,resetHighlight:p,getRadialGradient:v,getLinearGradient:m,getGradientColors:y,getStepColors:g,reverse:H,mix:B,lift:P,trim:_,random:j,toRGB:x,toRGBA:S,toHex:T,toHSL:O,toHSLA:A,toHSB:L,toHSBA:k,toHSV:C,toHSVA:N,toName:M,toColor:b,toArray:w,alpha:I,getData:F}}),r("zrender/shape/base",["require","../tool/area","../tool/matrix","../tool/vector","../tool/color"],function(e){function s(e){var n=["brush","setContext","dashedLineTo","smoothBezier","smoothSpline","drawText","getHighlightStyle","getHighlightZoom","drift","isCover","updateTransform"],r=n.length,i=e.prototype,s=0,o;for(;s<r;s++)o=n[s],i[o]||(i[o]=t[o])}function o(e,t,n){var r=t.style||{};this.brushTypeOnly&&(r.brushType=this.brushTypeOnly),n&&(r=this.getHighlightStyle(r,t.highlightStyle||{},this.brushTypeOnly)),this.brushTypeOnly=="stroke"&&(r.strokeColor=r.strokeColor||r.color),e.save(),this.setContext(e,r),t.__needTransform&&e.transform.apply(e,this.updateTransform(t)),e.beginPath(),this.buildPath(e,r),this.brushTypeOnly!="stroke"&&e.closePath();switch(r.brushType){case"fill":e.fill();break;case"stroke":r.lineWidth>0&&e.stroke();break;case"both":e.fill(),r.lineWidth>0&&e.stroke();break;default:e.fill()}typeof r.text!="undefined"&&this.drawText(e,r,t.style),e.restore();return}function u(e,t){t.color&&(e.fillStyle=t.color),t.strokeColor&&(e.strokeStyle=t.strokeColor),typeof t.opacity!="undefined"&&(e.globalAlpha=t.opacity),t.lineCap&&(e.lineCap=t.lineCap),t.lineJoin&&(e.lineJoin=t.lineJoin),t.miterLimit&&(e.miterLimit=t.miterLimit),typeof t.lineWidth!="undefined"&&(e.lineWidth=t.lineWidth),typeof t.shadowBlur!="undefined"&&(e.shadowBlur=t.shadowBlur),t.shadowColor&&(e.shadowColor=t.shadowColor),typeof t.shadowOffsetX!="undefined"&&(e.shadowOffsetX=t.shadowOffsetX),typeof t.shadowOffsetY!="undefined"&&(e.shadowOffsetY=t.shadowOffsetY)}function a(e,t,n,r,i,s){s=typeof s=="undefined"?5:s;var o=r-t,u=i-n,a=Math.floor(Math.sqrt(o*o+u*u)/s);for(var f=0;f<a;++f)e[f%2===0?"moveTo":"lineTo"](t+o/a*f,n+u/a*f)}function f(e,t,n){var r=e.length,s=[],o=[],u=[],a=[],f,l;for(var c=0;c<r;c++){var h=e[c],f,l;if(n)f=e[c===0?r-1:c-1],l=e[(c+1)%r];else{if(c===0||c===r-1){s.push(e[c]);continue}f=e[c-1],l=e[c+1]}i.sub(o,l,f),i.scale(o,o,t);var p=i.distance(h,f),d=i.distance(h,l),v=p+d;p/=v,d/=v,i.scale(u,o,-p),i.scale(a,o,d),s.push(i.add([],h,u)),s.push(i.add([],h,a))}return n&&s.push(s.shift()),s}function l(e,t){var n=e.length,r=[],s=0;for(var o=1;o<n;o++)s+=i.distance(e[o-1],e[o]);var u=s/5;u=u<n?n:u;for(var o=0;o<u;o++){var a;t?a=o/(u-1)*n:a=o/(u-1)*(n-1);var f=Math.floor(a),l=a-f,h,p=e[f%n],d,v;t?(h=e[(f-1+n)%n],d=e[(f+1)%n],v=e[(f+2)%n]):(h=e[f===0?f:f-1],d=e[f>n-2?n-1:f+1],v=e[f>n-3?n-1:f+2]);var m=l*l,g=l*m;r.push([c(h[0],p[0],d[0],v[0],l,m,g),c(h[1],p[1],d[1],v[1],l,m,g)])}return r}function c(e,t,n,r,i,s,o){var u=(n-e)*.5,a=(r-t)*.5;return(2*(t-n)+u+a)*o+(-3*(t-n)-2*u-a)*s+u*i+t}function h(e,t,n){t.textColor=t.textColor||t.color||t.strokeColor,e.fillStyle=t.textColor,t.textPosition=="inside"&&(e.shadowColor="rgba(0,0,0,0)");var r=10,i,s,o,u,a=t.textPosition||this.textPosition||"top";if(a!="inside"&&a!="top"&&a!="bottom"&&a!="left"&&a!="right"||!this.getRect)if(a=="start"||a=="end"){var l,c,h,d;if(typeof t.pointList!="undefined"){var v=t.pointList;if(v.length<2)return;var m=v.length;switch(a){case"start":l=v[0][0],c=v[1][0],h=v[0][1],d=v[1][1];break;case"end":l=v[m-2][0],c=v[m-1][0],h=v[m-2][1],d=v[m-1][1]}}else l=t.xStart||0,c=t.xEnd||0,h=t.yStart||0,d=t.yEnd||0;switch(a){case"start":i=l<c?"end":"start",s=h<d?"bottom":"top",o=l,u=h;break;case"end":i=l<c?"start":"end",s=h<d?"top":"bottom",o=c,u=d}r-=4,l!=c?o-=i=="end"?r:-r:i="center",h!=d?u-=s=="bottom"?r:-r:s="middle"}else a=="specific"&&(o=t.textX||0,u=t.textY||0,i="start",s="middle");else{var f=(n||t).__rect||this.getRect(n||t);switch(a){case"inside":o=f.x+f.width/2,u=f.y+f.height/2,i="center",s="middle",t.brushType!="stroke"&&t.textColor==t.color&&(e.fillStyle="#fff");break;case"left":o=f.x-r,u=f.y+f.height/2,i="end",s="middle";break;case"right":o=f.x+f.width+r,u=f.y+f.height/2,i="start",s="middle";break;case"top":o=f.x+f.width/2,u=f.y-r,i="center",s="bottom";break;case"bottom":o=f.x+f.width/2,u=f.y+f.height+r,i="center",s="top"}}typeof o!="undefined"&&typeof u!="undefined"&&p(e,t.text,o,u,t.textFont,t.textAlign||i,t.textBaseline||s)}function p(e,t,r,i,s,o,u){s&&(e.font=s),e.textAlign=o,e.textBaseline=u;var a=d(t,r,i,s,o,u);t=(t+"").split("\n");var f=n.getTextHeight("国",s),r=r,i;u=="top"?i=a.y:u=="bottom"?i=a.y+f:i=a.y+f/2;for(var l=0,c=t.length;l<c;l++)e.fillText(t[l],r,i),i+=f}function d(e,t,r,i,s,o){var u=n.getTextWidth(e,i),a=n.getTextHeight("国",i);e=(e+"").split("\n");var f=t;s=="end"||s=="right"?f-=u:s=="center"&&(f-=u/2);var l;return o=="top"?l=r:o=="bottom"?l=r-a*e.length:l=r-a*e.length/2,{x:f,y:l,width:u,height:a*e.length}}function v(t,n,r){var i={};for(var s in t)i[s]=t[s];var o=e("../tool/color"),u=o.getHighlightColor();t.brushType!="stroke"?(i.strokeColor=u,i.lineWidth=(t.lineWidth||1)+this.getHighlightZoom(),i.brushType="both"):r!="stroke"?(i.strokeColor=u,i.lineWidth=(t.lineWidth||1)+this.getHighlightZoom()):i.strokeColor=n.strokeColor||o.mix(t.strokeColor,o.toRGB(u));for(var s in n)typeof n[s]!="undefined"&&(i[s]=n[s]);return i}function m(){return this.type!="text"?6:2}function g(e,t,n){e.position[0]+=t,e.position[1]+=n}function y(e,t,i){if(e.__needTransform&&e._transform){var s=[];r.invert(s,e._transform);var o=[t,i];r.mulVector(o,s,[t,i,1]),t==o[0]&&i==o[1]&&(Math.abs(e.rotation[0])>1e-4||Math.abs(e.position[0])>1e-4||Math.abs(e.position[1])>1e-4||Math.abs(e.scale[0]-1)>1e-4||Math.abs(e.scale[1]-1)>1e-4?e.__needTransform=!0:e.__needTransform=!1),t=o[0],i=o[1]}var u;return e.style.__rect?u=e.style.__rect:(u=this.getRect(e.style),e.style.__rect=u),t>=u.x&&t<=u.x+u.width&&i>=u.y&&i<=u.y+u.height?n.isInside(this,e.style,t,i):!1}function b(e){var t=e._transform||r.create();r.identity(t);if(e.scale&&(e.scale[0]!==1||e.scale[1]!==1)){var n=e.scale[2]||0,i=e.scale[3]||0;(n||i)&&r.translate(t,t,[-n,-i]),r.scale(t,t,e.scale),(n||i)&&r.translate(t,t,[n,i])}if(e.rotation)if(e.rotation instanceof Array){if(e.rotation[0]!==0){var n=e.rotation[1]||0,i=e.rotation[2]||0;(n||i)&&r.translate(t,t,[-n,-i]),r.rotate(t,t,e.rotation[0]),(n||i)&&r.translate(t,t,[n,i])}}else e.rotation!==0&&r.rotate(t,t,e.rotation);return e.position&&(e.position[0]!==0||e.position[1]!==0)&&r.translate(t,t,e.position),e._transform=t,t}var t,n=e("../tool/area"),r=e("../tool/matrix"),i=e("../tool/vector");return t={derive:s,brush:o,setContext:u,dashedLineTo:a,smoothBezier:f,smoothSpline:l,drawText:h,getHighlightStyle:v,getHighlightZoom:m,drift:g,isCover:y,updateTransform:b},t}),r("zrender/shape/circle",["require","./base","../shape"],function(e){function t(){this.type="circle"}t.prototype={buildPath:function(e,t){e.arc(t.x,t.y,t.r,0,Math.PI*2,!0);return},getRect:function(e){var t;return e.brushType=="stroke"||e.brushType=="fill"?t=e.lineWidth||1:t=0,{x:Math.round(e.x-e.r-t/2),y:Math.round(e.y-e.r-t/2),width:e.r*2+t,height:e.r*2+t}}};var n=e("./base");n.derive(t);var r=e("../shape");return r.define("circle",new t),t}),r("zrender/shape/ellipse",["require","./base","../shape"],function(e){function t(){this.type="ellipse"}t.prototype={buildPath:function(e,t){var n=.5522848,r=t.x,i=t.y,s=t.a,o=t.b,u=s*n,a=o*n;e.moveTo(r-s,i),e.bezierCurveTo(r-s,i-a,r-u,i-o,r,i-o),e.bezierCurveTo(r+u,i-o,r+s,i-a,r+s,i),e.bezierCurveTo(r+s,i+a,r+u,i+o,r,i+o),e.bezierCurveTo(r-u,i+o,r-s,i+a,r-s,i);return},getRect:function(e){var t;return e.brushType=="stroke"||e.brushType=="fill"?t=e.lineWidth||1:t=0,{x:Math.round(e.x-e.a-t/2),y:Math.round(e.y-e.b-t/2),width:e.a*2+t,height:e.b*2+t}}};var n=e("./base");n.derive(t);var r=e("../shape");return r.define("ellipse",new t),t}),r("zrender/shape/line",["require","./base","../shape"],function(e){function t(){this.type="line",this.brushTypeOnly="stroke",this.textPosition="end"}t.prototype={buildPath:function(e,t){if(!t.lineType||t.lineType=="solid")e.moveTo(t.xStart,t.yStart),e.lineTo(t.xEnd,t.yEnd);else if(t.lineType=="dashed"||t.lineType=="dotted"){var n=(t.lineWidth||1)*(t.lineType=="dashed"?5:1);this.dashedLineTo(e,t.xStart,t.yStart,t.xEnd,t.yEnd,n)}},getRect:function(e){var t=e.lineWidth||1;return{x:Math.min(e.xStart,e.xEnd)-t,y:Math.min(e.yStart,e.yEnd)-t,width:Math.abs(e.xStart-e.xEnd)+t,height:Math.abs(e.yStart-e.yEnd)+t}}};var n=e("./base");n.derive(t);var r=e("../shape");return r.define("line",new t),t}),r("zrender/shape/polygon",["require","./base","../shape"],function(e){function t(){this.type="polygon"}t.prototype={brush:function(e,t,n){var r=t.style||{};n&&(r=this.getHighlightStyle(r,t.highlightStyle||{})),e.save(),this.setContext(e,r),t.__needTransform&&e.transform.apply(e,this.updateTransform(t));var i=!1;if(r.brushType=="fill"||r.brushType=="both"||typeof r.brushType=="undefined")e.beginPath(),r.lineType=="dashed"||r.lineType=="dotted"?(this.buildPath(e,{lineType:"solid",lineWidth:r.lineWidth,pointList:r.pointList}),i=!1):(this.buildPath(e,r),i=!0),e.closePath(),e.fill();r.lineWidth>0&&(r.brushType=="stroke"||r.brushType=="both")&&(i||(e.beginPath(),this.buildPath(e,r),e.closePath()),e.stroke()),r.text&&this.drawText(e,r,t.style),e.restore();return},buildPath:function(e,t){var n=t.pointList,r=n[0],i=n[n.length-1];r&&i&&r[0]==i[0]&&r[1]==i[1]&&n.pop();if(n.length<2)return;if(t.smooth&&t.smooth!=="spline"){var s=this.smoothBezier(n,t.smooth,!0);e.moveTo(n[0][0],n[0][1]);var o,u,a,f=n.length;for(var l=0;l<f;l++)o=s[l*2],u=s[l*2+1],a=n[(l+1)%f],e.bezierCurveTo(o[0],o[1],u[0],u[1],a[0],a[1])}else{t.smooth==="spline"&&(n=this.smoothSpline(n,!0));if(!t.lineType||t.lineType=="solid"){e.moveTo(n[0][0],n[0][1]);for(var l=1,c=n.length;l<c;l++)e.lineTo(n[l][0],n[l][1]);e.lineTo(n[0][0],n[0][1])}else if(t.lineType=="dashed"||t.lineType=="dotted"){var h=t._dashLength||(t.lineWidth||1)*(t.lineType=="dashed"?5:1);t._dashLength=h,e.moveTo(n[0][0],n[0][1]);for(var l=1,c=n.length;l<c;l++)this.dashedLineTo(e,n[l-1][0],n[l-1][1],n[l][0],n[l][1],h);this.dashedLineTo(e,n[n.length-1][0],n[n.length-1][1],n[0][0],n[0][1],h)}}return},getRect:function(e){var t=Number.MAX_VALUE,n=Number.MIN_VALUE,r=Number.MAX_VALUE,i=Number.MIN_VALUE,s=e.pointList;for(var o=0,u=s.length;o<u;o++)s[o][0]<t&&(t=s[o][0]),s[o][0]>n&&(n=s[o][0]),s[o][1]<r&&(r=s[o][1]),s[o][1]>i&&(i=s[o][1]);var a;return e.brushType=="stroke"||e.brushType=="fill"?a=e.lineWidth||1:a=0,{x:Math.round(t-a/2),y:Math.round(r-a/2),width:n-t+a,height:i-r+a}}};var n=e("./base");n.derive(t);var r=e("../shape");return r.define("polygon",new t),t}),r("zrender/shape/brokenLine",["require","../shape","./base","../shape"],function(e){function t(){this.type="brokenLine",this.brushTypeOnly="stroke",this.textPosition="end"}t.prototype={buildPath:function(e,t){var n=t.pointList;if(n.length<2)return;if(t.smooth&&t.smooth!=="spline"){var r=this.smoothBezier(n,t.smooth,!1);e.moveTo(n[0][0],n[0][1]);var i,s,o;for(var u=0,a=n.length;u<a-1;u++)i=r[u*2],s=r[u*2+1],o=n[u+1],e.bezierCurveTo(i[0],i[1],s[0],s[1],o[0],o[1])}else{t.smooth==="spline"&&(n=this.smoothSpline(n,!1));if(!t.lineType||t.lineType=="solid"){e.moveTo(n[0][0],n[0][1]);for(var u=1,a=n.length;u<a;u++)e.lineTo(n[u][0],n[u][1])}else if(t.lineType=="dashed"||t.lineType=="dotted"){var f=(t.lineWidth||1)*(t.lineType=="dashed"?5:1);e.moveTo(n[0][0],n[0][1]);for(var u=1,a=n.length;u<a;u++)this.dashedLineTo(e,n[u-1][0],n[u-1][1],n[u][0],n[u][1],f)}}return},getRect:function(t){var n=e("../shape");return n.get("polygon").getRect(t)}};var n=e("./base");n.derive(t);var r=e("../shape");return r.define("brokenLine",new t),t}),r("zrender/shape/rectangle",["require","./base","../shape"],function(e){function t(){this.type="rectangle"}t.prototype={_buildRadiusPath:function(e,t){var n=t.x,r=t.y,i=t.width,s=t.height,o=t.radius,u,a,f,l;typeof o=="number"?u=a=f=l=o:o instanceof Array?o.length===1?u=a=f=l=o[0]:o.length===2?(u=f=o[0],a=l=o[1]):o.length===3?(u=o[0],a=l=o[1],f=o[2]):(u=o[0],a=o[1],f=o[2],l=o[3]):u=a=f=l=0,e.moveTo(n+u,r),e.lineTo(n+i-a,r),a!==0&&e.quadraticCurveTo(n+i,r,n+i,r+a),e.lineTo(n+i,r+s-f),f!==0&&e.quadraticCurveTo(n+i,r+s,n+i-f,r+s),e.lineTo(n+l,r+s),l!==0&&e.quadraticCurveTo(n,r+s,n,r+s-l),e.lineTo(n,r+u),u!==0&&e.quadraticCurveTo(n,r,n+u,r)},buildPath:function(e,t){t.radius?this._buildRadiusPath(e,t):(e.moveTo(t.x,t.y),e.lineTo(t.x+t.width,t.y),e.lineTo(t.x+t.width,t.y+t.height),e.lineTo(t.x,t.y+t.height),e.lineTo(t.x,t.y));return},getRect:function(e){var t;return e.brushType=="stroke"||e.brushType=="fill"?t=e.lineWidth||1:t=0,{x:Math.round(e.x-t/2),y:Math.round(e.y-t/2),width:e.width+t,height:e.height+t}}};var n=e("./base");n.derive(t);var r=e("../shape");return r.define("rectangle",new t),t}),r("zrender/shape/ring",["require","./base","../shape"],function(e){function t(){this.type="ring"}t.prototype={buildPath:function(e,t){e.arc(t.x,t.y,t.r,0,Math.PI*2,!1),e.moveTo(t.x+t.r0,t.y),e.arc(t.x,t.y,t.r0,0,Math.PI*2,!0);return},getRect:function(e){var t;return e.brushType=="stroke"||e.brushType=="fill"?t=e.lineWidth||1:t=0,{x:Math.round(e.x-e.r-t/2),y:Math.round(e.y-e.r-t/2),width:e.r*2+t,height:e.r*2+t}}};var n=e("./base");n.derive(t);var r=e("../shape");return r.define("ring",new t),t}),r("zrender/tool/math",[],function(){function t(t,n){return Math.sin(n?t*e:t)}function n(t,n){return Math.cos(n?t*e:t)}function r(t){return t*e}function i(t){return t/e}var e=Math.PI/180;return{sin:t,cos:n,degreeToRadian:r,radianToDegree:i}}),r("zrender/shape/sector",["require","../tool/math","../shape","./base","../shape"],function(e){function n(){this.type="sector"}var t=e("../tool/math");n.prototype={buildPath:function(e,n){var r=n.x,i=n.y,s=typeof n.r0=="undefined"?0:n.r0,o=n.r,u=n.startAngle,a=n.endAngle;if(Math.abs(a-u)>=360){e.arc(r,i,o,0,Math.PI*2,!1),s!==0&&(e.moveTo(r+s,i),e.arc(r,i,s,0,Math.PI*2,!0));return}u=t.degreeToRadian(u),a=t.degreeToRadian(a);var f=Math.PI*2,l=t.cos(u),c=t.sin(u);e.moveTo(l*s+r,i-c*s),e.lineTo(l*o+r,i-c*o),e.arc(r,i,o,f-u,f-a,!0),e.lineTo(t.cos(a)*s+r,i-t.sin(a)*s),s!==0&&e.arc(r,i,s,f-a,f-u,!1);return},getRect:function(n){var r=e("../shape"),i=n.x,s=n.y,o=typeof n.r0=="undefined"?0:n.r0,u=n.r,a=n.startAngle,f=n.endAngle;if(Math.abs(f-a)>=360)return r.get("ring").getRect(n);a=(720+a)%360,f=(720+f)%360,f<=a&&(f+=360);var l=[];return a<=90&&f>=90&&l.push([i,s-u]),a<=180&&f>=180&&l.push([i-u,s]),a<=270&&f>=270&&l.push([i,s+u]),a<=360&&f>=360&&l.push([i+u,s]),a=t.degreeToRadian(a),f=t.degreeToRadian(f),l.push([t.cos(a)*o+i,s-t.sin(a)*o]),l.push([t.cos(a)*u+i,s-t.sin(a)*u]),l.push([t.cos(f)*u+i,s-t.sin(f)*u]),l.push([t.cos(f)*o+i,s-t.sin(f)*o]),r.get("polygon").getRect({brushType:n.brushType,lineWidth:n.lineWidth,pointList:l})}};var r=e("./base");r.derive(n);var i=e("../shape");return i.define("sector",new n),n}),r("zrender/shape/text",["require","../tool/area","./base","../shape"],function(e){function n(){this.type="text"}var t=e("../tool/area");n.prototype={brush:function(e,n,r){var i=n.style||{};r&&(i=this.getHighlightStyle(i,n.highlightStyle||{}));if(typeof i.text=="undefined")return;e.save(),this.setContext(e,i),n.__needTransform&&e.transform.apply(e,this.updateTransform(n)),i.textFont&&(e.font=i.textFont),e.textAlign=i.textAlign||"start",e.textBaseline=i.textBaseline||"middle";var s=(i.text+"").split("\n"),o=t.getTextHeight("国",i.textFont),u=this.getRect(i),a=i.x,f;i.textBaseline=="top"?f=u.y:i.textBaseline=="bottom"?f=u.y+o:f=u.y+o/2;for(var l=0,c=s.length;l<c;l++){if(i.maxWidth)switch(i.brushType){case"fill":e.fillText(s[l],a,f,i.maxWidth);break;case"stroke":e.strokeText(s[l],a,f,i.maxWidth);break;case"both":e.fillText(s[l],a,f,i.maxWidth),e.strokeText(s[l],a,f,i.maxWidth);break;default:e.fillText(s[l],a,f,i.maxWidth)}else switch(i.brushType){case"fill":e.fillText(s[l],a,f);break;case"stroke":e.strokeText(s[l],a,f);break;case"both":e.fillText(s[l],a,f),e.strokeText(s[l],a,f);break;default:e.fillText(s[l],a,f)}f+=o}e.restore();return},getRect:function(e){var n=t.getTextWidth(e.text,e.textFont),r=t.getTextHeight(e.text,e.textFont),i=e.x;e.textAlign=="end"||e.textAlign=="right"?i-=n:e.textAlign=="center"&&(i-=n/2);var s;return e.textBaseline=="top"?s=e.y:e.textBaseline=="bottom"?s=e.y-r:s=e.y-r/2,{x:i,y:s,width:n,height:r}}};var r=e("./base");r.derive(n);var i=e("../shape");return i.define("text",new n),n}),r("zrender/shape/heart",["require","./base","../shape"],function(e){function t(){this.type="heart"}t.prototype={buildPath:function(e,t){e.moveTo(t.x,t.y),e.bezierCurveTo(t.x+t.a/2,t.y-t.b*2/3,t.x+t.a*2,t.y+t.b/3,t.x,t.y+t.b),e.bezierCurveTo(t.x-t.a*2,t.y+t.b/3,t.x-t.a/2,t.y-t.b*2/3,t.x,t.y);return},getRect:function(e){var t;return e.brushType=="stroke"||e.brushType=="fill"?t=e.lineWidth||1:t=0,{x:Math.round(e.x-e.a-t/2),y:Math.round(e.y-e.b/4-t/2),width:e.a*2+t,height:e.b*5/4+t}}};var n=e("./base");n.derive(t);var r=e("../shape");return r.define("heart",new t),t}),r("zrender/shape/droplet",["require","./base","../shape"],function(e){function t(){this.type="droplet"}t.prototype={buildPath:function(e,t){e.moveTo(t.x,t.y+t.a),e.bezierCurveTo(t.x+t.a,t.y+t.a,t.x+t.a*3/2,t.y-t.a/3,t.x,t.y-t.b),e.bezierCurveTo(t.x-t.a*3/2,t.y-t.a/3,t.x-t.a,t.y+t.a,t.x,t.y+t.a);return},getRect:function(e){var t;return e.brushType=="stroke"||e.brushType=="fill"?t=e.lineWidth||1:t=0,{x:Math.round(e.x-e.a-t/2),y:Math.round(e.y-e.b-t/2),width:e.a*2+t,height:e.a+e.b+t}}};var n=e("./base");n.derive(t);var r=e("../shape");return r.define("droplet",new t),t}),r("zrender/shape/path",["require","./base","../shape"],function(e){function t(){this.type="path"}t.prototype={_parsePathData:function(e){if(!e)return[];var t=e,n=["m","M","l","L","v","V","h","H","z","Z","c","C","q","Q","t","T","s","S","a","A"];t=t.replace(/-/g," -"),t=t.replace(/  /g," "),t=t.replace(/ /g,","),t=t.replace(/,,/g,",");var r;for(r=0;r<n.length;r++)t=t.replace(new RegExp(n[r],"g"),"|"+n[r]);var i=t.split("|"),s=[],o=0,u=0;for(r=1;r<i.length;r++){var a=i[r],f=a.charAt(0);a=a.slice(1),a=a.replace(new RegExp("e,-","g"),"e-");var l=a.split(",");l.length>0&&l[0]===""&&l.shift();for(var c=0;c<l.length;c++)l[c]=parseFloat(l[c]);while(l.length>0){if(isNaN(l[0]))break;var h=null,p=[],d,v,m,g,y,b,w,E,S=o,x=u;switch(f){case"l":o+=l.shift(),u+=l.shift(),h="L",p.push(o,u);break;case"L":o=l.shift(),u=l.shift(),p.push(o,u);break;case"m":o+=l.shift(),u+=l.shift(),h="M",p.push(o,u),f="l";break;case"M":o=l.shift(),u=l.shift(),h="M",p.push(o,u),f="L";break;case"h":o+=l.shift(),h="L",p.push(o,u);break;case"H":o=l.shift(),h="L",p.push(o,u);break;case"v":u+=l.shift(),h="L",p.push(o,u);break;case"V":u=l.shift(),h="L",p.push(o,u);break;case"C":p.push(l.shift(),l.shift(),l.shift(),l.shift()),o=l.shift(),u=l.shift(),p.push(o,u);break;case"c":p.push(o+l.shift(),u+l.shift(),o+l.shift(),u+l.shift()),o+=l.shift(),u+=l.shift(),h="C",p.push(o,u);break;case"S":d=o,v=u,m=s[s.length-1],m.command==="C"&&(d=o+(o-m.points[2]),v=u+(u-m.points[3])),p.push(d,v,l.shift(),l.shift()),o=l.shift(),u=l.shift(),h="C",p.push(o,u);break;case"s":d=o,v=u,m=s[s.length-1],m.command==="C"&&(d=o+(o-m.points[2]),v=u+(u-m.points[3])),p.push(d,v,o+l.shift(),u+l.shift()),o+=l.shift(),u+=l.shift(),h="C",p.push(o,u);break;case"Q":p.push(l.shift(),l.shift()),o=l.shift(),u=l.shift(),p.push(o,u);break;case"q":p.push(o+l.shift(),u+l.shift()),o+=l.shift(),u+=l.shift(),h="Q",p.push(o,u);break;case"T":d=o,v=u,m=s[s.length-1],m.command==="Q"&&(d=o+(o-m.points[0]),v=u+(u-m.points[1])),o=l.shift(),u=l.shift(),h="Q",p.push(d,v,o,u);break;case"t":d=o,v=u,m=s[s.length-1],m.command==="Q"&&(d=o+(o-m.points[0]),v=u+(u-m.points[1])),o+=l.shift(),u+=l.shift(),h="Q",p.push(d,v,o,u);break;case"A":g=l.shift(),y=l.shift(),b=l.shift(),w=l.shift(),E=l.shift(),S=o,x=u,o=l.shift(),u=l.shift(),h="A",p=this._convertPoint(S,x,o,u,w,E,g,y,b);break;case"a":g=l.shift(),y=l.shift(),b=l.shift(),w=l.shift(),E=l.shift(),S=o,x=u,o+=l.shift(),u+=l.shift(),h="A",p=this._convertPoint(S,x,o,u,w,E,g,y,b)}s.push({command:h||f,points:p})}(f==="z"||f==="Z")&&s.push({command:"z",points:[]})}return s},_convertPoint:function(e,t,n,r,i,s,o,u,a){var f=a*(Math.PI/180),l=Math.cos(f)*(e-n)/2+Math.sin(f)*(t-r)/2,c=-1*Math.sin(f)*(e-n)/2+Math.cos(f)*(t-r)/2,h=l*l/(o*o)+c*c/(u*u);h>1&&(o*=Math.sqrt(h),u*=Math.sqrt(h));var p=Math.sqrt((o*o*u*u-o*o*c*c-u*u*l*l)/(o*o*c*c+u*u*l*l));i===s&&(p*=-1),isNaN(p)&&(p=0);var d=p*o*c/u,v=p*-u*l/o,m=(e+n)/2+Math.cos(f)*d-Math.sin(f)*v,g=(t+r)/2+Math.sin(f)*d+Math.cos(f)*v,y=function(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1])},b=function(e,t){return(e[0]*t[0]+e[1]*t[1])/(y(e)*y(t))},w=function(e,t){return(e[0]*t[1]<e[1]*t[0]?-1:1)*Math.acos(b(e,t))},E=w([1,0],[(l-d)/o,(c-v)/u]),S=[(l-d)/o,(c-v)/u],x=[(-1*l-d)/o,(-1*c-v)/u],T=w(S,x);return b(S,x)<=-1&&(T=Math.PI),b(S,x)>=1&&(T=0),s===0&&T>0&&(T-=2*Math.PI),s===1&&T<0&&(T+=2*Math.PI),[m,g,o,u,E,T,f,s]},buildPath:function(e,t){var n=t.path,r=this._parsePathData(n),i=t.x||0,s=t.y||0,o,u=t.pointList=[],a=[];for(var f=0,l=r.length;f<l;f++){r[f].command.toUpperCase()=="M"&&(a.length>0&&u.push(a),a=[]),o=r[f].points;for(var c=0,h=o.length;c<h;c+=2)a.push([o[c]+i,o[c+1]+s])}a.length>0&&u.push(a);var p;for(var f=0,l=r.length;f<l;f++){p=r[f].command,o=r[f].points;for(var c=0,h=o.length;c<h;c++)c%2===0?o[c]+=i:o[c]+=s;switch(p){case"L":e.lineTo(o[0],o[1]);break;case"M":e.moveTo(o[0],o[1]);break;case"C":e.bezierCurveTo(o[0],o[1],o[2],o[3],o[4],o[5]);break;case"Q":e.quadraticCurveTo(o[0],o[1],o[2],o[3]);break;case"A":var d=o[0],v=o[1],m=o[2],g=o[3],y=o[4],b=o[5],w=o[6],E=o[7],S=m>g?m:g,x=m>g?1:m/g,T=m>g?g/m:1;e.translate(d,v),e.rotate(w),e.scale(x,T),e.arc(0,0,S,y,y+b,1-E),e.scale(1/x,1/T),e.rotate(-w),e.translate(-d,-v);break;case"z":e.closePath()}}return},getRect:function(e){var t;e.brushType=="stroke"||e.brushType=="fill"?t=e.lineWidth||1:t=0;var n=Number.MAX_VALUE,r=Number.MIN_VALUE,i=Number.MAX_VALUE,s=Number.MIN_VALUE,o=e.x||0,u=e.y||0,a=this._parsePathData(e.path);for(var f=0;f<a.length;f++){var l=a[f].points;for(var c=0;c<l.length;c++)c%2===0?(l[c]+o<n&&(n=l[c]+o),l[c]+o>r&&(r=l[c]+o)):(l[c]+u<i&&(i=l[c]+u),l[c]+u>s&&(s=l[c]+u))}var h;return n===Number.MAX_VALUE||r===Number.MIN_VALUE||i===Number.MAX_VALUE||s===Number.MIN_VALUE?h={x:0,y:0,width:0,height:0}:h={x:Math.round(n-t/2),y:Math.round(i-t/2),width:r-n+t,height:s-i+t},h}};var n=e("./base");n.derive(t);var r=e("../shape");return r.define("path",new t),t}),r("zrender/shape/image",["require","./base","../shape"],function(e){function i(){this.type="image"}var t={},n=[],r;i.prototype={brush:function(e,i,s,o){var u=i.style||{};s&&(u=this.getHighlightStyle(u,i.highlightStyle||{}));var a=u.image;if(typeof a=="string"){var f=a;t[f]?a=t[f]:(a=new Image,a.onload=function(){a.onload=null,clearTimeout(r),n.push(i),r=setTimeout(function(){o(n),n=[]},10)},t[f]=a,a.src=f)}if(a){if(window.ActiveXObject){if(a.readyState!="complete")return}else if(!a.complete)return;e.save(),this.setContext(e,u),i.__needTransform&&e.transform.apply(e,this.updateTransform(i));var l=u.width||a.width,c=u.height||a.height,h=u.x,p=u.y;if(u.sWidth&&u.sHeight){var d=u.sx||0,v=u.sy||0;e.drawImage(a,d,v,u.sWidth,u.sHeight,h,p,l,c)}else if(u.sx&&u.sy){var d=u.sx,v=u.sy,m=l-d,g=c-v;e.drawImage(a,d,v,m,g,h,p,l,c)}else e.drawImage(a,h,p,l,c);u.width=l,u.height=c,i.style.width=l,i.style.height=c,u.text&&this.drawText(e,u,i.style),e.restore()}return},buildPath:function(e,t){e.rect(t.x,t.y,t.width,t.height);return},getRect:function(e){return{x:e.x,y:e.y,width:e.width,height:e.height}}};var s=e("./base");s.derive(i);var o=e("../shape");return o.define("image",new i),i}),r("zrender/shape/beziercurve",["require","./base","../shape"],function(e){function t(){this.type="beziercurve",this.brushTypeOnly="stroke",this.textPosition="end"}t.prototype={buildPath:function(e,t){e.moveTo(t.xStart,t.yStart),typeof t.cpX2!="undefined"&&typeof t.cpY2!="undefined"?e.bezierCurveTo(t.cpX1,t.cpY1,t.cpX2,t.cpY2,t.xEnd,t.yEnd):e.quadraticCurveTo(t.cpX1,t.cpY1,t.xEnd,t.yEnd)},getRect:function(e){var t=Math.min(e.xStart,e.xEnd,e.cpX1),n=Math.min(e.yStart,e.yEnd,e.cpY1),r=Math.max(e.xStart,e.xEnd,e.cpX1),i=Math.max(e.yStart,e.yEnd,e.cpY1),s=e.cpX2,o=e.cpY2;typeof s!="undefined"&&typeof o!="undefined"&&(t=Math.min(t,s),n=Math.min(n,o),r=Math.max(r,s),i=Math.max(i,o));var u=e.lineWidth||1;return{x:t-u,y:n-u,width:r-t+u,height:i-n+u}}};var n=e("./base");n.derive(t);var r=e("../shape");return r.define("beziercurve",new t),t}),r("zrender/shape/star",["require","../tool/math","./base","../shape"],function(e){function s(){this.type="heart"}var t=e("../tool/math"),n=t.sin,r=t.cos,i=Math.PI;s.prototype={buildPath:function(e,t){var s=t.n;if(!s||s<2)return;var o=t.x,u=t.y,a=t.r,f=t.r0;f==null&&(f=s>4?a*r(2*i/s)/r(i/s):a/3);var l=i/s,c=-i/2,h=o+a*r(c),p=u+a*n(c);c+=l;var d=t.pointList=[];d.push([h,p]);for(var v=0,m=s*2-1,g;v<m;v++)g=v%2===0?f:a,d.push([o+g*r(c),u+g*n(c)]),c+=l;d.push([h,p]),e.moveTo(d[0][0],d[0][1]);for(var v=0;v<d.length;v++)e.lineTo(d[v][0],d[v][1]);return},getRect:function(e){var t;return e.brushType=="stroke"||e.brushType=="fill"?t=e.lineWidth||1:t=0,{x:Math.round(e.x-e.r-t/2),y:Math.round(e.y-e.r-t/2),width:e.r*2+t,height:e.r*2+t}}};var o=e("./base");o.derive(s);var u=e("../shape");return u.define("star",new s),s}),r("zrender/shape/isogon",["require","../tool/math","./base","../shape"],function(e){function s(){this.type="isogon"}var t=e("../tool/math"),n=t.sin,r=t.cos,i=Math.PI;s.prototype={buildPath:function(e,t){var s=t.n;if(!s||s<2)return;var o=t.x,u=t.y,a=t.r,f=2*i/s,l=-i/2,c=o+a*r(l),h=u+a*n(l);l+=f;var p=t.pointList=[];p.push([c,h]);for(var d=0,v=s-1;d<v;d++)p.push([o+a*r(l),u+a*n(l)]),l+=f;p.push([c,h]),e.moveTo(p[0][0],p[0][1]);for(var d=0;d<p.length;d++)e.lineTo(p[d][0],p[d][1]);return},getRect:function(e){var t;return e.brushType=="stroke"||e.brushType=="fill"?t=e.lineWidth||1:t=0,{x:Math.round(e.x-e.r-t/2),y:Math.round(e.y-e.r-t/2),width:e.r*2+t,height:e.r*2+t}}};var o=e("./base");o.derive(s);var u=e("../shape");return u.define("isogon",new s),s}),r("zrender/animation/easing",[],function(){var e={Linear:function(e){return e},QuadraticIn:function(e){return e*e},QuadraticOut:function(e){return e*(2-e)},QuadraticInOut:function(e){return(e*=2)<1?.5*e*e:-0.5*(--e*(e-2)-1)},CubicIn:function(e){return e*e*e},CubicOut:function(e){return--e*e*e+1},CubicInOut:function(e){return(e*=2)<1?.5*e*e*e:.5*((e-=2)*e*e+2)},QuarticIn:function(e){return e*e*e*e},QuarticOut:function(e){return 1- --e*e*e*e},QuarticInOut:function(e){return(e*=2)<1?.5*e*e*e*e:-0.5*((e-=2)*e*e*e-2)},QuinticIn:function(e){return e*e*e*e*e},QuinticOut:function(e){return--e*e*e*e*e+1},QuinticInOut:function(e){return(e*=2)<1?.5*e*e*e*e*e:.5*((e-=2)*e*e*e*e+2)},SinusoidalIn:function(e){return 1-Math.cos(e*Math.PI/2)},SinusoidalOut:function(e){return Math.sin(e*Math.PI/2)},SinusoidalInOut:function(e){return.5*(1-Math.cos(Math.PI*e))},ExponentialIn:function(e){return e===0?0:Math.pow(1024,e-1)},ExponentialOut:function(e){return e===1?1:1-Math.pow(2,-10*e)},ExponentialInOut:function(e){return e===0?0:e===1?1:(e*=2)<1?.5*Math.pow(1024,e-1):.5*(-Math.pow(2,-10*(e-1))+2)},CircularIn:function(e){return 1-Math.sqrt(1-e*e)},CircularOut:function(e){return Math.sqrt(1- --e*e)},CircularInOut:function(e){return(e*=2)<1?-0.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1)},ElasticIn:function(e){var t,n=.1,r=.4;return e===0?0:e===1?1:(!n||n<1?(n=1,t=r/4):t=r*Math.asin(1/n)/(2*Math.PI),-(n*Math.pow(2,10*(e-=1))*Math.sin((e-t)*2*Math.PI/r)))},ElasticOut:function(e){var t,n=.1,r=.4;return e===0?0:e===1?1:(!n||n<1?(n=1,t=r/4):t=r*Math.asin(1/n)/(2*Math.PI),n*Math.pow(2,-10*e)*Math.sin((e-t)*2*Math.PI/r)+1)},ElasticInOut:function(e){var t,n=.1,r=.4;return e===0?0:e===1?1:(!n||n<1?(n=1,t=r/4):t=r*Math.asin(1/n)/(2*Math.PI),(e*=2)<1?-0.5*n*Math.pow(2,10*(e-=1))*Math.sin((e-t)*2*Math.PI/r):n*Math.pow(2,-10*(e-=1))*Math.sin((e-t)*2*Math.PI/r)*.5+1)},BackIn:function(e){var t=1.70158;return e*e*((t+1)*e-t)},BackOut:function(e){var t=1.70158;return--e*e*((t+1)*e+t)+1},BackInOut:function(e){var t=2.5949095;return(e*=2)<1?.5*e*e*((t+1)*e-t):.5*((e-=2)*e*((t+1)*e+t)+2)},BounceIn:function(t){return 1-e.BounceOut(1-t)},BounceOut:function(e){return e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375},BounceInOut:function(t){return t<.5?e.BounceIn(t*2)*.5:e.BounceOut(t*2-1)*.5+.5}};return e}),r("zrender/animation/clip",["require","./easing"],function(e){var t=e("./easing"),n=function(e){this._targetPool=e.target||{},this._targetPool.constructor!=Array&&(this._targetPool=[this._targetPool]),this._life=e.life||1e3,this._delay=e.delay||0,this._startTime=(new Date).getTime()+this._delay,this._endTime=this._startTime+this._life*1e3,this.loop=typeof e.loop=="undefined"?!1:e.loop,this.gap=e.gap||0,this.easing=e.easing||"Linear",this.onframe=e.onframe||null,this.ondestroy=e.ondestroy||null,this.onrestart=e.onrestart||null};return n.prototype={step:function(e){var n=(e-this._startTime)/this._life;if(n<0)return;n=Math.min(n,1);var r=typeof this.easing=="string"?t[this.easing]:this.easing,i;return typeof r=="function"?i=r(n):i=n,this.fire("frame",i),n==1?this.loop?(this.restart(),"restart"):(this._needsRemove=!0,"destroy"):null},restart:function(){this._startTime=(new Date).getTime()+this.gap},fire:function(e,t){for(var n=0,r=this._targetPool.length;n<r;n++)this["on"+e]&&this["on"+e](this._targetPool[n],t)}},n.prototype.constructor=n,n}),r("zrender/animation/animation",["require","./clip"],function(e){function s(e,t){return e[t]}function o(e,t,n){e[t]=n}function u(e,t,n){return(t-e)*n+e}function a(e,t,n,r,i){var s=e.length;if(i==1)for(var o=0;o<s;o++)r[o]=u(e[o],t[o],n);else{var a=e[0].length;for(var o=0;o<s;o++)for(var f=0;f<a;f++)r[o][f]=u(e[o][f],t[o][f],n)}}function f(e){return typeof e=="undefined"?!1:typeof e=="string"?!1:typeof e.length!="undefined"}function l(e,t,n,r,i,s,o,u,a){var f=e.length;if(a==1)for(var l=0;l<f;l++)u[l]=c(e[l],t[l],n[l],r[l],i,s,o);else{var h=e[0].length;for(var l=0;l<f;l++)for(var p=0;p<h;p++)u[l][p]=c(e[l][p],t[l][p],n[l][p],r[l][p],i,s,o)}}function c(e,t,n,r,i,s,o){var u=(n-e)*.5,a=(r-t)*.5;return(2*(t-n)+u+a)*o+(-3*(t-n)-2*u-a)*s+u*i+t}function h(e,t,n,r){this._tracks={},this._target=e,this._loop=t||!1,this._getter=n||s,this._setter=r||o,this._clipCount=0,this._delay=0,this._doneList=[],this._onframeList=[],this._clipList=[]}var t=e("./clip"),n=window.requestAnimationFrame||window.msRequestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(e){setTimeout(e,16)},r=Array.prototype.slice,i=function(e){e=e||{},this.stage=e.stage||{},this.onframe=e.onframe||function(){},this._clips=[],this._running=!1,this._time=0};return i.prototype={add:function(e){this._clips.push(e)},remove:function(e){var t=this._clips.indexOf(e);t>=0&&this._clips.splice(t,1)},update:function(){var e=(new Date).getTime(),t=this._clips,n=t.length,r=[],i=[];for(var s=0;s<n;s++){var o=t[s],u=o.step(e);u&&(r.push(u),i.push(o))}this.stage&&this.stage.update&&this._clips.length&&this.stage.update();for(var s=0;s<n;)t[s]._needsRemove?(t[s]=t[n-1],t.pop(),n--):s++;n=r.length;for(var s=0;s<n;s++)i[s].fire(r[s]);this._time=e,this.onframe()},start:function(){function t(){e._running&&(e.update(),n(t))}var e=this;this._running=!0,n(t)},stop:function(){this._running=!1},clear:function(){this._clips=[]},animate:function(e,t){t=t||{};var n=new h(e,t.loop,t.getter,t.setter);return n.animation=this,n}},i.prototype.constructor=i,h.prototype={when:function(e,t){for(var n in t)this._tracks[n]||(this._tracks[n]=[],this._tracks[n].push({time:0,value:this._getter(this._target,n)})),this._tracks[n].push({time:parseInt(e,10),value:t[n]});return this},during:function(e){return this._onframeList.push(e),this},start:function(e){var n=this,i=this._setter,s=this._getter,o=n._onframeList.length,h=e==="spline",p=function(){n._clipCount--;if(n._clipCount===0){n._tracks={};var e=n._doneList.length;for(var t=0;t<e;t++)n._doneList[t].call(n)}},d=function(d,v){var m=d.length;if(!m)return;var g=d[0].value,y=f(g),b=y&&f(g[0])?2:1;d.sort(function(e,t){return e.time-t.time});var w;if(!m)return;w=d[m-1].time;var E=[],S=[];for(var x=0;x<m;x++){E.push(d[x].time/w);if(y)if(b==2){S[x]=[];for(var T=0;T<g.length;T++)S[x].push(r.call(d[x].value[T]))}else S.push(r.call(d[x].value));else S.push(d[x].value)}var N=0,C=0,k,x,L,A,O,M,_,D=function(e,t){if(t<C){k=Math.min(N+1,m-1);for(x=k;x>=0;x--)if(E[x]<=t)break;x=Math.min(x,m-2)}else{for(x=N;x<m;x++)if(E[x]>t)break;x=Math.min(x-1,m-2)}N=x,C=t;var r=E[x+1]-E[x];if(r===0)return;L=(t-E[x])/r,L<0&&console.log(L),h?(O=S[x],A=S[x===0?x:x-1],M=S[x>m-2?m-1:x+1],_=S[x>m-3?m-1:x+2],y?l(A,O,M,_,L,L*L,L*L*L,s(e,v),b):i(e,v,c(A,O,M,_,L,L*L,L*L*L))):y?a(S[x],S[x+1],L,s(e,v),b):i(e,v,u(S[x],S[x+1],L));for(x=0;x<o;x++)n._onframeList[x](e,t)},P=new t({target:n._target,life:w,loop:n._loop,delay:n._delay,onframe:D,ondestroy:p});e&&e!=="spline"&&(P.easing=e),n._clipList.push(P),n._clipCount++,n.animation.add(P)};for(var v in this._tracks)d(this._tracks[v],v);return this},stop:function(){for(var e=0;e<this._clipList.length;e++){var t=this._clipList[e];this.animation.remove(t)}this._clipList=[]},delay:function(e){return this._delay=e,this},done:function(e){return this._doneList.push(e),this}},i}),r("zrender/config",{loadingEffect:"spin",EVENT:{RESIZE:"resize",CLICK:"click",MOUSEWHEEL:"mousewheel",MOUSEMOVE:"mousemove",MOUSEOVER:"mouseover",MOUSEOUT:"mouseout",MOUSEDOWN:"mousedown",MOUSEUP:"mouseup",GLOBALOUT:"globalout",DRAGSTART:"dragstart",DRAGEND:"dragend",DRAGENTER:"dragenter",DRAGOVER:"dragover",DRAGLEAVE:"dragleave",DROP:"drop",touchClickDelay:300}}),r("zrender/tool/loadingEffect",["require","./util","./color","./color","./color","./color","./color","./math"],function(e){function u(e,t){n[e]=t}function a(e){return{shape:"text",highlightStyle:t.merge({x:s/2,y:o/2,text:r,textAlign:"center",textBaseline:"middle",textFont:i,color:"#333",brushType:"fill"},e,{overwrite:!0,recursive:!0})}}function f(e){return{shape:"rectangle",highlightStyle:{x:0,y:0,width:s,height:o,brushType:"fill",color:e}}}function l(e,t){return e<=t[0]?e=t[0]:e>=t[1]&&(e=t[1]),e}function c(n,r,i){var u=e("./color");n=t.merge(n,{textStyle:{color:"#888"},backgroundColor:"rgba(250, 250, 250, 0.8)",effectOption:{x:0,y:o/2-30,width:s,height:5,brushType:"fill",timeInterval:100}},{overwrite:!1,recursive:!0});var c=a(n.textStyle),h=f(n.backgroundColor),p=n.effectOption,d={shape:"rectangle",highlightStyle:t.clone(p)};d.highlightStyle.color=p.color||u.getLinearGradient(p.x,p.y,p.x+p.width,p.y+p.height,[[0,"#ff6400"],[.5,"#ffe100"],[1,"#b1ff00"]]);if(typeof n.progress!="undefined"){r(h),d.highlightStyle.width=l(n.progress,[0,1])*n.effectOption.width,r(d),r(c),i();return}return d.highlightStyle.width=0,setInterval(function(){r(h),d.highlightStyle.width<n.effectOption.width?d.highlightStyle.width+=8:d.highlightStyle.width=0,r(d),r(c),i()},p.timeInterval)}function h(e,n,r){e.effectOption=t.merge(e.effectOption||{},{x:s/2-80,y:o/2,r:18,colorIn:"#fff",colorOut:"#555",colorWhirl:"#6cf",timeInterval:50});var i=e.effectOption;e=t.merge(e,{textStyle:{color:"#888",x:i.x+i.r+10,y:i.y,textAlign:"start"},backgroundColor:"rgba(250, 250, 250, 0.8)"},{overwrite:!1,recursive:!0});var u=a(e.textStyle),l=f(e.backgroundColor),c={shape:"droplet",highlightStyle:{a:Math.round(i.r/2),b:Math.round(i.r-i.r/6),brushType:"fill",color:i.colorWhirl}},h={shape:"circle",highlightStyle:{r:Math.round(i.r/6),brushType:"fill",color:i.colorIn}},p={shape:"ring",highlightStyle:{r0:Math.round(i.r-i.r/3),r:i.r,brushType:"fill",color:i.colorOut}},d=[0,i.x,i.y];return c.highlightStyle.x=h.highlightStyle.x=p.highlightStyle.x=d[1],c.highlightStyle.y=h.highlightStyle.y=p.highlightStyle.y=d[2],setInterval(function(){n(l),n(p),d[0]-=.3,c.rotation=d,n(c),n(h),n(u),r()},i.timeInterval)}function p(n,r,i){var u=e("./color");n=t.merge(n,{textStyle:{color:"#fff"},backgroundColor:"rgba(0, 0, 0, 0.8)",effectOption:{n:30,lineWidth:1,color:"random",timeInterval:100}},{overwrite:!1,recursive:!0});var l=a(n.textStyle),c=f(n.backgroundColor),h=n.effectOption,p=h.n,d=h.lineWidth,v=[],m,g,y,b;for(var w=0;w<p;w++)y=-Math.ceil(Math.random()*1e3),g=Math.ceil(Math.random()*400),m=Math.ceil(Math.random()*o),h.color=="random"?b=u.random():b=h.color,v[w]={shape:"line",highlightStyle:{xStart:y,yStart:m,xEnd:y+g,yEnd:m,strokeColor:b,lineWidth:d},animationX:Math.ceil(Math.random()*100),len:g};return setInterval(function(){r(c);var e;for(var t=0;t<p;t++)e=v[t].highlightStyle,e.xStart>=s&&(v[t].len=Math.ceil(Math.random()*400),v[t].highlightStyle.xStart=-400,v[t].highlightStyle.xEnd=-400+v[t].len,v[t].highlightStyle.yStart=Math.ceil(Math.random()*o),v[t].highlightStyle.yEnd=v[t].highlightStyle.yStart),v[t].highlightStyle.xStart+=v[t].animationX,v[t].highlightStyle.xEnd+=v[t].animationX,r(v[t]);r(l),i()},h.timeInterval)}function d(n,r,i){var u=e("./color");n=t.merge(n,{textStyle:{color:"#888"},backgroundColor:"rgba(250, 250, 250, 0.8)",effectOption:{n:50,lineWidth:2,brushType:"stroke",color:"random",timeInterval:100}},{overwrite:!1,recursive:!0});var l=a(n.textStyle),c=f(n.backgroundColor),h=n.effectOption,p=h.n,d=h.brushType,v=h.lineWidth,m=[],g;for(var y=0;y<p;y++)h.color=="random"?g=u.alpha(u.random(),.3):g=h.color,m[y]={shape:"circle",highlightStyle:{x:Math.ceil(Math.random()*s),y:Math.ceil(Math.random()*o),r:Math.ceil(Math.random()*40),brushType:d,color:g,strokeColor:g,lineWidth:v},animationY:Math.ceil(Math.random()*20)};return setInterval(function(){r(c);var e;for(var t=0;t<p;t++)e=m[t].highlightStyle,e.y-m[t].animationY+e.r<=0&&(m[t].highlightStyle.y=o+e.r,m[t].highlightStyle.x=Math.ceil(Math.random()*s)),m[t].highlightStyle.y-=m[t].animationY,r(m[t]);r(l),i()},h.timeInterval)}function v(n,r,i){var u=e("./color");n.effectOption=t.merge(n.effectOption||{},{x:s/2-80,y:o/2,r0:9,r:15,n:18,color:"#fff",timeInterval:100});var l=n.effectOption;n=t.merge(n,{textStyle:{color:"#fff",x:l.x+l.r+10,y:l.y,textAlign:"start"},backgroundColor:"rgba(0, 0, 0, 0.8)"},{overwrite:!1,recursive:!0});var c=a(n.textStyle),h=f(n.backgroundColor),p=l.n,d=l.x,v=l.y,m=l.r0,g=l.r,y=l.color,b=[],w=Math.round(180/p);for(var E=0;E<p;E++)b[E]={shape:"sector",highlightStyle:{x:d,y:v,r0:m,r:g,startAngle:w*E*2,endAngle:w*E*2+w,color:u.alpha(y,(E+1)/p),brushType:"fill"}};var S=[0,d,v];return setInterval(function(){r(h),S[0]-=.3;for(var e=0;e<p;e++)b[e].rotation=S,r(b[e]);r(c),i()},l.timeInterval)}function m(n,r,i){var u=e("./color"),c=e("./math");n=t.merge(n,{textStyle:{color:"#07a"},backgroundColor:"rgba(250, 250, 250, 0.8)",effectOption:{x:s/2,y:o/2,r0:60,r:100,color:"#bbdcff",brushType:"fill",textPosition:"inside",textFont:"normal 30px verdana",textColor:"rgba(30, 144, 255, 0.6)",timeInterval:100}},{overwrite:!1,recursive:!0});var h=n.effectOption,p=n.textStyle;p.x=typeof p.x!="undefined"?p.x:h.x,p.y=typeof p.y!="undefined"?p.y:h.y+(h.r0+h.r)/2-5;var d=a(n.textStyle),v=f(n.backgroundColor),m=h.x,g=h.y,y=h.r0+6,b=h.r-6,w=h.color,E=u.lift(w,.1),S={shape:"ring",highlightStyle:t.clone(h)},x=[],T=u.getGradientColors(["#ff6400","#ffe100","#97ff00"],25),N=15,C=240;for(var k=0;k<16;k++)x.push({shape:"sector",highlightStyle:{x:m,y:g,r0:y,r:b,startAngle:C-N,endAngle:C,brushType:"fill",color:E},_color:u.getLinearGradient(m+y*c.cos(C,!0),g-y*c.sin(C,!0),m+y*c.cos(C-N,!0),g-y*c.sin(C-N,!0),[[0,T[k*2]],[1,T[k*2+1]]])}),C-=N;C=360;for(var k=0;k<4;k++)x.push({shape:"sector",highlightStyle:{x:m,y:g,r0:y,r:b,startAngle:C-N,endAngle:C,brushType:"fill",color:E},_color:u.getLinearGradient(m+y*c.cos(C,!0),g-y*c.sin(C,!0),m+y*c.cos(C-N,!0),g-y*c.sin(C-N,!0),[[0,T[k*2+32]],[1,T[k*2+33]]])}),C-=N;var L=0;if(typeof n.progress!="undefined"){r(v),L=l(n.progress,[0,1]).toFixed(2)*100/5,S.highlightStyle.text=L*5+"%",r(S);for(var k=0;k<20;k++)x[k].highlightStyle.color=k<L?x[k]._color:E,r(x[k]);r(d),i();return}return setInterval(function(){r(v),L+=L>=20?-20:1,r(S);for(var e=0;e<20;e++)x[e].highlightStyle.color=e<L?x[e]._color:E,r(x[e]);r(d),i()},h.timeInterval)}function g(e,t,r){var i=n.ring;return typeof e.effect=="function"?i=e.effect:typeof n[e.effect]=="function"&&(i=n[e.effect]),s=e.canvasSize.width,o=e.canvasSize.height,i(e,t,r)}function y(e){clearInterval(e)}var t=e("./util"),n,r="Loading...",i="normal 16px Arial",s,o;return n={getBackgroundShape:f,getTextShape:a,define:u,bar:c,whirling:h,dynamicLine:p,bubble:d,spin:v,ring:m,start:g,stop:y},n}),r("zrender/tool/event",[],function(){function e(e){return typeof e.zrenderX!="undefined"&&e.zrenderX||typeof e.offsetX!="undefined"&&e.offsetX||typeof e.layerX!="undefined"&&e.layerX||typeof e.clientX!="undefined"&&e.clientX}function t(e){return typeof e.zrenderY!="undefined"&&e.zrenderY||typeof e.offsetY!="undefined"&&e.offsetY||typeof e.layerY!="undefined"&&e.layerY||typeof e.clientY!="undefined"&&e.clientY}function n(e){return typeof e.wheelDelta!="undefined"&&e.wheelDelta||typeof e.detail!="undefined"&&-e.detail}function r(e){e.preventDefault?(e.preventDefault(),e.stopPropagation()):(e.returnValue=!1,e.cancelBubble=!0)}function i(){function n(n,r){return!r||!n?e:(t[n]||(t[n]=[]),t[n].push({h:r,one:!0}),e)}function r(n,r){return!r||!n?e:(t[n]||(t[n]=[]),t[n].push({h:r,one:!1}),e)}function i(n,r){if(!n)return t={},e;if(r){if(t[n]){var i=[];for(var s=0,o=t[n].length;s<o;s++)t[n][s]["h"]!=r&&i.push(t[n][s]);t[n]=i}t[n]&&t[n].length===0&&delete t[n]}else delete t[n];return e}function s(n,r,i){if(t[n]){var s=[],o=i||{};o.type=n,o.event=r;for(var u=0,a=t[n].length;u<a;u++)t[n][u].h(o),t[n][u].one||s.push(t[n][u]);s.length!=t[n].length&&(t[n]=s)}return e}var e=this,t={};e.one=n,e.bind=r,e.unbind=i,e.dispatch=s}return{getX:e,getY:t,getDelta:n,stop:r,Dispatcher:i}}),r("zrender/zrender",["require","./lib/excanvas","./tool/util","./tool/env","./shape","./shape/circle","./shape/ellipse","./shape/line","./shape/polygon","./shape/brokenLine","./shape/rectangle","./shape/ring","./shape/sector","./shape/text","./shape/heart","./shape/droplet","./shape/path","./shape/image","./shape/beziercurve","./shape/star","./shape/isogon","./animation/animation","./config","./tool/loadingEffect","./tool/loadingEffect","./config","./tool/env","./tool/event"],function(e){function o(n,i,s){var o=this;o.env=e("./tool/env");var l=e("./shape");e("./shape/circle"),e("./shape/ellipse"),e("./shape/line"),e("./shape/polygon"),e("./shape/brokenLine"),e("./shape/rectangle"),e("./shape/ring"),e("./shape/sector"),e("./shape/text"),e("./shape/heart"),e("./shape/droplet"),e("./shape/path"),e("./shape/image"),e("./shape/beziercurve"),e("./shape/star"),e("./shape/isogon");var c;if(typeof s.shape=="undefined")c=l;else{c={};for(var h in s.shape)c[h]=s.shape[h];c.get=function(e){return c[e]||l.get(e)}}var p=new u(c),d=new a(i,p,c),v=new f(i,p,d,c),m=e("./animation/animation"),g=[],y=new m({stage:{update:function(){var e=g;for(var t=0,n=e.length;t<n;t++)p.mod(e[t].id);e.length>0&&d.refresh()}}});y.start(),o.getId=function(){return n},o.addShape=function(e){return p.add(e),o},o.delShape=function(e){return p.del(e),o},o.modShape=function(e,t,n){return p.mod(e,t,n),o},o.modLayer=function(e,t){d.modLayer(e,t)},o.addHoverShape=function(e){return p.addHover(e),o},o.render=function(e){return d.render(e),o},o.refresh=function(e){return d.refresh(e),o},o.refreshHover=function(e){return d.refreshHover(e),o},o.update=function(e,t){return d.update(e,t),o},o.resize=function(){return d.resize(),o},o.animate=function(e,n,i){var s=p.get(e);if(s){var o;if(n){var u=n.split("."),a=s;for(var f=0,l=u.length;f<l;f++){if(!a)continue;a=a[u[f]]}a&&(o=a)}else o=s;if(!o){r.log('Property "'+n+'" is not existed in shape '+e);return}return typeof s.__aniCount=="undefined"&&(s.__aniCount=0),s.__aniCount===0&&g.push(s),s.__aniCount++,y.animate(o,{loop:i}).done(function(){s.__aniCount--;if(s.__aniCount===0){var e=t.indexOf(g,s);g.splice(e,1)}})}r.log('Shape "'+e+'" not existed')},o.clearAnimation=function(){y.clear()},o.showLoading=function(e){return d.showLoading(e),o},o.hideLoading=function(){return d.hideLoading(),o},o.newShapeId=function(e){return p.newShapeId(e)},o.getWidth=function(){return d.getWidth()},o.getHeight=function(){return d.getHeight()},o.toDataURL=function(e,t,n){return d.toDataURL(e,t,n)},o.shapeToImage=function(e,t,n){var r=o.newShapeId("image");return d.shapeToImage(r,e,t,n)},o.on=function(e,t){return v.on(e,t),o},o.un=function(e,t){return v.un(e,t),o},o.trigger=function(e,t){return v.trigger(e,t),o},o.clear=function(){return p.del(),d.clear(),o},o.dispose=function(){y.stop(),y=null,g=null,o.clear(),o=null,p.dispose(),p=null,d.dispose(),d=null,v.dispose(),v=null,r.delInstance(n);return}}function u(e){function l(e){e.hoverable||e.onclick||e.draggable||e.onmousemove||e.onmouseover||e.onmouseout||e.onmousedown||e.onmouseup||e.ondragenter||e.ondragover||e.ondragleave||e.ondrop?e.__silent=!1:e.__silent=!0,Math.abs(e.rotation[0])>1e-4||Math.abs(e.position[0])>1e-4||Math.abs(e.position[1])>1e-4||Math.abs(e.scale[0]-1)>1e-4||Math.abs(e.scale[1]-1)>1e-4?e.__needTransform=!0:e.__needTransform=!1,e.style=e.style||{},e.style.__rect=null}function c(e){return(e||"")+ ++i}function h(e){var r={shape:"circle",id:e.id||n.newShapeId(),zlevel:0,draggable:!1,clickable:!1,hoverable:!0,position:[0,0],rotation:[0,0,0],scale:[1,1,0,0]};return t.merge(r,e,{overwrite:!0,recursive:!0}),l(r),s[r.id]=r,o[r.zlevel]=o[r.zlevel]||[],o[r.zlevel].push(r),a=Math.max(a,r.zlevel),f[r.zlevel]=!0,n}function p(e){return s[e]}function d(e){if(typeof e!="undefined"){var t={};if(e instanceof Array){if(e.lenth<1)return;for(var r=0,i=e.length;r<i;r++)t[e[r].id]=!0}else t[e]=!0;var l,c,h,p={};for(var d in t)if(s[d]){h=s[d].zlevel,f[h]=!0;if(!p[h]){c=o[h],l=[];for(var r=0,i=c.length;r<i;r++)t[c[r].id]||l.push(c[r]);o[h]=l,p[h]=!0}delete s[d]}}else s={},o=[],u=[],a=0,f={all:!0};return n}function v(e,r,i){var o=s[e];return o&&(f[o.zlevel]=!0,r&&(i?t.mergeFast(o,r,!0,!0):t.merge(o,r,{overwrite:!0,recursive:!0})),l(o),f[o.zlevel]=!0,a=Math.max(a,o.zlevel)),n}function m(t,i,o){var u=s[t];if(!u)return;u.__needTransform=!0;if(!u.ondrift||u.ondrift&&!u.ondrift(u,i,o))if(r.catchBrushException)try{e.get(u.shape).drift(u,i,o)}catch(a){r.log(a,"drift error of "+u.shape,u)}else e.get(u.shape).drift(u,i,o);return f[u.zlevel]=!0,n}function g(e){return e.rotation&&Math.abs(e.rotation[0])>1e-4||e.position&&(Math.abs(e.position[0])>1e-4||Math.abs(e.position[1])>1e-4)||e.scale&&(Math.abs(e.scale[0]-1)>1e-4||Math.abs(e.scale[1]-1)>1e-4)?e.__needTransform=!0:e.__needTransform=!1,u.push(e),n}function y(){return u=[],n}function b(){return u.length>0}function w(e,t){t||(t={hover:!1,normal:"down"});if(t.hover)for(var r=0,i=u.length;r<i;r++)if(e(u[r]))return n;var a,f;if(typeof t.normal!="undefined")switch(t.normal){case"down":for(var i=o.length-1;i>=0;i--){a=o[i];if(a){f=a.length;while(f--)if(e(a[f]))return n}}break;case"up":for(var r=0,i=o.length;r<i;r++){a=o[r];if(a){f=a.length;for(var l=0;l<f;l++)if(e(a[l]))return n}}break;default:for(var r in s)if(e(s[r]))return n}return n}function E(){return a}function S(){return f}function x(){return f={},n}function T(e){return f[e]=!0,n}function N(){s=null,o=null,u=null,n=null;return}var n=this,i=0,s={},o=[],u=[],a=0,f={};n.newShapeId=c,n.add=h,n.get=p,n.del=d,n.addHover=g,n.delHover=y,n.hasHoverShape=b,n.mod=v,n.drift=m,n.iterShape=w,n.getMaxZlevel=E,n.getChangedZlevel=S,n.clearChangedZlevel=x,n.setChangedZlevle=T,n.dispose=N}function a(n,i,s){function b(){var e=n.currentStyle||document.defaultView.getComputedStyle(n);return(n.clientWidth||e.style.width.replace(/\D/g,""))-e.paddingLeft.replace(/\D/g,"")-e.paddingRight.replace(/\D/g,"")}function w(){var e=n.currentStyle||document.defaultView.getComputedStyle(n);return(n.clientHeight||e.style.height.replace(/\D/g,""))-e.paddingTop.replace(/\D/g,"")-e.paddingBottom.replace(/\D/g,"")}function E(){v.innerHTML="",n.innerHTML="",m=b(),g=w(),v.style.position="relative",v.style.overflow="hidden",v.style.width=m+"px",v.style.height=g+"px",n.appendChild(v),a={},f={},l={},c={},p=i.getMaxZlevel(),a.bg=x("bg","div"),v.appendChild(a.bg);for(var e=0;e<=p;e++)a[e]=x(e,"canvas"),v.appendChild(a[e]),G_vmlCanvasManager&&G_vmlCanvasManager.initElement(a[e]),f[e]=a[e].getContext("2d"),y!=1&&f[e].scale(y,y);a.hover=x("hover","canvas"),a.hover.id="_zrender_hover_",v.appendChild(a.hover),G_vmlCanvasManager&&G_vmlCanvasManager.initElement(a.hover),f.hover=a.hover.getContext("2d"),y!=1&&f.hover.scale(y,y)}function S(){var e=i.getMaxZlevel();if(p<e){for(var t=p+1;t<=e;t++)a[t]=x(t,"canvas"),v.insertBefore(a[t],a.hover),G_vmlCanvasManager&&G_vmlCanvasManager.initElement(a[t]),f[t]=a[t].getContext("2d"),y!=1&&f[t].scale(y,y);p=e}}function x(e,t){var n=document.createElement(t);return n.style.position="absolute",n.style.left=0,n.style.top=0,n.style.width=m+"px",n.style.height=g+"px",n.setAttribute("width",m*y),n.setAttribute("height",g*y),n.setAttribute("data-id",e),n}function T(e){return function(t){if((e.all||e[t.zlevel])&&!t.invisible){var n=f[t.zlevel];if(n){if(!t.onbrush||t.onbrush&&!t.onbrush(n,t,!1))if(r.catchBrushException)try{s.get(t.shape).brush(n,t,!1,L)}catch(i){r.log(i,"brush error of "+t.shape,t)}else s.get(t.shape).brush(n,t,!1,L)}else r.log("can not find the specific zlevel canvas!")}}}function N(e){var t=f.hover;if(!e.onbrush||e.onbrush&&!e.onbrush(t,e,!0))if(r.catchBrushException)try{s.get(e.shape).brush(t,e,!0,L)}catch(n){r.log(n,"hoverBrush error of "+e.shape,e)}else s.get(e.shape).brush(t,e,!0,L)}function C(e){return B()&&H(),S(),A(),i.iterShape(T({all:!0}),{normal:"up"}),i.clearChangedZlevel(),typeof e=="function"&&e(),u}function k(e){S();var t=i.getChangedZlevel();if(t.all)A();else for(var n in t)f[n]&&O(n);return i.iterShape(T(t),{normal:"up"}),i.clearChangedZlevel(),typeof e=="function"&&e(),u}function L(e,t){var n;for(var r=0,s=e.length;r<s;r++)n=e[r],i.mod(n.id,n);return k(t),u}function A(){for(var e in f){if(e=="hover")continue;O(e)}return u}function O(e){if(h[e]){var t=typeof h[e].clearColor!="undefined",n=h[e].motionBlur,r=h[e].lastFrameAlpha;typeof r=="undefined"&&(r=.7);if(n){if(typeof l[e]=="undefined"){var i=x("back-"+e,"canvas");i.width=a[e].width,i.height=a[e].height,i.style.width=a[e].style.width,i.style.height=a[e].style.height,l[e]=i,c[e]=i.getContext("2d"),y!=1&&c[e].scale(y,y)}c[e].globalCompositeOperation="copy",c[e].drawImage(a[e],0,0,a[e].width/y,a[e].height/y)}t?(f[e].save(),f[e].fillStyle=h[e].clearColor,f[e].fillRect(0,0,m*y,g*y),f[e].restore()):f[e].clearRect(0,0,m*y,g*y);if(n){var i=l[e],s=f[e];s.save(),s.globalAlpha=r,s.drawImage(i,0,0,i.width/y,i.height/y),s.restore()}}else f[e].clearRect(0,0,m*y,g*y)}function M(e,n){n&&(typeof h[e]=="undefined"&&(h[e]={}),t.merge(h[e],n,{recursive:!0,overwrite:!0}))}function _(){return D(),i.iterShape(N,{hover:!0}),i.delHover(),u}function D(){return f&&f.hover&&f.hover.clearRect(0,0,m*y,g*y),u}function P(t){var n=e("./tool/loadingEffect");return n.stop(d),t=t||{},t.effect=t.effect||o.loadingEffect,t.canvasSize={width:m,height:g},d=n.start(t,i.addHover,_),u.loading=!0,u}function H(){var t=e("./tool/loadingEffect");return t.stop(d),D(),u.loading=!1,u}function B(){return u.loading}function j(){return m}function F(){return g}function I(){var e,t,n;v.style.display="none",e=b(),t=w(),v.style.display="";if(m!=e||t!=g){m=e,g=t,v.style.width=m+"px",v.style.height=g+"px";for(var r in a)n=a[r],n.setAttribute("width",m),n.setAttribute("height",g),n.style.width=m+"px",n.style.height=g+"px";i.setChangedZlevle("all"),k()}return u}function q(){B()&&H(),n.innerHTML="",n=null,i=null,s=null,v=null,a=null,f=null,c=null,l=null,u=null;return}function R(){return a.hover}function U(e,t,n){if(G_vmlCanvasManager)return null;var o=x("image","canvas");a.bg.appendChild(o);var u=o.getContext("2d");y!=1&&u.scale(y,y),u.fillStyle=t||"#fff",u.rect(0,0,m*y,g*y),u.fill(),i.iterShape(function(e){if(!e.invisible)if(!e.onbrush||e.onbrush&&!e.onbrush(u,e,!1))if(r.catchBrushException)try{s.get(e.shape).brush(u,e,!1,L)}catch(t){r.log(t,"brush error of "+e.shape,e)}else s.get(e.shape).brush(u,e,!1,L)},{normal:"up"});var f=o.toDataURL(e,n);return u=null,a.bg.removeChild(o),f}var o=e("./config"),u=this,a={},f={},l={},c={},h={},p=0,d,v=document.createElement("div");v.onselectstart=function(){return!1};var m,g,y=window.devicePixelRatio||1,z=function(){if(G_vmlCanvasManager)return function(){};var e=document.createElement("canvas"),t=e.getContext("2d"),n=window.devicePixelRatio||1;return function(r,i,o,u){e.style.width=o+"px",e.style.height=u+"px",e.setAttribute("width",o*n),e.setAttribute("height",u*n),t.clearRect(0,0,o*n,u*n);var a=s.get(i.shape),f={position:i.position,rotation:i.rotation,scale:i.scale};i.position=[0,0,0],i.rotation=0,i.scale=[1,1],a&&a.brush(t,i,!1);var l={shape:"image",id:r,style:{x:0,y:0,image:e.toDataURL()}};return typeof f.position!="undefined"&&(l.position=i.position=f.position),typeof f.rotation!="undefined"&&(l.rotation=i.rotation=f.rotation),typeof f.scale!="undefined"&&(l.scale=i.scale=f.scale),l}}();u.render=C,u.refresh=k,u.update=L,u.clear=A,u.modLayer=M,u.refreshHover=_,u.clearHover=D,u.showLoading=P,u.hideLoading=H,u.isLoading=B,u.getWidth=j,u.getHeight=F,u.resize=I,u.dispose=q,u.getDomHover=R,u.toDataURL=U,u.shapeToImage=z,E()}function f(t,n,r,i){function C(){window.addEventListener?(window.addEventListener("resize",k),!o.os.tablet&&!o.os.phone?(t.addEventListener("click",L),t.addEventListener("mousewheel",A),t.addEventListener("mousemove",O),t.addEventListener("mousedown",P),t.addEventListener("mouseup",H)):(t.addEventListener("touchstart",B),t.addEventListener("touchmove",j),t.addEventListener("touchend",F)),t.addEventListener("DOMMouseScroll",A),t.addEventListener("mouseout",M)):(window.attachEvent("onresize",k),t.attachEvent("onclick",L),t.attachEvent("onmousewheel",A),t.attachEvent("onmousemove",O),t.attachEvent("onmouseout",M),t.attachEvent("onmousedown",P),t.attachEvent("onmouseup",H))}function k(e){c=e||window.event,p=null,m=!1,a.dispatch(s.EVENT.RESIZE,c)}function L(e){c=J(e),p?p&&p.clickable&&X(p,s.EVENT.CLICK):X(p,s.EVENT.CLICK),O(c)}function A(e){c=J(e),X(p,s.EVENT.MOUSEWHEEL),O(c)}function O(e){if(r.isLoading())return;c=J(e),E=x,S=T,x=f(c),T=l(c),I(),h=!1,n.iterShape($,{normal:"down"});if(!h){if(!v||p&&p.id!=v.id)D(),U();p=null,n.delHover(),r.clearHover()}v&&(n.drift(v.id,x-E,T-S),n.addHover(v)),v||h&&p.draggable?t.style.cursor="move":h&&p.clickable?t.style.cursor="pointer":t.style.cursor="default",X(p,s.EVENT.MOUSEMOVE),(v||h||n.hasHoverShape())&&r.refreshHover()}function M(e){c=J(e);var n=c.toElement||c.relatedTarget;if(n!=t)while(n&&n.nodeType!=9){if(n==t){O(e);return}n=n.parentNode}c.zrenderX=E,c.zrenderY=S,t.style.cursor="default",m=!1,D(),z(),W(),r.isLoading()||r.refreshHover(),a.dispatch(s.EVENT.GLOBALOUT,c)}function _(){X(p,s.EVENT.MOUSEOVER)}function D(){X(p,s.EVENT.MOUSEOUT)}function P(e){if(w==2){w=e.button,d=null;return}y=new Date,c=J(e),m=!0,d=p,X(p,s.EVENT.MOUSEDOWN),w=e.button}function H(e){c=J(e),t.style.cursor="default",m=!1,d=null,X(p,s.EVENT.MOUSEUP),z(),W()}function B(e){c=J(e,!0),b=new Date,V(),P(c)}function j(e){c=J(e,!0),O(c),g&&u.stop(e)}function F(e){c=J(e,!0),H(c),new Date-b<s.EVENT.touchClickDelay&&(V(),L(c)),r.clearHover()}function I(){if(m&&p&&p.draggable&&!v&&d==p){if(p.dragEnableTime&&new Date-y<p.dragEnableTime)return;v=p,g=!0,v.invisible=!0,n.mod(v.id,v),X(v,s.EVENT.DRAGSTART),r.refresh()}}function q(){v&&X(p,s.EVENT.DRAGENTER,v)}function R(){v&&X(p,s.EVENT.DRAGOVER,v)}function U(){v&&X(p,s.EVENT.DRAGLEAVE,v)}function z(){v&&(v.invisible=!1,n.mod(v.id,v),r.refresh(),X(p,s.EVENT.DROP,v))}function W(){v&&(X(v,s.EVENT.DRAGEND),p=null),g=!1,v=null}function X(e,t,n){var r="on"+t,i={type:t,event:c,target:e};n&&(i.dragged=n),e?(!e[r]||!e[r](i))&&a.dispatch(t,c,i):n||a.dispatch(t,c)}function V(){p=null,x=c.zrenderX,T=c.zrenderY,n.iterShape($,{normal:"down"}),p||(x+=10,n.iterShape($,{normal:"down"})),p||(x-=20,n.iterShape($,{normal:"down"})),p||(x+=10,T+=10,n.iterShape($,{normal:"down"})),p||(T-=20,n.iterShape($,{normal:"down"})),p&&(c.zrenderX=x,c.zrenderY=T)}function $(e){if(v&&v.id==e.id)return!1;if(e.__silent)return!1;var t=i.get(e.shape);return t.isCover(e,x,T)?(e.hoverable&&n.addHover(e),p!=e&&(D(),U(),p=e,q()),_(),R(),h=!0,!0):!1}function J(e,n){if(!n){c=e||window.event;var r=c.toElement||c.relatedTarget||c.srcElement||c.target;r&&r!=N&&(c.zrenderX=(typeof c.offsetX!="undefined"?c.offsetX:c.layerX)+r.offsetLeft,c.zrenderY=(typeof c.offsetY!="undefined"?c.offsetY:c.layerY)+r.offsetTop)}else{c=e;var i=c.type!="touchend"?c.targetTouches[0]:c.changedTouches[0];i&&(c.zrenderX=i.clientX-t.offsetLeft+document.body.scrollLeft,c.zrenderY=i.clientY-t.offsetTop+document.body.scrollTop)}return c}function K(e,t){return a.bind(e,t),a}function Q(e,t){return a.unbind(e,t),a}function G(e,t){switch(e){case s.EVENT.RESIZE:k(t);break;case s.EVENT.CLICK:L(t);break;case s.EVENT.MOUSEWHEEL:A(t);break;case s.EVENT.MOUSEMOVE:O(t);break;case s.EVENT.MOUSEDOWN:P(t);break;case s.EVENT.MOUSEUP:_mouseUpHandleru(t);break;case s.EVENT.MOUSEOUT:M(t)}}function Y(){window.removeEventListener?(window.removeEventListener("resize",k),!o.os.tablet&&!o.os.phone?(t.removeEventListener("click",L),t.removeEventListener("mousewheel",A),t.removeEventListener("mousemove",O),t.removeEventListener("mousedown",P),t.removeEventListener("mouseup",H)):(t.removeEventListener("touchstart",B),t.removeEventListener("touchmove",j),t.removeEventListener("touchend",F)),t.removeEventListener("DOMMouseScroll",A),t.removeEventListener("mouseout",M)):(window.detachEvent("onresize",k),t.detachEvent("onclick",L),t.detachEvent("onmousewheel",A),t.detachEvent("onmousemove",O),t.detachEvent("onmouseout",M),t.detachEvent("onmousedown",P),t.detachEvent("onmouseup",H)),t=null,N=null,n=null,r=null,i=null,Q(),a=null;return}var s=e("./config"),o=e("./tool/env"),u=e("./tool/event");u.Dispatcher.call(this);var a=this,f=u.getX,l=u.getY,c,h=!1,p=null,d=null,v=null,m=!1,g=!1,y,b,w,E=0,S=0,x=0,T=0,N=r.getDomHover();a.on=K,a.un=Q,a.trigger=G,a.dispose=Y,C()}e("./lib/excanvas");var t=e("./tool/util"),n={},r=n,i=0,s={};return n.version="1.1.1",n.init=function(e,t){var n=new o(++i+"",e,t||{});return s[i]=n,n},n.dispose=function(e){if(e)e.dispose();else{for(var t in s)s[t].dispose();s={}}return n},n.getInstance=function(e){return s[e]},n.delInstance=function(e){return s[e]&&(s[e]=null,delete s[e]),n},n.catchBrushException=!1,n.debugMode=0,n.log=function(){if(n.debugMode===0)return;if(n.debugMode==1)for(var e in arguments)throw new Error(arguments[e]);else if(n.debugMode>1)for(var e in arguments)console.log(arguments[e]);return n},n}),r("zrender",["zrender/zrender"],function(e){return e}),r("echarts/util/shape/icon",["require","zrender/tool/matrix","zrender/shape","zrender/shape","zrender/shape","zrender/shape","zrender/shape/base","zrender/shape"],function(e){function n(){this.type="icon",this._iconLibrary={mark:r,markUndo:i,markClear:s,dataZoom:o,dataZoomReset:u,restore:a,lineChart:f,barChart:l,stackChart:c,tiledChart:h,dataView:p,saveAsImage:d,cross:v,circle:m,rectangle:g,triangle:y,diamond:b,arrow:w,star:E,heart:S,droplet:x,pin:T,image:N}}function r(e,t){var n=t.width/16,r=t.height/16;e.moveTo(t.x,t.y+t.height),e.lineTo(t.x+5*n,t.y+14*r),e.lineTo(t.x+t.width,t.y+3*r),e.lineTo(t.x+13*n,t.y),e.lineTo(t.x+2*n,t.y+11*r),e.lineTo(t.x,t.y+t.height),e.moveTo(t.x+6*n,t.y+10*r),e.lineTo(t.x+14*n,t.y+2*r),e.moveTo(t.x+10*n,t.y+13*r),e.lineTo(t.x+t.width,t.y+13*r),e.moveTo(t.x+13*n,t.y+10*r),e.lineTo(t.x+13*n,t.y+t.height)}function i(e,t){var n=t.width/16,r=t.height/16;e.moveTo(t.x,t.y+t.height),e.lineTo(t.x+5*n,t.y+14*r),e.lineTo(t.x+t.width,t.y+3*r),e.lineTo(t.x+13*n,t.y),e.lineTo(t.x+2*n,t.y+11*r),e.lineTo(t.x,t.y+t.height),e.moveTo(t.x+6*n,t.y+10*r),e.lineTo(t.x+14*n,t.y+2*r),e.moveTo(t.x+10*n,t.y+13*r),e.lineTo(t.x+t.width,t.y+13*r)}function s(e,t){var n=t.width/16,r=t.height/16;e.moveTo(t.x+4*n,t.y+15*r),e.lineTo(t.x+9*n,t.y+13*r),e.lineTo(t.x+14*n,t.y+8*r),e.lineTo(t.x+11*n,t.y+5*r),e.lineTo(t.x+6*n,t.y+10*r),e.lineTo(t.x+4*n,t.y+15*r),e.moveTo(t.x+5*n,t.y),e.lineTo(t.x+11*n,t.y),e.moveTo(t.x+5*n,t.y+r),e.lineTo(t.x+11*n,t.y+r),e.moveTo(t.x,t.y+2*r),e.lineTo(t.x+t.width,t.y+2*r),e.moveTo(t.x,t.y+5*r),e.lineTo(t.x+3*n,t.y+t.height),e.lineTo(t.x+13*n,t.y+t.height),e.lineTo(t.x+t.width,t.y+5*r)}function o(e,t){var n=t.width/16,r=t.height/16;e.moveTo(t.x,t.y+3*r),e.lineTo(t.x+6*n,t.y+3*r),e.moveTo(t.x+3*n,t.y),e.lineTo(t.x+3*n,t.y+6*r),e.moveTo(t.x+3*n,t.y+8*r),e.lineTo(t.x+3*n,t.y+t.height),e.lineTo(t.x+t.width,t.y+t.height),e.lineTo(t.x+t.width,t.y+3*r),e.lineTo(t.x+8*n,t.y+3*r),e.moveTo(t.x,t.y),e.lineTo(t.x,t.y)}function u(e,t){var n=t.width/16,r=t.height/16;e.moveTo(t.x+6*n,t.y),e.lineTo(t.x+2*n,t.y+3*r),e.lineTo(t.x+6*n,t.y+6*r),e.moveTo(t.x+2*n,t.y+3*r),e.lineTo(t.x+14*n,t.y+3*r),e.lineTo(t.x+14*n,t.y+11*r),e.moveTo(t.x+2*n,t.y+5*r),e.lineTo(t.x+2*n,t.y+13*r),e.lineTo(t.x+14*n,t.y+13*r),e.moveTo(t.x+10*n,t.y+10*r),e.lineTo(t.x+14*n,t.y+13*r),e.lineTo(t.x+10*n,t.y+t.height),e.moveTo(t.x,t.y),e.lineTo(t.x,t.y)}function a(e,t){var n=t.width/16,r=t.height/16,i=t.width/2;e.lineWidth=1.5,e.arc(t.x+i,t.y+i,i-n,0,Math.PI*2/3),e.moveTo(t.x+3*n,t.y+t.height),e.lineTo(t.x+0*n,t.y+12*r),e.lineTo(t.x+5*n,t.y+11*r),e.moveTo(t.x,t.y+8*r),e.arc(t.x+i,t.y+i,i-n,Math.PI,Math.PI*5/3),e.moveTo(t.x+13*n,t.y),e.lineTo(t.x+t.width,t.y+4*r),e.lineTo(t.x+11*n,t.y+5*r),e.moveTo(t.x,t.y),e.lineTo(t.x,t.y)}function f(e,t){var n=t.width/16,r=t.height/16;e.moveTo(t.x,t.y),e.lineTo(t.x,t.y+t.height),e.lineTo(t.x+t.width,t.y+t.height),e.moveTo(t.x+2*n,t.y+14*r),e.lineTo(t.x+7*n,t.y+6*r),e.lineTo(t.x+11*n,t.y+11*r),e.lineTo(t.x+15*n,t.y+2*r),e.moveTo(t.x,t.y),e.lineTo(t.x,t.y)}function l(e,t){var n=t.width/16,r=t.height/16;e.moveTo(t.x,t.y),e.lineTo(t.x,t.y+t.height),e.lineTo(t.x+t.width,t.y+t.height),e.moveTo(t.x+3*n,t.y+14*r),e.lineTo(t.x+3*n,t.y+6*r),e.lineTo(t.x+4*n,t.y+6*r),e.lineTo(t.x+4*n,t.y+14*r),e.moveTo(t.x+7*n,t.y+14*r),e.lineTo(t.x+7*n,t.y+2*r),e.lineTo(t.x+8*n,t.y+2*r),e.lineTo(t.x+8*n,t.y+14*r),e.moveTo(t.x+11*n,t.y+14*r),e.lineTo(t.x+11*n,t.y+9*r),e.lineTo(t.x+12*n,t.y+9*r),e.lineTo(t.x+12*n,t.y+14*r)}function c(e,t){var n=t.x,r=t.y,i=t.width,s=t.height,o=Math.round(s/3),u=3;while(u--)e.rect(n,r+o*u+2,i,2)}function h(e,t){var n=t.x,r=t.y,i=t.width,s=t.height,o=Math.round(i/3),u=3;while(u--)e.rect(n+o*u,r,2,s)}function p(e,t){var n=t.width/16;e.moveTo(t.x+n,t.y),e.lineTo(t.x+n,t.y+t.height),e.lineTo(t.x+15*n,t.y+t.height),e.lineTo(t.x+15*n,t.y),e.lineTo(t.x+n,t.y),e.moveTo(t.x+3*n,t.y+3*n),e.lineTo(t.x+13*n,t.y+3*n),e.moveTo(t.x+3*n,t.y+6*n),e.lineTo(t.x+13*n,t.y+6*n),e.moveTo(t.x+3*n,t.y+9*n),e.lineTo(t.x+13*n,t.y+9*n),e.moveTo(t.x+3*n,t.y+12*n),e.lineTo(t.x+9*n,t.y+12*n)}function d(e,t){var n=t.width/16,r=t.height/16;e.moveTo(t.x,t.y),e.lineTo(t.x,t.y+t.height),e.lineTo(t.x+t.width,t.y+t.height),e.lineTo(t.x+t.width,t.y),e.lineTo(t.x,t.y),e.moveTo(t.x+4*n,t.y),e.lineTo(t.x+4*n,t.y+8*r),e.lineTo(t.x+12*n,t.y+8*r),e.lineTo(t.x+12*n,t.y),e.moveTo(t.x+6*n,t.y+11*r),e.lineTo(t.x+6*n,t.y+13*r),e.lineTo(t.x+10*n,t.y+13*r),e.lineTo(t.x+10*n,t.y+11*r),e.lineTo(t.x+6*n,t.y+11*r),e.moveTo(t.x,t.y),e.lineTo(t.x,t.y)}function v(e,t){var n=t.x,r=t.y,i=t.width,s=t.height;e.moveTo(n,r+s/2),e.lineTo(n+i,r+s/2),e.moveTo(n+i/2,r),e.lineTo(n+i/2,r+s)}function m(e,t){var n=t.width/2,r=t.height/2,i=Math.min(n,r);e.moveTo(t.x+n+i,t.y+r),e.arc(t.x+n,t.y+r,i,0,Math.PI*2)}function g(e,t){e.rect(t.x,t.y,t.width,t.height)}function y(e,t){var n=t.width/2,r=t.height/2,i=t.x+n,s=t.y+r,o=Math.min(n,r);e.moveTo(i,s-o),e.lineTo(i+o,s+o),e.lineTo(i-o,s+o),e.lineTo(i,s-o)}function b(e,t){var n=t.width/2,r=t.height/2,i=t.x+n,s=t.y+r,o=Math.min(n,r);e.moveTo(i,s-o),e.lineTo(i+o,s),e.lineTo(i,s+o),e.lineTo(i-o,s),e.lineTo(i,s-o)}function w(e,t){var n=t.x,r=t.y,i=t.width/16;e.moveTo(n+8*i,r),e.lineTo(n+i,r+t.height),e.lineTo(n+8*i,r+t.height/4*3),e.lineTo(n+15*i,r+t.height),e.lineTo(n+8*i,r)}function E(t,n){var r=n.width/2,i=n.height/2,s=e("zrender/shape").get("star");s.buildPath(t,{x:n.x+r,y:n.y+i,r:Math.min(r,i),n:n.n||5})}function S(t,n){var r=e("zrender/shape").get("heart");r.buildPath(t,{x:n.x+n.width/2,y:n.y+n.height*.2,a:n.width/2,b:n.height*.8})}function x(t,n){var r=e("zrender/shape").get("droplet");r.buildPath(t,{x:n.x+n.width*.5,y:n.y+n.height*.5,a:n.width*.5,b:n.height*.8})}function T(e,t){var n=t.x,r=t.y-t.height/2*1.5,i=t.width/2,s=t.height/2,o=Math.min(i,s);e.arc(n+i,r+s,o,Math.PI/5*4,Math.PI/5),e.lineTo(n+i,r+s+o*1.5)}function N(t,n){setTimeout(function(){e("zrender/shape").get("image").brush(t,{style:n})},100)}var t=e("zrender/tool/matrix");return n.prototype={buildPath:function(e,t){this._iconLibrary[t.iconType]?this._iconLibrary[t.iconType](e,t):(e.moveTo(t.x,t.y),e.lineTo(t.x+t.width,t.y),e.lineTo(t.x+t.width,t.y+t.height),e.lineTo(t.x,t.y+t.height),e.lineTo(t.x,t.y));return},getRect:function(e){return{x:Math.round(e.x),y:Math.round(e.y-(e.iconType=="pin"?e.height/2*1.5:0)),width:e.width,height:e.height}},isCover:function(e,n,r){if(e.__needTransform&&e._transform){var i=[];t.invert(i,e._transform);var s=[n,r];t.mulVector(s,i,[n,r,1]),n==s[0]&&r==s[1]&&(Math.abs(e.rotation[0])>1e-4||Math.abs(e.position[0])>1e-4||Math.abs(e.position[1])>1e-4||Math.abs(e.scale[0]-1)>1e-4||Math.abs(e.scale[1]-1)>1e-4?e.__needTransform=!0:e.__needTransform=!1),n=s[0],r=s[1]}var o;e.style.__rect?o=e.style.__rect:(o=this.getRect(e.style),e.style.__rect=o);var u=o.height<8||o.width<8?4:0;return n>=o.x-u&&n<=o.x+o.width+u&&r>=o.y-u&&r<=o.y+o.height+u?!0:!1},define:function(e,t){this._iconLibrary[e]=t},get:function(e){return this._iconLibrary[e]}},e("zrender/shape/base").derive(n),e("zrender/shape").define("icon",new n),n}),r("echarts/util/shape/markLine",["require","zrender/tool/matrix","zrender/shape","zrender/shape","zrender/shape/base","zrender/shape"],function(e){function n(){this.type="markLine"}var t=e("zrender/tool/matrix");return n.prototype={brush:function(e,t,n){var r=t.style||{};n&&(r=this.getHighlightStyle(r,t.highlightStyle||{})),e.save(),this.setContext(e,r),t.__needTransform&&e.transform.apply(e,this.updateTransform(t)),e.beginPath(),this.buildLinePath(e,r),e.stroke(),this.brushSymbol(t,e,r,0),this.brushSymbol(t,e,r,1),typeof r.text!="undefined"&&this.drawText(e,r,t.style),e.restore();return},buildLinePath:function(e,t){var n=t.pointList||this.getPointList(t);t.pointList=n,typeof t.pointListLength=="undefined"&&(t.pointListLength=n.length);var r=Math.round(t.pointListLength);if(!t.lineType||t.lineType=="solid"){e.moveTo(n[0][0],n[0][1]);for(var i=1;i<r;i++)e.lineTo(n[i][0],n[i][1])}else if(t.lineType=="dashed"||t.lineType=="dotted")if(t.smooth!=="spline"){var s=(t.lineWidth||1)*(t.lineType=="dashed"?5:1);e.moveTo(n[0][0],n[0][1]);for(var i=1;i<r;i++)this.dashedLineTo(e,n[i-1][0],n[i-1][1],n[i][0],n[i][1],s)}else for(var i=0;i<r-1;i+=2)e.moveTo(n[i][0],n[i][1]),e.lineTo(n[i+1][0],n[i+1][1])},brushSymbol:function(n,r,i,s){if(i.symbol[s]=="none")return;r.save(),r.beginPath(),r.lineWidth=i.symbolBorder,r.strokeStyle=i.symbolBorderColor,i.iconType=i.symbol[s].replace("empty","").toLowerCase(),i.symbol[s].match("empty")&&(r.fillStyle="#fff");var o=Math.round(i.pointListLength||i.pointList.length),u=s===0?i.pointList[0][0]:i.pointList[o-1][0],a=s===0?i.pointList[0][1]:i.pointList[o-1][1],f=typeof i.symbolRotate[s]!="undefined"?i.symbolRotate[s]-0:0,l;f!==0&&(l=t.create(),t.identity(l),(u||a)&&t.translate(l,l,[-u,-a]),t.rotate(l,l,f*Math.PI/180),(u||a)&&t.translate(l,l,[u,a]),r.transform.apply(r,l));if(i.iconType=="arrow"&&f===0)this.buildArrawPath(r,i,s);else{var c=i.symbolSize[s];i.x=u-c,i.y=a-c,i.width=c*2,i.height=c*2,e("zrender/shape").get("icon").buildPath(r,i)}r.closePath(),r.fill(),r.stroke(),r.restore()},buildArrawPath:function(e,t,n){var r=Math.round(t.pointListLength||t.pointList.length),i=t.symbolSize[n]*2,s=t.pointList[0][0],o=t.pointList[r-1][0],u=t.pointList[0][1],a=t.pointList[r-1][1],f=0;t.smooth==="spline"&&(f=.2);var l=Math.atan(Math.abs((a-u)/(s-o)));n===0?o>s?a>u?l=Math.PI*2-l+f:l+=f:a>u?l+=Math.PI-f:l=Math.PI-l-f:s>o?u>a?l=Math.PI*2-l+f:l+=f:u>a?l+=Math.PI-f:l=Math.PI-l-f;var c=Math.PI/8,h=n===0?s:o,p=n===0?u:a,d=[[h+i*Math.cos(l-c),p-i*Math.sin(l-c)],[h+i*.6*Math.cos(l),p-i*.6*Math.sin(l)],[h+i*Math.cos(l+c),p-i*Math.sin(l+c)]];e.moveTo(h,p);for(var v=0,m=d.length;v<m;v++)e.lineTo(d[v][0],d[v][1]);e.lineTo(h,p)},getPointList:function(e){var t=[[e.xStart,e.yStart],[e.xEnd,e.yEnd]];if(e.smooth==="spline"){var n=t[1][0],r=t[1][1];t[3]=[n,r],t[1]=this.getOffetPoint(t[0],t[3]),t[2]=this.getOffetPoint(t[3],t[0]),t=this.smoothSpline(t,!1),t[t.length-1]=[n,r]}return t},getOffetPoint:function(e,t){var n=Math.sqrt(Math.round((e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1])))/3,r=[e[0],e[1]],i,s=.2;if(e[0]!=t[0]&&e[1]!=t[1]){var o=(t[1]-e[1])/(t[0]-e[0]);i=Math.atan(o)}else e[0]==t[0]?i=(e[1]<=t[1]?1:-1)*Math.PI/2:i=0;var u,a;return e[0]<=t[0]?(i-=s,u=Math.round(Math.cos(i)*n),a=Math.round(Math.sin(i)*n),r[0]+=u,r[1]+=a):(i+=s,u=Math.round(Math.cos(i)*n),a=Math.round(Math.sin(i)*n),r[0]-=u,r[1]-=a),r},getRect:function(e){var t=e.lineWidth||1;return{x:Math.min(e.xStart,e.xEnd)-t,y:Math.min(e.yStart,e.yEnd)-t,width:Math.abs(e.xStart-e.xEnd)+t,height:Math.abs(e.yStart-e.yEnd)+t}},isCover:function(t,n,r){return e("zrender/shape").get(t.style.smooth!=="spline"?"line":"brokenLine").isCover(t,n,r)}},e("zrender/shape/base").derive(n),e("zrender/shape").define("markLine",new n),n}),r("echarts/chart",[],function(){var e={},t={};return e.define=function(n,r){return t[n]=r,e},e.get=function(e){return t[e]},e}),r("echarts/util/ecData",[],function(){function e(e,t,n,r,i,s,o,u){var a;return typeof r!="undefined"&&(typeof r.value!="undefined"?a=r.value:a=r),e._echartsData={_series:t,_seriesIndex:n,_data:r,_dataIndex:i,_name:s,_value:a,_special:o,_special2:u},e._echartsData}function t(e,t){var n=e._echartsData;if(!t)return n;switch(t){case"series":return n&&n._series;case"seriesIndex":return n&&n._seriesIndex;case"data":return n&&n._data;case"dataIndex":return n&&n._dataIndex;case"name":return n&&n._name;case"value":return n&&n._value;case"special":return n&&n._special;case"special2":return n&&n._special2}return null}function n(e,t,n){e._echartsData=e._echartsData||{};switch(t){case"series":e._echartsData._series=n;break;case"seriesIndex":e._echartsData._seriesIndex=n;break;case"data":e._echartsData._data=n;break;case"dataIndex":e._echartsData._dataIndex=n;break;case"name":e._echartsData._name=n;break;case"value":e._echartsData._value=n;break;case"special":e._echartsData._special=n;break;case"special2":e._echartsData._special2=n}}return{pack:e,set:n,get:t}}),r("echarts/util/ecQuery",["zrender/tool/util"],function(){function t(e,t){if(typeof e=="undefined")return undefined;if(!t)return e;t=t.split(".");var n=t.length,r=0;while(r<n){e=e[t[r]];if(typeof e=="undefined")return undefined;r++}return e}function r(e,n){var r;for(var i=0,s=e.length;i<s;i++){r=t(e[i],n);if(typeof r!="undefined")return r}return undefined}function i(n,r){var i,s,o=n.length;while(o--)s=t(n[o],r),typeof s!="undefined"&&(typeof i=="undefined"?i=e.clone(s):e.merge(i,s,{overwrite:!0,recursive:!0}));return i}var e=n("zrender/tool/util");return{query:t,deepQuery:r,deepMerge:i}}),r("echarts/util/number",[],function(){function e(e){return e.replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function t(t,n){return typeof t=="string"?e(t).match(/%$/)?parseFloat(t)/100*n:parseFloat(t):t}function n(e,n){return[t(n[0],e.getWidth()),t(n[1],e.getHeight())]}function r(e,n){n instanceof Array||(n=[0,n]);var r=Math.min(e.getWidth(),e.getHeight())/2;return[t(n[0],r),t(n[1],r)]}function i(e){return isNaN(e)?"-":(e=(e+"").split("."),e[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(e.length>1?"."+e[1]:""))}return{parsePercent:t,parseCenter:n,parseRadius:r,addCommas:i}}),r("echarts/component/base",["require","../util/ecData","../util/ecQuery","../util/number","zrender/tool/util","zrender/tool/area","zrender/tool/env"],function(e){function t(t,n){function h(e){e=e||a.type+"";switch(e){case t.COMPONENT_TYPE_GRID:case t.COMPONENT_TYPE_AXIS_CATEGORY:case t.COMPONENT_TYPE_AXIS_VALUE:return 0;case t.CHART_TYPE_LINE:case t.CHART_TYPE_BAR:case t.CHART_TYPE_SCATTER:case t.CHART_TYPE_PIE:case t.CHART_TYPE_RADAR:case t.CHART_TYPE_MAP:case t.CHART_TYPE_K:case t.CHART_TYPE_CHORD:return 2;case t.COMPONENT_TYPE_LEGEND:case t.COMPONENT_TYPE_DATARANGE:case t.COMPONENT_TYPE_DATAZOOM:return 4;case t.CHART_TYPE_ISLAND:return 5;case t.COMPONENT_TYPE_TOOLBOX:case t.COMPONENT_TYPE_TITLE:return 6;case t.COMPONENT_TYPE_TOOLTIP:return 8;default:return 0}}function p(e){return o.merge(e||{},o.clone(t[a.type]||{}),{overwrite:!1,recursive:!0})}function d(e){if(!(e instanceof Array))return[e,e,e,e];switch(e.length+""){case"4":return e;case"3":return[e[0],e[1],e[2],e[1]];case"2":return[e[0],e[1],e[0],e[1]];case"1":return[e[0],e[0],e[0],e[0]];case"0":return[0,0,0,0]}}function v(e){var n=o.merge(o.clone(e)||{},t.textStyle,{overwrite:!1});return n.fontStyle+" "+n.fontWeight+" "+n.fontSize+"px "+n.fontFamily}function m(e,t,n,r,i){var s=[n,t],o=a.deepMerge(s,"itemStyle.normal.label"),u=a.deepMerge(s,"itemStyle.emphasis.label"),f=o.textStyle||{},l=u.textStyle||{};return o.show&&(e.style.text=g(t,n,r,"normal"),e.style.textPosition=typeof o.position=="undefined"?i=="horizontal"?"right":"top":o.position,e.style.textColor=f.color,e.style.textFont=a.getFont(f)),u.show&&(e.highlightStyle.text=g(t,n,r,"emphasis"),e.highlightStyle.textPosition=o.show?e.style.textPosition:typeof u.position=="undefined"?i=="horizontal"?"right":"top":u.position,e.highlightStyle.textColor=l.color,e.highlightStyle.textFont=a.getFont(l)),e}function g(e,t,n,r){var i=a.deepQuery([t,e],"itemStyle."+r+".label.formatter");!i&&r=="emphasis"&&(i=a.deepQuery([t,e],"itemStyle.normal.label.formatter"));var s=typeof t!="undefined"?typeof t.value!="undefined"?t.value:t:"-";if(!i)return s;if(typeof i=="function")return i(e.name,n,s);if(typeof i=="string")return i=i.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}"),i=i.replace("{a0}",e.name).replace("{b0}",n).replace("{c0}",s),i}function y(e,t,n,r,i){a.selectedMap[e.name]&&(e.markPoint&&b(e,t,n,r,i),e.markLine&&w(e,t,n,r,i))}function b(e,n,r,i,s){var f=a.getZlevelBase(),l,c,h=o.clone(e.markPoint);for(var p=0,d=h.data.length;p<d;p++)l=h.data[p],c=a.getMarkCoord(e,n,l,i),h.data[p].x=typeof l.x!="undefined"?l.x:c[0],h.data[p].y=typeof l.y!="undefined"?l.y:c[1],l.type&&(l.type=="max"||l.type=="min")&&(h.data[p].value=c[3],h.data[p].name=l.name||l.type,h.data[p].symbolSize=h.data[p].symbolSize||u.getTextWidth(c[3],a.getFont())/2+5);var v=E(e,n,h,r);for(var p=0,d=v.length;p<d;p++){v[p].zlevel=f+1;for(var m in s)v[p][m]=s[m];a.shapeList.push(v[p])}if(a.type==t.CHART_TYPE_FORCE||a.type==t.CHART_TYPE_CHORD)for(var p=0,d=v.length;p<d;p++)v[p].id=a.zr.newShapeId(a.type),a.zr.addShape(v[p])}function w(e,n,r,i,s){var u=a.getZlevelBase(),f,l,c=o.clone(e.markLine);for(var h=0,p=c.data.length;h<p;h++)f=c.data[h],!f.type||f.type!="max"&&f.type!="min"&&f.type!="average"?l=[a.getMarkCoord(e,n,f[0],i),a.getMarkCoord(e,n,f[1],i)]:(l=a.getMarkCoord(e,n,f,i),c.data[h]=[o.clone(f),{}],c.data[h][0].name=f.name||f.type,c.data[h][0].value=l[3],l=l[2],f=[{},{}]),c.data[h][0].x=typeof f[0].x!="undefined"?f[0].x:l[0][0],c.data[h][0].y=typeof f[0].y!="undefined"?f[0].y:l[0][1],c.data[h][1].x=typeof f[1].x!="undefined"?f[1].x:l[1][0],c.data[h][1].y=typeof f[1].y!="undefined"?f[1].y:l[1][1];var d=S(e,n,c,r);for(var h=0,p=d.length;h<p;h++){d[h].zlevel=u+1;for(var v in s)d[h][v]=s[v];a.shapeList.push(d[h])}if(a.type==t.CHART_TYPE_FORCE||a.type==t.CHART_TYPE_CHORD)for(var h=0,p=d.length;h<p;h++)d[h].id=a.zr.newShapeId(a.type),a.zr.addShape(d[h])}function E(e,n,i,s){o.merge(i,t.markPoint,{overwrite:!1,recursive:!0}),i.name=e.name;var u=[],f=i.data,l,c=s.dataRange,h=s.legend,p,d,v,m,g,y,b=a.zr.getWidth(),w=a.zr.getHeight();for(var E=0,S=f.length;E<S;E++){h&&(p=h.getColor(e.name));if(c){d=typeof f[E]!="undefined"?typeof f[E].value!="undefined"?f[E].value:f[E]:"-",p=isNaN(d)?p:c.getColor(d),v=[f[E],i],m=a.deepQuery(v,"itemStyle.normal.color")||p,g=a.deepQuery(v,"itemStyle.emphasis.color")||m;if(m==null&&g==null)continue}f[E].tooltip={trigger:"item"},f[E].name=typeof f[E].name!="undefined"?f[E].name:"",f[E].value=typeof f[E].value!="undefined"?f[E].value:"",l=T(i,n,f[E],E,f[E].name,a.parsePercent(f[E].x,b),a.parsePercent(f[E].y,w),"pin",p,"rgba(0,0,0,0)","horizontal"),y=a.deepMerge([f[E],i],"effect"),y.show&&(l.effect=y),r.pack(l,e,n,f[E],0,f[E].name),u.push(l)}return u}function S(e,n,i,s){o.merge(i,t.markLine,{overwrite:!1,recursive:!0}),i.symbol=i.symbol instanceof Array?i.symbol.length>1?i.symbol:[i.symbol[0],i.symbol[0]]:[i.symbol,i.symbol],i.symbolSize=i.symbolSize instanceof Array?i.symbolSize.length>1?i.symbolSize:[i.symbolSize[0],i.symbolSize[0]]:[i.symbolSize,i.symbolSize],i.symbolRotate=i.symbolRotate instanceof Array?i.symbolRotate.length>1?i.symbolRotate:[i.symbolRotate[0],i.symbolRotate[0]]:[i.symbolRotate,i.symbolRotate],i.name=e.name;var u=[],f=i.data,l,c=s.dataRange,h=s.legend,p,d,v,m,g,y,b=a.zr.getWidth(),w=a.zr.getHeight(),E;for(var S=0,x=f.length;S<x;S++){h&&(p=h.getColor(e.name)),E=a.deepMerge(f[S]);if(c){d=typeof E!="undefined"?typeof E.value!="undefined"?E.value:E:"-",p=isNaN(d)?p:c.getColor(d),v=[E,i],m=a.deepQuery(v,"itemStyle.normal.color")||p,g=a.deepQuery(v,"itemStyle.emphasis.color")||m;if(m==null&&g==null)continue}f[S][0].tooltip=E.tooltip||{trigger:"item"},f[S][0].name=typeof f[S][0].name!="undefined"?f[S][0].name:"",f[S][1].name=typeof f[S][1].name!="undefined"?f[S][1].name:"",f[S][0].value=typeof f[S][0].value!="undefined"?f[S][0].value:"",l=N(i,n,f[S],S,a.parsePercent(f[S][0].x,b),a.parsePercent(f[S][0].y,w),a.parsePercent(f[S][1].x,b),a.parsePercent(f[S][1].y,w),p),y=a.deepMerge([E,i],"effect"),y.show&&(l.effect=y),r.pack(l,e,n,f[S][0],0,f[S][0].name+(f[S][1].name!==""?" > "+f[S][1].name:"")),u.push(l)}return u}function x(){return[0,0]}function T(e,t,n,i,s,o,u,f,l,c,h){var p=[n,e],d=typeof n!="undefined"?typeof n.value!="undefined"?n.value:n:"-";f=a.deepQuery(p,"symbol")||f;var v=a.deepQuery(p,"symbolSize");v=typeof v=="function"?v(d):v;var m=a.deepQuery(p,"symbolRotate"),g=a.deepMerge(p,"itemStyle.normal"),y=a.deepMerge(p,"itemStyle.emphasis"),b=typeof g.borderWidth!="undefined"?g.borderWidth:g.lineStyle&&g.lineStyle.width;typeof b=="undefined"&&(b=0);var w=typeof y.borderWidth!="undefined"?y.borderWidth:y.lineStyle&&y.lineStyle.width;typeof w=="undefined"&&(w=b+2);var E={shape:"icon",style:{iconType:f.replace("empty","").toLowerCase(),x:o-v,y:u-v,width:v*2,height:v*2,brushType:"both",color:f.match("empty")?c:a.getItemStyleColor(g.color,t,i,n)||l,strokeColor:g.borderColor||a.getItemStyleColor(g.color,t,i,n)||l,lineWidth:b},highlightStyle:{color:f.match("empty")?c:a.getItemStyleColor(y.color,t,i,n),strokeColor:y.borderColor||g.borderColor||a.getItemStyleColor(g.color,t,i,n)||l,lineWidth:w},clickable:!0};return f.match("image")&&(E.style.image=f.replace(new RegExp("^image:\\/\\/"),""),E.shape="image"),typeof m!="undefined"&&(E.rotation=[m*Math.PI/180,o,u]),f.match("star")&&(E.style.iconType="star",E.style.n=f.replace("empty","").replace("star","")-0||5),f=="none"&&(E.invisible=!0,E.hoverable=!1),E=a.addLabel(E,e,n,s,h),f.match("empty")&&(typeof E.style.textColor=="undefined"&&(E.style.textColor=E.style.strokeColor),typeof E.highlightStyle.textColor=="undefined"&&(E.highlightStyle.textColor=E.highlightStyle.strokeColor)),r.pack(E,e,t,n,i,s),E._mark="point",E._x=o,E._y=u,E._dataIndex=i,E._seriesIndex=t,E}function N(e,t,n,r,i,s,o,u,f){var l=typeof n[0]!="undefined"?typeof n[0].value!="undefined"?n[0].value:n[0]:"-",c=typeof n[1]!="undefined"?typeof n[1].value!="undefined"?n[1].value:n[1]:"-",h=[a.query(n[0],"symbol")||e.symbol[0],a.query(n[1],"symbol")||e.symbol[1]],p=[a.query(n[0],"symbolSize")||e.symbolSize[0],a.query(n[1],"symbolSize")||e.symbolSize[1]];p[0]=typeof p[0]=="function"?p[0](l):p[0],p[1]=typeof p[1]=="function"?p[1](c):p[1];var d=[a.query(n[0],"symbolRotate")||e.symbolRotate[0],a.query(n[1],"symbolRotate")||e.symbolRotate[1]],v=[n[0],e],m=a.deepMerge(v,"itemStyle.normal");m.color=a.getItemStyleColor(m.color,t,r,n);var g=a.deepMerge(v,"itemStyle.emphasis");g.color=a.getItemStyleColor(g.color,t,r,n);var y=m.lineStyle,b=g.lineStyle,w=y.width;typeof w=="undefined"&&(w=m.borderWidth);var E=b.width;typeof E=="undefined"&&(typeof g.borderWidth!="undefined"?E=g.borderWidth:E=w+2);var S={shape:"markLine",style:{smooth:e.smooth?"spline":!1,symbol:h,symbolSize:p,symbolRotate:d,xStart:i,yStart:s,xEnd:o,yEnd:u,brushType:"both",lineType:y.type,shadowColor:y.shadowColor,shadowBlur:y.shadowBlur,shadowOffsetX:y.shadowOffsetX,shadowOffsetY:y.shadowOffsetY,color:m.color||f,strokeColor:y.color||m.borderColor||m.color||f,lineWidth:w,symbolBorderColor:m.borderColor||m.color||f,symbolBorder:m.borderWidth},highlightStyle:{shadowColor:b.shadowColor,shadowBlur:b.shadowBlur,shadowOffsetX:b.shadowOffsetX,shadowOffsetY:b.shadowOffsetY,color:g.color||m.color||f,strokeColor:b.color||y.color||g.borderColor||m.borderColor||g.color||m.color||f,lineWidth:E,symbolBorderColor:g.borderColor||m.borderColor||g.color||m.color||f,symbolBorder:typeof g.borderWidth=="undefined"?m.borderWidth+2:g.borderWidth},clickable:!0};return S=a.addLabel(S,e,n[0],n[0].name+" : "+n[1].name),S._mark="line",S._x=o,S._y=u,S}function C(e,t,n,r){return typeof e=="function"?e(t,n,r):e}function k(e,t){return t%2==1?e=Math.floor(e)+.5:e=Math.round(e),e}function L(){c[a.type]?a.animationMark(t.animationDuration):a.animationEffect()}function A(e,t){var r,i;for(var s=0,o=a.shapeList.length;s<o;s++){if(!a.shapeList[s]._mark)continue;r=a.shapeList[s]._x||0,i=a.shapeList[s]._y||0,a.shapeList[s]._mark=="point"?(n.modShape(a.shapeList[s].id,{scale:[0,0,r,i]},!0),n.animate(a.shapeList[s].id,"").when(e,{scale:[1,1,r,i]}).start(t||"QuinticOut")):a.shapeList[s]._mark=="line"&&(a.shapeList[s].style.smooth?(n.modShape(a.shapeList[s].id,{style:{pointListLength:1}},!0),n.animate(a.shapeList[s].id,"style").when(e,{pointListLength:a.shapeList[s].style.pointList.length}).start(t||"QuinticOut")):(n.modShape(a.shapeList[s].id,{style:{pointList:[[a.shapeList[s].style.xStart,a.shapeList[s].style.yStart],[a.shapeList[s].style.xStart,a.shapeList[s].style.yStart]]}},!0),n.animate(a.shapeList[s].id,"style").when(e,{pointList:[[a.shapeList[s].style.xStart,a.shapeList[s].style.yStart],[r,i]]}).start(t||"QuinticOut")))}a.animationEffect()}function O(){_();var e=f;l&&n.modLayer(e,{motionBlur:!0,lastFrameAlpha:.95});var t,r,i,s;for(var o=0,u=a.shapeList.length;o<u;o++){shape=a.shapeList[o];if(!shape._mark||!shape.effect||!shape.effect.show)continue;s=shape.effect,t=s.color||shape.style.strokeColor||shape.style.color,r=s.shadowColor||t;var c,h;switch(shape._mark){case"point":i=s.scaleSize,shadowBlur=typeof s.shadowBlur!="undefined"?s.shadowBlur:i,c={shape:shape.shape,id:n.newShapeId(),zlevel:e,style:{brushType:"stroke",iconType:shape.style.iconType!="pin"&&shape.style.iconType!="droplet"?shape.style.iconType:"circle",x:shadowBlur+1,y:shadowBlur+1,n:shape.style.n,width:shape.style.width*i,height:shape.style.height*i,lineWidth:1,strokeColor:t,shadowColor:r,shadowBlur:shadowBlur},draggable:!1,hoverable:!1},l&&(c.style.image=n.shapeToImage(c,c.style.width+shadowBlur*2+2,c.style.height+shadowBlur*2+2).style.image,c.shape="image"),h=(c.style.width-shape.style.width)/2;break;case"line":i=shape.style.lineWidth*s.scaleSize,shadowBlur=typeof s.shadowBlur!="undefined"?s.shadowBlur:i,c={shape:"circle",id:n.newShapeId(),zlevel:e,style:{x:shadowBlur,y:shadowBlur,r:i,color:t,shadowColor:r,shadowBlur:shadowBlur},draggable:!1,hoverable:!1},l?(c.style.image=n.shapeToImage(c,(i+shadowBlur)*2,(i+shadowBlur)*2).style.image,c.shape="image",h=shadowBlur):h=0}var p;c.position=shape.position;if(shape._mark==="point")c.style.x=shape.style.x-h,c.style.y=shape.style.y-h,p=(s.period+Math.random()*10)*100;else if(shape._mark==="line"){c.style.x=shape.style.xStart-h,c.style.y=shape.style.yStart-h;var d=(shape.style.xStart-shape._x)*(shape.style.xStart-shape._x)+(shape.style.yStart-shape._y)*(shape.style.yStart-shape._y);p=Math.round(Math.sqrt(Math.round(d*s.period*s.period)))}a.effectList.push(c),n.addShape(c);if(shape._mark==="point"){n.modShape(shape.id,{invisible:!0},!0);var v=c.style.x+c.style.width/2,m=c.style.y+c.style.height/2;n.modShape(c.id,{scale:[.1,.1,v,m]},!0),n.animate(c.id,"",!0).when(p,{scale:[1,1,v,m]}).start()}else if(shape._mark==="line")if(!shape.style.smooth)n.animate(c.id,"style",!0).when(p,{x:shape._x-h,y:shape._y-h}).start();else{var g=shape.style.pointList,y=g.length;p=Math.round(p/y);var b=n.animate(c.id,"style",!0);for(var w=0;w<y;w++)b.when(p*(w+1),{x:g[w][0]-h,y:g[w][1]-h});b.start()}}}function M(){a.refresh&&a.refresh()}function _(){a.zr&&a.effectList.length>0&&(a.zr.modLayer(f,{motionBlur:!1}),a.zr.delShape(a.effectList)),a.effectList=[]}function D(){_(),a.zr&&a.zr.delShape(a.shapeList),a.shapeList=[]}function P(){a.clear(),a.shapeList=null,a.effectList=null,a=null}var r=e("../util/ecData"),i=e("../util/ecQuery"),s=e("../util/number"),o=e("zrender/tool/util"),u=e("zrender/tool/area"),a=this;a.zr=n,a.shapeList=[],a.effectList=[];var f=7,l=e("zrender/tool/env").canvasSupported,c={};c[t.CHART_TYPE_LINE]=!0,c[t.CHART_TYPE_BAR]=!0,c[t.CHART_TYPE_SCATTER]=!0,c[t.CHART_TYPE_PIE]=!0,c[t.CHART_TYPE_RADAR]=!0,c[t.CHART_TYPE_MAP]=!0,c[t.CHART_TYPE_K]=!0,c[t.CHART_TYPE_CHORD]=!0,a.getZlevelBase=h,a.reformOption=p,a.reformCssArray=d,a.query=i.query,a.deepQuery=i.deepQuery,a.deepMerge=i.deepMerge,a.getFont=v,a.addLabel=m,a.buildMark=y,a.getMarkCoord=x,a.getSymbolShape=T,a.parsePercent=s.parsePercent,a.parseCenter=s.parseCenter,a.parseRadius=s.parseRadius,a.numAddCommas=s.addCommas,a.getItemStyleColor=C,a.subPixelOptimize=k,a.animation=L,a.animationMark=A,a.animationEffect=O,a.resize=M,a.clearAnimationShape=_,a.clear=D,a.dispose=P}return t}),r("echarts/util/accMath",[],function(){function e(e,n){return t(e,1/n)}function t(e,t){var n=0,r=e.toString(),i=t.toString();try{n+=r.split(".")[1].length}catch(s){}try{n+=i.split(".")[1].length}catch(s){}return Number(r.replace(".",""))*Number(i.replace(".",""))/Math.pow(10,n)}function n(e,t){var n,r,i;try{n=e.toString().split(".")[1].length}catch(s){n=0}try{r=t.toString().split(".")[1].length}catch(s){r=0}return i=Math.pow(10,Math.max(n,r)),(Math.round(e*i)+Math.round(t*i))/i}function r(e,t){return n(e,-t)}return{accDiv:e,accMul:t,accAdd:n,accSub:r}}),r("echarts/chart/calculableBase",["require","../util/ecData","../util/accMath","zrender/tool/util"],function(e){function t(t,n){function u(e){return e.dragEnableTime=n.DRAG_ENABLE_TIME,e.ondragover=o.shapeHandler.ondragover,e.ondragend=o.shapeHandler.ondragend,e.ondrop=o.shapeHandler.ondrop,e}function a(e,t){if(!o.isDrop||!e.target)return;var s=e.target,u=e.dragged,a=r.get(s,"seriesIndex"),f=r.get(s,"dataIndex"),l=n.series[a].data[f]||"-";l.value?l.value!="-"?n.series[a].data[f].value=i.accAdd(n.series[a].data[f].value,r.get(u,"value")):n.series[a].data[f].value=r.get(u,"value"):l!="-"?n.series[a].data[f]=i.accAdd(n.series[a].data[f],r.get(u,"value")):n.series[a].data[f]=r.get(u,"value"),t.dragIn=t.dragIn||!0,o.isDrop=!1;return}function f(e,t){if(!o.isDragend||!e.target)return;var i=e.target,s=r.get(i,"seriesIndex"),u=r.get(i,"dataIndex");n.series[s].data[u]="-",t.dragOut=!0,t.needRefresh=!0,o.isDragend=!1;return}function l(e,t){var n=e.selected;for(var r in o.selectedMap)o.selectedMap[r]!=n[r]&&(t.needRefresh=!0),o.selectedMap[r]=n[r];return}var r=e("../util/ecData"),i=e("../util/accMath"),s=e("zrender/tool/util"),o=this;o.selectedMap={},o.shapeHandler={onclick:function(){o.isClick=!0},ondragover:function(e){var t=s.clone(e.target);t.highlightStyle={text:"",r:t.style.r+5,brushType:"stroke",strokeColor:n.calculableColor,lineWidth:(t.style.lineWidth||1)+12},o.zr.addHoverShape(t)},ondrop:function(e){typeof r.get(e.dragged,"data")!="undefined"&&(o.isDrop=!0)},ondragend:function(){o.isDragend=!0}},o.setCalculable=u,o.ondrop=a,o.ondragend=f,o.onlegendSelected=l}return t}),r("echarts/chart/island",["require","../component/base","./calculableBase","../util/ecData","zrender/tool/event","zrender/tool/color","../util/accMath","../chart"],function(e){function t(t,n,r){function v(t,n){var r=e("zrender/tool/color"),i=e("../util/accMath"),s=i.accAdd(o.get(t,"value"),o.get(n,"value")),u=o.get(t,"name")+c+o.get(n,"name");t.style.text=u+h+s,o.set(t,"value",s),o.set(t,"name",u),t.style.r=f.island.r,t.style.color=r.mix(t.style.color,n.style.color)}function m(e){e&&(e.island=a.reformOption(e.island),f=e,c=f.nameConnector,h=f.valueConnector)}function g(e){m(e);for(var t=0,n=a.shapeList.length;t<n;t++)r.addShape(a.shapeList[t])}function y(){return f}function b(){var e=r.getWidth(),t=r.getHeight(),n=e/(d||e),i=t/(p||t);if(n==1&&i==1)return;d=e,p=t;for(var s=0,o=a.shapeList.length;s<o;s++)r.modShape(a.shapeList[s].id,{style:{x:Math.round(a.shapeList[s].style.x*n),y:Math.round(a.shapeList[s].style.y*i)}},!0)}function w(e){var t=o.get(e,"name"),n=o.get(e,"value"),i=typeof o.get(e,"series")!="undefined"?o.get(e,"series").name:"",s=a.getFont(f.island.textStyle),u={shape:"circle",id:r.newShapeId(a.type),zlevel:l,style:{x:e.style.x,y:e.style.y,r:f.island.r,color:e.style.color||e.style.strokeColor,text:t+h+n,textFont:s},draggable:!0,hoverable:!0,onmousewheel:a.shapeHandler.onmousewheel,_type:"island"};u.style.color=="#fff"&&(u.style.color=e.style.strokeColor),a.setCalculable(u),u.dragEnableTime=0,o.pack(u,{name:i},-1,n,-1,t),a.shapeList.push(u),r.addShape(u)}function E(e){r.delShape(e.id);var t=[];for(var n=0,i=a.shapeList.length;n<i;n++)a.shapeList[n].id!=e.id&&t.push(a.shapeList[n]);a.shapeList=t}function S(e,t){if(!a.isDrop||!e.target)return;var n=e.target,i=e.dragged;v(n,i),r.modShape(n.id,n),t.dragIn=!0,a.isDrop=!1;return}function x(e,t){var n=e.target;a.isDragend?t.dragIn&&(E(n),t.needRefresh=!0):t.dragIn||(n.style.x=u.getX(e.event),n.style.y=u.getY(e.event),w(n),t.needRefresh=!0),a.isDragend=!1;return}var i=e("../component/base");i.call(this,t,r);var s=e("./calculableBase");s.call(this,r,t);var o=e("../util/ecData"),u=e("zrender/tool/event"),a=this;a.type=t.CHART_TYPE_ISLAND;var f,l=a.getZlevelBase(),c,h,p=r.getHeight(),d=r.getWidth();a.shapeHandler.onmousewheel=function(e){var t=e.target,n=e.event,i=u.getDelta(n);i=i>0?-1:1,t.style.r-=i,t.style.r=t.style.r<5?5:t.style.r;var s=o.get(t,"value"),a=s*f.island.calculateStep;a>1?s=Math.round(s-a*i):s=(s-a*i).toFixed(2)-0;var l=o.get(t,"name");t.style.text=l+":"+s,o.set(t,"value",s),o.set(t,"name",l),r.modShape(t.id,t),r.refresh(),u.stop(n)},a.refresh=m,a.render=g,a.resize=b,a.getOption=y,a.add=w,a.del=E,a.ondrop=S,a.ondragend=x}return e("../chart").define("island",t),t}),r("echarts/component",[],function(){var e={},t={};return e.define=function(n,r){return t[n]=r,e},e.get=function(e){return t[e]},e}),r("echarts/component/title",["require","./base","zrender/tool/area","zrender/tool/util","../component"],function(e){function t(t,n,r,i){function h(){c=v(),d(),p();for(var e=0,t=a.shapeList.length;e<t;e++)a.shapeList[e].id=r.newShapeId(a.type),r.addShape(a.shapeList[e])}function p(){var e=f.text,t=f.link,n=f.subtext,r=f.sublink,i=a.getFont(f.textStyle),s=a.getFont(f.subtextStyle),o=c.x,u=c.y,h=c.width,p=c.height,d={shape:"text",zlevel:l,style:{y:u,color:f.textStyle.color,text:e,textFont:i,textBaseline:"top"},highlightStyle:{brushType:"fill"},hoverable:!1};t&&(d.hoverable=!0,d.clickable=!0,d.onclick=function(){window.open(t)});var v={shape:"text",zlevel:l,style:{y:u+p,color:f.subtextStyle.color,text:n,textFont:s,textBaseline:"bottom"},highlightStyle:{brushType:"fill"},hoverable:!1};r&&(v.hoverable=!0,v.clickable=!0,v.onclick=function(){window.open(r)});switch(f.x){case"center":d.style.x=v.style.x=o+h/2,d.style.textAlign=v.style.textAlign="center";break;case"left":d.style.x=v.style.x=o,d.style.textAlign=v.style.textAlign="left";break;case"right":d.style.x=v.style.x=o+h,d.style.textAlign=v.style.textAlign="right";break;default:o=f.x-0,o=isNaN(o)?0:o,d.style.x=v.style.x=o}f.textAlign&&(d.style.textAlign=v.style.textAlign=f.textAlign),a.shapeList.push(d),n!==""&&a.shapeList.push(v)}function d(){var e=f.padding[0],t=f.padding[1],n=f.padding[2],r=f.padding[3];a.shapeList.push({shape:"rectangle",zlevel:l,hoverable:!1,style:{x:c.x-r,y:c.y-e,width:c.width+r+t,height:c.height+e+n,brushType:f.borderWidth===0?"fill":"both",color:f.backgroundColor,strokeColor:f.borderColor,lineWidth:f.borderWidth}})}function v(){var e=f.text,t=f.subtext,n=a.getFont(f.textStyle),i=a.getFont(f.subtextStyle),s=Math.max(o.getTextWidth(e,n),o.getTextWidth(t,i)),u=o.getTextHeight(e,n)+(t===""?0:f.itemGap+o.getTextHeight(t,i)),l,c=r.getWidth();switch(f.x){case"center":l=Math.floor((c-s)/2);break;case"left":l=f.padding[3]+f.borderWidth;break;case"right":l=c-s-f.padding[1]-f.borderWidth;break;default:l=f.x-0,l=isNaN(l)?0:l}var h,p=r.getHeight();switch(f.y){case"top":h=f.padding[0]+f.borderWidth;break;case"bottom":h=p-u-f.padding[2]-f.borderWidth;break;case"center":h=Math.floor((p-u)/2);break;default:h=f.y-0,h=isNaN(h)?0:h}return{x:l,y:h,width:s,height:u}}function m(e){g(e)}function g(e){e&&(i=e,i.title=a.reformOption(i.title),i.title.padding=a.reformCssArray(i.title.padding),f=i.title,f.textStyle=u.merge(f.textStyle,t.textStyle,{overwrite:!1,recursive:!1}),f.subtextStyle=u.merge(f.subtextStyle,t.textStyle,{overwrite:!1,recursive:!1}),a.clear(),h())}function y(){a.clear(),h()}var s=e("./base");s.call(this,t,r);var o=e("zrender/tool/area"),u=e("zrender/tool/util"),a=this;a.type=t.COMPONENT_TYPE_TITLE;var f,l=a.getZlevelBase(),c={};a.init=m,a.refresh=g,a.resize=y,m(i)}return e("../component").define("title",t),t}),r("echarts/component/categoryAxis",["require","./base","zrender/tool/util","zrender/tool/area","../component"],function(e){function t(t,n,r,i,s){function d(){var e=u.clone(i.data),t=i.axisLabel.formatter,n;for(var r=0,s=e.length;r<s;r++)n=e[r].formatter||t,n&&(typeof n=="function"?typeof e[r].value!="undefined"?e[r].value=n(e[r].value):e[r]=n(e[r]):typeof n=="string"&&(typeof e[r].value!="undefined"?e[r].value=n.replace("{value}",e[r].value):e[r]=n.replace("{value}",e[r])));return e}function v(){var e=i.axisLabel.interval;if(e=="auto"){var t=i.axisLabel.textStyle.fontSize,n=f.getFont(i.axisLabel.textStyle),r=i.data,s=i.data.length;if(i.position=="bottom"||i.position=="top")if(s>3){var o=T(),l=!1,c,h;e=0;while(!l&&e<s){e++,l=!0,c=o*e-10;for(var d=0;d<s;d+=e){i.axisLabel.rotate!==0?h=t:r[d].textStyle?h=a.getTextWidth(p[d].value||p[d],f.getFont(u.merge(r[d].textStyle,i.axisLabel.textStyle,{overwrite:!1,recursive:!0}))):h=a.getTextWidth(p[d].value||p[d],n);if(c<h){l=!1;break}}}}else e=1;else if(s>3){var o=T();e=1;while(o*e-6<t&&e<s)e++}else e=1}else e+=1;return e}function m(){p=d(),h=v(),i.splitArea.show&&E(),i.splitLine.show&&w(),i.axisLine.show&&g(),i.axisTick.show&&y(),i.axisLabel.show&&b();for(var e=0,t=f.shapeList.length;e<t;e++)f.shapeList[e].id=r.newShapeId(f.type),r.addShape(f.shapeList[e])}function g(){var e=i.axisLine.lineStyle.width,t=e/2,n={shape:"line",zlevel:c+1,hoverable:!1};switch(i.position){case"left":n.style={xStart:l.getX()-t,yStart:l.getYend()+t,xEnd:l.getX()-t,yEnd:l.getY()-t};break;case"right":n.style={xStart:l.getXend()+t,yStart:l.getYend()+t,xEnd:l.getXend()+t,yEnd:l.getY()-t};break;case"bottom":n.style={xStart:l.getX()-t,yStart:l.getYend()+t,xEnd:l.getXend()+t,yEnd:l.getYend()+t};break;case"top":n.style={xStart:l.getX()-t,yStart:l.getY()-t,xEnd:l.getXend()+t,yEnd:l.getY()-t}}i.name!==""&&(n.style.text=i.name,n.style.textPosition=i.nameLocation,n.style.textFont=f.getFont(i.nameTextStyle),i.nameTextStyle.align&&(n.style.textAlign=i.nameTextStyle.align),i.nameTextStyle.baseline&&(n.style.textBaseline=i.nameTextStyle.baseline),i.nameTextStyle.color&&(n.style.textColor=i.nameTextStyle.color)),n.style.strokeColor=i.axisLine.lineStyle.color,n.style.lineWidth=e,i.position=="left"||i.position=="right"?n.style.xStart=n.style.xEnd=f.subPixelOptimize(n.style.xEnd,e):n.style.yStart=n.style.yEnd=f.subPixelOptimize(n.style.yEnd,e),n.style.lineType=i.axisLine.lineStyle.type,f.shapeList.push(n)}function y(){var e,t=i.data.length,n=i.axisTick,r=n.length,s=n.lineStyle.color,o=n.lineStyle.width,u=n.interval=="auto"?h:n.interval-0+1,a=n.onGap,p=a?T()/2:typeof a=="undefined"?i.boundaryGap?T()/2:0:0,d=p>0?-u:0;if(i.position=="bottom"||i.position=="top"){var v=i.position=="bottom"?n.inside?l.getYend()-r:l.getYend():n.inside?l.getY():l.getY()-r,m;for(var g=d;g<t;g+=u)m=f.subPixelOptimize(C(g)+(g>=0?p:0),o),e={shape:"line",zlevel:c,hoverable:!1,style:{xStart:m,yStart:v,xEnd:m,yEnd:v+r,strokeColor:s,lineWidth:o}},f.shapeList.push(e)}else{var y=i.position=="left"?n.inside?l.getX():l.getX()-r:n.inside?l.getXend()-r:l.getXend(),b;for(var g=d;g<t;g+=u)b=f.subPixelOptimize(C(g)-(g>=0?p:0),o),e={shape:"line",zlevel:c,hoverable:!1,style:{xStart:y,yStart:b,xEnd:y+r,yEnd:b,strokeColor:s,lineWidth:o}},f.shapeList.push(e)}}function b(){var e,t=i.data,n=i.data.length,r=i.axisLabel.rotate,s=i.axisLabel.margin,o=i.axisLabel.textStyle,a;if(i.position=="bottom"||i.position=="top"){var d,v;i.position=="bottom"?(d=l.getYend()+s,v="top"):(d=l.getY()-s,v="bottom");for(var m=0;m<n;m+=h){if((p[m].value||p[m])==="")continue;a=u.merge(t[m].textStyle||{},o,{overwrite:!1}),e={shape:"text",zlevel:c,hoverable:!1,style:{x:C(m),y:d,color:a.color,text:p[m].value||p[m],textFont:f.getFont(a),textAlign:"center",textBaseline:v}},r&&(e.style.textAlign=r>0?i.position=="bottom"?"right":"left":i.position=="bottom"?"left":"right",e.rotation=[r*Math.PI/180,e.style.x,e.style.y]),f.shapeList.push(e)}}else{var g,y;i.position=="left"?(g=l.getX()-s,y="right"):(g=l.getXend()+s,y="left");for(var m=0;m<n;m+=h){if((p[m].value||p[m])==="")continue;a=u.merge(t[m].textStyle||{},o,{overwrite:!1}),e={shape:"text",zlevel:c,hoverable:!1,style:{x:g,y:C(m),color:a.color,text:p[m].value||p[m],textFont:f.getFont(a),textAlign:y,textBaseline:m===0&&i.name!==""?"bottom":m==n-1&&i.name!==""?"top":"middle"}},r&&(e.rotation=[r*Math.PI/180,e.style.x,e.style.y]),f.shapeList.push(e)}}}function w(){var e,t=i.data.length,n=i.splitLine,r=n.lineStyle.type,s=n.lineStyle.width,o=n.lineStyle.color;o=o instanceof Array?o:[o];var u=o.length,a=n.onGap,p=a?T()/2:typeof a=="undefined"?i.boundaryGap?T()/2:0:0;t-=a||typeof a=="undefined"&&i.boundaryGap?1:0;if(i.position=="bottom"||i.position=="top"){var d=l.getY(),v=l.getYend(),m;for(var g=0;g<t;g+=h)m=f.subPixelOptimize(C(g)+p,s),e={shape:"line",zlevel:c,hoverable:!1,style:{xStart:m,yStart:d,xEnd:m,yEnd:v,strokeColor:o[g/h%u],lineType:r,lineWidth:s}},f.shapeList.push(e)}else{var y=l.getX(),b=l.getXend(),w;for(var g=0;g<t;g+=h)w=f.subPixelOptimize(C(g)-p,s),e={shape:"line",zlevel:c,hoverable:!1,style:{xStart:y,yStart:w,xEnd:b,yEnd:w,strokeColor:o[g/h%u],linetype:r,lineWidth:s}},f.shapeList.push(e)}}function E(){var e,t=i.splitArea,n=t.areaStyle.color;if(n instanceof Array){var r=n.length,s=i.data.length,o=t.onGap,u=o?T()/2:typeof o=="undefined"?i.boundaryGap?T()/2:0:0;if(i.position=="bottom"||i.position=="top"){var a=l.getY(),p=l.getHeight(),d=l.getX(),v;for(var m=0;m<=s;m+=h)v=m<s?C(m)+u:l.getXend(),e={shape:"rectangle",zlevel:c,hoverable:!1,style:{x:d,y:a,width:v-d,height:p,color:n[m/h%r]}},f.shapeList.push(e),d=v}else{var g=l.getX(),y=l.getWidth(),b=l.getYend(),w;for(var m=0;m<=s;m+=h)w=m<s?C(m)-u:l.getY(),e={shape:"rectangle",zlevel:c,hoverable:!1,style:{x:g,y:w,width:y,height:b-w,color:n[m/h%r]}},f.shapeList.push(e),b=w}}else e={shape:"rectangle",zlevel:c,hoverable:!1,style:{x:l.getX(),y:l.getY(),width:l.getWidth(),height:l.getHeight(),color:n}},f.shapeList.push(e)}function S(e,t){if(e.data.length<1)return;l=t,x(e)}function x(e){e&&(i=f.reformOption(e),i.axisLabel.textStyle=u.merge(i.axisLabel.textStyle||{},t.textStyle,{overwrite:!1,recursive:!0}),i.axisLabel.textStyle=u.merge(i.axisLabel.textStyle||{},t.textStyle,{overwrite:!1,recursive:!0})),f.clear(),m()}function T(){var e=i.data.length,t=i.position=="bottom"||i.position=="top"?l.getWidth():l.getHeight();return i.boundaryGap?t/e:t/(e>1?e-1:1)}function N(e){var t=i.data,n=t.length,r=T(),s=i.boundaryGap?r/2:0;for(var o=0;o<n;o++){if(t[o]==e||typeof t[o].value!="undefined"&&t[o].value==e)return i.position=="bottom"||i.position=="top"?s=l.getX()+s:s=l.getYend()-s,s;s+=r}}function C(e){if(e<0)return i.position=="bottom"||i.position=="top"?l.getX():l.getYend();if(e>i.data.length-1)return i.position=="bottom"||i.position=="top"?l.getXend():l.getY();var t=T(),n=i.boundaryGap?t/2:0;return n+=e*t,i.position=="bottom"||i.position=="top"?n=l.getX()+n:n=l.getYend()-n,n}function k(e){var t=i.data[e];return typeof t!="undefined"&&typeof t.value!="undefined"?t.value:t}function L(e){var t=i.data,n=t.length;for(var r=0;r<n;r++)if(t[r]==e||typeof t[r].value!="undefined"&&t[r].value==e)return r}function A(e){return e%h===0}function O(){return i.position}var o=e("./base");o.call(this,t,r);var u=e("zrender/tool/util"),a=e("zrender/tool/area"),f=this;f.type=t.COMPONENT_TYPE_AXIS_CATEGORY;var l=s.grid,c=f.getZlevelBase(),h,p;f.init=S,f.refresh=x,f.getGap=T,f.getCoord=N,f.getCoordByIndex=C,f.getNameByIndex=k,f.getIndexByName=L,f.isMainAxis=A,f.getPosition=O,S(i,l)}return e("../component").define("categoryAxis",t),t}),r("echarts/component/valueAxis",["require","./base","zrender/tool/util","../component"],function(e){function t(t,n,r,i,s,o){function g(){d=!1,x();if(!d)return;i.splitArea.show&&S(),i.splitLine.show&&E(),i.axisLine.show&&y(),i.axisTick.show&&b(),i.axisLabel.show&&w();for(var e=0,t=f.shapeList.length;e<t;e++)f.shapeList[e].id=r.newShapeId(f.type),r.addShape(f.shapeList[e])}function y(){var e=i.axisLine.lineStyle.width,t=e/2,n={shape:"line",zlevel:c+1,hoverable:!1};switch(i.position){case"left":n.style={xStart:l.getX()-t,yStart:l.getYend()+t,xEnd:l.getX()-t,yEnd:l.getY()-t};break;case"right":n.style={xStart:l.getXend()+t,yStart:l.getYend()+t,xEnd:l.getXend()+t,yEnd:l.getY()-t};break;case"bottom":n.style={xStart:l.getX()-t,yStart:l.getYend()+t,xEnd:l.getXend()+t,yEnd:l.getYend()+t};break;case"top":n.style={xStart:l.getX()-t,yStart:l.getY()-t,xEnd:l.getXend()+t,yEnd:l.getY()-t}}i.name!==""&&(n.style.text=i.name,n.style.textPosition=i.nameLocation,n.style.textFont=f.getFont(i.nameTextStyle),i.nameTextStyle.align&&(n.style.textAlign=i.nameTextStyle.align),i.nameTextStyle.baseline&&(n.style.textBaseline=i.nameTextStyle.baseline),i.nameTextStyle.color&&(n.style.textColor=i.nameTextStyle.color)),n.style.strokeColor=i.axisLine.lineStyle.color;var e=i.axisLine.lineStyle.width;n.style.lineWidth=e,i.position=="left"||i.position=="right"?n.style.xStart=n.style.xEnd=f.subPixelOptimize(n.style.xEnd,e):n.style.yStart=n.style.yEnd=f.subPixelOptimize(n.style.yEnd,e),n.style.lineType=i.axisLine.lineStyle.type,f.shapeList.push(n)}function b(){var e,t=v,n=v.length,r=i.axisTick,s=r.length,o=r.lineStyle.color,u=r.lineStyle.width;if(i.position=="bottom"||i.position=="top"){var a=i.position=="bottom"?r.inside?l.getYend()-s:l.getYend():r.inside?l.getY():l.getY()-s,h;for(var p=0;p<n;p++)h=f.subPixelOptimize(O(t[p]),u),e={shape:"line",zlevel:c,hoverable:!1,style:{xStart:h,yStart:a,xEnd:h,yEnd:a+s,strokeColor:o,lineWidth:u}},f.shapeList.push(e)}else{var d=i.position=="left"?r.inside?l.getX():l.getX()-s:r.inside?l.getXend()-s:l.getXend(),m;for(var p=0;p<n;p++)m=f.subPixelOptimize(O(t[p]),u),e={shape:"line",zlevel:c,hoverable:!1,style:{xStart:d,yStart:m,xEnd:d+s,yEnd:m,strokeColor:o,lineWidth:u}},f.shapeList.push(e)}}function w(){var e,t=v,n=v.length,r=i.axisLabel.rotate,s=i.axisLabel.margin,o=i.axisLabel.textStyle;if(i.position=="bottom"||i.position=="top"){var u,a;i.position=="bottom"?(u=l.getYend()+s,a="top"):(u=l.getY()-s,a="bottom");for(var h=0;h<n;h++)e={shape:"text",zlevel:c,hoverable:!1,style:{x:O(t[h]),y:u,color:typeof o.color=="function"?o.color(t[h]):o.color,text:m[h],textFont:f.getFont(o),textAlign:"center",textBaseline:a}},r&&(e.style.textAlign=r>0?i.position=="bottom"?"right":"left":i.position=="bottom"?"left":"right",e.rotation=[r*Math.PI/180,e.style.x,e.style.y]),f.shapeList.push(e)}else{var p,d;i.position=="left"?(p=l.getX()-s,d="right"):(p=l.getXend()+s,d="left");for(var h=0;h<n;h++)e={shape:"text",zlevel:c,hoverable:!1,style:{x:p,y:O(t[h]),color:typeof o.color=="function"?o.color(t[h]):o.color,text:m[h],textFont:f.getFont(o),textAlign:d,textBaseline:h===0&&i.name!==""?"bottom":h==n-1&&i.name!==""?"top":"middle"}},r&&(e.rotation=[r*Math.PI/180,e.style.x,e.style.y]),f.shapeList.push(e)}}function E(){var e,t=v,n=v.length,r=i.splitLine,s=r.lineStyle.type,o=r.lineStyle.width,u=r.lineStyle.color;u=u instanceof Array?u:[u];var a=u.length;if(i.position=="bottom"||i.position=="top"){var h=l.getY(),p=l.getYend(),d;for(var m=1;m<n-1;m++)d=f.subPixelOptimize(O(t[m]),o),e={shape:"line",zlevel:c,hoverable:!1,style:{xStart:d,yStart:h,xEnd:d,yEnd:p,strokeColor:u[m%a],lineType:s,lineWidth:o}},f.shapeList.push(e)}else{var g=l.getX(),y=l.getXend(),b;for(var m=1;m<n-1;m++)b=f.subPixelOptimize(O(t[m]),o),e={shape:"line",zlevel:c,hoverable:!1,style:{xStart:g,yStart:b,xEnd:y,yEnd:b,strokeColor:u[m%a],lineType:s,lineWidth:o}},f.shapeList.push(e)}}function S(){var e,t=i.splitArea.areaStyle.color;if(t instanceof Array){var n=t.length,r=v,s=v.length;if(i.position=="bottom"||i.position=="top"){var o=l.getY(),u=l.getHeight(),a=l.getX(),h;for(var p=0;p<=s;p++)h=p<s?O(r[p]):l.getXend(),e={shape:"rectangle",zlevel:c,hoverable:!1,style:{x:a,y:o,width:h-a,height:u,color:t[p%n]}},f.shapeList.push(e),a=h}else{var d=l.getX(),m=l.getWidth(),g=l.getYend(),y;for(var p=0;p<=s;p++)y=p<s?O(r[p]):l.getY(),e={shape:"rectangle",zlevel:c,hoverable:!1,style:{x:d,y:y,width:m,height:g-y,color:t[p%n]}},f.shapeList.push(e),g=y}}else e={shape:"rectangle",zlevel:c,hoverable:!1,style:{x:l.getX(),y:l.getY(),width:l.getWidth(),height:l.getHeight(),color:t}},f.shapeList.push(e)}function x(){if(isNaN(i.min-0)||isNaN(i.max-0)){var e,n={},r,u,a,f=s.legend;for(var l=0,c=o.length;l<c;l++){if(o[l].type!=t.CHART_TYPE_LINE&&o[l].type!=t.CHART_TYPE_BAR&&o[l].type!=t.CHART_TYPE_SCATTER&&o[l].type!=t.CHART_TYPE_K)continue;if(f&&!f.isSelected(o[l].name))continue;u=o[l].xAxisIndex||0,a=o[l].yAxisIndex||0;if(i.xAxisIndex!=u&&i.yAxisIndex!=a)continue;var v=o[l].name||"kener";if(!o[l].stack){n[v]=n[v]||[],e=o[l].data;for(var m=0,g=e.length;m<g;m++)r=typeof e[m].value!="undefined"?e[m].value:e[m],o[l].type==t.CHART_TYPE_SCATTER?(i.xAxisIndex!=-1&&n[v].push(r[0]),i.yAxisIndex!=-1&&n[v].push(r[1])):o[l].type==t.CHART_TYPE_K?(n[v].push(r[0]),n[v].push(r[1]),n[v].push(r[2]),n[v].push(r[3])):n[v].push(r)}else{var y="__Magic_Key_Positive__"+o[l].stack,b="__Magic_Key_Negative__"+o[l].stack;n[y]=n[y]||[],n[b]=n[b]||[],n[v]=n[v]||[],e=o[l].data;for(var m=0,g=e.length;m<g;m++){r=typeof e[m].value!="undefined"?e[m].value:e[m];if(r=="-")continue;r-=0,r>=0?typeof n[y][m]!="undefined"?n[y][m]+=r:n[y][m]=r:typeof n[b][m]!="undefined"?n[b][m]+=r:n[b][m]=r,i.scale&&n[v].push(r)}}}for(var l in n){e=n[l];for(var m=0,g=e.length;m<g;m++)if(!isNaN(e[m])){d=!0,h=e[m],p=e[m];break}if(d)break}for(var l in n){e=n[l];for(var m=0,g=e.length;m<g;m++)isNaN(e[m])||(h=Math.min(h,e[m]),p=Math.max(p,e[m]))}h=isNaN(i.min-0)?h-Math.abs(h*i.boundaryGap[0]):i.min-0,p=isNaN(i.max-0)?p+Math.abs(p*i.boundaryGap[1]):i.max-0,h==p&&(p===0?p=i.power>0?i.power:1:p>0?h=p/i.splitNumber:p/=i.splitNumber),T(i.scale)}else d=!0,h=i.min-0,p=i.max-0,customerDefine=!0,N()}function T(e){var t=i.splitNumber,n=i.precision,r,s;n===0?s=i.power>1?i.power:1:(s=Math.pow(10,n),h*=s,p*=s,s=i.power);var o;if(h>=0&&p>=0){if(!e){while(p/s<t&&s!=1)s/=10;h=0}else{while(h<s&&s!=1)s/=10;n===0&&(h=Math.floor(h/s)*s,p=Math.ceil(p/s)*s)}s=s>1?s/10:1,o=p-h,r=Math.ceil(o/t/s)*s,p=h+r*t}else if(h<=0&&p<=0){s=-s;if(!e){while(h/s<t&&s!=-1)s/=10;p=0}else{while(p>s&&s!=-1)s/=10;n===0&&(h=Math.ceil(h/s)*s,p=Math.floor(p/s)*s)}s=s<-1?s/10:-1,o=h-p,r=-Math.ceil(o/t/s)*s,h=-r*t+p}else{o=p-h;while(o/s<t&&s!=1)s/=10;var u=Math.round(p/o*t);u-=u==t?1:0,u+=u===0?1:0,r=Math.ceil(Math.max(p/u,h/(u-t))/s)*s,p=r*u,h=r*(u-t)}v=[];for(var a=0;a<=t;a++)v.push(h+r*a);if(n!==0){s=Math.pow(10,n),h=(h/s).toFixed(n)-0,p=(p/s).toFixed(n)-0;for(var a=0;a<=t;a++)v[a]=(v[a]/s).toFixed(n)-0}C()}function N(){var e=i.splitNumber,t=i.precision,n=(p-h)/e;v=[];for(var r=0;r<=e;r++)v.push((h+n*r).toFixed(t)-0);C()}function C(){m=[];var e=i.axisLabel.formatter;if(e)for(var t=0,n=v.length;t<n;t++)typeof e=="function"?m.push(e(v[t])):typeof e=="string"&&m.push(e.replace("{value}",v[t]));else for(var t=0,n=v.length;t<n;t++)m.push(f.numAddCommas(v[t]))}function k(){return x(),{min:h,max:p}}function L(e,t,n){if(!n||n.length===0)return;l=t,A(e,n)}function A(e,n){e&&(i=f.reformOption(e),i.axisLabel.textStyle=a.merge(i.axisLabel.textStyle||{},t.textStyle,{overwrite:!1,recursive:!0}),i.axisLabel.textStyle=a.merge(i.axisLabel.textStyle||{},t.textStyle,{overwrite:!1,recursive:!0}),o=n),r&&(f.clear(),g())}function O(e){e=e<h?h:e,e=e>p?p:e;var t=p-h,n,r;return i.position=="left"||i.position=="right"?(n=l.getHeight(),r=l.getYend()-(e-h)/t*n):(n=l.getWidth(),r=(e-h)/t*n+l.getX()),r}function M(e){return i.position=="left"||i.position=="right"?Math.abs(e/(p-h)*l.getHeight()):Math.abs(e/(p-h)*l.getWidth())}function _(){return i.position}var u=e("./base");u.call(this,t,r);var a=e("zrender/tool/util"),f=this;f.type=t.COMPONENT_TYPE_AXIS_VALUE;var l=s.grid,c=f.getZlevelBase(),h,p,d,v,m;f.init=L,f.refresh=A,f.getExtremum=k,f.getCoord=O,f.getCoordSize=M,f.getPosition=_,L(i,l,o)}return e("../component").define("valueAxis",t),t}),r("echarts/component/axis",["require","./base","./categoryAxis","./valueAxis","../component"],function(e){function t(t,n,r,i,s,o){function l(e){!e||e instanceof Array&&e.length===0?e=[{type:t.COMPONENT_TYPE_AXIS_VALUE}]:e instanceof Array||(e=[e]),e.length>2&&(e=[e[0],e[1]]);if(o=="xAxis"){if(!e[0].position||e[0].position!="bottom"&&e[0].position!="top")e[0].position="bottom";e.length>1&&(e[1].position=e[0].position=="bottom"?"top":"bottom");for(var n=0,r=e.length;n<r;n++)e[n].type=e[n].type||"category",e[n].xAxisIndex=n,e[n].yAxisIndex=-1}else{if(!e[0].position||e[0].position!="left"&&e[0].position!="right")e[0].position="left";e.length>1&&(e[1].position=e[0].position=="left"?"right":"left");for(var n=0,r=e.length;n<r;n++)e[n].type=e[n].type||"value",e[n].xAxisIndex=-1,e[n].yAxisIndex=n}return e}function c(u,l,c){s=l,o=c,a.clear();var h;o=="xAxis"?(i.xAxis=a.reformOption(u.xAxis),h=i.xAxis):(i.yAxis=a.reformOption(u.yAxis),h=i.yAxis);var p=e("./categoryAxis"),d=e("./valueAxis");for(var v=0,m=h.length;v<m;v++)f.push(h[v].type=="category"?new p(t,n,r,h[v],s):new d(t,n,r,h[v],s,i.series))}function h(e){var t,n;e&&(o=="xAxis"?(i.xAxis=a.reformOption(e.xAxis),t=i.xAxis):(i.yAxis=l(e.yAxis),t=i.yAxis),n=e.series);for(var r=0,s=f.length;r<s;r++)f[r].refresh&&f[r].refresh(t?t[r]:!1,n)}function p(e){return f[e]}function d(){for(var e=0,t=f.length;e<t;e++)f[e].dispose&&f[e].dispose();f=[]}var u=e("./base");u.call(this,t,r);var a=this;a.type=t.COMPONENT_TYPE_AXIS;var f=[];a.clear=d,a.reformOption=l,a.init=c,a.refresh=h,a.getAxis=p,c(i,s,o)}return e("../component").define("axis",t),t}),r("echarts/component/grid",["require","./base","../component"],function(e){function t(t,n,r,i){function d(e){i=e,i.grid=o.reformOption(i.grid);var t=i.grid;h=r.getWidth(),p=r.getHeight(),a=o.parsePercent(t.x,h),f=o.parsePercent(t.y,p);var n=o.parsePercent(t.x2,h),s=o.parsePercent(t.y2,p);typeof t.width=="undefined"?l=h-a-n:l=o.parsePercent(t.width,h),typeof t.height=="undefined"?c=p-f-s:c=o.parsePercent(t.height,p),a=o.subPixelOptimize(a,t.borderWidth),f=o.subPixelOptimize(f,t.borderWidth),o.shapeList.push({shape:"rectangle",id:r.newShapeId("grid"),zlevel:u,hoverable:!1,style:{x:a,y:f,width:l,height:c,brushType:t.borderWidth>0?"both":"fill",color:t.backgroundColor,strokeColor:t.borderColor,lineWidth:t.borderWidth}}),r.addShape(o.shapeList[0])}function v(){return a}function m(){return f}function g(){return l}function y(){return c}function b(){return a+l}function w(){return f+c}function E(){return{x:a,y:f,width:l,height:c}}function S(e){if(h!=r.getWidth()||p!=r.getHeight()||e)o.clear(),d(e||i)}var s=e("./base");s.call(this,t,r);var o=this;o.type=t.COMPONENT_TYPE_GRID;var u=o.getZlevelBase(),a,f,l,c,h,p;o.init=d,o.getX=v,o.getY=m,o.getWidth=g,o.getHeight=y,o.getXend=b,o.getYend=w,o.getArea=E,o.refresh=S,d(i)}return e("../component").define("grid",t),t}),r("echarts/component/dataZoom",["require","./base","../component","zrender/tool/util","zrender/tool/util","zrender/tool/util","../component"],function(e){function t(t,n,r,i,s){function S(){k(),L(),A(),O();for(var e=0,t=u.shapeList.length;e<t;e++)u.shapeList[e].id=r.newShapeId(u.type),r.addShape(u.shapeList[e]);P()}function x(){var e,t,n,i,o=s.grid;return f.orient=="horizontal"?(n=f.width||o.getWidth(),i=f.height||l,e=typeof f.x!="undefined"?f.x:o.getX(),t=typeof f.y!="undefined"?f.y:r.getHeight()-i-2):(n=f.width||l,i=f.height||o.getHeight(),e=typeof f.x!="undefined"?f.x:2,t=typeof f.y!="undefined"?f.y:o.getY()),{x:e,y:t,width:n,height:i}}function T(){var e=i.series,n=i.xAxis;n&&!(n instanceof Array)&&(n=[n],i.xAxis=n);var r=i.yAxis;r&&!(r instanceof Array)&&(r=[r],i.yAxis=r);var s=[],o,u,a=f.xAxisIndex;if(n&&typeof a=="undefined"){o=[];for(var l=0,c=n.length;l<c;l++)(n[l].type=="category"||typeof n[l].type=="undefined")&&o.push(l)}else a instanceof Array?o=a:typeof a!="undefined"?o=[a]:o=[];a=f.yAxisIndex;if(r&&typeof a=="undefined"){u=[];for(var l=0,c=r.length;l<c;l++)r[l].type=="category"&&u.push(l)}else a instanceof Array?u=a:typeof a!="undefined"?u=[a]:u=[];for(var l=0,c=e.length;l<c;l++){if(e[l].type!=t.CHART_TYPE_LINE&&e[l].type!=t.CHART_TYPE_BAR&&e[l].type!=t.CHART_TYPE_SCATTER&&e[l].type!=t.CHART_TYPE_K)continue;for(var p=0,d=o.length;p<d;p++)if(o[p]==(e[l].xAxisIndex||0)){s.push(l);break}for(var p=0,d=u.length;p<d;p++)if(u[p]==(e[l].yAxisIndex||0)){s.push(l);break}e[l].type==t.CHART_TYPE_SCATTER&&typeof f.xAxisIndex=="undefined"&&typeof f.yAxisIndex=="undefined"&&s.push(l)}var v=typeof f.start!="undefined"&&f.start>=0&&f.start<=100?f.start:0,m=typeof f.end!="undefined"&&f.end>=0&&f.end<=100?f.end:100;v>m&&(v+=m,m=v-m,v-=m);var g=Math.round((m-v)/100*(f.orient=="horizontal"?h.width:h.height));return{start:v,end:m,start2:0,end2:100,size:g,xAxisIndex:o,yAxisIndex:u,seriesIndex:s}}function N(){E={xAxis:{},yAxis:{},series:{}};var e=i.xAxis,n=p.xAxisIndex;for(var r=0,s=n.length;r<s;r++)E.xAxis[n[r]]=e[n[r]].data;var o=i.yAxis,u=p.yAxisIndex;for(var r=0,s=u.length;r<s;r++)E.yAxis[u[r]]=o[u[r]].data;var a=i.series,f=p.seriesIndex,l;for(var r=0,s=f.length;r<s;r++)l=a[f[r]],E.series[f[r]]=l.data,l.type==t.CHART_TYPE_SCATTER&&C(f[r])}function C(n){p.scatterMap=p.scatterMap||{},p.scatterMap[n]=p.scatterMap[n]||{};var r=e("../component"),o=e("zrender/tool/util"),u=r.get("axis"),a=o.clone(i.xAxis);a instanceof Array?(a[0].type="value",a[1]&&(a[1].type="value")):a.type="value";var f=new u(t,null,!1,{xAxis:a,series:i.series},s,"xAxis"),l=i.series[n].xAxisIndex||0;p.scatterMap[n].x=f.getAxis(l).getExtremum(),f.dispose(),a=o.clone(i.yAxis),a instanceof Array?(a[0].type="value",a[1]&&(a[1].type="value")):a.type="value",f=new u(t,null,!1,{yAxis:a,series:i.series},s,"yAxis"),l=i.series[n].yAxisIndex||0,p.scatterMap[n].y=f.getAxis(l).getExtremum(),f.dispose()}function k(){u.shapeList.push({shape:"rectangle",zlevel:a,hoverable:!1,style:{x:h.x,y:h.y,width:h.width,height:h.height,color:f.backgroundColor}});var e=0,n=E.xAxis,r=p.xAxisIndex;for(var s=0,o=r.length;s<o;s++)e=Math.max(e,n[r[s]].length);var l=E.yAxis,c=p.yAxisIndex;for(var s=0,o=c.length;s<o;s++)e=Math.max(e,l[c[s]].length);var d=p.seriesIndex[0],v=E.series[d],m=Number.MIN_VALUE,g=Number.MAX_VALUE,y;for(var s=0,o=v.length;s<o;s++)y=typeof v[s]!="undefined"?typeof v[s].value!="undefined"?v[s].value:v[s]:0,i.series[d].type==t.CHART_TYPE_K&&(y=y[1]),isNaN(y)&&(y=0),m=Math.max(m,y),g=Math.min(g,y);var b=[],w=h.width/e,S=h.height/e;for(var s=0,o=e;s<o;s++)y=typeof v[s]!="undefined"?typeof v[s].value!="undefined"?v[s].value:v[s]:0,i.series[d].type==t.CHART_TYPE_K&&(y=y[1]),isNaN(y)&&(y=0),f.orient=="horizontal"?b.push([h.x+w*s,h.y+h.height-5-Math.round((y-g)/(m-g)*(h.height-10))]):b.push([h.x+5+Math.round((y-g)/(m-g)*(h.width-10)),h.y+S*s]);f.orient=="horizontal"?(b.push([h.x+h.width,h.y+h.height]),b.push([h.x,h.y+h.height])):(b.push([h.x,h.y+h.height]),b.push([h.x,h.y])),u.shapeList.push({shape:"polygon",zlevel:a,style:{pointList:b,color:f.dataBackgroundColor},hoverable:!1})}function L(){d={shape:"rectangle",zlevel:a,draggable:!0,ondrift:M,ondragend:F,_type:"filler"},f.orient=="horizontal"?d.style={x:h.x+Math.round(p.start/100*h.width)+c,y:h.y,width:p.size-c*2,height:h.height,color:f.fillerColor,text:":::",textPosition:"inside"}:d.style={x:h.x,y:h.y+Math.round(p.start/100*h.height)+c,width:h.width,height:p.size-c*2,color:f.fillerColor,text:"::",textPosition:"inside"},d.highlightStyle={brushType:"fill",color:"rgba(0,0,0,0)"},u.shapeList.push(d)}function A(){var t=e("zrender/tool/util");v={shape:"icon",zlevel:a,draggable:!0,style:{iconType:"rectangle",x:h.x,y:h.y,width:c,height:c,color:f.handleColor,text:"=",textPosition:"inside"},highlightStyle:{brushType:"fill"},ondrift:M,ondragend:F},f.orient=="horizontal"?(v.style.height=h.height,m=t.clone(v),v.style.x=d.style.x-c,m.style.x=d.style.x+d.style.width):(v.style.width=h.width,m=t.clone(v),v.style.y=d.style.y-c,m.style.y=d.style.y+d.style.height),u.shapeList.push(v),u.shapeList.push(m)}function O(){var t=e("zrender/tool/util"),n=u.subPixelOptimize(h.x,1),r=u.subPixelOptimize(h.y,1);g={shape:"rectangle",zlevel:a,hoverable:!1,style:{x:n,y:r,width:h.width-(n>h.x?1:0),height:h.height-(r>h.y?1:0),lineWidth:1,brushType:"stroke",strokeColor:f.handleColor}},y=t.clone(g),u.shapeList.push(g),u.shapeList.push(y);return}function M(e,t,n){f.zoomLock&&(e=d);var r=e._type=="filler"?c:0;return f.orient=="horizontal"?e.style.x+t-r<=h.x?e.style.x=h.x+r:e.style.x+t+e.style.width+r>=h.x+h.width?e.style.x=h.x+h.width-e.style.width-r:e.style.x+=t:e.style.y+n-r<=h.y?e.style.y=h.y+r:e.style.y+n+e.style.height+r>=h.y+h.height?e.style.y=h.y+h.height-e.style.height-r:e.style.y+=n,e._type=="filler"?_():D(),f.realtime?B():(clearTimeout(b),b=setTimeout(B,200)),!0}function _(){f.orient=="horizontal"?(v.style.x=d.style.x-c,m.style.x=d.style.x+d.style.width,p.start=Math.floor((v.style.x-h.x)/h.width*100),p.end=Math.ceil((m.style.x+c-h.x)/h.width*100)):(v.style.y=d.style.y-c,m.style.y=d.style.y+d.style.height,p.start=Math.floor((v.style.y-h.y)/h.height*100),p.end=Math.ceil((m.style.y+c-h.y)/h.height*100)),r.modShape(v.id,v),r.modShape(m.id,m),P(),r.refresh()}function D(){var e,t;f.orient=="horizontal"?(e=v.style.x,t=m.style.x,d.style.x=Math.min(e,t)+c,d.style.width=Math.abs(e-t)-c,p.start=Math.floor((Math.min(e,t)-h.x)/h.width*100),p.end=Math.ceil((Math.max(e,t)+c-h.x)/h.width*100)):(e=v.style.y,t=m.style.y,d.style.y=Math.min(e,t)+c,d.style.height=Math.abs(e-t)-c,p.start=Math.floor((Math.min(e,t)-h.y)/h.height*100),p.end=Math.ceil((Math.max(e,t)+c-h.y)/h.height*100)),r.modShape(d.id,d),P(),r.refresh()}function P(){f.orient=="horizontal"?(g.style.width=d.style.x-h.x,y.style.x=d.style.x+d.style.width,y.style.width=h.x+h.width-y.style.x):(g.style.height=d.style.y-h.y,y.style.y=d.style.y+d.style.height,y.style.height=h.y+h.height-y.style.y),r.modShape(g.id,g),r.modShape(y.id,y)}function H(){if(!f.show)return;f.orient=="horizontal"?(v.style.x=h.x+p.start/100*h.width,m.style.x=h.x+p.end/100*h.width-c,d.style.x=v.style.x+c,d.style.width=m.style.x-v.style.x-c):(v.style.y=h.y+p.start/100*h.height,m.style.y=h.y+p.end/100*h.height-c,d.style.y=v.style.y+c,d.style.height=m.style.y-v.style.y-c),r.modShape(v.id,v),r.modShape(m.id,m),r.modShape(d.id,d),P(),r.refresh()}function B(e){var r,s,o,u,a;for(var l in E){r=E[l];for(var c in r)a=r[c],u=a.length,s=Math.floor(p.start/100*u),o=Math.ceil(p.end/100*u),i[l][c].type!=t.CHART_TYPE_SCATTER?i[l][c].data=a.slice(s,o):i[l][c].data=j(c,a)}!w&&(f.realtime||e)&&n.dispatch(t.EVENT.DATA_ZOOM,null,{zoom:p}),f.start=p.start,f.end=p.end}function j(e,t){var n=[],r=p.scatterMap[e],i,s,o,u,a;f.orient=="horizontal"?(i=r.x.max-r.x.min,s=p.start/100*i+r.x.min,o=p.end/100*i+r.x.min,i=r.y.max-r.y.min,u=p.start2/100*i+r.y.min,a=p.end2/100*i+r.y.min):(i=r.x.max-r.x.min,s=p.start2/100*i+r.x.min,o=p.end2/100*i+r.x.min,i=r.y.max-r.y.min,u=p.start/100*i+r.y.min,a=p.end/100*i+r.y.min);var l;for(var c=0,h=t.length;c<h;c++)l=t[c].value||t[c],l[0]>=s&&l[0]<=o&&l[1]>=u&&l[1]<=a&&n.push(t[c]);return n}function F(){u.isDragend=!0}function I(e,r){if(!u.isDragend||!e.target)return;B(),r.dragOut=!0,r.dragIn=!0,!w&&!f.realtime&&n.dispatch(t.EVENT.DATA_ZOOM,null,{zoom:p}),r.needRefresh=!1,u.isDragend=!1;return}function q(e,t){t.needRefresh=!0;return}function R(e){f.start=p.start=e.start,f.end=p.end=e.end,f.start2=p.start2=e.start2,f.end2=p.end2=e.end2,H(),B(!0);return}function U(e){if(!e)return f.start=f.start2=p.start=p.start2=0,f.end=f.end2=p.end=p.end2=100,H(),B(!0),p;var t=s.grid.getArea(),n={x:e.x,y:e.y,width:e.width,height:e.height};n.width<0&&(n.x+=n.width,n.width=-n.width),n.height<0&&(n.y+=n.height,n.height=-n.height);if(n.x>t.x+t.width||n.y>t.y+t.height)return!1;n.x<t.x&&(n.x=t.x),n.x+n.width>t.x+t.width&&(n.width=t.x+t.width-n.x),n.y+n.height>t.y+t.height&&(n.height=t.y+t.height-n.y);var r,i=(n.x-t.x)/t.width,o=1-(n.x+n.width-t.x)/t.width,u=1-(n.y+n.height-t.y)/t.height,a=(n.y-t.y)/t.height;return f.orient=="horizontal"?(r=p.end-p.start,p.start+=r*i,p.end-=r*o,r=p.end2-p.start2,p.start2+=r*u,p.end2-=r*a):(r=p.end-p.start,p.start+=r*u,p.end-=r*a,r=p.end2-p.start2,p.start2+=r*i,p.end2-=r*o),f.start=p.start,f.end=p.end,f.start2=p.start2,f.end2=p.end2,H(),B(!0),p}function z(e,t){var n,r=E.series,i=e.series,s;for(var o=0,u=i.length;o<u;o++){s=i[o].data,r[o]?n=Math.floor(p.start/100*r[o].length):n=0;for(var a=0,f=s.length;a<f;a++)t.series[o].data[a+n]=s[a],r[o]&&(r[o][a+n]=s[a])}}function W(e){w=e}function X(e,t){if(!E)return t;var n=E.series;return n[e]?Math.floor(p.start/100*n[e].length)+t:-1}function V(e){i=e,i.dataZoom=u.reformOption(i.dataZoom),f=i.dataZoom,u.clear();if(i.dataZoom.show||u.query(i,"toolbox.show")&&u.query(i,"toolbox.feature.dataZoom.show"))h=x(),p=T(),N();i.dataZoom.show&&(S(),B())}function $(){u.clear();if(i.dataZoom.show||u.query(i,"toolbox.show")&&u.query(i,"toolbox.feature.dataZoom.show"))h=x(),p=T();i.dataZoom.show&&S()}var o=e("./base");o.call(this,t,r);var u=this;u.type=t.COMPONENT_TYPE_DATAZOOM;var a=u.getZlevelBase(),f,l=28,c=8,h,p,d,v,m,g,y,b,w=!1,E;u.init=V,u.resize=$,u.syncBackupData=z,u.absoluteZoom=R,u.rectZoom=U,u.ondragend=I,u.ondataZoom=q,u.silence=W,u.getRealDataIndex=X,V(i)}return e("../component").define("dataZoom",t),t}),r("echarts/component/legend",["require","./base","zrender/tool/util","zrender/tool/area","zrender/tool/color","zrender/shape","zrender/shape","zrender/shape","zrender/shape","zrender/shape","../component"],function(e){function t(t,r,i,s,o){function w(){d=T(),x(),E();for(var e=0,t=c.shapeList.length;e<t;e++)c.shapeList[e].id=i.newShapeId(c.type),i.addShape(c.shapeList[e])}function E(){var e=h.data,t=e.length,n,r,s,o,u=h.textStyle,l,v,m=i.getWidth(),y=i.getHeight(),b=d.x,w=d.y,E=h.itemWidth,x=h.itemHeight,T=h.itemGap,L;h.orient=="vertical"&&h.x=="right"&&(b=d.x+d.width-E);for(var A=0;A<t;A++){l=a.merge(e[A].textStyle||{},u,{overwrite:!1}),v=c.getFont(l),n=e[A].name||e[A];if(n===""){h.orient=="horizontal"?(b=d.x,w+=x+T):(h.x=="right"?b-=d.maxWidth+T:b+=d.maxWidth+T,w=d.y);continue}r=N(n).type,L=M(n),h.orient=="horizontal"?m-b<200&&E+5+f.getTextWidth(n,v)+(A==t-1||e[A+1]===""?0:T)>=m-b&&(b=d.x,w+=x+T):y-w<200&&x+(A==t-1||e[A+1]===""?0:T)>=y-w&&(h.x=="right"?b-=d.maxWidth+T:b+=d.maxWidth+T,w=d.y),s=C(b,w,E,x,g[n]?L:"#ccc",r,L),s._name=n,h.selectedMode&&(s.onclick=k),c.shapeList.push(s),o={shape:"text",zlevel:p,style:{x:b+E+5,y:w,color:g[n]?l.color==="auto"?L:l.color:"#ccc",text:n,textFont:v,textBaseline:"top"},highlightStyle:{color:L,brushType:"fill"},hoverable:!!h.selectedMode,clickable:!!h.selectedMode},h.orient=="vertical"&&h.x=="right"&&(o.style.x-=E+10,o.style.textAlign="right"),o._name=n,h.selectedMode&&(o.onclick=k),c.shapeList.push(o),h.orient=="horizontal"?b+=E+5+f.getTextWidth(n,v)+T:w+=x+T}h.orient=="horizontal"&&h.x=="center"&&w!=d.y&&S()}function S(){var e=[],t=d.x;for(var n=2,r=c.shapeList.length;n<r;n++)c.shapeList[n].style.x==t?e.push((d.width-(c.shapeList[n-1].style.x+f.getTextWidth(c.shapeList[n-1].style.text,c.shapeList[n-1].style.textFont)-t))/2):n==r-1&&e.push((d.width-(c.shapeList[n].style.x+f.getTextWidth(c.shapeList[n].style.text,c.shapeList[n].style.textFont)-t))/2);var i=-1;for(var n=1,r=c.shapeList.length;n<r;n++){c.shapeList[n].style.x==t&&i++;if(e[i]===0)continue;c.shapeList[n].style.x+=e[i]}}function x(){var e=h.padding[0],t=h.padding[1],n=h.padding[2],r=h.padding[3];c.shapeList.push({shape:"rectangle",zlevel:p,hoverable:!1,style:{x:d.x-r,y:d.y-e,width:d.width+r+t,height:d.height+e+n,brushType:h.borderWidth===0?"fill":"both",color:h.backgroundColor,strokeColor:h.borderColor,lineWidth:h.borderWidth}})}function T(){var e=h.data,t=e.length,n=h.itemGap,r=h.itemWidth+5,s=h.itemHeight,o=h.textStyle,u=c.getFont(o),l=0,p=0,d=h.padding,v=i.getWidth()-d[1]-d[3],m=i.getHeight()-d[0]-d[2],g=0,y=0;if(h.orient=="horizontal"){p=s;for(var b=0;b<t;b++){if(e[b]===""){g-=n,g>v?(l=v,p+=s+n):l=Math.max(l,g),p+=s+n,g=0;continue}dataTextStyle=a.merge(e[b].textStyle||{},o,{overwrite:!1}),g+=r+f.getTextWidth(e[b].name||e[b],e[b].textStyle?c.getFont(a.merge(e[b].textStyle||{},o,{overwrite:!1})):u)+n}p=Math.max(p,s),g-=n,g>v?(l=v,p+=s+n):l=Math.max(l,g)}else{for(var b=0;b<t;b++)y=Math.max(y,f.getTextWidth(e[b].name||e[b],e[b].textStyle?c.getFont(a.merge(e[b].textStyle||{},o,{overwrite:!1})):u));y+=r,l=y;for(var b=0;b<t;b++){if(e[b]===""){g-=n,g>m?(p=m,l+=y+n):p=Math.max(p,g),l+=y+n,g=0;continue}g+=s+n}l=Math.max(l,y),g-=n,g>m?(p=m,l+=y+n):p=Math.max(p,g)}v=i.getWidth(),m=i.getHeight();var w;switch(h.x){case"center":w=Math.floor((v-l)/2);break;case"left":w=h.padding[3]+h.borderWidth;break;case"right":w=v-l-h.padding[1]-h.padding[3]-h.borderWidth*2;break;default:w=h.x-0,w=isNaN(w)?0:w}var E;switch(h.y){case"top":E=h.padding[0]+h.borderWidth;break;case"bottom":E=m-p-h.padding[0]-h.padding[2]-h.borderWidth*2;break;case"center":E=Math.floor((m-p)/2);break;default:E=h.y-0,E=isNaN(E)?0:E}return{x:w,y:E,width:l,height:p,maxWidth:y}}function N(e){var n=s.series,r;for(var i=0,o=n.length;i<o;i++){if(n[i].name==e)return{type:n[i].type,series:n[i],seriesIndex:i,data:null,dataIndex:-1};if(n[i].type==t.CHART_TYPE_PIE||n[i].type==t.CHART_TYPE_RADAR||n[i].type==t.CHART_TYPE_CHORD||n[i].type==t.CHART_TYPE_FORCE){r=n[i].type!=t.CHART_TYPE_FORCE?n[i].data:n[i].categories;for(var u=0,a=r.length;u<a;u++)if(r[u].name==e)return{type:n[i].type,series:n[i],seriesIndex:i,data:r[u],dataIndex:u}}}return{type:"bar",series:null,seriesIndex:-1,data:null,dataIndex:-1}}function C(e,n,r,i,s,o,u){var a=s==="#ccc"?u:typeof s=="string"&&s!="#ccc"?l.lift(s,-0.3):s,f={shape:"icon",zlevel:p,style:{iconType:"legendicon"+(o!=t.CHART_TYPE_CHORD?o:t.CHART_TYPE_PIE),x:e,y:n,width:r,height:i,color:s,strokeColor:s,lineWidth:2},highlightStyle:{color:a,strokeColor:a,lineWidth:1},hoverable:h.selectedMode,clickable:h.selectedMode};switch(o){case"line":f.style.brushType="stroke",f.highlightStyle.lineWidth=3;break;case"radar":case"scatter":f.highlightStyle.lineWidth=3;break;case"k":f.style.brushType="both",f.highlightStyle.lineWidth=3,f.highlightStyle.color=f.style.color=c.query(t,"k.itemStyle.normal.color")||"#fff",f.style.strokeColor=s!="#ccc"?c.query(t,"k.itemStyle.normal.lineStyle.color")||"#ff3200":s}return f}function k(e){var n=e.target._name;if(h.selectedMode==="single")for(var i in g)g[i]=!1;g[n]=!g[n],r.dispatch(t.EVENT.LEGEND_SELECTED,e.event,{selected:g,target:n})}function L(e){if(!c.query(e,"legend.data"))return;s=e,s.legend=c.reformOption(s.legend),s.legend.padding=c.reformCssArray(s.legend.padding),h=s.legend,c.clear(),g={};var n=h.data||[],r,i,u,a;for(var f=0,l=n.length;f<l;f++){r=n[f].name||n[f];if(r==="")continue;i=N(r),i.series?(!i.data||i.type!=t.CHART_TYPE_PIE&&i.type!=t.CHART_TYPE_FORCE?a=[i.series]:a=[i.data,i.series],u=c.getItemStyleColor(c.deepQuery(a,"itemStyle.normal.color"),i.seriesIndex,i.dataIndex,i.data),u&&i.type!=t.CHART_TYPE_K&&O(r,u),g[r]=!0):g[r]=!1}if(o)for(var p in o)g[p]=o[p];w()}function A(e){if(e){s=e,s.legend=c.reformOption(s.legend),s.legend.padding=c.reformCssArray(s.legend.padding);if(s.legend.selected)for(var t in s.legend.selected)g[t]=s.legend.selected[t]}h=s.legend,c.clear(),w()}function O(e,t){m[e]=t}function M(e){return m[e]||(m[e]=i.getColor(v++)),m[e]}function _(e){return m[e]?m[e]:!1}function D(e,t){h.data.push(e),O(e,t),g[e]=!0}function P(e){var t=h.data,n=[],r=!1;for(var i=0,s=t.length;i<s;i++){if(!r&&t[i]==e){r=!0;continue}n.push(t[i])}h.data=n}function H(e){if(typeof e=="undefined")return;var t;for(var n=0,r=c.shapeList.length;n<r;n++){t=c.shapeList[n];if(t._name==e&&t.shape!="text")return t}}function B(e,t){var n;for(var r=0,s=c.shapeList.length;r<s;r++)n=c.shapeList[r],n._name==e&&n.shape!="text"&&(g[e]||(t.style.color="#ccc",t.style.strokeColor="#ccc"),i.modShape(n.id,t))}function j(e){return typeof g[e]!="undefined"?g[e]:!0}function F(){return g}function I(e,t){var n=e.selected;for(var r in g)g[r]!=n[r]&&(t.needRefresh=!0),g[r]=n[r];return}var u=e("./base");u.call(this,t,i);var a=e("zrender/tool/util"),f=e("zrender/tool/area"),l=e("zrender/tool/color"),c=this;c.type=t.COMPONENT_TYPE_LEGEND;var h,p=c.getZlevelBase(),d={},v=0,m={},g={},y=e("zrender/shape").get("icon");for(var b in n)y.define("legendicon"+b,n[b]);c.init=L,c.refresh=A,c.setColor=O,c.getColor=M,c.hasColor=_,c.add=D,c.del=P,c.getItemShape=H,c.setItemShape=B,c.isSelected=j,c.getSelectedMap=F,c.onlegendSelected=I,L(s)}var n={line:function(e,t){var n=t.height/2;e.moveTo(t.x,t.y+n),e.lineTo(t.x+t.width,t.y+n)},pie:function(t,n){var r=n.x,i=n.y,s=n.width,o=n.height,u=e("zrender/shape").get("sector");u.buildPath(t,{x:r+s/2,y:i+o+2,r:o+2,r0:6,startAngle:45,endAngle:135})},chord:function(t,n){var r=n.x,i=n.y,s=n.width,o=n.height,u=e("zrender/shape").get("beziercurve");t.moveTo(r,i+o),u.buildPath(t,{xStart:r,yStart:i+o,cpX1:r+s,cpY1:i+o,cpX2:r,cpY2:i+4,xEnd:r+s,yEnd:i+4}),t.lineTo(r+s,i),u.buildPath(t,{xStart:r+s,yStart:i,cpX1:r,cpY1:i,cpX2:r+s,cpY2:i+o-4,xEnd:r,yEnd:i+o-4}),t.lineTo(r,i+o)},k:function(t,n){var r=n.x,i=n.y,s=n.width,o=n.height,u=e("zrender/shape").get("candle");u.buildPath(t,{x:r+s/2,y:[i+1,i+1,i+o-6,i+o],width:s-6})},bar:function(e,t){var n=t.x,r=t.y+1,i=t.width,s=t.height-2,o=3;e.moveTo(n+o,r),e.lineTo(n+i-o,r),e.quadraticCurveTo(n+i,r,n+i,r+o),e.lineTo(n+i,r+s-o),e.quadraticCurveTo(n+i,r+s,n+i-o,r+s),e.lineTo(n+o,r+s),e.quadraticCurveTo(n,r+s,n,r+s-o),e.lineTo(n,r+o),e.quadraticCurveTo(n,r,n+o,r)},force:function(t,n){e("zrender/shape").get("icon").get("circle")(t,n)},radar:function(e,t){var n=6,r=t.x+t.width/2,i=t.y+t.height/2,s=t.height/2,o=2*Math.PI/n,u=-Math.PI/2,a=r+s*Math.cos(u),f=i+s*Math.sin(u);e.moveTo(a,f),u+=o;for(var l=0,c=n-1;l<c;l++)e.lineTo(r+s*Math.cos(u),i+s*Math.sin(u)),u+=o;e.lineTo(a,f)}};return e("../component").define("legend",t),t}),r("echarts/util/shape/handlePolygon",["require","zrender/tool/matrix","zrender/shape","zrender/shape/base","zrender/shape"],function(e){function n(){this.type="handlePolygon"}var t=e("zrender/tool/matrix");return n.prototype={buildPath:function(t,n){e("zrender/shape").get("polygon").buildPath(t,n);return},isCover:function(e,n,r){if(e.__needTransform&&e._transform){var i=[];t.invert(i,e._transform);var s=[n,r];t.mulVector(s,i,[n,r,1]),n==s[0]&&r==s[1]&&(Math.abs(e.rotation[0])>1e-4||Math.abs(e.position[0])>1e-4||Math.abs(e.position[1])>1e-4||Math.abs(e.scale[0]-1)>1e-4||Math.abs(e.scale[1]-1)>1e-4?e.__needTransform=!0:e.__needTransform=!1),n=s[0],r=s[1]}var o=e.style.rect;return n>=o.x&&n<=o.x+o.width&&r>=o.y&&r<=o.y+o.height?!0:!1}},e("zrender/shape/base").derive(n),e("zrender/shape").define("handlePolygon",new n),n}),r("echarts/component/dataRange",["require","./base","zrender/tool/area","zrender/tool/color","zrender/tool/color","../util/shape/handlePolygon","../component"],function(e){function t(t,n,r,i){function T(){l=M(),O(),a.splitNumber<=0||a.calculable?C():N();for(var e=0,t=u.shapeList.length;e<t;e++)u.shapeList[e].id=r.newShapeId(u.type),r.addShape(u.shapeList[e]);j()}function N(){var e=S,t=e.length,n,r,i,s=u.getFont(a.textStyle),c=l.x,h=l.y,p=a.itemWidth,d=a.itemHeight,v=a.itemGap,m=o.getTextHeight("国",s),g;a.orient=="vertical"&&a.x=="right"&&(c=l.x+l.width-p);var y=!0;a.text&&(y=!1,a.text[0]&&(i=_(c,h,a.text[0]),a.orient=="horizontal"?c+=o.getTextWidth(a.text[0],s)+b:(h+=m+b,i.style.y+=m/2+b,i.style.textBaseline="bottom"),u.shapeList.push(i)));for(var E=0;E<t;E++)n=e[E],g=X((t-E)*w+a.min),r=D(c,h,p,d,x[E]?g:"#ccc"),r._idx=E,r.onclick=U,u.shapeList.push(r),y&&(i={shape:"text",zlevel:f,style:{x:c+p+5,y:h,color:x[E]?a.textStyle.color:"#ccc",text:e[E],textFont:s,textBaseline:"top"},highlightStyle:{brushType:"fill"},clickable:!0},a.orient=="vertical"&&a.x=="right"&&(i.style.x-=p+10,i.style.textAlign="right"),i._idx=E,i.onclick=U,u.shapeList.push(i)),a.orient=="horizontal"?c+=p+(y?5:0)+(y?o.getTextWidth(n,s):0)+v:h+=d+v;!y&&a.text[1]&&(a.orient=="horizontal"?c=c-v+b:h=h-v+b,i=_(c,h,a.text[1]),a.orient!="horizontal"&&(i.style.y-=5,i.style.textBaseline="top"),u.shapeList.push(i))}function C(){var t,n,r=u.getFont(a.textStyle),i=l.x,s=l.y,h=a.itemWidth,p=a.itemHeight,d=o.getTextHeight("国",r),v=!0;a.text&&(v=!1,a.text[0]&&(n=_(i,s,a.text[0]),a.orient=="horizontal"?i+=o.getTextWidth(a.text[0],r)+b:(s+=d+b,n.style.y+=d/2+b,n.style.textBaseline="bottom"),u.shapeList.push(n)));var m=e("zrender/tool/color"),g=1/(a.color.length-1),y=[];for(var w=0,E=a.color.length;w<E;w++)y.push([w*g,a.color[w]]);a.orient=="horizontal"?(t={shape:"rectangle",zlevel:f,style:{x:i,y:s,width:h*10,height:p,color:m.getLinearGradient(i,s,i+h*10,s,y)},hoverable:!1},i+=h*10+b):(t={shape:"rectangle",zlevel:f,style:{x:i,y:s,width:h,height:p*10,color:m.getLinearGradient(i,s,i,s+p*10,y)},hoverable:!1},s+=p*10+b),u.shapeList.push(t),a.calculable&&(c=t.style,k(),A(),L()),!v&&a.text[1]&&(n=_(i,s,a.text[1]),u.shapeList.push(n))}function k(){m={shape:"rectangle",zlevel:f+1,style:{x:c.x,y:c.y,width:c.width,height:c.height,color:"rgba(255,255,255,0)"},highlightStyle:{strokeColor:"rgba(255,255,255,0.5)",lineWidth:1},draggable:!0,ondrift:P,ondragend:H,_type:"filler"},u.shapeList.push(m)}function L(){var e=c.x,t=c.y,n=c.width,r=c.height,i=u.getFont(a.textStyle),s=o.getTextHeight("国",i),l=Math.max(o.getTextWidth(a.max.toFixed(a.precision),i),o.getTextWidth(a.min.toFixed(a.precision),i))+2,p,v,m,g,y,b,w,E;a.orient=="horizontal"?a.y!="bottom"?(p=[[e,t],[e,t+r+s],[e-s,t+r+s],[e-1,t+r],[e-1,t]],v=e-l/2-s,m=t+r+s/2+2,g={x:e-l-s,y:t+r,width:l+s,height:s},y=[[e+n,t],[e+n,t+r+s],[e+n+s,t+r+s],[e+n+1,t+r],[e+n+1,t]],b=e+n+l/2+s,w=m,E={x:e+n,y:t+r,width:l+s,height:s}):(p=[[e,t+r],[e,t-s],[e-s,t-s],[e-1,t],[e-1,t+r]],v=e-l/2-s,m=t-s/2-2,g={x:e-l-s,y:t-s,width:l+s,height:s},y=[[e+n,t+r],[e+n,t-s],[e+n+s,t-s],[e+n+1,t],[e+n+1,t+r]],b=e+n+l/2+s,w=m,E={x:e+n,y:t-s,width:l+s,height:s}):(l+=s,a.x!="right"?(p=[[e,t],[e+n+s,t],[e+n+s,t-s],[e+n,t-1],[e,t-1]],v=e+n+l/2+s/2,m=t-s/2,g={x:e+n,y:t-s,width:l+s,height:s},y=[[e,t+r],[e+n+s,t+r],[e+n+s,t+s+r],[e+n,t+1+r],[e,t+r+1]],b=v,w=t+r+s/2,E={x:e+n,y:t+r,width:l+s,height:s}):(p=[[e+n,t],[e-s,t],[e-s,t-s],[e,t-1],[e+n,t-1]],v=e-l/2-s/2,m=t-s/2,g={x:e-l-s,y:t-s,width:l+s,height:s},y=[[e+n,t+r],[e-s,t+r],[e-s,t+s+r],[e,t+1+r],[e+n,t+r+1]],b=v,w=t+r+s/2,E={x:e-l-s,y:t+r,width:l+s,height:s})),h={shape:"handlePolygon",style:{pointList:p,text:a.max.toFixed(a.precision),textX:v,textY:m,color:X(a.max),rect:g,x:p[0][0],y:p[0][1],_x:p[0][0],_y:p[0][1]}},h.highlightStyle={strokeColor:h.style.color,lineWidth:1},d={shape:"handlePolygon",style:{pointList:y,text:a.min.toFixed(a.precision),textX:b,textY:w,color:X(a.min),rect:E,x:y[0][0],y:y[0][1],_x:y[0][0],_y:y[0][1]}},d.highlightStyle={strokeColor:d.style.color,lineWidth:1},h.zlevel=d.zlevel=f+1,h.draggable=d.draggable=!0,h.ondrift=d.ondrift=P,h.ondragend=d.ondragend=H,h.style.textColor=d.style.textColor=a.textStyle.color,h.style.textAlign=d.style.textAlign="center",h.style.textPosition=d.style.textPosition="specific",h.style.textBaseline=d.style.textBaseline="middle",h.style.width=d.style.width=0,h.style.height=d.style.height=0,h.style.textPosition=d.style.textPosition="specific",u.shapeList.push(h),u.shapeList.push(d)}function A(){var e=c.x,t=c.y,n=c.width,r=c.height;p={shape:"rectangle",zlevel:f+1,style:{x:e,y:t,width:a.orient=="horizontal"?0:n,height:a.orient=="horizontal"?r:0,color:"#ccc"},hoverable:!1},v={shape:"rectangle",zlevel:f+1,style:{x:a.orient=="horizontal"?e+n:e,y:a.orient=="horizontal"?t:t+r,width:a.orient=="horizontal"?0:n,height:a.orient=="horizontal"?r:0,color:"#ccc"},hoverable:!1},u.shapeList.push(p),u.shapeList.push(v)}function O(){var e=a.padding[0],t=a.padding[1],n=a.padding[2],r=a.padding[3];u.shapeList.push({shape:"rectangle",zlevel:f,hoverable:!1,style:{x:l.x-r,y:l.y-e,width:l.width+r+t,height:l.height+e+n,brushType:a.borderWidth===0?"fill":"both",color:a.backgroundColor,strokeColor:a.borderColor,lineWidth:a.borderWidth}})}function M(){var e=S,t=e.length,n=a.itemGap,i=a.itemWidth,s=a.itemHeight,f=0,l=0,c=u.getFont(a.textStyle),h=o.getTextHeight("国",c);if(a.orient=="horizontal"){if(a.text||a.splitNumber<=0||a.calculable)f=(a.splitNumber<=0||a.calculable?i*10+n:t*(i+n))+(a.text&&typeof a.text[0]!="undefined"?o.getTextWidth(a.text[0],c)+b:0)+(a.text&&typeof a.text[1]!="undefined"?o.getTextWidth(a.text[1],c)+b:0);else{i+=5;for(var p=0;p<t;p++)f+=i+o.getTextWidth(e[p],c)+n}f-=n,l=Math.max(h,s)}else{var d;if(a.text||a.splitNumber<=0||a.calculable)l=(a.splitNumber<=0||a.calculable?s*10+n:t*(s+n))+(a.text&&typeof a.text[0]!="undefined"?b+h:0)+(a.text&&typeof a.text[1]!="undefined"?b+h:0),d=Math.max(o.getTextWidth(a.text&&a.text[0]||"",c),o.getTextWidth(a.text&&a.text[1]||"",c)),f=Math.max(i,d);else{l=(s+n)*t,i+=5,d=0;for(var p=0;p<t;p++)d=Math.max(d,o.getTextWidth(e[p],c));f=i+d}l-=n}var v,m=r.getWidth();switch(a.x){case"center":v=Math.floor((m-f)/2);break;case"left":v=a.padding[3]+a.borderWidth;break;case"right":v=m-f-a.padding[1]-a.borderWidth;break;default:v=u.parsePercent(a.x,m),v=isNaN(v)?0:v}var g,y=r.getHeight();switch(a.y){case"top":g=a.padding[0]+a.borderWidth;break;case"bottom":g=y-l-a.padding[2]-a.borderWidth;break;case"center":g=Math.floor((y-l)/2);break;default:g=u.parsePercent(a.y,y),g=isNaN(g)?0:g}if(a.calculable){var w=Math.max(o.getTextWidth(a.max,c),o.getTextWidth(a.min,c))+h;a.orient=="horizontal"?(v<w&&(v=w),v+f+w>m&&(v-=w)):(g<h&&(g=h),g+l+h>y&&(g-=h))}return{x:v,y:g,width:f,height:l}}function _(e,t,n){return{shape:"text",zlevel:f,style:{x:a.orient=="horizontal"?e:l.x+l.width/2,y:a.orient=="horizontal"?l.y+l.height/2:t,color:a.textStyle.color,text:n,textFont:u.getFont(a.textStyle),textBaseline:a.orient=="horizontal"?"middle":"top",textAlign:a.orient=="horizontal"?"left":"center"},hoverable:!1}}function D(e,t,n,r,i){return{shape:"rectangle",zlevel:f,style:{x:e,y:t+1,width:n,height:r-2,color:i},highlightStyle:{strokeColor:i,lineWidth:1},clickable:!0}}function P(e,t,n){var r=c.x,i=c.y,s=c.width,o=c.height;return a.orient=="horizontal"?e.style.x+t<=r?e.style.x=r:e.style.x+t+e.style.width>=r+s?e.style.x=r+s-e.style.width:e.style.x+=t:e.style.y+n<=i?e.style.y=i:e.style.y+n+e.style.height>=i+o?e.style.y=i+o-e.style.height:e.style.y+=n,e._type=="filler"?F():I(e),a.realtime?R():(clearTimeout(y),y=setTimeout(R,200)),!0}function H(){u.isDragend=!0}function B(e,r){if(!u.isDragend||!e.target)return;R(),r.dragOut=!0,r.dragIn=!0,a.realtime||n.dispatch(t.EVENT.DATA_RANGE,null,{range:{start:g.end,end:g.start}}),r.needRefresh=!1,u.isDragend=!1;return}function j(){if(a.range){typeof a.range.start!="undefined"&&(g.end=a.range.start),typeof a.range.end!="undefined"&&(g.start=a.range.end);if(g.start!=100||g.end!==0){if(a.orient=="horizontal"){var e=m.style.width;m.style.x+=e*(100-g.start)/100,m.style.width=e*(g.start-g.end)/100}else{var t=m.style.height;m.style.y+=t*(100-g.start)/100,m.style.height=t*(g.start-g.end)/100}r.modShape(m.id,m),F()}}}function F(){var e=c.x,t=c.y,n=c.width,r=c.height;a.orient=="horizontal"?(h.style.x=m.style.x,p.style.width=h.style.x-e,d.style.x=m.style.x+m.style.width,v.style.x=d.style.x,v.style.width=e+n-d.style.x,g.start=Math.ceil(100-(h.style.x-e)/n*100),g.end=Math.floor(100-(d.style.x-e)/n*100)):(h.style.y=m.style.y,p.style.height=h.style.y-t,d.style.y=m.style.y+m.style.height,v.style.y=d.style.y,v.style.height=t+r-d.style.y,g.start=Math.ceil(100-(h.style.y-t)/r*100),g.end=Math.floor(100-(d.style.y-t)/r*100)),q(!1)}function I(e){var t=c.x,n=c.y,r=c.width,i=c.height,s,o;a.orient=="horizontal"?(s=h.style.x,o=d.style.x,e.id==h.id&&s>=o?(o=s,d.style.x=s):e.id==d.id&&s>=o&&(s=o,h.style.x=s),m.style.x=s,m.style.width=o-s,p.style.width=s-t,v.style.x=o,v.style.width=t+r-o,g.start=Math.ceil(100-(s-t)/r*100),g.end=Math.floor(100-(o-t)/r*100)):(s=h.style.y,o=d.style.y,e.id==h.id&&s>=o?(o=s,d.style.y=s):e.id==d.id&&s>=o&&(s=o,h.style.y=s),m.style.y=s,m.style.height=o-s,p.style.height=s-n,v.style.y=o,v.style.height=n+i-o,g.start=Math.ceil(100-(s-n)/i*100),g.end=Math.floor(100-(o-n)/i*100)),q(!0)}function q(e){h.position=[h.style.x-h.style._x,h.style.y-h.style._y],a.precision===0?h.style.text=Math.round(w*g.start+a.min)+"":h.style.text=(w*g.start+a.min).toFixed(a.precision),h.style.color=h.highlightStyle.strokeColor=X(w*g.start+a.min),r.modShape(h.id,h),d.position=[d.style.x-d.style._x,d.style.y-d.style._y],a.precision===0?d.style.text=Math.round(w*g.end+a.min)+"":d.style.text=(w*g.end+a.min).toFixed(a.precision),d.style.color=d.highlightStyle.strokeColor=X(w*g.end+a.min),r.modShape(d.id,d),r.modShape(p.id,p),r.modShape(v.id,v),e&&r.modShape(m.id,m),r.refresh()}function R(){a.realtime&&n.dispatch(t.EVENT.DATA_RANGE,null,{range:{start:g.end,end:g.start}})}function U(e){var r=e.target._idx;x[r]=!x[r],n.dispatch(t.EVENT.REFRESH)}function z(t){if(typeof u.query(t,"dataRange.min")=="undefined"||typeof u.query(t,"dataRange.max")=="undefined")return;i=t,i.dataRange=u.reformOption(i.dataRange),i.dataRange.padding=u.reformCssArray(i.dataRange.padding),a=i.dataRange,u.clear(),x={};var n=e("zrender/tool/color"),r=a.splitNumber<=0||a.calculable?100:a.splitNumber;E=n.getGradientColors(a.color,Math.max((r-a.color.length)/(a.color.length-1),0)+1);if(E.length>r){var s=E.length,o=[E[0]],f=s/(r-1);for(var l=1;l<r-1;l++)o.push(E[Math.floor(l*f)]);o.push(E[s-1]),E=o}a.precision===0?w=Math.round((a.max-a.min)/r)||1:(w=(a.max-a.min)/r,w=w.toFixed(a.precision)-0),S=[];for(var l=0;l<r;l++)x[l]=!0,S.unshift((l*w+a.min).toFixed(a.precision)+" - "+((l+1)*w+a.min).toFixed(a.precision));g={start:100,end:0},T()}function W(e){e&&(i=e,i.dataRange=u.reformOption(i.dataRange),i.dataRange.padding=u.reformCssArray(i.dataRange.padding)),a=i.dataRange,a.range={start:g.end,end:g.start},u.clear(),T()}function X(e){if(isNaN(e))return null;e<a.min?e=a.min:e>a.max&&(e=a.max);if(a.calculable)if(e>w*g.start+a.min||e<w*g.end+a.min)return null;var t=E.length-Math.ceil((e-a.min)/(a.max-a.min)*E.length);return t==E.length&&t--,x[t]?E[t]:null}var s=e("./base");s.call(this,t,r);var o=e("zrender/tool/area"),u=this;u.type=t.COMPONENT_TYPE_DATARANGE;var a,f=u.getZlevelBase(),l={},c,h,p,d,v,m,g,y,b=10,w,E,S,x={};u.init=z,u.refresh=W,u.getColor=X,u.ondragend=B,z(i)}return e("../util/shape/handlePolygon"),e("../component").define("dataRange",t),t}),r("echarts/component/tooltip",["require","./base","../util/ecData","zrender/config","zrender/shape","zrender/tool/event","zrender/tool/area","zrender/tool/color","zrender/tool/util","zrender/shape/base","../component"],function(e){function t(t,n,r,i,s,o){function U(e){if(!e)return"";var t=[];if(e.transitionDuration){var n="left "+e.transitionDuration+"s,"+"top "+e.transitionDuration+"s";t.push("transition:"+n),t.push("-moz-transition:"+n),t.push("-webkit-transition:"+n),t.push("-o-transition:"+n)}e.backgroundColor&&(t.push("background-Color:"+p.toHex(e.backgroundColor)),t.push("filter:alpha(opacity=70)"),t.push("background-Color:"+e.backgroundColor)),typeof e.borderWidth!="undefined"&&t.push("border-width:"+e.borderWidth+"px"),typeof e.borderColor!="undefined"&&t.push("border-color:"+e.borderColor),typeof e.borderRadius!="undefined"&&(t.push("border-radius:"+e.borderRadius+"px"),t.push("-moz-border-radius:"+e.borderRadius+"px"),t.push("-webkit-border-radius:"+e.borderRadius+"px"),t.push("-o-border-radius:"+e.borderRadius+"px"));var r=e.textStyle;r&&(r.color&&t.push("color:"+r.color),r.decoration&&t.push("text-decoration:"+r.decoration),r.align&&t.push("text-align:"+r.align),r.fontFamily&&t.push("font-family:"+r.fontFamily),r.fontSize&&t.push("font-size:"+r.fontSize+"px"),r.fontSize&&t.push("line-height:"+Math.round(r.fontSize*3/2)+"px"),r.fontStyle&&t.push("font-style:"+r.fontStyle),r.fontWeight&&t.push("font-weight:"+r.fontWeight));var i=e.padding;return typeof i!="undefined"&&(i=g.reformCssArray(i),t.push("padding:"+i[0]+"px "+i[1]+"px "+i[2]+"px "+i[3]+"px")),t=t.join(";")+";",t}function z(){N&&(N.style.display="none");var e=!1;q.invisible||(q.invisible=!0,r.modShape(q.id,q),e=!0),R.invisible||(R.invisible=!0,r.modShape(R.id,R),e=!0),F&&F.tipShape.length>0&&(r.delShape(F.tipShape),F=!1),e&&r.refresh()}function W(e,t,n){var r=N.offsetHeight,i=N.offsetWidth;e+i>j&&(e-=i+40),t+r>B&&(t-=r-20),t<20&&(t=0),N.style.cssText=C+k+(n?n:"")+"left:"+e+"px;top:"+t+"px;",(r<10||i<10)&&setTimeout(X,20)}function X(){if(N){var e="",t=N.offsetHeight,n=N.offsetWidth;N.offsetLeft+n>j&&(e+="left:"+(j-n-20)+"px;"),N.offsetTop+t>B&&(e+="top:"+(B-t-10)+"px;"),e!==""&&(N.style.cssText+=e)}}function V(){var e,t;if(!D)J()||$();else{if(D._type=="island"&&i.tooltip.show){Y();return}var n=a.get(D,"series"),r=a.get(D,"data");e=g.deepQuery([r,n,i],"tooltip.show"),typeof n=="undefined"||typeof r=="undefined"||e===!1?(clearTimeout(A),clearTimeout(M),A=setTimeout(z,O)):(t=g.deepQuery([r,n,i],"tooltip.trigger"),t=="axis"?Q(n.xAxisIndex,n.yAxisIndex,a.get(D,"dataIndex")):Y())}}function $(){if(!E||!S){A=setTimeout(z,O);return}var e=i.series,n,r;for(var s=0,o=e.length;s<o;s++)if(g.deepQuery([e[s],i],"tooltip.trigger")=="axis"){n=e[s].xAxisIndex||0,r=e[s].yAxisIndex||0;if(E.getAxis(n)&&E.getAxis(n).type==t.COMPONENT_TYPE_AXIS_CATEGORY){Q(n,r,K("x",E.getAxis(n)));return}if(S.getAxis(r)&&S.getAxis(r).type==t.COMPONENT_TYPE_AXIS_CATEGORY){Q(n,r,K("y",S.getAxis(r)));return}}}function J(){if(!x)return!1;var e=c.getX(P),t=c.getY(P),n=x.getNearestIndex([e,t]),r;return n?(r=n.valueIndex,n=n.polarIndex):n=-1,n!=-1?G(n,r):!1}function K(e,t){var n=-1,r=c.getX(P),i=c.getY(P);if(e=="x"){var s,o,u=w.getXend(),a=t.getCoordByIndex(n);while(a<u){a<=r&&(s=a);if(a>=r)break;a=t.getCoordByIndex(++n),o=a}return r-s<o-r?n-=n!==0?1:0:typeof t.getNameByIndex(n)=="undefined"&&(n-=1),n}var f,l,h=w.getY(),a=t.getCoordByIndex(n);while(a>h){a>=i&&(l=a);if(a<=i)break;a=t.getCoordByIndex(++n),f=a}return i-f>l-i?n-=n!==0?1:0:typeof t.getNameByIndex(n)=="undefined"&&(n-=1),n}function Q(e,r,o){!P.connectTrigger&&n.dispatch(t.EVENT.TOOLTIP_IN_GRID,P);if(typeof E=="undefined"||typeof S=="undefined"||typeof e=="undefined"||typeof r=="undefined"||o<0){clearTimeout(A),clearTimeout(M),A=setTimeout(z,O);return}var u=i.series,a=[],f=[],l,h,p,d,v,m="";if(i.tooltip.trigger=="axis"){if(i.tooltip.show===!1)return;d=i.tooltip.formatter}if(e!=-1&&E.getAxis(e).type==t.COMPONENT_TYPE_AXIS_CATEGORY){l=E.getAxis(e);for(var y=0,x=u.length;y<x;y++){if(!at(u[y].name))continue;u[y].xAxisIndex==e&&g.deepQuery([u[y],i],"tooltip.trigger")=="axis"&&(v=g.query(u[y],"tooltip.showContent")||v,d=g.query(u[y],"tooltip.formatter")||d,m+=U(g.query(u[y],"tooltip")),a.push(u[y]),f.push(y))}n.dispatch(t.EVENT.TOOLTIP_HOVER,P,{seriesIndex:f,dataIndex:b.dataZoom?b.dataZoom.getRealDataIndex(f,o):o}),p=c.getY(P)+10,h=g.subPixelOptimize(l.getCoordByIndex(o),I),Z(a,h,w.getY(),h,w.getYend(),l.getGap()),h+=10}else if(r!=-1&&S.getAxis(r).type==t.COMPONENT_TYPE_AXIS_CATEGORY){l=S.getAxis(r);for(var y=0,x=u.length;y<x;y++){if(!at(u[y].name))continue;u[y].yAxisIndex==r&&g.deepQuery([u[y],i],"tooltip.trigger")=="axis"&&(v=g.query(u[y],"tooltip.showContent")||v,d=g.query(u[y],"tooltip.formatter")||d,m+=U(g.query(u[y],"tooltip")),a.push(u[y]),f.push(y))}n.dispatch(t.EVENT.TOOLTIP_HOVER,P,{seriesIndex:f,dataIndex:b.dataZoom?b.dataZoom.getRealDataIndex(f,o):o}),h=c.getX(P)+10,p=g.subPixelOptimize(l.getCoordByIndex(o),I),Z(a,w.getX(),p,w.getXend(),p,l.getGap()),p+=10}if(a.length>0){var T;if(typeof d=="function"){var C=[];for(var y=0,x=a.length;y<x;y++)T=a[y].data[o],T=typeof T!="undefined"?typeof T.value!="undefined"?T.value:T:"-",C.push([a[y].name||"",l.getNameByIndex(o),T]);H="axis:"+o,N.innerHTML=d(C,H,nt)}else if(typeof d=="string"){H=NaN,d=d.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}");for(var y=0,x=a.length;y<x;y++)d=d.replace("{a"+y+"}",vt(a[y].name||"")),d=d.replace("{b"+y+"}",vt(l.getNameByIndex(o))),T=a[y].data[o],T=typeof T!="undefined"?typeof T.value!="undefined"?T.value:T:"-",d=d.replace("{c"+y+"}",T instanceof Array?T:g.numAddCommas(T));N.innerHTML=d}else{H=NaN,d=vt(l.getNameByIndex(o));for(var y=0,x=a.length;y<x;y++)d+="<br/>"+vt(a[y].name||"")+" : ",T=a[y].data[o],T=typeof T!="undefined"?typeof T.value!="undefined"?T.value:T:"-",d+=T instanceof Array?T:g.numAddCommas(T);N.innerHTML=d}if(v===!1||!i.tooltip.showContent)return;g.hasAppend||(N.style.left=j/2+"px",N.style.top=B/2+"px",s.firstChild.appendChild(N),g.hasAppend=!0),W(h,p,m)}}function G(e,t){if(typeof x=="undefined"||typeof e=="undefined"||typeof t=="undefined"||t<0)return!1;var n=i.series,r=[],o,u,a="";if(i.tooltip.trigger=="axis"){if(i.tooltip.show===!1)return!1;o=i.tooltip.formatter}var f=i.polar[e].indicator[t].text;for(var l=0,h=n.length;l<h;l++){if(!at(n[l].name))continue;n[l].polarIndex==e&&g.deepQuery([n[l],i],"tooltip.trigger")=="axis"&&(u=g.query(n[l],"tooltip.showContent")||u,o=g.query(n[l],"tooltip.formatter")||o,a+=U(g.query(n[l],"tooltip")),r.push(n[l]))}if(r.length>0){var p,d,v=[];for(var l=0,h=r.length;l<h;l++){p=r[l].data;for(var m=0,y=p.length;m<y;m++){d=p[m];if(!at(d.name))continue;d=typeof d!="undefined"?d:{name:"",value:{dataIndex:"-"}},v.push([r[l].name||"",d.name,d.value[t],f])}}if(v.length<=0)return;if(typeof o=="function")H="axis:"+t,N.innerHTML=o(v,H,nt);else if(typeof o=="string"){o=o.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}").replace("{d}","{d0}");for(var l=0,h=v.length;l<h;l++)o=o.replace("{a"+l+"}",vt(v[l][0])),o=o.replace("{b"+l+"}",vt(v[l][1])),o=o.replace("{c"+l+"}",g.numAddCommas(v[l][2])),o=o.replace("{d"+l+"}",vt(v[l][3]));N.innerHTML=o}else{o=vt(v[0][1])+"<br/>"+vt(v[0][3])+" : "+g.numAddCommas(v[0][2]);for(var l=1,h=v.length;l<h;l++)o+="<br/>"+vt(v[l][1])+"<br/>",o+=vt(v[l][3])+" : "+g.numAddCommas(v[l][2]);N.innerHTML=o}if(u===!1||!i.tooltip.showContent)return;return g.hasAppend||(N.style.left=j/2+"px",N.style.top=B/2+"px",s.firstChild.appendChild(N),g.hasAppend=!0),W(c.getX(P),c.getY(P),a),!0}}function Y(){var e=a.get(D,"series"),n=a.get(D,"data"),o=a.get(D,"name"),u=a.get(D,"value"),f=a.get(D,"special"),l=a.get(D,"special2"),h,p,d="",v,m="";D._type!="island"?(i.tooltip.trigger=="item"&&(h=i.tooltip.formatter),g.query(e,"tooltip.trigger")=="item"&&(p=g.query(e,"tooltip.showContent")||p,h=g.query(e,"tooltip.formatter")||h,d+=U(g.query(e,"tooltip"))),p=g.query(n,"tooltip.showContent")||p,h=g.query(n,"tooltip.formatter")||h,d+=U(g.query(n,"tooltip"))):(p=g.deepQuery([n,e,i],"tooltip.showContent"),h=g.deepQuery([n,e,i],"tooltip.islandFormatter"));if(typeof h=="function")H=(e.name||"")+":"+a.get(D,"dataIndex"),N.innerHTML=h([e.name||"",o,u,f,l],H,nt);else if(typeof h=="string")H=NaN,h=h.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}"),h=h.replace("{a0}",vt(e.name||"")).replace("{b0}",vt(o)).replace("{c0}",u instanceof Array?u:g.numAddCommas(u)),h=h.replace("{d}","{d0}").replace("{d0}",f||""),h=h.replace("{e}","{e0}").replace("{e0}",a.get(D,"special2")||""),N.innerHTML=h;else{H=NaN;if(e.type==t.CHART_TYPE_SCATTER)N.innerHTML=(typeof e.name!="undefined"?vt(e.name)+"<br/>":"")+(o===""?"":vt(o)+" : ")+u+(typeof f=="undefined"?"":" ("+f+")");else if(e.type==t.CHART_TYPE_RADAR&&f){v=f,m+=vt(o===""?e.name||"":o),m+=m===""?"":"<br />";for(var y=0;y<v.length;y++)m+=vt(v[y].text)+" : "+g.numAddCommas(u[y])+"<br />";N.innerHTML=m}else if(e.type==t.CHART_TYPE_CHORD)if(typeof l=="undefined")N.innerHTML=vt(o)+" ("+g.numAddCommas(u)+")";else{var b=vt(o),w=vt(f);N.innerHTML=(typeof e.name!="undefined"?vt(e.name)+"<br/>":"")+b+" -> "+w+" ("+g.numAddCommas(u)+")"+"<br />"+w+" -> "+b+" ("+g.numAddCommas(l)+")"}else N.innerHTML=(typeof e.name!="undefined"?vt(e.name)+"<br/>":"")+vt(o)+" : "+g.numAddCommas(u)+(typeof f=="undefined"?"":" ("+g.numAddCommas(f)+")")}q.invisible||(q.invisible=!0,r.modShape(q.id,q),r.refresh());if(p===!1||!i.tooltip.showContent)return;g.hasAppend||(N.style.left=j/2+"px",N.style.top=B/2+"px",s.firstChild.appendChild(N),g.hasAppend=!0),W(c.getX(P)+20,c.getY(P)-20,d)}function Z(e,t,n,s,o,u){if(e.length>0){var a,f,l=i.tooltip.axisPointer,c=l.type,h=l.lineStyle.color,p=l.lineStyle.width,d=l.lineStyle.type,v=l.areaStyle.size,m=l.areaStyle.color;for(var y=0,b=e.length;y<b;y++)g.deepQuery([e[y],i],"tooltip.trigger")=="axis"&&(a=e[y],f=g.query(a,"tooltip.axisPointer.type"),c=f||c,f=="line"?(h=g.query(a,"tooltip.axisPointer.lineStyle.color")||h,p=g.query(a,"tooltip.axisPointer.lineStyle.width")||p,d=g.query(a,"tooltip.axisPointer.lineStyle.type")||d):f=="shadow"&&(v=g.query(a,"tooltip.axisPointer.areaStyle.size")||v,m=g.query(a,"tooltip.axisPointer.areaStyle.color")||m));c=="line"?(q.style={xStart:t,yStart:n,xEnd:s,yEnd:o,strokeColor:h,lineWidth:p,lineType:d},q.invisible=!1,r.modShape(q.id,q)):c=="shadow"&&(typeof v=="undefined"||v=="auto"||isNaN(v)?p=u:p=v,t==s?Math.abs(w.getX()-t)<2?(p/=2,t=s+=p/2):Math.abs(w.getXend()-t)<2&&(p/=2,t=s-=p/2):n==o&&(Math.abs(w.getY()-n)<2?(p/=2,n=o+=p/2):Math.abs(w.getYend()-n)<2&&(p/=2,n=o-=p/2)),R.style={xStart:t,yStart:n,xEnd:s,yEnd:o,strokeColor:m,lineWidth:p},R.invisible=!1,r.modShape(R.id,R)),r.refresh()}}function et(e){clearTimeout(A),clearTimeout(M);var r=e.target,s=c.getX(e.event),o=c.getY(e.event);if(!r)D=!1,P=e.event,P._target=P.target||P.toElement,P.zrenderX=s,P.zrenderY=o,L&&w&&h.isInside(m,w.getArea(),s,o)?M=setTimeout(V,_):L&&x&&x.isInside([s,o])!=-1?M=setTimeout(V,_):(!P.connectTrigger&&n.dispatch(t.EVENT.TOOLTIP_OUT_GRID,P),A=setTimeout(z,O));else{D=r,P=e.event,P._target=P.target||P.toElement,P.zrenderX=s,P.zrenderY=o;var u;if(L&&x&&(u=x.isInside([s,o]))!=-1){var a=i.series;for(var f=0,l=a.length;f<l;f++)if(a[f].polarIndex==u&&g.deepQuery([a[f],i],"tooltip.trigger")=="axis"){D=null;break}}M=setTimeout(V,_)}}function tt(){clearTimeout(A),clearTimeout(M),A=setTimeout(z,O)}function nt(e,t){if(!N)return;e==H&&(N.innerHTML=t),setTimeout(X,20)}function rt(){b=o.component,w=b.grid,E=b.xAxis,S=b.yAxis,x=b.polar}function it(e,t){if(!F||F&&F.dataIndex!=e.dataIndex){F&&F.tipShape.length>0&&r.delShape(F.tipShape);for(var n=0,i=t.length;n<i;n++)t[n].id=r.newShapeId("tooltip"),t[n].zlevel=y,t[n].style=v.getHighlightStyle(t[n].style,t[n].highlightStyle),t[n].draggable=!1,t[n].hoverable=!1,t[n].clickable=!1,t[n].ondragend=null,t[n].ondragover=null,t[n].ondrop=null,r.addShape(t[n]);F={dataIndex:e.dataIndex,tipShape:t}}}function st(){z()}function ot(e){T=e.selected}function ut(){i.legend&&i.legend.selected?T=i.legend.selected:T={}}function at(e){return typeof T[e]!="undefined"?T[e]:!0}function ft(e){if(!e)return;var n,s=i.series;if(typeof e.seriesIndex!="undefined")n=e.seriesIndex;else{var u=e.seriesName;for(var l=0,c=s.length;l<c;l++)if(s[l].name==u){n=l;break}}var h=s[n];if(typeof h=="undefined")return;var p=o.chart[h.type],d=g.deepQuery([h,i],"tooltip.trigger")=="axis";if(!p)return;if(d){var v=e.dataIndex;switch(p.type){case t.CHART_TYPE_LINE:case t.CHART_TYPE_BAR:case t.CHART_TYPE_K:if(typeof E=="undefined"||typeof S=="undefined"||h.data.length<=v)return;var m=h.xAxisIndex||0,y=h.yAxisIndex||0;E.getAxis(m).type==t.COMPONENT_TYPE_AXIS_CATEGORY?P={zrenderX:E.getAxis(m).getCoordByIndex(v),zrenderY:w.getY()+(w.getYend()-w.getY())/4}:P={zrenderX:w.getX()+(w.getXend()-w.getX())/4,zrenderY:S.getAxis(y).getCoordByIndex(v)},Q(m,y,v);break;case t.CHART_TYPE_RADAR:if(typeof x=="undefined"||h.data[0].value.length<=v)return;var b=h.polarIndex||0,T=x.getVector(b,v,"max");P={zrenderX:T[0],zrenderY:T[1]},G(b,v)}}else{var N=p.shapeList,C,k;switch(p.type){case t.CHART_TYPE_LINE:case t.CHART_TYPE_BAR:case t.CHART_TYPE_K:case t.CHART_TYPE_SCATTER:var v=e.dataIndex;for(var l=0,c=N.length;l<c;l++)if(a.get(N[l],"seriesIndex")==n&&a.get(N[l],"dataIndex")==v){D=N[l],C=N[l].style.x,k=p.type!=t.CHART_TYPE_K?N[l].style.y:N[l].style.y[0];break}break;case t.CHART_TYPE_RADAR:var v=e.dataIndex;for(var l=0,c=N.length;l<c;l++)if(N[l].shape=="polygon"&&a.get(N[l],"seriesIndex")==n&&a.get(N[l],"dataIndex")==v){D=N[l];var T=x.getCenter(h.polarIndex||0);C=T[0],k=T[1];break}break;case t.CHART_TYPE_PIE:var L=e.name;for(var l=0,c=N.length;l<c;l++)if(N[l].shape=="sector"&&a.get(N[l],"seriesIndex")==n&&a.get(N[l],"name")==L){D=N[l];var A=D.style,O=(A.startAngle+A.endAngle)/2*Math.PI/180;C=D.style.x+Math.cos(O)*A.r/1.5,k=D.style.y-Math.sin(O)*A.r/1.5;break}break;case t.CHART_TYPE_MAP:var L=e.name,M=h.mapType;for(var l=0,c=N.length;l<c;l++)if(N[l].shape=="text"&&N[l]._mapType==M&&N[l].style._text==L){D=N[l],C=D.style.x+D.position[0],k=D.style.y+D.position[1];break}break;case t.CHART_TYPE_CHORD:var L=e.name;for(var l=0,c=N.length;l<c;l++)if(N[l].shape=="sector"&&a.get(N[l],"name")==L){D=N[l];var A=D.style,O=(A.startAngle+A.endAngle)/2*Math.PI/180;C=D.style.x+Math.cos(O)*(A.r-2),k=D.style.y-Math.sin(O)*(A.r-2),r.trigger(f.EVENT.MOUSEMOVE,{zrenderX:C,zrenderY:k});return}break;case t.CHART_TYPE_FORCE:var L=e.name;for(var l=0,c=N.length;l<c;l++)if(N[l].shape=="circle"&&a.get(N[l],"name")==L){D=N[l],C=D.position[0],k=D.position[1];break}}typeof C!="undefined"&&typeof k!="undefined"&&(P={zrenderX:C,zrenderY:k},r.addHoverShape(D),r.refreshHover(),Y())}}function lt(){z()}function ct(e,n){i=e,s=n,i.tooltip=g.reformOption(i.tooltip),i.tooltip.textStyle=d.merge(i.tooltip.textStyle,t.textStyle,{overwrite:!1,recursive:!0}),i.tooltip.padding=g.reformCssArray(i.tooltip.padding),L=!1,i.tooltip.trigger=="axis"&&(L=!0);var r=i.series;for(var o=0,u=r.length;o<u;o++)if(g.query(r[o],"tooltip.trigger")=="axis"){L=!0;break}_=i.tooltip.showDelay,O=i.tooltip.hideDelay,k=U(i.tooltip),N.style.position="absolute",g.hasAppend=!1,ut(),I=i.tooltip.axisPointer.lineStyle.width}function ht(e){e&&(i=e,i.tooltip=g.reformOption(i.tooltip),i.tooltip.textStyle=d.merge(i.tooltip.textStyle,t.textStyle,{overwrite:!1,recursive:!0}),i.tooltip.padding=g.reformCssArray(i.tooltip.padding),ut(),I=i.tooltip.axisPointer.lineStyle.width)}function pt(){B=r.getHeight(),j=r.getWidth()}function dt(){clearTimeout(A),clearTimeout(M),r.un(f.EVENT.MOUSEMOVE,et),r.un(f.EVENT.GLOBALOUT,tt),g.hasAppend&&s.firstChild.removeChild(N),N=null,g.shapeList=null,g=null}function vt(e){return String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}var u=e("./base");u.call(this,t,r);var a=e("../util/ecData"),f=e("zrender/config"),l=e("zrender/shape"),c=e("zrender/tool/event"),h=e("zrender/tool/area"),p=e("zrender/tool/color"),d=e("zrender/tool/util"),v=e("zrender/shape/base"),m=l.get("rectangle"),g=this;g.type=t.COMPONENT_TYPE_TOOLTIP;var y=g.getZlevelBase(),b={},w,E,S,x,T={},N=document.createElement("div"),C="position:absolute;display:block;border-style:solid;white-space:nowrap;",k,L,A,O,M,_,D,P,H,B=r.getHeight(),j=r.getWidth(),F=!1,I=0,q={shape:"line",id:r.newShapeId("tooltip"),zlevel:y,invisible:!0,hoverable:!1,style:{}},R={shape:"line",id:r.newShapeId("tooltip"),zlevel:1,invisible:!0,hoverable:!1,style:{}};r.addShape(q),r.addShape(R),r.on(f.EVENT.MOUSEMOVE,et),r.on(f.EVENT.GLOBALOUT,tt),g.dispose=dt,g.init=ct,g.refresh=ht,g.resize=pt,g.setComponent=rt,g.ontooltipHover=it,g.ondragend=st,g.onlegendSelected=ot,g.showTip=ft,g.hideTip=lt,ct(i,s)}return e("../component").define("tooltip",t),t}),r("echarts/component/toolbox",["require","./base","zrender/config","zrender/tool/util","zrender/tool/event","zrender/tool/env","../component","../component"],function(e){function t(t,n,r,i,s){function B(){y=[];var e=l.toolbox.feature,t=[];for(var n in e)if(e[n].show)switch(n){case"mark":t.push({key:n,name:"mark"}),t.push({key:n,name:"markUndo"}),t.push({key:n,name:"markClear"});break;case"magicType":for(var i=0,s=e[n].type.length;i<s;i++)e[n].title[e[n].type[i]+"Chart"]=e[n].title[e[n].type[i]],t.push({key:n,name:e[n].type[i]+"Chart"});break;case"dataZoom":t.push({key:n,name:"dataZoom"}),t.push({key:n,name:"dataZoomReset"});break;case"saveAsImage":p&&t.push({key:n,name:"saveAsImage"});break;default:t.push({key:n,name:n})}if(t.length>0){var o,n;for(var i=0,s=t.length;i<s;i++)o=t[i].name,n=t[i].key,y.push(o),E[o]=e[n].title[o]||e[n].title,e[n].icon&&(S[o]=e[n].icon[o]||e[n].icon),e[n].color&&(x[o]=e[n].color[o]||e[n].color);w=I(),F(),j();for(var i=0,s=h.shapeList.length;i<s;i++)h.shapeList[i].id=r.newShapeId(h.type),r.addShape(h.shapeList[i]);b.mark&&(G(b.markUndo),G(b.markClear)),b.dataZoomReset&&_.length===0&&G(b.dataZoomReset)}}function j(){var s=l.toolbox,o=y.length,u=w.x,a=w.y,f=s.itemSize,c=s.itemGap,p,m=s.color instanceof Array?s.color:[s.color],g=h.getFont(s.textStyle),N,C,k;s.orient=="horizontal"?(N=w.y/r.getHeight()<.5?"bottom":"top",C=w.x/r.getWidth()<.5?"left":"right",k=w.y/r.getHeight()<.5?"top":"bottom"):N=w.x/r.getWidth()<.5?"right":"left",b={};for(var L=0;L<o;L++){p={shape:"icon",zlevel:d,style:{x:u,y:a,width:f,height:f,iconType:y[L],lineWidth:1,strokeColor:x[y[L]]||m[L%m.length],brushType:"stroke"},highlightStyle:{lineWidth:2,text:s.showTitle?E[y[L]]:!1,textFont:g,textPosition:N,strokeColor:x[y[L]]||m[L%m.length]},hoverable:!0,clickable:!0},S[y[L]]&&(p.style.image=S[y[L]].replace(new RegExp("^image:\\/\\/"),""),p.style.opacity=.8,p.highlightStyle.opacity=1,p.shape="image"),s.orient=="horizontal"&&(L===0&&C=="left"&&(p.highlightStyle.textPosition="specific",p.highlightStyle.textAlign=C,p.highlightStyle.textBaseline=k,p.highlightStyle.textX=u,p.highlightStyle.textY=k=="top"?a+f+10:a-10),L==o-1&&C=="right"&&(p.highlightStyle.textPosition="specific",p.highlightStyle.textAlign=C,p.highlightStyle.textBaseline=k,p.highlightStyle.textX=u+f,p.highlightStyle.textY=k=="top"?a+f+10:a-10));switch(y[L]){case"mark":p.onclick=q;break;case"markUndo":p.onclick=V;break;case"markClear":p.onclick=$;break;case"dataZoom":p.onclick=R;break;case"dataZoomReset":p.onclick=J;break;case"dataView":if(!D){var A=e("../component"),O=A.get("dataView");D=new O(t,n,r,l,i)}p.onclick=Z;break;case"restore":p.onclick=et;break;case"saveAsImage":p.onclick=tt;break;default:y[L].match("Chart")?(p._name=y[L].replace("Chart",""),v[p._name]&&(p.style.strokeColor=T),p.onclick=nt):p.onclick=it}h.shapeList.push(p),b[y[L]]=p,s.orient=="horizontal"?u+=f+c:a+=f+c}}function F(){var e=l.toolbox,t=e.padding[0],n=e.padding[1],r=e.padding[2],i=e.padding[3];h.shapeList.push({shape:"rectangle",zlevel:d,hoverable:!1,style:{x:w.x-i,y:w.y-t,width:w.width+i+n,height:w.height+t+r,brushType:e.borderWidth===0?"fill":"both",color:e.backgroundColor,strokeColor:e.borderColor,lineWidth:e.borderWidth}})}function I(){var e=l.toolbox,t=y.length,n=e.itemGap,i=e.itemSize,s=0,o=0;e.orient=="horizontal"?(s=(i+n)*t-n,o=i):(o=(i+n)*t-n,s=i);var u,a=r.getWidth();switch(e.x){case"center":u=Math.floor((a-s)/2);break;case"left":u=e.padding[3]+e.borderWidth;break;case"right":u=a-s-e.padding[1]-e.borderWidth;break;default:u=e.x-0,u=isNaN(u)?0:u}var f,c=r.getHeight();switch(e.y){case"top":f=e.padding[0]+e.borderWidth;break;case"bottom":f=c-o-e.padding[2]-e.borderWidth;break;case"center":f=Math.floor((c-o)/2);break;default:f=e.y-0,f=isNaN(f)?0:f}return{x:u,y:f,width:s,height:o}}function q(e){var t=e.target;return k||C?(K(),r.refresh()):(Q(),r.modShape(t.id,{style:{strokeColor:T}}),r.refresh(),C=!0,setTimeout(function(){r&&r.on(u.EVENT.CLICK,X)&&r.on(u.EVENT.MOUSEMOVE,U)},10)),!0}function R(e){var t=e.target;return O||A?(Q(),r.refresh(),i.style.cursor="default"):(K(),r.modShape(t.id,{style:{strokeColor:T}}),r.refresh(),A=!0,setTimeout(function(){r&&r.on(u.EVENT.MOUSEDOWN,z)&&r.on(u.EVENT.MOUSEUP,W)&&r.on(u.EVENT.MOUSEMOVE,U)},10),i.style.cursor="crosshair"),!0}function U(e){k&&(L.style.xEnd=f.getX(e.event),L.style.yEnd=f.getY(e.event),r.addHoverShape(L)),O&&(M.style.width=f.getX(e.event)-M.style.x,M.style.height=f.getY(e.event)-M.style.y,r.addHoverShape(M),i.style.cursor="crosshair"),A&&i.style.cursor!="pointer"&&i.style.cursor!="move"&&(i.style.cursor="crosshair")}function z(e){if(e.target)return;O=!0;var n=f.getX(e.event),i=f.getY(e.event),s=l.dataZoom||{};return M={shape:"rectangle",id:r.newShapeId("zoom"),zlevel:d,style:{x:n,y:i,width:1,height:1,brushType:"both"},highlightStyle:{lineWidth:2,color:s.fillerColor||t.dataZoom.fillerColor,strokeColor:s.handleColor||t.dataZoom.handleColor,brushType:"both"}},r.addHoverShape(M),!0}function W(){if(!M||Math.abs(M.style.width)<10||Math.abs(M.style.height)<10)return O=!1,!0;if(O&&c.dataZoom){O=!1;var e=c.dataZoom.rectZoom(M.style);e&&(_.push({start:e.start,end:e.end,start2:e.start2,end2:e.end2}),Y(b.dataZoomReset),r.refresh())}return!0}function X(e){if(k)k=!1,h.shapeList.push(L),Y(b.markUndo),Y(b.markClear),r.addShape(L),r.refresh();else if(C){k=!0;var t=f.getX(e.event),n=f.getY(e.event);L={shape:"line",id:r.newShapeId("mark"),zlevel:d,style:{xStart:t,yStart:n,xEnd:t,yEnd:n,lineWidth:h.query(l,"toolbox.feature.mark.lineStyle.width"),strokeColor:h.query(l,"toolbox.feature.mark.lineStyle.color"),lineType:h.query(l,"toolbox.feature.mark.lineStyle.type")}},r.addHoverShape(L)}}function V(){if(k)k=!1;else{var e=h.shapeList.length-1;y.length==e-1&&(G(b.markUndo),G(b.markClear));if(y.length<e){var t=h.shapeList[h.shapeList.length-1];r.delShape(t.id),r.refresh(),h.shapeList.pop()}}return!0}function $(){k&&(k=!1);var e=h.shapeList.length-y.length-1,t=!1;while(e--)r.delShape(h.shapeList.pop().id),t=!0;return t&&(G(b.markUndo),G(b.markClear),r.refresh()),!0}function J(){return O&&(O=!1),_.pop(),_.length>0?c.dataZoom.absoluteZoom(_[_.length-1]):(c.dataZoom.rectZoom(),G(b.dataZoomReset),r.refresh()),!0}function K(){k=!1,C&&(C=!1,b.mark&&r.modShape(b.mark.id,{style:{strokeColor:b.mark.highlightStyle.strokeColor}}),r.un(u.EVENT.CLICK,X),r.un(u.EVENT.MOUSEMOVE,U))}function Q(){O=!1,A&&(A=!1,b.dataZoom&&r.modShape(b.dataZoom.id,{style:{strokeColor:b.dataZoom.highlightStyle.strokeColor}}),r.un(u.EVENT.MOUSEDOWN,z),r.un(u.EVENT.MOUSEUP,W),r.un(u.EVENT.MOUSEMOVE,U))}function G(e){e.shape!="image"?r.modShape(e.id,{hoverable:!1,clickable:!1,style:{strokeColor:N}}):r.modShape(e.id,{hoverable:!1,clickable:!1,style:{opacity:.3}})}function Y(e){e.shape!="image"?r.modShape(e.id,{hoverable:!0,clickable:!0,style:{strokeColor:e.highlightStyle.strokeColor}}):r.modShape(e.id,{hoverable:!0,clickable:!0,style:{opacity:.8}})}function Z(){return D.show(l),!0}function et(){return K(),Q(),n.dispatch(t.EVENT.RESTORE),!0}function tt(){var e=l.toolbox.feature.saveAsImage,t=e.type||"png";t!="png"&&t!="jpeg"&&(t="png");var n;s.isConnected()?n=s.getConnectedDataURL(t):n=r.toDataURL("image/"+t,l.backgroundColor&&l.backgroundColor.replace(" ","")=="rgba(0,0,0,0)"?"#fff":l.backgroundColor);var i=document.createElement("div");i.id="__echarts_download_wrap__",i.style.cssText="position:fixed;z-index:99999;display:block;top:0;left:0;background-color:rgba(33,33,33,0.5);text-align:center;width:100%;height:100%;line-height:"+document.documentElement.clientHeight+"px;";var o=document.createElement("a");o.href=n,o.setAttribute("download",(e.name?e.name:l.title&&(l.title.text||l.title.subtext)?l.title.text||l.title.subtext:"ECharts")+"."+t),o.innerHTML='<img style="vertical-align:middle" src="'+n+'" title="'+(!window.attachEvent||navigator.userAgent.indexOf("Opera")!==-1?e.lang?e.lang[0]:"点击保存":"右键->图片另存为")+'"/>',i.appendChild(o),document.body.appendChild(i),o=null,i=null,setTimeout(function(){var e=document.getElementById("__echarts_download_wrap__");e&&(e.onclick=function(){var e=document.getElementById("__echarts_download_wrap__");e.onclick=null,e.innerHTML="",document.body.removeChild(e),e=null},e=null)},500);return}function nt(e){K();var r=e.target._name;return v[r]?v[r]=!1:(v[r]=!0,r==t.CHART_TYPE_LINE?v[t.CHART_TYPE_BAR]=!1:r==t.CHART_TYPE_BAR&&(v[t.CHART_TYPE_LINE]=!1),r==P?v[H]=!1:r==H&&(v[P]=!1)),n.dispatch(t.EVENT.MAGIC_TYPE_CHANGED,e.event,{magicType:v}),!0}function rt(e){K(),v=e,!g&&n.dispatch(t.EVENT.MAGIC_TYPE_CHANGED,null,{magicType:v})}function it(e){var t=e.target.style.iconType,n=l.toolbox.feature[t].onclick;typeof n=="function"&&n(l)}function st(e){if(h.query(e,"toolbox.show")&&h.query(e,"toolbox.feature.magicType.show")){var t=e.toolbox.feature.magicType.type,n=t.length;m={};while(n--)m[t[n]]=!0;n=e.series.length;var r,i;while(n--){r=e.series[n].type,m[r]&&(i=e.xAxis instanceof Array?e.xAxis[e.series[n].xAxisIndex||0]:e.xAxis,i&&(i.type||"category")=="category"&&(i.__boundaryGap=typeof i.boundaryGap!="undefined"?i.boundaryGap:!0),i=e.yAxis instanceof Array?e.yAxis[e.series[n].yAxisIndex||0]:e.yAxis,i&&i.type=="category"&&(i.__boundaryGap=typeof i.boundaryGap!="undefined"?i.boundaryGap:!0),e.series[n].__type=r,e.series[n].__itemStyle=e.series[n].itemStyle?a.clone(e.series[n].itemStyle):{});if(m[P]||m[H])e.series[n].__stack=e.series[n].stack}}v={};var s=e.dataZoom;if(s&&s.show){var o=typeof s.start!="undefined"&&s.start>=0&&s.start<=100?s.start:0,u=typeof s.end!="undefined"&&s.end>=0&&s.end<=100?s.end:100;o>u&&(o+=u,u=o-u,o-=u),_=[{start:o,end:u,start2:0,end2:100}]}else _=[]}function ot(){var e;if(v[t.CHART_TYPE_LINE]||v[t.CHART_TYPE_BAR]){var n=v[t.CHART_TYPE_LINE]?!1:!0;for(var r=0,i=l.series.length;r<i;r++)m[l.series[r].type]&&(l.series[r].type=v[t.CHART_TYPE_LINE]?t.CHART_TYPE_LINE:t.CHART_TYPE_BAR,l.series[r].itemStyle=a.clone(l.series[r].__itemStyle),e=l.xAxis instanceof Array?l.xAxis[l.series[r].xAxisIndex||0]:l.xAxis,e&&(e.type||"category")=="category"&&(e.boundaryGap=n?!0:e.__boundaryGap),e=l.yAxis instanceof Array?l.yAxis[l.series[r].yAxisIndex||0]:l.yAxis,e&&e.type=="category"&&(e.boundaryGap=n?!0:e.__boundaryGap))}else for(var r=0,i=l.series.length;r<i;r++)m[l.series[r].type]&&(l.series[r].type=l.series[r].__type,l.series[r].itemStyle=l.series[r].__itemStyle,e=l.xAxis instanceof Array?l.xAxis[l.series[r].xAxisIndex||0]:l.xAxis,e&&(e.type||"category")=="category"&&(e.boundaryGap=e.__boundaryGap),e=l.yAxis instanceof Array?l.yAxis[l.series[r].yAxisIndex||0]:l.yAxis,e&&e.type=="category"&&(e.boundaryGap=e.__boundaryGap));if(v[P]||v[H])for(var r=0,i=l.series.length;r<i;r++)v[P]?l.series[r].stack="_ECHARTS_STACK_KENER_2014_":v[H]&&(l.series[r].stack=null);else for(var r=0,i=l.series.length;r<i;r++)l.series[r].stack=l.series[r].__stack;return l}function ut(e){g=e}function at(e,t){K(),Q(),e.toolbox=h.reformOption(e.toolbox),e.toolbox.padding=h.reformCssArray(e.toolbox.padding),l=e,c=t,h.shapeList=[],e.toolbox.show&&B(),lt()}function ft(){K(),h.clear(),l&&l.toolbox&&l.toolbox.show&&B(),D&&D.resize()}function lt(){D&&D.hide()}function ct(){D&&(D.dispose(),D=null),h.clear(),h.shapeList=null,h=null}function ht(e){e&&(e.toolbox=h.reformOption(e.toolbox),e.toolbox.padding=h.reformCssArray(e.toolbox.padding),l=e)}var o=e("./base");o.call(this,t,r);var u=e("zrender/config"),a=e("zrender/tool/util"),f=e("zrender/tool/event"),l,c,h=this;h.type=t.COMPONENT_TYPE_TOOLBOX;var p=e("zrender/tool/env").canvasSupported,d=h.getZlevelBase(),v={},m,g=!1,y,b={},w,E={},S={},x={},T="red",N="#ccc",C,k,L,A,O,M,_,D,P="stack",H="tiled";h.dispose=ct,h.render=at,h.resize=ft,h.hideDataView=lt,h.getMagicOption=ot,h.silence=ut,h.setMagicType=rt,h.reset=st,h.refresh=ht}return e("../component").define("toolbox",t),t}),r("echarts/component/dataView",["require","./base","zrender/tool/env","../component"],function(e){function t(t,n,r,i,s){function w(){m="width:"+b+"px;"+"height:"+0+"px;"+"background-color:#f0ffff;",l.style.cssText=v+m,s.onselectstart=function(){return!1}}function E(e){d=!0;var t=u.query(i,"toolbox.feature.dataView.lang")||a;i=e,l.innerHTML='<p style="padding:8px 0;margin:0 0 10px 0;border-bottom:1px solid #eee">'+(t[0]||a[0])+"</p>",c.style.cssText="display:block;margin:0 0 8px 0;padding:4px 6px;overflow:auto;width:"+(b-15)+"px;"+"height:"+(y-100)+"px;";var n=u.query(i,"toolbox.feature.dataView.optionToContent");typeof n!="function"?c.value=S():c.value=n(i),l.appendChild(c),p.style.cssText="float:right;padding:1px 6px;",p.innerHTML=t[1]||a[1],p.onclick=w,l.appendChild(p),u.query(i,"toolbox.feature.dataView.readOnly")===!1?(h.style.cssText="float:right;margin-right:10px;padding:1px 6px;",h.innerHTML=t[2]||a[2],h.onclick=x,l.appendChild(h),c.readOnly=!1,c.style.cursor="default"):(c.readOnly=!0,c.style.cursor="text"),m="width:"+b+"px;"+"height:"+y+"px;"+"background-color:#fff;",l.style.cssText=v+m,s.onselectstart=function(){return!0}}function S(){var e,n,r,s,o,u,a=[],f="";if(i.xAxis){i.xAxis instanceof Array?a=i.xAxis:a=[i.xAxis];for(e=0,s=a.length;e<s;e++)if((a[e].type||"category")=="category"){u=[];for(n=0,r=a[e].data.length;n<r;n++)o=a[e].data[n],u.push(typeof o.value!="undefined"?o.value:o);f+=u.join(", ")+"\n\n"}}if(i.yAxis){i.yAxis instanceof Array?a=i.yAxis:a=[i.yAxis];for(e=0,s=a.length;e<s;e++)if(a[e].type=="category"){u=[];for(n=0,r=a[e].data.length;n<r;n++)o=a[e].data[n],u.push(typeof o.value!="undefined"?o.value:o);f+=u.join(", ")+"\n\n"}}var l=i.series,c;for(e=0,s=l.length;e<s;e++){u=[];for(n=0,r=l[e].data.length;n<r;n++)o=l[e].data[n],l[e].type==t.CHART_TYPE_PIE||l[e].type==t.CHART_TYPE_MAP?c=(o.name||"-")+":":c="",l[e].type==t.CHART_TYPE_SCATTER&&(o=typeof o.value!="undefined"?o.value:o,o=o.join(", ")),u.push(c+(typeof o.value!="undefined"?o.value:o));f+=(l[e].name||"-")+" : \n",f+=u.join(l[e].type==t.CHART_TYPE_SCATTER?"\n":", "),f+="\n\n"}return f}function x(){var e=c.value,r=u.query(i,"toolbox.feature.dataView.contentToOption");if(typeof r!="function"){e=e.split("\n");var s=[];for(var o=0,a=e.length;o<a;o++)e[o]=N(e[o]),e[o]!==""&&s.push(e[o]);T(s)}else r(e,i);w(),setTimeout(function(){n&&n.dispatch(t.EVENT.DATA_VIEW_CHANGED,null,{option:i})},f?800:100)}function T(e){var n,r,s,o,u,a=[],f=0,l,c;if(i.xAxis){i.xAxis instanceof Array?a=i.xAxis:a=[i.xAxis];for(n=0,o=a.length;n<o;n++)if((a[n].type||"category")=="category"){l=e[f].split(",");for(r=0,s=a[n].data.length;r<s;r++)c=N(l[r]||""),u=a[n].data[r],typeof a[n].data[r].value!="undefined"?a[n].data[r].value=c:a[n].data[r]=c;f++}}if(i.yAxis){i.yAxis instanceof Array?a=i.yAxis:a=[i.yAxis];for(n=0,o=a.length;n<o;n++)if(a[n].type=="category"){l=e[f].split(",");for(r=0,s=a[n].data.length;r<s;r++)c=N(l[r]||""),u=a[n].data[r],typeof a[n].data[r].value!="undefined"?a[n].data[r].value=c:a[n].data[r]=c;f++}}var h=i.series;for(n=0,o=h.length;n<o;n++){f++;if(h[n].type==t.CHART_TYPE_SCATTER)for(var r=0,s=h[n].data.length;r<s;r++)l=e[f],c=l.replace(" ","").split(","),typeof h[n].data[r].value!="undefined"?h[n].data[r].value=c:h[n].data[r]=c,f++;else{l=e[f].split(",");for(var r=0,s=h[n].data.length;r<s;r++)c=(l[r]||"").replace(/.*:/,""),c=N(c),c=c!="-"&&c!==""?c-0:"-",typeof h[n].data[r].value!="undefined"?h[n].data[r].value=c:h[n].data[r]=c;f++}}}function N(e){var t=new RegExp("(^[\\s\\t\\xa0\\u3000]+)|([\\u3000\\xa0\\s\\t]+$)","g");return e.replace(t,"")}function C(e){e=e||window.event,e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function k(){l.className=g,w(),s.firstChild.appendChild(l),window.addEventListener?(l.addEventListener("click",C),l.addEventListener("mousewheel",C),l.addEventListener("mousemove",C),l.addEventListener("mousedown",C),l.addEventListener("mouseup",C),l.addEventListener("touchstart",C),l.addEventListener("touchmove",C),l.addEventListener("touchend",C)):(l.attachEvent("onclick",C),l.attachEvent("onmousewheel",C),l.attachEvent("onmousemove",C),l.attachEvent("onmousedown",C),l.attachEvent("onmouseup",C))}function L(){y=r.getHeight(),b=r.getWidth(),l.offsetHeight>10&&(m="width:"+b+"px;"+"height:"+y+"px;"+"background-color:#fff;",l.style.cssText=v+m,c.style.cssText="display:block;margin:0 0 8px 0;padding:4px 6px;overflow:auto;width:"+(b-15)+"px;"+"height:"+(y-100)+"px;")}function A(){window.removeEventListener?(l.removeEventListener("click",C),l.removeEventListener("mousewheel",C),l.removeEventListener("mousemove",C),l.removeEventListener("mousedown",C),l.removeEventListener("mouseup",C),l.removeEventListener("touchstart",C),l.removeEventListener("touchmove",C),l.removeEventListener("touchend",C)):(l.detachEvent("onclick",C),l.detachEvent("onmousewheel",C),l.detachEvent("onmousemove",C),l.detachEvent("onmousedown",C),l.detachEvent("onmouseup",C)),h.onclick=null,p.onclick=null,d&&(l.removeChild(c),l.removeChild(h),l.removeChild(p)),c=null,h=null,p=null,s.firstChild.removeChild(l),l=null,u=null}var o=e("./base");o.call(this,t,r);var u=this;u.type=t.COMPONENT_TYPE_DATAVIEW;var a=["Data View","close","refresh"],f=e("zrender/tool/env").canvasSupported,l=document.createElement("div"),c=document.createElement("textArea"),h=document.createElement("button"),p=document.createElement("button"),d=!1,v="position:absolute;display:block;overflow:hidden;transition:height 0.8s,background-color 1s;-moz-transition:height 0.8s,background-color 1s;-webkit-transition:height 0.8s,background-color 1s;-o-transition:height 0.8s,background-color 1s;z-index:1;left:0;top:0;",m,g="echarts-dataview",y=r.getHeight(),b=r.getWidth();u.dispose=A,u.resize=L,u.show=E,u.hide=w,k()}return e("../component").define("dataView",t),t}),r("echarts/util/coordinates",["require","zrender/tool/math"],function(e){function n(e,n){return[e*t.sin(n),e*t.cos(n)]}function r(e,t){return[Math.sqrt(e*e+t*t),Math.atan(t/e)]}var t=e("zrender/tool/math");return{polar2cartesian:n,cartesian2polar:r}}),r("echarts/component/polar",["require","./base","../util/coordinates","zrender/tool/util","../component"],function(e){function t(t,n,r,i,s){function p(e,t){s=t,B(e)}function d(){for(var e=0;e<l.length;e++)f.reformOption(l[e]),h=[l[e],i],v(e),m(e),y(e),L(e),g(e);for(var e=0;e<f.shapeList.length;e++)f.shapeList[e].id=r.newShapeId(f.type),r.addShape(f.shapeList[e])}function v(e){var t=l[e],n=f.deepQuery(h,"indicator"),i=n.length,s=t.startAngle,o=2*Math.PI/i,a=f.parsePercent(t.radius,Math.min(r.getWidth(),r.getHeight())/2),c=t.__ecIndicator=[],p;for(var d=0;d<i;d++)p=u.polar2cartesian(a,s*Math.PI/180+o*d),c.push({vector:[p[1],-p[0]]})}function m(e){var t=l[e],n=t.__ecIndicator,r=t.splitArea,i=t.splitLine,s=N(e),o=t.splitNumber,u=i.lineStyle.color,a=i.lineStyle.width,c=i.show,p=f.deepQuery(h,"axisLine");w(n,o,s,r,u,a,c),C(n,s,p)}function g(e){var t=l[e],n=f.deepQuery(h,"indicator"),r=t.__ecIndicator,s,o,u,c,p=f.deepQuery(h,"splitNumber"),d=N(e),o,v,m,g,y,b=f.deepQuery(h,"precision");for(var w=0;w<n.length;w++){s=f.deepQuery([n[w],t,i],"axisLabel");if(s.show){u={},u.textFont=f.getFont(),u=a.merge(u,s),u.lineWidth=u.width,o=r[w].vector,v=r[w].value,g=w/n.length*2*Math.PI,y=s.offset||10;for(var E=1;E<=p;E++)c=a.merge({},u),m=E*(v.max-v.min)/p+v.min,b&&(m=m.toFixed(b)),c.text=f.numAddCommas(m),c.x=E*o[0]/p+Math.cos(g)*y+d[0],c.y=E*o[1]/p+Math.sin(g)*y+d[1],f.shapeList.push({shape:"text",style:c,draggable:!1,hoverable:!1})}}}function y(e){var t=l[e],n=t.__ecIndicator,r,s=f.deepQuery(h,"indicator"),o=N(e),u,a,c,p,d=0,v=0,m,g;for(var y=0;y<s.length;y++){c=f.deepQuery([s[y],t,i],"name");if(!c.show)continue;g=f.deepQuery([c,t,i],"textStyle"),u={},u.textFont=f.getFont(g),u.color=g.color,typeof c.formatter=="function"?u.text=c.formatter(s[y].text,y):typeof c.formatter=="string"?u.text=c.formatter.replace("{value}",s[y].text):u.text=s[y].text,r=n[y].vector,Math.round(r[0])>0?a="left":Math.round(r[0])<0?a="right":a="center",c.margin?(m=c.margin,d=r[0]>0?m:-m,v=r[1]>0?m:-m,d=r[0]===0?0:d,v=r[1]===0?0:v,r=T(r,o,1)):r=T(r,o,1.2),u.textAlign=a,u.x=r[0]+d,u.y=r[1]+v,c.rotate&&(p=[c.rotate/180*Math.PI,r[0],r[1]]),f.shapeList.push({shape:"text",style:u,draggable:!1,hoverable:!1,rotation:p})}}function b(e){var e=e||0,t=l[e],n=N(e),r=t.__ecIndicator,i=r.length,s=[],o,u;for(var a=0;a<i;a++)o=r[a].vector,s.push(T(o,n,1.2));return u=S(s,"fill","rgba(0,0,0,0)","",1),u}function w(e,t,n,r,i,s,o){var u,a,l,c;for(var h=0;h<t;h++)a=(t-h)/t,c=E(e,a,n),o&&(u=S(c,"stroke","",i,s),f.shapeList.push(u)),r.show&&(l=(t-h-1)/t,x(e,r,a,l,n,h))}function E(e,t,n){var r=[],i=e.length,s;for(var o=0;o<i;o++)s=e[o].vector,r.push(T(s,n,t));return r}function S(e,t,n,r,i,s,o){return{shape:"polygon",style:{pointList:e,brushType:t,color:n,strokeColor:r,lineWidth:i},hoverable:s||!1,draggable:o||!1}}function x(e,t,n,r,i,s){var o=e.length,u,a=t.areaStyle.color,l,c,h,p=[],o=e.length,d;typeof a=="string"&&(a=[a]),l=a.length,u=a[s%l];for(var v=0;v<o;v++)p=[],c=e[v].vector,h=e[(v+1)%o].vector,p.push(T(c,i,n)),p.push(T(c,i,r)),p.push(T(h,i,r)),p.push(T(h,i,n)),d=S(p,"fill",u,"",1),f.shapeList.push(d)}function T(e,t,n){return[e[0]*n+t[0],e[1]*n+t[1]]}function N(e){var e=e||0;return f.parseCenter(r,l[e].center)}function C(e,t,n){var r=e.length,i,s,o=n.lineStyle,u=o.color,a=o.width,l=o.type;for(var c=0;c<r;c++)s=e[c].vector,i=k(t[0],t[1],s[0]+t[0],s[1]+t[1],u,a,l),f.shapeList.push(i)}function k(e,t,n,r,i,s,o){return{shape:"line",style:{xStart:e,yStart:t,xEnd:n,yEnd:r,strokeColor:i,lineWidth:s,lineType:o},hoverable:!1}}function L(e){var t=l[e],n=f.deepQuery(h,"indicator"),r=n.length,i=t.__ecIndicator,s,o,u,a=A(e),c=t.splitNumber,p=f.deepQuery(h,"boundaryGap"),d=f.deepQuery(h,"precision"),v=f.deepQuery(h,"power"),m=f.deepQuery(h,"scale");for(var g=0;g<r;g++)typeof n[g].max=="number"?(o=n[g].max,u=n[g].min||0,s={max:o,min:u}):s=O(a,g,c,p,d,v,m),i[g].value=s}function A(e){var n=[],r,o,u=s.legend;for(var a=0;a<c.length;a++){r=c[a];if(r.type!=t.CHART_TYPE_RADAR)continue;o=r.data||[];for(var l=0;l<o.length;l++)polarIndex=f.deepQuery([o[l],r,i],"polarIndex")||0,polarIndex==e&&(!u||u.isSelected(o[l].name))&&n.push(o[l])}return n}function O(e,t,n,r,i,s,o){function m(e){(e>u||u===undefined)&&(u=e),(e<a||a===undefined)&&(a=e)}var u,a,f,l,c,h=0,p,d,v;if(!e||e.length===0)return;e.length==1&&(a=0);if(e.length!=1)for(var g=0;g<e.length;g++)f=e[g].value[t],m(f);else{v=e[0];for(var g=0;g<v.value.length;g++)m(v.value[g])}if(e.length!=1)if(o){l=M(u,a,n,i,s);if(l>=1)a=Math.floor(a/l)*l-l;else{if(l===0)return u>0?(d=0,p=2*u):u===0?(d=0,p=100):(p=0,d=2*a),{max:p,min:d};c=(l+"").split(".")[1],h=c.length,a=Math.floor(a*Math.pow(10,h))/Math.pow(10,h)-l}Math.abs(a)<=l&&(a=0),u=a+Math.floor(l*Math.pow(10,h)*(n+1))/Math.pow(10,h)}else a=a>0?0:a;return r&&(u=u>0?u*1.2:u*.8,a=a>0?a*.8:a*1.2),{max:u,min:a}}function M(e,t,n,r,i){var s=(e-t)/n,o,u;if(s>1)return i?(s=Math.ceil(s),s%i>0?(Math.ceil(s/i)+1)*i:s):(o=(s+"").split(".")[0],u=o.length,o.charAt(0)>=5?Math.pow(10,u):(o.charAt(0)-0+1)*Math.pow(10,u-1));if(s==1)return 1;if(s===0)return 0;if(!r){o=(s+"").split(".")[1],u=0;while(o[u]=="0")u++;return o[u]>=5?"0."+o.substring(0,u+1)-0+1/Math.pow(10,u):"0."+o.substring(0,u+1)-0+1/Math.pow(10,u+1)}return Math.ceil(s*Math.pow(10,r))/Math.pow(10,r)}function _(e,t,n){e=e||0,t=t||0;var r=l[e].__ecIndicator;if(t>=r.length)return;var i=l[e].__ecIndicator[t],s=N(e),o=i.vector,u=i.value.max,a=i.value.min,f;if(typeof n=="undefined")return s;switch(n){case"min":n=a;break;case"max":n=u;break;case"center":n=(u+a)/2}return u!=a?f=(n-a)/(u-a):f=.5,T(o,s,f)}function D(e){var t=P(e);return t?t.polarIndex:-1}function P(e){var t,n,i,s,o,a,c,h,p,d=Math.min(r.getWidth(),r.getHeight())/2;for(var v=0;v<l.length;v++){t=l[v],n=N(v);if(e[0]==n[0]&&e[1]==n[1])return{polarIndex:v,valueIndex:0};i=f.parsePercent(t.radius,d),o=t.startAngle,a=t.indicator,c=a.length,h=2*Math.PI/c,s=u.cartesian2polar(e[0]-n[0],n[1]-e[1]),e[0]-n[0]<0&&(s[1]+=Math.PI),s[1]<0&&(s[1]+=2*Math.PI),p=s[1]-o/180*Math.PI+Math.PI*2;if(Math.abs(Math.cos(p%(h/2)))*i>s[0])return{polarIndex:v,valueIndex:Math.floor((p+h/2)/h)%c}}}function H(e){var e=e||0;return l[e].indicator}function B(e){e&&(i=e,l=i.polar,c=i.series),f.clear(),d()}var o=e("./base");o.call(this,t,r);var u=e("../util/coordinates"),a=e("zrender/tool/util"),f=this;f.type=t.COMPONENT_TYPE_POLAR;var l,c,h;f.refresh=B,f.getVector=_,f.getDropBox=b,f.getCenter=N,f.getIndicator=H,f.isInside=D,f.getNearestIndex=P,p(i,s)}return e("../component").define("polar",t),t}),r("echarts/theme/default",[],function(){var e={};return e}),r("echarts/echarts",["require","zrender/tool/env","./config","zrender/tool/util","zrender","zrender/tool/event","zrender/config","./util/shape/icon","./util/shape/markLine","./chart","./chart/island","./component","./component/title","./component/axis","./component/categoryAxis","./component/valueAxis","./component/grid","./component/dataZoom","./component/legend","./component/dataRange","./component/tooltip","./component/toolbox","./component/dataView","./component/polar","./util/ecQuery","./util/ecData","./chart","./component","zrender/tool/util","./util/ecQuery","zrender/tool/util","zrender/tool/color","zrender/tool/util","./util/ecQuery","zrender/tool/util","./util/ecQuery","zrender/tool/util","zrender","zrender/tool/util","zrender/tool/util","./theme/default","./theme/default"],function(e){function u(t){function E(){var r=e("zrender");(r.version||"1.0.3").replace(".","")-0<n.dependencies.zrender.replace(".","")-0&&console.error("ZRender "+(r.version||"1.0.3-")+" is too old for ECharts "+n.version+". Current version need ZRender "+n.dependencies.zrender+"+"),f=r.init(t),l={},p=[],d={};var s=e("zrender/tool/event");s.Dispatcher.call(d);for(var o in i.EVENT)o!="CLICK"&&o!="HOVER"&&o!="MAP_ROAM"&&d.bind(i.EVENT[o],x);var c=e("zrender/config");f.on(c.EVENT.CLICK,T),f.on(c.EVENT.MOUSEOVER,N),f.on(c.EVENT.DRAGSTART,C),f.on(c.EVENT.DRAGEND,M),f.on(c.EVENT.DRAGENTER,k),f.on(c.EVENT.DRAGOVER,L),f.on(c.EVENT.DRAGLEAVE,A),f.on(c.EVENT.DROP,O),e("./util/shape/icon"),e("./util/shape/markLine");var h=e("./chart");e("./chart/island");var v=h.get("island");y=new v(u,d,f);var m=e("./component");e("./component/title"),e("./component/axis"),e("./component/categoryAxis"),e("./component/valueAxis"),e("./component/grid"),e("./component/dataZoom"),e("./component/legend"),e("./component/dataRange"),e("./component/tooltip"),e("./component/toolbox"),e("./component/dataView"),e("./component/polar");var g=m.get("toolbox");b=new g(u,d,f,t,a),V()}function x(e){e.__echartsId=e.__echartsId||a.id;var t=!0;e.__echartsId!=a.id&&(t=!1),S||(S=e.type);switch(e.type){case i.EVENT.LEGEND_SELECTED:_(e);break;case i.EVENT.DATA_ZOOM:if(!t){var n=a.component.dataZoom;n&&(n.silence(!0),n.absoluteZoom(e.zoom),n.silence(!1))}D(e);break;case i.EVENT.DATA_RANGE:t&&P(e);break;case i.EVENT.MAGIC_TYPE_CHANGED:if(!t){var r=a.component.toolbox;r&&(r.silence(!0),r.setMagicType(e.magicType),r.silence(!1))}H(e);break;case i.EVENT.DATA_VIEW_CHANGED:t&&B(e);break;case i.EVENT.TOOLTIP_HOVER:t&&j(e);break;case i.EVENT.RESTORE:F();break;case i.EVENT.REFRESH:t&&I(e);break;case i.EVENT.TOOLTIP_IN_GRID:case i.EVENT.TOOLTIP_OUT_GRID:if(!t){var s=a.component.grid;s&&f.trigger("mousemove",{connectTrigger:!0,zrenderX:s.getX()+e.x*s.getWidth(),zrenderY:s.getY()+e.y*s.getHeight()})}else if(v){var s=a.component.grid;s&&(e.x=(e.event.zrenderX-s.getX())/s.getWidth(),e.y=(e.event.zrenderY-s.getY())/s.getHeight())}}if(v&&t&&S==e.type){for(var o in v)v[o].connectedEventHandler(e);S=null}if(!t||!v&&t)S=null}function T(e){var t=p.length;while(t--)p[t]&&p[t].onclick&&p[t].onclick(e);if(e.target){var n=U(e.target);n&&typeof n.seriesIndex!="undefined"&&d.dispatch(i.EVENT.CLICK,e.event,n)}}function N(e){if(e.target){var t=U(e.target);t&&typeof t.seriesIndex!="undefined"&&d.dispatch(i.EVENT.HOVER,e.event,t)}}function C(e){m={dragIn:!1,dragOut:!1,needRefresh:!1};var t=p.length;while(t--)p[t]&&p[t].ondragstart&&p[t].ondragstart(e)}function k(e){var t=p.length;while(t--)p[t]&&p[t].ondragenter&&p[t].ondragenter(e)}function L(e){var t=p.length;while(t--)p[t]&&p[t].ondragover&&p[t].ondragover(e)}function A(e){var t=p.length;while(t--)p[t]&&p[t].ondragleave&&p[t].ondragleave(e)}function O(e){var t=p.length;while(t--)p[t]&&p[t].ondrop&&p[t].ondrop(e,m);y.ondrop(e,m)}function M(e){var t=p.length;while(t--)p[t]&&p[t].ondragend&&p[t].ondragend(e,m);y.ondragend(e,m),m.needRefresh&&(R(y.getOption()),d.dispatch(i.EVENT.DATA_CHANGED,e.event,U(e.target)),d.dispatch(i.EVENT.REFRESH))}function _(e){m.needRefresh=!1;var t=p.length;while(t--)p[t]&&p[t].onlegendSelected&&p[t].onlegendSelected(e,m);g=e.selected,m.needRefresh&&d.dispatch(i.EVENT.REFRESH)}function D(e){m.needRefresh=!1;var t=p.length;while(t--)p[t]&&p[t].ondataZoom&&p[t].ondataZoom(e,m);m.needRefresh&&d.dispatch(i.EVENT.REFRESH)}function P(e){m.needRefresh=!1;var t=p.length;while(t--)p[t]&&p[t].ondataRange&&p[t].ondataRange(e,m);m.needRefresh&&f.refresh()}function H(){z(q())}function B(e){R(e.option),d.dispatch(i.EVENT.DATA_CHANGED,null,e),d.dispatch(i.EVENT.REFRESH)}function j(e){var t=p.length,n=[];while(t--)p[t]&&p[t].ontooltipHover&&p[t].ontooltipHover(e,n)}function F(){a.restore()}function I(e){w=!0,a.refresh(e),w=!1}function q(e){var t=e||b.getMagicOption(),n;if(c.xAxis)if(c.xAxis instanceof Array){n=c.xAxis.length;while(n--)t.xAxis[n].data=c.xAxis[n].data}else t.xAxis.data=c.xAxis.data;if(c.yAxis)if(c.yAxis instanceof Array){n=c.yAxis.length;while(n--)t.yAxis[n].data=c.yAxis[n].data}else t.yAxis.data=c.yAxis.data;n=t.series.length;while(n--)t.series[n].data=c.series[n].data;return t}function R(t){var n=e("./util/ecQuery");if(n.query(t,"dataZoom.show")||n.query(t,"toolbox.show")&&n.query(t,"toolbox.feature.dataZoom.show")){for(var r=0,s=p.length;r<s;r++)if(p[r].type==i.COMPONENT_TYPE_DATAZOOM){p[r].syncBackupData(t,c);return}}else{var o=t.series,u;for(var r=0,s=o.length;r<s;r++){u=o[r].data;for(var a=0,f=u.length;a<f;a++)c.series[r].data[a]=u[a]}}}function U(t){if(t){var n=e("./util/ecData"),r=n.get(t,"seriesIndex"),i=n.get(t,"dataIndex");return i=a.component.dataZoom?a.component.dataZoom.getRealDataIndex(r,i):i,{seriesIndex:r,dataIndex:i,data:n.get(t,"data"),name:n.get(t,"name"),value:n.get(t,"value")}}return}function z(n){$(n);if(n.backgroundColor)if(!r&&n.backgroundColor.indexOf("rgba")!=-1){var i=n.backgroundColor.split(",");t.style.filter="alpha(opacity="+i[3].substring(0,i[3].lastIndexOf(")"))*100+")",i.length=3,i[0]=i[0].replace("a",""),t.style.backgroundColor=i.join(",")+")"}else t.style.backgroundColor=n.backgroundColor;V(),f.clear();var s=e("./chart"),o=e("./component"),l;if(n.title){var c=o.get("title");l=new c(u,d,f,n),p.push(l),a.component.title=l}var h;if(n.tooltip){var v=o.get("tooltip");h=new v(u,d,f,n,t,a),p.push(h),a.component.tooltip=h}var m;if(n.legend){var w=o.get("legend");m=new w(u,d,f,n,g),p.push(m),a.component.legend=m}var E;if(n.dataRange){var S=o.get("dataRange");E=new S(u,d,f,n),p.push(E),a.component.dataRange=E}var x,T,N,C;if(n.grid||n.xAxis||n.yAxis){var k=o.get("grid");x=new k(u,d,f,n),p.push(x),a.component.grid=x;var L=o.get("dataZoom");T=new L(u,d,f,n,{legend:m,grid:x}),p.push(T),a.component.dataZoom=T;var A=o.get("axis");N=new A(u,d,f,n,{legend:m,grid:x},"xAxis"),p.push(N),a.component.xAxis=N,C=new A(u,d,f,n,{legend:m,grid:x},"yAxis"),p.push(C),a.component.yAxis=C}var O;if(n.polar){var M=o.get("polar");O=new M(u,d,f,n,{legend:m}),p.push(O),a.component.polar=O}h&&h.setComponent();var _,D,P,H={};for(var B=0,j=n.series.length;B<j;B++){D=n.series[B].type;if(!D){console.error("series["+B+"] chart type has not been defined.");continue}H[D]||(H[D]=!0,_=s.get(D),_?(P=new _(u,d,f,n,{tooltip:h,legend:m,dataRange:E,grid:x,xAxis:N,yAxis:C,polar:O}),p.push(P),a.chart[D]=P):console.error(D+" has not been required."))}y.render(n),b.render(n,{dataZoom:T});if(n.animation&&!n.renderAsImage){var F=p.length;while(F--)P=p[F],P&&P.animation&&P.shapeList&&P.shapeList.length<n.animationThreshold&&P.animation();f.refresh()}else f.render();var I="IMG"+a.id,q=document.getElementById(I);n.renderAsImage&&r?(q?q.src=tt(n.renderAsImage):(q=nt(n.renderAsImage),q.id=I,q.style.position="absolute",q.style.left=0,q.style.top=0,t.firstChild.appendChild(q)),ot(),f.un(),V(),f.clear()):q&&q.parentNode.removeChild(q),q=null}function W(){var t=e("zrender/tool/util");h.legend&&h.legend.selected?g=h.legend.selected:g={},c=t.clone(h),l=t.clone(h),y.clear(),b.reset(l),z(l)}function X(t){t=t||{};var n=t.option;if(!w&&t.option){var r=e("./util/ecQuery");r.query(c,"toolbox.show")&&r.query(c,"toolbox.feature.magicType.show")?n=q():n=q(y.getOption());var i=e("zrender/tool/util");i.merge(n,t.option,{overwrite:!0,recursive:!0}),i.merge(c,t.option,{overwrite:!0,recursive:!0}),i.merge(h,t.option,{overwrite:!0,recursive:!0}),y.refresh(n),b.refresh(n)}f.clearAnimation();for(var s=0,o=p.length;s<o;s++)p[s].refresh&&p[s].refresh(n);f.refresh()}function V(){f.clearAnimation();var e=p.length;while(e--)p[e]&&p[e].dispose&&p[e].dispose();p=[],a.chart={island:y},a.component={toolbox:b}}function $(t){typeof t.backgroundColor=="undefined"&&(t.backgroundColor=u.backgroundColor),typeof t.calculable=="undefined"&&(t.calculable=u.calculable),typeof t.calculableColor=="undefined"&&(t.calculableColor=u.calculableColor),typeof t.calculableHolderColor=="undefined"&&(t.calculableHolderColor=u.calculableHolderColor),typeof t.nameConnector=="undefined"&&(t.nameConnector=u.nameConnector),typeof t.valueConnector=="undefined"&&(t.valueConnector=u.valueConnector),typeof t.animation=="undefined"&&(t.animation=u.animation),typeof t.animationThreshold=="undefined"&&(t.animationThreshold=u.animationThreshold),typeof t.animationDuration=="undefined"&&(t.animationDuration=u.animationDuration),typeof t.animationEasing=="undefined"&&(t.animationEasing=u.animationEasing),typeof t.addDataAnimation=="undefined"&&(t.addDataAnimation=u.addDataAnimation);var n=e("zrender/tool/color");t.color&&t.color.length>0?f.getColor=function(e){return n.getColor(e,t.color)}:f.getColor=function(e){return n.getColor(e,u.color)},typeof t.DRAG_ENABLE_TIME=="undefined"&&(t.DRAG_ENABLE_TIME=u.DRAG_ENABLE_TIME)}function J(t,n){var r=e("zrender/tool/util");n?l=r.clone(t):r.merge(l,r.clone(t),{overwrite:!0,recursive:!0});if(!l.series||l.series.length===0)return;return c=r.clone(l),h=r.clone(l),l.legend&&l.legend.selected?g=l.legend.selected:g={},y.clear(),b.reset(l),z(l),a}function K(){var t=e("./util/ecQuery"),n=e("zrender/tool/util");return t.query(c,"toolbox.show")&&t.query(c,"toolbox.feature.magicType.show")?n.clone(q()):n.clone(q(y.getOption()))}function Q(e,t){return t?(l.series=e,a.setOption(l,t)):a.setOption({series:e}),a}function G(){return K().series}function Y(t,n,r,s,o){var u=e("./util/ecQuery"),f;u.query(c,"toolbox.show")&&u.query(c,"toolbox.feature.magicType.show")?f=q():f=q(y.getOption());var l=e("zrender/tool/util"),v=t instanceof Array?t:[[t,n,r,s,o]],m,w;for(var E=0,S=v.length;E<S;E++){t=v[E][0],n=v[E][1],r=v[E][2],s=v[E][3],o=v[E][4];if(h.series[t]){r?(h.series[t].data.unshift(n),c.series[t].data.unshift(n),s||(h.series[t].data.pop(),n=c.series[t].data.pop())):(h.series[t].data.push(n),c.series[t].data.push(n),s||(h.series[t].data.shift(),n=c.series[t].data.shift()));if(typeof o!="undefined"&&h.series[t].type==i.CHART_TYPE_PIE&&c.legend&&c.legend.data)f.legend.data=c.legend.data,r?(h.legend.data.unshift(o),c.legend.data.unshift(o)):(h.legend.data.push(o),c.legend.data.push(o)),s||(w=l.indexOf(c.legend.data,n.name),w!=-1&&(h.legend.data.splice(w,1),c.legend.data.splice(w,1))),g[o]=!0;else if(typeof o!="undefined"&&typeof h.xAxis!="undefined"&&typeof h.yAxis!="undefined"){m=h.series[t].xAxisIndex||0;if(typeof h.xAxis[m].type=="undefined"||h.xAxis[m].type=="category")r?(h.xAxis[m].data.unshift(o),c.xAxis[m].data.unshift(o),s||(h.xAxis[m].data.pop(),c.xAxis[m].data.pop())):(h.xAxis[m].data.push(o),c.xAxis[m].data.push(o),s||(h.xAxis[m].data.shift(),c.xAxis[m].data.shift()));m=h.series[t].yAxisIndex||0,h.yAxis[m].type=="category"&&(r?(h.yAxis[m].data.unshift(o),c.yAxis[m].data.unshift(o),s||(h.yAxis[m].data.pop(),c.yAxis[m].data.pop())):(h.yAxis[m].data.push(o),c.yAxis[m].data.push(o),s||(h.yAxis[m].data.shift(),c.yAxis[m].data.shift())))}}}f.legend&&(f.legend.selected=g);for(var E=0,S=p.length;E<S;E++)f.addDataAnimation&&p[E].addDataAnimation&&p[E].addDataAnimation(v),p[E].type==i.COMPONENT_TYPE_DATAZOOM&&(p[E].silence(!0),p[E].init(f),p[E].silence(!1));return y.refresh(f),b.refresh(f),setTimeout(function(){d.dispatch(i.EVENT.REFRESH,"",{option:f})},f.addDataAnimation?500:0),a}function Z(){return t}function et(){return f}function tt(e){if(!r)return"";if(p.length===0){var t="IMG"+a.id,n=document.getElementById(t);if(n)return n.src}a.component.tooltip&&a.component.tooltip.hideTip(),e=e||"png",e!="png"&&e!="jpeg"&&(e="png");var i=l.backgroundColor&&l.backgroundColor.replace(" ","")=="rgba(0,0,0,0)"?"#fff":l.backgroundColor;return f.toDataURL("image/"+e,i)}function nt(e){var t=document.createElement("img");return t.src=tt(e),t.title=h.title&&h.title.text||"ECharts",t}function rt(n){if(!lt())return tt(n);var r,i=[t.offsetLeft,t.offsetTop,t.offsetWidth,t.offsetHeight],s={self:{img:a.getDataURL(n),left:i[0],top:i[1],right:i[0]+i[2],bottom:i[1]+i[3]}},o=s.self.left,u=s.self.top,f=s.self.right,c=s.self.bottom;for(var h in v)r=v[h].getDom(),i=[r.offsetLeft,r.offsetTop,r.offsetWidth,r.offsetHeight],s[h]={img:v[h].getDataURL(n),left:i[0],top:i[1],right:i[0]+i[2],bottom:i[1]+i[3]},o=Math.min(o,s[h].left),u=Math.min(u,s[h].top),f=Math.max(f,s[h].right),c=Math.max(c,s[h].bottom);var p=document.createElement("div");p.style.position="absolute",p.style.left="-4000px",p.style.width=f-o+"px",p.style.height=c-u+"px",document.body.appendChild(p);var d=e("zrender").init(p);for(var h in s)d.addShape({shape:"image",style:{x:s[h].left-o,y:s[h].top-u,image:s[h].img}});d.render();var m=l.backgroundColor&&l.backgroundColor.replace(" ","")=="rgba(0,0,0,0)"?"#fff":l.backgroundColor,g=d.toDataURL("image/png",m);return setTimeout(function(){d.dispose(),p.parentNode.removeChild(p),p=null},100),g}function it(e){var t=document.createElement("img");return t.src=rt(e),t.title=h.title&&h.title.text||"ECharts",t}function st(e,t){return d.bind(e,t),a}function ot(e,t){return d.unbind(e,t),a}function ut(e){if(!e)return a;v||(v={});if(e instanceof Array)for(var t=0,n=e.length;t<n;t++)v[e[t].id]=e[t];else v[e.id]=e;return a}function at(e){if(!e||!v)return a;if(e instanceof Array)for(var t=0,n=e.length;t<n;t++)delete v[e[t].id];else delete v[e.id];for(var r in v)return r,a;return v=!1,a}function ft(e){e.__echartsId!=a.id&&x(e)}function lt(){return!!v}function ct(t){b.hideDataView();var n=e("zrender/tool/util");t=t||{},t.textStyle=t.textStyle||{};var r=n.merge(n.clone(t.textStyle),u.textStyle,{overwrite:!1});return t.textStyle.textFont=r.fontStyle+" "+r.fontWeight+" "+r.fontSize+"px "+r.fontFamily,t.textStyle.text=t.text||u.loadingText,typeof t.x!="undefined"&&(t.textStyle.x=t.x),typeof t.y!="undefined"&&(t.textStyle.y=t.y),f.showLoading(t),a}function ht(){return f.hideLoading(),a}function pt(t){var n=e("zrender/tool/util");if(t){if(typeof t=="string")switch(t){case"default":t=e("./theme/default");break;default:t=e("./theme/default")}else t=t||{};for(var s in u)delete u[s];for(var s in i)u[s]=n.clone(i[s]);t.color&&(u.color=[]),t.symbolList&&(u.symbolList=[]),n.merge(u,n.clone(t),{overwrite:!0,recursive:!0})}r||(u.textStyle.fontFamily=u.textStyle.fontFamily2),h&&a.restore()}function dt(){f.resize();if(l.renderAsImage&&r)return z(l),a;f.clearAnimation(),y.resize(),b.resize();for(var e=0,t=p.length;e<t;e++)p[e].resize&&p[e].resize();return f.refresh(),d.dispatch(i.EVENT.RESIZE),a}function vt(){return V(),f.clear(),l={},c={},h={},a}function mt(){var e=t.getAttribute(o);e&&delete s[e],y.dispose(),b.dispose(),d.unbind(),a.clear(),f.dispose(),f=null,a=null;return}var i=e("./config"),u=e("zrender/tool/util").clone(i),a=this,f,l,c,h,p,d,v=!1,m={dragIn:!1,dragOut:!1,needRefresh:!1},g,y,b,w;E();var S=null;a.setOption=J,a.setSeries=Q,a.addData=Y,a.getOption=K,a.getSeries=G,a.getDom=Z,a.getZrender=et,a.getDataURL=tt,a.getImage=nt,a.getConnectedDataURL=rt,a.getConnectedImage=it,a.on=st,a.un=ot,a.connect=ut,a.disConnect=at,a.connectedEventHandler=ft,a.isConnected=lt,a.showLoading=ct,a.hideLoading=ht,a.setTheme=pt,a.resize=dt,a.refresh=X,a.restore=W,a.clear=vt,a.dispose=mt}var t={},n=t,r=e("zrender/tool/env").canvasSupported,i=new Date-0,s={},o="_echarts_instance_";return t.version="1.4.0",t.dependencies={zrender:"1.1.1"},t.init=function(e,t){e=e instanceof Array?e[0]:e;var n=e.getAttribute(o);return n||(n=i++,e.setAttribute(o,n)),s[n]&&s[n].dispose(),s[n]=new u(e),s[n].id=n,s[n].setTheme(t),s[n]},t.getInstanceById=function(e){return s[e]},t}),r("echarts",["echarts/echarts"],function(e){return e}),r("echarts/util/shape/symbol",["require","zrender/tool/color","zrender/shape","zrender/shape/base","zrender/shape"],function(e){function t(){this.type="symbol"}return t.prototype={buildPath:function(t,n){var r=n.pointList,i=this.getRect(n),s=window.devicePixelRatio||1;i={x:Math.floor(i.x),y:Math.floor(i.y),width:Math.floor(i.width),height:Math.floor(i.height)};var o=t.getImageData(i.x*s,i.y*s,i.width*s,i.height*s),u=o.data,a,f=e("zrender/tool/color"),l=f.toArray(n.color),c=l[0],h=l[1],p=l[2],d=i.width;for(var v=1,m=r.length;v<m;v++)a=((Math.floor(r[v][0])-i.x)*s+(Math.floor(r[v][1])-i.y)*d*s*s)*4,u[a]=c,u[a+1]=h,u[a+2]=p,u[a+3]=255;t.putImageData(o,i.x*s,i.y*s);return},getRect:function(t){var n=e("zrender/shape");return n.get("polygon").getRect(t)},isCover:function(){return!1}},e("zrender/shape/base").derive(t),e("zrender/shape").define("symbol",new t),t}),r("echarts/chart/scatter",["require","../component/base","./calculableBase","zrender/tool/color","../util/shape/symbol","../chart"],function(e){function t(t,n,r,i,s){function v(){f.selectedMap={};var e=s.legend,n=[],i,o,u,c;for(var v=0,g=l.length;v<g;v++){i=l[v],o=i.name;if(i.type==t.CHART_TYPE_SCATTER){l[v]=f.reformOption(l[v]),d[v]=f.query(i,"symbol")||p[v%p.length];if(e){f.selectedMap[o]=e.isSelected(o),h[v]=a.alpha(e.getColor(o),.5),u=e.getItemShape(o);if(u){u.shape="icon";var c=d[v];u.style.brushType=c.match("empty")?"stroke":"both",c=c.replace("empty","").toLowerCase(),c.match("star")&&(u.style.n=c.replace("star","")-0||5,c="star"),c.match("image")&&(u.style.image=c.replace(new RegExp("^image:\\/\\/"),""),u.style.x+=Math.round((u.style.width-u.style.height)/2),u.style.width=u.style.height,c="image"),u.style.iconType=c,e.setItemShape(o,u)}}else f.selectedMap[o]=!0,h[v]=r.getColor(v);f.selectedMap[o]&&n.push(v)}}if(n.length===0)return;m(n);for(var v=0,g=f.shapeList.length;v<g;v++)f.shapeList[v].id=r.newShapeId(f.type),r.addShape(f.shapeList[v])}function m(e){var t,n,r,i,o,u,a={},c,h;for(var p=0,d=e.length;p<d;p++){t=e[p],n=l[t];if(n.data.length===0)continue;o=s.xAxis.getAxis(n.xAxisIndex||0),u=s.yAxis.getAxis(n.yAxisIndex||0),a[t]=[];for(var v=0,m=n.data.length;v<m;v++){r=n.data[v],i=typeof r!="undefined"?typeof r.value!="undefined"?r.value:r:"-";if(i=="-"||i.length<2)continue;c=o.getCoord(i[0]),h=u.getCoord(i[1]),a[t].push([c,h,v,r.name||""])}y(o,u,n.data,a[t]),f.buildMark(n,t,s,{xMarkMap:g(t)?y(o,u,n.data,a[t]):{}})}b(a)}function g(e){var t=l[e],n=[];t.markPoint&&t.markPoint.data&&n.push(t.markPoint.data),t.markLine&&t.markLine.data&&n.push(t.markLine.data);var r,i=n.length;while(i--){r=n[i];for(var s=0,o=r.length;s<o;s++)if(r[s].type=="max"||r[s].type=="min"||r[s].type=="average")return!0}return!1}function y(e,t,n,r){var i={min0:Number.POSITIVE_INFINITY,max0:Number.NEGATIVE_INFINITY,sum0:0,counter0:0,average0:0,min1:Number.POSITIVE_INFINITY,max1:Number.NEGATIVE_INFINITY,sum1:0,counter1:0,average1:0},o;for(var u=0,a=r.length;u<a;u++)o=n[r[u][2]].value||n[r[u][2]],i.min0>o[0]&&(i.min0=o[0],i.minY0=r[u][1],i.minX0=r[u][0]),i.max0<o[0]&&(i.max0=o[0],i.maxY0=r[u][1],i.maxX0=r[u][0]),i.sum0+=o[0],i.counter0++,i.min1>o[1]&&(i.min1=o[1],i.minY1=r[u][1],i.minX1=r[u][0]),i.max1<o[1]&&(i.max1=o[1],i.maxY1=r[u][1],i.maxX1=r[u][0]),i.sum1+=o[1],i.counter1++;var f=s.grid.getX(),l=s.grid.getXend(),c=s.grid.getY(),h=s.grid.getYend();i.average0=(i.sum0/i.counter0).toFixed(2)-0;var p=e.getCoord(i.average0);i.averageLine0=[[p,h],[p,c]],i.minLine0=[[i.minX0,h],[i.minX0,c]],i.maxLine0=[[i.maxX0,h],[i.maxX0,c]],i.average1=(i.sum1/i.counter1).toFixed(2)-0;var d=t.getCoord(i.average1);return i.averageLine1=[[f,d],[l,d]],i.minLine1=[[f,i.minY1],[l,i.minY1]],i.maxLine1=[[f,i.maxY1],[l,i.maxY1]],i}function b(e){var t,n,r,i;for(var s in e){t=l[s],n=e[s];if(t.large&&t.data.length>t.largeThreshold){f.shapeList.push(E(n,f.getItemStyleColor(f.query(t,"itemStyle.normal.color"),s,-1)||h[s]));continue}for(var o=0,u=n.length;o<u;o++)r=n[o],i=w(s,r[2],r[3],r[0],r[1]),i&&f.shapeList.push(i)}}function w(e,t,n,r,i){var o=l[e],u=o.data[t],a=s.dataRange,p;if(a){p=isNaN(u[2])?h[e]:a.getColor(u[2]);if(!p)return null}else p=h[e];var v=f.getSymbolShape(o,e,u,t,n,r,i,d[e],p,"rgba(0,0,0,0)","vertical");return v.zlevel=c,v._mark=!1,v._main=!0,v}function E(e,t){return{shape:"symbol",zlevel:c,_main:!0,hoverable:!1,style:{pointList:e,color:t,strokeColor:t}}}function S(e,t,n,r){var i=s.xAxis.getAxis(e.xAxisIndex),o=s.yAxis.getAxis(e.yAxisIndex),u;if(!n.type||n.type!="max"&&n.type!="min"&&n.type!="average")u=[typeof n.xAxis!="string"&&i.getCoordByIndex?i.getCoordByIndex(n.xAxis||0):i.getCoord(n.xAxis||0),typeof n.yAxis!="string"&&o.getCoordByIndex?o.getCoordByIndex(n.yAxis||0):o.getCoord(n.yAxis||0)];else{var a=typeof n.valueIndex!="undefined"?n.valueIndex:1;u=[r.xMarkMap[n.type+"X"+a],r.xMarkMap[n.type+"Y"+a],r.xMarkMap[n.type+"Line"+a],r.xMarkMap[n.type+a]]}return u}function x(e,t){s=t,T(e)}function T(e){e&&(i=e,l=i.series),f.clear(),v()}function N(e,t){s.dataRange&&(T(),t.needRefresh=!0);return}function C(){var e=f.query(i,"animationDuration"),t=f.query(i,"animationEasing"),n,s,o;for(var u=0,a=f.shapeList.length;u<a;u++)if(f.shapeList[u]._main){if(f.shapeList[u].shape=="symbol")continue;o=l[f.shapeList[u]._seriesIndex],n=f.shapeList[u]._x||0,s=f.shapeList[u]._y||0,r.modShape(f.shapeList[u].id,{scale:[0,0,n,s]},!0),r.animate(f.shapeList[u].id,"").when(f.query(o,"animationDuration")||e,{scale:[1,1,n,s]}).start(f.query(o,"animationEasing")||t)}f.animationMark(e,t)}var o=e("../component/base");o.call(this,t,r);var u=e("./calculableBase");u.call(this,r,i);var a=e("zrender/tool/color"),f=this;f.type=t.CHART_TYPE_SCATTER;var l,c=f.getZlevelBase(),h={},p=t.symbolList,d={};f.getMarkCoord=S,f.animation=C,f.init=x,f.refresh=T,f.ondataRange=N,x(i,s)}return e("../util/shape/symbol"),e("../chart").define("scatter",t),t}),r("echarts/util/shape/candle",["require","zrender/tool/matrix","zrender/shape/base","zrender/shape"],function(e){function n(){this.type="candle"}var t=e("zrender/tool/matrix");return n.prototype={_numberOrder:function(e,t){return t-e},buildPath:function(e,t){t.y.sort(this._numberOrder),e.moveTo(t.x,t.y[3]),e.lineTo(t.x,t.y[2]),e.moveTo(t.x-t.width/2,t.y[2]),e.rect(t.x-t.width/2,t.y[2],t.width,t.y[1]-t.y[2]),e.moveTo(t.x,t.y[1]),e.lineTo(t.x,t.y[0]);return},getRect:function(e){var t;return e.brushType=="stroke"||e.brushType=="fill"?t=e.lineWidth||1:t=0,{x:Math.round(e.x-e.width/2-t/2),y:Math.round(e.y[3]-t/2),width:e.width+t,height:e.y[0]-e.y[3]+t}},isCover:function(e,n,r){if(e.__needTransform&&e._transform){var i=[];t.invert(i,e._transform);var s=[n,r];t.mulVector(s,i,[n,r,1]),n==s[0]&&r==s[1]&&(Math.abs(e.rotation[0])>1e-4||Math.abs(e.position[0])>1e-4||Math.abs(e.position[1])>1e-4||Math.abs(e.scale[0]-1)>1e-4||Math.abs(e.scale[1]-1)>1e-4?e.__needTransform=!0:e.__needTransform=!1),n=s[0],r=s[1]}var o;return e.style.__rect?o=e.style.__rect:(o=this.getRect(e.style),o=[o.x,o.x+o.width,o.y,o.y+o.height],e.style.__rect=o),n>=o[0]&&n<=o[1]&&r>=o[2]&&r<=o[3]?!0:!1}},e("zrender/shape/base").derive(n),e("zrender/shape").define("candle",new n),n}),r("echarts/chart/k",["require","../component/base","./calculableBase","../util/ecData","../util/shape/candle","../chart"],function(e){function t(t,n,r,i,s){function h(){f.selectedMap={};var e={top:[],bottom:[]},n;for(var i=0,o=l.length;i<o;i++)l[i].type==t.CHART_TYPE_K&&(l[i]=f.reformOption(l[i]),n=s.xAxis.getAxis(l[i].xAxisIndex),n.type==t.COMPONENT_TYPE_AXIS_CATEGORY&&e[n.getPosition()].push(i));for(var u in e)e[u].length>0&&p(u,e[u]);for(var i=0,o=f.shapeList.length;i<o;i++)f.shapeList[i].id=r.newShapeId(f.type),r.addShape(f.shapeList[i])}function p(e,t){var n=d(t),r=n.locationMap,i=n.maxDataLength;if(i===0||r.length===0)return;v(i,r);for(var o=0,u=t.length;o<u;o++)f.buildMark(l[t[o]],t[o],s)}function d(e){var t,n,r=s.legend,i=[],o=0;for(var u=0,a=e.length;u<a;u++)t=l[e[u]],n=t.name,r?f.selectedMap[n]=r.isSelected(n):f.selectedMap[n]=!0,f.selectedMap[n]&&i.push(e[u]),o=Math.max(o,t.data.length);return{locationMap:i,maxDataLength:o}}function v(e,t){var n,r,i,o,u,a,f={},c,h,p,d;for(var v=0,g=t.length;v<g;v++){n=t[v],r=l[n],i=r.xAxisIndex||0,o=s.xAxis.getAxis(i),c=r.barWidth||Math.floor(o.getGap()/2),d=r.barMaxWidth,d&&d<c&&(c=d),u=r.yAxisIndex||0,a=s.yAxis.getAxis(u),f[n]=[];for(var y=0,b=e;y<b;y++){if(typeof o.getNameByIndex(y)=="undefined")break;h=r.data[y],p=typeof h!="undefined"?typeof h.value!="undefined"?h.value:h:"-";if(p=="-"||p.length!=4)continue;f[n].push([o.getCoordByIndex(y),c,a.getCoord(p[0]),a.getCoord(p[1]),a.getCoord(p[2]),a.getCoord(p[3]),y,o.getNameByIndex(y)])}}m(f)}function m(e){var n,r,i,s,o,u,a,c,h,p,d,v,m,y,b,w;for(var E=0,S=l.length;E<S;E++){d=l[E],y=e[E];if(d.type==t.CHART_TYPE_K&&typeof y!="undefined"){v=d,n=f.query(v,"itemStyle.normal.lineStyle.width"),r=f.query(v,"itemStyle.normal.lineStyle.color"),i=f.query(v,"itemStyle.normal.lineStyle.color0"),s=f.query(v,"itemStyle.normal.color"),o=f.query(v,"itemStyle.normal.color0"),u=f.query(v,"itemStyle.emphasis.lineStyle.width"),a=f.query(v,"itemStyle.emphasis.lineStyle.color"),c=f.query(v,"itemStyle.emphasis.lineStyle.color0"),h=f.query(v,"itemStyle.emphasis.color"),p=f.query(v,"itemStyle.emphasis.color0");for(var x=0,T=y.length;x<T;x++)b=y[x],m=d.data[b[6]],v=m,w=b[3]<b[2],f.shapeList.push(g(E,b[6],b[7],b[0],b[1],b[2],b[3],b[4],b[5],w?f.query(v,"itemStyle.normal.color")||s:f.query(v,"itemStyle.normal.color0")||o,f.query(v,"itemStyle.normal.lineStyle.width")||n,w?f.query(v,"itemStyle.normal.lineStyle.color")||r:f.query(v,"itemStyle.normal.lineStyle.color0")||i,w?f.query(v,"itemStyle.emphasis.color")||h||s:f.query(v,"itemStyle.emphasis.color0")||p||o,f.query(v,"itemStyle.emphasis.lineStyle.width")||u||n,w?f.query(v,"itemStyle.emphasis.lineStyle.color")||a||r:f.query(v,"itemStyle.emphasis.lineStyle.color0")||c||i))}}}function g(e,t,n,r,i,s,o,u,f,h,p,d,v,m,g){var y={shape:"candle",zlevel:c,clickable:!0,style:{x:r,y:[s,o,u,f],width:i,color:h,strokeColor:d,lineWidth:p,brushType:"both"},highlightStyle:{color:v,strokeColor:g,lineWidth:m},_seriesIndex:e};return a.pack(y,l[e],e,l[e].data[t],t,n),y}function y(e,t,n){var r=s.xAxis.getAxis(e.xAxisIndex),i=s.yAxis.getAxis(e.yAxisIndex);return[typeof n.xAxis!="string"&&r.getCoordByIndex?r.getCoordByIndex(n.xAxis||0):r.getCoord(n.xAxis||0),typeof n.yAxis!="string"&&i.getCoordByIndex?i.getCoordByIndex(n.yAxis||0):i.getCoord(n.yAxis||0)]}function b(e,t){s=t,w(e)}function w(e){e&&(i=e,l=i.series),f.clear(),h()}function E(e){var t={};for(var n=0,i=e.length;n<i;n++)t[e[n][0]]=e[n];var o,u,c,h,p,d;for(var n=0,i=f.shapeList.length;n<i;n++){p=f.shapeList[n]._seriesIndex;if(t[p]&&!t[p][3]&&f.shapeList[n].shape=="candle"){d=a.get(f.shapeList[n],"dataIndex"),h=l[p];if(t[p][2]&&d==h.data.length-1){r.delShape(f.shapeList[n].id);continue}if(!t[p][2]&&d===0){r.delShape(f.shapeList[n].id);continue}u=s.xAxis.getAxis(h.xAxisIndex||0).getGap(),o=t[p][2]?u:-u,c=0,r.animate(f.shapeList[n].id,"").when(500,{position:[o,c]}).start()}}}function S(){var e=f.query(i,"animationDuration"),t=f.query(i,"animationEasing"),n,s,o;for(var u=0,a=f.shapeList.length;u<a;u++)f.shapeList[u].shape=="candle"&&(o=l[f.shapeList[u]._seriesIndex],n=f.shapeList[u].style.x,s=f.shapeList[u].style.y[0],r.modShape(f.shapeList[u].id,{scale:[1,0,n,s]},!0),r.animate(f.shapeList[u].id,"").when(f.query(o,"animationDuration")||e,{scale:[1,1,n,s]}).start(f.query(o,"animationEasing")||t));f.animationMark(e,t)}var o=e("../component/base");o.call(this,t,r);var u=e("./calculableBase");u.call(this,r,i);var a=e("../util/ecData"),f=this;f.type=t.CHART_TYPE_K;var l,c=f.getZlevelBase();f.getMarkCoord=y,f.animation=S,f.init=b,f.refresh=w,f.addDataAnimation=E,b(i,s)}return e("../util/shape/candle"),e("../chart").define("k",t),t}),r("echarts/chart/radar",["require","../component/base","./calculableBase","../util/ecData","zrender/tool/color","../util/accMath","../chart"],function(e){function t(t,n,r,i,s){function y(){var e=s.legend;l.selectedMap={},v=[],g=0;var n;for(var o=0,u=c.length;o<u;o++)c[o].type==t.CHART_TYPE_RADAR&&(h=l.reformOption(c[o]),n=h.name||"",l.selectedMap[n]=e?e.isSelected(n):!0,l.selectedMap[n]&&(d=[h,i],l.deepQuery(d,"calculable")&&x(o),b(o),l.buildMark(c[o],o,s)));for(var o=0,u=l.shapeList.length;o<u;o++)l.shapeList[o].id=r.newShapeId(l.type),r.addShape(l.shapeList[o])}function b(e){var t=s.legend,n,i=h.data,o,u,a,f=l.deepQuery(d,"calculable");for(var c=0;c<i.length;c++){u=i[c].name||"",l.selectedMap[u]=t?t.isSelected(u):!0;if(!l.selectedMap[u])continue;t?(o=t.getColor(u),n=t.getItemShape(u),n&&(n.style.brushType=l.deepQuery([i[c],h],"itemStyle.normal.areaStyle")?"both":"stroke",t.setItemShape(u,n))):o=r.getColor(c),a=w(h.polarIndex,i[c]),E(a,o,c,e),S(a,o,i[c],e,c,f),g++}}function w(e,t){var n=[],r,i=s.polar;for(var o=0,u=t.value.length;o<u;o++)r=i.getVector(e,o,t.value[o]),r&&n.push(r);return n}function E(e,t,n,r){var i;for(var s=0,o=e.length;s<o;s++)i=l.getSymbolShape(c[r],r,c[r].data[n],n,"",e[s][0],e[s][1],m[g%m.length],t,"#fff","vertical"),i.zlevel=p+1,l.shapeList.push(i)}function S(e,t,n,r,i,o){var u=[n,h],d=l.getItemStyleColor(l.deepQuery(u,"itemStyle.normal.color"),r,i,n),v=l.deepQuery(u,"itemStyle.normal.lineStyle.width"),m=l.deepQuery(u,"itemStyle.normal.lineStyle.type"),g=l.deepQuery(u,"itemStyle.normal.areaStyle.color"),y=l.deepQuery(u,"itemStyle.normal.areaStyle"),b={shape:"polygon",zlevel:p,style:{pointList:e,brushType:y?"both":"stroke",color:g||d||f.alpha(t,.5),strokeColor:d||t,lineWidth:v,lineType:m},highlightStyle:{brushType:l.deepQuery(u,"itemStyle.emphasis.areaStyle")||y?"both":"stroke",color:l.deepQuery(u,"itemStyle.emphasis.areaStyle.color")||g||d||f.alpha(t,.5),strokeColor:l.getItemStyleColor(l.deepQuery(u,"itemStyle.emphasis.color"),r,i,n)||d||t,lineWidth:l.deepQuery(u,"itemStyle.emphasis.lineStyle.width")||v,lineType:l.deepQuery(u,"itemStyle.emphasis.lineStyle.type")||m}};a.pack(b,c[r],r,n,i,n.name,s.polar.getIndicator(c[r].polarIndex)),o&&(b.draggable=!0,l.setCalculable(b)),l.shapeList.push(b)}function x(e){var t=l.deepQuery(d,"polarIndex");if(!v[t]){var n=s.polar.getDropBox(t);n.zlevel=p,l.setCalculable(n),a.pack(n,c,e,undefined,-1),l.shapeList.push(n),v[t]=!0}}function T(e,t){if(!l.isDragend||!e.target)return;var n=e.target,r=a.get(n,"seriesIndex"),i=a.get(n,"dataIndex");s.legend&&s.legend.del(c[r].data[i].name),c[r].data.splice(i,1),t.dragOut=!0,t.needRefresh=!0,l.isDragend=!1;return}function N(t,n){if(!l.isDrop||!t.target)return;var r=t.target,o=t.dragged,u=a.get(r,"seriesIndex"),f=a.get(r,"dataIndex"),h,p=s.legend,d;if(f==-1)h={value:a.get(o,"value"),name:a.get(o,"name")},c[u].data.push(h),p&&p.add(h.name,o.style.color||o.style.strokeColor);else{var v=e("../util/accMath");h=c[u].data[f],p&&p.del(h.name),h.name+=i.nameConnector+a.get(o,"name"),d=a.get(o,"value");for(var m=0;m<d.length;m++)h.value[m]=v.accAdd(h.value[m],d[m]);p&&p.add(h.name,o.style.color||o.style.strokeColor)}n.dragIn=n.dragIn||!0,l.isDrop=!1;return}function C(e,t){s=t,k(e)}function k(e){e&&(i=e,c=i.series),l.clear(),y()}function L(){var e=l.query(i,"animationDuration"),t=l.query(i,"animationEasing"),n,o,u,f,h,p=s.polar,d,v,m,g;for(var y=0,b=l.shapeList.length;y<b;y++)l.shapeList[y].shape=="polygon"&&(v=l.shapeList[y],o=a.get(v,"seriesIndex"),n=a.get(v,"dataIndex"),f=c[o],u=f.data[n],h=l.deepQuery([u,f,i],"polarIndex"),d=p.getCenter(h),m=d[0],g=d[1],r.modShape(l.shapeList[y].id,{scale:[.1,.1,m,g]},!0),r.animate(v.id,"").when((l.query(f,"animationDuration")||e)+n*100,{scale:[1,1,m,g]}).start(l.query(f,"animationEasing")||t));l.animationMark(e,t)}var o=e("../component/base");o.call(this,t,r);var u=e("./calculableBase");u.call(this,r,i);var a=e("../util/ecData"),f=e("zrender/tool/color"),l=this;l.type=t.CHART_TYPE_RADAR;var c,h,p=l.getZlevelBase(),d,v,m=t.symbolList,g;l.animation=L,l.init=C,l.refresh=k,l.ondrop=N,l.ondragend=T,C(i,s)}return e("../chart").define("radar",t),t}),r("echarts/util/shape/chord",["require","zrender/tool/util","zrender/shape/base","zrender/shape"],function(e){function n(){this.type="chord"}var t=e("zrender/tool/util"),r=t.getContext();return n.prototype={buildPath:function(e,t){var n=Math.PI*2,r=t.center[0],i=t.center[1],s=t.r,o=t.source0/180*Math.PI,u=t.source1/180*Math.PI,a=t.target0/180*Math.PI,f=t.target1/180*Math.PI,l=r+Math.cos(n-o)*s,c=i-Math.sin(n-o)*s,h=r+Math.cos(n-u)*s,p=i-Math.sin(n-u)*s,d=r+Math.cos(n-a)*s,v=i-Math.sin(n-a)*s,m=r+Math.cos(n-f)*s,g=i-Math.sin(n-f)*s;e.moveTo(l,c),e.arc(r,i,t.r,o,u,!1),e.bezierCurveTo((r-h)*.7+h,(i-p)*.7+p,(r-d)*.7+d,(i-v)*.7+v,d,v);if(t.source0===t.target0&&t.source1===t.target1)return;e.arc(r,i,t.r,a,f,!1),e.bezierCurveTo((r-m)*.7+m,(i-g)*.7+g,(r-l)*.7+l,(i-c)*.7+c,l,c)},getRect:function(){return{x:0,y:0,width:0,height:0}},isCover:function(e,t,i){if(!r.isPointInPath)return!1;if(e.__needTransform&&e._transform){var s=[];matrix.invert(s,e._transform);var o=[t,i];matrix.mulVector(o,s,[t,i,1]),t==o[0]&&i==o[1]&&(Math.abs(e.rotation[0])>1e-4||Math.abs(e.position[0])>1e-4||Math.abs(e.position[1])>1e-4||Math.abs(e.scale[0]-1)>1e-4||Math.abs(e.scale[1]-1)>1e-4?e.__needTransform=!0:e.__needTransform=!1),t=o[0],i=o[1]}return r.beginPath(),n.prototype.buildPath.call(null,r,e.style),r.closePath(),r.isPointInPath(t,i)}},e("zrender/shape/base").derive(n),e("zrender/shape").define("chord",new n),n}),r("echarts/util/kwargs",[],function(){function e(e,t){var n=new RegExp("(\\/\\*[\\w\\'\\,\\(\\)\\s\\r\\n\\*]*\\*\\/)|(\\/\\/[\\w\\s\\'][^\\n\\r]*$)|(<![\\-\\-\\s\\w\\>\\/]*>)","gim"),r=new RegExp("\\s+","gim"),i=new RegExp("function.*?\\((.*?)\\)","i"),s=e.toString().replace(n,"").replace(r,"").match(i)[1].split(",");return t!==Object(t)&&(t={}),function(){var n=Array.prototype.slice.call(arguments),r=n[n.length-1];r&&r.constructor===Object?n.pop():r={};for(var i=0;i<s.length;i++){var o=s[i];o in r?n[i]=r[o]:o in t&&n[i]===undefined&&(n[i]=t[o])}return e.apply(this,n)}}return e}),r("echarts/util/ndarray",["require","./kwargs"],function(e){function d(e){if(typeof e=="undefined")return"number";switch(Object.prototype.toString.call(e)){case"[object Int32Array]":return"int32";case"[object Int16Array]":return"int16";case"[object Int8Array]":return"int8";case"[object Uint32Array]":return"uint32";case"[object Uint16Array]":return"uint16";case"[object Uint8Array]":return"uint8";case"[object Uint8ClampedArray]":return"uint8c";case"[object Float32Array]":return"float32";case"[object Float64Array]":return"float64";default:return"number"}}function m(e,t){if(e.indexOf(":")>=0){var n=e.split(/\s*:\s*/),r=parseInt(n[2]||1,10),i,s;if(r===0)throw new Error("Slice step cannot be zero");return r>0?(i=parseInt(n[0]||0,10),s=parseInt(n[1]||t,10)):(i=parseInt(n[0]||t-1,10),s=parseInt(n[1]||-1,10)),i<0&&(i=t+i),s<0&&n[1]&&(s=t+s),r>0?(i=Math.max(Math.min(t,i),0),s=Math.max(Math.min(t,s),0)):(i=Math.max(Math.min(t-1,i),-1),s=Math.max(Math.min(t-1,s),-1)),[i,s,r]}var i=parseInt(e,10);i<0&&(i=t+i);if(i<0||i>t)throw new Error(N(e));return i=Math.max(Math.min(t-1,i),0),[i,i+1,1]}function g(e){var t=e[0];for(var n=1;n<e.length;n++)t*=e[n];return t}function y(e){var t=1,n=e[0];while(n instanceof Array)n=n[0],t++;return t}function b(e){var t=[e.length],n=e[0];while(n instanceof Array)t.push(n.length),n=n[0];return t}function w(e,t){if(t==e.length-1)return 1;var n=e[t+1];for(var r=t+2;r<e.length;r++)n*=e[r];return n}function E(e){var t=[],n=1,r=g(e);for(var i=0;i<e.length;i++)n*=e[i],t.push(r/n);return t}function S(e,t){if(e.length!==t.length)return!1;for(var n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function x(e,t){return"Shape ("+e.toString()+") ("+t.toString()+") could not be broadcast together"}function T(e){return"Axis "+e+" out of bounds"}function N(e){return"Index "+e+" out of bounds"}var t=e("./kwargs"),n=Array.prototype.slice;this.Int32Array=window.Int32Array||Array,this.Int16Array=window.Int16Array||Array,this.Int8Array=window.Int8Array||Array,this.Uint32Array=window.Uint32Array||Array,this.Uint16Array=window.Uint16Array||Array,this.Uint8Array=window.Uint8Array||Array,this.Float32Array=window.Float32Array||Array,this.Float64Array=window.Float64Array||Array;var r={int32:this.Int32Array,int16:this.Int16Array,int8:this.Int8Array,uint32:this.Uint32Array,uint16:this.Uint16Array,uint8:this.Uint8Array,uint8c:this.Uint8ClampedArray,float32:this.Float32Array,float64:this.Float64Array,number:Array},i={int32:4,int16:2,int8:1,uint32:4,uint16:2,uint8:1,uint8c:1,float32:4,float64:8,number:1},s=0,o=1,u=2,a=3,f=4,l=5,c=6,h=7,p=8,v=function(e){var t=arguments[arguments.length-1];typeof t=="string"?this._dtype=t:this._dtype=d(e);if(e&&typeof e!="string"){if(e instanceof v)return e._dtype=this._dtype,e;typeof e.length!="undefined"?this.initFromArray(e):typeof e=="number"&&this.initFromShape.apply(this,arguments)}else this._array=new r[this._dtype],this._shape=[0],this._size=0};return v.prototype={initFromArray:function(e){function i(e,r,s){var o=s.length;for(var u=0;u<o;u++)e<t-1?i(e+1,r,s[u]):r[n++]=s[u]}var t=y(e),n=0,s=b(e),o=g(s);return this._array=new r[this._dtype](o),i(0,this._array,e),this._shape=s,this._size=o,this},initFromShape:function(e){typeof e=="number"&&(e=Array.prototype.slice.call(arguments));if(e){var t=g(e);if(this._dtype==="number"){this._array=[];var n=this._array;for(var i=0;i<t;i++)n[i]=0}else this._array=new r[this._dtype](t)}return this._shape=e,this._size=g(e),this},fill:function(e){var t=this._array;for(var n=0;n<t.length;n++)t[n]=e;return this},shape:function(){return this._shape.slice()},size:function(){return this._size},dtype:function(){return this._dtype},dimension:function(){return this._shape.length},strides:function(){var e=E(this._shape),t=i[this._dtype];for(var n=0;n<e.length;n++)e[n]*=t;return e},reshape:function(e){typeof e=="number"&&(e=Array.prototype.slice.call(arguments));if(!this._isShapeValid(e))throw new Error("Total size of new array must be unchanged");return this._shape=e,this},_isShapeValid:function(e){return g(e)===this._size},resize:function(e){typeof e=="number"&&(e=Array.prototype.slice.call(arguments));var t=g(e);if(t<this._size)this._dtype==="number"&&(this._array.length=t);else if(this._dtype==="number")for(var n=this._array.length;n<t;n++)this._array[n]=0;else{var i=new r[this._dtype](t),s=this._array;for(var n=0;n<s.length;n++)i[n]=s[n];this._array=i}return this._shape=e,this._size=t,this},transpose:t(function(e,t){var n=[];for(var r=0;r<this._shape.length;r++)n.push(r);typeof e=="undefined"&&(e=n.slice());for(var r=0;r<e.length;r++)if(e[r]>=this._shape.length)throw new Error(T(e[r]));if(e.length<=1)return this;var i=n.slice();for(var r=0;r<Math.floor(e.length/2);r++)for(var s=e.length-1;s>=Math.ceil(e.length/2);s--)i[e[r]]=e[s],i[e[s]]=e[r];return this._transposelike(i,t)}),swapaxes:t(function(e,t,n){return this.transpose([e,t],n)}),rollaxis:t(function(e,t,n){if(e>=this._shape.length)throw new Error(T(e));var r=[];for(var i=0;i<this._shape.length;i++)r.push(i);return r.splice(e,1),r.splice(t,0,e),this._transposelike(r,n)},{start:0}),_transposelike:function(e,t){function p(e,t,r){var u=i[e],a=s[e],f=c[e];if(e<o-1)for(var l=0;l<u;l++)p(e+1,t+a*l,r+f*l);else for(var l=0;l<u;l++)h[r+l]=n[t+a*l]}var n=this._array,i=this._shape.slice(),s=E(this._shape),o=i.length,u=[],a=[];for(var f=0;f<e.length;f++){var l=e[f];a[f]=i[l],u[f]=s[l]}s=u,i=a,this._shape=i;var c=E(this._shape);t||(t=new v,t._shape=this._shape.slice(),t._dtype=this._dtype,t._size=this._size);var h=new r[this._dtype](this._size);return t._array=h,p(0,0,0),t},repeat:t(function(e,t,n){var r;typeof t=="undefined"?(r=[this._size],t=0):r=this._shape.slice();var i=r.slice();r[t]*=e;if(!n)n=new v(this._dtype),n.initFromShape(r);else if(!S(r,n._shape))throw new Error(x(r,n._shape));var s=n._array,o=w(i,t),u=i[t],a=this._array,f=o*u;for(var l=0;l<this._size;l+=f)for(var c=0;c<o;c++){var h=l+c,p=l*e+c;for(var d=0;d<u;d++){for(var m=0;m<e;m++)s[p]=a[h],p+=o;h+=o}}return n}),choose:function(){console.warn("TODO")},take:function(){console.warn("TODO")},tile:function(){console.warn("TODO")},_withPreprocess1:function(e,t,n,r){var i=this._array;if(!this._size)return;if(typeof e!="undefined"){e<0&&(e=this._shape.length+e);if(e>=this._shape.length||e<0)throw new Error(T(e));var s=this._shape.slice();s.splice(e,1);if(t&&!S(s,t._shape))throw new Error(x(s,t._shape));t||(t=new v(this._dtype),t.initFromShape(s));var o=t._array,u=w(this._shape,e),a=this._shape[e],f=u*a;return n.call(this,o,i,f,a,u),t}return r.call(this,i)},_withPreprocess2:function(e,t,n,r){var i=this._array;if(!this._size)return;if(t&&!S(this._shape,t._shape))throw new Error(x(this._shape,t._shape));t||(t=new v(this._dtype),t.initFromShape(this._shape));var s=t._array;if(typeof e!="undefined"){e<0&&(e=this._shape.length+e);if(e>=this._shape.length||e<0)throw new Error(T(e));if(e>=this._shape.length)throw new Error(T(e));var o=w(this._shape,e),u=this._shape[e],a=o*u;n.call(this,s,i,a,u,o)}else t.reshape([this._size]),r.call(this,s,i);return t},max:t(function(){function e(e,t,n,r,i){var s=0;for(var o=0;o<this._size;o+=n)for(var u=0;u<i;u++){var a=u+o,f=t[a];for(var l=0;l<r;l++){var c=t[a];c>f&&(f=c),a+=i}e[s++]=f}}function t(e){var t=e[0];for(var n=1;n<this._size;n++)e[n]>t&&(t=e[n]);return t}return function(n,r){return this._withPreprocess1(n,r,e,t)}}()),min:t(function(){function e(e,t,n,r,i){var s=0;for(var o=0;o<this._size;o+=n)for(var u=0;u<i;u++){var a=u+o,f=t[a];for(var l=0;l<r;l++){var c=t[a];c<f&&(f=c),a+=i}e[s++]=f}}function t(e){var t=e[0];for(var n=1;n<this._size;n++)e[n]<t&&(t=e[n]);return t}return function(n,r){return this._withPreprocess1(n,r,e,t)}}()),argmax:t(function(){function e(e,t,n,r,i){var s=0;for(var o=0;o<this._size;o+=n)for(var u=0;u<i;u++){var a=0,f=u+o,l=t[f];for(var c=0;c<r;c++){var h=t[f];h>l&&(l=h,a=c),f+=i}e[s++]=a}}function t(e){var t=e[0],n=0;for(var r=1;r<this._size;r++)e[r]>t&&(n=r,t=e[r]);return n}return function(n,r){return this._withPreprocess1(n,r,e,t)}}()),argmin:t(function(){function e(e,t,n,r,i){var s=0;for(var o=0;o<this._size;o+=n)for(var u=0;u<i;u++){var a=0,f=u+o,l=t[f];for(var c=0;c<r;c++){var h=t[f];h<l&&(l=h,a=c),f+=i}e[s++]=a}}function t(e){var t=e[0],n=0;for(var r=1;r<this._size;r++)e[r]<t&&(n=r,t=e[r]);return n}return function(n,r){return this._withPreprocess1(n,r,e,t)}}()),sum:t(function(){function e(e,t,n,r,i){var s=0;for(var o=0;o<this._size;o+=n)for(var u=0;u<i;u++){var a=0,f=u+o;for(var l=0;l<r;l++)a+=t[f],f+=i;e[s++]=a}}function t(e){var t=0;for(var n=0;n<this._size;n++)t+=e[n];return t}return function(n,r){return this._withPreprocess1(n,r,e,t)}}()),prod:t(function(){function e(e,t,n,r,i){var s=0;for(var o=0;o<this._size;o+=n)for(var u=0;u<i;u++){var a=1,f=u+o;for(var l=0;l<r;l++)a*=t[f],f+=i;e[s++]=a}}function t(e){var t=1;for(var n=0;n<this._size;n++)t*=e[n];return t}return function(n,r){return this._withPreprocess1(n,r,e,t)}}()),mean:t(function(){function e(e,t,n,r,i){var s=0;for(var o=0;o<this._size;o+=n)for(var u=0;u<i;u++){var a=0,f=u+o;for(var l=0;l<r;l++)a+=t[f],f+=i;var c=a/r;e[s++]=c}}function t(e){var t=0,n=e.length;for(var r=0;r<n;r++)t+=e[r];var i=t/n;return i}return function(n,r){return this._withPreprocess1(n,r,e,t)}}()),"var":t(function(){function e(e,t,n,r,i){var s=0;for(var o=0;o<this._size;o+=n)for(var u=0;u<i;u++){var a=0,f=u+o;for(var l=0;l<r;l++)a+=t[f],f+=i;var c=a/r,h=0;f=u+o;for(var l=0;l<r;l++){var p=t[f]-c;h+=p*p,f+=i}e[s++]=h/r}}function t(e){var t=0,n=e.length;for(var r=0;r<n;r++)t+=e[r];var i=t/n,s=0;for(var r=0;r<n;r++){var o=e[r]-i;s+=o*o}return s/n}return function(n,r){return this._withPreprocess1(n,r,e,t)}}()),std:t(function(){function e(e,t,n,r,i){var s=0;for(var o=0;o<this._size;o+=n)for(var u=0;u<i;u++){var a=0,f=u+o;for(var l=0;l<r;l++)a+=t[f],f+=i;var c=a/r,h=0;f=u+o;for(var l=0;l<r;l++){var p=t[f]-c;h+=p*p,f+=i}e[s++]=Math.sqrt(h/r)}}function t(e){var t=0,n=e.length;for(var r=0;r<n;r++)t+=e[r];var i=t/n,s=0;for(var r=0;r<n;r++){var o=e[r]-i;s+=o*o}return Math.sqrt(s/n)}return function(n,r){return this._withPreprocess1(n,r,e,t)}}()),ptp:t(function(){function e(e,t,n,r,i){var s=0;for(var o=0;o<this._size;o+=n)for(var u=0;u<i;u++){var a=o+u,f=t[a],l=t[a];for(var c=0;c<r;c++){var h=t[a];h<f&&(f=h),h>l&&(l=h),a+=i}e[s++]=l-f}}function t(e){var t=e[0],n=e[0];for(var r=1;r<this._size;r++)e[r]<t&&(t=e[r]),e[r]>n&&(n=e[r]);return n-t}return function(n,r){return this._withPreprocess1(n,r,e,t)}}()),sort:t(function(e,t){e<0&&(e=this._shape.length+e);var n;t==="ascending"?n=function(e,t){return e-t}:t==="descending"&&(n=function(e,t){return t-e});var r=this._array,i=w(this._shape,e),s=this._shape[e],o=i*s,u=new Array(s);for(var a=0;a<this._size;a+=o)for(var f=0;f<i;f++){var l=a+f;for(var c=0;c<s;c++)u[c]=r[l],l+=i;u.sort(n);var l=a+f;for(var c=0;c<s;c++)r[l]=u[c],l+=i}return this},{axis:-1,order:"ascending"}),argsort:t(function(e,t,n){e<0&&(e=this._shape.length+e);if(!this._size)return;if(n&&!S(this._shape,n._shape))throw new Error(x(this._shape,n._shape));n||(n=new v(this._dtype),n.initFromShape(this._shape));var r=n._array,i;t==="ascending"?i=function(e,t){return f[e]-f[t]}:t==="descending"&&(i=function(e,t){return f[t]-f[e]});var s=this._array,o=w(this._shape,e),u=this._shape[e],a=o*u,f=new Array(u),l=new Array(u);for(var c=0;c<this._size;c+=a)for(var h=0;h<o;h++){var p=c+h;for(var d=0;d<u;d++)f[d]=s[p],l[d]=d,p+=o;l.sort(i);var p=c+h;for(var d=0;d<u;d++)r[p]=l[d],p+=o}return n},{axis:-1,order:"ascending"}),cumsum:t(function(){function e(e,t,n,r,i){for(var s=0;s<this._size;s+=n)for(var o=0;o<i;o++){var u=s+o,a=u;e[u]=t[u];for(var f=1;f<r;f++)a=u,u+=i,e[u]=e[a]+t[u]}}function t(e,t){e[0]=t[0];for(var n=1;n<e.length;n++)e[n]=e[n-1]+t[n]}return function(n,r){return this._withPreprocess2(n,r,e,t)}}()),cumprod:t(function(){function e(e,t,n,r,i){for(var s=0;s<this._size;s+=n)for(var o=0;o<i;o++){var u=s+o,a=u;e[u]=t[u];for(var f=1;f<r;f++)a=u,u+=i,e[u]=e[a]*t[u]}}function t(e,t){e[0]=t[0];for(var n=1;n<e.length;n++)e[n]=e[n-1]*t[n]}return function(n,r){return this._withPreprocess2(n,r,e,t)}}()),dot:function(){console.warn("TODO")},map:function(e,t){var n=this._array,r=this._array,i=n[0],s=n[0],o=this._size;for(var u=1;u<o;u++){var a=n[u];a<i&&(i=a),a>s&&(s=a)}var f=s-i,l=t-e;for(var u=0;u<o;u++)if(f===0)r[u]=e;else{var a=n[u],c=(a-i)/f;r[u]=l*c+e}return this},add:function(e,t){return this.binaryOperation(this,e,s,t)},sub:function(e,t){return this.binaryOperation(this,e,o,t)},mul:function(e,t){return this.binaryOperation(this,e,u,t)},div:function(e,t){return this.binaryOperation(this,e,a,t)},mod:function(e,t){return this.binaryOperation(this,e,f,t)},and:function(e,t){return this.binaryOperation(this,e,l,t)},or:function(e,t){return this.binaryOperation(this,e,c,t)},xor:function(e,t){return this.binaryOperation(this,e,h,t)},equal:function(e){return this.binaryOperation(this,e,p,out)},binaryOperation:function(e,t,n,r){var i=[],d=typeof e=="number",m=typeof t=="number";if(d)i=t._shape.slice();else if(m)i=e._shape.slice();else{var g=e._shape.length-1,y=t._shape.length-1,b=e,E=t;while(g>=0&&y>=0){if(e._shape[g]==1)i.unshift(t._shape[y]),b=e.repeat(t._shape[y],g);else if(t._shape[y]==1)i.unshift(e._shape[g]),E=t.repeat(e._shape[g],y);else{if(t._shape[y]!=e._shape[g])throw new Error(x(e._shape,t._shape));i.unshift(e._shape[g])}g--,y--}for(var T=g;T>=0;T--)i.unshift(e._shape[T]);for(var T=y;T>=0;T--)i.unshift(t._shape[T]);e=b,t=E}if(!r)r=new v(this._dtype),r.initFromShape(i);else if(!S(i,r._shape))throw new Error(x(i,r._shape));var N=r._array,C,k,L,A;d?(C=t._shape.length-1,k=!1,L=e,A=t._array):m?(C=e._shape.length-1,k=!0,A=t,L=e._array):(C=Math.abs(e._shape.length-t._shape.length),k=e._shape.length>=t._shape.length,L=e._array,A=t._array);var O=w(i,C),M=i[C],_=O*M,D=r._size/_,P,H,B,j=0;if(k)if(m)for(var F=0;F<D;F++)for(var T=0;T<_;T++){P=L[j],H=A;switch(n){case s:B=P+H;break;case o:B=P-H;break;case u:B=P*H;break;case a:B=P/H;break;case f:B=P%H;break;case l:B=P&H;break;case c:B=P|H;break;case h:B=P^H;break;case p:B=P==H;break;default:throw new Error("Unkown operation "+n)}N[j]=B,j++}else for(var F=0;F<D;F++)for(var T=0;T<_;T++){P=L[j],H=A[T];switch(n){case s:B=P+H;break;case o:B=P-H;break;case u:B=P*H;break;case a:B=P/H;break;case f:B=P%H;break;case l:B=P&H;break;case c:B=P|H;break;case h:B=P^H;break;case p:B=P==H;break;default:throw new Error("Unkown operation "+n)}N[j]=B,j++}else if(d)for(var F=0;F<D;F++)for(var T=0;T<_;T++){P=L,H=A[j];switch(n){case s:B=P+H;break;case o:B=P-H;break;case u:B=P*H;break;case a:B=P/H;break;case f:B=P%H;break;case l:B=P&H;break;case c:B=P|H;break;case h:B=P^H;break;case p:B=P==H;break;default:throw new Error("Unkown operation "+n)}N[j]=B,j++}else for(var F=0;F<D;F++)for(var T=0;T<_;T++){P=L[j],H=A[T];switch(n){case s:B=P+H;break;case o:B=P-H;break;case u:B=P*H;break;case a:B=P/H;break;case f:B=P%H;break;case l:B=P&H;break;case c:B=P|H;break;case h:B=P^H;break;case p:B=P==H;break;default:throw new Error("Unkown operation "+n)}N[j]=B,j++}return r},neg:function(){var e=this._array;for(var t=0;t<this._size;t++)e[t]=-e[t];return this},sin:function(){return this._mathAdapter(Math.sin)},cos:function(){return this._mathAdapter(Math.cos)},tan:function(){return this._mathAdapter(Math.tan)},abs:function(){return this._mathAdapter(Math.abs)},log:function(){return this._mathAdapter(Math.log)},sqrt:function(){return this._mathAdapter(Math.sqrt)},ceil:function(){return this._mathAdapter(Math.ceil)},floor:function(){return this._mathAdapter(Math.floor)},pow:function(e){var t=this._array;for(var n=0;n<this._size;n++)t[n]=Math.pow(t[n],e);return this},_mathAdapter:function(e){var t=this._array;for(var n=0;n<this._size;n++)t[n]=e(t[n]);return this},round:function(e){e=Math.floor(e||0);var t=Math.pow(10,e),n=this._array;if(e===0)for(var r=0;r<this._size;r++)n[r]=Math.round(n[r]);else for(var r=0;r<this._size;r++)n[r]=Math.round(n[r]*t)/t;return this},clip:function(e,t){var n=this._array;for(var r=0;r<this._size;r++)n[r]=Math.max(Math.min(n[r],t),e);return this},get:function(e,t){function l(e,t){var r=i[e],s=n[e];if(e<o-1)if(r[2]>0)for(var c=r[0];c<r[1];c+=r[2])l(e+1,t+s*c);else for(var c=r[0];c>r[1];c+=r[2])l(e+1,t+s*c);else if(r[2]>0)for(var c=r[0];c<r[1];c+=r[2])for(var h=0;h<s;h++)u[f++]=a[c*s+h+t];else for(var c=r[0];c>r[1];c+=r[2])for(var h=0;h<s;h++)u[f++]=a[c*s+h+t]}typeof e=="number"&&(e=e.toString());var n=E(this._shape),r=this._parseRanges(e),i=r[0],s=r[1];if(i.length>this._shape.length)throw new Error("Too many indices");var o=i.length,u;s.length?(t=new v(this._dtype),t.initFromShape(s),u=t._array):u=[];var a=this._array,f=0;return l(0,0),s.length?t:u[0]},set:function(e,t){typeof e=="number"&&(e=e.toString());var n=E(this._shape),r=this._parseRanges(e),i=r[0],s=r[1];if(i.length>this._shape.length)throw new Error("Too many indices");var o=typeof t=="number",u=i.length,a=this._array;if(o)var f=t;else{if(!S(s,t.shape()))throw new Error(x(s,t.shape()));var f=t._array}var l=0,c=function(e,t){var r=i[e],s=n[e];if(e<u-1)if(r[2]>0)for(var h=r[0];h<r[1];h+=r[2])c(e+1,t+s*h);else for(var h=r[0];h>r[1];h+=r[2])c(e+1,t+s*h);else if(r[2]>0)for(var h=r[0];h<r[1];h+=r[2])for(var p=0;p<s;p++)o?a[h*s+p+t]=f:a[h*s+p+t]=f[l++];else for(var h=r[0];h>r[1];h+=r[2])for(var p=0;p<s;p++)o?a[h*s+p+t]=f:a[h*s+p+t]=f[l++]};return c(0,0),this},insert:t(function(e,t,n){var i=this._array,s=!1;typeof e=="number"&&(e=[e],s=!0),typeof t=="number"?t=new v([t]):t instanceof Array&&(t=new v(t)),typeof n=="undefined"&&(this._shape=[this._size],n=0);var o=e[0],u=this._shape[n];for(var a=0;a<e.length;a++){e[a]<0&&(e[a]=u+e[a]);if(e[a]>u)throw new Error(N(e[a]));if(e[a]<o)throw new Error("Index must be in ascending order");o=e[a]}var f=this._shape.slice();s?f.splice(n,1):f[n]=e.length;var l=t._shape,c=l.length-1,h=f.length-1,p=t;while(c>=0&&h>=0){if(l[c]===1)p=t.repeat(f[h],c);else if(l[c]!==f[h])throw new Error(x(l,f));c--,h--}t=p;var d=w(this._shape,n),u=this._shape[n],m=u*d,y=this._size/m,b=e.length,E=new Uint32Array(y*b),S=0;for(var T=0;T<this._size;T+=m)for(var a=0;a<b;a++){var C=e[a];E[S++]=T+C*d}var k=this._shape.slice();k[n]+=e.length;var L=g(k);if(this._array.length<L)var i=new r[this._dtype](L);else var i=this._array;var A=this._array,O=t._array,M=E.length-1,_=this._size,D=E[M],P=L-1,H=t._size-1;while(M>=0){for(var a=_-1;a>=D;a--)i[P--]=A[a];_=D,D=E[--M];for(var a=0;a<d;a++)H<0&&(H=t._size-1),i[P--]=O[H--]}for(var a=_-1;a>=0;a--)i[P--]=A[a];return this._array=i,this._shape=k,this._size=L,this}),append:function(){console.warn("TODO")},"delete":t(function(e,t){var n=this._array;typeof e=="number"&&(e=[e]);var r=this._size;typeof t=="undefined"&&(this._shape=[r],t=0);var i=w(this._shape,t),s=this._shape[t],o=i*s,u=0;for(var a=0;a<r;a+=o){var f=0,l=e[0],c=0;while(c<e.length){l<0&&(l+=s);if(l>s)throw new Error(N(l));if(l<f)throw new Error("Index must be in ascending order");for(var h=f;h<l;h++)for(var p=0;p<i;p++)n[u++]=n[h*i+p+a];f=l+1,l=e[++c]}for(var h=f;h<s;h++)for(var p=0;p<i;p++)n[u++]=n[h*i+p+a]}return this._shape[t]-=e.length,this._size=g(this._shape),this}),_parseRanges:function(e){var t=e.split(/\s*,\s*/),n=[],r=[],i=0;for(var s=0;s<t.length;s++)if(t[s]==="..."){var o=this._shape.length-(t.length-s);while(i<=o)n.push([0,this._shape[i],1]),r.push(this._shape[i]),i++}else{var u=m(t[s],this._shape[i]);n.push(u);if(t[s].indexOf(":")>=0){var a=Math.floor((u[1]-u[0])/u[2]);a=a<0?0:a,r.push(a)}i++}for(;i<this._shape.length;i++)r.push(this._shape[i]);return[n,r]},toArray:function(){function i(s,o){var u=n[s];for(var a=0;a<u;a++)s<r-1?i(s+1,o[a]=[]):o[a]=e[t++]}var e=this._array,t=0,n=this._shape,r=n.length,s=[];return i(0,s),s},copy:function(){var e=new v;return e._array=n.call(this._array),e._shape=this._shape.slice(),e._dtype=this._dtype,e._size=this._size,e},constructor:v},v.range=t(function(e,t,i,s){var o=n.call(arguments),u=o[o.length-1];if(typeof u=="string"){var s=u;o.pop()}o.length===1?(t=o[0],i=1,e=0):o.length==2&&(i=1),s=s||"number";var a=new r[s](Math.ceil((t-e)/i)),f=0;for(var l=e;l<t;l+=i)a[f++]=l;var c=new v;return c._array=a,c._shape=[a.length],c._dtype=s,c._size=a.length,c}),v.zeros=t(function(e,t){var n=new v(t);return n.initFromShape(e),n}),v}),r("echarts/chart/chord",["require","../util/shape/chord","../component/base","./calculableBase","../util/ecData","zrender/tool/util","zrender/tool/vector","../util/ndarray","../chart"],function(e){function n(n,r,i,s,o){function F(){u.selectedMap={},w=[],b=null;var e=[],n=0;for(var r=0,s=g.length;r<s;r++)if(g[r].type===u.type){b||(b=g[r],u.reformOption(b));var a=m(g[r].name);u.selectedMap[g[r].name]=a;if(!a)continue;w.push(g[r]),u.buildMark(g[r],r,o),e.push(g[r].matrix),n++}if(!b)return;if(!w.length)return;var f=i.getWidth(),l=i.getHeight(),c=Math.min(f,l);E=b.data,S=b.startAngle,S%=360,S<0&&(S+=360),x=b.clockWise,T=u.parsePercent(b.radius[0],c/2),N=u.parsePercent(b.radius[1],c/2),C=b.padding,k=b.sort,L=b.sortSub,O=b.showScale,M=b.showScaleText,A=[u.parsePercent(b.center[0],f),u.parsePercent(b.center[1],l)];var h=b.itemStyle.normal.chordStyle.lineStyle.width-b.itemStyle.normal.lineStyle.width;_=h/t/T/Math.PI*180,D=new p(e),D=D._transposelike([1,2,0]);var d=I(D,E);D=d[0],E=d[1];var v=D.shape();if(v[0]!==v[1]||v[0]!==E.length)throw new Error("Data not valid");if(v[0]===0||v[2]===0)return;D.reshape(v[0],v[1]*v[2]);var y=D.sum(1),B=y.mul(1/y.sum()),j=v[0],F=v[1]*v[2],W=B.mul(360-C*j),X=D.div(D.sum(1).reshape(j,1));X=X.mul(W.sub(_*2).reshape(j,1));switch(k){case"ascending":case"descending":var V=W.argsort(0,k);W.sort(0,k),y.sort(0,k);break;default:var V=p.range(v[0])}switch(L){case"ascending":case"descending":var $=X.argsort(1,L);X.sort(1,L);break;default:var $=p.range(F).reshape(1,F).repeat(j,0)}var J=V.toArray(),K=W.toArray(),Q=$.toArray(),G=X.toArray(),Y=y.toArray(),Z=[],et=(new p(j,F)).toArray(),tt=[],nt=0,rt=0;for(var r=0;r<j;r++){var it=J[r];tt[it]=Y[r],rt=nt+K[r],Z[it]=[nt,rt];var st=nt+_,ot=st;for(var ut=0;ut<F;ut++){ot=st+G[it][ut];var at=Q[it][ut];et[it][at]=[st,ot],st=ot}nt=rt+C}H=(new p(j,j,n)).toArray(),P=[],q(Z,tt),et=(new p(et)).reshape(j,j,n,2).toArray(),R(et,D.reshape(v).toArray());var d=z(tt);O&&U(d[0],d[1],Z,(new p(d[0])).sum()/(360-C*j))}function I(e,t){var n=[],r=[];for(var i=0;i<t.length;i++){var s=t[i].name;u.selectedMap[s]=m(s),u.selectedMap[s]?r.push(t[i]):n.push(i)}n.length&&(e=e["delete"](n,0),e=e["delete"](n,1));if(!e.size())return[e,r];n=[];var o=[],a=e.shape();e.reshape(a[0],a[1]*a[2]);var f=e.sum(1).toArray();e.reshape(a);for(var i=0;i<r.length;i++)f[i]===0?n.push(i):o.push(r[i]);return n.length&&(e=e["delete"](n,0),e=e["delete"](n,1)),[e,o]}function q(e,t){function f(e){return function(){s&&clearTimeout(s),s=setTimeout(function(){for(var t=0;t<n;t++){P[t].style.opacity=t===e?1:.1,i.modShape(P[t].id,P[t]);for(var s=0;s<n;s++)for(var o=0;o<r;o++){var u=H[t][s][o];u&&(u.style.opacity=t===e||s===e?.5:.03,i.modShape(u.id,u))}}i.refresh()},50)}}function c(){return function(){s&&clearTimeout(s),s=setTimeout(function(){for(var e=0;e<n;e++){P[e].style.opacity=1,i.modShape(P[e].id,P[e]);for(var t=0;t<n;t++)for(var s=0;s<r;s++){var o=H[e][t][s];o&&(o.style.opacity=.5,i.modShape(o.id,o))}}i.refresh()},50)}}var n=E.length,r=w.length,s,o=u.query(b,"itemStyle.normal.label.show"),a=u.query(b,"itemStyle.normal.label.color");for(var p=0;p<n;p++){var d=E[p],m=e[p],g=(x?360-m[1]:m[0])+S,C=(x?360-m[0]:m[1])+S,k={id:i.newShapeId(u.type),shape:"sector",zlevel:y,style:{x:A[0],y:A[1],r0:T,r:N,startAngle:g,endAngle:C,brushType:"fill",opacity:1,color:v(d.name)},highlightStyle:{brushType:"fill"}};k.style.lineWidth=u.deepQuery([d,b],"itemStyle.normal.lineStyle.width"),k.highlightStyle.lineWidth=u.deepQuery([d,b],"itemStyle.emphasis.lineStyle.width"),k.style.strokeColor=u.deepQuery([d,b],"itemStyle.normal.lineStyle.color"),k.highlightStyle.strokeColor=u.deepQuery([d,b],"itemStyle.emphasis.lineStyle.color"),k.style.lineWidth>0&&(k.style.brushType="both"),k.highlightStyle.lineWidth>0&&(k.highlightStyle.brushType="both"),l.pack(k,w[0],0,t[p],0,d.name);if(o){var L=[g+C]/2;L%=360;var O=L<=90||L>=270;L=L*Math.PI/180;var _=[Math.cos(L),-Math.sin(L)],D=M?45:20,B=h.scale([],_,N+D);h.add(B,B,A);var j={shape:"text",id:i.newShapeId(u.type),zlevel:y-1,hoverable:!1,style:{x:B[0],y:B[1],text:d.name,textAlign:O?"left":"right",color:a}};j.style.textColor=u.deepQuery([d,b],"itemStyle.normal.label.textStyle.color")||"#fff",j.style.textFont=u.getFont(u.deepQuery([d,b],"itemStyle.normal.label.textStyle")),i.addShape(j),u.shapeList.push(j)}k.onmouseover=f(p),k.onmouseout=c(),u.shapeList.push(k),P.push(k),i.addShape(k)}}function R(e,t){var n=e.length;if(!n)return;var r=e[0][0].length,s=b.itemStyle.normal.chordStyle.lineStyle,o=b.itemStyle.emphasis.chordStyle.lineStyle;for(var a=0;a<n;a++)for(var f=0;f<n;f++)for(var c=0;c<r;c++){if(H[f][a][c])continue;var h=e[a][f][c][0],p=e[f][a][c][0],d=e[a][f][c][1],m=e[f][a][c][1];if(h-m===0||p-m===0){H[a][f][c]=null;continue}var g;r===1?d-h<=m-p?g=v(E[a].name):g=v(E[f].name):g=v(w[c].name);var N=x?h:360-d,C=x?d:360-h,k=x?p:360-m,L=x?m:360-p,O={id:i.newShapeId(u.type),shape:"chord",zlevel:y,style:{center:A,r:T,source0:N-S,source1:C-S,target0:k-S,target1:L-S,brushType:"both",opacity:.5,color:g,lineWidth:s.width,strokeColor:s.color},highlightStyle:{brushType:"both",lineWidth:o.width,strokeColor:o.color}};l.pack(O,w[c],c,t[a][f][c],0,E[a].name,E[f].name,t[f][a][c]),H[a][f][c]=O,u.shapeList.push(O),i.addShape(O)}}function U(e,t,n,r){for(var s=0;s<n.length;s++){var o=n[s][0],a=n[s][1],f=o;while(f<a){var l=((x?360-f:f)+S)/180*Math.PI,c=[Math.cos(l),-Math.sin(l)],d=h.scale([],c,N+1);h.add(d,d,A);var v=h.scale([],c,N+B);h.add(v,v,A);var m={shape:"line",id:i.newShapeId(u.type),zlevel:y-1,hoverable:!1,style:{xStart:d[0],yStart:d[1],xEnd:v[0],yEnd:v[1],lineCap:"round",brushType:"stroke",strokeColor:"#666"}};u.shapeList.push(m),i.addShape(m),f+=j}if(!M)continue;var g=o,b=r*5*j,w=p.range(0,e[s],b).toArray();while(g<a){var l=x?360-g:g;l=(l+S)%360;var E=l<=90||l>=270,T={shape:"text",id:i.newShapeId(u.type),zlevel:y-1,hoverable:!1,style:{x:E?N+B+4:-N-B-4,y:0,text:Math.round(w.shift()*10)/10+t,textAlign:E?"left":"right"},position:A.slice(),rotation:E?[l/180*Math.PI,0,0]:[(l+180)/180*Math.PI,0,0]};u.shapeList.push(T),i.addShape(T),g+=j*5}}}function z(e){var t=[],n=(new p(e)).max(),r,i;n>1e4?(r="k",i=.001):n>1e7?(r="m",i=1e-6):n>1e10?(r="b",i=1e-9):(r="",i=1);for(var s=0;s<e.length;s++)t[s]=e[s]*i;return[t,r]}function W(e,t){o=t,X(e)}function X(e){e&&(s=e,g=s.series),u.clear(),d=o.legend;if(d)v=d.getColor,m=d.isSelected;else{var t={},n={},r=0;v=function(e){if(n[e])return n[e];t[e]===undefined&&(t[e]=r++);for(var s=0;s<w.length;s++)if(w[s].name===e){n[e]=u.query(w[s],"itemStyle.normal.color");break}if(!n[e]){var o=E.length;for(var s=0;s<o;s++)if(E[s].name===e){n[e]=u.query(E[s],"itemStyle.normal.color");break}}return n[e]||(n[e]=i.getColor(t[e])),n[e]},m=function(){return!0}}F()}function V(e){var t=c.merge;e=t(e||{},n.chord,{overwrite:!1,recursive:!0}),e.itemStyle.normal.label.textStyle=t(e.itemStyle.normal.label.textStyle||{},n.textStyle,{overwrite:!1,recursive:!0})}var u=this,a=e("../component/base");a.call(this,n,i);var f=e("./calculableBase");f.call(this,i,s);var l=e("../util/ecData"),c=e("zrender/tool/util"),h=e("zrender/tool/vector"),p=e("../util/ndarray"),d,v,m,g;this.type=n.CHART_TYPE_CHORD;var y=u.getZlevelBase(),b,w=[],E,S,x,T,N,C,k,L,A,O,M,_=0,D,P=[],H=[],B=4,j=4;u.init=W,u.refresh=X,u.reformOption=V,W(s,o)}e("../util/shape/chord");var t=window.devicePixelRatio||1;return e("../chart").define("chord",n),n}),r("echarts/chart/force",["require","../component/base","./calculableBase","../util/ecData","zrender/config","zrender/tool/event","zrender/tool/util","zrender/tool/vector","../util/ndarray","../chart"],function(e){function r(r,o,u,a,f){function Y(){y=f.legend,I=1,$=u.getWidth(),J=u.getHeight(),K=[$/2,J/2];var e;for(var t=0,n=w.length;t<n;t++){var i=w[t];if(i.type===r.CHART_TYPE_FORCE){w[t]=b.reformOption(w[t]),e=w[t].name||"",b.selectedMap[e]=y?y.isSelected(e):!0;if(!b.selectedMap[e])continue;b.buildMark(w[t],t,f),E=i;var s=b.query(i,"minRadius"),o=b.query(i,"maxRadius");X=b.query(i,"attractiveness"),R=b.query(i,"density"),U=b.query(i,"initSize"),W=b.query(i,"centripetal"),z=b.query(i,"coolDown"),T=b.query(i,"categories");for(var a=0,l=T.length;a<l;a++)T[a].name&&(y?b.selectedMap[a]=y.isSelected(T[a].name):b.selectedMap[a]=!0);k=b.query(i,"itemStyle.normal.linkStyle"),L=b.query(i,"itemStyle.emphasis.linkStyle"),N=b.query(i,"itemStyle.normal.nodeStyle"),C=b.query(i,"itemStyle.emphasis.nodeStyle"),A=b.query(i,"nodes"),O=v.clone(b.query(i,"links")),Z(A,O),B=[],j=[],F=[],D=[],P=[],F=[],S=[],x=[];var c=$*J;q=.5/X*Math.sqrt(c/M.length),tt(M,_),et(M,s,o)}}}function Z(e,t){var n=[],r=0;M=s(e,function(e,t){if(!e)return;if(e.ignore)return;if(b.selectedMap[e.category])return n[t]=r++,!0;n[t]=-1});var i,o,u;_=s(t,function(e,t){return i=e.source,o=e.target,u=!0,n[i]>=0?e.source=n[i]:u=!1,n[o]>=0?e.target=n[o]:u=!1,e.rawIndex=t,u})}function et(e,t,r){var s=[],o=e.length;for(var a=0;a<o;a++){var f=e[a];f.value!==undefined?s.push(f.value):s.push(1)}var l=new g(s);s=l.map(t,r).toArray();var c=l.max();c!==0&&(D=l.mul(1/c,l).toArray());for(var a=0;a<o;a++){var f=e[a],p,d,w=s[a],x;f.initial!==undefined?x=f.initial:n[f.name]!==undefined?x=n[f.name]:x=i($/2,J/2,U);var p=x[0],d=x[1];B[a]=m.create(p,d),j[a]=m.create(p,d),H[a]=m.create(0,0),F[a]=w*w*R*.035;var k={id:u.newShapeId(b.type),shape:"circle",style:{r:w,x:0,y:0},clickable:!0,highlightStyle:{},position:[p,d],__forceIndex:a},L;b.query(E,"itemStyle.normal.label.show")&&(k.style.text=f.name,k.style.textPosition="inside",L=b.query(E,"itemStyle.normal.label.textStyle")||{},k.style.textColor=L.color||"#fff",k.style.textAlign=L.align||"center",k.style.textBaseline=L.baseline||"middle",k.style.textFont=b.getFont(L)),b.query(E,"itemStyle.emphasis.label.show")&&(k.highlightStyle.text=f.name,k.highlightStyle.textPosition="inside",L=b.query(E,"itemStyle.emphasis.label.textStyle")||{},k.highlightStyle.textColor=L.color||"#fff",k.highlightStyle.textAlign=L.align||"center",k.highlightStyle.textBaseline=L.baseline||"middle",k.highlightStyle.textFont=b.getFont(L)),v.merge(k.style,N),v.merge(k.highlightStyle,C);if(typeof f.category!="undefined"){var O=T[f.category];if(O){y&&(k.style.color=y.getColor(O.name));var M=O.itemStyle;M&&(M.normal&&v.merge(k.style,M.normal,{overwrite:!0}),M.emphasis&&v.merge(k.highlightStyle,M.emphasis,{overwrite:!0}))}}if(typeof f.itemStyle!="undefined"){var M=f.itemStyle;M.normal&&v.merge(k.style,M.normal,{overwrite:!0}),M.normal&&v.merge(k.highlightStyle,M.emphasis,{overwrite:!0})}b.setCalculable(k),k.dragEnableTime=0,k.ondragstart=b.shapeHandler.ondragstart,k.draggable=!0,S.push(k),b.shapeList.push(k);var _="";if(typeof f.category!="undefined"){var O=T[f.category];_=O&&O.name||""}h.pack(k,{name:_},0,f,v.indexOf(A,f),f.name||"",f.value),u.addShape(k)}}function tt(e,t){var n=t.length;for(var r=0;r<n;r++){var i=t[r];i.weight!==undefined?P.push(i.weight):P.push(1);var s={id:u.newShapeId(b.type),shape:"line",style:{xStart:0,yStart:0,xEnd:0,yEnd:0,lineWidth:1},clickable:!0,highlightStyle:{}};v.merge(s.style,k),v.merge(s.highlightStyle,L),typeof i.itemStyle!="undefined"&&(i.itemStyle.normal&&v.merge(s.style,i.itemStyle.normal,{overwrite:!0}),i.itemStyle.emphasis&&v.merge(s.highlightStyle,i.itemStyle.emphasis,{overwrite:!0})),x.push(s),b.shapeList.push(s);var o=M[i.source],a=M[i.target],i=O[i.rawIndex];h.pack(s,E,0,{source:i.source,target:i.target,weight:i.weight||0},i.rawIndex,o.name+" - "+a.name,i.weight||0,!0),u.addShape(s)}var f=new g(P),l=f.max();l!==0&&(P=f.mul(1/l,f).toArray())}function nt(){for(var e=0,t=_.length;e<t;e++){var n=_[e],r=x[e],i=S[n.source],s=S[n.target];r.style.xStart=i.position[0],r.style.yStart=i.position[1],r.style.xEnd=s.position[0],r.style.yEnd=s.position[1]}}function rt(e){var t=B.length,r=[],i=q*q;for(var s=0;s<t;s++)H[s][0]=0,H[s][1]=0;for(var s=0;s<t;s++)for(var o=s+1;o<t;o++){var u=D[s],a=D[o],f=B[s],l=B[o];m.sub(r,l,f);var c=m.length(r);if(c>500)continue;c<5&&(c=5),m.scale(r,r,1/c);var h=1*(u+a)*i/c;m.scaleAndAdd(H[s],H[s],r,-h),m.scaleAndAdd(H[o],H[o],r,h)}for(var s=0,p=_.length;s<p;s++){var d=_[s],v=P[s],g=d.source,y=d.target,f=B[g],l=B[y];m.sub(r,l,f);var b=m.lengthSquare(r);if(b===0)continue;var h=v*b/q/Math.sqrt(b);m.scaleAndAdd(H[g],H[g],r,h),m.scaleAndAdd(H[y],H[y],r,-h)}for(var s=0,p=M.length;s<p;s++){var w=B[s];m.sub(r,K,w);var b=m.lengthSquare(r),h=b*W/(100*Math.sqrt(b));m.scaleAndAdd(H[s],H[s],r,h)}var E=[];for(var s=0,p=B.length;s<p;s++){var x=M[s].name;if(M[s].fixed){m.set(B[s],Q,G),m.set(j[s],Q,G),m.set(S[s].position,Q,G),M[s].initial!==undefined&&m.set(M[s].initial,Q,G),n[x]!==undefined&&m.set(n[x],Q,G);continue}var w=B[s],T=j[s];m.sub(E,w,T),T[0]=w[0],T[1]=w[1],m.scaleAndAdd(E,E,H[s],e/F[s]),m.scale(E,E,I),E[0]=Math.max(Math.min(E[0],100),-100),E[1]=Math.max(Math.min(E[1],100),-100),m.add(w,w,E),m.copy(S[s].position,w),x?(n[x]===undefined&&(n[x]=m.create()),m.copy(n[x],w)):(M[s].initial===undefined&&(M[s].initial=m.create()),m.copy(M[s].initial,w))}}function it(){if(I<.01)return;rt(V),nt();var e={};for(var t=0;t<S.length;t++){var n=S[t];e.position=n.position,u.modShape(n.id,e,!0)}e={};for(var t=0;t<x.length;t++){var n=x[t];e.style=n.style,u.modShape(n.id,e,!0)}u.refresh(),I*=z}function ot(e,n){function r(){st&&(it(),t(r))}a=e,f=n,w=a.series,b.clear(),Y(),st=!0,t(r)}function ut(e){e&&(a=e,w=a.series),b.clear(),Y(),I=1}function at(){st=!1}function ft(){}function lt(e){if(!b.isDragstart||!e.target)return;var t=e.target,n=t.__forceIndex,r=M[n];r.fixed=!0,b.isDragstart=!1,u.on(p.EVENT.MOUSEMOVE,ht)}function ct(e,t){if(!b.isDragend||!e.target)return;var n=e.target,r=n.__forceIndex,i=M[r];i.fixed=!1,t.dragIn=!0,t.needRefresh=!1,b.isDragend=!1,u.un(p.EVENT.MOUSEMOVE,ht)}function ht(e){I=.8,Q=d.getX(e.event),G=d.getY(e.event)}var l=e("../component/base");l.call(this,r,u);var c=e("./calculableBase");c.call(this,u,a);var h=e("../util/ecData"),p=e("zrender/config"),d=e("zrender/tool/event"),v=e("zrender/tool/util"),m=e("zrender/tool/vector"),g=e("../util/ndarray"),y,b=this;b.type=r.CHART_TYPE_FORCE;var w,E,S=[],x=[],T=[],N,C,k,L,A,O,M=[],_=[],D=[],P=[],H=[],B=[],j=[],F=[],I,q,R,U,z,W,X,V=1/60,$,J,K=[],Q,G,st;b.shapeHandler.ondragstart=function(){b.isDragstart=!0},b.init=ot,b.refresh=ut,b.ondragstart=lt,b.ondragend=ct,b.dispose=at,b.onclick=ft,ot(a,f)}function i(e,t,n){return[(Math.random()-.5)*n+e,(Math.random()-.5)*n+t]}function s(e,t){var n=e.length,r=[];for(var i=0;i<n;i++)t(e[i],i)&&r.push(e[i]);return r}var t=window.requestAnimationFrame||window.msRequestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(e){setTimeout(e,16)},n={};return e("../chart").define("force",r),r}),r("echarts/util/shape/halfSmoothPolygon",["require","zrender/shape","zrender/shape/base","zrender/shape"],function(e){function t(){this.type="halfSmoothPolygon"}return t.prototype={buildPath:function(t,n){var r=n.pointList;if(r.length<2)return;if(n.smooth){var i=this.smoothBezier(r.slice(0,-2),n.smooth);t.moveTo(r[0][0],r[0][1]);var s,o,u,a=r.length;for(var f=0;f<a-3;f++)s=i[f*2],o=i[f*2+1],u=r[f+1],t.bezierCurveTo(s[0],s[1],o[0],o[1],u[0],u[1]);t.lineTo(r[a-2][0],r[a-2][1]),t.lineTo(r[a-1][0],r[a-1][1]),t.lineTo(r[0][0],r[0][1])}else e("zrender/shape").get("polygon").buildPath(t,n);return}},e("zrender/shape/base").derive(t),e("zrender/shape").define("halfSmoothPolygon",new t),t}),r("echarts/chart/line",["require","../component/base","./calculableBase","zrender/tool/color","zrender/shape","zrender/shape","../util/shape/halfSmoothPolygon","../chart"],function(e){function t(t,r,i,s,o){function g(){p={},l.selectedMap={};var e={top:[],bottom:[],left:[],right:[]},n,r,s,u;for(var a=0,f=c.length;a<f;a++)c[a].type==l.type&&(c[a]=l.reformOption(c[a]),n=c[a].xAxisIndex,r=c[a].yAxisIndex,s=o.xAxis.getAxis(n),u=o.yAxis.getAxis(r),s.type==t.COMPONENT_TYPE_AXIS_CATEGORY?e[s.getPosition()].push(a):u.type==t.COMPONENT_TYPE_AXIS_CATEGORY&&e[u.getPosition()].push(a));for(var h in e)e[h].length>0&&y(h,e[h]);for(var a=0,f=l.shapeList.length;a<f;a++)l.shapeList[a].id=i.newShapeId(l.type),i.addShape(l.shapeList[a])}function y(e,t){var n=b(t),r=n.locationMap,i=n.maxDataLength;if(i===0||r.length===0)return;var s={};switch(e){case"bottom":case"top":w(i,r,s);break;case"left":case"right":E(i,r,s)}for(var u=0,a=t.length;u<a;u++)l.buildMark(c[t[u]],t[u],o,{xMarkMap:s})}function b(e){var t,n=0,r={},s="__kener__stack__",u,a,f=o.legend,h=[],p=0,g;for(var y=0,b=e.length;y<b;y++)t=c[e[y]],a=t.name,m[e[y]]=m[e[y]]||l.query(t,"symbol")||v[y%v.length],f?(l.selectedMap[a]=f.isSelected(a),d[e[y]]=f.getColor(a),g=f.getItemShape(a),g&&(g.shape="icon",g.style.iconType="legendLineIcon",g.style.symbol=m[e[y]],f.setItemShape(a,g))):(l.selectedMap[a]=!0,d[e[y]]=i.getColor(e[y])),l.selectedMap[a]&&(u=t.stack||s+e[y],typeof r[u]=="undefined"?(r[u]=n,h[n]=[e[y]],n++):h[r[u]].push(e[y])),p=Math.max(p,t.data.length);return{locationMap:h,maxDataLength:p}}function w(e,t,n){var r=t[0][0],i=c[r],u=i.xAxisIndex,a=o.xAxis.getAxis(u),f,h,d,v,m,g,y,b,w={},E,x;for(var N=0,C=e;N<C;N++){if(typeof a.getNameByIndex(N)=="undefined")break;d=a.getCoordByIndex(N);for(var k=0,L=t.length;k<L;k++){f=c[t[k][0]].yAxisIndex||0,h=o.yAxis.getAxis(f),g=m=b=y=h.getCoord(0);for(var A=0,O=t[k].length;A<O;A++){r=t[k][A],i=c[r],E=i.data[N],x=typeof E!="undefined"?typeof E.value!="undefined"?E.value:E:"-",w[r]=w[r]||[];if(x=="-"){w[r].length>0&&(p[r]=p[r]||[],p[r].push(w[r]),w[r]=[]);continue}x>=0?(m-=A>0?h.getCoordSize(x):g-h.getCoord(x),v=m):x<0&&(y+=A>0?h.getCoordSize(x):h.getCoord(x)-b,v=y),w[r].push([d,v,N,a.getNameByIndex(N),d,g]),n[r]=n[r]||{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY,sum:0,counter:0,average:0},n[r].min>x&&(n[r].min=x,n[r].minY=v,n[r].minX=d),n[r].max<x&&(n[r].max=x,n[r].maxY=v,n[r].maxX=d),n[r].sum+=x,n[r].counter++}}m=o.grid.getY();var M;for(var k=0,L=t.length;k<L;k++)for(var A=0,O=t[k].length;A<O;A++){r=t[k][A],i=c[r],E=i.data[N],x=typeof E!="undefined"?typeof E.value!="undefined"?E.value:E:"-";if(x!="-")continue;l.deepQuery([E,i,s],"calculable")&&(M=l.deepQuery([E,i],"symbolSize"),m+=M*2+5,v=m,l.shapeList.push(T(r,N,a.getNameByIndex(N),d,v,"horizontal")))}}for(var _ in w)w[_].length>0&&(p[_]=p[_]||[],p[_].push(w[_]),w[_]=[]);for(var k=0,L=t.length;k<L;k++)for(var A=0,O=t[k].length;A<O;A++)r=t[k][A],n[r].average=(n[r].sum/n[r].counter).toFixed(2)-0,v=o.yAxis.getAxis(c[r].yAxisIndex||0).getCoord(n[r].average),n[r].averageLine=[[o.grid.getX(),v],[o.grid.getXend(),v]],n[r].minLine=[[o.grid.getX(),n[r].minY],[o.grid.getXend(),n[r].minY]],n[r].maxLine=[[o.grid.getX(),n[r].maxY],[o.grid.getXend(),n[r].maxY]];S(p,a,"horizontal")}function E(e,t,n){var r=t[0][0],i=c[r],u=i.yAxisIndex,a=o.yAxis.getAxis(u),f,h,d,v,m,g,y,b,w={},E,x;for(var N=0,C=e;N<C;N++){if(typeof a.getNameByIndex(N)=="undefined")break;v=a.getCoordByIndex(N);for(var k=0,L=t.length;k<L;k++){f=c[t[k][0]].xAxisIndex||0,h=o.xAxis.getAxis(f),g=m=b=y=h.getCoord(0);for(var A=0,O=t[k].length;A<O;A++){r=t[k][A],i=c[r],E=i.data[N],x=typeof E!="undefined"?typeof E.value!="undefined"?E.value:E:"-",w[r]=w[r]||[];if(x=="-"){w[r].length>0&&(p[r]=p[r]||[],p[r].push(w[r]),w[r]=[]);continue}x>=0?(m+=A>0?h.getCoordSize(x):h.getCoord(x)-g,d=m):x<0&&(y-=A>0?h.getCoordSize(x):b-h.getCoord(x),d=y),w[r].push([d,v,N,a.getNameByIndex(N),g,v]),n[r]=n[r]||{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY,sum:0,counter:0,average:0},n[r].min>x&&(n[r].min=x,n[r].minX=d,n[r].minY=v),n[r].max<x&&(n[r].max=x,n[r].maxX=d,n[r].maxY=v),n[r].sum+=x,n[r].counter++}}m=o.grid.getXend();var M;for(var k=0,L=t.length;k<L;k++)for(var A=0,O=t[k].length;A<O;A++){r=t[k][A],i=c[r],E=i.data[N],x=typeof E!="undefined"?typeof E.value!="undefined"?E.value:E:"-";if(x!="-")continue;l.deepQuery([E,i,s],"calculable")&&(M=l.deepQuery([E,i],"symbolSize"),m-=M*2+5,d=m,l.shapeList.push(T(r,N,a.getNameByIndex(N),d,v,"vertical")))}}for(var _ in w)w[_].length>0&&(p[_]=p[_]||[],p[_].push(w[_]),w[_]=[]);for(var k=0,L=t.length;k<L;k++)for(var A=0,O=t[k].length;A<O;A++)r=t[k][A],n[r].average=n[r].sum/n[r].counter,d=o.xAxis.getAxis(c[r].xAxisIndex||0).getCoord(n[r].average),n[r].averageLine=[[d,o.grid.getYend()],[d,o.grid.getY()]],n[r].minLine=[[n[r].minX,o.grid.getYend()],[n[r].minX,o.grid.getY()]],n[r].maxLine=[[n[r].maxX,o.grid.getYend()],[n[r].maxX,o.grid.getY()]];S(p,a,"vertical")}function S(e,t,n){var r,i,o,u,a,p,v,m,g,y,b;for(var w=c.length-1;w>=0;w--){m=c[w],y=e[w];if(m.type==l.type&&typeof y!="undefined"){r=d[w],i=l.query(m,"itemStyle.normal.lineStyle.width"),o=l.query(m,"itemStyle.normal.lineStyle.type"),u=l.query(m,"itemStyle.normal.lineStyle.color"),a=l.getItemStyleColor(l.query(m,"itemStyle.normal.color"),w,-1),p=typeof l.query(m,"itemStyle.normal.areaStyle")!="undefined",v=l.query(m,"itemStyle.normal.areaStyle.color");for(var E=0,S=y.length;E<S;E++){b=y[E];for(var T=0,C=b.length;T<C;T++)g=m.data[b[T][2]],(l.deepQuery([g,m],"showAllSymbol")||t.isMainAxis(b[T][2])&&l.deepQuery([g,m],"symbol")!="none"||l.deepQuery([g,m,s],"calculable"))&&l.shapeList.push(N(w,b[T][2],b[T][3],b[T][0],b[T][1],n));l.shapeList.push({shape:"brokenLine",zlevel:h,style:{miterLimit:i,pointList:b,strokeColor:u||a||r,lineWidth:i,lineType:o,smooth:x(m.smooth),shadowColor:l.query(m,"itemStyle.normal.lineStyle.shadowColor"),shadowBlur:l.query(m,"itemStyle.normal.lineStyle.shadowBlur"),shadowOffsetX:l.query(m,"itemStyle.normal.lineStyle.shadowOffsetX"),shadowOffsetY:l.query(m,"itemStyle.normal.lineStyle.shadowOffsetY")},hoverable:!1,_main:!0,_seriesIndex:w,_orient:n}),p&&l.shapeList.push({shape:"halfSmoothPolygon",zlevel:h,style:{miterLimit:i,pointList:b.concat([[b[b.length-1][4],b[b.length-1][5]-2],[b[0][4],b[0][5]-2]]),brushType:"fill",smooth:x(m.smooth),color:v?v:f.alpha(r,.5)},hoverable:!1,_main:!0,_seriesIndex:w,_orient:n})}}}}function x(e){return e?.3:0}function T(e,n,r,i,s,o){var u=c[e].calculableHolderColor||t.calculableHolderColor,a=N(e,n,r,i,s,o);return a.style.color=u,a.style.strokeColor=u,a.rotation=[0,0],a.hoverable=!1,a.draggable=!1,a.style.text=undefined,a}function N(e,t,n,r,i,o){var u=c[e],a=u.data[t],f=l.getSymbolShape(u,e,a,t,n,r,i,m[e],d[e],"#fff",o=="vertical"?"horizontal":"vertical");return f.zlevel=h+1,l.deepQuery([a,u,s],"calculable")&&(l.setCalculable(f),f.draggable=!0),f}function C(e,t,n,r){var i=o.xAxis.getAxis(e.xAxisIndex),s=o.yAxis.getAxis(e.yAxisIndex);return!n.type||n.type!="max"&&n.type!="min"&&n.type!="average"?[typeof n.xAxis!="string"&&i.getCoordByIndex?i.getCoordByIndex(n.xAxis||0):i.getCoord(n.xAxis||0),typeof n.yAxis!="string"&&s.getCoordByIndex?s.getCoordByIndex(n.yAxis||0):s.getCoord(n.yAxis||0)]:[r.xMarkMap[t][n.type+"X"],r.xMarkMap[t][n.type+"Y"],r.xMarkMap[t][n.type+"Line"],r.xMarkMap[t][n.type]]}function k(e,t){o=t,L(e)}function L(e){e&&(s=e,c=s.series),l.clear(),g()}function A(e,t){var n=e.seriesIndex,r=e.dataIndex,i,s,o=n.length;while(o--){i=p[n[o]];if(i)for(var u=0,a=i.length;u<a;u++){s=i[u];for(var f=0,l=s.length;f<l;f++)r==s[f][2]&&t.push(N(n[o],s[f][2],s[f][3],s[f][0],s[f][1],"horizontal"))}}}function O(e){var t={};for(var n=0,r=e.length;n<r;n++)t[e[n][0]]=e[n];var s,o,u,a,f,h,p;for(var n=l.shapeList.length-1;n>=0;n--){f=l.shapeList[n]._seriesIndex;if(t[f]&&!t[f][3]){if(l.shapeList[n]._main){h=l.shapeList[n].style.pointList,o=Math.abs(h[0][0]-h[1][0]),a=Math.abs(h[0][1]-h[1][1]),p=l.shapeList[n]._orient=="horizontal";if(t[f][2]){if(l.shapeList[n].shape=="polygon"){var d=h.length;l.shapeList[n].style.pointList[d-3]=h[d-2],p?l.shapeList[n].style.pointList[d-3][0]=h[d-4][0]:l.shapeList[n].style.pointList[d-3][1]=h[d-4][1],l.shapeList[n].style.pointList[d-2]=h[d-1]}l.shapeList[n].style.pointList.pop(),p?(s=o,u=0):(s=0,u=-a)}else{l.shapeList[n].style.pointList.shift();if(l.shapeList[n].shape=="polygon"){var v=l.shapeList[n].style.pointList.pop();p?v[0]=h[0][0]:v[1]=h[0][1],l.shapeList[n].style.pointList.push(v)}p?(s=-o,u=0):(s=0,u=a)}i.modShape(l.shapeList[n].id,{style:{pointList:l.shapeList[n].style.pointList}},!0)}else{if(t[f][2]&&l.shapeList[n]._dataIndex==c[f].data.length-1){i.delShape(l.shapeList[n].id);continue}if(!t[f][2]&&l.shapeList[n]._dataIndex===0){i.delShape(l.shapeList[n].id);continue}}i.animate(l.shapeList[n].id,"").when(500,{position:[s,u]}).start()}}}function M(){var e=l.query(s,"animationDuration"),t=l.query(s,"animationEasing"),n,r,o,u=0;for(var a=0,f=l.shapeList.length;a<f;a++)l.shapeList[a]._main&&(o=c[l.shapeList[a]._seriesIndex],u+=1,n=l.shapeList[a].style.pointList[0][0],r=l.shapeList[a].style.pointList[0][1],l.shapeList[a]._orient=="horizontal"?i.modShape(l.shapeList[a].id,{scale:[0,1,n,r]},!0):i.modShape(l.shapeList[a].id,{scale:[1,0,n,r]},!0),i.animate(l.shapeList[a].id,"").when((l.query(o,"animationDuration")||e)+u*100,{scale:[1,1,n,r]}).start(l.query(o,"animationEasing")||t));l.animationMark(e,t)}var u=e("../component/base");u.call(this,t,i);var a=e("./calculableBase");a.call(this,i,s);var f=e("zrender/tool/color"),l=this;l.type=t.CHART_TYPE_LINE;var c,h=l.getZlevelBase(),p={},d={},v=t.symbolList,m={};e("zrender/shape").get("icon").define("legendLineIcon",n),l.getMarkCoord=C,l.animation=M,l.init=k,l.refresh=L,l.ontooltipHover=A,l.addDataAnimation=O,k(s,o)}function n(t,n){var r=n.x,i=n.y,s=n.width,o=n.height,u=o/2;n.symbol.match("empty")&&(t.fillStyle="#fff"),n.brushType="both";var a=n.symbol.replace("empty","").toLowerCase();if(a.match("star"))u=a.replace("star","")-0||5,i-=1,a="star";else if(a=="rectangle"||a=="arrow")r+=(s-o)/2,s=o;var f="";a.match("image")&&(f=a.replace(new RegExp("^image:\\/\\/"),""),a="image",r+=Math.round((s-o)/2)-1,s=o+=2),a=e("zrender/shape").get("icon").get(a);if(a){var l=n.x,c=n.y;t.moveTo(l,c+u),t.lineTo(l+5,c+u),t.moveTo(l+n.width-5,c+u),t.lineTo(l+n.width,c+u),a(t,{x:r+4,y:i+4,width:s-8,height:o-8,n:u,image:f})}else t.moveTo(r,i+u),t.lineTo(r+s,i+u)}return e("../util/shape/halfSmoothPolygon"),e("../chart").define("line",t),t}),r("echarts/chart/bar",["require","../component/base","./calculableBase","../util/ecData","zrender/tool/color","../chart"],function(e){function t(t,n,r,i,s){function d(){l.selectedMap={};var e={top:[],bottom:[],left:[],right:[]},n,i,o,u;for(var a=0,f=c.length;a<f;a++)c[a].type==t.CHART_TYPE_BAR&&(c[a]=l.reformOption(c[a]),n=c[a].xAxisIndex,i=c[a].yAxisIndex,o=s.xAxis.getAxis(n),u=s.yAxis.getAxis(i),o.type==t.COMPONENT_TYPE_AXIS_CATEGORY?e[o.getPosition()].push(a):u.type==t.COMPONENT_TYPE_AXIS_CATEGORY&&e[u.getPosition()].push(a));for(var h in e)e[h].length>0&&v(h,e[h]);for(var a=0,f=l.shapeList.length;a<f;a++)l.shapeList[a].id=r.newShapeId(l.type),r.addShape(l.shapeList[a])}function v(e,t){var n=m(t),r=n.locationMap,i=n.maxDataLength;if(i===0||r.length===0)return;switch(e){case"bottom":case"top":g(i,r,t);break;case"left":case"right":y(i,r,t)}}function m(e){var t,n=0,i={},o="__kener__stack__",u,a,f=s.legend,h=[],d=0,v;for(var m=0,g=e.length;m<g;m++)t=c[e[m]],a=t.name,f?(l.selectedMap[a]=f.isSelected(a),p[e[m]]=f.getColor(a),v=f.getItemShape(a),v&&(t.itemStyle.normal.borderWidth>0&&(v.style.x+=1,v.style.y+=1,v.style.width-=2,v.style.height-=2,v.style.strokeColor=v.highlightStyle.strokeColor=t.itemStyle.normal.borderColor,v.highlightStyle.lineWidth=3,v.style.brushType="both"),f.setItemShape(a,v))):(l.selectedMap[a]=!0,p[e[m]]=r.getColor(e[m])),l.selectedMap[a]&&(u=t.stack||o+e[m],typeof i[u]=="undefined"?(i[u]=n,h[n]=[e[m]],n++):h[i[u]].push(e[m])),d=Math.max(d,t.data.length);return{locationMap:h,maxDataLength:d}}function g(e,n,r){var o=n[0][0],u=c[o],a=u.xAxisIndex,f=s.xAxis.getAxis(a),h,p,d=b(f,n),v=d.gap,m=d.barGap,g=d.barWidthMap,y=d.barWidth,S=d.barMinHeightMap,x,T={},N,C,k,L,A,O,M,_,D;for(var P=0,H=e;P<H;P++){if(typeof f.getNameByIndex(P)=="undefined")break;N=f.getCoordByIndex(P)-v/2;for(var B=0,j=n.length;B<j;B++){h=c[n[B][0]].yAxisIndex||0,p=s.yAxis.getAxis(h),L=k=O=A=p.getCoord(0);for(var F=0,I=n[B].length;F<I;F++){o=n[B][F],u=c[o],_=u.data[P],D=typeof _!="undefined"?typeof _.value!="undefined"?_.value:_:"-";if(D=="-")continue;D>0?(x=F>0?p.getCoordSize(D):L-p.getCoord(D),I==1&&S[o]>x&&(x=S[o]),k-=x,C=k):D<0?(x=F>0?p.getCoordSize(D):p.getCoord(D)-O,I==1&&S[o]>x&&(x=S[o]),C=A,A+=x):(x=0,k-=x,C=k),M=w(o,P,f.getNameByIndex(P),N,C,g[o]||y,x,"vertical"),T[o]=T[o]||{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY,sum:0,counter:0,average:0},T[o][P]=N+(g[o]||y)/2,T[o].min>D&&(T[o].min=D,T[o].minY=C,T[o].minX=T[o][P]),T[o].max<D&&(T[o].max=D,T[o].maxY=C,T[o].maxX=T[o][P]),T[o].sum+=D,T[o].counter++,l.shapeList.push(M)}for(var F=0,I=n[B].length;F<I;F++){o=n[B][F],u=c[o],_=u.data[P],D=typeof _!="undefined"?typeof _.value!="undefined"?_.value:_:"-";if(D!="-")continue;l.deepQuery([_,u,i],"calculable")&&(k-=t.island.r,C=k,M=w(o,P,f.getNameByIndex(P),N+.5,C+.5,(g[o]||y)-1,t.island.r-1,"vertical"),M.hoverable=!1,M.draggable=!1,M.style.lineWidth=1,M.style.brushType="stroke",M.style.strokeColor=u.calculableHolderColor||t.calculableHolderColor,l.shapeList.push(M))}N+=(g[o]||y)+m}}for(var B=0,j=n.length;B<j;B++)for(var F=0,I=n[B].length;F<I;F++)o=n[B][F],T[o].average=(T[o].sum/T[o].counter).toFixed(2)-0,C=s.yAxis.getAxis(c[o].yAxisIndex||0).getCoord(T[o].average),T[o].averageLine=[[s.grid.getX(),C],[s.grid.getXend(),C]],T[o].minLine=[[s.grid.getX(),T[o].minY],[s.grid.getXend(),T[o].minY]],T[o].maxLine=[[s.grid.getX(),T[o].maxY],[s.grid.getXend(),T[o].maxY]];E(r,T,!0)}function y(e,n,r){var o=n[0][0],u=c[o],a=u.yAxisIndex,f=s.yAxis.getAxis(a),h,p,d=b(f,n),v=d.gap,m=d.barGap,g=d.barWidthMap,y=d.barWidth,S=d.barMinHeightMap,x,T={},N,C,k,L,A,O,M,_,D;for(var P=0,H=e;P<H;P++){if(typeof f.getNameByIndex(P)=="undefined")break;C=f.getCoordByIndex(P)+v/2;for(var B=0,j=n.length;B<j;B++){h=c[n[B][0]].xAxisIndex||0,p=s.xAxis.getAxis(h),L=k=O=A=p.getCoord(0);for(var F=0,I=n[B].length;F<I;F++){o=n[B][F],u=c[o],_=u.data[P],D=typeof _!="undefined"?typeof _.value!="undefined"?_.value:_:"-";if(D=="-")continue;D>0?(x=F>0?p.getCoordSize(D):p.getCoord(D)-L,I==1&&S[o]>x&&(x=S[o]),N=k,k+=x):D<0?(x=F>0?p.getCoordSize(D):O-p.getCoord(D),I==1&&S[o]>x&&(x=S[o]),A-=x,N=A):(x=0,N=k,k+=x),M=w(o,P,f.getNameByIndex(P),N,C-(g[o]||y),x,g[o]||y,"horizontal"),T[o]=T[o]||{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY,sum:0,counter:0,average:0},T[o][P]=C-(g[o]||y)/2,T[o].min>D&&(T[o].min=D,T[o].minX=N+x,T[o].minY=T[o][P]),T[o].max<D&&(T[o].max=D,T[o].maxX=N+x,T[o].maxY=T[o][P]),T[o].sum+=D,T[o].counter++,l.shapeList.push(M)}for(var F=0,I=n[B].length;F<I;F++){o=n[B][F],u=c[o],_=u.data[P],D=typeof _!="undefined"?typeof _.value!="undefined"?_.value:_:"-";if(D!="-")continue;l.deepQuery([_,u,i],"calculable")&&(N=k,k+=t.island.r,M=w(o,P,f.getNameByIndex(P),N+.5,C+.5-(g[o]||y),t.island.r-1,(g[o]||y)-1,"horizontal"),M.hoverable=!1,M.draggable=!1,M.style.lineWidth=1,M.style.brushType="stroke",M.style.strokeColor=u.calculableHolderColor||t.calculableHolderColor,l.shapeList.push(M))}C-=(g[o]||y)+m}}for(var B=0,j=n.length;B<j;B++)for(var F=0,I=n[B].length;F<I;F++)o=n[B][F],T[o].average=T[o].sum/T[o].counter,N=s.xAxis.getAxis(c[o].xAxisIndex||0).getCoord(T[o].average),T[o].averageLine=[[N,s.grid.getYend()],[N,s.grid.getY()]],T[o].minLine=[[T[o].minX,s.grid.getYend()],[T[o].minX,s.grid.getY()]],T[o].maxLine=[[T[o].maxX,s.grid.getYend()],[T[o].maxX,s.grid.getY()]];E(r,T,!1)}function b(e,t,n){var r={},i={},s,o=0,u=0,a,f,h,p;for(var d=0,v=t.length;d<v;d++){h=!1;for(var m=0,g=t[d].length;m<g;m++){seriesIndex=t[d][m],p=c[seriesIndex];if(!n)if(!h){s=l.query(p,"barWidth");if(typeof s!="undefined"){r[seriesIndex]=s,u+=s,o++,h=!0;for(var y=0,w=m;y<w;y++){var E=t[d][y];r[E]=s}}}else r[seriesIndex]=s;i[seriesIndex]=l.query(p,"barMinHeight"),a=typeof a!="undefined"?a:l.query(p,"barGap"),f=typeof f!="undefined"?f:l.query(p,"barCategoryGap")}}var S,x;if(t.length!=o)if(!n){S=typeof f=="string"&&f.match(/%$/)?Math.floor(e.getGap()*(100-parseFloat(f))/100):e.getGap()-f,typeof a=="string"&&a.match(/%$/)?(a=parseFloat(a)/100,x=Math.floor((S-u)/((t.length-1)*a+t.length-o)),a=Math.floor(x*a)):(a=parseFloat(a),x=Math.floor((S-u-a*(t.length-1))/(t.length-o)));if(x<0)return b(e,t,!0)}else S=e.getGap(),a=0,x=Math.floor(S/t.length),x<0&&(x=1);else{S=o>1?typeof f=="string"&&f.match(/%$/)?Math.floor(e.getGap()*(100-parseFloat(f))/100):e.getGap()-f:u,x=0,a=o>1?Math.floor((S-u)/(o-1)):0;if(a<0)return b(e,t,!0)}return{barWidthMap:r,barMinHeightMap:i,gap:S,barWidth:x,barGap:a}}function w(e,t,n,r,s,o,u,d){var v,m=c[e],g=m.data[t],y=p[e],b=[g,m],w=l.deepQuery(b,"itemStyle.normal.color")||y,E=l.deepQuery(b,"itemStyle.emphasis.color"),S=l.deepMerge(b,"itemStyle.normal"),x=S.borderWidth,T=l.deepMerge(b,"itemStyle.emphasis");return v={shape:"rectangle",zlevel:h,clickable:!0,style:{x:r,y:s,width:o,height:u,brushType:"both",color:l.getItemStyleColor(w,e,t,g),radius:S.borderRadius,lineWidth:x,strokeColor:S.borderColor},highlightStyle:{color:l.getItemStyleColor(E,e,t,g),radius:T.borderRadius,lineWidth:T.borderWidth,strokeColor:T.borderColor},_orient:d},v.highlightStyle.color=v.highlightStyle.color||(typeof v.style.color=="string"?f.lift(v.style.color,-0.3):v.style.color),x>0&&v.style.height>x&&v.style.width>x?(v.style.y+=x/2,v.style.height-=x,v.style.x+=x/2,v.style.width-=x):v.style.brushType="fill",v.highlightStyle.textColor=v.highlightStyle.color,v=l.addLabel(v,m,g,n,d),l.deepQuery([g,m,i],"calculable")&&(l.setCalculable(v),v.draggable=!0),a.pack(v,c[e],e,c[e].data[t],t,n),v}function E(e,t,n){for(var r=0,i=e.length;r<i;r++)l.buildMark(c[e[r]],e[r],s,{isHorizontal:n,xMarkMap:t})}function S(e,t,n,r){var i=s.xAxis.getAxis(e.xAxisIndex),o=s.yAxis.getAxis(e.yAxisIndex),u,a;return!n.type||n.type!="max"&&n.type!="min"&&n.type!="average"?r.isHorizontal?(u=typeof n.xAxis=="string"&&i.getIndexByName?i.getIndexByName(n.xAxis):n.xAxis||0,a=[r.xMarkMap[t][u],o.getCoord(n.yAxis||0)]):(u=typeof n.yAxis=="string"&&o.getIndexByName?o.getIndexByName(n.yAxis):n.yAxis||0,a=[i.getCoord(n.xAxis||0),r.xMarkMap[t][u]]):a=[r.xMarkMap[t][n.type+"X"],r.xMarkMap[t][n.type+"Y"],r.xMarkMap[t][n.type+"Line"],r.xMarkMap[t][n.type]],a}function x(e,t){s=t,T(e)}function T(e){e&&(i=e,c=i.series),l.clear(),d()}function N(e){var t={};for(var n=0,i=e.length;n<i;n++)t[e[n][0]]=e[n];var o,u,f,h,p,d,v;for(var n=l.shapeList.length-1;n>=0;n--){d=a.get(l.shapeList[n],"seriesIndex");if(t[d]&&!t[d][3]&&l.shapeList[n].shape=="rectangle"){v=a.get(l.shapeList[n],"dataIndex"),p=c[d];if(t[d][2]&&v==p.data.length-1){r.delShape(l.shapeList[n].id);continue}if(!t[d][2]&&v===0){r.delShape(l.shapeList[n].id);continue}l.shapeList[n]._orient=="horizontal"?(h=s.yAxis.getAxis(p.yAxisIndex||0).getGap(),f=t[d][2]?-h:h,o=0):(u=s.xAxis.getAxis(p.xAxisIndex||0).getGap(),o=t[d][2]?u:-u,f=0),r.animate(l.shapeList[n].id,"").when(500,{position:[o,f]}).start()}}}function C(){var e,t,n,s,o,u,f,c,h;for(var p=0,d=l.shapeList.length;p<d;p++)l.shapeList[p].shape=="rectangle"&&(f=a.get(l.shapeList[p],"series"),c=a.get(l.shapeList[p],"dataIndex"),h=a.get(l.shapeList[p],"value"),e=l.deepQuery([f,i],"animationDuration"),t=l.deepQuery([f,i],"animationEasing"),l.shapeList[p]._orient=="horizontal"?(n=l.shapeList[p].style.width,o=l.shapeList[p].style.x,h<0?(r.modShape(l.shapeList[p].id,{style:{x:o+n,width:0}},!0),r.animate(l.shapeList[p].id,"style").when(e+c*100,{x:o,width:n}).start(t)):(r.modShape(l.shapeList[p].id,{style:{width:0}},!0),r.animate(l.shapeList[p].id,"style").when(e+c*100,{width:n}).start(t))):(s=l.shapeList[p].style.height,u=l.shapeList[p].style.y,h<0?(r.modShape(l.shapeList[p].id,{style:{height:0}},!0),r.animate(l.shapeList[p].id,"style").when(e+c*100,{height:s}).start(t)):(r.modShape(l.shapeList[p].id,{style:{y:u+s,height:0}},!0),r.animate(l.shapeList[p].id,"style").when(e+c*100,{y:u,height:s}).start(t))));l.animationMark(e,t)}var o=e("../component/base");o.call(this,t,r);var u=e("./calculableBase");u.call(this,r,i);var a=e("../util/ecData"),f=e("zrender/tool/color"),l=this;l.type=t.CHART_TYPE_BAR;var c,h=l.getZlevelBase(),p={};l.getMarkCoord=S,l.animation=C,l.init=x,l.refresh=T,l.addDataAnimation=N,x(i,s)}return e("../chart").define("bar",t),t}),r("echarts/chart/pie",["require","../component/base","./calculableBase","../util/ecData","zrender/tool/math","zrender/tool/util","zrender/tool/color","../util/accMath","../chart"],function(e){function t(t,n,r,i,s){function g(){var e=s.legend;h.selectedMap={},m={};var n,o,u;v=!1;var f;for(var l=0,c=p.length;l<c;l++)if(p[l].type==t.CHART_TYPE_PIE){p[l]=h.reformOption(p[l]),f=p[l].name||"",h.selectedMap[f]=e?e.isSelected(f):!0;if(!h.selectedMap[f])continue;n=h.parseCenter(r,p[l].center),o=h.parseRadius(r,p[l].radius),v=v||p[l].selectedMode,m[l]=[],h.deepQuery([p[l],i],"calculable")&&(u={shape:o[0]<=10?"circle":"ring",zlevel:d,hoverable:!1,style:{x:n[0],y:n[1],r0:o[0]<=10?0:o[0]-10,r:o[1]+10,brushType:"stroke",lineWidth:1,strokeColor:p[l].calculableHolderColor||t.calculableHolderColor}},a.pack(u,p[l],l,undefined,-1),h.setCalculable(u),h.shapeList.push(u)),y(l),h.buildMark(p[l],l,s)}for(var l=0,c=h.shapeList.length;l<c;l++)h.shapeList[l].id=r.newShapeId(h.type),r.addShape(h.shapeList[l])}function y(e){var t=p[e],n=t.data,i=s.legend,o,u=0,a=0,f=0,l=Number.NEGATIVE_INFINITY;for(var c=0,d=n.length;c<d;c++)o=n[c].name,i?h.selectedMap[o]=i.isSelected(o):h.selectedMap[o]=!0,h.selectedMap[o]&&!isNaN(n[c].value)&&(+n[c].value!==0?u++:a++,f+=+n[c].value,l=Math.max(l,+n[c].value));var v=100,m,g=0,y=t.clockWise,w=t.startAngle.toFixed(2)-0,E,S=t.minAngle||.01,x=360-S*u-.01*a,N,C=t.roseType,k,L,A;for(var c=0,d=n.length;c<d;c++){o=n[c].name;if(!h.selectedMap[o]||isNaN(n[c].value))continue;i?N=i.getColor(o):N=r.getColor(c),m=v,v=n[c].value/f,C!="area"?E=y?w-v*x-(v!==0?S:.01):v*x+w+(v!==0?S:.01):E=y?w-360/d:360/d+w,E=E.toFixed(2)-0,v=(v*100).toFixed(2),k=h.parseRadius(r,t.radius),L=+k[0],A=+k[1],C=="radius"?A=n[c].value/l*(A-L)*.8+(A-L)*.2+L:C=="area"&&(A=Math.sqrt(n[c].value/l)*(A-L)+L);if(y){var O;O=w,w=E,E=O}c>0&&v<4&&m<4&&T(t,n[c],!1)&&h.deepQuery([n[c],t],"itemStyle.normal.label.position")!="center"?g+=v<4?20:-20:g=0,b(e,c,v,g,n[c].selected,L,A,w,E,N),y||(w=E)}}function b(e,t,n,r,i,s,o,u,f,l){var c=w(e,t,n,i,s,o,u,f,l);a.pack(c,p[e],e,p[e].data[t],t,p[e].data[t].name,n),c._lastAddRadius=r,h.shapeList.push(c);var d=E(e,t,n,r,u,f,l,!1);d&&(d._dataIndex=t,h.shapeList.push(d));var v=x(e,t,r,s,o,u,f,l,!1);v&&(v._dataIndex=t,h.shapeList.push(v))}function w(e,t,n,s,o,u,a,l,g){var y=p[e],b=y.data[t],w=[b,y],E=h.parseCenter(r,y.center),S=h.deepMerge(w,"itemStyle.normal")||{},x=h.deepMerge(w,"itemStyle.emphasis")||{},C=h.getItemStyleColor(S.color,e,t,b)||g,k=h.getItemStyleColor(x.color,e,t,b)||(typeof C=="string"?c.lift(C,-0.2):C),L={shape:"sector",zlevel:d,clickable:!0,style:{x:E[0],y:E[1],r0:o,r:u,startAngle:a,endAngle:l,brushType:"both",color:C,lineWidth:S.borderWidth,strokeColor:S.borderColor,lineJoin:"round"},highlightStyle:{color:k,lineWidth:x.borderWidth,strokeColor:x.borderColor,lineJoin:"round"},_seriesIndex:e,_dataIndex:t};if(s){var A=((L.style.startAngle+L.style.endAngle)/2).toFixed(2)-0;L.style._hasSelected=!0,L.style._x=L.style.x,L.style._y=L.style.y;var O=h.query(y,"selectedOffset");L.style.x+=f.cos(A,!0)*O,L.style.y-=f.sin(A,!0)*O,m[e][t]=!0}else m[e][t]=!1;v&&(L.onclick=h.shapeHandler.onclick),h.deepQuery([b,y,i],"calculable")&&(h.setCalculable(L),L.draggable=!0);if(T(y,b,!0)||N(y,b,!0))L.onmouseover=h.shapeHandler.onmouseover;return L}function E(e,t,n,i,s,o,u,a){var c=p[e],v=c.data[t];if(!T(c,v,a))return;var m=a?"emphasis":"normal",g=l.merge(l.clone(v.itemStyle)||{},c.itemStyle,{overwrite:!1,recursive:!0}),y=g[m].label,b=y.textStyle||{},w=h.parseCenter(r,c.center),E=w[0],x=w[1],N,C,k=((o+s)/2+360)%360,L=h.parseRadius(r,c.radius),A,O="middle";return y.position=y.position||g.normal.label.position,y.position=="center"?(L=L[1],N=E,C=x,A="center"):y.position=="inner"?(L=(L[0]+L[1])/2+i,N=Math.round(E+L*f.cos(k,!0)),C=Math.round(x-L*f.sin(k,!0)),u="#fff",A="center"):(L=L[1]- -g[m].labelLine.length+i,N=E+L*f.cos(k,!0),C=x-L*f.sin(k,!0),A=k>=90&&k<=270?"right":"left"),y.position!="center"&&y.position!="inner"&&(N+=A=="left"?20:-20),v.__labelX=N-(A=="left"?5:-5),v.__labelY=C,{shape:"text",zlevel:d+1,hoverable:!1,style:{x:N,y:C,color:b.color||u,text:S(e,t,n,m),textAlign:b.align||A,textBaseline:b.baseline||O,textFont:h.getFont(b)},highlightStyle:{brushType:"fill"},_seriesIndex:e,_dataIndex:t}}function S(e,t,n,r){var i=p[e],s=i.data[t],o=h.deepQuery([s,i],"itemStyle."+r+".label.formatter");if(!o)return s.name;if(typeof o=="function")return o(i.name,s.name,s.value,n);if(typeof o=="string")return o=o.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}").replace("{d}","{d0}"),o=o.replace("{a0}",i.name).replace("{b0}",s.name).replace("{c0}",s.value).replace("{d0}",n),o}function x(e,t,n,i,s,o,u,a,c){var v=p[e],m=v.data[t];if(N(v,m,c)){var g=c?"emphasis":"normal",y=l.merge(l.clone(m.itemStyle)||{},v.itemStyle,{overwrite:!1,recursive:!0}),b=y[g].labelLine,w=b.lineStyle||{},E=h.parseCenter(r,v.center),S=E[0],x=E[1],T=s,C=h.parseRadius(r,v.radius)[1]- -b.length+n,k=(u+o)/2%360,L=f.cos(k,!0),A=f.sin(k,!0);return{shape:"brokenLine",zlevel:d+1,hoverable:!1,style:{pointList:[[S+T*L,x-T*A],[S+C*L,x-C*A],[m.__labelX,m.__labelY]],strokeColor:w.color||a,lineType:w.type,lineWidth:w.width},_seriesIndex:e,_dataIndex:t}}return}function T(e,t,n){return h.deepQuery([t,e],"itemStyle."+(n?"emphasis":"normal")+".label.show")}function N(e,t,n){return h.deepQuery([t,e],"itemStyle."+(n?"emphasis":"normal")+".labelLine.show")}function C(e){var n=l.merge;return e=n(e||{},t.pie,{overwrite:!1,recursive:!0}),e.itemStyle.normal.label.textStyle=n(e.itemStyle.normal.label.textStyle||{},t.textStyle,{overwrite:!1,recursive:!0}),e.itemStyle.emphasis.label.textStyle=n(e.itemStyle.emphasis.label.textStyle||{},t.textStyle,{overwrite:!1,recursive:!0}),e}function k(e,t){s=t,L(e)}function L(e){e&&(i=e,p=i.series),h.clear(),g()}function A(e){var n={};for(var i=0,s=e.length;i<s;i++)n[e[i][0]]=e[i];var o={},u={},a={},f=l.clone(h.shapeList);h.shapeList=[];var c,d,v,m={};for(var i=0,s=e.length;i<s;i++)c=e[i][0],d=e[i][2],v=e[i][3],p[c]&&p[c].type==t.CHART_TYPE_PIE&&(d?(v||(o[c+"_"+p[c].data.length]="delete"),m[c]=1):v?m[c]=0:(o[c+"_-1"]="delete",m[c]=-1),y(c));var g,b;for(var i=0,s=h.shapeList.length;i<s;i++){c=h.shapeList[i]._seriesIndex,g=h.shapeList[i]._dataIndex,b=c+"_"+g;switch(h.shapeList[i].shape){case"sector":o[b]=h.shapeList[i];break;case"text":u[b]=h.shapeList[i];break;case"line":a[b]=h.shapeList[i]}}h.shapeList=[];var w;for(var i=0,s=f.length;i<s;i++){c=f[i]._seriesIndex;if(n[c]){g=f[i]._dataIndex+m[c],b=c+"_"+g,w=o[b];if(!w)continue;if(f[i].shape=="sector")w!="delete"?r.animate(f[i].id,"style").when(400,{startAngle:w.style.startAngle,endAngle:w.style.endAngle}).start():r.animate(f[i].id,"style").when(400,m[c]<0?{endAngle:f[i].style.startAngle}:{startAngle:f[i].style.endAngle}).start();else if(f[i].shape=="text"||f[i].shape=="line")if(w=="delete")r.delShape(f[i].id);else switch(f[i].shape){case"text":w=u[b],r.animate(f[i].id,"style").when(400,{x:w.style.x,y:w.style.y}).start();break;case"line":w=a[b],r.animate(f[i].id,"style").when(400,{xStart:w.style.xStart,yStart:w.style.yStart,xEnd:w.style.xEnd,yEnd:w.style.yEnd}).start()}}}h.shapeList=f}function O(){var e=h.query(i,"animationDuration"),t=h.query(i,"animationEasing"),n,s,o,u,f,l;for(var c=0,p=h.shapeList.length;c<p;c++)h.shapeList[c].shape=="sector"||h.shapeList[c].shape=="circle"||h.shapeList[c].shape=="ring"?(n=h.shapeList[c].style.x,s=h.shapeList[c].style.y,o=h.shapeList[c].style.r0,u=h.shapeList[c].style.r,r.modShape(h.shapeList[c].id,{rotation:[Math.PI*2,n,s],style:{r0:0,r:0}},!0),f=a.get(h.shapeList[c],"series"),l=a.get(h.shapeList[c],"dataIndex"),r.animate(h.shapeList[c].id,"style").when((h.query(f,"animationDuration")||e)+l*10,{r0:o,r:u}).start("QuinticOut"),r.animate(h.shapeList[c].id,"").when((h.query(f,"animationDuration")||e)+l*100,{rotation:[0,n,s]}).start(h.query(f,"animationEasing")||t)):h.shapeList[c]._mark||(l=h.shapeList[c]._dataIndex,r.modShape(h.shapeList[c].id,{scale:[0,0,n,s]},!0),r.animate(h.shapeList[c].id,"").when(e+l*100,{scale:[1,1,n,s]}).start("QuinticOut"));h.animationMark(e,t)}function M(e){if(!h.isClick||!e.target)return;var i,s=e.target,o=s.style,u=a.get(s,"seriesIndex"),l=a.get(s,"dataIndex");for(var c=0,d=h.shapeList.length;c<d;c++)if(h.shapeList[c].id==s.id){u=a.get(s,"seriesIndex"),l=a.get(s,"dataIndex");if(!o._hasSelected){var g=((o.startAngle+o.endAngle)/2).toFixed(2)-0;s.style._hasSelected=!0,m[u][l]=!0,s.style._x=s.style.x,s.style._y=s.style.y,i=h.query(p[u],"selectedOffset"),s.style.x+=f.cos(g,!0)*i,s.style.y-=f.sin(g,!0)*i}else s.style.x=s.style._x,s.style.y=s.style._y,s.style._hasSelected=!1,m[u][l]=!1;r.modShape(s.id,s)}else h.shapeList[c].style._hasSelected&&v=="single"&&(u=a.get(h.shapeList[c],"seriesIndex"),l=a.get(h.shapeList[c],"dataIndex"),h.shapeList[c].style.x=h.shapeList[c].style._x,h.shapeList[c].style.y=h.shapeList[c].style._y,h.shapeList[c].style._hasSelected=!1,m[u][l]=!1,r.modShape(h.shapeList[c].id,h.shapeList[c]));n.dispatch(t.EVENT.PIE_SELECTED,e.event,{selected:m}),r.refresh()}function _(t,n){if(!h.isDrop||!t.target)return;var r=t.target,o=t.dragged,u=a.get(r,"seriesIndex"),f=a.get(r,"dataIndex"),l,c=s.legend;if(f==-1)l={value:a.get(o,"value"),name:a.get(o,"name")},l.value<0&&(l.value=0),p[u].data.push(l),c&&c.add(l.name,o.style.color||o.style.strokeColor);else{var d=e("../util/accMath");l=p[u].data[f],c&&c.del(l.name),l.name+=i.nameConnector+a.get(o,"name"),l.value=d.accAdd(l.value,a.get(o,"value")),c&&c.add(l.name,o.style.color||o.style.strokeColor)}n.dragIn=n.dragIn||!0,h.isDrop=!1;return}function D(e,t){if(!h.isDragend||!e.target)return;var n=e.target,r=a.get(n,"seriesIndex"),i=a.get(n,"dataIndex");s.legend&&s.legend.del(p[r].data[i].name),p[r].data.splice(i,1),t.dragOut=!0,t.needRefresh=!0,h.isDragend=!1;return}var o=e("../component/base");o.call(this,t,r);var u=e("./calculableBase");u.call(this,r,i);var a=e("../util/ecData"),f=e("zrender/tool/math"),l=e("zrender/tool/util"),c=e("zrender/tool/color"),h=this;h.type=t.CHART_TYPE_PIE;var p,d=h.getZlevelBase(),v,m={};h.shapeHandler.onmouseover=function(e){var t=e.target,n=a.get(t,"seriesIndex"),i=a.get(t,"dataIndex"),s=a.get(t,"special"),o=t._lastAddRadius,u=t.style.startAngle,f=t.style.endAngle,l=t.highlightStyle.color,c=E(n,i,s,o,u,f,l,!0);c&&r.addHoverShape(c);var h=x(n,i,o,t.style.r0,t.style.r,u,f,l,!0);h&&r.addHoverShape(h)},h.reformOption=C,h.animation=O,h.init=k,h.refresh=L,h.addDataAnimation=A,h.onclick=M,h.ondrop=_,h.ondragend=D,k(i,s)}return e("../chart").define("pie",t),t}),r("_chart",["require","echarts/chart/scatter","echarts/chart/k","echarts/chart/radar","echarts/chart/chord","echarts/chart/force","echarts/chart/line","echarts/chart/bar","echarts/chart/pie"],function(e){e("echarts/chart/scatter"),e("echarts/chart/k"),e("echarts/chart/radar"),e("echarts/chart/chord"),e("echarts/chart/force"),e("echarts/chart/line"),e("echarts/chart/bar"),e("echarts/chart/pie")});var i=n("zrender");i.tool={color:n("zrender/tool/color"),math:n("zrender/tool/math"),util:n("zrender/tool/util"),vector:n("zrender/tool/vector"),area:n("zrender/tool/area"),event:n("zrender/tool/event")},i.animation={Animation:n("zrender/animation/animation"),Cip:n("zrender/animation/clip"),easing:n("zrender/animation/easing")};var s=n("echarts");s.config=n("echarts/config"),s.util={};var o=n("_chart");e.echarts=s,e.zrender=i})(window);