diff --git a/manager/main.go b/manager/main.go index f7c7adea028..91314b12fbd 100644 --- a/manager/main.go +++ b/manager/main.go @@ -33,6 +33,7 @@ const ( ) var workerType = flag.String("w", "kubernetes", "Worker Type") +var ingressHost = flag.String("i", "kube-cluster.example.net", "Ingress host for TensorBoard visualize") var dbIf kdb.VizierDBInterface type studyCh struct { @@ -148,7 +149,7 @@ func (s *server) trialIteration(conf *pb.StudyConfig, studyID string, sCh studyC return err } for _, t := range r.Trials { - err = tbif.SpawnTensorBoard(studyID, t.TrialId, namespace, conf.Mount) + err = tbif.SpawnTensorBoard(studyID, t.TrialId, conf.Name, namespace, conf.Mount, ingressHost) if err != nil { log.Printf("SpawnTB failed %v", err) return err diff --git a/manager/modelstore/modeldb.go b/manager/modelstore/modeldb.go index 691cd32a295..8b179f1e3d4 100644 --- a/manager/modelstore/modeldb.go +++ b/manager/modelstore/modeldb.go @@ -82,6 +82,11 @@ func (m *ModelDB) SaveModel(in *api.SaveModelRequest) error { hs := make([]*modeldb.HyperParameter, len(in.Model.Parameters)) for i := range in.Model.Parameters { hs[i] = &modeldb.HyperParameter{Name: in.Model.Parameters[i].Name, Value: in.Model.Parameters[i].Value} + if in.Model.Parameters[i].ParameterType == api.ParameterType_CATEGORICAL { + hs[i].Type = "String" + } else { + hs[i].Type = "Number" + } } dpath := "Unset" diff --git a/manager/visualise/tensorboard/tensorboardIF.go b/manager/visualise/tensorboard/tensorboardIF.go index c5e795e2d08..b74f24135fa 100644 --- a/manager/visualise/tensorboard/tensorboardIF.go +++ b/manager/visualise/tensorboard/tensorboardIF.go @@ -21,7 +21,7 @@ func initk8sCl() (*kubernetes.Clientset, error) { return kubernetes.NewForConfig(config) } -func SpawnTensorBoard(sid string, tid string, namespace string, mount *api.MountConf) error { +func SpawnTensorBoard(sid string, tid string, studyname string, namespace string, mount *api.MountConf, inhost *string) error { if mount == nil { return nil } @@ -57,7 +57,7 @@ func SpawnTensorBoard(sid string, tid string, namespace string, mount *api.Mount dep.Spec.Template.ObjectMeta.Labels["TrialID"] = tid dep.Spec.Template.ObjectMeta.Labels["StudyID"] = sid dep.Spec.Template.Spec.Containers[0].Args = append(dep.Spec.Template.Spec.Containers[0].Args, "--logdir="+mount.Path+"/logs/"+sid+"_"+tid) - dep.Spec.Template.Spec.Containers[0].Args = append(dep.Spec.Template.Spec.Containers[0].Args, "--path_prefix=/tensorboard/"+sid+"/"+tid) + dep.Spec.Template.Spec.Containers[0].Args = append(dep.Spec.Template.Spec.Containers[0].Args, "--path_prefix=/tensorboard/"+studyname+"/"+tid) dep.Spec.Template.Spec.Volumes = append(dep.Spec.Template.Spec.Volumes, apiv1.Volume{ Name: "pvc-mount-point", VolumeSource: apiv1.VolumeSource{ @@ -80,7 +80,8 @@ func SpawnTensorBoard(sid string, tid string, namespace string, mount *api.Mount svc.Spec.Selector["StudyID"] = sid ing.ObjectMeta.Name = tname - ing.Spec.Rules[0].IngressRuleValue.HTTP.Paths[0].Path = "/tensorboard/" + sid + "/" + tid + ing.Spec.Rules[0].Host = *inhost + ing.Spec.Rules[0].IngressRuleValue.HTTP.Paths[0].Path = "/tensorboard/" + studyname + "/" + tid ing.Spec.Rules[0].IngressRuleValue.HTTP.Paths[0].Backend.ServiceName = tname kcl, _ := initk8sCl() diff --git a/manifests/vizier/core/deployment.yaml b/manifests/vizier/core/deployment.yaml index bc728be6444..b9e844724d5 100644 --- a/manifests/vizier/core/deployment.yaml +++ b/manifests/vizier/core/deployment.yaml @@ -22,6 +22,8 @@ spec: args: - "-w" - "dlk" + - "-i" + - "k-cluster.example.net" ports: - name: api containerPort: 6789 diff --git a/modeldb/frontend/public/css/models.css b/modeldb/frontend/public/css/models.css index b9c9f59a122..138d8470e0a 100644 --- a/modeldb/frontend/public/css/models.css +++ b/modeldb/frontend/public/css/models.css @@ -964,35 +964,86 @@ li.json-kv.ui-draggable-dragging { border: 1px solid #D9E0E8; } -svg { +.ExpPara { + position:relative +} +.parcoords { + display: block; +} + +.parcoords svg, +.parcoords canvas { font: 10px sans-serif; + position: absolute; } -.background path { +.parcoords canvas { + opacity: 0.9; + pointer-events: none; +} + +.axis .title { + font-size: 10px; + transform: rotate(-21deg) translate(-5px,-6px); + fill: #222; +} + +.axis line, +.axis path { fill: none; - stroke: #ddd; - shape-rendering: crispEdges; + stroke: #ccc; + stroke-width: 1px; +} + +.axis .tick text { + fill: #222; + opacity: 0; + pointer-events: none; +} + +.axis.manufac_name .tick text, +.axis.food_group .tick text { + opacity: 1; } -.foreground path { +.axis:hover line, +.axis:hover path, +.axis.active line, +.axis.active path { fill: none; - stroke: steelblue; + stroke: #222; + stroke-width: 1px; +} + +.axis:hover .title { + font-weight: bold; +} + +.axis:hover .tick text { + opacity: 1; +} + +.axis.active .title { + font-weight: bold; +} + +.axis.active .tick text { + opacity: 1; + font-weight: bold; } .brush .extent { fill-opacity: .3; stroke: #fff; - shape-rendering: crispEdges; + stroke-width: 1px; } -.axis line, -.axis path { - fill: none; - stroke: #000; - shape-rendering: crispEdges; -} - -.axis text { - text-shadow: 0 1px 0 #fff, 1px 0 0 #fff, 0 -1px 0 #fff, -1px 0 0 #fff; - cursor: move; +pre { + width: 100%; + height: 300px; + margin: 6px 12px; + tab-size: 40; + font-size: 10px; + overflow: auto; + line-height: 14px; } diff --git a/modeldb/frontend/public/js/lib/d3.v5.min.js b/modeldb/frontend/public/js/lib/d3.v5.min.js new file mode 100644 index 00000000000..a75674c5a44 --- /dev/null +++ b/modeldb/frontend/public/js/lib/d3.v5.min.js @@ -0,0 +1,2 @@ +// https://d3js.org Version 5.1.0. Copyright 2018 Mike Bostock. +(function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n(t.d3=t.d3||{})})(this,function(t){"use strict";function n(t,n){return tn?1:t>=n?0:NaN}function e(t){return 1===t.length&&(t=function(t){return function(e,r){return n(t(e),r)}}(t)),{left:function(n,e,r,i){for(null==r&&(r=0),null==i&&(i=n.length);r>>1;t(n[o],e)<0?r=o+1:i=o}return r},right:function(n,e,r,i){for(null==r&&(r=0),null==i&&(i=n.length);r>>1;t(n[o],e)>0?i=o:r=o+1}return r}}}function r(t,n){return[t,n]}function i(t){return null===t?NaN:+t}function o(t,n){var e,r,o=t.length,a=0,u=-1,f=0,c=0;if(null==n)for(;++u1)return c/(a-1)}function a(t,n){var e=o(t,n);return e?Math.sqrt(e):e}function u(t,n){var e,r,i,o=t.length,a=-1;if(null==n){for(;++a=e)for(r=i=e;++ae&&(r=e),i=e)for(r=i=e;++ae&&(r=e),i0)return[t];if((r=n0)for(t=Math.ceil(t/a),n=Math.floor(n/a),o=new Array(i=Math.ceil(n-t+1));++u=0?(o>=es?10:o>=rs?5:o>=is?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(o>=es?10:o>=rs?5:o>=is?2:1)}function d(t,n,e){var r=Math.abs(n-t)/Math.max(0,e),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),o=r/i;return o>=es?i*=10:o>=rs?i*=5:o>=is&&(i*=2),n=1)return+e(t[r-1],r-1,t);var r,o=(r-1)*n,a=Math.floor(o),u=+e(t[a],a,t);return u+(+e(t[a+1],a+1,t)-u)*(o-a)}}function g(t,n){var e,r,i=t.length,o=-1;if(null==n){for(;++o=e)for(r=e;++or&&(r=e)}else for(;++o=e)for(r=e;++or&&(r=e);return r}function y(t){for(var n,e,r,i=t.length,o=-1,a=0;++o=0;)for(n=(r=t[i]).length;--n>=0;)e[--a]=r[n];return e}function _(t,n){var e,r,i=t.length,o=-1;if(null==n){for(;++o=e)for(r=e;++oe&&(r=e)}else for(;++o=e)for(r=e;++oe&&(r=e);return r}function b(t){if(!(i=t.length))return[];for(var n=-1,e=_(t,m),r=new Array(e);++n=0&&"xmlns"!==(n=t.slice(0,e))&&(t=t.slice(e+1)),ds.hasOwnProperty(n)?{space:ds[n],local:t}:t}function C(t){var n=k(t);return(n.local?function(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}:function(t){return function(){var n=this.ownerDocument,e=this.namespaceURI;return e===hs&&n.documentElement.namespaceURI===hs?n.createElement(t):n.createElementNS(e,t)}})(n)}function P(){}function z(t){return null==t?P:function(){return this.querySelector(t)}}function R(){return[]}function L(t){return null==t?R:function(){return this.querySelectorAll(t)}}function D(t){return new Array(t.length)}function U(t,n){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=n}function q(t,n,e,r,i,o){for(var a,u=0,f=n.length,c=o.length;un?1:t>=n?0:NaN}function B(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function F(t,n){return t.style.getPropertyValue(n)||B(t).getComputedStyle(t,null).getPropertyValue(n)}function I(t){return t.trim().split(/^|\s+/)}function j(t){return t.classList||new H(t)}function H(t){this._node=t,this._names=I(t.getAttribute("class")||"")}function X(t,n){for(var e=j(t),r=-1,i=n.length;++r>8&15|n>>4&240,n>>4&15|240&n,(15&n)<<4|15&n,1)):(n=Ns.exec(t))?Ct(parseInt(n[1],16)):(n=Ss.exec(t))?new Lt(n[1],n[2],n[3],1):(n=Es.exec(t))?new Lt(255*n[1]/100,255*n[2]/100,255*n[3]/100,1):(n=ks.exec(t))?Pt(n[1],n[2],n[3],n[4]):(n=Cs.exec(t))?Pt(255*n[1]/100,255*n[2]/100,255*n[3]/100,n[4]):(n=Ps.exec(t))?Dt(n[1],n[2]/100,n[3]/100,1):(n=zs.exec(t))?Dt(n[1],n[2]/100,n[3]/100,n[4]):Rs.hasOwnProperty(t)?Ct(Rs[t]):"transparent"===t?new Lt(NaN,NaN,NaN,0):null}function Ct(t){return new Lt(t>>16&255,t>>8&255,255&t,1)}function Pt(t,n,e,r){return r<=0&&(t=n=e=NaN),new Lt(t,n,e,r)}function zt(t){return t instanceof Et||(t=kt(t)),t?(t=t.rgb(),new Lt(t.r,t.g,t.b,t.opacity)):new Lt}function Rt(t,n,e,r){return 1===arguments.length?zt(t):new Lt(t,n,e,null==r?1:r)}function Lt(t,n,e,r){this.r=+t,this.g=+n,this.b=+e,this.opacity=+r}function Dt(t,n,e,r){return r<=0?t=n=e=NaN:e<=0||e>=1?t=n=NaN:n<=0&&(t=NaN),new qt(t,n,e,r)}function Ut(t,n,e,r){return 1===arguments.length?function(t){if(t instanceof qt)return new qt(t.h,t.s,t.l,t.opacity);if(t instanceof Et||(t=kt(t)),!t)return new qt;if(t instanceof qt)return t;var n=(t=t.rgb()).r/255,e=t.g/255,r=t.b/255,i=Math.min(n,e,r),o=Math.max(n,e,r),a=NaN,u=o-i,f=(o+i)/2;return u?(a=n===o?(e-r)/u+6*(e0&&f<1?0:a,new qt(a,u,f,t.opacity)}(t):new qt(t,n,e,null==r?1:r)}function qt(t,n,e,r){this.h=+t,this.s=+n,this.l=+e,this.opacity=+r}function Ot(t,n,e){return 255*(t<60?n+(e-n)*t/60:t<180?e:t<240?n+(e-n)*(240-t)/60:n)}function Yt(t){if(t instanceof Ft)return new Ft(t.l,t.a,t.b,t.opacity);if(t instanceof $t){if(isNaN(t.h))return new Ft(t.l,0,0,t.opacity);var n=t.h*Ls;return new Ft(t.l,Math.cos(n)*t.c,Math.sin(n)*t.c,t.opacity)}t instanceof Lt||(t=zt(t));var e,r,i=Xt(t.r),o=Xt(t.g),a=Xt(t.b),u=It((.2225045*i+.7168786*o+.0606169*a)/qs);return i===o&&o===a?e=r=u:(e=It((.4360747*i+.3850649*o+.1430804*a)/Us),r=It((.0139322*i+.0971045*o+.7141733*a)/Os)),new Ft(116*u-16,500*(e-u),200*(u-r),t.opacity)}function Bt(t,n,e,r){return 1===arguments.length?Yt(t):new Ft(t,n,e,null==r?1:r)}function Ft(t,n,e,r){this.l=+t,this.a=+n,this.b=+e,this.opacity=+r}function It(t){return t>Is?Math.pow(t,1/3):t/Fs+Ys}function jt(t){return t>Bs?t*t*t:Fs*(t-Ys)}function Ht(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Xt(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Gt(t){if(t instanceof $t)return new $t(t.h,t.c,t.l,t.opacity);if(t instanceof Ft||(t=Yt(t)),0===t.a&&0===t.b)return new $t(NaN,0,t.l,t.opacity);var n=Math.atan2(t.b,t.a)*Ds;return new $t(n<0?n+360:n,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function Vt(t,n,e,r){return 1===arguments.length?Gt(t):new $t(t,n,e,null==r?1:r)}function $t(t,n,e,r){this.h=+t,this.c=+n,this.l=+e,this.opacity=+r}function Wt(t,n,e,r){return 1===arguments.length?function(t){if(t instanceof Zt)return new Zt(t.h,t.s,t.l,t.opacity);t instanceof Lt||(t=zt(t));var n=t.r/255,e=t.g/255,r=t.b/255,i=($s*r+Gs*n-Vs*e)/($s+Gs-Vs),o=r-i,a=(Xs*(e-i)-js*o)/Hs,u=Math.sqrt(a*a+o*o)/(Xs*i*(1-i)),f=u?Math.atan2(a,o)*Ds-120:NaN;return new Zt(f<0?f+360:f,u,i,t.opacity)}(t):new Zt(t,n,e,null==r?1:r)}function Zt(t,n,e,r){this.h=+t,this.s=+n,this.l=+e,this.opacity=+r}function Qt(t,n,e,r,i){var o=t*t,a=o*t;return((1-3*t+3*o-a)*n+(4-6*o+3*a)*e+(1+3*t+3*o-3*a)*r+a*i)/6}function Jt(t){var n=t.length-1;return function(e){var r=e<=0?e=0:e>=1?(e=1,n-1):Math.floor(e*n),i=t[r],o=t[r+1],a=r>0?t[r-1]:2*i-o,u=r180||e<-180?e-360*Math.round(e/360):e):tn(isNaN(t)?n:t)}function rn(t){return 1==(t=+t)?on:function(n,e){return e-n?function(t,n,e){return t=Math.pow(t,e),n=Math.pow(n,e)-t,e=1/e,function(r){return Math.pow(t+r*n,e)}}(n,e,t):tn(isNaN(n)?e:n)}}function on(t,n){var e=n-t;return e?nn(t,e):tn(isNaN(t)?n:t)}function an(t){return function(n){var e,r,i=n.length,o=new Array(i),a=new Array(i),u=new Array(i);for(e=0;eo&&(i=n.slice(o,i),u[a]?u[a]+=i:u[++a]=i),(e=e[0])===(r=r[0])?u[a]?u[a]+=r:u[++a]=r:(u[++a]=null,f.push({i:a,x:cn(e,r)})),o=ol.lastIndex;return o180?n+=360:n-t>180&&(t+=360),o.push({i:e.push(i(e)+"rotate(",null,r)-2,x:cn(t,n)})):n&&e.push(i(e)+"rotate("+n+r)}(o.rotate,a.rotate,u,f),function(t,n,e,o){t!==n?o.push({i:e.push(i(e)+"skewX(",null,r)-2,x:cn(t,n)}):n&&e.push(i(e)+"skewX("+n+r)}(o.skewX,a.skewX,u,f),function(t,n,e,r,o,a){if(t!==e||n!==r){var u=o.push(i(o)+"scale(",null,",",null,")");a.push({i:u-4,x:cn(t,e)},{i:u-2,x:cn(n,r)})}else 1===e&&1===r||o.push(i(o)+"scale("+e+","+r+")")}(o.scaleX,o.scaleY,a.scaleX,a.scaleY,u,f),o=a=null,function(t){for(var n,e=-1,r=f.length;++e=0&&n._call.call(null,t),n=n._next;--ml}function Nn(){Tl=(Al=Sl.now())+Nl,ml=xl=0;try{Tn()}finally{ml=0,function(){var t,n,e=Ks,r=1/0;for(;e;)e._call?(r>e._time&&(r=e._time),t=e,e=e._next):(n=e._next,e._next=null,e=t?t._next=n:Ks=n);tl=t,En(r)}(),Tl=0}}function Sn(){var t=Sl.now(),n=t-Al;n>Ml&&(Nl-=n,Al=t)}function En(t){if(!ml){xl&&(xl=clearTimeout(xl));t-Tl>24?(t<1/0&&(xl=setTimeout(Nn,t-Sl.now()-Nl)),wl&&(wl=clearInterval(wl))):(wl||(Al=Sl.now(),wl=setInterval(Sn,Ml)),ml=1,El(Nn))}}function kn(t,n,e){var r=new Mn;return n=null==n?0:+n,r.restart(function(e){r.stop(),t(e+n)},n,e),r}function Cn(t,n,e,r,i,o){var a=t.__transition;if(a){if(e in a)return}else t.__transition={};(function(t,n,e){function r(f){var c,s,l,h;if(e.state!==zl)return o();for(c in u)if((h=u[c]).name===e.name){if(h.state===Ll)return kn(r);h.state===Dl?(h.state=ql,h.timer.stop(),h.on.call("interrupt",t,t.__data__,h.index,h.group),delete u[c]):+cPl)throw new Error("too late; already scheduled");return e}function zn(t,n){var e=Rn(t,n);if(e.state>Rl)throw new Error("too late; already started");return e}function Rn(t,n){var e=t.__transition;if(!e||!(e=e[n]))throw new Error("transition not found");return e}function Ln(t,n){var e,r,i,o=t.__transition,a=!0;if(o){n=null==n?null:n+"";for(i in o)(e=o[i]).name===n?(r=e.state>Rl&&e.stateMath.abs(t[1]-U[1])?x=!0:m=!0),U=t,b=!0,Wn(),o()}function o(){var t;switch(y=U[0]-D[0],_=U[1]-D[1],A){case hh:case lh:T&&(y=Math.max(C-u,Math.min(z-d,y)),c=u+y,p=d+y),N&&(_=Math.max(P-l,Math.min(R-v,_)),h=l+_,g=v+_);break;case dh:T<0?(y=Math.max(C-u,Math.min(z-u,y)),c=u+y,p=d):T>0&&(y=Math.max(C-d,Math.min(z-d,y)),c=u,p=d+y),N<0?(_=Math.max(P-l,Math.min(R-l,_)),h=l+_,g=v):N>0&&(_=Math.max(P-v,Math.min(R-v,_)),h=l,g=v+_);break;case ph:T&&(c=Math.max(C,Math.min(z,u-y*T)),p=Math.max(C,Math.min(z,d+y*T))),N&&(h=Math.max(P,Math.min(R,l-_*N)),g=Math.max(P,Math.min(R,v+_*N)))}p0&&(u=c-y),N<0?v=g-_:N>0&&(l=h-_),A=hh,Y.attr("cursor",_h.selection),o());break;default:return}Wn()},!0).on("keyup.brush",function(){switch(t.event.keyCode){case 16:L&&(m=x=L=!1,o());break;case 18:A===ph&&(T<0?d=p:T>0&&(u=c),N<0?v=g:N>0&&(l=h),A=dh,o());break;case 32:A===hh&&(t.event.altKey?(T&&(d=p-y*T,u=c+y*T),N&&(v=g-_*N,l=h+_*N),A=ph):(T<0?d=p:T>0&&(u=c),N<0?v=g:N>0&&(l=h),A=dh),Y.attr("cursor",_h[M]),o());break;default:return}Wn()},!0).on("mousemove.brush",e,!0).on("mouseup.brush",a,!0);_t(t.event.view)}$n(),Ln(w),r.call(w),q.start()}}function u(){var t=this.__brush||{selection:null};return t.extent=c.apply(this,arguments),t.dim=n,t}var f,c=Jn,s=Qn,l=N(e,"start","brush","end"),h=6;return e.move=function(t,e){t.selection?t.on("start.brush",function(){i(this,arguments).beforestart().start()}).on("interrupt.brush end.brush",function(){i(this,arguments).end()}).tween("brush",function(){function t(t){a.selection=1===t&&te(c)?null:s(t),r.call(o),u.brush()}var o=this,a=o.__brush,u=i(o,arguments),f=a.selection,c=n.input("function"==typeof e?e.apply(this,arguments):e,a.extent),s=hn(f,c);return f&&c?t:t(1)}):t.each(function(){var t=arguments,o=this.__brush,a=n.input("function"==typeof e?e.apply(this,t):e,o.extent),u=i(this,t).beforestart();Ln(this),o.selection=null==a||te(a)?null:a,r.call(this),u.start().brush().end()})},o.prototype={beforestart:function(){return 1==++this.active&&(this.state.emitter=this,this.starting=!0),this},start:function(){return this.starting&&(this.starting=!1,this.emit("start")),this},brush:function(){return this.emit("brush"),this},end:function(){return 0==--this.active&&(delete this.state.emitter,this.emit("end")),this},emit:function(t){ot(new function(t,n,e){this.target=t,this.type=n,this.selection=e}(e,t,n.output(this.state.selection)),l.apply,l,[t,this.that,this.args])}},e.extent=function(t){return arguments.length?(c="function"==typeof t?t:Vn([[+t[0][0],+t[0][1]],[+t[1][0],+t[1][1]]]),e):c},e.filter=function(t){return arguments.length?(s="function"==typeof t?t:Vn(!!t),e):s},e.handleSize=function(t){return arguments.length?(h=+t,e):h},e.on=function(){var t=l.on.apply(l,arguments);return t===l?e:t},e}function ee(t){return function(){return t}}function re(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function ie(){return new re}function oe(t){return t.source}function ae(t){return t.target}function ue(t){return t.radius}function fe(t){return t.startAngle}function ce(t){return t.endAngle}function se(){}function le(t,n){var e=new se;if(t instanceof se)t.each(function(t,n){e.set(n,t)});else if(Array.isArray(t)){var r,i=-1,o=t.length;if(null==n)for(;++ir!=d>r&&e<(h-c)*(r-s)/(d-s)+c&&(i=-i)}return i}(t,n[r]))return e;return 0}function xe(){}function we(){function t(t){var e=a(t);if(Array.isArray(e))e=e.slice().sort(_e);else{var r=u(t),i=r[0],o=r[1];e=d(i,o,e),e=s(Math.floor(i/e)*e,Math.floor(o/e)*e,e)}return e.map(function(e){return n(t,e)})}function n(t,n){var r=[],a=[];return function(t,n,r){function a(t){var n,i,o=[t[0][0]+u,t[0][1]+f],a=[t[1][0]+u,t[1][1]+f],c=e(o),s=e(a);(n=p[c])?(i=d[s])?(delete p[n.end],delete d[i.start],n===i?(n.ring.push(a),r(n.ring)):d[n.start]=p[i.end]={start:n.start,end:i.end,ring:n.ring.concat(i.ring)}):(delete p[n.end],n.ring.push(a),p[n.end=s]=n):(n=d[s])?(i=p[c])?(delete d[n.start],delete p[i.end],n===i?(n.ring.push(a),r(n.ring)):d[i.start]=p[n.end]={start:i.start,end:n.end,ring:i.ring.concat(n.ring)}):(delete d[n.start],n.ring.unshift(o),d[n.start=c]=n):d[c]=p[s]={start:c,end:s,ring:[o,a]}}var u,f,c,s,l,h,d=new Array,p=new Array;u=f=-1,s=t[0]>=n,Dh[s<<1].forEach(a);for(;++u=n,Dh[c|s<<1].forEach(a);Dh[s<<0].forEach(a);for(;++f=n,l=t[f*i]>=n,Dh[s<<1|l<<2].forEach(a);++u=n,h=l,l=t[f*i+u+1]>=n,Dh[c|s<<1|l<<2|h<<3].forEach(a);Dh[s|l<<3].forEach(a)}u=-1,l=t[f*i]>=n,Dh[l<<2].forEach(a);for(;++u=n,Dh[l<<2|h<<3].forEach(a);Dh[l<<3].forEach(a)}(t,n,function(e){f(e,t,n),function(t){for(var n=0,e=t.length,r=t[e-1][1]*t[0][0]-t[e-1][0]*t[0][1];++n0?r.push([e]):a.push(e)}),a.forEach(function(t){for(var n,e=0,i=r.length;e0&&a0&&u0&&r>0))throw new Error("invalid size");return i=e,o=r,t},t.thresholds=function(n){return arguments.length?(a="function"==typeof n?n:Array.isArray(n)?be(Lh.call(n)):be(n),t):a},t.smooth=function(n){return arguments.length?(f=n?r:xe,t):f===r},t}function Me(t,n,e){for(var r=t.width,i=t.height,o=1+(e<<1),a=0;a=e&&(u>=o&&(f-=t.data[u-o+a*r]),n.data[u-e+a*r]=f/Math.min(u+1,r-1+o-u,o))}function Ae(t,n,e){for(var r=t.width,i=t.height,o=1+(e<<1),a=0;a=e&&(u>=o&&(f-=t.data[a+(u-o)*r]),n.data[a+(u-e)*r]=f/Math.min(u+1,i-1+o-u,o))}function Te(t){return t[0]}function Ne(t){return t[1]}function Se(t){return new Function("d","return {"+t.map(function(t,n){return JSON.stringify(t)+": d["+n+"]"}).join(",")+"}")}function Ee(t){function n(t,n){function e(){if(c)return qh;if(s)return s=!1,Uh;var n,e,r=u;if(t.charCodeAt(r)===Oh){for(;u++=a?c=!0:(e=t.charCodeAt(u++))===Yh?s=!0:e===Bh&&(s=!0,t.charCodeAt(u)===Yh&&++u),t.slice(r+1,n-1).replace(/""/g,'"')}for(;u=(o=(v+y)/2))?v=o:y=o,(s=e>=(a=(g+_)/2))?g=a:_=a,i=d,!(d=d[l=s<<1|c]))return i[l]=p,t;if(u=+t._x.call(null,d.data),f=+t._y.call(null,d.data),n===u&&e===f)return p.next=d,i?i[l]=p:t._root=p,t;do{i=i?i[l]=new Array(4):t._root=new Array(4),(c=n>=(o=(v+y)/2))?v=o:y=o,(s=e>=(a=(g+_)/2))?g=a:_=a}while((l=s<<1|c)==(h=(f>=a)<<1|u>=o));return i[h]=d,i[l]=p,t}function Ye(t,n,e,r,i){this.node=t,this.x0=n,this.y0=e,this.x1=r,this.y1=i}function Be(t){return t[0]}function Fe(t){return t[1]}function Ie(t,n,e){var r=new je(null==n?Be:n,null==e?Fe:e,NaN,NaN,NaN,NaN);return null==t?r:r.addAll(t)}function je(t,n,e,r,i,o){this._x=t,this._y=n,this._x0=e,this._y0=r,this._x1=i,this._y1=o,this._root=void 0}function He(t){for(var n={data:t.data},e=n;t=t.next;)e=e.next={data:t.data};return n}function Xe(t){return t.x+t.vx}function Ge(t){return t.y+t.vy}function Ve(t){return t.index}function $e(t,n){var e=t.get(n);if(!e)throw new Error("missing: "+n);return e}function We(t){return t.x}function Ze(t){return t.y}function Qe(t,n){if((e=(t=n?t.toExponential(n-1):t.toExponential()).indexOf("e"))<0)return null;var e,r=t.slice(0,e);return[r.length>1?r[0]+r.slice(2):r,+t.slice(e+1)]}function Je(t){return(t=Qe(Math.abs(t)))?t[1]:NaN}function Ke(t,n){var e=Qe(t,n);if(!e)return t+"";var r=e[0],i=e[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}function tr(t){return new nr(t)}function nr(t){if(!(n=ud.exec(t)))throw new Error("invalid format: "+t);var n,e=n[1]||" ",r=n[2]||">",i=n[3]||"-",o=n[4]||"",a=!!n[5],u=n[6]&&+n[6],f=!!n[7],c=n[8]&&+n[8].slice(1),s=n[9]||"";"n"===s?(f=!0,s="g"):ad[s]||(s=""),(a||"0"===e&&"="===r)&&(a=!0,e="0",r="="),this.fill=e,this.align=r,this.sign=i,this.symbol=o,this.zero=a,this.width=u,this.comma=f,this.precision=c,this.type=s}function er(t){return t}function rr(t){function n(t){function n(t){var n,r,a,s=g,m=y;if("c"===v)m=_(t)+m,t="";else{var x=(t=+t)<0;if(t=_(Math.abs(t),p),x&&0==+t&&(x=!1),s=(x?"("===c?c:"-":"-"===c||"("===c?"":c)+s,m=("s"===v?cd[8+rd/3]:"")+m+(x&&"("===c?")":""),b)for(n=-1,r=t.length;++n(a=t.charCodeAt(n))||a>57){m=(46===a?i+t.slice(n+1):t.slice(n))+m,t=t.slice(0,n);break}}d&&!l&&(t=e(t,1/0));var w=s.length+t.length+m.length,M=w>1)+s+t+m+M.slice(w);break;default:t=M+s+t+m}return o(t)}var u=(t=tr(t)).fill,f=t.align,c=t.sign,s=t.symbol,l=t.zero,h=t.width,d=t.comma,p=t.precision,v=t.type,g="$"===s?r[0]:"#"===s&&/[boxX]/.test(v)?"0"+v.toLowerCase():"",y="$"===s?r[1]:/[%p]/.test(v)?a:"",_=ad[v],b=!v||/[defgprs%]/.test(v);return p=null==p?v?6:12:/[gprs]/.test(v)?Math.max(1,Math.min(21,p)):Math.max(0,Math.min(20,p)),n.toString=function(){return t+""},n}var e=t.grouping&&t.thousands?function(t,n){return function(e,r){for(var i=e.length,o=[],a=0,u=t[0],f=0;i>0&&u>0&&(f+u+1>r&&(u=Math.max(1,r-f)),o.push(e.substring(i-=u,i+u)),!((f+=u+1)>r));)u=t[a=(a+1)%t.length];return o.reverse().join(n)}}(t.grouping,t.thousands):er,r=t.currency,i=t.decimal,o=t.numerals?function(t){return function(n){return n.replace(/[0-9]/g,function(n){return t[+n]})}}(t.numerals):er,a=t.percent||"%";return{format:n,formatPrefix:function(t,e){var r=n((t=tr(t),t.type="f",t)),i=3*Math.max(-8,Math.min(8,Math.floor(Je(e)/3))),o=Math.pow(10,-i),a=cd[8+i/3];return function(t){return r(o*t)+a}}}}function ir(n){return fd=rr(n),t.format=fd.format,t.formatPrefix=fd.formatPrefix,fd}function or(t){return Math.max(0,-Je(Math.abs(t)))}function ar(t,n){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Je(n)/3)))-Je(Math.abs(t)))}function ur(t,n){return t=Math.abs(t),n=Math.abs(n)-t,Math.max(0,Je(n)-Je(t))+1}function fr(){return new cr}function cr(){this.reset()}function sr(t,n,e){var r=t.s=n+e,i=r-n,o=r-i;t.t=n-o+(e-i)}function lr(t){return t>1?0:t<-1?Hd:Math.acos(t)}function hr(t){return t>1?Xd:t<-1?-Xd:Math.asin(t)}function dr(t){return(t=ip(t/2))*t}function pr(){}function vr(t,n){t&&cp.hasOwnProperty(t.type)&&cp[t.type](t,n)}function gr(t,n,e){var r,i=-1,o=t.length-e;for(n.lineStart();++i=0?1:-1,i=r*e,o=Kd(n),a=ip(n),u=pd*a,f=dd*o+u*Kd(i),c=u*r*ip(i);sp.add(Jd(c,f)),hd=t,dd=o,pd=a}function Mr(t){return[Jd(t[1],t[0]),hr(t[2])]}function Ar(t){var n=t[0],e=t[1],r=Kd(e);return[r*Kd(n),r*ip(n),ip(e)]}function Tr(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]}function Nr(t,n){return[t[1]*n[2]-t[2]*n[1],t[2]*n[0]-t[0]*n[2],t[0]*n[1]-t[1]*n[0]]}function Sr(t,n){t[0]+=n[0],t[1]+=n[1],t[2]+=n[2]}function Er(t,n){return[t[0]*n,t[1]*n,t[2]*n]}function kr(t){var n=ap(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=n,t[1]/=n,t[2]/=n}function Cr(t,n){Md.push(Ad=[vd=t,yd=t]),n_d&&(_d=n)}function Pr(t,n){var e=Ar([t*Wd,n*Wd]);if(wd){var r=Nr(wd,e),i=Nr([r[1],-r[0],0],r);kr(i),i=Mr(i);var o,a=t-bd,u=a>0?1:-1,f=i[0]*$d*u,c=Zd(a)>180;c^(u*bd_d&&(_d=o):(f=(f+360)%360-180,c^(u*bd_d&&(_d=n))),c?tqr(vd,yd)&&(yd=t):qr(t,yd)>qr(vd,yd)&&(vd=t):yd>=vd?(tyd&&(yd=t)):t>bd?qr(vd,t)>qr(vd,yd)&&(yd=t):qr(t,yd)>qr(vd,yd)&&(vd=t)}else Md.push(Ad=[vd=t,yd=t]);n_d&&(_d=n),wd=e,bd=t}function zr(){pp.point=Pr}function Rr(){Ad[0]=vd,Ad[1]=yd,pp.point=Cr,wd=null}function Lr(t,n){if(wd){var e=t-bd;dp.add(Zd(e)>180?e+(e>0?360:-360):e)}else md=t,xd=n;hp.point(t,n),Pr(t,n)}function Dr(){hp.lineStart()}function Ur(){Lr(md,xd),hp.lineEnd(),Zd(dp)>Id&&(vd=-(yd=180)),Ad[0]=vd,Ad[1]=yd,wd=null}function qr(t,n){return(n-=t)<0?n+360:n}function Or(t,n){return t[0]-n[0]}function Yr(t,n){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:nHd?t-Vd:t<-Hd?t+Vd:t,n]}function Kr(t,n,e){return(t%=Vd)?n||e?Qr(ni(t),ei(n,e)):ni(t):n||e?ei(n,e):Jr}function ti(t){return function(n,e){return n+=t,[n>Hd?n-Vd:n<-Hd?n+Vd:n,e]}}function ni(t){var n=ti(t);return n.invert=ti(-t),n}function ei(t,n){function e(t,n){var e=Kd(n),u=Kd(t)*e,f=ip(t)*e,c=ip(n),s=c*r+u*i;return[Jd(f*o-s*a,u*r-c*i),hr(s*o+f*a)]}var r=Kd(t),i=ip(t),o=Kd(n),a=ip(n);return e.invert=function(t,n){var e=Kd(n),u=Kd(t)*e,f=ip(t)*e,c=ip(n),s=c*o-f*a;return[Jd(f*o+c*a,u*r+s*i),hr(s*r-u*i)]},e}function ri(t){function n(n){return n=t(n[0]*Wd,n[1]*Wd),n[0]*=$d,n[1]*=$d,n}return t=Kr(t[0]*Wd,t[1]*Wd,t.length>2?t[2]*Wd:0),n.invert=function(n){return n=t.invert(n[0]*Wd,n[1]*Wd),n[0]*=$d,n[1]*=$d,n},n}function ii(t,n,e,r,i,o){if(e){var a=Kd(n),u=ip(n),f=r*e;null==i?(i=n+r*Vd,o=n-f/2):(i=oi(a,i),o=oi(a,o),(r>0?io)&&(i+=r*Vd));for(var c,s=i;r>0?s>o:s1&&n.push(n.pop().concat(n.shift()))},result:function(){var e=n;return n=[],t=null,e}}}function ui(t,n){return Zd(t[0]-n[0])=0;--o)i.point((s=c[o])[0],s[1]);else r(h.x,h.p.x,-1,i);h=h.p}c=(h=h.o).z,d=!d}while(!h.v);i.lineEnd()}}}function si(t){if(n=t.length){for(var n,e,r=0,i=t[0];++r=0?1:-1,T=A*M,N=T>Hd,S=v*x;if(Sp.add(Jd(S*A*ip(T),g*w+S*Kd(T))),a+=N?M+A*Vd:M,N^d>=e^b>=e){var E=Nr(Ar(h),Ar(_));kr(E);var k=Nr(o,E);kr(k);var C=(N^M>=0?-1:1)*hr(k[2]);(r>C||r===C&&(E[0]||E[1]))&&(u+=N^M>=0?1:-1)}}return(a<-Id||a0){for(b||(i.polygonStart(),b=!0),i.lineStart(),t=0;t1&&2&o&&a.push(a.pop().concat(a.shift())),d.push(a.filter(di))}var h,d,p,v=n(i),g=ai(),_=n(g),b=!1,m={point:o,lineStart:u,lineEnd:f,polygonStart:function(){m.point=c,m.lineStart=s,m.lineEnd=l,d=[],h=[]},polygonEnd:function(){m.point=o,m.lineStart=u,m.lineEnd=f,d=y(d);var t=li(h,r);d.length?(b||(i.polygonStart(),b=!0),ci(d,pi,t,e,i)):t&&(b||(i.polygonStart(),b=!0),i.lineStart(),e(null,null,1,i),i.lineEnd()),b&&(i.polygonEnd(),b=!1),d=h=null},sphere:function(){i.polygonStart(),i.lineStart(),e(null,null,1,i),i.lineEnd(),i.polygonEnd()}};return m}}function di(t){return t.length>1}function pi(t,n){return((t=t.x)[0]<0?t[1]-Xd-Id:Xd-t[1])-((n=n.x)[0]<0?n[1]-Xd-Id:Xd-n[1])}function vi(t){function n(t,n){return Kd(t)*Kd(n)>i}function e(t,n,e){var r=[1,0,0],o=Nr(Ar(t),Ar(n)),a=Tr(o,o),u=o[0],f=a-u*u;if(!f)return!e&&t;var c=i*a/f,s=-i*u/f,l=Nr(r,o),h=Er(r,c);Sr(h,Er(o,s));var d=l,p=Tr(h,d),v=Tr(d,d),g=p*p-v*(Tr(h,h)-1);if(!(g<0)){var y=ap(g),_=Er(d,(-p-y)/v);if(Sr(_,h),_=Mr(_),!e)return _;var b,m=t[0],x=n[0],w=t[1],M=n[1];x0^_[1]<(Zd(_[0]-m)Hd^(m<=_[0]&&_[0]<=x)){var N=Er(d,(-p+y)/v);return Sr(N,h),[_,Mr(N)]}}}function r(n,e){var r=a?t:Hd-t,i=0;return n<-r?i|=1:n>r&&(i|=2),e<-r?i|=4:e>r&&(i|=8),i}var i=Kd(t),o=6*Wd,a=i>0,u=Zd(i)>Id;return hi(n,function(t){var i,o,f,c,s;return{lineStart:function(){c=f=!1,s=1},point:function(l,h){var d,p=[l,h],v=n(l,h),g=a?v?0:r(l,h):v?r(l+(l<0?Hd:-Hd),h):0;if(!i&&(c=f=v)&&t.lineStart(),v!==f&&(!(d=e(i,p))||ui(i,d)||ui(p,d))&&(p[0]+=Id,p[1]+=Id,v=n(p[0],p[1])),v!==f)s=0,v?(t.lineStart(),d=e(p,i),t.point(d[0],d[1])):(d=e(i,p),t.point(d[0],d[1]),t.lineEnd()),i=d;else if(u&&i&&a^v){var y;g&o||!(y=e(p,i,!0))||(s=0,a?(t.lineStart(),t.point(y[0][0],y[0][1]),t.point(y[1][0],y[1][1]),t.lineEnd()):(t.point(y[1][0],y[1][1]),t.lineEnd(),t.lineStart(),t.point(y[0][0],y[0][1])))}!v||i&&ui(i,p)||t.point(p[0],p[1]),i=p,f=v,o=g},lineEnd:function(){f&&t.lineEnd(),i=null},clean:function(){return s|(c&&f)<<1}}},function(n,e,r,i){ii(i,t,o,r,n,e)},a?[0,-t]:[-Hd,t-Hd])}function gi(t,n,e,r){function i(i,o){return t<=i&&i<=e&&n<=o&&o<=r}function o(i,o,u,c){var s=0,l=0;if(null==i||(s=a(i,u))!==(l=a(o,u))||f(i,o)<0^u>0)do{c.point(0===s||3===s?t:e,s>1?r:n)}while((s=(s+u+4)%4)!==l);else c.point(o[0],o[1])}function a(r,i){return Zd(r[0]-t)0?0:3:Zd(r[0]-e)0?2:1:Zd(r[1]-n)0?1:0:i>0?3:2}function u(t,n){return f(t.x,n.x)}function f(t,n){var e=a(t,1),r=a(n,1);return e!==r?e-r:0===e?n[1]-t[1]:1===e?t[0]-n[0]:2===e?t[1]-n[1]:n[0]-t[0]}return function(a){function f(t,n){i(t,n)&&w.point(t,n)}function c(o,a){var u=i(o,a);if(l&&h.push([o,a]),m)d=o,p=a,v=u,m=!1,u&&(w.lineStart(),w.point(o,a));else if(u&&b)w.point(o,a);else{var f=[g=Math.max(Cp,Math.min(kp,g)),_=Math.max(Cp,Math.min(kp,_))],c=[o=Math.max(Cp,Math.min(kp,o)),a=Math.max(Cp,Math.min(kp,a))];!function(t,n,e,r,i,o){var a,u=t[0],f=t[1],c=0,s=1,l=n[0]-u,h=n[1]-f;if(a=e-u,l||!(a>0)){if(a/=l,l<0){if(a0){if(a>s)return;a>c&&(c=a)}if(a=i-u,l||!(a<0)){if(a/=l,l<0){if(a>s)return;a>c&&(c=a)}else if(l>0){if(a0)){if(a/=h,h<0){if(a0){if(a>s)return;a>c&&(c=a)}if(a=o-f,h||!(a<0)){if(a/=h,h<0){if(a>s)return;a>c&&(c=a)}else if(h>0){if(a0&&(t[0]=u+c*l,t[1]=f+c*h),s<1&&(n[0]=u+s*l,n[1]=f+s*h),!0}}}}}(f,c,t,n,e,r)?u&&(w.lineStart(),w.point(o,a),x=!1):(b||(w.lineStart(),w.point(f[0],f[1])),w.point(c[0],c[1]),u||w.lineEnd(),x=!1)}g=o,_=a,b=u}var s,l,h,d,p,v,g,_,b,m,x,w=a,M=ai(),A={point:f,lineStart:function(){A.point=c,l&&l.push(h=[]),m=!0,b=!1,g=_=NaN},lineEnd:function(){s&&(c(d,p),v&&b&&M.rejoin(),s.push(M.result())),A.point=f,b&&w.lineEnd()},polygonStart:function(){w=M,s=[],l=[],x=!0},polygonEnd:function(){var n=function(){for(var n=0,e=0,i=l.length;er&&(h-o)*(r-a)>(d-a)*(t-o)&&++n:d<=r&&(h-o)*(r-a)<(d-a)*(t-o)&&--n;return n}(),e=x&&n,i=(s=y(s)).length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),o(null,null,1,a),a.lineEnd()),i&&ci(s,u,n,o,a),a.polygonEnd()),w=a,s=l=h=null}};return A}}function yi(){zp.point=zp.lineEnd=pr}function _i(t,n){gp=t*=Wd,yp=ip(n*=Wd),_p=Kd(n),zp.point=bi}function bi(t,n){t*=Wd;var e=ip(n*=Wd),r=Kd(n),i=Zd(t-gp),o=Kd(i),a=r*ip(i),u=_p*e-yp*r*o,f=yp*e+_p*r*o;Pp.add(Jd(ap(a*a+u*u),f)),gp=t,yp=e,_p=r}function mi(t){return Pp.reset(),_r(t,zp),+Pp}function xi(t,n){return Rp[0]=t,Rp[1]=n,mi(Lp)}function wi(t,n){return!(!t||!Up.hasOwnProperty(t.type))&&Up[t.type](t,n)}function Mi(t,n){return 0===xi(t,n)}function Ai(t,n){var e=xi(t[0],t[1]);return xi(t[0],n)+xi(n,t[1])<=e+Id}function Ti(t,n){return!!li(t.map(Ni),Si(n))}function Ni(t){return(t=t.map(Si)).pop(),t}function Si(t){return[t[0]*Wd,t[1]*Wd]}function Ei(t,n,e){var r=s(t,n-Id,e).concat(n);return function(t){return r.map(function(n){return[t,n]})}}function ki(t,n,e){var r=s(t,n-Id,e).concat(n);return function(t){return r.map(function(n){return[n,t]})}}function Ci(){function t(){return{type:"MultiLineString",coordinates:n()}}function n(){return s(tp(o/y)*y,i,y).map(d).concat(s(tp(c/_)*_,f,_).map(p)).concat(s(tp(r/v)*v,e,v).filter(function(t){return Zd(t%y)>Id}).map(l)).concat(s(tp(u/g)*g,a,g).filter(function(t){return Zd(t%_)>Id}).map(h))}var e,r,i,o,a,u,f,c,l,h,d,p,v=10,g=v,y=90,_=360,b=2.5;return t.lines=function(){return n().map(function(t){return{type:"LineString",coordinates:t}})},t.outline=function(){return{type:"Polygon",coordinates:[d(o).concat(p(f).slice(1),d(i).reverse().slice(1),p(c).reverse().slice(1))]}},t.extent=function(n){return arguments.length?t.extentMajor(n).extentMinor(n):t.extentMinor()},t.extentMajor=function(n){return arguments.length?(o=+n[0][0],i=+n[1][0],c=+n[0][1],f=+n[1][1],o>i&&(n=o,o=i,i=n),c>f&&(n=c,c=f,f=n),t.precision(b)):[[o,c],[i,f]]},t.extentMinor=function(n){return arguments.length?(r=+n[0][0],e=+n[1][0],u=+n[0][1],a=+n[1][1],r>e&&(n=r,r=e,e=n),u>a&&(n=u,u=a,a=n),t.precision(b)):[[r,u],[e,a]]},t.step=function(n){return arguments.length?t.stepMajor(n).stepMinor(n):t.stepMinor()},t.stepMajor=function(n){return arguments.length?(y=+n[0],_=+n[1],t):[y,_]},t.stepMinor=function(n){return arguments.length?(v=+n[0],g=+n[1],t):[v,g]},t.precision=function(n){return arguments.length?(b=+n,l=Ei(u,a,90),h=ki(r,e,b),d=Ei(c,f,90),p=ki(o,i,b),t):b},t.extentMajor([[-180,-90+Id],[180,90-Id]]).extentMinor([[-180,-80-Id],[180,80+Id]])}function Pi(t){return t}function zi(){Yp.point=Ri}function Ri(t,n){Yp.point=Li,bp=xp=t,mp=wp=n}function Li(t,n){Op.add(wp*t-xp*n),xp=t,wp=n}function Di(){Li(bp,mp)}function Ui(t,n){Xp+=t,Gp+=n,++Vp}function qi(){tv.point=Oi}function Oi(t,n){tv.point=Yi,Ui(Tp=t,Np=n)}function Yi(t,n){var e=t-Tp,r=n-Np,i=ap(e*e+r*r);$p+=i*(Tp+t)/2,Wp+=i*(Np+n)/2,Zp+=i,Ui(Tp=t,Np=n)}function Bi(){tv.point=Ui}function Fi(){tv.point=ji}function Ii(){Hi(Mp,Ap)}function ji(t,n){tv.point=Hi,Ui(Mp=Tp=t,Ap=Np=n)}function Hi(t,n){var e=t-Tp,r=n-Np,i=ap(e*e+r*r);$p+=i*(Tp+t)/2,Wp+=i*(Np+n)/2,Zp+=i,Qp+=(i=Np*t-Tp*n)*(Tp+t),Jp+=i*(Np+n),Kp+=3*i,Ui(Tp=t,Np=n)}function Xi(t){this._context=t}function Gi(t,n){uv.point=Vi,ev=iv=t,rv=ov=n}function Vi(t,n){iv-=t,ov-=n,av.add(ap(iv*iv+ov*ov)),iv=t,ov=n}function $i(){this._string=[]}function Wi(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}function Zi(t){return function(n){var e=new Qi;for(var r in t)e[r]=t[r];return e.stream=n,e}}function Qi(){}function Ji(t,n,e){var r=t.clipExtent&&t.clipExtent();return t.scale(150).translate([0,0]),null!=r&&t.clipExtent(null),_r(e,t.stream(Hp)),n(Hp.result()),null!=r&&t.clipExtent(r),t}function Ki(t,n,e){return Ji(t,function(e){var r=n[1][0]-n[0][0],i=n[1][1]-n[0][1],o=Math.min(r/(e[1][0]-e[0][0]),i/(e[1][1]-e[0][1])),a=+n[0][0]+(r-o*(e[1][0]+e[0][0]))/2,u=+n[0][1]+(i-o*(e[1][1]+e[0][1]))/2;t.scale(150*o).translate([a,u])},e)}function to(t,n,e){return Ki(t,[[0,0],n],e)}function no(t,n,e){return Ji(t,function(e){var r=+n,i=r/(e[1][0]-e[0][0]),o=(r-i*(e[1][0]+e[0][0]))/2,a=-i*e[0][1];t.scale(150*i).translate([o,a])},e)}function eo(t,n,e){return Ji(t,function(e){var r=+n,i=r/(e[1][1]-e[0][1]),o=-i*e[0][0],a=(r-i*(e[1][1]+e[0][1]))/2;t.scale(150*i).translate([o,a])},e)}function ro(t,n){return+n?function(t,n){function e(r,i,o,a,u,f,c,s,l,h,d,p,v,g){var y=c-r,_=s-i,b=y*y+_*_;if(b>4*n&&v--){var m=a+h,x=u+d,w=f+p,M=ap(m*m+x*x+w*w),A=hr(w/=M),T=Zd(Zd(w)-1)n||Zd((y*k+_*C)/b-.5)>.3||a*h+u*d+f*p2?t[2]%360*Wd:0,e()):[b*$d,m*$d,x*$d]},n.angle=function(t){return arguments.length?(w=t%360*Wd,e()):w*$d},n.precision=function(t){return arguments.length?(c=ro(s,S=t*t),r()):ap(S)},n.fitExtent=function(t,e){return Ki(n,t,e)},n.fitSize=function(t,e){return to(n,t,e)},n.fitWidth=function(t,e){return no(n,t,e)},n.fitHeight=function(t,e){return eo(n,t,e)},function(){return i=t.apply(this,arguments),n.invert=i.invert&&function(t){return(t=l.invert(t[0],t[1]))&&[t[0]*$d,t[1]*$d]},e()}}function uo(t){var n=0,e=Hd/3,r=ao(t),i=r(n,e);return i.parallels=function(t){return arguments.length?r(n=t[0]*Wd,e=t[1]*Wd):[n*$d,e*$d]},i}function fo(t,n){function e(t,n){var e=ap(o-2*i*ip(n))/i;return[e*ip(t*=i),a-e*Kd(t)]}var r=ip(t),i=(r+ip(n))/2;if(Zd(i)0?n<-Xd+Id&&(n=-Xd+Id):n>Xd-Id&&(n=Xd-Id);var e=o/rp(go(n),i);return[e*ip(i*t),o-e*Kd(i*t)]}var r=Kd(t),i=t===n?ip(t):ep(r/Kd(n))/ep(go(n)/go(t)),o=r*rp(go(t),i)/i;return i?(e.invert=function(t,n){var e=o-n,r=op(i)*ap(t*t+e*e);return[Jd(t,Zd(e))/i*op(e),2*Qd(rp(o/r,1/i))-Xd]},e):po}function _o(t,n){return[t,n]}function bo(t,n){function e(t,n){var e=o-n,r=i*t;return[e*ip(r),o-e*Kd(r)]}var r=Kd(t),i=t===n?ip(t):(r-Kd(n))/(n-t),o=r/i+t;return Zd(i)=0;)n+=e[r].value;else n=1;t.value=n}function Co(t,n){var e,r,i,o,a,u=new Lo(t),f=+t.value&&(u.value=t.value),c=[u];for(null==n&&(n=Po);e=c.pop();)if(f&&(e.value=+e.data.value),(i=n(e.data))&&(a=i.length))for(e.children=new Array(a),o=a-1;o>=0;--o)c.push(r=e.children[o]=new Lo(i[o])),r.parent=e,r.depth=e.depth+1;return u.eachBefore(Ro)}function Po(t){return t.children}function zo(t){t.data=t.data.data}function Ro(t){var n=0;do{t.height=n}while((t=t.parent)&&t.height<++n)}function Lo(t){this.data=t,this.depth=this.height=0,this.parent=null}function Do(t){for(var n,e,r=0,i=(t=function(t){for(var n,e,r=t.length;r;)e=Math.random()*r--|0,n=t[r],t[r]=t[e],t[e]=n;return t}(dv.call(t))).length,o=[];r0&&e*e>r*r+i*i}function Oo(t,n){for(var e=0;e(a*=a)?(r=(c+a-i)/(2*c),o=Math.sqrt(Math.max(0,a/c-r*r)),e.x=t.x-r*u-o*f,e.y=t.y-r*f+o*u):(r=(c+i-a)/(2*c),o=Math.sqrt(Math.max(0,i/c-r*r)),e.x=n.x+r*u-o*f,e.y=n.y+r*f+o*u)):(e.x=n.x+e.r,e.y=n.y)}function Io(t,n){var e=t.r+n.r-1e-6,r=n.x-t.x,i=n.y-t.y;return e>0&&e*e>r*r+i*i}function jo(t){var n=t._,e=t.next._,r=n.r+e.r,i=(n.x*e.r+e.x*n.r)/r,o=(n.y*e.r+e.y*n.r)/r;return i*i+o*o}function Ho(t){this._=t,this.next=null,this.previous=null}function Xo(t){if(!(i=t.length))return 0;var n,e,r,i,o,a,u,f,c,s,l;if(n=t[0],n.x=0,n.y=0,!(i>1))return n.r;if(e=t[1],n.x=-e.r,e.x=n.r,e.y=0,!(i>2))return n.r+e.r;Fo(e,n,r=t[2]),n=new Ho(n),e=new Ho(e),r=new Ho(r),n.next=r.previous=e,e.next=n.previous=r,r.next=e.previous=n;t:for(u=3;uh&&(h=u),g=s*s*v,(d=Math.max(h/g,g/l))>p){s-=u;break}p=d}y.push(a={value:s,dice:f1&&la(t[e[r-2]],t[e[r-1]],t[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function pa(){return Math.random()}function va(t){function n(n){var o=n+"",a=e.get(o);if(!a){if(i!==kv)return i;e.set(o,a=r.push(n))}return t[(a-1)%t.length]}var e=le(),r=[],i=kv;return t=null==t?[]:Ev.call(t),n.domain=function(t){if(!arguments.length)return r.slice();r=[],e=le();for(var i,o,a=-1,u=t.length;++a2?wa:xa,o=a=null,r}function r(n){return(o||(o=i(u,f,s?function(t){return function(n,e){var r=t(n=+n,e=+e);return function(t){return t<=n?0:t>=e?1:r(t)}}}(t):t,c)))(+n)}var i,o,a,u=Cv,f=Cv,c=hn,s=!1;return r.invert=function(t){return(a||(a=i(f,u,ma,s?function(t){return function(n,e){var r=t(n=+n,e=+e);return function(t){return t<=0?n:t>=1?e:r(t)}}}(n):n)))(+t)},r.domain=function(t){return arguments.length?(u=Sv.call(t,ba),e()):u.slice()},r.range=function(t){return arguments.length?(f=Ev.call(t),e()):f.slice()},r.rangeRound=function(t){return f=Ev.call(t),c=dn,e()},r.clamp=function(t){return arguments.length?(s=!!t,e()):s},r.interpolate=function(t){return arguments.length?(c=t,e()):c},e()}function Ta(n){var e=n.domain;return n.ticks=function(t){var n=e();return l(n[0],n[n.length-1],null==t?10:t)},n.tickFormat=function(n,r){return function(n,e,r){var i,o=n[0],a=n[n.length-1],u=d(o,a,null==e?10:e);switch((r=tr(null==r?",f":r)).type){case"s":var f=Math.max(Math.abs(o),Math.abs(a));return null!=r.precision||isNaN(i=ar(u,f))||(r.precision=i),t.formatPrefix(r,f);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=ur(u,Math.max(Math.abs(o),Math.abs(a))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=or(u))||(r.precision=i-2*("%"===r.type))}return t.format(r)}(e(),n,r)},n.nice=function(t){null==t&&(t=10);var r,i=e(),o=0,a=i.length-1,u=i[o],f=i[a];return f0?r=h(u=Math.floor(u/r)*r,f=Math.ceil(f/r)*r,t):r<0&&(r=h(u=Math.ceil(u*r)/r,f=Math.floor(f*r)/r,t)),r>0?(i[o]=Math.floor(u/r)*r,i[a]=Math.ceil(f/r)*r,e(i)):r<0&&(i[o]=Math.ceil(u*r)/r,i[a]=Math.floor(f*r)/r,e(i)),n},n}function Na(){var t=Aa(ma,cn);return t.copy=function(){return Ma(t,Na())},Ta(t)}function Sa(){function t(t){return+t}var n=[0,1];return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=Sv.call(e,ba),t):n.slice()},t.copy=function(){return Sa().domain(n)},Ta(t)}function Ea(t,n){var e,r=0,i=(t=t.slice()).length-1,o=t[r],a=t[i];return a0){for(;df)break;g.push(h)}}else for(;d=1;--s)if(!((h=c*s)f)break;g.push(h)}}else g=l(d,p,Math.min(p-d,v)).map(a);return n?g.reverse():g},e.tickFormat=function(n,r){if(null==r&&(r=10===i?".0e":","),"function"!=typeof r&&(r=t.format(r)),n===1/0)return r;null==n&&(n=10);var u=Math.max(1,i*n/e.ticks().length);return function(t){var n=t/a(Math.round(o(t)));return n*i0?o[n-1]:r[0],n=i?[o[i-1],r]:[o[n-1],o[n]]},t.copy=function(){return Ya().domain([e,r]).range(a)},Ta(t)}function Ba(){function t(t){if(t<=t)return e[Qc(n,t,0,r)]}var n=[.5],e=[0,1],r=1;return t.domain=function(i){return arguments.length?(n=Ev.call(i),r=Math.min(n.length,e.length-1),t):n.slice()},t.range=function(i){return arguments.length?(e=Ev.call(i),r=Math.min(n.length,e.length-1),t):e.slice()},t.invertExtent=function(t){var r=e.indexOf(t);return[n[r-1],n[r]]},t.copy=function(){return Ba().domain(n).range(e)},t}function Fa(t,n,e,r){function i(n){return t(n=new Date(+n)),n}return i.floor=i,i.ceil=function(e){return t(e=new Date(e-1)),n(e,1),t(e),e},i.round=function(t){var n=i(t),e=i.ceil(t);return t-n0))return u;do{u.push(a=new Date(+e)),n(e,o),t(e)}while(a=n)for(;t(n),!e(n);)n.setTime(n-1)},function(t,r){if(t>=t)if(r<0)for(;++r<=0;)for(;n(t,-1),!e(t););else for(;--r>=0;)for(;n(t,1),!e(t););})},e&&(i.count=function(n,r){return Pv.setTime(+n),zv.setTime(+r),t(Pv),t(zv),Math.floor(e(Pv,zv))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(n){return r(n)%t==0}:function(n){return i.count(0,n)%t==0}):i:null}),i}function Ia(t){return Fa(function(n){n.setDate(n.getDate()-(n.getDay()+7-t)%7),n.setHours(0,0,0,0)},function(t,n){t.setDate(t.getDate()+7*n)},function(t,n){return(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*Dv)/Uv})}function ja(t){return Fa(function(n){n.setUTCDate(n.getUTCDate()-(n.getUTCDay()+7-t)%7),n.setUTCHours(0,0,0,0)},function(t,n){t.setUTCDate(t.getUTCDate()+7*n)},function(t,n){return(n-t)/Uv})}function Ha(t){if(0<=t.y&&t.y<100){var n=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return n.setFullYear(t.y),n}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function Xa(t){if(0<=t.y&&t.y<100){var n=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return n.setUTCFullYear(t.y),n}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Ga(t){return{y:t,m:0,d:1,H:0,M:0,S:0,L:0}}function Va(t){function n(t,n){return function(e){var r,i,o,a=[],u=-1,f=0,c=t.length;for(e instanceof Date||(e=new Date(+e));++u53)return null;"w"in a||(a.w=1),"Z"in a?(i=(o=(i=Xa(Ga(a.y))).getUTCDay())>4||0===o?gg.ceil(i):gg(i),i=dg.offset(i,7*(a.V-1)),a.y=i.getUTCFullYear(),a.m=i.getUTCMonth(),a.d=i.getUTCDate()+(a.w+6)%7):(i=(o=(i=n(Ga(a.y))).getDay())>4||0===o?Gv.ceil(i):Gv(i),i=jv.offset(i,7*(a.V-1)),a.y=i.getFullYear(),a.m=i.getMonth(),a.d=i.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),o="Z"in a?Xa(Ga(a.y)).getUTCDay():n(Ga(a.y)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(o+5)%7:a.w+7*a.U-(o+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,Xa(a)):n(a)}}function r(t,n,e,r){for(var i,o,a=0,u=n.length,f=e.length;a=f)return-1;if(37===(i=n.charCodeAt(a++))){if(i=n.charAt(a++),!(o=A[i in Lg?n.charAt(a++):i])||(r=o(t,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}var i=t.dateTime,o=t.date,a=t.time,u=t.periods,f=t.days,c=t.shortDays,s=t.months,l=t.shortMonths,h=Za(u),d=Qa(u),p=Za(f),v=Qa(f),g=Za(c),y=Qa(c),_=Za(s),b=Qa(s),m=Za(l),x=Qa(l),w={a:function(t){return c[t.getDay()]},A:function(t){return f[t.getDay()]},b:function(t){return l[t.getMonth()]},B:function(t){return s[t.getMonth()]},c:null,d:yu,e:yu,f:wu,H:_u,I:bu,j:mu,L:xu,m:Mu,M:Au,p:function(t){return u[+(t.getHours()>=12)]},Q:Ju,s:Ku,S:Tu,u:Nu,U:Su,V:Eu,w:ku,W:Cu,x:null,X:null,y:Pu,Y:zu,Z:Ru,"%":Qu},M={a:function(t){return c[t.getUTCDay()]},A:function(t){return f[t.getUTCDay()]},b:function(t){return l[t.getUTCMonth()]},B:function(t){return s[t.getUTCMonth()]},c:null,d:Lu,e:Lu,f:Yu,H:Du,I:Uu,j:qu,L:Ou,m:Bu,M:Fu,p:function(t){return u[+(t.getUTCHours()>=12)]},Q:Ju,s:Ku,S:Iu,u:ju,U:Hu,V:Xu,w:Gu,W:Vu,x:null,X:null,y:$u,Y:Wu,Z:Zu,"%":Qu},A={a:function(t,n,e){var r=g.exec(n.slice(e));return r?(t.w=y[r[0].toLowerCase()],e+r[0].length):-1},A:function(t,n,e){var r=p.exec(n.slice(e));return r?(t.w=v[r[0].toLowerCase()],e+r[0].length):-1},b:function(t,n,e){var r=m.exec(n.slice(e));return r?(t.m=x[r[0].toLowerCase()],e+r[0].length):-1},B:function(t,n,e){var r=_.exec(n.slice(e));return r?(t.m=b[r[0].toLowerCase()],e+r[0].length):-1},c:function(t,n,e){return r(t,i,n,e)},d:uu,e:uu,f:du,H:cu,I:cu,j:fu,L:hu,m:au,M:su,p:function(t,n,e){var r=h.exec(n.slice(e));return r?(t.p=d[r[0].toLowerCase()],e+r[0].length):-1},Q:vu,s:gu,S:lu,u:Ka,U:tu,V:nu,w:Ja,W:eu,x:function(t,n,e){return r(t,o,n,e)},X:function(t,n,e){return r(t,a,n,e)},y:iu,Y:ru,Z:ou,"%":pu};return w.x=n(o,w),w.X=n(a,w),w.c=n(i,w),M.x=n(o,M),M.X=n(a,M),M.c=n(i,M),{format:function(t){var e=n(t+="",w);return e.toString=function(){return t},e},parse:function(t){var n=e(t+="",Ha);return n.toString=function(){return t},n},utcFormat:function(t){var e=n(t+="",M);return e.toString=function(){return t},e},utcParse:function(t){var n=e(t,Xa);return n.toString=function(){return t},n}}}function $a(t,n,e){var r=t<0?"-":"",i=(r?-t:t)+"",o=i.length;return r+(o68?1900:2e3),e+r[0].length):-1}function ou(t,n,e){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(n.slice(e,e+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),e+r[0].length):-1}function au(t,n,e){var r=Dg.exec(n.slice(e,e+2));return r?(t.m=r[0]-1,e+r[0].length):-1}function uu(t,n,e){var r=Dg.exec(n.slice(e,e+2));return r?(t.d=+r[0],e+r[0].length):-1}function fu(t,n,e){var r=Dg.exec(n.slice(e,e+3));return r?(t.m=0,t.d=+r[0],e+r[0].length):-1}function cu(t,n,e){var r=Dg.exec(n.slice(e,e+2));return r?(t.H=+r[0],e+r[0].length):-1}function su(t,n,e){var r=Dg.exec(n.slice(e,e+2));return r?(t.M=+r[0],e+r[0].length):-1}function lu(t,n,e){var r=Dg.exec(n.slice(e,e+2));return r?(t.S=+r[0],e+r[0].length):-1}function hu(t,n,e){var r=Dg.exec(n.slice(e,e+3));return r?(t.L=+r[0],e+r[0].length):-1}function du(t,n,e){var r=Dg.exec(n.slice(e,e+6));return r?(t.L=Math.floor(r[0]/1e3),e+r[0].length):-1}function pu(t,n,e){var r=Ug.exec(n.slice(e,e+1));return r?e+r[0].length:-1}function vu(t,n,e){var r=Dg.exec(n.slice(e));return r?(t.Q=+r[0],e+r[0].length):-1}function gu(t,n,e){var r=Dg.exec(n.slice(e));return r?(t.Q=1e3*+r[0],e+r[0].length):-1}function yu(t,n){return $a(t.getDate(),n,2)}function _u(t,n){return $a(t.getHours(),n,2)}function bu(t,n){return $a(t.getHours()%12||12,n,2)}function mu(t,n){return $a(1+jv.count(ug(t),t),n,3)}function xu(t,n){return $a(t.getMilliseconds(),n,3)}function wu(t,n){return xu(t,n)+"000"}function Mu(t,n){return $a(t.getMonth()+1,n,2)}function Au(t,n){return $a(t.getMinutes(),n,2)}function Tu(t,n){return $a(t.getSeconds(),n,2)}function Nu(t){var n=t.getDay();return 0===n?7:n}function Su(t,n){return $a(Xv.count(ug(t),t),n,2)}function Eu(t,n){var e=t.getDay();return t=e>=4||0===e?Wv(t):Wv.ceil(t),$a(Wv.count(ug(t),t)+(4===ug(t).getDay()),n,2)}function ku(t){return t.getDay()}function Cu(t,n){return $a(Gv.count(ug(t),t),n,2)}function Pu(t,n){return $a(t.getFullYear()%100,n,2)}function zu(t,n){return $a(t.getFullYear()%1e4,n,4)}function Ru(t){var n=t.getTimezoneOffset();return(n>0?"-":(n*=-1,"+"))+$a(n/60|0,"0",2)+$a(n%60,"0",2)}function Lu(t,n){return $a(t.getUTCDate(),n,2)}function Du(t,n){return $a(t.getUTCHours(),n,2)}function Uu(t,n){return $a(t.getUTCHours()%12||12,n,2)}function qu(t,n){return $a(1+dg.count(Pg(t),t),n,3)}function Ou(t,n){return $a(t.getUTCMilliseconds(),n,3)}function Yu(t,n){return Ou(t,n)+"000"}function Bu(t,n){return $a(t.getUTCMonth()+1,n,2)}function Fu(t,n){return $a(t.getUTCMinutes(),n,2)}function Iu(t,n){return $a(t.getUTCSeconds(),n,2)}function ju(t){var n=t.getUTCDay();return 0===n?7:n}function Hu(t,n){return $a(vg.count(Pg(t),t),n,2)}function Xu(t,n){var e=t.getUTCDay();return t=e>=4||0===e?bg(t):bg.ceil(t),$a(bg.count(Pg(t),t)+(4===Pg(t).getUTCDay()),n,2)}function Gu(t){return t.getUTCDay()}function Vu(t,n){return $a(gg.count(Pg(t),t),n,2)}function $u(t,n){return $a(t.getUTCFullYear()%100,n,2)}function Wu(t,n){return $a(t.getUTCFullYear()%1e4,n,4)}function Zu(){return"+0000"}function Qu(){return"%"}function Ju(t){return+t}function Ku(t){return Math.floor(+t/1e3)}function tf(n){return zg=Va(n),t.timeFormat=zg.format,t.timeParse=zg.parse,t.utcFormat=zg.utcFormat,t.utcParse=zg.utcParse,zg}function nf(t){return new Date(t)}function ef(t){return t instanceof Date?+t:+new Date(+t)}function rf(t,n,r,i,o,a,u,f,c){function s(e){return(u(e)=1?m_:t<=-1?-m_:Math.asin(t)}function lf(t){return t.innerRadius}function hf(t){return t.outerRadius}function df(t){return t.startAngle}function pf(t){return t.endAngle}function vf(t){return t&&t.padAngle}function gf(t,n,e,r,i,o,a){var u=t-e,f=n-r,c=(a?o:-o)/y_(u*u+f*f),s=c*f,l=-c*u,h=t+s,d=n+l,p=e+s,v=r+l,g=(h+p)/2,y=(d+v)/2,_=p-h,b=v-d,m=_*_+b*b,x=i-o,w=h*v-p*d,M=(b<0?-1:1)*y_(p_(0,x*x*m-w*w)),A=(w*b-_*M)/m,T=(-w*_-b*M)/m,N=(w*b+_*M)/m,S=(-w*_+b*M)/m,E=A-g,k=T-y,C=N-g,P=S-y;return E*E+k*k>C*C+P*P&&(A=N,T=S),{cx:A,cy:T,x01:-s,y01:-l,x11:A*(i/x-1),y11:T*(i/x-1)}}function yf(t){this._context=t}function _f(t){return new yf(t)}function bf(t){return t[0]}function mf(t){return t[1]}function xf(){function t(t){var u,f,c,s=t.length,l=!1;for(null==i&&(a=o(c=ie())),u=0;u<=s;++u)!(u=s;--l)c.point(g[l],y[l]);c.lineEnd(),c.areaEnd()}v&&(g[n]=+e(h,n,t),y[n]=+i(h,n,t),c.point(r?+r(h,n,t):g[n],o?+o(h,n,t):y[n]))}if(d)return c=null,d+""||null}function n(){return xf().defined(a).curve(f).context(u)}var e=bf,r=null,i=cf(0),o=mf,a=cf(!0),u=null,f=_f,c=null;return t.x=function(n){return arguments.length?(e="function"==typeof n?n:cf(+n),r=null,t):e},t.x0=function(n){return arguments.length?(e="function"==typeof n?n:cf(+n),t):e},t.x1=function(n){return arguments.length?(r=null==n?null:"function"==typeof n?n:cf(+n),t):r},t.y=function(n){return arguments.length?(i="function"==typeof n?n:cf(+n),o=null,t):i},t.y0=function(n){return arguments.length?(i="function"==typeof n?n:cf(+n),t):i},t.y1=function(n){return arguments.length?(o=null==n?null:"function"==typeof n?n:cf(+n),t):o},t.lineX0=t.lineY0=function(){return n().x(e).y(i)},t.lineY1=function(){return n().x(e).y(o)},t.lineX1=function(){return n().x(r).y(i)},t.defined=function(n){return arguments.length?(a="function"==typeof n?n:cf(!!n),t):a},t.curve=function(n){return arguments.length?(f=n,null!=u&&(c=f(u)),t):f},t.context=function(n){return arguments.length?(null==n?u=c=null:c=f(u=n),t):u},t}function Mf(t,n){return nt?1:n>=t?0:NaN}function Af(t){return t}function Tf(t){this._curve=t}function Nf(t){function n(n){return new Tf(t(n))}return n._curve=t,n}function Sf(t){var n=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?n(Nf(t)):n()._curve},t}function Ef(){return Sf(xf().curve(w_))}function kf(){var t=wf().curve(w_),n=t.curve,e=t.lineX0,r=t.lineX1,i=t.lineY0,o=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return Sf(e())},delete t.lineX0,t.lineEndAngle=function(){return Sf(r())},delete t.lineX1,t.lineInnerRadius=function(){return Sf(i())},delete t.lineY0,t.lineOuterRadius=function(){return Sf(o())},delete t.lineY1,t.curve=function(t){return arguments.length?n(Nf(t)):n()._curve},t}function Cf(t,n){return[(n=+n)*Math.cos(t-=Math.PI/2),n*Math.sin(t)]}function Pf(t){return t.source}function zf(t){return t.target}function Rf(t){function n(){var n,u=M_.call(arguments),f=e.apply(this,u),c=r.apply(this,u);if(a||(a=n=ie()),t(a,+i.apply(this,(u[0]=f,u)),+o.apply(this,u),+i.apply(this,(u[0]=c,u)),+o.apply(this,u)),n)return a=null,n+""||null}var e=Pf,r=zf,i=bf,o=mf,a=null;return n.source=function(t){return arguments.length?(e=t,n):e},n.target=function(t){return arguments.length?(r=t,n):r},n.x=function(t){return arguments.length?(i="function"==typeof t?t:cf(+t),n):i},n.y=function(t){return arguments.length?(o="function"==typeof t?t:cf(+t),n):o},n.context=function(t){return arguments.length?(a=null==t?null:t,n):a},n}function Lf(t,n,e,r,i){t.moveTo(n,e),t.bezierCurveTo(n=(n+r)/2,e,n,i,r,i)}function Df(t,n,e,r,i){t.moveTo(n,e),t.bezierCurveTo(n,e=(e+i)/2,r,e,r,i)}function Uf(t,n,e,r,i){var o=Cf(n,e),a=Cf(n,e=(e+i)/2),u=Cf(r,e),f=Cf(r,i);t.moveTo(o[0],o[1]),t.bezierCurveTo(a[0],a[1],u[0],u[1],f[0],f[1])}function qf(){}function Of(t,n,e){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+n)/6,(t._y0+4*t._y1+e)/6)}function Yf(t){this._context=t}function Bf(t){this._context=t}function Ff(t){this._context=t}function If(t,n){this._basis=new Yf(t),this._beta=n}function jf(t,n,e){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-n),t._y2+t._k*(t._y1-e),t._x2,t._y2)}function Hf(t,n){this._context=t,this._k=(1-n)/6}function Xf(t,n){this._context=t,this._k=(1-n)/6}function Gf(t,n){this._context=t,this._k=(1-n)/6}function Vf(t,n,e){var r=t._x1,i=t._y1,o=t._x2,a=t._y2;if(t._l01_a>__){var u=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,f=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*u-t._x0*t._l12_2a+t._x2*t._l01_2a)/f,i=(i*u-t._y0*t._l12_2a+t._y2*t._l01_2a)/f}if(t._l23_a>__){var c=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,s=3*t._l23_a*(t._l23_a+t._l12_a);o=(o*c+t._x1*t._l23_2a-n*t._l12_2a)/s,a=(a*c+t._y1*t._l23_2a-e*t._l12_2a)/s}t._context.bezierCurveTo(r,i,o,a,t._x2,t._y2)}function $f(t,n){this._context=t,this._alpha=n}function Wf(t,n){this._context=t,this._alpha=n}function Zf(t,n){this._context=t,this._alpha=n}function Qf(t){this._context=t}function Jf(t){return t<0?-1:1}function Kf(t,n,e){var r=t._x1-t._x0,i=n-t._x1,o=(t._y1-t._y0)/(r||i<0&&-0),a=(e-t._y1)/(i||r<0&&-0),u=(o*i+a*r)/(r+i);return(Jf(o)+Jf(a))*Math.min(Math.abs(o),Math.abs(a),.5*Math.abs(u))||0}function tc(t,n){var e=t._x1-t._x0;return e?(3*(t._y1-t._y0)/e-n)/2:n}function nc(t,n,e){var r=t._x0,i=t._y0,o=t._x1,a=t._y1,u=(o-r)/3;t._context.bezierCurveTo(r+u,i+u*n,o-u,a-u*e,o,a)}function ec(t){this._context=t}function rc(t){this._context=new ic(t)}function ic(t){this._context=t}function oc(t){this._context=t}function ac(t){var n,e,r=t.length-1,i=new Array(r),o=new Array(r),a=new Array(r);for(i[0]=0,o[0]=2,a[0]=t[0]+2*t[1],n=1;n=0;--n)i[n]=(a[n]-i[n+1])/o[n];for(o[r-1]=(t[r]+i[r-1])/2,n=0;n1)for(var e,r,i,o=1,a=t[n[0]],u=a.length;o=0;)e[n]=n;return e}function sc(t,n){return t[n]}function lc(t){var n=t.map(hc);return cc(t).sort(function(t,e){return n[t]-n[e]})}function hc(t){for(var n,e=0,r=-1,i=t.length;++r0)){if(o/=h,h<0){if(o0){if(o>l)return;o>s&&(s=o)}if(o=r-f,h||!(o<0)){if(o/=h,h<0){if(o>l)return;o>s&&(s=o)}else if(h>0){if(o0)){if(o/=d,d<0){if(o0){if(o>l)return;o>s&&(s=o)}if(o=i-c,d||!(o<0)){if(o/=d,d<0){if(o>l)return;o>s&&(s=o)}else if(d>0){if(o0||l<1)||(s>0&&(t[0]=[f+s*h,c+s*d]),l<1&&(t[1]=[f+l*h,c+l*d]),!0)}}}}}function Tc(t,n,e,r,i){var o=t[1];if(o)return!0;var a,u,f=t[0],c=t.left,s=t.right,l=c[0],h=c[1],d=s[0],p=s[1],v=(l+d)/2,g=(h+p)/2;if(p===h){if(v=r)return;if(l>d){if(f){if(f[1]>=i)return}else f=[v,e];o=[v,i]}else{if(f){if(f[1]1)if(l>d){if(f){if(f[1]>=i)return}else f=[(e-u)/a,e];o=[(i-u)/a,i]}else{if(f){if(f[1]=r)return}else f=[n,a*n+u];o=[r,a*r+u]}else{if(f){if(f[0]=-eb)){var d=f*f+c*c,p=s*s+l*l,v=(l*d-c*p)/h,g=(f*p-s*d)/h,y=K_.pop()||new function(){yc(this),this.x=this.y=this.arc=this.site=this.cy=null};y.arc=t,y.site=i,y.x=v+a,y.y=(y.cy=g+u)+Math.sqrt(v*v+g*g),t.circle=y;for(var _=null,b=Q_._;b;)if(y.ynb)u=u.L;else{if(!((i=o-function(t,n){var e=t.N;if(e)return Dc(e,n);var r=t.site;return r[1]===n?r[0]:1/0}(u,a))>nb)){r>-nb?(n=u.P,e=u):i>-nb?(n=u,e=u.N):n=e=u;break}if(!u.R){n=u;break}u=u.R}(function(t){Z_[t.index]={site:t,halfedges:[]}})(t);var f=Pc(t);if(W_.insert(n,f),n||e){if(n===e)return Cc(n),e=Pc(n.site),W_.insert(f,e),f.edge=e.edge=xc(n.site,f.site),kc(n),void kc(e);if(e){Cc(n),Cc(e);var c=n.site,s=c[0],l=c[1],h=t[0]-s,d=t[1]-l,p=e.site,v=p[0]-s,g=p[1]-l,y=2*(h*g-d*v),_=h*h+d*d,b=v*v+g*g,m=[(g*_-d*b)/y+s,(h*b-v*_)/y+l];Mc(e.edge,c,p,m),f.edge=xc(c,t,null,m),e.edge=xc(t,p,null,m),kc(n),kc(e)}else f.edge=xc(n.site,f.site)}}function Dc(t,n){var e=t.site,r=e[0],i=e[1],o=i-n;if(!o)return r;var a=t.P;if(!a)return-1/0;var u=(e=a.site)[0],f=e[1],c=f-n;if(!c)return u;var s=u-r,l=1/o-1/c,h=s/c;return l?(-h+Math.sqrt(h*h-2*l*(s*s/(-2*c)-f+c/2+i-o/2)))/l+r:(r+u)/2}function Uc(t,n,e){return(t[0]-e[0])*(n[1]-t[1])-(t[0]-n[0])*(e[1]-t[1])}function qc(t,n){return n[1]-t[1]||n[0]-t[0]}function Oc(t,n){var e,r,i,o=t.sort(qc).pop();for(J_=[],Z_=new Array(t.length),W_=new gc,Q_=new gc;;)if(i=$_,o&&(!i||o[1]nb||Math.abs(i[0][1]-i[1][1])>nb)||delete J_[o]})(a,u,f,c),function(t,n,e,r){var i,o,a,u,f,c,s,l,h,d,p,v,g=Z_.length,y=!0;for(i=0;inb||Math.abs(v-h)>nb)&&(f.splice(u,0,J_.push(wc(a,d,Math.abs(p-t)nb?[t,Math.abs(l-t)nb?[Math.abs(h-r)nb?[e,Math.abs(l-e)nb?[Math.abs(h-n)r?(r+i)/2:Math.min(0,r)||Math.max(0,i),a>o?(o+a)/2:Math.min(0,o)||Math.max(0,a))}var Zc=e(n),Qc=Zc.right,Jc=Zc.left,Kc=Array.prototype,ts=Kc.slice,ns=Kc.map,es=Math.sqrt(50),rs=Math.sqrt(10),is=Math.sqrt(2),os=Array.prototype.slice,as=1,us=2,fs=3,cs=4,ss=1e-6,ls={value:function(){}};S.prototype=N.prototype={constructor:S,on:function(t,n){var e,r=this._,i=function(t,n){return t.trim().split(/^|\s+/).map(function(t){var e="",r=t.indexOf(".");if(r>=0&&(e=t.slice(r+1),t=t.slice(0,r)),t&&!n.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}})}(t+"",r),o=-1,a=i.length;{if(!(arguments.length<2)){if(null!=n&&"function"!=typeof n)throw new Error("invalid callback: "+n);for(;++o0)for(var e,r,i=new Array(e),o=0;o=0&&(this._names.splice(n,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var bs={};if(t.event=null,"undefined"!=typeof document){"onmouseenter"in document.documentElement||(bs={mouseenter:"mouseover",mouseleave:"mouseout"})}var ms=[null];ut.prototype=ft.prototype={constructor:ut,select:function(t){"function"!=typeof t&&(t=z(t));for(var n=this._groups,e=n.length,r=new Array(e),i=0;i=m&&(m=b+1);!(_=g[m])&&++m=0;)(r=i[o])&&(a&&a!==r.nextSibling&&a.parentNode.insertBefore(r,a),a=r);return this},sort:function(t){function n(n,e){return n&&e?t(n.__data__,e.__data__):!n-!e}t||(t=Y);for(var e=this._groups,r=e.length,i=new Array(r),o=0;o1?this.each((null==n?function(t){return function(){this.style.removeProperty(t)}}:"function"==typeof n?function(t,n,e){return function(){var r=n.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,e)}}:function(t,n,e){return function(){this.style.setProperty(t,n,e)}})(t,n,null==e?"":e)):F(this.node(),t)},property:function(t,n){return arguments.length>1?this.each((null==n?function(t){return function(){delete this[t]}}:"function"==typeof n?function(t,n){return function(){var e=n.apply(this,arguments);null==e?delete this[t]:this[t]=e}}:function(t,n){return function(){this[t]=n}})(t,n)):this.node()[t]},classed:function(t,n){var e=I(t+"");if(arguments.length<2){for(var r=j(this.node()),i=-1,o=e.length;++i=0&&(n=t.slice(e+1),t=t.slice(0,e)),{type:t,name:n}})}(t+""),a=o.length;if(!(arguments.length<2)){for(u=n?it:rt,null==e&&(e=!1),r=0;r=240?t-240:t+120,i,r),Ot(t,i,r),Ot(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var Ls=Math.PI/180,Ds=180/Math.PI,Us=.96422,qs=1,Os=.82521,Ys=4/29,Bs=6/29,Fs=3*Bs*Bs,Is=Bs*Bs*Bs;Nt(Ft,Bt,St(Et,{brighter:function(t){return new Ft(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker:function(t){return new Ft(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,n=isNaN(this.a)?t:t+this.a/500,e=isNaN(this.b)?t:t-this.b/200;return n=Us*jt(n),t=qs*jt(t),e=Os*jt(e),new Lt(Ht(3.1338561*n-1.6168667*t-.4906146*e),Ht(-.9787684*n+1.9161415*t+.033454*e),Ht(.0719453*n-.2289914*t+1.4052427*e),this.opacity)}})),Nt($t,Vt,St(Et,{brighter:function(t){return new $t(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker:function(t){return new $t(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb:function(){return Yt(this).rgb()}}));var js=-.29227,Hs=-.90649,Xs=1.97294,Gs=Xs*Hs,Vs=1.78277*Xs,$s=1.78277*js- -.14861*Hs;Nt(Zt,Wt,St(Et,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Zt(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Zt(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*Ls,n=+this.l,e=isNaN(this.s)?0:this.s*n*(1-n),r=Math.cos(t),i=Math.sin(t);return new Lt(255*(n+e*(-.14861*r+1.78277*i)),255*(n+e*(js*r+Hs*i)),255*(n+e*(Xs*r)),this.opacity)}}));var Ws,Zs,Qs,Js,Ks,tl,nl=function t(n){function e(t,n){var e=r((t=Rt(t)).r,(n=Rt(n)).r),i=r(t.g,n.g),o=r(t.b,n.b),a=on(t.opacity,n.opacity);return function(n){return t.r=e(n),t.g=i(n),t.b=o(n),t.opacity=a(n),t+""}}var r=rn(n);return e.gamma=t,e}(1),el=an(Jt),rl=an(Kt),il=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,ol=new RegExp(il.source,"g"),al=180/Math.PI,ul={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1},fl=vn(function(t){return"none"===t?ul:(Ws||(Ws=document.createElement("DIV"),Zs=document.documentElement,Qs=document.defaultView),Ws.style.transform=t,t=Qs.getComputedStyle(Zs.appendChild(Ws),null).getPropertyValue("transform"),Zs.removeChild(Ws),t=t.slice(7,-1).split(","),pn(+t[0],+t[1],+t[2],+t[3],+t[4],+t[5]))},"px, ","px)","deg)"),cl=vn(function(t){return null==t?ul:(Js||(Js=document.createElementNS("http://www.w3.org/2000/svg","g")),Js.setAttribute("transform",t),(t=Js.transform.baseVal.consolidate())?(t=t.matrix,pn(t.a,t.b,t.c,t.d,t.e,t.f)):ul)},", ",")",")"),sl=Math.SQRT2,ll=2,hl=4,dl=1e-12,pl=_n(en),vl=_n(on),gl=bn(en),yl=bn(on),_l=mn(en),bl=mn(on),ml=0,xl=0,wl=0,Ml=1e3,Al=0,Tl=0,Nl=0,Sl="object"==typeof performance&&performance.now?performance:Date,El="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};Mn.prototype=An.prototype={constructor:Mn,restart:function(t,n,e){if("function"!=typeof t)throw new TypeError("callback is not a function");e=(null==e?xn():+e)+(null==n?0:+n),this._next||tl===this||(tl?tl._next=this:Ks=this,tl=this),this._call=t,this._time=e,En()},stop:function(){this._call&&(this._call=null,this._time=1/0,En())}};var kl=N("start","end","interrupt"),Cl=[],Pl=0,zl=1,Rl=2,Ll=3,Dl=4,Ul=5,ql=6,Ol=ft.prototype.constructor,Yl=0,Bl=ft.prototype;qn.prototype=On.prototype={constructor:qn,select:function(t){var n=this._name,e=this._id;"function"!=typeof t&&(t=z(t));for(var r=this._groups,i=r.length,o=new Array(i),a=0;a=0&&(t=t.slice(0,n)),!t||"start"===t})}(n)?Pn:zn;return function(){var a=o(this,t),u=a.on;u!==r&&(i=(r=u).copy()).on(n,e),a.on=i}}(e,t,n))},attr:function(t,n){var e=k(t),r="transform"===e?cl:Un;return this.attrTween(t,"function"==typeof n?(e.local?function(t,n,e){var r,i,o;return function(){var a,u=e(this);if(null!=u)return(a=this.getAttributeNS(t.space,t.local))===u?null:a===r&&u===i?o:o=n(r=a,i=u);this.removeAttributeNS(t.space,t.local)}}:function(t,n,e){var r,i,o;return function(){var a,u=e(this);if(null!=u)return(a=this.getAttribute(t))===u?null:a===r&&u===i?o:o=n(r=a,i=u);this.removeAttribute(t)}})(e,r,Dn(this,"attr."+t,n)):null==n?(e.local?function(t){return function(){this.removeAttributeNS(t.space,t.local)}}:function(t){return function(){this.removeAttribute(t)}})(e):(e.local?function(t,n,e){var r,i;return function(){var o=this.getAttributeNS(t.space,t.local);return o===e?null:o===r?i:i=n(r=o,e)}}:function(t,n,e){var r,i;return function(){var o=this.getAttribute(t);return o===e?null:o===r?i:i=n(r=o,e)}})(e,r,n+""))},attrTween:function(t,n){var e="attr."+t;if(arguments.length<2)return(e=this.tween(e))&&e._value;if(null==n)return this.tween(e,null);if("function"!=typeof n)throw new Error;var r=k(t);return this.tween(e,(r.local?function(t,n){function e(){var e=this,r=n.apply(e,arguments);return r&&function(n){e.setAttributeNS(t.space,t.local,r(n))}}return e._value=n,e}:function(t,n){function e(){var e=this,r=n.apply(e,arguments);return r&&function(n){e.setAttribute(t,r(n))}}return e._value=n,e})(r,n))},style:function(t,n,e){var r="transform"==(t+="")?fl:Un;return null==n?this.styleTween(t,function(t,n){var e,r,i;return function(){var o=F(this,t),a=(this.style.removeProperty(t),F(this,t));return o===a?null:o===e&&a===r?i:i=n(e=o,r=a)}}(t,r)).on("end.style."+t,function(t){return function(){this.style.removeProperty(t)}}(t)):this.styleTween(t,"function"==typeof n?function(t,n,e){var r,i,o;return function(){var a=F(this,t),u=e(this);return null==u&&(this.style.removeProperty(t),u=F(this,t)),a===u?null:a===r&&u===i?o:o=n(r=a,i=u)}}(t,r,Dn(this,"style."+t,n)):function(t,n,e){var r,i;return function(){var o=F(this,t);return o===e?null:o===r?i:i=n(r=o,e)}}(t,r,n+""),e)},styleTween:function(t,n,e){var r="style."+(t+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==n)return this.tween(r,null);if("function"!=typeof n)throw new Error;return this.tween(r,function(t,n,e){function r(){var r=this,i=n.apply(r,arguments);return i&&function(n){r.style.setProperty(t,i(n),e)}}return r._value=n,r}(t,n,null==e?"":e))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var n=t(this);this.textContent=null==n?"":n}}(Dn(this,"text",t)):function(t){return function(){this.textContent=t}}(null==t?"":t+""))},remove:function(){return this.on("end.remove",function(t){return function(){var n=this.parentNode;for(var e in this.__transition)if(+e!==t)return;n&&n.removeChild(this)}}(this._id))},tween:function(t,n){var e=this._id;if(t+="",arguments.length<2){for(var r,i=Rn(this.node(),e).tween,o=0,a=i.length;o1e-6)if(Math.abs(s*u-f*c)>1e-6&&i){var h=e-o,d=r-a,p=u*u+f*f,v=h*h+d*d,g=Math.sqrt(p),y=Math.sqrt(l),_=i*Math.tan((Ch-Math.acos((p+l-v)/(2*g*y)))/2),b=_/y,m=_/g;Math.abs(b-1)>1e-6&&(this._+="L"+(t+b*c)+","+(n+b*s)),this._+="A"+i+","+i+",0,0,"+ +(s*h>c*d)+","+(this._x1=t+m*u)+","+(this._y1=n+m*f)}else this._+="L"+(this._x1=t)+","+(this._y1=n);else;},arc:function(t,n,e,r,i,o){t=+t,n=+n;var a=(e=+e)*Math.cos(r),u=e*Math.sin(r),f=t+a,c=n+u,s=1^o,l=o?r-i:i-r;if(e<0)throw new Error("negative radius: "+e);null===this._x1?this._+="M"+f+","+c:(Math.abs(this._x1-f)>1e-6||Math.abs(this._y1-c)>1e-6)&&(this._+="L"+f+","+c),e&&(l<0&&(l=l%Ph+Ph),l>zh?this._+="A"+e+","+e+",0,1,"+s+","+(t-a)+","+(n-u)+"A"+e+","+e+",0,1,"+s+","+(this._x1=f)+","+(this._y1=c):l>1e-6&&(this._+="A"+e+","+e+",0,"+ +(l>=Ch)+","+s+","+(this._x1=t+e*Math.cos(i))+","+(this._y1=n+e*Math.sin(i))))},rect:function(t,n,e,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)+"h"+ +e+"v"+ +r+"h"+-e+"Z"},toString:function(){return this._}};se.prototype=le.prototype={constructor:se,has:function(t){return"$"+t in this},get:function(t){return this["$"+t]},set:function(t,n){return this["$"+t]=n,this},remove:function(t){var n="$"+t;return n in this&&delete this[n]},clear:function(){for(var t in this)"$"===t[0]&&delete this[t]},keys:function(){var t=[];for(var n in this)"$"===n[0]&&t.push(n.slice(1));return t},values:function(){var t=[];for(var n in this)"$"===n[0]&&t.push(this[n]);return t},entries:function(){var t=[];for(var n in this)"$"===n[0]&&t.push({key:n.slice(1),value:this[n]});return t},size:function(){var t=0;for(var n in this)"$"===n[0]&&++t;return t},empty:function(){for(var t in this)if("$"===t[0])return!1;return!0},each:function(t){for(var n in this)"$"===n[0]&&t(this[n],n.slice(1),this)}};var Rh=le.prototype;ge.prototype=ye.prototype={constructor:ge,has:Rh.has,add:function(t){return t+="",this["$"+t]=t,this},remove:Rh.remove,clear:Rh.clear,values:Rh.keys,size:Rh.size,empty:Rh.empty,each:Rh.each};var Lh=Array.prototype.slice,Dh=[[],[[[1,1.5],[.5,1]]],[[[1.5,1],[1,1.5]]],[[[1.5,1],[.5,1]]],[[[1,.5],[1.5,1]]],[[[1,1.5],[.5,1]],[[1,.5],[1.5,1]]],[[[1,.5],[1,1.5]]],[[[1,.5],[.5,1]]],[[[.5,1],[1,.5]]],[[[1,1.5],[1,.5]]],[[[.5,1],[1,.5]],[[1.5,1],[1,1.5]]],[[[1.5,1],[1,.5]]],[[[.5,1],[1.5,1]]],[[[1,1.5],[1.5,1]]],[[[.5,1],[1,1.5]]],[]],Uh={},qh={},Oh=34,Yh=10,Bh=13,Fh=Ee(","),Ih=Fh.parse,jh=Fh.parseRows,Hh=Fh.format,Xh=Fh.formatRows,Gh=Ee("\t"),Vh=Gh.parse,$h=Gh.parseRows,Wh=Gh.format,Zh=Gh.formatRows,Qh=Re(Ih),Jh=Re(Vh),Kh=De("application/xml"),td=De("text/html"),nd=De("image/svg+xml"),ed=Ie.prototype=je.prototype;ed.copy=function(){var t,n,e=new je(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return e;if(!r.length)return e._root=He(r),e;for(t=[{source:r,target:e._root=new Array(4)}];r=t.pop();)for(var i=0;i<4;++i)(n=r.source[i])&&(n.length?t.push({source:n,target:r.target[i]=new Array(4)}):r.target[i]=He(n));return e},ed.add=function(t){var n=+this._x.call(null,t),e=+this._y.call(null,t);return Oe(this.cover(n,e),n,e,t)},ed.addAll=function(t){var n,e,r,i,o=t.length,a=new Array(o),u=new Array(o),f=1/0,c=1/0,s=-1/0,l=-1/0;for(e=0;es&&(s=r),il&&(l=i));for(st||t>i||r>n||n>o))return this;var a,u,f=i-e,c=this._root;switch(u=(n<(r+o)/2)<<1|t<(e+i)/2){case 0:do{a=new Array(4),a[u]=c,c=a}while(f*=2,i=e+f,o=r+f,t>i||n>o);break;case 1:do{a=new Array(4),a[u]=c,c=a}while(f*=2,e=i-f,o=r+f,e>t||n>o);break;case 2:do{a=new Array(4),a[u]=c,c=a}while(f*=2,i=e+f,r=o-f,t>i||r>n);break;case 3:do{a=new Array(4),a[u]=c,c=a}while(f*=2,e=i-f,r=o-f,e>t||r>n)}this._root&&this._root.length&&(this._root=c)}return this._x0=e,this._y0=r,this._x1=i,this._y1=o,this},ed.data=function(){var t=[];return this.visit(function(n){if(!n.length)do{t.push(n.data)}while(n=n.next)}),t},ed.extent=function(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]},ed.find=function(t,n,e){var r,i,o,a,u,f,c,s=this._x0,l=this._y0,h=this._x1,d=this._y1,p=[],v=this._root;for(v&&p.push(new Ye(v,s,l,h,d)),null==e?e=1/0:(s=t-e,l=n-e,h=t+e,d=n+e,e*=e);f=p.pop();)if(!(!(v=f.node)||(i=f.x0)>h||(o=f.y0)>d||(a=f.x1)=y)<<1|t>=g)&&(f=p[p.length-1],p[p.length-1]=p[p.length-1-c],p[p.length-1-c]=f)}else{var _=t-+this._x.call(null,v.data),b=n-+this._y.call(null,v.data),m=_*_+b*b;if(m=(u=(p+g)/2))?p=u:g=u,(s=a>=(f=(v+y)/2))?v=f:y=f,n=d,!(d=d[l=s<<1|c]))return this;if(!d.length)break;(n[l+1&3]||n[l+2&3]||n[l+3&3])&&(e=n,h=l)}for(;d.data!==t;)if(r=d,!(d=d.next))return this;return(i=d.next)&&delete d.next,r?(i?r.next=i:delete r.next,this):n?(i?n[l]=i:delete n[l],(d=n[0]||n[1]||n[2]||n[3])&&d===(n[3]||n[2]||n[1]||n[0])&&!d.length&&(e?e[h]=d:this._root=d),this):(this._root=i,this)},ed.removeAll=function(t){for(var n=0,e=t.length;n0&&(o=0)}return o>0?t.slice(0,o)+t.slice(e+1):t},"%":function(t,n){return(100*t).toFixed(n)},b:function(t){return Math.round(t).toString(2)},c:function(t){return t+""},d:function(t){return Math.round(t).toString(10)},e:function(t,n){return t.toExponential(n)},f:function(t,n){return t.toFixed(n)},g:function(t,n){return t.toPrecision(n)},o:function(t){return Math.round(t).toString(8)},p:function(t,n){return Ke(100*t,n)},r:Ke,s:function(t,n){var e=Qe(t,n);if(!e)return t+"";var r=e[0],i=e[1],o=i-(rd=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,a=r.length;return o===a?r:o>a?r+new Array(o-a+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+Qe(t,Math.max(0,n+o-1))[0]},X:function(t){return Math.round(t).toString(16).toUpperCase()},x:function(t){return Math.round(t).toString(16)}},ud=/^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i;tr.prototype=nr.prototype,nr.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(null==this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(null==this.precision?"":"."+Math.max(0,0|this.precision))+this.type};var fd,cd=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];ir({decimal:".",thousands:",",grouping:[3],currency:["$",""]}),cr.prototype={constructor:cr,reset:function(){this.s=this.t=0},add:function(t){sr(Fd,t,this.t),sr(this,Fd.s,this.s),this.s?this.t+=Fd.t:this.s=Fd.t},valueOf:function(){return this.s}};var sd,ld,hd,dd,pd,vd,gd,yd,_d,bd,md,xd,wd,Md,Ad,Td,Nd,Sd,Ed,kd,Cd,Pd,zd,Rd,Ld,Dd,Ud,qd,Od,Yd,Bd,Fd=new cr,Id=1e-6,jd=1e-12,Hd=Math.PI,Xd=Hd/2,Gd=Hd/4,Vd=2*Hd,$d=180/Hd,Wd=Hd/180,Zd=Math.abs,Qd=Math.atan,Jd=Math.atan2,Kd=Math.cos,tp=Math.ceil,np=Math.exp,ep=Math.log,rp=Math.pow,ip=Math.sin,op=Math.sign||function(t){return t>0?1:t<0?-1:0},ap=Math.sqrt,up=Math.tan,fp={Feature:function(t,n){vr(t.geometry,n)},FeatureCollection:function(t,n){for(var e=t.features,r=-1,i=e.length;++rId?_d=90:dp<-Id&&(gd=-90),Ad[0]=vd,Ad[1]=yd}},vp={sphere:pr,point:Br,lineStart:Ir,lineEnd:Xr,polygonStart:function(){vp.lineStart=Gr,vp.lineEnd=Vr},polygonEnd:function(){vp.lineStart=Ir,vp.lineEnd=Xr}};Jr.invert=Jr;var gp,yp,_p,bp,mp,xp,wp,Mp,Ap,Tp,Np,Sp=fr(),Ep=hi(function(){return!0},function(t){var n,e=NaN,r=NaN,i=NaN;return{lineStart:function(){t.lineStart(),n=1},point:function(o,a){var u=o>0?Hd:-Hd,f=Zd(o-e);Zd(f-Hd)0?Xd:-Xd),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(u,r),t.point(o,r),n=0):i!==u&&f>=Hd&&(Zd(e-i)Id?Qd((ip(n)*(o=Kd(r))*ip(e)-ip(r)*(i=Kd(n))*ip(t))/(i*o*a)):(n+r)/2}(e,r,o,a),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(u,r),n=0),t.point(e=o,r=a),i=u},lineEnd:function(){t.lineEnd(),e=r=NaN},clean:function(){return 2-n}}},function(t,n,e,r){var i;if(null==t)i=e*Xd,r.point(-Hd,i),r.point(0,i),r.point(Hd,i),r.point(Hd,0),r.point(Hd,-i),r.point(0,-i),r.point(-Hd,-i),r.point(-Hd,0),r.point(-Hd,i);else if(Zd(t[0]-n[0])>Id){var o=t[0]Ip&&(Ip=t),njp&&(jp=n)},lineStart:pr,lineEnd:pr,polygonStart:pr,polygonEnd:pr,result:function(){var t=[[Bp,Fp],[Ip,jp]];return Ip=jp=-(Fp=Bp=1/0),t}},Xp=0,Gp=0,Vp=0,$p=0,Wp=0,Zp=0,Qp=0,Jp=0,Kp=0,tv={point:Ui,lineStart:qi,lineEnd:Bi,polygonStart:function(){tv.lineStart=Fi,tv.lineEnd=Ii},polygonEnd:function(){tv.point=Ui,tv.lineStart=qi,tv.lineEnd=Bi},result:function(){var t=Kp?[Qp/Kp,Jp/Kp]:Zp?[$p/Zp,Wp/Zp]:Vp?[Xp/Vp,Gp/Vp]:[NaN,NaN];return Xp=Gp=Vp=$p=Wp=Zp=Qp=Jp=Kp=0,t}};Xi.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(t,n){switch(this._point){case 0:this._context.moveTo(t,n),this._point=1;break;case 1:this._context.lineTo(t,n);break;default:this._context.moveTo(t+this._radius,n),this._context.arc(t,n,this._radius,0,Vd)}},result:pr};var nv,ev,rv,iv,ov,av=fr(),uv={point:pr,lineStart:function(){uv.point=Gi},lineEnd:function(){nv&&Vi(ev,rv),uv.point=pr},polygonStart:function(){nv=!0},polygonEnd:function(){nv=null},result:function(){var t=+av;return av.reset(),t}};$i.prototype={_radius:4.5,_circle:Wi(4.5),pointRadius:function(t){return(t=+t)!==this._radius&&(this._radius=t,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._string.push("Z"),this._point=NaN},point:function(t,n){switch(this._point){case 0:this._string.push("M",t,",",n),this._point=1;break;case 1:this._string.push("L",t,",",n);break;default:null==this._circle&&(this._circle=Wi(this._radius)),this._string.push("M",t,",",n,this._circle)}},result:function(){if(this._string.length){var t=this._string.join("");return this._string=[],t}return null}},Qi.prototype={constructor:Qi,point:function(t,n){this.stream.point(t,n)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var fv=16,cv=Kd(30*Wd),sv=Zi({point:function(t,n){this.stream.point(t*Wd,n*Wd)}}),lv=lo(function(t){return ap(2/(1+t))});lv.invert=ho(function(t){return 2*hr(t/2)});var hv=lo(function(t){return(t=lr(t))&&t/ip(t)});hv.invert=ho(function(t){return t}),po.invert=function(t,n){return[t,2*Qd(np(n))-Xd]},_o.invert=_o,mo.invert=ho(Qd),wo.invert=function(t,n){var e,r=n,i=25;do{var o=r*r,a=o*o;r-=e=(r*(1.007226+o*(.015085+a*(.028874*o-.044475-.005916*a)))-n)/(1.007226+o*(.045255+a*(.259866*o-.311325-.005916*11*a)))}while(Zd(e)>Id&&--i>0);return[t/(.8707+(o=r*r)*(o*(o*o*o*(.003971-.001529*o)-.013791)-.131979)),r]},Mo.invert=ho(hr),Ao.invert=ho(function(t){return 2*Qd(t)}),To.invert=function(t,n){return[-n,2*Qd(np(t))-Xd]},Lo.prototype=Co.prototype={constructor:Lo,count:function(){return this.eachAfter(ko)},each:function(t){var n,e,r,i,o=this,a=[o];do{for(n=a.reverse(),a=[];o=n.pop();)if(t(o),e=o.children)for(r=0,i=e.length;r=0;--e)i.push(n[e]);return this},sum:function(t){return this.eachAfter(function(n){for(var e=+t(n.data)||0,r=n.children,i=r&&r.length;--i>=0;)e+=r[i].value;n.value=e})},sort:function(t){return this.eachBefore(function(n){n.children&&n.children.sort(t)})},path:function(t){for(var n=this,e=function(t,n){if(t===n)return t;var e=t.ancestors(),r=n.ancestors(),i=null;for(t=e.pop(),n=r.pop();t===n;)i=t,t=e.pop(),n=r.pop();return i}(n,t),r=[n];n!==e;)n=n.parent,r.push(n);for(var i=r.length;t!==e;)r.splice(i,0,t),t=t.parent;return r},ancestors:function(){for(var t=this,n=[t];t=t.parent;)n.push(t);return n},descendants:function(){var t=[];return this.each(function(n){t.push(n)}),t},leaves:function(){var t=[];return this.eachBefore(function(n){n.children||t.push(n)}),t},links:function(){var t=this,n=[];return t.each(function(e){e!==t&&n.push({source:e.parent,target:e})}),n},copy:function(){return Co(this).eachBefore(zo)}};var dv=Array.prototype.slice,pv="$",vv={depth:-1},gv={};fa.prototype=Object.create(Lo.prototype);var yv=(1+Math.sqrt(5))/2,_v=function t(n){function e(t,e,r,i,o){sa(n,t,e,r,i,o)}return e.ratio=function(n){return t((n=+n)>1?n:1)},e}(yv),bv=function t(n){function e(t,e,r,i,o){if((a=t._squarify)&&a.ratio===n)for(var a,u,f,c,s,l=-1,h=a.length,d=t.value;++l1?n:1)},e}(yv),mv=function t(n){function e(t,e){return t=null==t?0:+t,e=null==e?1:+e,1===arguments.length?(e=t,t=0):e-=t,function(){return n()*e+t}}return e.source=t,e}(pa),xv=function t(n){function e(t,e){var r,i;return t=null==t?0:+t,e=null==e?1:+e,function(){var o;if(null!=r)o=r,r=null;else do{r=2*n()-1,o=2*n()-1,i=r*r+o*o}while(!i||i>1);return t+e*o*Math.sqrt(-2*Math.log(i)/i)}}return e.source=t,e}(pa),wv=function t(n){function e(){var t=xv.source(n).apply(this,arguments);return function(){return Math.exp(t())}}return e.source=t,e}(pa),Mv=function t(n){function e(t){return function(){for(var e=0,r=0;r0?t>1?Fa(function(n){n.setTime(Math.floor(n/t)*t)},function(n,e){n.setTime(+n+e*t)},function(n,e){return(e-n)/t}):Rv:null};var Lv=Rv.range,Dv=6e4,Uv=6048e5,qv=Fa(function(t){t.setTime(1e3*Math.floor(t/1e3))},function(t,n){t.setTime(+t+1e3*n)},function(t,n){return(n-t)/1e3},function(t){return t.getUTCSeconds()}),Ov=qv.range,Yv=Fa(function(t){t.setTime(Math.floor(t/Dv)*Dv)},function(t,n){t.setTime(+t+n*Dv)},function(t,n){return(n-t)/Dv},function(t){return t.getMinutes()}),Bv=Yv.range,Fv=Fa(function(t){var n=t.getTimezoneOffset()*Dv%36e5;n<0&&(n+=36e5),t.setTime(36e5*Math.floor((+t-n)/36e5)+n)},function(t,n){t.setTime(+t+36e5*n)},function(t,n){return(n-t)/36e5},function(t){return t.getHours()}),Iv=Fv.range,jv=Fa(function(t){t.setHours(0,0,0,0)},function(t,n){t.setDate(t.getDate()+n)},function(t,n){return(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*Dv)/864e5},function(t){return t.getDate()-1}),Hv=jv.range,Xv=Ia(0),Gv=Ia(1),Vv=Ia(2),$v=Ia(3),Wv=Ia(4),Zv=Ia(5),Qv=Ia(6),Jv=Xv.range,Kv=Gv.range,tg=Vv.range,ng=$v.range,eg=Wv.range,rg=Zv.range,ig=Qv.range,og=Fa(function(t){t.setDate(1),t.setHours(0,0,0,0)},function(t,n){t.setMonth(t.getMonth()+n)},function(t,n){return n.getMonth()-t.getMonth()+12*(n.getFullYear()-t.getFullYear())},function(t){return t.getMonth()}),ag=og.range,ug=Fa(function(t){t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,n){t.setFullYear(t.getFullYear()+n)},function(t,n){return n.getFullYear()-t.getFullYear()},function(t){return t.getFullYear()});ug.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Fa(function(n){n.setFullYear(Math.floor(n.getFullYear()/t)*t),n.setMonth(0,1),n.setHours(0,0,0,0)},function(n,e){n.setFullYear(n.getFullYear()+e*t)}):null};var fg=ug.range,cg=Fa(function(t){t.setUTCSeconds(0,0)},function(t,n){t.setTime(+t+n*Dv)},function(t,n){return(n-t)/Dv},function(t){return t.getUTCMinutes()}),sg=cg.range,lg=Fa(function(t){t.setUTCMinutes(0,0,0)},function(t,n){t.setTime(+t+36e5*n)},function(t,n){return(n-t)/36e5},function(t){return t.getUTCHours()}),hg=lg.range,dg=Fa(function(t){t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCDate(t.getUTCDate()+n)},function(t,n){return(n-t)/864e5},function(t){return t.getUTCDate()-1}),pg=dg.range,vg=ja(0),gg=ja(1),yg=ja(2),_g=ja(3),bg=ja(4),mg=ja(5),xg=ja(6),wg=vg.range,Mg=gg.range,Ag=yg.range,Tg=_g.range,Ng=bg.range,Sg=mg.range,Eg=xg.range,kg=Fa(function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCMonth(t.getUTCMonth()+n)},function(t,n){return n.getUTCMonth()-t.getUTCMonth()+12*(n.getUTCFullYear()-t.getUTCFullYear())},function(t){return t.getUTCMonth()}),Cg=kg.range,Pg=Fa(function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n)},function(t,n){return n.getUTCFullYear()-t.getUTCFullYear()},function(t){return t.getUTCFullYear()});Pg.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Fa(function(n){n.setUTCFullYear(Math.floor(n.getUTCFullYear()/t)*t),n.setUTCMonth(0,1),n.setUTCHours(0,0,0,0)},function(n,e){n.setUTCFullYear(n.getUTCFullYear()+e*t)}):null};var zg,Rg=Pg.range,Lg={"-":"",_:" ",0:"0"},Dg=/^\s*\d+/,Ug=/^%/,qg=/[\\^$*+?|[\]().{}]/g;tf({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});var Og="%Y-%m-%dT%H:%M:%S.%LZ",Yg=Date.prototype.toISOString?function(t){return t.toISOString()}:t.utcFormat(Og),Bg=+new Date("2000-01-01T00:00:00.000Z")?function(t){var n=new Date(t);return isNaN(n)?null:n}:t.utcParse(Og),Fg=1e3,Ig=60*Fg,jg=60*Ig,Hg=24*jg,Xg=7*Hg,Gg=30*Hg,Vg=365*Hg,$g=af("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"),Wg=af("7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666"),Zg=af("1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666"),Qg=af("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928"),Jg=af("fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2"),Kg=af("b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc"),ty=af("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999"),ny=af("66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3"),ey=af("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"),ry=new Array(3).concat("d8b365f5f5f55ab4ac","a6611adfc27d80cdc1018571","a6611adfc27df5f5f580cdc1018571","8c510ad8b365f6e8c3c7eae55ab4ac01665e","8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e","8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e","8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e","5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30","5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30").map(af),iy=uf(ry),oy=new Array(3).concat("af8dc3f7f7f77fbf7b","7b3294c2a5cfa6dba0008837","7b3294c2a5cff7f7f7a6dba0008837","762a83af8dc3e7d4e8d9f0d37fbf7b1b7837","762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837","762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837","762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837","40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b","40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b").map(af),ay=uf(oy),uy=new Array(3).concat("e9a3c9f7f7f7a1d76a","d01c8bf1b6dab8e1864dac26","d01c8bf1b6daf7f7f7b8e1864dac26","c51b7de9a3c9fde0efe6f5d0a1d76a4d9221","c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221","c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221","c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221","8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419","8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419").map(af),fy=uf(uy),cy=new Array(3).concat("998ec3f7f7f7f1a340","5e3c99b2abd2fdb863e66101","5e3c99b2abd2f7f7f7fdb863e66101","542788998ec3d8daebfee0b6f1a340b35806","542788998ec3d8daebf7f7f7fee0b6f1a340b35806","5427888073acb2abd2d8daebfee0b6fdb863e08214b35806","5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806","2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08","2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08").map(af),sy=uf(cy),ly=new Array(3).concat("ef8a62f7f7f767a9cf","ca0020f4a58292c5de0571b0","ca0020f4a582f7f7f792c5de0571b0","b2182bef8a62fddbc7d1e5f067a9cf2166ac","b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac","b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac","b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac","67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061","67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061").map(af),hy=uf(ly),dy=new Array(3).concat("ef8a62ffffff999999","ca0020f4a582bababa404040","ca0020f4a582ffffffbababa404040","b2182bef8a62fddbc7e0e0e09999994d4d4d","b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d","b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d","b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d","67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a","67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a").map(af),py=uf(dy),vy=new Array(3).concat("fc8d59ffffbf91bfdb","d7191cfdae61abd9e92c7bb6","d7191cfdae61ffffbfabd9e92c7bb6","d73027fc8d59fee090e0f3f891bfdb4575b4","d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4","d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4","d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4","a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695","a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695").map(af),gy=uf(vy),yy=new Array(3).concat("fc8d59ffffbf91cf60","d7191cfdae61a6d96a1a9641","d7191cfdae61ffffbfa6d96a1a9641","d73027fc8d59fee08bd9ef8b91cf601a9850","d73027fc8d59fee08bffffbfd9ef8b91cf601a9850","d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850","d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850","a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837","a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837").map(af),_y=uf(yy),by=new Array(3).concat("fc8d59ffffbf99d594","d7191cfdae61abdda42b83ba","d7191cfdae61ffffbfabdda42b83ba","d53e4ffc8d59fee08be6f59899d5943288bd","d53e4ffc8d59fee08bffffbfe6f59899d5943288bd","d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd","d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd","9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2","9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2").map(af),my=uf(by),xy=new Array(3).concat("e5f5f999d8c92ca25f","edf8fbb2e2e266c2a4238b45","edf8fbb2e2e266c2a42ca25f006d2c","edf8fbccece699d8c966c2a42ca25f006d2c","edf8fbccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b").map(af),wy=uf(xy),My=new Array(3).concat("e0ecf49ebcda8856a7","edf8fbb3cde38c96c688419d","edf8fbb3cde38c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b").map(af),Ay=uf(My),Ty=new Array(3).concat("e0f3dba8ddb543a2ca","f0f9e8bae4bc7bccc42b8cbe","f0f9e8bae4bc7bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081").map(af),Ny=uf(Ty),Sy=new Array(3).concat("fee8c8fdbb84e34a33","fef0d9fdcc8afc8d59d7301f","fef0d9fdcc8afc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000").map(af),Ey=uf(Sy),ky=new Array(3).concat("ece2f0a6bddb1c9099","f6eff7bdc9e167a9cf02818a","f6eff7bdc9e167a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636").map(af),Cy=uf(ky),Py=new Array(3).concat("ece7f2a6bddb2b8cbe","f1eef6bdc9e174a9cf0570b0","f1eef6bdc9e174a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858").map(af),zy=uf(Py),Ry=new Array(3).concat("e7e1efc994c7dd1c77","f1eef6d7b5d8df65b0ce1256","f1eef6d7b5d8df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f").map(af),Ly=uf(Ry),Dy=new Array(3).concat("fde0ddfa9fb5c51b8a","feebe2fbb4b9f768a1ae017e","feebe2fbb4b9f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a").map(af),Uy=uf(Dy),qy=new Array(3).concat("edf8b17fcdbb2c7fb8","ffffcca1dab441b6c4225ea8","ffffcca1dab441b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58").map(af),Oy=uf(qy),Yy=new Array(3).concat("f7fcb9addd8e31a354","ffffccc2e69978c679238443","ffffccc2e69978c67931a354006837","ffffccd9f0a3addd8e78c67931a354006837","ffffccd9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529").map(af),By=uf(Yy),Fy=new Array(3).concat("fff7bcfec44fd95f0e","ffffd4fed98efe9929cc4c02","ffffd4fed98efe9929d95f0e993404","ffffd4fee391fec44ffe9929d95f0e993404","ffffd4fee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506").map(af),Iy=uf(Fy),jy=new Array(3).concat("ffeda0feb24cf03b20","ffffb2fecc5cfd8d3ce31a1c","ffffb2fecc5cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026").map(af),Hy=uf(jy),Xy=new Array(3).concat("deebf79ecae13182bd","eff3ffbdd7e76baed62171b5","eff3ffbdd7e76baed63182bd08519c","eff3ffc6dbef9ecae16baed63182bd08519c","eff3ffc6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b").map(af),Gy=uf(Xy),Vy=new Array(3).concat("e5f5e0a1d99b31a354","edf8e9bae4b374c476238b45","edf8e9bae4b374c47631a354006d2c","edf8e9c7e9c0a1d99b74c47631a354006d2c","edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b").map(af),$y=uf(Vy),Wy=new Array(3).concat("f0f0f0bdbdbd636363","f7f7f7cccccc969696525252","f7f7f7cccccc969696636363252525","f7f7f7d9d9d9bdbdbd969696636363252525","f7f7f7d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000").map(af),Zy=uf(Wy),Qy=new Array(3).concat("efedf5bcbddc756bb1","f2f0f7cbc9e29e9ac86a51a3","f2f0f7cbc9e29e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d").map(af),Jy=uf(Qy),Ky=new Array(3).concat("fee0d2fc9272de2d26","fee5d9fcae91fb6a4acb181d","fee5d9fcae91fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d").map(af),t_=uf(Ky),n_=new Array(3).concat("fee6cefdae6be6550d","feeddefdbe85fd8d3cd94701","feeddefdbe85fd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704").map(af),e_=uf(n_),r_=bl(Wt(300,.5,0),Wt(-240,.5,1)),i_=bl(Wt(-100,.75,.35),Wt(80,1.5,.8)),o_=bl(Wt(260,.75,.35),Wt(80,1.5,.8)),a_=Wt(),u_=ff(af("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),f_=ff(af("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),c_=ff(af("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),s_=ff(af("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),l_=Math.abs,h_=Math.atan2,d_=Math.cos,p_=Math.max,v_=Math.min,g_=Math.sin,y_=Math.sqrt,__=1e-12,b_=Math.PI,m_=b_/2,x_=2*b_;yf.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;default:this._context.lineTo(t,n)}}};var w_=Nf(_f);Tf.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,n){this._curve.point(n*Math.sin(t),n*-Math.cos(t))}};var M_=Array.prototype.slice,A_={draw:function(t,n){var e=Math.sqrt(n/b_);t.moveTo(e,0),t.arc(0,0,e,0,x_)}},T_={draw:function(t,n){var e=Math.sqrt(n/5)/2;t.moveTo(-3*e,-e),t.lineTo(-e,-e),t.lineTo(-e,-3*e),t.lineTo(e,-3*e),t.lineTo(e,-e),t.lineTo(3*e,-e),t.lineTo(3*e,e),t.lineTo(e,e),t.lineTo(e,3*e),t.lineTo(-e,3*e),t.lineTo(-e,e),t.lineTo(-3*e,e),t.closePath()}},N_=Math.sqrt(1/3),S_=2*N_,E_={draw:function(t,n){var e=Math.sqrt(n/S_),r=e*N_;t.moveTo(0,-e),t.lineTo(r,0),t.lineTo(0,e),t.lineTo(-r,0),t.closePath()}},k_=Math.sin(b_/10)/Math.sin(7*b_/10),C_=Math.sin(x_/10)*k_,P_=-Math.cos(x_/10)*k_,z_={draw:function(t,n){var e=Math.sqrt(.8908130915292852*n),r=C_*e,i=P_*e;t.moveTo(0,-e),t.lineTo(r,i);for(var o=1;o<5;++o){var a=x_*o/5,u=Math.cos(a),f=Math.sin(a);t.lineTo(f*e,-u*e),t.lineTo(u*r-f*i,f*r+u*i)}t.closePath()}},R_={draw:function(t,n){var e=Math.sqrt(n),r=-e/2;t.rect(r,r,e,e)}},L_=Math.sqrt(3),D_={draw:function(t,n){var e=-Math.sqrt(n/(3*L_));t.moveTo(0,2*e),t.lineTo(-L_*e,-e),t.lineTo(L_*e,-e),t.closePath()}},U_=Math.sqrt(3)/2,q_=1/Math.sqrt(12),O_=3*(q_/2+1),Y_={draw:function(t,n){var e=Math.sqrt(n/O_),r=e/2,i=e*q_,o=r,a=e*q_+e,u=-o,f=a;t.moveTo(r,i),t.lineTo(o,a),t.lineTo(u,f),t.lineTo(-.5*r-U_*i,U_*r+-.5*i),t.lineTo(-.5*o-U_*a,U_*o+-.5*a),t.lineTo(-.5*u-U_*f,U_*u+-.5*f),t.lineTo(-.5*r+U_*i,-.5*i-U_*r),t.lineTo(-.5*o+U_*a,-.5*a-U_*o),t.lineTo(-.5*u+U_*f,-.5*f-U_*u),t.closePath()}},B_=[A_,T_,E_,R_,z_,D_,Y_];Yf.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Of(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Of(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}},Bf.prototype={areaStart:qf,areaEnd:qf,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._x2=t,this._y2=n;break;case 1:this._point=2,this._x3=t,this._y3=n;break;case 2:this._point=3,this._x4=t,this._y4=n,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+n)/6);break;default:Of(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}},Ff.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var e=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+n)/6;this._line?this._context.lineTo(e,r):this._context.moveTo(e,r);break;case 3:this._point=4;default:Of(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}},If.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,n=this._y,e=t.length-1;if(e>0)for(var r,i=t[0],o=n[0],a=t[e]-i,u=n[e]-o,f=-1;++f<=e;)r=f/e,this._basis.point(this._beta*t[f]+(1-this._beta)*(i+r*a),this._beta*n[f]+(1-this._beta)*(o+r*u));this._x=this._y=null,this._basis.lineEnd()},point:function(t,n){this._x.push(+t),this._y.push(+n)}};var F_=function t(n){function e(t){return 1===n?new Yf(t):new If(t,n)}return e.beta=function(n){return t(+n)},e}(.85);Hf.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:jf(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2,this._x1=t,this._y1=n;break;case 2:this._point=3;default:jf(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var I_=function t(n){function e(t){return new Hf(t,n)}return e.tension=function(n){return t(+n)},e}(0);Xf.prototype={areaStart:qf,areaEnd:qf,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._x3=t,this._y3=n;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=n);break;case 2:this._point=3,this._x5=t,this._y5=n;break;default:jf(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var j_=function t(n){function e(t){return new Xf(t,n)}return e.tension=function(n){return t(+n)},e}(0);Gf.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:jf(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var H_=function t(n){function e(t){return new Gf(t,n)}return e.tension=function(n){return t(+n)},e}(0);$f.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){if(t=+t,n=+n,this._point){var e=this._x2-t,r=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3;default:Vf(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var X_=function t(n){function e(t){return n?new $f(t,n):new Hf(t,0)}return e.alpha=function(n){return t(+n)},e}(.5);Wf.prototype={areaStart:qf,areaEnd:qf,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,n){if(t=+t,n=+n,this._point){var e=this._x2-t,r=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=n;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=n);break;case 2:this._point=3,this._x5=t,this._y5=n;break;default:Vf(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var G_=function t(n){function e(t){return n?new Wf(t,n):new Xf(t,0)}return e.alpha=function(n){return t(+n)},e}(.5);Zf.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){if(t=+t,n=+n,this._point){var e=this._x2-t,r=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Vf(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var V_=function t(n){function e(t){return n?new Zf(t,n):new Gf(t,0)}return e.alpha=function(n){return t(+n)},e}(.5);Qf.prototype={areaStart:qf,areaEnd:qf,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,n){t=+t,n=+n,this._point?this._context.lineTo(t,n):(this._point=1,this._context.moveTo(t,n))}},ec.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:nc(this,this._t0,tc(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){var e=NaN;if(t=+t,n=+n,t!==this._x1||n!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3,nc(this,tc(this,e=Kf(this,t,n)),e);break;default:nc(this,this._t0,e=Kf(this,t,n))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n,this._t0=e}}},(rc.prototype=Object.create(ec.prototype)).point=function(t,n){ec.prototype.point.call(this,n,t)},ic.prototype={moveTo:function(t,n){this._context.moveTo(n,t)},closePath:function(){this._context.closePath()},lineTo:function(t,n){this._context.lineTo(n,t)},bezierCurveTo:function(t,n,e,r,i,o){this._context.bezierCurveTo(n,t,r,e,o,i)}},oc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,n=this._y,e=t.length;if(e)if(this._line?this._context.lineTo(t[0],n[0]):this._context.moveTo(t[0],n[0]),2===e)this._context.lineTo(t[1],n[1]);else for(var r=ac(t),i=ac(n),o=0,a=1;a=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,n),this._context.lineTo(t,n);else{var e=this._x*(1-this._t)+t*this._t;this._context.lineTo(e,this._y),this._context.lineTo(e,n)}}this._x=t,this._y=n}},gc.prototype={constructor:gc,insert:function(t,n){var e,r,i;if(t){if(n.P=t,n.N=t.N,t.N&&(t.N.P=n),t.N=n,t.R){for(t=t.R;t.L;)t=t.L;t.L=n}else t.R=n;e=t}else this._?(t=mc(this._),n.P=null,n.N=t,t.P=t.L=n,e=t):(n.P=n.N=null,this._=n,e=null);for(n.L=n.R=null,n.U=e,n.C=!0,t=n;e&&e.C;)e===(r=e.U).L?(i=r.R)&&i.C?(e.C=i.C=!1,r.C=!0,t=r):(t===e.R&&(_c(this,e),e=(t=e).U),e.C=!1,r.C=!0,bc(this,r)):(i=r.L)&&i.C?(e.C=i.C=!1,r.C=!0,t=r):(t===e.L&&(bc(this,e),e=(t=e).U),e.C=!1,r.C=!0,_c(this,r)),e=t.U;this._.C=!1},remove:function(t){t.N&&(t.N.P=t.P),t.P&&(t.P.N=t.N),t.N=t.P=null;var n,e,r,i=t.U,o=t.L,a=t.R;if(e=o?a?mc(a):o:a,i?i.L===t?i.L=e:i.R=e:this._=e,o&&a?(r=e.C,e.C=t.C,e.L=o,o.U=e,e!==a?(i=e.U,e.U=t.U,t=e.R,i.L=t,e.R=a,a.U=e):(e.U=i,i=e,t=e.R)):(r=t.C,t=e),t&&(t.U=i),!r)if(t&&t.C)t.C=!1;else{do{if(t===this._)break;if(t===i.L){if((n=i.R).C&&(n.C=!1,i.C=!0,_c(this,i),n=i.R),n.L&&n.L.C||n.R&&n.R.C){n.R&&n.R.C||(n.L.C=!1,n.C=!0,bc(this,n),n=i.R),n.C=i.C,i.C=n.R.C=!1,_c(this,i),t=this._;break}}else if((n=i.L).C&&(n.C=!1,i.C=!0,bc(this,i),n=i.L),n.L&&n.L.C||n.R&&n.R.C){n.L&&n.L.C||(n.R.C=!1,n.C=!0,_c(this,n),n=i.L),n.C=i.C,i.C=n.L.C=!1,bc(this,i),t=this._;break}n.C=!0,t=i,i=i.U}while(!t.C);t&&(t.C=!1)}}};var $_,W_,Z_,Q_,J_,K_=[],tb=[],nb=1e-6,eb=1e-12;Oc.prototype={constructor:Oc,polygons:function(){var t=this.edges;return this.cells.map(function(n){var e=n.halfedges.map(function(e){return Sc(n,t[e])});return e.data=n.site.data,e})},triangles:function(){var t=[],n=this.edges;return this.cells.forEach(function(e,r){if(o=(i=e.halfedges).length)for(var i,o,a,u=e.site,f=-1,c=n[i[o-1]],s=c.left===u?c.right:c.left;++f=u)return null;var f=t-i.site[0],c=n-i.site[1],s=f*f+c*c;do{i=o.cells[r=a],a=null,i.halfedges.forEach(function(e){var r=o.edges[e],u=r.left;if(u!==i.site&&u||(u=r.right)){var f=t-u[0],c=n-u[1],l=f*f+c*c;lt?1:n>=t?0:NaN},t.deviation=a,t.extent=u,t.histogram=function(){function t(t){var i,o,a=t.length,u=new Array(a);for(i=0;il;)h.pop(),--p;var v,g=new Array(p+1);for(i=0;i<=p;++i)(v=g[i]=[]).x0=i>0?h[i-1]:c,v.x1=i=o.length)return null!=e&&n.sort(e),null!=r?r(n):n;for(var f,c,s,l=-1,h=n.length,d=o[i++],p=le(),v=a();++lo.length)return t;var i,u=a[e-1];return null!=r&&e>=o.length?i=t.entries():(i=[],t.each(function(t,r){i.push({key:r,values:n(t,e)})})),null!=u?i.sort(function(t,n){return u(t.key,n.key)}):i}var e,r,i,o=[],a=[];return i={object:function(n){return t(n,0,he,de)},map:function(n){return t(n,0,pe,ve)},entries:function(e){return n(t(e,0,pe,ve),0)},key:function(t){return o.push(t),i},sortKeys:function(t){return a[o.length-1]=t,i},sortValues:function(t){return e=t,i},rollup:function(t){return r=t,i}}},t.set=ye,t.map=le,t.keys=function(t){var n=[];for(var e in t)n.push(e);return n},t.values=function(t){var n=[];for(var e in t)n.push(t[e]);return n},t.entries=function(t){var n=[];for(var e in t)n.push({key:e,value:t[e]});return n},t.color=kt,t.rgb=Rt,t.hsl=Ut,t.lab=Bt,t.hcl=Vt,t.lch=function(t,n,e,r){return 1===arguments.length?Gt(t):new $t(e,n,t,null==r?1:r)},t.gray=function(t,n){return new Ft(t,0,0,null==n?1:n)},t.cubehelix=Wt,t.contours=we,t.contourDensity=function(){function t(t){var e=new Float32Array(v*y),r=new Float32Array(v*y);t.forEach(function(t,n,r){var i=a(t,n,r)+p>>h,o=u(t,n,r)+p>>h;i>=0&&i=0&&o>h),Ae({width:v,height:y,data:r},{width:v,height:y,data:e},l>>h),Me({width:v,height:y,data:e},{width:v,height:y,data:r},l>>h),Ae({width:v,height:y,data:r},{width:v,height:y,data:e},l>>h),Me({width:v,height:y,data:e},{width:v,height:y,data:r},l>>h),Ae({width:v,height:y,data:r},{width:v,height:y,data:e},l>>h);var i=_(e);if(!Array.isArray(i)){var o=g(e);i=d(0,o,i),(i=s(0,Math.floor(o/i)*i,i)).shift()}return we().thresholds(i).size([v,y])(e).map(n)}function n(t){return t.value*=Math.pow(2,-2*h),t.coordinates.forEach(e),t}function e(t){t.forEach(r)}function r(t){t.forEach(i)}function i(t){t[0]=t[0]*Math.pow(2,h)-p,t[1]=t[1]*Math.pow(2,h)-p}function o(){return p=3*l,v=f+2*p>>h,y=c+2*p>>h,t}var a=Te,u=Ne,f=960,c=500,l=20,h=2,p=3*l,v=f+2*p>>h,y=c+2*p>>h,_=be(20);return t.x=function(n){return arguments.length?(a="function"==typeof n?n:be(+n),t):a},t.y=function(n){return arguments.length?(u="function"==typeof n?n:be(+n),t):u},t.size=function(t){if(!arguments.length)return[f,c];var n=Math.ceil(t[0]),e=Math.ceil(t[1]);if(!(n>=0||n>=0))throw new Error("invalid size");return f=n,c=e,o()},t.cellSize=function(t){if(!arguments.length)return 1<=1))throw new Error("invalid cell size");return h=Math.floor(Math.log(t)/Math.LN2),o()},t.thresholds=function(n){return arguments.length?(_="function"==typeof n?n:Array.isArray(n)?be(Lh.call(n)):be(n),t):_},t.bandwidth=function(t){if(!arguments.length)return Math.sqrt(l*(l+1));if(!((t=+t)>=0))throw new Error("invalid bandwidth");return l=Math.round((Math.sqrt(4*t*t+1)-1)/2),o()},t},t.dispatch=N,t.drag=function(){function n(t){t.on("mousedown.drag",e).filter(g).on("touchstart.drag",o).on("touchmove.drag",a).on("touchend.drag touchcancel.drag",u).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function e(){if(!h&&d.apply(this,arguments)){var n=f("mouse",p.apply(this,arguments),pt,this,arguments);n&&(ct(t.event.view).on("mousemove.drag",r,!0).on("mouseup.drag",i,!0),_t(t.event.view),gt(),l=!1,c=t.event.clientX,s=t.event.clientY,n("start"))}}function r(){if(yt(),!l){var n=t.event.clientX-c,e=t.event.clientY-s;l=n*n+e*e>m}y.mouse("drag")}function i(){ct(t.event.view).on("mousemove.drag mouseup.drag",null),bt(t.event.view,l),yt(),y.mouse("end")}function o(){if(d.apply(this,arguments)){var n,e,r=t.event.changedTouches,i=p.apply(this,arguments),o=r.length;for(n=0;nf+d||ic+d||or.index){var p=f-u.x-u.vx,v=c-u.y-u.vy,g=p*p+v*v;gt.r&&(t.r=t[n].r)}function r(){if(i){var n,e,r=i.length;for(o=new Array(r),n=0;n=s)){(t.data!==o||t.next)&&(0===i&&(i=qe(),d+=i*i),0===f&&(f=qe(),d+=f*f),d1?(null==n?l.remove(t):l.set(t,i(n)),o):l.get(t)},find:function(n,e,r){var i,o,a,u,f,c=0,s=t.length;for(null==r?r=1/0:r*=r,c=0;c1?(d.on(t,n),o):d.on(t)}}},t.forceX=function(t){function n(t){for(var n,e=0,a=r.length;eqr(r[0],r[1])&&(r[1]=i[1]),qr(i[0],r[1])>qr(r[0],r[1])&&(r[0]=i[0])):o.push(r=i);for(a=-1/0,n=0,r=o[e=o.length-1];n<=e;r=i,++n)i=o[n],(u=qr(r[1],i[0]))>a&&(a=u,vd=i[0],yd=r[1])}return Md=Ad=null,vd===1/0||gd===1/0?[[NaN,NaN],[NaN,NaN]]:[[vd,gd],[yd,_d]]},t.geoCentroid=function(t){Td=Nd=Sd=Ed=kd=Cd=Pd=zd=Rd=Ld=Dd=0,_r(t,vp);var n=Rd,e=Ld,r=Dd,i=n*n+e*e+r*r;return i=.12&&i<.234&&r>=-.425&&r<-.214?c:i>=.166&&i<.234&&r>=-.214&&r<-.115?s:f).invert(t)},t.stream=function(t){return e&&r===t?e:e=function(t){var n=t.length;return{point:function(e,r){for(var i=-1;++i2?t[2]+90:90]):(t=e(),[t[0],t[1],t[2]-90])},e([0,0,90]).scale(159.155)},t.geoTransverseMercatorRaw=To,t.geoRotation=ri,t.geoStream=_r,t.geoTransform=function(t){return{stream:Zi(t)}},t.cluster=function(){function t(t){var o,a=0;t.eachAfter(function(t){var e=t.children;e?(t.x=function(t){return t.reduce(So,0)/t.length}(e),t.y=function(t){return 1+t.reduce(Eo,0)}(e)):(t.x=o?a+=n(t,o):0,t.y=0,o=t)});var u=function(t){for(var n;n=t.children;)t=n[0];return t}(t),f=function(t){for(var n;n=t.children;)t=n[n.length-1];return t}(t),c=u.x-n(u,f)/2,s=f.x+n(f,u)/2;return t.eachAfter(i?function(n){n.x=(n.x-t.x)*e,n.y=(t.y-n.y)*r}:function(n){n.x=(n.x-c)/(s-c)*e,n.y=(1-(t.y?n.y/t.y:1))*r})}var n=No,e=1,r=1,i=!1;return t.separation=function(e){return arguments.length?(n=e,t):n},t.size=function(n){return arguments.length?(i=!1,e=+n[0],r=+n[1],t):i?null:[e,r]},t.nodeSize=function(n){return arguments.length?(i=!0,e=+n[0],r=+n[1],t):i?[e,r]:null},t},t.hierarchy=Co,t.pack=function(){function t(t){return t.x=e/2,t.y=r/2,n?t.eachBefore(Zo(n)).eachAfter(Qo(i,.5)).eachBefore(Jo(1)):t.eachBefore(Zo(Wo)).eachAfter(Qo(Vo,1)).eachAfter(Qo(i,t.r/Math.min(e,r))).eachBefore(Jo(Math.min(e,r)/(2*t.r))),t}var n=null,e=1,r=1,i=Vo;return t.radius=function(e){return arguments.length?(n=function(t){return null==t?null:Go(t)}(e),t):n},t.size=function(n){return arguments.length?(e=+n[0],r=+n[1],t):[e,r]},t.padding=function(n){return arguments.length?(i="function"==typeof n?n:$o(+n),t):i},t},t.packSiblings=function(t){return Xo(t),t},t.packEnclose=Do,t.partition=function(){function t(t){var o=t.height+1;return t.x0=t.y0=r,t.x1=n,t.y1=e/o,t.eachBefore(function(t,n){return function(e){e.children&&ta(e,e.x0,t*(e.depth+1)/n,e.x1,t*(e.depth+2)/n);var i=e.x0,o=e.y0,a=e.x1-r,u=e.y1-r;a0)throw new Error("cycle");return o}var n=na,e=ea;return t.id=function(e){return arguments.length?(n=Go(e),t):n},t.parentId=function(n){return arguments.length?(e=Go(n),t):e},t},t.tree=function(){function t(t){var f=function(t){for(var n,e,r,i,o,a=new fa(t,0),u=[a];n=u.pop();)if(r=n._.children)for(n.children=new Array(o=r.length),i=o-1;i>=0;--i)u.push(e=n.children[i]=new fa(r[i],i)),e.parent=n;return(a.parent=new fa(null,0)).children=[a],a}(t);if(f.eachAfter(n),f.parent.m=-f.z,f.eachBefore(e),u)t.eachBefore(r);else{var c=t,s=t,l=t;t.eachBefore(function(t){t.xs.x&&(s=t),t.depth>l.depth&&(l=t)});var h=c===s?1:i(c,s)/2,d=h-c.x,p=o/(s.x+h+d),v=a/(l.depth||1);t.eachBefore(function(t){t.x=(t.x+d)*p,t.y=t.depth*v})}return t}function n(t){var n=t.children,e=t.parent.children,r=t.i?e[t.i-1]:null;if(n){(function(t){for(var n,e=0,r=0,i=t.children,o=i.length;--o>=0;)(n=i[o]).z+=e,n.m+=e,e+=n.s+(r+=n.c)})(t);var o=(n[0].z+n[n.length-1].z)/2;r?(t.z=r.z+i(t._,r._),t.m=t.z-o):t.z=o}else r&&(t.z=r.z+i(t._,r._));t.parent.A=function(t,n,e){if(n){for(var r,o=t,a=t,u=n,f=o.parent.children[0],c=o.m,s=a.m,l=u.m,h=f.m;u=oa(u),o=ia(o),u&&o;)f=ia(f),(a=oa(a)).a=t,(r=u.z+l-o.z-c+i(u._,o._))>0&&(aa(ua(u,t,e),t,r),c+=r,s+=r),l+=u.m,c+=o.m,h+=f.m,s+=a.m;u&&!oa(a)&&(a.t=u,a.m+=l-s),o&&!ia(f)&&(f.t=o,f.m+=c-h,e=t)}return e}(t,r,t.parent.A||e[0])}function e(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function r(t){t.x*=o,t.y=t.depth*a}var i=ra,o=1,a=1,u=null;return t.separation=function(n){return arguments.length?(i=n,t):i},t.size=function(n){return arguments.length?(u=!1,o=+n[0],a=+n[1],t):u?null:[o,a]},t.nodeSize=function(n){return arguments.length?(u=!0,o=+n[0],a=+n[1],t):u?[o,a]:null},t},t.treemap=function(){function t(t){return t.x0=t.y0=0,t.x1=i,t.y1=o,t.eachBefore(n),a=[0],r&&t.eachBefore(Ko),t}function n(t){var n=a[t.depth],r=t.x0+n,i=t.y0+n,o=t.x1-n,h=t.y1-n;o=n-1){var c=f[t];return c.x0=r,c.y0=i,c.x1=a,void(c.y1=u)}for(var l=s[t],h=e/2+l,d=t+1,p=n-1;d>>1;s[v]u-i){var _=(r*y+a*g)/e;o(t,d,g,r,i,_,u),o(d,n,y,_,i,a,u)}else{var b=(i*y+u*g)/e;o(t,d,g,r,i,a,b),o(d,n,y,r,b,a,u)}}var a,u,f=t.children,c=f.length,s=new Array(c+1);for(s[0]=u=a=0;a=0;--n)c.push(t[r[o[n]][2]]);for(n=+u;nu!=c>u&&a<(f-e)*(u-r)/(c-r)+e&&(s=!s),f=e,c=r;return s},t.polygonLength=function(t){for(var n,e,r=-1,i=t.length,o=t[i-1],a=o[0],u=o[1],f=0;++r1)&&(t-=Math.floor(t));var n=Math.abs(t-.5);return a_.h=360*t-100,a_.s=1.5-1.5*n,a_.l=.8-.9*n,a_+""},t.interpolateWarm=i_,t.interpolateCool=o_,t.interpolateViridis=u_,t.interpolateMagma=f_,t.interpolateInferno=c_,t.interpolatePlasma=s_,t.create=function(t){return ct(C(t).call(document.documentElement))},t.creator=C,t.local=st,t.matcher=ys,t.mouse=pt,t.namespace=k,t.namespaces=ds,t.clientPoint=dt,t.select=ct,t.selectAll=function(t){return"string"==typeof t?new ut([document.querySelectorAll(t)],[document.documentElement]):new ut([null==t?[]:t],ms)},t.selection=ft,t.selector=z,t.selectorAll=L,t.style=F,t.touch=vt,t.touches=function(t,n){null==n&&(n=ht().touches);for(var e=0,r=n?n.length:0,i=new Array(r);eh;if(f||(f=t=ie()),l__)if(p>x_-__)f.moveTo(l*d_(h),l*g_(h)),f.arc(0,0,l,h,d,!v),s>__&&(f.moveTo(s*d_(d),s*g_(d)),f.arc(0,0,s,d,h,v));else{var g,y,_=h,b=d,m=h,x=d,w=p,M=p,A=u.apply(this,arguments)/2,T=A>__&&(i?+i.apply(this,arguments):y_(s*s+l*l)),N=v_(l_(l-s)/2,+r.apply(this,arguments)),S=N,E=N;if(T>__){var k=sf(T/s*g_(A)),C=sf(T/l*g_(A));(w-=2*k)>__?(k*=v?1:-1,m+=k,x-=k):(w=0,m=x=(h+d)/2),(M-=2*C)>__?(C*=v?1:-1,_+=C,b-=C):(M=0,_=b=(h+d)/2)}var P=l*d_(_),z=l*g_(_),R=s*d_(x),L=s*g_(x);if(N>__){var D=l*d_(b),U=l*g_(b),q=s*d_(m),O=s*g_(m);if(p__?function(t,n,e,r,i,o,a,u){var f=e-t,c=r-n,s=a-i,l=u-o,h=(s*(n-o)-l*(t-i))/(l*f-s*c);return[t+h*f,n+h*c]}(P,z,q,O,D,U,R,L):[R,L],B=P-Y[0],F=z-Y[1],I=D-Y[0],j=U-Y[1],H=1/g_(function(t){return t>1?0:t<-1?b_:Math.acos(t)}((B*I+F*j)/(y_(B*B+F*F)*y_(I*I+j*j)))/2),X=y_(Y[0]*Y[0]+Y[1]*Y[1]);S=v_(N,(s-X)/(H-1)),E=v_(N,(l-X)/(H+1))}}M>__?E>__?(g=gf(q,O,P,z,l,E,v),y=gf(D,U,R,L,l,E,v),f.moveTo(g.cx+g.x01,g.cy+g.y01),E__&&w>__?S>__?(g=gf(R,L,D,U,s,-S,v),y=gf(P,z,q,O,s,-S,v),f.lineTo(g.cx+g.x01,g.cy+g.y01),S0&&(d+=l);for(null!=e?p.sort(function(t,n){return e(v[t],v[n])}):null!=r&&p.sort(function(n,e){return r(t[n],t[e])}),u=0,c=d?(y-h*b)/d:0;u0?l*c:0)+b,v[f]={data:t[f],index:u,value:l,startAngle:g,endAngle:s,padAngle:_};return v}var n=Af,e=Mf,r=null,i=cf(0),o=cf(x_),a=cf(0);return t.value=function(e){return arguments.length?(n="function"==typeof e?e:cf(+e),t):n},t.sortValues=function(n){return arguments.length?(e=n,r=null,t):e},t.sort=function(n){return arguments.length?(r=n,e=null,t):r},t.startAngle=function(n){return arguments.length?(i="function"==typeof n?n:cf(+n),t):i},t.endAngle=function(n){return arguments.length?(o="function"==typeof n?n:cf(+n),t):o},t.padAngle=function(n){return arguments.length?(a="function"==typeof n?n:cf(+n),t):a},t},t.areaRadial=kf,t.radialArea=kf,t.lineRadial=Ef,t.radialLine=Ef,t.pointRadial=Cf,t.linkHorizontal=function(){return Rf(Lf)},t.linkVertical=function(){return Rf(Df)},t.linkRadial=function(){var t=Rf(Uf);return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t},t.symbol=function(){function t(){var t;if(r||(r=t=ie()),n.apply(this,arguments).draw(r,+e.apply(this,arguments)),t)return r=null,t+""||null}var n=cf(A_),e=cf(64),r=null;return t.type=function(e){return arguments.length?(n="function"==typeof e?e:cf(e),t):n},t.size=function(n){return arguments.length?(e="function"==typeof n?n:cf(+n),t):e},t.context=function(n){return arguments.length?(r=null==n?null:n,t):r},t},t.symbols=B_,t.symbolCircle=A_,t.symbolCross=T_,t.symbolDiamond=E_,t.symbolSquare=R_,t.symbolStar=z_,t.symbolTriangle=D_,t.symbolWye=Y_,t.curveBasisClosed=function(t){return new Bf(t)},t.curveBasisOpen=function(t){return new Ff(t)},t.curveBasis=function(t){return new Yf(t)},t.curveBundle=F_,t.curveCardinalClosed=j_,t.curveCardinalOpen=H_,t.curveCardinal=I_,t.curveCatmullRomClosed=G_,t.curveCatmullRomOpen=V_,t.curveCatmullRom=X_,t.curveLinearClosed=function(t){return new Qf(t)},t.curveLinear=_f,t.curveMonotoneX=function(t){return new ec(t)},t.curveMonotoneY=function(t){return new rc(t)},t.curveNatural=function(t){return new oc(t)},t.curveStep=function(t){return new uc(t,.5)},t.curveStepAfter=function(t){return new uc(t,1)},t.curveStepBefore=function(t){return new uc(t,0)},t.stack=function(){function t(t){var o,a,u=n.apply(this,arguments),f=t.length,c=u.length,s=new Array(c);for(o=0;o0){for(var e,r,i,o=0,a=t[0].length;o1)for(var e,r,i,o,a,u,f=0,c=t[n[0]].length;f=0?(r[0]=o,r[1]=o+=i):i<0?(r[1]=a,r[0]=a+=i):r[0]=o},t.stackOffsetNone=fc,t.stackOffsetSilhouette=function(t,n){if((e=t.length)>0){for(var e,r=0,i=t[n[0]],o=i.length;r0&&(r=(e=t[n[0]]).length)>0){for(var e,r,i,o=0,a=1;azl&&e.name===n)return new qn([[t]],sh,n,+r)}return null},t.interrupt=Ln,t.voronoi=function(){function t(t){return new Oc(t.map(function(r,i){var o=[Math.round(n(r,i,t)/nb)*nb,Math.round(e(r,i,t)/nb)*nb];return o.index=i,o.data=r,o}),r)}var n=pc,e=vc,r=null;return t.polygons=function(n){return t(n).polygons()},t.links=function(n){return t(n).links()},t.triangles=function(n){return t(n).triangles()},t.x=function(e){return arguments.length?(n="function"==typeof e?e:dc(+e),t):n},t.y=function(n){return arguments.length?(e="function"==typeof n?n:dc(+n),t):e},t.extent=function(n){return arguments.length?(r=null==n?null:[[+n[0][0],+n[0][1]],[+n[1][0],+n[1][1]]],t):r&&[[r[0][0],r[0][1]],[r[1][0],r[1][1]]]},t.size=function(n){return arguments.length?(r=null==n?null:[[0,0],[+n[0],+n[1]]],t):r&&[r[1][0]-r[0][0],r[1][1]-r[0][1]]},t},t.zoom=function(){function n(t){t.property("__zoom",Gc).on("wheel.zoom",f).on("mousedown.zoom",c).on("dblclick.zoom",s).filter(m).on("touchstart.zoom",l).on("touchmove.zoom",h).on("touchend.zoom touchcancel.zoom",d).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function e(t,n){return(n=Math.max(x[0],Math.min(x[1],n)))===t.k?t:new Bc(n,t.x,t.y)}function r(t,n,e){var r=n[0]-e[0]*t.k,i=n[1]-e[1]*t.k;return r===t.x&&i===t.y?t:new Bc(t.k,r,i)}function i(t){return[(+t[0][0]+ +t[1][0])/2,(+t[0][1]+ +t[1][1])/2]}function o(t,n,e){t.on("start.zoom",function(){a(this,arguments).start()}).on("interrupt.zoom end.zoom",function(){a(this,arguments).end()}).tween("zoom",function(){var t=arguments,r=a(this,t),o=y.apply(this,t),u=e||i(o),f=Math.max(o[1][0]-o[0][0],o[1][1]-o[0][1]),c=this.__zoom,s="function"==typeof n?n.apply(this,t):n,l=A(c.invert(u).concat(f/c.k),s.invert(u).concat(f/s.k));return function(t){if(1===t)t=s;else{var n=l(t),e=f/n[2];t=new Bc(e,u[0]-n[0]*e,u[1]-n[1]*e)}r.zoom(null,t)}})}function a(t,n){for(var e,r=0,i=T.length;rC}n.zoom("mouse",_(r(n.that.__zoom,n.mouse[0]=pt(n.that),n.mouse[1]),n.extent,w))},!0).on("mouseup.zoom",function(){e.on("mousemove.zoom mouseup.zoom",null),bt(t.event.view,n.moved),jc(),n.end()},!0),i=pt(this),o=t.event.clientX,u=t.event.clientY;_t(t.event.view),Ic(),n.mouse=[i,this.__zoom.invert(i)],Ln(this),n.start()}}function s(){if(g.apply(this,arguments)){var i=this.__zoom,a=pt(this),u=i.invert(a),f=i.k*(t.event.shiftKey?.5:2),c=_(r(e(i,f),a,u),y.apply(this,arguments),w);jc(),M>0?ct(this).transition().duration(M).call(o,c,a):ct(this).call(n.transform,c)}}function l(){if(g.apply(this,arguments)){var n,e,r,i,o=a(this,arguments),u=t.event.changedTouches,f=u.length;for(Ic(),e=0;eProject ID: ' + model["Project ID"] + '')); $('.model-section.model-ids').append(projectId); - var tfblink = $(''); - tfblink.append($('
Trial ID: ' + model["Trial ID"] + '
')); + var tfblink = $(''); + tfblink.append($('
Trial ID: ' + model["Spec Tag"].split(":")[1] + '
')); $('.model-section.model-ids').append(tfblink); // update link in breadcrumb to point to project models diff --git a/modeldb/frontend/public/js/models.js b/modeldb/frontend/public/js/models.js index 9e39a767151..aff2f125775 100644 --- a/modeldb/frontend/public/js/models.js +++ b/modeldb/frontend/public/js/models.js @@ -1250,153 +1250,274 @@ $(function() { }; function drawParallelCood() { - var legendWidth = 0; - var margin = {top: 30, right: 10, bottom: 10, left: 20}; - var width = $('.container').width() - margin.left - margin.right; - var height = width / 2.73333; - - - var x = d3.scale.ordinal().rangePoints([0, width], 1), - y = {}, - dragging = {}; - - var line = d3.svg.line(), - axis = d3.svg.axis().orient("left"), - background, - foreground; - - //var svg = d3.select("body").append("parameter-explore-svg") - var svg = d3.select("body").select("svg") - .attr("width", width + margin.left + margin.right) - .attr("height", height + margin.top + margin.bottom) - .append("g") - .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); - - - // Extract the list of dimensions and create a scale for each. - x.domain(dimensions = metricKeys.concat(hyperparamKeys)); - var modelmap = [] - for (var i = 0; i < models.length; i++){ - var minf ={} - minf["name"] = models[i]["md.NAME"] - for (var j = 0; j < models[i].metrics.length; j++){ - minf[models[i].metrics[j].key] = models[i].metrics[j].val - } - for (var j = 0; j < models[i].hyperparams.length; j++){ - minf[models[i].hyperparams[j].name] = models[i].hyperparams[j].value - } - modelmap[i] = minf - } - - x.domain(dimensions = d3.keys(modelmap[0]).filter(function(d) { - if(d === "name" || d == "StudyID" || d == "TrialID") return false; - if(typeof modelmap[0][d] == "string") { - y[d] = d3.scale.ordinal() - .domain(modelmap.map(function(p) { return p[d]; })) - .rangePoints([height, 0]); - - } else { - y[d] = d3.scale.linear() - .domain(d3.extent(modelmap, function(p) { return +p[d]; })) - .range([height, 0]); - } - return true; - })); - - // Add grey background lines for context. - background = svg.append("g") - .attr("class", "background") - .selectAll("path") - .data(modelmap) - .enter().append("path") - .attr("d", path); - - // Add blue foreground lines for focus. - foreground = svg.append("g") - .attr("class", "foreground") - .selectAll("path") - .data(modelmap) - .enter().append("path") - .attr("d", path); - - // Add a group element for each dimension. - var g = svg.selectAll(".dimension") - .data(dimensions) - .enter().append("g") - .attr("class", "dimension") - .attr("transform", function(d) { return "translate(" + x(d) + ")"; }) - .call(d3.behavior.drag() - .origin(function(d) { return {x: x(d)}; }) - .on("dragstart", function(d) { - dragging[d] = x(d); - background.attr("visibility", "hidden"); - }) - .on("drag", function(d) { - dragging[d] = Math.min(width, Math.max(0, d3.event.x)); - foreground.attr("d", path); - dimensions.sort(function(a, b) { return position(a) - position(b); }); - x.domain(dimensions); - g.attr("transform", function(d) { return "translate(" + position(d) + ")"; }) - }) - .on("dragend", function(d) { - delete dragging[d]; - transition(d3.select(this)).attr("transform", "translate(" + x(d) + ")"); - transition(foreground).attr("d", path); - background - .attr("d", path) - .transition() - .delay(500) - .duration(0) - .attr("visibility", null); - })); - - // Add an axis and title. - g.append("g") - .attr("class", "axis") - .each(function(d) { d3.select(this).call(axis.scale(y[d])); }) - .append("text") - .style("text-anchor", "middle") - .attr("y", -9) - .text(function(d) { return d; }); - - // Add and store a brush for each axis. - g.append("g") - .attr("class", "brush") - .each(function(d) { - d3.select(this).call(y[d].brush = d3.svg.brush().y(y[d]).on("brushstart", brushstart).on("brush", brush)); - }) - .selectAll("rect") - .attr("x", -8) - .attr("width", 16); - - function position(d) { - var v = dragging[d]; - return v == null ? x(d) : v; - } - - function transition(g) { - return g.transition().duration(500); + var margin = {top: 50, right: 80, bottom: 10, left: 80}, + width = $('.container').width() - margin.left - margin.right, + height = width / 2.73333, + innerHeight = height - 2; + + var devicePixelRatio = window.devicePixelRatio || 1; + + var color = d3.scaleOrdinal() + .range(['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd','#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf']); + + var types = { + "Number": { + key: "Number", + coerce: function(d) { return +d; }, + extent: d3.extent, + within: function(d, extent, dim) { return extent[0] <= dim.scale(d) && dim.scale(d) <= extent[1]; }, + defaultScale: d3.scaleLinear().range([innerHeight, 0]) + }, + "String": { + key: "String", + coerce: String, + extent: function (data) { return data.sort(); }, + within: function(d, extent, dim) { return extent[0] <= dim.scale(d) && dim.scale(d) <= extent[1]; }, + defaultScale: d3.scalePoint().range([0, innerHeight]) + } + }; + + data=[] + dimensions=[] + for (var i = 0; i < models.length; i++){ + var d={} + d["name"]=models[i]["Spec Tag"].split(":")[1].slice(0,7) + + for (var j = 0; j < models[i].metrics.length; j++){ + d[models[i].metrics[j].key] = models[i].metrics[j].val + } + for (var j = 0; j < models[i].hyperparams.length; j++){ + d[models[i].hyperparams[j].name.replace(/-/g,"")] = models[i].hyperparams[j].value + } + data[i]=d } - // Returns the path for a given data point. - function path(d) { - return line(dimensions.map(function(p) { return [position(p), y[p](d[p])]; })); - } - - function brushstart() { - d3.event.sourceEvent.stopPropagation(); - } - - // Handles a brush event, toggling the display of foreground lines. - function brush() { - var actives = dimensions.filter(function(p) { return !y[p].brush.empty(); }), - extents = actives.map(function(p) { return y[p].brush.extent(); }); - foreground.style("display", function(d) { - return actives.every(function(p, i) { - return extents[i][0] <= d[p] && d[p] <= extents[i][1]; - }) ? null : "none"; - }); - } + var dimensions = [ + { + key: "name", + description: "Trial ID", + type: types["String"], + axis: d3.axisLeft() + .tickFormat(function(d,i) { + return d; + }) + } + ]; + if (models.length > 0){ + for (var i = 0; i < models[0].metrics.length; i++){ + dimensions[i+1]={ + key: models[0].metrics[i].key, + type: types["Number"], + scale: d3.scaleSqrt().range([innerHeight, 0]) + } + } + for (var i = 0; i < models[0].hyperparams.length; i++){ + if (models[0].hyperparams[i].type == "String"){ + dimensions[i+models[0].metrics.length]={ + key: models[0].hyperparams[i].name.replace(/-/g,""), + type: types[models[0].hyperparams[i].type], + axis: d3.axisLeft() + .tickFormat(function(d,i) { + return d; + }) + } + }else{ + dimensions[i+models[0].metrics.length]={ + key: models[0].hyperparams[i].name.replace(/-/g,""), + type: types[models[0].hyperparams[i].type], + scale: d3.scaleSqrt().range([innerHeight, 0])} + } + } + } + + var xscale = d3.scalePoint() + .domain(d3.range(dimensions.length)) + .range([0, width]); + + var yAxis = d3.axisLeft(); + + var container = d3.select("body").select(".ExpPara").append("div") + .attr("class", "parcoords") + .style("width", width + margin.left + margin.right + "px") + .style("height", height + margin.top + margin.bottom + "px"); + + var svg = container.append("svg") + .attr("width", width + margin.left + margin.right) + .attr("height", height + margin.top + margin.bottom) + .append("g") + .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); + + var canvas = container.append("canvas") + .attr("width", width * devicePixelRatio) + .attr("height", height * devicePixelRatio) + .style("width", width + "px") + .style("height", height + "px") + .style("margin-top", margin.top + "px") + .style("margin-left", margin.left + "px"); + + var ctx = canvas.node().getContext("2d"); + ctx.globalCompositeOperation = 'darken'; + ctx.globalAlpha = 0.15; + ctx.lineWidth = 1.5; + ctx.scale(devicePixelRatio, devicePixelRatio); + + var output = d3.select("body").select(".ExpPara").append("pre"); + + var axes = svg.selectAll(".axis") + .data(dimensions) + .enter().append("g") + .attr("class", function(d) { return "axis " + d.key.replace(/ /g, "_"); }) + .attr("transform", function(d,i) { return "translate(" + xscale(i) + ")"; }); + + data.forEach(function(d) { + dimensions.forEach(function(p) { + d[p.key] = !d[p.key] ? null : p.type.coerce(d[p.key]); + }); + + // truncate long text strings to fit in data table + for (var key in d) { + if (d[key] && d[key].length > 35) d[key] = d[key].slice(0,36); + } + }); + + // type/dimension default setting happens here + dimensions.forEach(function(dim) { + if (!("domain" in dim)) { + // detect domain using dimension type's extent function + dim.domain = d3_functor(dim.type.extent)(data.map(function(d) { return d[dim.key]; })); + } + if (!("scale" in dim)) { + // use type's default scale for dimension + dim.scale = dim.type.defaultScale.copy(); + } + dim.scale.domain(dim.domain); + }); + + var render = renderQueue(draw).rate(50); + + ctx.clearRect(0,0,width,height); + ctx.globalAlpha = d3.min([0.85/Math.pow(data.length,0.3),1]); + render(data); + + axes.append("g") + .each(function(d) { + var renderAxis = "axis" in d + ? d.axis.scale(d.scale) // custom axis + : yAxis.scale(d.scale); // default axis + d3.select(this).call(renderAxis); + }) + .append("text") + .attr("class", "title") + .attr("text-anchor", "start") + .text(function(d) { return "description" in d ? d.description : d.key; }); + + // Add and store a brush for each axis. + axes.append("g") + .attr("class", "brush") + .each(function(d) { + d3.select(this).call(d.brush = d3.brushY() + .extent([[-10,0], [10,height]]) + .on("start", brushstart) + .on("brush", brush) + .on("end", brush) + ) + }) + .selectAll("rect") + .attr("x", -8) + .attr("width", 16); + + d3.selectAll(".axis.name .tick text") + .style("fill", color); + + output.text(d3.tsvFormat(data)); + + function project(d) { + return dimensions.map(function(p,i) { + // check if data element has property and contains a value + if ( + !(p.key in d) || + d[p.key] === null + ) return null; + + return [xscale(i),p.scale(d[p.key])]; + }); + }; + + function draw(d) { + ctx.strokeStyle = color(d.name); + ctx.beginPath(); + var coords = project(d); + coords.forEach(function(p,i) { + // this tricky bit avoids rendering null values as 0 + if (p === null) { + // this bit renders horizontal lines on the previous/next + // dimensions, so that sandwiched null values are visible + if (i > 0) { + var prev = coords[i-1]; + if (prev !== null) { + ctx.moveTo(prev[0],prev[1]); + ctx.lineTo(prev[0]+6,prev[1]); + } + } + if (i < coords.length-1) { + var next = coords[i+1]; + if (next !== null) { + ctx.moveTo(next[0]-6,next[1]); + } + } + return; + } + + if (i == 0) { + ctx.moveTo(p[0],p[1]); + return; + } + + ctx.lineTo(p[0],p[1]); + }); + ctx.stroke(); + } + + function brushstart() { + d3.event.sourceEvent.stopPropagation(); + } + + // Handles a brush event, toggling the display of foreground lines. + function brush() { + render.invalidate(); + + var actives = []; + svg.selectAll(".axis .brush") + .filter(function(d) { + return d3.brushSelection(this); + }) + .each(function(d) { + actives.push({ + dimension: d, + extent: d3.brushSelection(this) + }); + }); + + var selected = data.filter(function(d) { + if (actives.every(function(active) { + var dim = active.dimension; + // test if point is within extents for each active brush + return dim.type.within(d[dim.key], active.extent, dim); + })) { + return true; + } + }); + + ctx.clearRect(0,0,width,height); + ctx.globalAlpha = d3.min([0.85/Math.pow(selected.length,0.3),1]); + render(selected); + + output.text(d3.tsvFormat(selected)); + }; + + function d3_functor(v) { + return typeof v === "function" ? v : function() { return v; }; + }; }; function vegaUpdate() { diff --git a/modeldb/frontend/views/models.ejs b/modeldb/frontend/views/models.ejs index 6668bcc3295..2c636b7548d 100644 --- a/modeldb/frontend/views/models.ejs +++ b/modeldb/frontend/views/models.ejs @@ -20,6 +20,8 @@ + + @@ -187,8 +189,7 @@
-

Explore Parameters

- +

Explore Parameters

diff --git a/suggestion/hyperband_service.go b/suggestion/hyperband_service.go index bacb7bd6d4f..cf1c99d141a 100644 --- a/suggestion/hyperband_service.go +++ b/suggestion/hyperband_service.go @@ -69,6 +69,7 @@ func (h *HyperBandSuggestService) makeMasterBracket(sconf *api.StudyConfig, n in s_t[i].ParameterSet = make([]*api.Parameter, len(sconf.ParameterConfigs.Configs)) for j, pc := range sconf.ParameterConfigs.Configs { s_t[i].ParameterSet[j] = &api.Parameter{Name: pc.Name} + s_t[i].ParameterSet[j].ParameterType = pc.ParameterType switch pc.ParameterType { case api.ParameterType_INT: imin, _ := strconv.Atoi(pc.Feasible.Min) diff --git a/suggestion/random_service.go b/suggestion/random_service.go index 90554f0930f..2b10bce2daf 100644 --- a/suggestion/random_service.go +++ b/suggestion/random_service.go @@ -83,6 +83,7 @@ func (s *RandomSuggestService) GenerateTrials(ctx context.Context, in *api.Gener s_t[i].EvalLogs = make([]*api.EvaluationLog, 0) for j, pc := range in.Configs.ParameterConfigs.Configs { s_t[i].ParameterSet[j] = &api.Parameter{Name: pc.Name} + s_t[i].ParameterSet[j].ParameterType = pc.ParameterType switch pc.ParameterType { case api.ParameterType_INT: imin, _ := strconv.Atoi(pc.Feasible.Min)