!function() { function n(n) { return n && (n.ownerdocument || n.document || n).documentelement } function t(n) { return n && (n.ownerdocument && n.ownerdocument.defaultview || n.document && n || n.defaultview) } function e(n, t) { return t > n ? -1 : n > t ? 1 : n >= t ? 0 : nan } function r(n) { return null === n ? nan : +n } function i(n) { return !isnan(n) } function u(n) { return { left: function(t, e, r, i) { for (arguments.length < 3 && (r = 0), arguments.length < 4 && (i = t.length); i > r; ) { var u = r + i >>> 1; n(t[u], e) < 0 ? r = u + 1 : i = u } return r }, right: function(t, e, r, i) { for (arguments.length < 3 && (r = 0), arguments.length < 4 && (i = t.length); i > r; ) { var u = r + i >>> 1; n(t[u], e) > 0 ? i = u : r = u + 1 } return r } } } function o(n) { return n.length } function a(n) { for (var t = 1; n * t % 1; ) t *= 10; return t } function l(n, t) { for (var e in t) object.defineproperty(n.prototype, e, { value: t[e], enumerable: !1 }) } function c() { this._ = object.create(null) } function f(n) { return (n += "") === bo || n[0] === _o ? _o + n : n } function s(n) { return (n += "")[0] === _o ? n.slice(1) : n } function h(n) { return f(n)in this._ } function p(n) { return (n = f(n))in this._ && delete this._[n] } function g() { var n = []; for (var t in this._) n.push(s(t)); return n } function v() { var n = 0; for (var t in this._) ++n; return n } function d() { for (var n in this._) return !1; return !0 } function y() { this._ = object.create(null) } function m(n) { return n } function m(n, t, e) { return function() { var r = e.apply(t, arguments); return r === t ? n : r } } function x(n, t) { if (t in n) return t; t = t.charat(0).touppercase() + t.slice(1); for (var e = 0, r = wo.length; r > e; ++e) { var i = wo[e] + t; if (i in n) return i } } function b() {} function _() {} function w(n) { function t() { for (var t, r = e, i = -1, u = r.length; ++i < u; ) (t = r[i].on) && t.apply(this, arguments); return n } var e = [] , r = new c; return t.on = function(t, i) { var u, o = r.get(t); return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, u = e.indexof(o)).concat(e.slice(u + 1)), r.remove(t)), i && e.push(r.set(t, { on: i })), n) } , t } function s() { ao.event.preventdefault() } function k() { for (var n, t = ao.event; n = t.sourceevent; ) t = n; return t } function n(n) { for (var t = new _, e = 0, r = arguments.length; ++e < r; ) t[arguments[e]] = w(t); return t.of = function(e, r) { return function(i) { try { var u = i.sourceevent = ao.event; i.target = n, ao.event = i, t[i.type].apply(e, r) } finally { ao.event = u } } } , t } function e(n) { return ko(n, co), n } function a(n) { return "function" == typeof n ? n : function() { return no(n, this) } } function c(n) { return "function" == typeof n ? n : function() { return eo(n, this) } } function z(n, t) { function e() { this.removeattribute(n) } function r() { this.removeattributens(n.space, n.local) } function i() { this.setattribute(n, t) } function u() { this.setattributens(n.space, n.local, t) } function o() { var e = t.apply(this, arguments); null == e ? this.removeattribute(n) : this.setattribute(n, e) } function a() { var e = t.apply(this, arguments); null == e ? this.removeattributens(n.space, n.local) : this.setattributens(n.space, n.local, e) } return n = ao.ns.qualify(n), null == t ? n.local ? r : e : "function" == typeof t ? n.local ? a : o : n.local ? u : i } function l(n) { return n.trim().replace(/\s+/g, " ") } function q(n) { return new regexp("(?:^|\\s+)" + ao.requote(n) + "(?:\\s+|$)","g") } function t(n) { return (n + "").trim().split(/^|\s+/) } function r(n, t) { function e() { for (var e = -1; ++e < i; ) n[e](this, t) } function r() { for (var e = -1, r = t.apply(this, arguments); ++e < i; ) n[e](this, r) } n = t(n).map(d); var i = n.length; return "function" == typeof t ? r : e } function d(n) { var t = q(n); return function(e, r) { if (i = e.classlist) return r ? i.add(n) : i.remove(n); var i = e.getattribute("class") || ""; r ? (t.lastindex = 0, t.test(i) || e.setattribute("class", l(i + " " + n))) : e.setattribute("class", l(i.replace(t, " "))) } } function p(n, t, e) { function r() { this.style.removeproperty(n) } function i() { this.style.setproperty(n, t, e) } function u() { var r = t.apply(this, arguments); null == r ? this.style.removeproperty(n) : this.style.setproperty(n, r, e) } return null == t ? r : "function" == typeof t ? u : i } function u(n, t) { function e() { delete this[n] } function r() { this[n] = t } function i() { var e = t.apply(this, arguments); null == e ? delete this[n] : this[n] = e } return null == t ? e : "function" == typeof t ? i : r } function j(n) { function t() { var t = this.ownerdocument , e = this.namespaceuri; return e === zo && t.documentelement.namespaceuri === zo ? t.createelement(n) : t.createelementns(e, n) } function e() { return this.ownerdocument.createelementns(n.space, n.local) } return "function" == typeof n ? n : (n = ao.ns.qualify(n)).local ? e : t } function f() { var n = this.parentnode; n && n.removechild(this) } function h(n) { return { __data__: n } } function o(n) { return function() { return ao(this, n) } } function i(n) { return arguments.length || (n = e), function(t, e) { return t && e ? n(t.__data__, e.__data__) : !t - !e } } function y(n, t) { for (var e = 0, r = n.length; r > e; e++) for (var i, u = n[e], o = 0, a = u.length; a > o; o++) (i = u[o]) && t(i, o, e); return n } function z(n) { return ko(n, qo), n } function v(n) { var t, e; return function(r, i, u) { var o, a = n[u].update, l = a.length; for (u != e && (e = u, t = 0), i >= t && (t = i + 1); !(o = a[t]) && ++t < l; ) ; return o } } function x(n, t, e) { function r() { var t = this[o]; t && (this.removeeventlistener(n, t, t.$), delete this[o]) } function i() { var i = l(t, co(arguments)); r.call(this), this.addeventlistener(n, this[o] = i, i.$ = e), i._ = t } function u() { var t, e = new regexp("^__on([^.]+)" + ao.requote(n) + "$"); for (var r in this) if (t = r.match(e)) { var i = this[r]; this.removeeventlistener(t[1], i, i.$), delete this[r] } } var o = "__on" + n , a = n.indexof(".") , l = $; a > 0 && (n = n.slice(0, a)); var c = to.get(n); return c && (n = c, l = b), a ? t ? i : r : t ? b : u } function $(n, t) { return function(e) { var r = ao.event; ao.event = e, t[0] = this.__data__; try { n.apply(this, t) } finally { ao.event = r } } } function b(n, t) { var e = $(n, t); return function(n) { var t = this , r = n.relatedtarget; r && (r === t || 8 & r.comparedocumentposition(t)) || e.call(t, n) } } function w(e) { var r = ".dragsuppress-" + ++do , i = "click" + r , u = ao.select(t(e)).on("touchmove" + r, s).on("dragstart" + r, s).on("selectstart" + r, s); if (null == ro && (ro = "onselectstart"in e ? !1 : x(e.style, "userselect")), ro) { var o = n(e).style , a = o[ro]; o[ro] = "none" } return function(n) { if (u.on(r, null), ro && (o[ro] = a), n) { var t = function() { u.on(i, null) }; u.on(i, function() { s(), t() }, !0), settimeout(t, 0) } } } function j(n, e) { e.changedtouches && (e = e.changedtouches[0]); var r = n.ownersvgelement || n; if (r.createsvgpoint) { var i = r.createsvgpoint(); if (0 > po) { var u = t(n); if (u.scrollx || u.scrolly) { r = ao.select("body").append("svg").style({ position: "absolute", top: 0, left: 0, margin: 0, padding: 0, border: "none" }, "important"); var o = r[0][0].getscreenctm(); po = !(o.f || o.e), r.remove() } } return po ? (i.x = e.pagex, i.y = e.pagey) : (i.x = e.clientx, i.y = e.clienty), i = i.matrixtransform(n.getscreenctm().inverse()), [i.x, i.y] } var a = n.getboundingclientrect(); return [e.clientx - a.left - n.clientleft, e.clienty - a.top - n.clienttop] } function g() { return ao.event.changedtouches[0].identifier } function k(n) { return n > 0 ? 1 : 0 > n ? -1 : 0 } function q(n, t, e) { return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0]) } function nn(n) { return n > 1 ? 0 : -1 > n ? fo : math.acos(n) } function tn(n) { return n > 1 ? io : -1 > n ? -io : math.asin(n) } function en(n) { return ((n = math.exp(n)) - 1 / n) / 2 } function rn(n) { return ((n = math.exp(n)) + 1 / n) / 2 } function un(n) { return ((n = math.exp(2 * n)) - 1) / (n + 1) } function on(n) { return (n = math.sin(n / 2)) * n } function an() {} function ln(n, t, e) { return this instanceof ln ? (this.h = +n, this.s = +t, void (this.l = +e)) : arguments.length < 2 ? n instanceof ln ? new ln(n.h,n.s,n.l) : _n("" + n, wn, ln) : new ln(n,t,e) } function cn(n, t, e) { function r(n) { return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? u + (o - u) * n / 60 : 180 > n ? o : 240 > n ? u + (o - u) * (240 - n) / 60 : u } function i(n) { return math.round(255 * r(n)) } var u, o; return n = isnan(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isnan(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, u = 2 * e - o, new mn(i(n + 120),i(n),i(n - 120)) } function fn(n, t, e) { return this instanceof fn ? (this.h = +n, this.c = +t, void (this.l = +e)) : arguments.length < 2 ? n instanceof fn ? new fn(n.h,n.c,n.l) : n instanceof hn ? gn(n.l, n.a, n.b) : gn((n = sn((n = ao.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new fn(n,t,e) } function sn(n, t, e) { return isnan(n) && (n = 0), isnan(t) && (t = 0), new hn(e,math.cos(n *= yo) * t,math.sin(n) * t) } function hn(n, t, e) { return this instanceof hn ? (this.l = +n, this.a = +t, void (this.b = +e)) : arguments.length < 2 ? n instanceof hn ? new hn(n.l,n.a,n.b) : n instanceof fn ? sn(n.h, n.c, n.l) : sn((n = mn(n)).r, n.g, n.b) : new hn(n,t,e) } function pn(n, t, e) { var r = (n + 16) / 116 , i = r + t / 500 , u = r - e / 200; return i = vn(i) * na, r = vn(r) * ta, u = vn(u) * ea, new mn(yn(3.2404542 * i - 1.5371385 * r - .4985314 * u),yn(-.969266 * i + 1.8760108 * r + .041556 * u),yn(.0556434 * i - .2040259 * r + 1.0572252 * u)) } function gn(n, t, e) { return n > 0 ? new fn(math.atan2(e, t) * zo,math.sqrt(t * t + e * e),n) : new fn(nan,nan,n) } function vn(n) { return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037 } function dn(n) { return n > .008856 ? math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29 } function yn(n) { return math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * math.pow(n, 1 / 2.4) - .055)) } function mn(n, t, e) { return this instanceof mn ? (this.r = ~~n, this.g = ~~t, void (this.b = ~~e)) : arguments.length < 2 ? n instanceof mn ? new mn(n.r,n.g,n.b) : _n("" + n, mn, cn) : new mn(n,t,e) } function mn(n) { return new mn(n >> 16,n >> 8 & 255,255 & n) } function xn(n) { return mn(n) + "" } function bn(n) { return 16 > n ? "0" + math.max(0, n).tostring(16) : math.min(255, n).tostring(16) } function _n(n, t, e) { var r, i, u, o = 0, a = 0, l = 0; if (r = /([a-z]+)\((.*)\)/.exec(n = n.tolowercase())) switch (i = r[2].split(","), r[1]) { case "hsl": return e(parsefloat(i[0]), parsefloat(i[1]) / 100, parsefloat(i[2]) / 100); case "rgb": return t(nn(i[0]), nn(i[1]), nn(i[2])) } return (u = ua.get(n)) ? t(u.r, u.g, u.b) : (null == n || "#" !== n.charat(0) || isnan(u = parseint(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & u) >> 4, o = o >> 4 | o, a = 240 & u, a = a >> 4 | a, l = 15 & u, l = l << 4 | l) : 7 === n.length && (o = (16711680 & u) >> 16, a = (65280 & u) >> 8, l = 255 & u)), t(o, a, l)) } function wn(n, t, e) { var r, i, u = math.min(n /= 255, t /= 255, e /= 255), o = math.max(n, t, e), a = o - u, l = (o + u) / 2; return a ? (i = .5 > l ? a / (o + u) : a / (2 - o - u), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = nan, i = l > 0 && 1 > l ? 0 : r), new ln(r,i,l) } function sn(n, t, e) { n = kn(n), t = kn(t), e = kn(e); var r = dn((.4124564 * n + .3575761 * t + .1804375 * e) / na) , i = dn((.2126729 * n + .7151522 * t + .072175 * e) / ta) , u = dn((.0193339 * n + .119192 * t + .9503041 * e) / ea); return hn(116 * i - 16, 500 * (r - i), 200 * (i - u)) } function kn(n) { return (n /= 255) <= .04045 ? n / 12.92 : math.pow((n + .055) / 1.055, 2.4) } function nn(n) { var t = parsefloat(n); return "%" === n.charat(n.length - 1) ? math.round(2.55 * t) : t } function en(n) { return "function" == typeof n ? n : function() { return n } } function an(n) { return function(t, e, r) { return 2 === arguments.length && "function" == typeof e && (r = e, e = null), cn(t, e, n, r) } } function cn(n, t, e, r) { function i() { var n, t = l.status; if (!t && ln(l) || t >= 200 && 300 > t || 304 === t) { try { n = e.call(u, l) } catch (r) { return void o.error.call(u, r) } o.load.call(u, n) } else o.error.call(u, l) } var u = {} , o = ao.dispatch("beforesend", "progress", "load", "error") , a = {} , l = new xmlhttprequest , c = null; return !this.xdomainrequest || "withcredentials"in l || !/^(http(s)?:)?\/\//.test(n) || (l = new xdomainrequest), "onload"in l ? l.onload = l.onerror = i : l.onreadystatechange = function() { l.readystate > 3 && i() } , l.onprogress = function(n) { var t = ao.event; ao.event = n; try { o.progress.call(u, l) } finally { ao.event = t } } , u.header = function(n, t) { return n = (n + "").tolowercase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + "", u) } , u.mimetype = function(n) { return arguments.length ? (t = null == n ? null : n + "", u) : t } , u.responsetype = function(n) { return arguments.length ? (c = n, u) : c } , u.response = function(n) { return e = n, u } , ["get", "post"].foreach(function(n) { u[n] = function() { return u.send.apply(u, [n].concat(co(arguments))) } }), u.send = function(e, r, i) { if (2 === arguments.length && "function" == typeof r && (i = r, r = null), l.open(e, n, !0), null == t || "accept"in a || (a.accept = t + ",*/*"), l.setrequestheader) for (var f in a) l.setrequestheader(f, a[f]); return null != t && l.overridemimetype && l.overridemimetype(t), null != c && (l.responsetype = c), null != i && u.on("error", i).on("load", function(n) { i(null, n) }), o.beforesend.call(u, l), l.send(null == r ? null : r), u } , u.abort = function() { return l.abort(), u } , ao.rebind(u, o, "on"), null == r ? u : u.get(zn(r)) } function zn(n) { return 1 === n.length ? function(t, e) { n(null == t ? e : null) } : n } function ln(n) { var t = n.responsetype; return t && "text" !== t ? n.response : n.responsetext } function qn(n, t, e) { var r = arguments.length; 2 > r && (t = 0), 3 > r && (e = date.now()); var i = e + t , u = { c: n, t: i, n: null }; return aa ? aa.n = u : oa = u, aa = u, la || (ca = cleartimeout(ca), la = 1, fa(tn)), u } function tn() { var n = rn() , t = dn() - n; t > 24 ? (isfinite(t) && (cleartimeout(ca), ca = settimeout(tn, t)), la = 0) : (la = 1, fa(tn)) } function rn() { for (var n = date.now(), t = oa; t; ) n >= t.t && t.c(n - t.t) && (t.c = null), t = t.n; return n } function dn() { for (var n, t = oa, e = 1 / 0; t; ) t.c ? (t.t < e && (e = t.t), t = (n = t).n) : t = n ? n.n = t.n : oa = t.n; return aa = n, e } function pn(n, t) { return t - (n ? math.ceil(math.log(n) / math.ln10) : 1) } function un(n, t) { var e = math.pow(10, 3 * xo(8 - t)); return { scale: t > 8 ? function(n) { return n / e } : function(n) { return n * e } , symbol: n } } function jn(n) { var t = n.decimal , e = n.thousands , r = n.grouping , i = n.currency , u = r && e ? function(n, t) { for (var i = n.length, u = [], o = 0, a = r[0], l = 0; i > 0 && a > 0 && (l + a + 1 > t && (a = math.max(1, t - l)), u.push(n.substring(i -= a, i + a)), !((l += a + 1) > t)); ) a = r[o = (o + 1) % r.length]; return u.reverse().join(e) } : m; return function(n) { var e = ha.exec(n) , r = e[1] || " " , o = e[2] || ">" , a = e[3] || "-" , l = e[4] || "" , c = e[5] , f = +e[6] , s = e[7] , h = e[8] , p = e[9] , g = 1 , v = "" , d = "" , y = !1 , m = !0; switch (h && (h = +h.substring(1)), (c || "0" === r && "=" === o) && (c = r = "0", o = "="), p) { case "n": s = !0, p = "g"; break; case "%": g = 100, d = "%", p = "f"; break; case "p": g = 100, d = "%", p = "r"; break; case "b": case "o": case "x": case "x": "#" === l && (v = "0" + p.tolowercase()); case "c": m = !1; case "d": y = !0, h = 0; break; case "s": g = -1, p = "r" } "$" === l && (v = i[0], d = i[1]), "r" != p || h || (p = "g"), null != h && ("g" == p ? h = math.max(1, math.min(21, h)) : "e" != p && "f" != p || (h = math.max(0, math.min(20, h)))), p = pa.get(p) || fn; var m = c && s; return function(n) { var e = d; if (y && n % 1) return ""; var i = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, "-") : "-" === a ? "" : a; if (0 > g) { var l = ao.formatprefix(n, h); n = l.scale(n), e = l.symbol + d } else n *= g; n = p(n, h); var x, b, _ = n.lastindexof("."); if (0 > _) { var w = m ? n.lastindexof("e") : -1; 0 > w ? (x = n, b = "") : (x = n.substring(0, w), b = n.substring(w)) } else x = n.substring(0, _), b = t + n.substring(_ + 1); !c && s && (x = u(x, 1 / 0)); var s = v.length + x.length + b.length + (m ? 0 : i.length) , k = f > s ? new array(s = f - s + 1).join(r) : ""; return m && (x = u(k + x, k.length ? f - b.length : 1 / 0)), i += v, n = x + b, ("<" === o ? i + n + k : ">" === o ? k + i + n : "^" === o ? k.substring(0, s >>= 1) + i + n + k.substring(s) : i + (m ? n : k + n)) + e } } } function fn(n) { return n + "" } function hn() { this._ = new date(arguments.length > 1 ? date.utc.apply(this, arguments) : arguments[0]) } function on(n, t, e) { function r(t) { var e = n(t) , r = u(e, 1); return r - t > t - e ? e : r } function i(e) { return t(e = n(new va(e - 1)), 1), e } function u(n, e) { return t(n = new va(+n), e), n } function o(n, r, u) { var o = i(n) , a = []; if (u > 1) for (; r > o; ) e(o) % u || a.push(new date(+o)), t(o, 1); else for (; r > o; ) a.push(new date(+o)), t(o, 1); return a } function a(n, t, e) { try { va = hn; var r = new hn; return r._ = n, o(r, t, e) } finally { va = date } } n.floor = n, n.round = r, n.ceil = i, n.offset = u, n.range = o; var l = n.utc = in(n); return l.floor = l, l.round = in(r), l.ceil = in(i), l.offset = in(u), l.range = a, n } function in(n) { return function(t, e) { try { va = hn; var r = new hn; return r._ = t, n(r, e)._ } finally { va = date } } } function yn(n) { function t(n) { function t(t) { for (var e, i, u, o = [], a = -1, l = 0; ++a < r; ) 37 === n.charcodeat(a) && (o.push(n.slice(l, a)), null != (i = ya[e = n.charat(++a)]) && (e = n.charat(++a)), (u = a[e]) && (e = u(t, null == i ? "e" === e ? " " : "0" : i)), o.push(e), l = a + 1); return o.push(n.slice(l, a)), o.join("") } var r = n.length; return t.parse = function(t) { var r = { y: 1900, m: 0, d: 1, h: 0, m: 0, s: 0, l: 0, z: null } , i = e(r, n, t, 0); if (i != t.length) return null; "p"in r && (r.h = r.h % 12 + 12 * r.p); var u = null != r.z && va !== hn , o = new (u ? hn : va); return "j"in r ? o.setfullyear(r.y, 0, r.j) : "w"in r || "u"in r ? ("w"in r || (r.w = "w"in r ? 1 : 0), o.setfullyear(r.y, 0, 1), o.setfullyear(r.y, 0, "w"in r ? (r.w + 6) % 7 + 7 * r.w - (o.getday() + 5) % 7 : r.w + 7 * r.u - (o.getday() + 6) % 7)) : o.setfullyear(r.y, r.m, r.d), o.sethours(r.h + (r.z / 100 | 0), r.m + r.z % 100, r.s, r.l), u ? o._ : o } , t.tostring = function() { return n } , t } function e(n, t, e, r) { for (var i, u, o, a = 0, l = t.length, c = e.length; l > a; ) { if (r >= c) return -1; if (i = t.charcodeat(a++), 37 === i) { if (o = t.charat(a++), u = c[o in ya ? t.charat(a++) : o], !u || (r = u(n, e, r)) < 0) return -1 } else if (i != e.charcodeat(r++)) return -1 } return r } function r(n, t, e) { _.lastindex = 0; var r = _.exec(t.slice(e)); return r ? (n.w = w.get(r[0].tolowercase()), e + r[0].length) : -1 } function i(n, t, e) { x.lastindex = 0; var r = x.exec(t.slice(e)); return r ? (n.w = b.get(r[0].tolowercase()), e + r[0].length) : -1 } function u(n, t, e) { n.lastindex = 0; var r = n.exec(t.slice(e)); return r ? (n.m = e.get(r[0].tolowercase()), e + r[0].length) : -1 } function o(n, t, e) { s.lastindex = 0; var r = s.exec(t.slice(e)); return r ? (n.m = k.get(r[0].tolowercase()), e + r[0].length) : -1 } function a(n, t, r) { return e(n, a.c.tostring(), t, r) } function l(n, t, r) { return e(n, a.x.tostring(), t, r) } function c(n, t, r) { return e(n, a.x.tostring(), t, r) } function f(n, t, e) { var r = m.get(t.slice(e, e += 2).tolowercase()); return null == r ? -1 : (n.p = r, e) } var s = n.datetime , h = n.date , p = n.time , g = n.periods , v = n.days , d = n.shortdays , y = n.months , m = n.shortmonths; t.utc = function(n) { function e(n) { try { va = hn; var t = new va; return t._ = n, r(t) } finally { va = date } } var r = t(n); return e.parse = function(n) { try { va = hn; var t = r.parse(n); return t && t._ } finally { va = date } } , e.tostring = r.tostring, e } , t.multi = t.utc.multi = ct; var m = ao.map() , x = vn(v) , b = xn(v) , _ = vn(d) , w = xn(d) , s = vn(y) , k = xn(y) , n = vn(m) , e = xn(m); g.foreach(function(n, t) { m.set(n.tolowercase(), t) }); var a = { a: function(n) { return d[n.getday()] }, a: function(n) { return v[n.getday()] }, b: function(n) { return m[n.getmonth()] }, b: function(n) { return y[n.getmonth()] }, c: t(s), d: function(n, t) { return zn(n.getdate(), t, 2) }, e: function(n, t) { return zn(n.getdate(), t, 2) }, h: function(n, t) { return zn(n.gethours(), t, 2) }, i: function(n, t) { return zn(n.gethours() % 12 || 12, t, 2) }, j: function(n, t) { return zn(1 + ga.dayofyear(n), t, 3) }, l: function(n, t) { return zn(n.getmilliseconds(), t, 3) }, m: function(n, t) { return zn(n.getmonth() + 1, t, 2) }, m: function(n, t) { return zn(n.getminutes(), t, 2) }, p: function(n) { return g[+(n.gethours() >= 12)] }, s: function(n, t) { return zn(n.getseconds(), t, 2) }, u: function(n, t) { return zn(ga.sundayofyear(n), t, 2) }, w: function(n) { return n.getday() }, w: function(n, t) { return zn(ga.mondayofyear(n), t, 2) }, x: t(h), x: t(p), y: function(n, t) { return zn(n.getfullyear() % 100, t, 2) }, y: function(n, t) { return zn(n.getfullyear() % 1e4, t, 4) }, z: at, "%": function() { return "%" } } , c = { a: r, a: i, b: u, b: o, c: a, d: tt, e: tt, h: rt, i: rt, j: et, l: ot, m: nt, m: it, p: f, s: ut, u: bn, w: $n, w: wn, x: l, x: c, y: gn, y: jn, z: kn, "%": lt }; return t } function zn(n, t, e) { var r = 0 > n ? "-" : "" , i = (r ? -n : n) + "" , u = i.length; return r + (e > u ? new array(e - u + 1).join(t) + i : i) } function vn(n) { return new regexp("^(?:" + n.map(ao.requote).join("|") + ")","i") } function xn(n) { for (var t = new c, e = -1, r = n.length; ++e < r; ) t.set(n[e].tolowercase(), e); return t } function $n(n, t, e) { ma.lastindex = 0; var r = ma.exec(t.slice(e, e + 1)); return r ? (n.w = +r[0], e + r[0].length) : -1 } function bn(n, t, e) { ma.lastindex = 0; var r = ma.exec(t.slice(e)); return r ? (n.u = +r[0], e + r[0].length) : -1 } function wn(n, t, e) { ma.lastindex = 0; var r = ma.exec(t.slice(e)); return r ? (n.w = +r[0], e + r[0].length) : -1 } function jn(n, t, e) { ma.lastindex = 0; var r = ma.exec(t.slice(e, e + 4)); return r ? (n.y = +r[0], e + r[0].length) : -1 } function gn(n, t, e) { ma.lastindex = 0; var r = ma.exec(t.slice(e, e + 2)); return r ? (n.y = qn(+r[0]), e + r[0].length) : -1 } function kn(n, t, e) { return /^[+-]\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.z = -t, e + 5) : -1 } function qn(n) { return n + (n > 68 ? 1900 : 2e3) } function nt(n, t, e) { ma.lastindex = 0; var r = ma.exec(t.slice(e, e + 2)); return r ? (n.m = r[0] - 1, e + r[0].length) : -1 } function tt(n, t, e) { ma.lastindex = 0; var r = ma.exec(t.slice(e, e + 2)); return r ? (n.d = +r[0], e + r[0].length) : -1 } function et(n, t, e) { ma.lastindex = 0; var r = ma.exec(t.slice(e, e + 3)); return r ? (n.j = +r[0], e + r[0].length) : -1 } function rt(n, t, e) { ma.lastindex = 0; var r = ma.exec(t.slice(e, e + 2)); return r ? (n.h = +r[0], e + r[0].length) : -1 } function it(n, t, e) { ma.lastindex = 0; var r = ma.exec(t.slice(e, e + 2)); return r ? (n.m = +r[0], e + r[0].length) : -1 } function ut(n, t, e) { ma.lastindex = 0; var r = ma.exec(t.slice(e, e + 2)); return r ? (n.s = +r[0], e + r[0].length) : -1 } function ot(n, t, e) { ma.lastindex = 0; var r = ma.exec(t.slice(e, e + 3)); return r ? (n.l = +r[0], e + r[0].length) : -1 } function at(n) { var t = n.gettimezoneoffset() , e = t > 0 ? "-" : "+" , r = xo(t) / 60 | 0 , i = xo(t) % 60; return e + zn(r, "0", 2) + zn(i, "0", 2) } function lt(n, t, e) { ma.lastindex = 0; var r = ma.exec(t.slice(e, e + 1)); return r ? e + r[0].length : -1 } function ct(n) { for (var t = n.length, e = -1; ++e < t; ) n[e][0] = this(n[e][0]); return function(t) { for (var e = 0, r = n[e]; !r[1](t); ) r = n[++e]; return r[0](t) } } function ft() {} function st(n, t, e) { var r = e.s = n + t , i = r - n , u = r - i; e.t = n - u + (t - i) } function ht(n, t) { n && wa.hasownproperty(n.type) && wa[n.type](n, t) } function pt(n, t, e) { var r, i = -1, u = n.length - e; for (t.linestart(); ++i < u; ) r = n[i], t.point(r[0], r[1], r[2]); t.lineend() } function gt(n, t) { var e = -1 , r = n.length; for (t.polygonstart(); ++e < r; ) pt(n[e], t, 1); t.polygonend() } function vt() { function n(n, t) { n *= yo, t = t * yo / 2 + fo / 4; var e = n - r , o = e >= 0 ? 1 : -1 , a = o * e , l = math.cos(t) , c = math.sin(t) , f = u * c , s = i * l + f * math.cos(a) , h = f * o * math.sin(a); ka.add(math.atan2(h, s)), r = n, i = l, u = c } var t, e, r, i, u; na.point = function(o, a) { na.point = n, r = (t = o) * yo, i = math.cos(a = (e = a) * yo / 2 + fo / 4), u = math.sin(a) } , na.lineend = function() { n(t, e) } } function dt(n) { var t = n[0] , e = n[1] , r = math.cos(e); return [r * math.cos(t), r * math.sin(t), math.sin(e)] } function yt(n, t) { return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] } function mt(n, t) { return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]] } function mt(n, t) { n[0] += t[0], n[1] += t[1], n[2] += t[2] } function xt(n, t) { return [n[0] * t, n[1] * t, n[2] * t] } function bt(n) { var t = math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]); n[0] /= t, n[1] /= t, n[2] /= t } function _t(n) { return [math.atan2(n[1], n[0]), tn(n[2])] } function wt(n, t) { return xo(n[0] - t[0]) < uo && xo(n[1] - t[1]) < uo } function st(n, t) { n *= yo; var e = math.cos(t *= yo); kt(e * math.cos(n), e * math.sin(n), math.sin(t)) } function kt(n, t, e) { ++ea, ca += (n - ca) / ea, za += (t - za) / ea, la += (e - la) / ea } function nt() { function n(n, i) { n *= yo; var u = math.cos(i *= yo) , o = u * math.cos(n) , a = u * math.sin(n) , l = math.sin(i) , c = math.atan2(math.sqrt((c = e * l - r * a) * c + (c = r * o - t * l) * c + (c = t * a - e * o) * c), t * o + e * a + r * l); aa += c, qa += c * (t + (t = o)), ta += c * (e + (e = a)), ra += c * (r + (r = l)), kt(t, e, r) } var t, e, r; ja.point = function(i, u) { i *= yo; var o = math.cos(u *= yo); t = o * math.cos(i), e = o * math.sin(i), r = math.sin(u), ja.point = n, kt(t, e, r) } } function et() { ja.point = st } function at() { function n(n, t) { n *= yo; var e = math.cos(t *= yo) , o = e * math.cos(n) , a = e * math.sin(n) , l = math.sin(t) , c = i * l - u * a , f = u * o - r * l , s = r * a - i * o , h = math.sqrt(c * c + f * f + s * s) , p = r * o + i * a + u * l , g = h && -nn(p) / h , v = math.atan2(h, p); da += g * c, pa += g * f, ua += g * s, aa += v, qa += v * (r + (r = o)), ta += v * (i + (i = a)), ra += v * (u + (u = l)), kt(r, i, u) } var t, e, r, i, u; ja.point = function(o, a) { t = o, e = a, ja.point = n, o *= yo; var l = math.cos(a *= yo); r = l * math.cos(o), i = l * math.sin(o), u = math.sin(a), kt(r, i, u) } , ja.lineend = function() { n(t, e), ja.lineend = et, ja.point = st } } function ct(n, t) { function e(e, r) { return e = n(e, r), t(e[0], e[1]) } return n.invert && t.invert && (e.invert = function(e, r) { return e = t.invert(e, r), e && n.invert(e[0], e[1]) } ), e } function zt() { return !0 } function lt(n, t, e, r, i) { var u = [] , o = []; if (n.foreach(function(n) { if (!((t = n.length - 1) <= 0)) { var t, e = n[0], r = n[t]; if (wt(e, r)) { i.linestart(); for (var a = 0; t > a; ++a) i.point((e = n[a])[0], e[1]); return void i.lineend() } var l = new tt(e,n,null,!0) , c = new tt(e,null,l,!1); l.o = c, u.push(l), o.push(c), l = new tt(r,n,null,!1), c = new tt(r,null,l,!0), l.o = c, u.push(l), o.push(c) } }), o.sort(t), qt(u), qt(o), u.length) { for (var a = 0, l = e, c = o.length; c > a; ++a) o[a].e = l = !l; for (var f, s, h = u[0]; ; ) { for (var p = h, g = !0; p.v; ) if ((p = p.n) === h) return; f = p.z, i.linestart(); do { if (p.v = p.o.v = !0, p.e) { if (g) for (var a = 0, c = f.length; c > a; ++a) i.point((s = f[a])[0], s[1]); else r(p.x, p.n.x, 1, i); p = p.n } else { if (g) { f = p.p.z; for (var a = f.length - 1; a >= 0; --a) i.point((s = f[a])[0], s[1]) } else r(p.x, p.p.x, -1, i); p = p.p } p = p.o, f = p.z, g = !g } while (!p.v);i.lineend() } } } function qt(n) { if (t = n.length) { for (var t, e, r = 0, i = n[0]; ++r < t; ) i.n = e = n[r], e.p = i, i = e; i.n = e = n[0], e.p = i } } function tt(n, t, e, r) { this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null } function rt(n, t, e, r) { return function(i, u) { function o(t, e) { var r = i(t, e); n(t = r[0], e = r[1]) && u.point(t, e) } function a(n, t) { var e = i(n, t); d.point(e[0], e[1]) } function l() { m.point = a, d.linestart() } function c() { m.point = o, d.lineend() } function f(n, t) { v.push([n, t]); var e = i(n, t); x.point(e[0], e[1]) } function s() { x.linestart(), v = [] } function h() { f(v[0][0], v[0][1]), x.lineend(); var n, t = x.clean(), e = m.buffer(), r = e.length; if (v.pop(), g.push(v), v = null, r) if (1 & t) { n = e[0]; var i, r = n.length - 1, o = -1; if (r > 0) { for (b || (u.polygonstart(), b = !0), u.linestart(); ++o < r; ) u.point((i = n[o])[0], i[1]); u.lineend() } } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), p.push(e.filter(dt)) } var p, g, v, d = t(u), y = i.invert(r[0], r[1]), m = { point: o, linestart: l, lineend: c, polygonstart: function() { m.point = f, m.linestart = s, m.lineend = h, p = [], g = [] }, polygonend: function() { m.point = o, m.linestart = l, m.lineend = c, p = ao.merge(p); var n = ot(y, g); p.length ? (b || (u.polygonstart(), b = !0), lt(p, ut, n, e, u)) : n && (b || (u.polygonstart(), b = !0), u.linestart(), e(null, null, 1, u), u.lineend()), b && (u.polygonend(), b = !1), p = g = null }, sphere: function() { u.polygonstart(), u.linestart(), e(null, null, 1, u), u.lineend(), u.polygonend() } }, m = pt(), x = t(m), b = !1; return m } } function dt(n) { return n.length > 1 } function pt() { var n, t = []; return { linestart: function() { t.push(n = []) }, point: function(t, e) { n.push([t, e]) }, lineend: b, buffer: function() { var e = t; return t = [], n = null, e }, rejoin: function() { t.length > 1 && t.push(t.pop().concat(t.shift())) } } } function ut(n, t) { return ((n = n.x)[0] < 0 ? n[1] - io - uo : io - n[1]) - ((t = t.x)[0] < 0 ? t[1] - io - uo : io - t[1]) } function jt(n) { var t, e = nan, r = nan, i = nan; return { linestart: function() { n.linestart(), t = 1 }, point: function(u, o) { var a = u > 0 ? fo : -fo , l = xo(u - e); xo(l - fo) < uo ? (n.point(e, r = (r + o) / 2 > 0 ? io : -io), n.point(i, r), n.lineend(), n.linestart(), n.point(a, r), n.point(u, r), t = 0) : i !== a && l >= fo && (xo(e - i) < uo && (e -= i * uo), xo(u - a) < uo && (u -= a * uo), r = ft(e, r, u, o), n.point(i, r), n.lineend(), n.linestart(), n.point(a, r), t = 0), n.point(e = u, r = o), i = a }, lineend: function() { n.lineend(), e = r = nan }, clean: function() { return 2 - t } } } function ft(n, t, e, r) { var i, u, o = math.sin(n - e); return xo(o) > uo ? math.atan((math.sin(t) * (u = math.cos(r)) * math.sin(e) - math.sin(r) * (i = math.cos(t)) * math.sin(n)) / (i * u * o)) : (t + r) / 2 } function ht(n, t, e, r) { var i; if (null == n) i = e * io, r.point(-fo, i), r.point(0, i), r.point(fo, i), r.point(fo, 0), r.point(fo, -i), r.point(0, -i), r.point(-fo, -i), r.point(-fo, 0), r.point(-fo, i); else if (xo(n[0] - t[0]) > uo) { var u = n[0] < t[0] ? fo : -fo; i = e * u / 2, r.point(-u, i), r.point(0, i), r.point(u, i) } else r.point(t[0], t[1]) } function ot(n, t) { var e = n[0] , r = n[1] , i = [math.sin(e), -math.cos(e), 0] , u = 0 , o = 0; ka.reset(); for (var a = 0, l = t.length; l > a; ++a) { var c = t[a] , f = c.length; if (f) for (var s = c[0], h = s[0], p = s[1] / 2 + fo / 4, g = math.sin(p), v = math.cos(p), d = 1; ; ) { d === f && (d = 0), n = c[d]; var y = n[0] , m = n[1] / 2 + fo / 4 , m = math.sin(m) , x = math.cos(m) , b = y - h , _ = b >= 0 ? 1 : -1 , w = _ * b , s = w > fo , k = g * m; if (ka.add(math.atan2(k * _ * math.sin(w), v * x + k * math.cos(w))), u += s ? b + _ * ho : b, s ^ h >= e ^ y >= e) { var n = mt(dt(s), dt(n)); bt(n); var e = mt(i, n); bt(e); var a = (s ^ b >= 0 ? -1 : 1) * tn(e[2]); (r > a || r === a && (n[0] || n[1])) && (o += s ^ b >= 0 ? 1 : -1) } if (!d++) break; h = y, g = m, v = x, s = n } } return (-uo > u || uo > u && -uo > ka) ^ 1 & o } function it(n) { function t(n, t) { return math.cos(n) * math.cos(t) > u } function e(n) { var e, u, l, c, f; return { linestart: function() { c = l = !1, f = 1 }, point: function(s, h) { var p, g = [s, h], v = t(s, h), d = o ? v ? 0 : i(s, h) : v ? i(s + (0 > s ? fo : -fo), h) : 0; if (!e && (c = l = v) && n.linestart(), v !== l && (p = r(e, g), (wt(e, p) || wt(g, p)) && (g[0] += uo, g[1] += uo, v = t(g[0], g[1]))), v !== l) f = 0, v ? (n.linestart(), p = r(g, e), n.point(p[0], p[1])) : (p = r(e, g), n.point(p[0], p[1]), n.lineend()), e = p; else if (a && e && o ^ v) { var y; d & u || !(y = r(g, e, !0)) || (f = 0, o ? (n.linestart(), n.point(y[0][0], y[0][1]), n.point(y[1][0], y[1][1]), n.lineend()) : (n.point(y[1][0], y[1][1]), n.lineend(), n.linestart(), n.point(y[0][0], y[0][1]))) } !v || e && wt(e, g) || n.point(g[0], g[1]), e = g, l = v, u = d }, lineend: function() { l && n.lineend(), e = null }, clean: function() { return f | (c && l) << 1 } } } function r(n, t, e) { var r = dt(n) , i = dt(t) , o = [1, 0, 0] , a = mt(r, i) , l = yt(a, a) , c = a[0] , f = l - c * c; if (!f) return !e && n; var s = u * l / f , h = -u * c / f , p = mt(o, a) , g = xt(o, s) , v = xt(a, h); mt(g, v); var d = p , y = yt(g, d) , m = yt(d, d) , m = y * y - m * (yt(g, g) - 1); if (!(0 > m)) { var x = math.sqrt(m) , b = xt(d, (-y - x) / m); if (mt(b, g), b = _t(b), !e) return b; var _, w = n[0], s = t[0], k = n[1], n = t[1]; w > s && (_ = w, w = s, s = _); var e = s - w , a = xo(e - fo) < uo , c = a || uo > e; if (!a && k > n && (_ = k, k = n, n = _), c ? a ? k + n > 0 ^ b[1] < (xo(b[0] - w) < uo ? k : n) : k <= b[1] && b[1] <= n : e > fo ^ (w <= b[0] && b[0] <= s)) { var z = xt(d, (-y + x) / m); return mt(z, g), [b, _t(z)] } } } function i(t, e) { var r = o ? n : fo - n , i = 0; return -r > t ? i |= 1 : t > r && (i |= 2), -r > e ? i |= 4 : e > r && (i |= 8), i } var u = math.cos(n) , o = u > 0 , a = xo(u) > uo , l = ve(n, 6 * yo); return rt(t, e, l, o ? [0, -n] : [-fo, n - fo]) } function yt(n, t, e, r) { return function(i) { var u, o = i.a, a = i.b, l = o.x, c = o.y, f = a.x, s = a.y, h = 0, p = 1, g = f - l, v = s - c; if (u = n - l, g || !(u > 0)) { if (u /= g, 0 > g) { if (h > u) return; p > u && (p = u) } else if (g > 0) { if (u > p) return; u > h && (h = u) } if (u = e - l, g || !(0 > u)) { if (u /= g, 0 > g) { if (u > p) return; u > h && (h = u) } else if (g > 0) { if (h > u) return; p > u && (p = u) } if (u = t - c, v || !(u > 0)) { if (u /= v, 0 > v) { if (h > u) return; p > u && (p = u) } else if (v > 0) { if (u > p) return; u > h && (h = u) } if (u = r - c, v || !(0 > u)) { if (u /= v, 0 > v) { if (u > p) return; u > h && (h = u) } else if (v > 0) { if (h > u) return; p > u && (p = u) } return h > 0 && (i.a = { x: l + h * g, y: c + h * v }), 1 > p && (i.b = { x: l + p * g, y: c + p * v }), i } } } } } } function zt(n, t, e, r) { function i(r, i) { return xo(r[0] - n) < uo ? i > 0 ? 0 : 3 : xo(r[0] - e) < uo ? i > 0 ? 2 : 1 : xo(r[1] - t) < uo ? i > 0 ? 1 : 0 : i > 0 ? 3 : 2 } function u(n, t) { return o(n.x, t.x) } function o(n, t) { var e = i(n, 1) , r = i(t, 1); return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0] } return function(a) { function l(n) { for (var t = 0, e = d.length, r = n[1], i = 0; e > i; ++i) for (var u, o = 1, a = d[i], l = a.length, c = a[0]; l > o; ++o) u = a[o], c[1] <= r ? u[1] > r && q(c, u, n) > 0 && ++t : u[1] <= r && q(c, u, n) < 0 && --t, c = u; return 0 !== t } function c(u, a, l, c) { var f = 0 , s = 0; if (null == u || (f = i(u, l)) !== (s = i(a, l)) || o(u, a) < 0 ^ l > 0) { do c.point(0 === f || 3 === f ? n : e, f > 1 ? r : t); while ((f = (f + l + 4) % 4) !== s) } else c.point(a[0], a[1]) } function f(i, u) { return i >= n && e >= i && u >= t && r >= u } function s(n, t) { f(n, t) && a.point(n, t) } function h() { c.point = g, d && d.push(y = []), s = !0, w = !1, b = _ = nan } function p() { v && (g(m, m), x && w && e.rejoin(), v.push(e.buffer())), c.point = s, w && a.lineend() } function g(n, t) { n = math.max(-ha, math.min(ha, n)), t = math.max(-ha, math.min(ha, t)); var e = f(n, t); if (d && y.push([n, t]), s) m = n, m = t, x = e, s = !1, e && (a.linestart(), a.point(n, t)); else if (e && w) a.point(n, t); else { var r = { a: { x: b, y: _ }, b: { x: n, y: t } }; a(r) ? (w || (a.linestart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineend(), k = !1) : e && (a.linestart(), a.point(n, t), k = !1) } b = n, _ = t, w = e } var v, d, y, m, m, x, b, _, w, s, k, n = a, e = pt(), a = yt(n, t, e, r), c = { point: s, linestart: h, lineend: p, polygonstart: function() { a = e, v = [], d = [], k = !0 }, polygonend: function() { a = n, v = ao.merge(v); var t = l([n, r]) , e = k && t , i = v.length; (e || i) && (a.polygonstart(), e && (a.linestart(), c(null, null, 1, a), a.lineend()), i && lt(v, u, t, c, a), a.polygonend()), v = d = y = null } }; return c } } function vt(n) { var t = 0 , e = fo / 3 , r = ae(n) , i = r(t, e); return i.parallels = function(n) { return arguments.length ? r(t = n[0] * fo / 180, e = n[1] * fo / 180) : [t / fo * 180, e / fo * 180] } , i } function xt(n, t) { function e(n, t) { var e = math.sqrt(u - 2 * i * math.sin(t)) / i; return [e * math.sin(n *= i), o - e * math.cos(n)] } var r = math.sin(n) , i = (r + math.sin(t)) / 2 , u = 1 + r * (2 * i - r) , o = math.sqrt(u) / i; return e.invert = function(n, t) { var e = o - t; return [math.atan2(n, e) / i, tn((u - (n * n + e * e) * i * i) / (2 * i))] } , e } function $t() { function n(n, t) { ia += i * n - r * t, r = n, i = t } var t, e, r, i; $a.point = function(u, o) { $a.point = n, t = r = u, e = i = o } , $a.lineend = function() { n(t, e) } } function bt(n, t) { ya > n && (ya = n), n > va && (va = n), za > t && (za = t), t > xa && (xa = t) } function wt() { function n(n, t) { o.push("m", n, ",", t, u) } function t(n, t) { o.push("m", n, ",", t), a.point = e } function e(n, t) { o.push("l", n, ",", t) } function r() { a.point = n } function i() { o.push("z") } var u = jt(4.5) , o = [] , a = { point: n, linestart: function() { a.point = t }, lineend: r, polygonstart: function() { a.lineend = i }, polygonend: function() { a.lineend = r, a.point = n }, pointradius: function(n) { return u = jt(n), a }, result: function() { if (o.length) { var n = o.join(""); return o = [], n } } }; return a } function jt(n) { return "m0," + n + "a" + n + "," + n + " 0 1,1 0," + -2 * n + "a" + n + "," + n + " 0 1,1 0," + 2 * n + "z" } function gt(n, t) { ca += n, za += t, ++la } function kt() { function n(n, r) { var i = n - t , u = r - e , o = math.sqrt(i * i + u * u); qa += o * (t + n) / 2, ta += o * (e + r) / 2, ra += o, gt(t = n, e = r) } var t, e; wa.point = function(r, i) { wa.point = n, gt(t = r, e = i) } } function qt() { wa.point = gt } function ne() { function n(n, t) { var e = n - r , u = t - i , o = math.sqrt(e * e + u * u); qa += o * (r + n) / 2, ta += o * (i + t) / 2, ra += o, o = i * n - r * t, da += o * (r + n), pa += o * (i + t), ua += 3 * o, gt(r = n, i = t) } var t, e, r, i; wa.point = function(u, o) { wa.point = n, gt(t = r = u, e = i = o) } , wa.lineend = function() { n(t, e) } } function te(n) { function t(t, e) { n.moveto(t + o, e), n.arc(t, e, o, 0, ho) } function e(t, e) { n.moveto(t, e), a.point = r } function r(t, e) { n.lineto(t, e) } function i() { a.point = t } function u() { n.closepath() } var o = 4.5 , a = { point: t, linestart: function() { a.point = e }, lineend: i, polygonstart: function() { a.lineend = u }, polygonend: function() { a.lineend = i, a.point = t }, pointradius: function(n) { return o = n, a }, result: b }; return a } function ee(n) { function t(n) { return (a ? r : e)(n) } function e(t) { return ue(t, function(e, r) { e = n(e, r), t.point(e[0], e[1]) }) } function r(t) { function e(e, r) { e = n(e, r), t.point(e[0], e[1]) } function r() { m = nan, s.point = u, t.linestart() } function u(e, r) { var u = dt([e, r]) , o = n(e, r); i(m, x, m, b, _, w, m = o[0], x = o[1], m = e, b = u[0], _ = u[1], w = u[2], a, t), t.point(m, x) } function o() { s.point = e, t.lineend() } function l() { r(), s.point = c, s.lineend = f } function c(n, t) { u(s = n, h = t), p = m, g = x, v = b, d = _, y = w, s.point = u } function f() { i(m, x, m, b, _, w, p, g, s, v, d, y, a, t), s.lineend = o, o() } var s, h, p, g, v, d, y, m, m, x, b, _, w, s = { point: e, linestart: r, lineend: o, polygonstart: function() { t.polygonstart(), s.linestart = l }, polygonend: function() { t.polygonend(), s.linestart = r } }; return s } function i(t, e, r, a, l, c, f, s, h, p, g, v, d, y) { var m = f - t , m = s - e , x = m * m + m * m; if (x > 4 * u && d--) { var b = a + p , _ = l + g , w = c + v , s = math.sqrt(b * b + _ * _ + w * w) , k = math.asin(w /= s) , n = xo(xo(w) - 1) < uo || xo(r - h) < uo ? (r + h) / 2 : math.atan2(_, b) , e = n(n, k) , a = e[0] , c = e[1] , z = a - t , l = c - e , q = m * z - m * l; (q * q / x > u || xo((m * z + m * l) / x - .5) > .3 || o > a * p + l * g + c * v) && (i(t, e, r, a, l, c, a, c, n, b /= s, _ /= s, w, d, y), y.point(a, c), i(a, c, n, b, _, w, f, s, h, p, g, v, d, y)) } } var u = .5 , o = math.cos(30 * yo) , a = 16; return t.precision = function(n) { return arguments.length ? (a = (u = n * n) > 0 && 16, t) : math.sqrt(u) } , t } function re(n) { var t = ee(function(t, e) { return n([t * zo, e * zo]) }); return function(n) { return le(t(n)) } } function ie(n) { this.stream = n } function ue(n, t) { return { point: t, sphere: function() { n.sphere() }, linestart: function() { n.linestart() }, lineend: function() { n.lineend() }, polygonstart: function() { n.polygonstart() }, polygonend: function() { n.polygonend() } } } function oe(n) { return ae(function() { return n })() } function ae(n) { function t(n) { return n = a(n[0] * yo, n[1] * yo), [n[0] * h + l, c - n[1] * h] } function e(n) { return n = a.invert((n[0] - l) / h, (c - n[1]) / h), n && [n[0] * zo, n[1] * zo] } function r() { a = ct(o = se(y, m, x), u); var n = u(v, d); return l = p - n[0] * h, c = g + n[1] * h, i() } function i() { return f && (f.valid = !1, f = null), t } var u, o, a, l, c, f, s = ee(function(n, t) { return n = u(n, t), [n[0] * h + l, c - n[1] * h] }), h = 150, p = 480, g = 250, v = 0, d = 0, y = 0, m = 0, x = 0, b = fa, _ = m, w = null, s = null; return t.stream = function(n) { return f && (f.valid = !1), f = le(b(o, s(_(n)))), f.valid = !0, f } , t.clipangle = function(n) { return arguments.length ? (b = null == n ? (w = n, fa) : it((w = +n) * yo), i()) : w } , t.clipextent = function(n) { return arguments.length ? (s = n, _ = n ? zt(n[0][0], n[0][1], n[1][0], n[1][1]) : m, i()) : s } , t.scale = function(n) { return arguments.length ? (h = +n, r()) : h } , t.translate = function(n) { return arguments.length ? (p = +n[0], g = +n[1], r()) : [p, g] } , t.center = function(n) { return arguments.length ? (v = n[0] % 360 * yo, d = n[1] % 360 * yo, r()) : [v * zo, d * zo] } , t.rotate = function(n) { return arguments.length ? (y = n[0] % 360 * yo, m = n[1] % 360 * yo, x = n.length > 2 ? n[2] % 360 * yo : 0, r()) : [y * zo, m * zo, x * zo] } , ao.rebind(t, s, "precision"), function() { return u = n.apply(this, arguments), t.invert = u.invert && e, r() } } function le(n) { return ue(n, function(t, e) { n.point(t * yo, e * yo) }) } function ce(n, t) { return [n, t] } function fe(n, t) { return [n > fo ? n - ho : -fo > n ? n + ho : n, t] } function se(n, t, e) { return n ? t || e ? ct(pe(n), ge(t, e)) : pe(n) : t || e ? ge(t, e) : fe } function he(n) { return function(t, e) { return t += n, [t > fo ? t - ho : -fo > t ? t + ho : t, e] } } function pe(n) { var t = he(n); return t.invert = he(-n), t } function ge(n, t) { function e(n, t) { var e = math.cos(t) , a = math.cos(n) * e , l = math.sin(n) * e , c = math.sin(t) , f = c * r + a * i; return [math.atan2(l * u - f * o, a * r - c * i), tn(f * u + l * o)] } var r = math.cos(n) , i = math.sin(n) , u = math.cos(t) , o = math.sin(t); return e.invert = function(n, t) { var e = math.cos(t) , a = math.cos(n) * e , l = math.sin(n) * e , c = math.sin(t) , f = c * u - l * o; return [math.atan2(l * u + c * o, a * r + f * i), tn(f * r - a * i)] } , e } function ve(n, t) { var e = math.cos(n) , r = math.sin(n); return function(i, u, o, a) { var l = o * t; null != i ? (i = de(e, i), u = de(e, u), (o > 0 ? u > i : i > u) && (i += o * ho)) : (i = n + o * ho, u = n - .5 * l); for (var c, f = i; o > 0 ? f > u : u > f; f -= l) a.point((c = _t([e, -r * math.cos(f), -r * math.sin(f)]))[0], c[1]) } } function de(n, t) { var e = dt(t); e[0] -= n, bt(e); var r = nn(-e[1]); return ((-e[2] < 0 ? -r : r) + 2 * math.pi - uo) % (2 * math.pi) } function ye(n, t, e) { var r = ao.range(n, t - uo, e).concat(t); return function(n) { return r.map(function(t) { return [n, t] }) } } function me(n, t, e) { var r = ao.range(n, t - uo, e).concat(t); return function(n) { return r.map(function(t) { return [t, n] }) } } function me(n) { return n.source } function xe(n) { return n.target } function be(n, t, e, r) { var i = math.cos(t) , u = math.sin(t) , o = math.cos(r) , a = math.sin(r) , l = i * math.cos(n) , c = i * math.sin(n) , f = o * math.cos(e) , s = o * math.sin(e) , h = 2 * math.asin(math.sqrt(on(r - t) + i * o * on(e - n))) , p = 1 / math.sin(h) , g = h ? function(n) { var t = math.sin(n *= h) * p , e = math.sin(h - n) * p , r = e * l + t * f , i = e * c + t * s , o = e * u + t * a; return [math.atan2(i, r) * zo, math.atan2(o, math.sqrt(r * r + i * i)) * zo] } : function() { return [n * zo, t * zo] } ; return g.distance = h, g } function _e() { function n(n, i) { var u = math.sin(i *= yo) , o = math.cos(i) , a = xo((n *= yo) - t) , l = math.cos(a); ja += math.atan2(math.sqrt((a = o * math.sin(a)) * a + (a = r * u - e * o * l) * a), e * u + r * o * l), t = n, e = u, r = o } var t, e, r; ga.point = function(i, u) { t = i * yo, e = math.sin(u *= yo), r = math.cos(u), ga.point = n } , ga.lineend = function() { ga.point = ga.lineend = b } } function we(n, t) { function e(t, e) { var r = math.cos(t) , i = math.cos(e) , u = n(r * i); return [u * i * math.sin(t), u * math.sin(e)] } return e.invert = function(n, e) { var r = math.sqrt(n * n + e * e) , i = t(r) , u = math.sin(i) , o = math.cos(i); return [math.atan2(n * u, r * o), math.asin(r && e * u / r)] } , e } function se(n, t) { function e(n, t) { o > 0 ? -io + uo > t && (t = -io + uo) : t > io - uo && (t = io - uo); var e = o / math.pow(i(t), u); return [e * math.sin(u * n), o - e * math.cos(u * n)] } var r = math.cos(n) , i = function(n) { return math.tan(fo / 4 + n / 2) } , u = n === t ? math.sin(n) : math.log(r / math.cos(t)) / math.log(i(t) / i(n)) , o = r * math.pow(i(n), u) / u; return u ? (e.invert = function(n, t) { var e = o - t , r = k(u) * math.sqrt(n * n + e * e); return [math.atan2(n, e) / u, 2 * math.atan(math.pow(o / r, 1 / u)) - io] } , e) : ne } function ke(n, t) { function e(n, t) { var e = u - t; return [e * math.sin(i * n), u - e * math.cos(i * n)] } var r = math.cos(n) , i = n === t ? math.sin(n) : (r - math.cos(t)) / (t - n) , u = r / i + n; return xo(i) < uo ? ce : (e.invert = function(n, t) { var e = u - t; return [math.atan2(n, e) / i, u - k(i) * math.sqrt(n * n + e * e)] } , e) } function ne(n, t) { return [n, math.log(math.tan(fo / 4 + t / 2))] } function ee(n) { var t, e = oe(n), r = e.scale, i = e.translate, u = e.clipextent; return e.scale = function() { var n = r.apply(e, arguments); return n === e ? t ? e.clipextent(null) : e : n } , e.translate = function() { var n = i.apply(e, arguments); return n === e ? t ? e.clipextent(null) : e : n } , e.clipextent = function(n) { var o = u.apply(e, arguments); if (o === e) { if (t = null == n) { var a = fo * r() , l = i(); u([[l[0] - a, l[1] - a], [l[0] + a, l[1] + a]]) } } else t && (o = null); return o } , e.clipextent(null) } function ae(n, t) { return [math.log(math.tan(fo / 4 + t / 2)), -n] } function ce(n) { return n[0] } function ze(n) { return n[1] } function le(n) { for (var t = n.length, e = [0, 1], r = 2, i = 2; t > i; i++) { for (; r > 1 && q(n[e[r - 2]], n[e[r - 1]], n[i]) <= 0; ) --r; e[r++] = i } return e.slice(0, r) } function qe(n, t) { return n[0] - t[0] || n[1] - t[1] } function te(n, t, e) { return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0]) } function re(n, t, e, r) { var i = n[0] , u = e[0] , o = t[0] - i , a = r[0] - u , l = n[1] , c = e[1] , f = t[1] - l , s = r[1] - c , h = (a * (l - c) - s * (i - u)) / (s * o - a * f); return [i + h * o, l + h * f] } function de(n) { var t = n[0] , e = n[n.length - 1]; return !(t[0] - e[0] || t[1] - e[1]) } function pe() { rr(this), this.edge = this.site = this.circle = null } function ue(n) { var t = cl.pop() || new pe; return t.site = n, t } function je(n) { be(n), ol.remove(n), cl.push(n), rr(n) } function fe(n) { var t = n.circle , e = t.x , r = t.cy , i = { x: e, y: r } , u = n.p , o = n.n , a = [n]; je(n); for (var l = u; l.circle && xo(e - l.circle.x) < uo && xo(r - l.circle.cy) < uo; ) u = l.p, a.unshift(l), je(l), l = u; a.unshift(l), be(l); for (var c = o; c.circle && xo(e - c.circle.x) < uo && xo(r - c.circle.cy) < uo; ) o = c.n, a.push(c), je(c), c = o; a.push(c), be(c); var f, s = a.length; for (f = 1; s > f; ++f) c = a[f], l = a[f - 1], nr(c.edge, l.site, c.site, i); l = a[0], c = a[s - 1], c.edge = ke(l.site, c.site, null, i), $e(l), $e(c) } function he(n) { for (var t, e, r, i, u = n.x, o = n.y, a = ol._; a; ) if (r = oe(a, o) - u, r > uo) a = a.l; else { if (i = u - ie(a, o), !(i > uo)) { r > -uo ? (t = a.p, e = a) : i > -uo ? (t = a, e = a.n) : t = e = a; break } if (!a.r) { t = a; break } a = a.r } var l = ue(n); if (ol.insert(t, l), t || e) { if (t === e) return be(t), e = ue(t.site), ol.insert(l, e), l.edge = e.edge = ke(t.site, l.site), $e(t), void $e(e); if (!e) return void (l.edge = ke(t.site, l.site)); be(t), be(e); var c = t.site , f = c.x , s = c.y , h = n.x - f , p = n.y - s , g = e.site , v = g.x - f , d = g.y - s , y = 2 * (h * d - p * v) , m = h * h + p * p , m = v * v + d * d , x = { x: (d * m - p * m) / y + f, y: (h * m - v * m) / y + s }; nr(e.edge, c, g, x), l.edge = ke(c, n, null, x), e.edge = ke(n, g, null, x), $e(t), $e(e) } } function oe(n, t) { var e = n.site , r = e.x , i = e.y , u = i - t; if (!u) return r; var o = n.p; if (!o) return -(1 / 0); e = o.site; var a = e.x , l = e.y , c = l - t; if (!c) return a; var f = a - r , s = 1 / u - 1 / c , h = f / c; return s ? (-h + math.sqrt(h * h - 2 * s * (f * f / (-2 * c) - l + c / 2 + i - u / 2))) / s + r : (r + a) / 2 } function ie(n, t) { var e = n.n; if (e) return oe(e, t); var r = n.site; return r.y === t ? r.x : 1 / 0 } function ye(n) { this.site = n, this.edges = [] } function ze(n) { for (var t, e, r, i, u, o, a, l, c, f, s = n[0][0], h = n[1][0], p = n[0][1], g = n[1][1], v = ul, d = v.length; d--; ) if (u = v[d], u && u.prepare()) for (a = u.edges, l = a.length, o = 0; l > o; ) f = a[o].end(), r = f.x, i = f.y, c = a[++o % l].start(), t = c.x, e = c.y, (xo(r - t) > uo || xo(i - e) > uo) && (a.splice(o, 0, new tr(qe(u.site, f, xo(r - s) < uo && g - i > uo ? { x: s, y: xo(t - s) < uo ? e : g } : xo(i - g) < uo && h - r > uo ? { x: xo(e - g) < uo ? t : h, y: g } : xo(r - h) < uo && i - p > uo ? { x: h, y: xo(t - h) < uo ? e : p } : xo(i - p) < uo && r - s > uo ? { x: xo(e - p) < uo ? t : s, y: p } : null),u.site,null)), ++l) } function ve(n, t) { return t.angle - n.angle } function xe() { rr(this), this.x = this.y = this.arc = this.site = this.cy = null } function $e(n) { var t = n.p , e = n.n; if (t && e) { var r = t.site , i = n.site , u = e.site; if (r !== u) { var o = i.x , a = i.y , l = r.x - o , c = r.y - a , f = u.x - o , s = u.y - a , h = 2 * (l * s - c * f); if (!(h >= -jo)) { var p = l * l + c * c , g = f * f + s * s , v = (s * p - c * g) / h , d = (l * g - f * p) / h , s = d + a , y = fl.pop() || new xe; y.arc = n, y.site = i, y.x = v + o, y.y = s + math.sqrt(v * v + d * d), y.cy = s, n.circle = y; for (var m = null, m = ll._; m; ) if (y.y < m.y || y.y === m.y && y.x <= m.x) { if (!m.l) { m = m.p; break } m = m.l } else { if (!m.r) { m = m; break } m = m.r } ll.insert(m, y), m || (al = y) } } } } function be(n) { var t = n.circle; t && (t.p || (al = t.n), ll.remove(t), fl.push(t), rr(t), n.circle = null) } function we(n) { for (var t, e = il, r = yt(n[0][0], n[0][1], n[1][0], n[1][1]), i = e.length; i--; ) t = e[i], (!je(t, n) || !r(t) || xo(t.a.x - t.b.x) < uo && xo(t.a.y - t.b.y) < uo) && (t.a = t.b = null, e.splice(i, 1)) } function je(n, t) { var e = n.b; if (e) return !0; var r, i, u = n.a, o = t[0][0], a = t[1][0], l = t[0][1], c = t[1][1], f = n.l, s = n.r, h = f.x, p = f.y, g = s.x, v = s.y, d = (h + g) / 2, y = (p + v) / 2; if (v === p) { if (o > d || d >= a) return; if (h > g) { if (u) { if (u.y >= c) return } else u = { x: d, y: l }; e = { x: d, y: c } } else { if (u) { if (u.y < l) return } else u = { x: d, y: c }; e = { x: d, y: l } } } else if (r = (h - g) / (v - p), i = y - r * d, -1 > r || r > 1) if (h > g) { if (u) { if (u.y >= c) return } else u = { x: (l - i) / r, y: l }; e = { x: (c - i) / r, y: c } } else { if (u) { if (u.y < l) return } else u = { x: (c - i) / r, y: c }; e = { x: (l - i) / r, y: l } } else if (v > p) { if (u) { if (u.x >= a) return } else u = { x: o, y: r * o + i }; e = { x: a, y: r * a + i } } else { if (u) { if (u.x < o) return } else u = { x: a, y: r * a + i }; e = { x: o, y: r * o + i } } return n.a = u, n.b = e, !0 } function ge(n, t) { this.l = n, this.r = t, this.a = this.b = null } function ke(n, t, e, r) { var i = new ge(n,t); return il.push(i), e && nr(i, n, t, e), r && nr(i, t, n, r), ul[n.i].edges.push(new tr(i,n,t)), ul[t.i].edges.push(new tr(i,t,n)), i } function qe(n, t, e) { var r = new ge(n,null); return r.a = t, r.b = e, il.push(r), r } function nr(n, t, e, r) { n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e) } function tr(n, t, e) { var r = n.a , i = n.b; this.edge = n, this.site = t, this.angle = e ? math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? math.atan2(i.x - r.x, r.y - i.y) : math.atan2(r.x - i.x, i.y - r.y) } function er() { this._ = null } function rr(n) { n.u = n.c = n.l = n.r = n.p = n.n = null } function ir(n, t) { var e = t , r = t.r , i = e.u; i ? i.l === e ? i.l = r : i.r = r : n._ = r, r.u = i, e.u = r, e.r = r.l, e.r && (e.r.u = e), r.l = e } function ur(n, t) { var e = t , r = t.l , i = e.u; i ? i.l === e ? i.l = r : i.r = r : n._ = r, r.u = i, e.u = r, e.l = r.r, e.l && (e.l.u = e), r.r = e } function or(n) { for (; n.l; ) n = n.l; return n } function ar(n, t) { var e, r, i, u = n.sort(lr).pop(); for (il = [], ul = new array(n.length), ol = new er, ll = new er; ; ) if (i = al, u && (!i || u.y < i.y || u.y === i.y && u.x < i.x)) u.x === e && u.y === r || (ul[u.i] = new ye(u), he(u), e = u.x, r = u.y), u = n.pop(); else { if (!i) break; fe(i.arc) } t && (we(t), ze(t)); var o = { cells: ul, edges: il }; return ol = ll = il = ul = null, o } function lr(n, t) { return t.y - n.y || t.x - n.x } function cr(n, t, e) { return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y) } function fr(n) { return n.x } function sr(n) { return n.y } function hr() { return { leaf: !0, nodes: [], point: null, x: null, y: null } } function pr(n, t, e, r, i, u) { if (!n(t, e, r, i, u)) { var o = .5 * (e + i) , a = .5 * (r + u) , l = t.nodes; l[0] && pr(n, l[0], e, r, o, a), l[1] && pr(n, l[1], o, r, i, a), l[2] && pr(n, l[2], e, a, o, u), l[3] && pr(n, l[3], o, a, i, u) } } function gr(n, t, e, r, i, u, o) { var a, l = 1 / 0; return function c(n, f, s, h, p) { if (!(f > u || s > o || r > h || i > p)) { if (g = n.point) { var g, v = t - n.x, d = e - n.y, y = v * v + d * d; if (l > y) { var m = math.sqrt(l = y); r = t - m, i = e - m, u = t + m, o = e + m, a = g } } for (var m = n.nodes, x = .5 * (f + h), b = .5 * (s + p), _ = t >= x, w = e >= b, s = w << 1 | _, k = s + 4; k > s; ++s) if (n = m[3 & s]) switch (3 & s) { case 0: c(n, f, s, x, b); break; case 1: c(n, x, s, h, b); break; case 2: c(n, f, b, x, p); break; case 3: c(n, x, b, h, p) } } }(n, r, i, u, o), a } function vr(n, t) { n = ao.rgb(n), t = ao.rgb(t); var e = n.r , r = n.g , i = n.b , u = t.r - e , o = t.g - r , a = t.b - i; return function(n) { return "#" + bn(math.round(e + u * n)) + bn(math.round(r + o * n)) + bn(math.round(i + a * n)) } } function dr(n, t) { var e, r = {}, i = {}; for (e in n) e in t ? r[e] = mr(n[e], t[e]) : i[e] = n[e]; for (e in t) e in n || (i[e] = t[e]); return function(n) { for (e in r) i[e] = r[e](n); return i } } function yr(n, t) { return n = +n, t = +t, function(e) { return n * (1 - e) + t * e } } function mr(n, t) { var e, r, i, u = hl.lastindex = pl.lastindex = 0, o = -1, a = [], l = []; for (n += "", t += ""; (e = hl.exec(n)) && (r = pl.exec(t)); ) (i = r.index) > u && (i = t.slice(u, i), a[o] ? a[o] += i : a[++o] = i), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, l.push({ i: o, x: yr(e, r) })), u = pl.lastindex; return u < t.length && (i = t.slice(u), a[o] ? a[o] += i : a[++o] = i), a.length < 2 ? l[0] ? (t = l[0].x, function(n) { return t(n) + "" } ) : function() { return t } : (t = l.length, function(n) { for (var e, r = 0; t > r; ++r) a[(e = l[r]).i] = e.x(n); return a.join("") } ) } function mr(n, t) { for (var e, r = ao.interpolators.length; --r >= 0 && !(e = ao.interpolators[r](n, t)); ) ; return e } function xr(n, t) { var e, r = [], i = [], u = n.length, o = t.length, a = math.min(n.length, t.length); for (e = 0; a > e; ++e) r.push(mr(n[e], t[e])); for (; u > e; ++e) i[e] = n[e]; for (; o > e; ++e) i[e] = t[e]; return function(n) { for (e = 0; a > e; ++e) i[e] = r[e](n); return i } } function br(n) { return function(t) { return 0 >= t ? 0 : t >= 1 ? 1 : n(t) } } function _r(n) { return function(t) { return 1 - n(1 - t) } } function wr(n) { return function(t) { return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t)) } } function sr(n) { return n * n } function kr(n) { return n * n * n } function nr(n) { if (0 >= n) return 0; if (n >= 1) return 1; var t = n * n , e = t * n; return 4 * (.5 > n ? e : 3 * (n - t) + e - .75) } function er(n) { return function(t) { return math.pow(t, n) } } function ar(n) { return 1 - math.cos(n * io) } function cr(n) { return math.pow(2, 10 * (n - 1)) } function zr(n) { return 1 - math.sqrt(1 - n * n) } function lr(n, t) { var e; return arguments.length < 2 && (t = .45), arguments.length ? e = t / ho * math.asin(1 / n) : (n = 1, e = t / 4), function(r) { return 1 + n * math.pow(2, -10 * r) * math.sin((r - e) * ho / t) } } function qr(n) { return n || (n = 1.70158), function(t) { return t * t * ((n + 1) * t - n) } } function tr(n) { return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375 } function rr(n, t) { n = ao.hcl(n), t = ao.hcl(t); var e = n.h , r = n.c , i = n.l , u = t.h - e , o = t.c - r , a = t.l - i; return isnan(o) && (o = 0, r = isnan(r) ? t.c : r), isnan(u) ? (u = 0, e = isnan(e) ? t.h : e) : u > 180 ? u -= 360 : -180 > u && (u += 360), function(n) { return sn(e + u * n, r + o * n, i + a * n) + "" } } function dr(n, t) { n = ao.hsl(n), t = ao.hsl(t); var e = n.h , r = n.s , i = n.l , u = t.h - e , o = t.s - r , a = t.l - i; return isnan(o) && (o = 0, r = isnan(r) ? t.s : r), isnan(u) ? (u = 0, e = isnan(e) ? t.h : e) : u > 180 ? u -= 360 : -180 > u && (u += 360), function(n) { return cn(e + u * n, r + o * n, i + a * n) + "" } } function pr(n, t) { n = ao.lab(n), t = ao.lab(t); var e = n.l , r = n.a , i = n.b , u = t.l - e , o = t.a - r , a = t.b - i; return function(n) { return pn(e + u * n, r + o * n, i + a * n) + "" } } function ur(n, t) { return t -= n, function(e) { return math.round(n + t * e) } } function jr(n) { var t = [n.a, n.b] , e = [n.c, n.d] , r = hr(t) , i = fr(t, e) , u = hr(or(e, t, -i)) || 0; t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, i *= -1), this.rotate = (r ? math.atan2(t[1], t[0]) : math.atan2(-e[0], e[1])) * zo, this.translate = [n.e, n.f], this.scale = [r, u], this.skew = u ? math.atan2(i, u) * zo : 0 } function fr(n, t) { return n[0] * t[0] + n[1] * t[1] } function hr(n) { var t = math.sqrt(fr(n, n)); return t && (n[0] /= t, n[1] /= t), t } function or(n, t, e) { return n[0] += e * t[0], n[1] += e * t[1], n } function ir(n) { return n.length ? n.pop() + "," : "" } function yr(n, t, e, r) { if (n[0] !== t[0] || n[1] !== t[1]) { var i = e.push("translate(", null, ",", null, ")"); r.push({ i: i - 4, x: yr(n[0], t[0]) }, { i: i - 2, x: yr(n[1], t[1]) }) } else (t[0] || t[1]) && e.push("translate(" + t + ")") } function zr(n, t, e, r) { n !== t ? (n - t > 180 ? t += 360 : t - n > 180 && (n += 360), r.push({ i: e.push(ir(e) + "rotate(", null, ")") - 2, x: yr(n, t) })) : t && e.push(ir(e) + "rotate(" + t + ")") } function vr(n, t, e, r) { n !== t ? r.push({ i: e.push(ir(e) + "skewx(", null, ")") - 2, x: yr(n, t) }) : t && e.push(ir(e) + "skewx(" + t + ")") } function xr(n, t, e, r) { if (n[0] !== t[0] || n[1] !== t[1]) { var i = e.push(ir(e) + "scale(", null, ",", null, ")"); r.push({ i: i - 4, x: yr(n[0], t[0]) }, { i: i - 2, x: yr(n[1], t[1]) }) } else 1 === t[0] && 1 === t[1] || e.push(ir(e) + "scale(" + t + ")") } function $r(n, t) { var e = [] , r = []; return n = ao.transform(n), t = ao.transform(t), yr(n.translate, t.translate, e, r), zr(n.rotate, t.rotate, e, r), vr(n.skew, t.skew, e, r), xr(n.scale, t.scale, e, r), n = t = null, function(n) { for (var t, i = -1, u = r.length; ++i < u; ) e[(t = r[i]).i] = t.x(n); return e.join("") } } function br(n, t) { return t = (t -= n = +n) || 1 / t, function(e) { return (e - n) / t } } function wr(n, t) { return t = (t -= n = +n) || 1 / t, function(e) { return math.max(0, math.min(1, (e - n) / t)) } } function jr(n) { for (var t = n.source, e = n.target, r = kr(t, e), i = [t]; t !== r; ) t = t.parent, i.push(t); for (var u = i.length; e !== r; ) i.splice(u, 0, e), e = e.parent; return i } function gr(n) { for (var t = [], e = n.parent; null != e; ) t.push(n), n = e, e = e.parent; return t.push(n), t } function kr(n, t) { if (n === t) return n; for (var e = gr(n), r = gr(t), i = e.pop(), u = r.pop(), o = null; i === u; ) o = i, i = e.pop(), u = r.pop(); return o } function qr(n) { n.fixed |= 2 } function ni(n) { n.fixed &= -7 } function ti(n) { n.fixed |= 4, n.px = n.x, n.py = n.y } function ei(n) { n.fixed &= -5 } function ri(n, t, e) { var r = 0 , i = 0; if (n.charge = 0, !n.leaf) for (var u, o = n.nodes, a = o.length, l = -1; ++l < a; ) u = o[l], null != u && (ri(u, t, e), n.charge += u.charge, r += u.charge * u.cx, i += u.charge * u.cy); if (n.point) { n.leaf || (n.point.x += math.random() - .5, n.point.y += math.random() - .5); var c = t * e[n.point.index]; n.charge += n.pointcharge = c, r += c * n.point.x, i += c * n.point.y } n.cx = r / n.charge, n.cy = i / n.charge } function ii(n, t) { return ao.rebind(n, t, "sort", "children", "value"), n.nodes = n, n.links = fi, n } function ui(n, t) { for (var e = [n]; null != (n = e.pop()); ) if (t(n), (i = n.children) && (r = i.length)) for (var r, i; --r >= 0; ) e.push(i[r]) } function oi(n, t) { for (var e = [n], r = []; null != (n = e.pop()); ) if (r.push(n), (u = n.children) && (i = u.length)) for (var i, u, o = -1; ++o < i; ) e.push(u[o]); for (; null != (n = r.pop()); ) t(n) } function ai(n) { return n.children } function li(n) { return n.value } function ci(n, t) { return t.value - n.value } function fi(n) { return ao.merge(n.map(function(n) { return (n.children || []).map(function(t) { return { source: n, target: t } }) })) } function si(n) { return n.x } function hi(n) { return n.y } function pi(n, t, e) { n.y0 = t, n.y = e } function gi(n) { return ao.range(n.length) } function vi(n) { for (var t = -1, e = n[0].length, r = []; ++t < e; ) r[t] = 0; return r } function di(n) { for (var t, e = 1, r = 0, i = n[0][1], u = n.length; u > e; ++e) (t = n[e][1]) > i && (r = e, i = t); return r } function yi(n) { return n.reduce(mi, 0) } function mi(n, t) { return n + t[1] } function mi(n, t) { return xi(n, math.ceil(math.log(t.length) / math.ln2 + 1)) } function xi(n, t) { for (var e = -1, r = +n[0], i = (n[1] - r) / t, u = []; ++e <= t; ) u[e] = i * e + r; return u } function bi(n) { return [ao.min(n), ao.max(n)] } function _i(n, t) { return n.value - t.value } function wi(n, t) { var e = n._pack_next; n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t } function si(n, t) { n._pack_next = t, t._pack_prev = n } function ki(n, t) { var e = t.x - n.x , r = t.y - n.y , i = n.r + t.r; return .999 * i * i > e * e + r * r } function ni(n) { function t(n) { f = math.min(n.x - n.r, f), s = math.max(n.x + n.r, s), h = math.min(n.y - n.r, h), p = math.max(n.y + n.r, p) } if ((e = n.children) && (c = e.length)) { var e, r, i, u, o, a, l, c, f = 1 / 0, s = -(1 / 0), h = 1 / 0, p = -(1 / 0); if (e.foreach(ei), r = e[0], r.x = -r.r, r.y = 0, t(r), c > 1 && (i = e[1], i.x = i.r, i.y = 0, t(i), c > 2)) for (u = e[2], zi(r, i, u), t(u), wi(r, u), r._pack_prev = u, wi(u, i), i = r._pack_next, o = 3; c > o; o++) { zi(r, i, u = e[o]); var g = 0 , v = 1 , d = 1; for (a = i._pack_next; a !== i; a = a._pack_next, v++) if (ki(a, u)) { g = 1; break } if (1 == g) for (l = r._pack_prev; l !== a._pack_prev && !ki(l, u); l = l._pack_prev, d++) ; g ? (d > v || v == d && i.r < r.r ? si(r, i = a) : si(r = l, i), o--) : (wi(r, u), i = u, t(u)) } var y = (f + s) / 2 , m = (h + p) / 2 , m = 0; for (o = 0; c > o; o++) u = e[o], u.x -= y, u.y -= m, m = math.max(m, u.r + math.sqrt(u.x * u.x + u.y * u.y)); n.r = m, e.foreach(ai) } } function ei(n) { n._pack_next = n._pack_prev = n } function ai(n) { delete n._pack_next, delete n._pack_prev } function ci(n, t, e, r) { var i = n.children; if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, i) for (var u = -1, o = i.length; ++u < o; ) ci(i[u], t, e, r) } function zi(n, t, e) { var r = n.r + e.r , i = t.x - n.x , u = t.y - n.y; if (r && (i || u)) { var o = t.r + e.r , a = i * i + u * u; o *= o, r *= r; var l = .5 + (r - o) / (2 * a) , c = math.sqrt(math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a); e.x = n.x + l * i + c * u, e.y = n.y + l * u - c * i } else e.x = n.x + r, e.y = n.y } function li(n, t) { return n.parent == t.parent ? 1 : 2 } function qi(n) { var t = n.children; return t.length ? t[0] : n.t } function ti(n) { var t, e = n.children; return (t = e.length) ? e[t - 1] : n.t } function ri(n, t, e) { var r = e / (t.i - n.i); t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e } function di(n) { for (var t, e = 0, r = 0, i = n.children, u = i.length; --u >= 0; ) t = i[u], t.z += e, t.m += e, e += t.s + (r += t.c) } function pi(n, t, e) { return n.a.parent === t.parent ? n.a : e } function ui(n) { return 1 + ao.max(n, function(n) { return n.y }) } function ji(n) { return n.reduce(function(n, t) { return n + t.x }, 0) / n.length } function fi(n) { var t = n.children; return t && t.length ? fi(t[0]) : n } function hi(n) { var t, e = n.children; return e && (t = e.length) ? hi(e[t - 1]) : n } function oi(n) { return { x: n.x, y: n.y, dx: n.dx, dy: n.dy } } function ii(n, t) { var e = n.x + t[3] , r = n.y + t[0] , i = n.dx - t[1] - t[3] , u = n.dy - t[0] - t[2]; return 0 > i && (e += i / 2, i = 0), 0 > u && (r += u / 2, u = 0), { x: e, y: r, dx: i, dy: u } } function yi(n) { var t = n[0] , e = n[n.length - 1]; return e > t ? [t, e] : [e, t] } function zi(n) { return n.rangeextent ? n.rangeextent() : yi(n.range()) } function vi(n, t, e, r) { var i = e(n[0], n[1]) , u = r(t[0], t[1]); return function(n) { return u(i(n)) } } function xi(n, t) { var e, r = 0, i = n.length - 1, u = n[r], o = n[i]; return u > o && (e = r, r = i, i = e, e = u, u = o, o = e), n[r] = t.floor(u), n[i] = t.ceil(o), n } function $i(n) { return n ? { floor: function(t) { return math.floor(t / n) * n }, ceil: function(t) { return math.ceil(t / n) * n } } : sl } function bi(n, t, e, r) { var i = [] , u = [] , o = 0 , a = math.min(n.length, t.length) - 1; for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a; ) i.push(e(n[o - 1], n[o])), u.push(r(t[o - 1], t[o])); return function(t) { var e = ao.bisect(n, t, 1, a) - 1; return u[e](i[e](t)) } } function wi(n, t, e, r) { function i() { var i = math.min(n.length, t.length) > 2 ? bi : vi , l = r ? wr : br; return o = i(n, t, l, e), a = i(t, n, l, mr), u } function u(n) { return o(n) } var o, a; return u.invert = function(n) { return a(n) } , u.domain = function(t) { return arguments.length ? (n = t.map(number), i()) : n } , u.range = function(n) { return arguments.length ? (t = n, i()) : t } , u.rangeround = function(n) { return u.range(n).interpolate(ur) } , u.clamp = function(n) { return arguments.length ? (r = n, i()) : r } , u.interpolate = function(n) { return arguments.length ? (e = n, i()) : e } , u.ticks = function(t) { return qi(n, t) } , u.tickformat = function(t, e) { return nu(n, t, e) } , u.nice = function(t) { return gi(n, t), i() } , u.copy = function() { return wi(n, t, e, r) } , i() } function ji(n, t) { return ao.rebind(n, t, "range", "rangeround", "interpolate", "clamp") } function gi(n, t) { return xi(n, $i(ki(n, t)[2])), xi(n, $i(ki(n, t)[2])), n } function ki(n, t) { null == t && (t = 10); var e = yi(n) , r = e[1] - e[0] , i = math.pow(10, math.floor(math.log(r / t) / math.ln10)) , u = t / r * i; return .15 >= u ? i *= 10 : .35 >= u ? i *= 5 : .75 >= u && (i *= 2), e[0] = math.ceil(e[0] / i) * i, e[1] = math.floor(e[1] / i) * i + .5 * i, e[2] = i, e } function qi(n, t) { return ao.range.apply(ao, ki(n, t)) } function nu(n, t, e) { var r = ki(n, t); if (e) { var i = ha.exec(e); if (i.shift(), "s" === i[8]) { var u = ao.formatprefix(math.max(xo(r[0]), xo(r[1]))); return i[7] || (i[7] = "." + tu(u.scale(r[2]))), i[8] = "f", e = ao.format(i.join("")), function(n) { return e(u.scale(n)) + u.symbol } } i[7] || (i[7] = "." + eu(i[8], r)), e = i.join("") } else e = ",." + tu(r[2]) + "f"; return ao.format(e) } function tu(n) { return -math.floor(math.log(n) / math.ln10 + .01) } function eu(n, t) { var e = tu(t[2]); return n in kl ? math.abs(e - tu(math.max(xo(t[0]), xo(t[1])))) + +("e" !== n) : e - 2 * ("%" === n) } function ru(n, t, e, r) { function i(n) { return (e ? math.log(0 > n ? 0 : n) : -math.log(n > 0 ? 0 : -n)) / math.log(t) } function u(n) { return e ? math.pow(t, n) : -math.pow(t, -n) } function o(t) { return n(i(t)) } return o.invert = function(t) { return u(n.invert(t)) } , o.domain = function(t) { return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(number)).map(i)), o) : r } , o.base = function(e) { return arguments.length ? (t = +e, n.domain(r.map(i)), o) : t } , o.nice = function() { var t = xi(r.map(i), e ? math : el); return n.domain(t), r = t.map(u), o } , o.ticks = function() { var n = yi(r) , o = [] , a = n[0] , l = n[1] , c = math.floor(i(a)) , f = math.ceil(i(l)) , s = t % 1 ? 2 : t; if (isfinite(f - c)) { if (e) { for (; f > c; c++) for (var h = 1; s > h; h++) o.push(u(c) * h); o.push(u(c)) } else for (o.push(u(c)); c++ < f; ) for (var h = s - 1; h > 0; h--) o.push(u(c) * h); for (c = 0; o[c] < a; c++) ; for (f = o.length; o[f - 1] > l; f--) ; o = o.slice(c, f) } return o } , o.tickformat = function(n, e) { if (!arguments.length) return nl; arguments.length < 2 ? e = nl : "function" != typeof e && (e = ao.format(e)); var r = math.max(1, t * n / o.ticks().length); return function(n) { var o = n / u(math.round(i(n))); return t - .5 > o * t && (o *= t), r >= o ? e(n) : "" } } , o.copy = function() { return ru(n.copy(), t, e, r) } , ji(o, n) } function iu(n, t, e) { function r(t) { return n(i(t)) } var i = uu(t) , u = uu(1 / t); return r.invert = function(t) { return u(n.invert(t)) } , r.domain = function(t) { return arguments.length ? (n.domain((e = t.map(number)).map(i)), r) : e } , r.ticks = function(n) { return qi(e, n) } , r.tickformat = function(n, t) { return nu(e, n, t) } , r.nice = function(n) { return r.domain(gi(e, n)) } , r.exponent = function(o) { return arguments.length ? (i = uu(t = o), u = uu(1 / t), n.domain(e.map(i)), r) : t } , r.copy = function() { return iu(n.copy(), t, e) } , ji(r, n) } function uu(n) { return function(t) { return 0 > t ? -math.pow(-t, n) : math.pow(t, n) } } function ou(n, t) { function e(e) { return u[((i.get(e) || ("range" === t.t ? i.set(e, n.push(e)) : nan)) - 1) % u.length] } function r(t, e) { return ao.range(n.length).map(function(n) { return t + e * n }) } var i, u, o; return e.domain = function(r) { if (!arguments.length) return n; n = [], i = new c; for (var u, o = -1, a = r.length; ++o < a; ) i.has(u = r[o]) || i.set(u, n.push(u)); return e[t.t].apply(e, t.a) } , e.range = function(n) { return arguments.length ? (u = n, o = 0, t = { t: "range", a: arguments }, e) : u } , e.rangepoints = function(i, a) { arguments.length < 2 && (a = 0); var l = i[0] , c = i[1] , f = n.length < 2 ? (l = (l + c) / 2, 0) : (c - l) / (n.length - 1 + a); return u = r(l + f * a / 2, f), o = 0, t = { t: "rangepoints", a: arguments }, e } , e.rangeroundpoints = function(i, a) { arguments.length < 2 && (a = 0); var l = i[0] , c = i[1] , f = n.length < 2 ? (l = c = math.round((l + c) / 2), 0) : (c - l) / (n.length - 1 + a) | 0; return u = r(l + math.round(f * a / 2 + (c - l - (n.length - 1 + a) * f) / 2), f), o = 0, t = { t: "rangeroundpoints", a: arguments }, e } , e.rangebands = function(i, a, l) { arguments.length < 2 && (a = 0), arguments.length < 3 && (l = a); var c = i[1] < i[0] , f = i[c - 0] , s = i[1 - c] , h = (s - f) / (n.length - a + 2 * l); return u = r(f + h * l, h), c && u.reverse(), o = h * (1 - a), t = { t: "rangebands", a: arguments }, e } , e.rangeroundbands = function(i, a, l) { arguments.length < 2 && (a = 0), arguments.length < 3 && (l = a); var c = i[1] < i[0] , f = i[c - 0] , s = i[1 - c] , h = math.floor((s - f) / (n.length - a + 2 * l)); return u = r(f + math.round((s - f - (n.length - a) * h) / 2), h), c && u.reverse(), o = math.round(h * (1 - a)), t = { t: "rangeroundbands", a: arguments }, e } , e.rangeband = function() { return o } , e.rangeextent = function() { return yi(t.a[0]) } , e.copy = function() { return ou(n, t) } , e.domain(n) } function au(n, t) { function u() { var e = 0 , r = t.length; for (a = []; ++e < r; ) a[e - 1] = ao.quantile(n, e / r); return o } function o(n) { return isnan(n = +n) ? void 0 : t[ao.bisect(a, n)] } var a; return o.domain = function(t) { return arguments.length ? (n = t.map(r).filter(i).sort(e), u()) : n } , o.range = function(n) { return arguments.length ? (t = n, u()) : t } , o.quantiles = function() { return a } , o.invertextent = function(e) { return e = t.indexof(e), 0 > e ? [nan, nan] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]] } , o.copy = function() { return au(n, t) } , u() } function lu(n, t, e) { function r(t) { return e[math.max(0, math.min(o, math.floor(u * (t - n))))] } function i() { return u = e.length / (t - n), o = e.length - 1, r } var u, o; return r.domain = function(e) { return arguments.length ? (n = +e[0], t = +e[e.length - 1], i()) : [n, t] } , r.range = function(n) { return arguments.length ? (e = n, i()) : e } , r.invertextent = function(t) { return t = e.indexof(t), t = 0 > t ? nan : t / u + n, [t, t + 1 / u] } , r.copy = function() { return lu(n, t, e) } , i() } function cu(n, t) { function e(e) { return e >= e ? t[ao.bisect(n, e)] : void 0 } return e.domain = function(t) { return arguments.length ? (n = t, e) : n } , e.range = function(n) { return arguments.length ? (t = n, e) : t } , e.invertextent = function(e) { return e = t.indexof(e), [n[e - 1], n[e]] } , e.copy = function() { return cu(n, t) } , e } function fu(n) { function t(n) { return +n } return t.invert = t, t.domain = t.range = function(e) { return arguments.length ? (n = e.map(t), t) : n } , t.ticks = function(t) { return qi(n, t) } , t.tickformat = function(t, e) { return nu(n, t, e) } , t.copy = function() { return fu(n) } , t } function su() { return 0 } function hu(n) { return n.innerradius } function pu(n) { return n.outerradius } function gu(n) { return n.startangle } function vu(n) { return n.endangle } function du(n) { return n && n.padangle } function yu(n, t, e, r) { return (n - e) * t - (t - r) * n > 0 ? 0 : 1 } function mu(n, t, e, r, i) { var u = n[0] - t[0] , o = n[1] - t[1] , a = (i ? r : -r) / math.sqrt(u * u + o * o) , l = a * o , c = -a * u , f = n[0] + l , s = n[1] + c , h = t[0] + l , p = t[1] + c , g = (f + h) / 2 , v = (s + p) / 2 , d = h - f , y = p - s , m = d * d + y * y , m = e - r , x = f * p - h * s , b = (0 > y ? -1 : 1) * math.sqrt(math.max(0, m * m * m - x * x)) , _ = (x * y - d * b) / m , w = (-x * d - y * b) / m , s = (x * y + d * b) / m , k = (-x * d + y * b) / m , n = _ - g , e = w - v , a = s - g , c = k - v; return n * n + e * e > a * a + c * c && (_ = s, w = k), [[_ - l, w - c], [_ * e / m, w * e / m]] } function mu(n) { function t(t) { function o() { c.push("m", u(n(f), a)) } for (var l, c = [], f = [], s = -1, h = t.length, p = en(e), g = en(r); ++s < h; ) i.call(this, l = t[s], s) ? f.push([+p.call(this, l, s), +g.call(this, l, s)]) : f.length && (o(), f = []); return f.length && o(), c.length ? c.join("") : null } var e = ce , r = ze , i = zt , u = xu , o = u.key , a = .7; return t.x = function(n) { return arguments.length ? (e = n, t) : e } , t.y = function(n) { return arguments.length ? (r = n, t) : r } , t.defined = function(n) { return arguments.length ? (i = n, t) : i } , t.interpolate = function(n) { return arguments.length ? (o = "function" == typeof n ? u = n : (u = tl.get(n) || xu).key, t) : o } , t.tension = function(n) { return arguments.length ? (a = n, t) : a } , t } function xu(n) { return n.length > 1 ? n.join("l") : n + "z" } function bu(n) { return n.join("l") + "z" } function _u(n) { for (var t = 0, e = n.length, r = n[0], i = [r[0], ",", r[1]]; ++t < e; ) i.push("h", (r[0] + (r = n[t])[0]) / 2, "v", r[1]); return e > 1 && i.push("h", r[0]), i.join("") } function wu(n) { for (var t = 0, e = n.length, r = n[0], i = [r[0], ",", r[1]]; ++t < e; ) i.push("v", (r = n[t])[1], "h", r[0]); return i.join("") } function su(n) { for (var t = 0, e = n.length, r = n[0], i = [r[0], ",", r[1]]; ++t < e; ) i.push("h", (r = n[t])[0], "v", r[1]); return i.join("") } function ku(n, t) { return n.length < 4 ? xu(n) : n[1] + au(n.slice(1, -1), cu(n, t)) } function nu(n, t) { return n.length < 3 ? bu(n) : n[0] + au((n.push(n[0]), n), cu([n[n.length - 2]].concat(n, [n[1]]), t)) } function eu(n, t) { return n.length < 3 ? xu(n) : n[0] + au(n, cu(n, t)) } function au(n, t) { if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return xu(n); var e = n.length != t.length , r = "" , i = n[0] , u = n[1] , o = t[0] , a = o , l = 1; if (e && (r += "q" + (u[0] - 2 * o[0] / 3) + "," + (u[1] - 2 * o[1] / 3) + "," + u[0] + "," + u[1], i = n[1], l = 2), t.length > 1) { a = t[1], u = n[l], l++, r += "c" + (i[0] + o[0]) + "," + (i[1] + o[1]) + "," + (u[0] - a[0]) + "," + (u[1] - a[1]) + "," + u[0] + "," + u[1]; for (var c = 2; c < t.length; c++, l++) u = n[l], a = t[c], r += "s" + (u[0] - a[0]) + "," + (u[1] - a[1]) + "," + u[0] + "," + u[1] } if (e) { var f = n[l]; r += "q" + (u[0] + 2 * a[0] / 3) + "," + (u[1] + 2 * a[1] / 3) + "," + f[0] + "," + f[1] } return r } function cu(n, t) { for (var e, r = [], i = (1 - t) / 2, u = n[0], o = n[1], a = 1, l = n.length; ++a < l; ) e = u, u = o, o = n[a], r.push([i * (o[0] - e[0]), i * (o[1] - e[1])]); return r } function zu(n) { if (n.length < 3) return xu(n); var t = 1 , e = n.length , r = n[0] , i = r[0] , u = r[1] , o = [i, i, i, (r = n[1])[0]] , a = [u, u, u, r[1]] , l = [i, ",", u, "l", ru(pl, o), ",", ru(pl, a)]; for (n.push(n[e - 1]); ++t <= e; ) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), du(l, o, a); return n.pop(), l.push("l", r), l.join("") } function lu(n) { if (n.length < 4) return xu(n); for (var t, e = [], r = -1, i = n.length, u = [0], o = [0]; ++r < 3; ) t = n[r], u.push(t[0]), o.push(t[1]); for (e.push(ru(pl, u) + "," + ru(pl, o)), --r; ++r < i; ) t = n[r], u.shift(), u.push(t[0]), o.shift(), o.push(t[1]), du(e, u, o); return e.join("") } function qu(n) { for (var t, e, r = -1, i = n.length, u = i + 4, o = [], a = []; ++r < 4; ) e = n[r % i], o.push(e[0]), a.push(e[1]); for (t = [ru(pl, o), ",", ru(pl, a)], --r; ++r < u; ) e = n[r % i], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), du(t, o, a); return t.join("") } function tu(n, t) { var e = n.length - 1; if (e) for (var r, i, u = n[0][0], o = n[0][1], a = n[e][0] - u, l = n[e][1] - o, c = -1; ++c <= e; ) r = n[c], i = c / e, r[0] = t * r[0] + (1 - t) * (u + i * a), r[1] = t * r[1] + (1 - t) * (o + i * l); return zu(n) } function ru(n, t) { return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3] } function du(n, t, e) { n.push("c", ru(rl, t), ",", ru(rl, e), ",", ru(dl, t), ",", ru(dl, e), ",", ru(pl, t), ",", ru(pl, e)) } function pu(n, t) { return (t[1] - n[1]) / (t[0] - n[0]) } function uu(n) { for (var t = 0, e = n.length - 1, r = [], i = n[0], u = n[1], o = r[0] = pu(i, u); ++t < e; ) r[t] = (o + (o = pu(i = u, u = n[t + 1]))) / 2; return r[t] = o, r } function ju(n) { for (var t, e, r, i, u = [], o = uu(n), a = -1, l = n.length - 1; ++a < l; ) t = pu(n[a], n[a + 1]), xo(t) < uo ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, i = e * e + r * r, i > 9 && (i = 3 * t / math.sqrt(i), o[a] = i * e, o[a + 1] = i * r)); for (a = -1; ++a <= l; ) i = (n[math.min(l, a + 1)][0] - n[math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), u.push([i || 0, o[a] * i || 0]); return u } function fu(n) { return n.length < 3 ? xu(n) : n[0] + au(n, ju(n)) } function hu(n) { for (var t, e, r, i = -1, u = n.length; ++i < u; ) t = n[i], e = t[0], r = t[1] - io, t[0] = e * math.cos(r), t[1] = e * math.sin(r); return n } function ou(n) { function t(t) { function l() { v.push("m", a(n(y), s), f, c(n(d.reverse()), s), "z") } for (var h, p, g, v = [], d = [], y = [], m = -1, m = t.length, x = en(e), b = en(i), _ = e === r ? function() { return p } : en(r), w = i === u ? function() { return g } : en(u); ++m < m; ) o.call(this, h = t[m], m) ? (d.push([p = +x.call(this, h, m), g = +b.call(this, h, m)]), y.push([+_.call(this, h, m), +w.call(this, h, m)])) : d.length && (l(), d = [], y = []); return d.length && l(), v.length ? v.join("") : null } var e = ce , r = ce , i = 0 , u = ze , o = zt , a = xu , l = a.key , c = a , f = "l" , s = .7; return t.x = function(n) { return arguments.length ? (e = r = n, t) : r } , t.x0 = function(n) { return arguments.length ? (e = n, t) : e } , t.x1 = function(n) { return arguments.length ? (r = n, t) : r } , t.y = function(n) { return arguments.length ? (i = u = n, t) : u } , t.y0 = function(n) { return arguments.length ? (i = n, t) : i } , t.y1 = function(n) { return arguments.length ? (u = n, t) : u } , t.defined = function(n) { return arguments.length ? (o = n, t) : o } , t.interpolate = function(n) { return arguments.length ? (l = "function" == typeof n ? a = n : (a = tl.get(n) || xu).key, c = a.reverse || a, f = a.closed ? "m" : "l", t) : l } , t.tension = function(n) { return arguments.length ? (s = n, t) : s } , t } function iu(n) { return n.radius } function yu(n) { return [n.x, n.y] } function zu(n) { return function() { var t = n.apply(this, arguments) , e = t[0] , r = t[1] - io; return [e * math.cos(r), e * math.sin(r)] } } function vu() { return 64 } function xu() { return "circle" } function $u(n) { var t = math.sqrt(n / fo); return "m0," + t + "a" + t + "," + t + " 0 1,1 0," + -t + "a" + t + "," + t + " 0 1,1 0," + t + "z" } function bu(n) { return function() { var t, e, r; (t = this[n]) && (r = t[e = t.active]) && (r.timer.c = null, r.timer.t = nan, --t.count ? delete t[e] : delete this[n], t.active += .5, r.event && r.event.interrupt.call(this, this.__data__, r.index)) } } function wu(n, t, e) { return ko(n, yl), n.namespace = t, n.id = e, n } function ju(n, t, e, r) { var i = n.id , u = n.namespace; return y(n, "function" == typeof e ? function(n, o, a) { n[u][i].tween.set(t, r(e.call(n, n.__data__, o, a))) } : (e = r(e), function(n) { n[u][i].tween.set(t, e) } )) } function gu(n) { return null == n && (n = ""), function() { this.textcontent = n } } function ku(n) { return null == n ? "__transition__" : "__transition_" + n + "__" } function qu(n, t, e, r, i) { function u(n) { var t = v.delay; return f.t = t + l, n >= t ? o(n - t) : void (f.c = o) } function o(e) { var i = g.active , u = g[i]; u && (u.timer.c = null, u.timer.t = nan, --g.count, delete g[i], u.event && u.event.interrupt.call(n, n.__data__, u.index)); for (var o in g) if (r > +o) { var c = g[o]; c.timer.c = null, c.timer.t = nan, --g.count, delete g[o] } f.c = a, qn(function() { return f.c && a(e || 1) && (f.c = null, f.t = nan), 1 }, 0, l), g.active = r, v.event && v.event.start.call(n, n.__data__, t), p = [], v.tween.foreach(function(e, r) { (r = r.call(n, n.__data__, t)) && p.push(r) }), h = v.ease, s = v.duration } function a(i) { for (var u = i / s, o = h(u), a = p.length; a > 0; ) p[--a].call(n, o); return u >= 1 ? (v.event && v.event.end.call(n, n.__data__, t), --g.count ? delete g[r] : delete n[e], 1) : void 0 } var l, f, s, h, p, g = n[e] || (n[e] = { active: 0, count: 0 }), v = g[r]; v || (l = i.time, f = qn(u, 0, l), v = g[r] = { tween: new c, time: l, timer: f, delay: i.delay, duration: i.duration, ease: i.ease, index: t }, i = null, ++g.count) } function no(n, t, e) { n.attr("transform", function(n) { var r = t(n); return "translate(" + (isfinite(r) ? r : e(n)) + ",0)" }) } function to(n, t, e) { n.attr("transform", function(n) { var r = t(n); return "translate(0," + (isfinite(r) ? r : e(n)) + ")" }) } function eo(n) { return n.toisostring() } function ro(n, t, e) { function r(t) { return n(t) } function i(n, e) { var r = n[1] - n[0] , i = r / e , u = ao.bisect(kl, i); return u == kl.length ? [t.year, ki(n.map(function(n) { return n / 31536e6 }), e)[2]] : u ? t[i / kl[u - 1] < kl[u] / i ? u - 1 : u] : [tc, ki(n, e)[2]] } return r.invert = function(t) { return io(n.invert(t)) } , r.domain = function(t) { return arguments.length ? (n.domain(t), r) : n.domain().map(io) } , r.nice = function(n, t) { function e(e) { return !isnan(e) && !n.range(e, io(+e + 1), t).length } var u = r.domain() , o = yi(u) , a = null == n ? i(o, 10) : "number" == typeof n && i(o, n); return a && (n = a[0], t = a[1]), r.domain(xi(u, t > 1 ? { floor: function(t) { for (; e(t = n.floor(t)); ) t = io(t - 1); return t }, ceil: function(t) { for (; e(t = n.ceil(t)); ) t = io(+t + 1); return t } } : n)) } , r.ticks = function(n, t) { var e = yi(r.domain()) , u = null == n ? i(e, 10) : "number" == typeof n ? i(e, n) : !n.range && [{ range: n }, t]; return u && (n = u[0], t = u[1]), n.range(e[0], io(+e[1] + 1), 1 > t ? 1 : t) } , r.tickformat = function() { return e } , r.copy = function() { return ro(n.copy(), t, e) } , ji(r, n) } function io(n) { return new date(n) } function uo(n) { return json.parse(n.responsetext) } function oo(n) { var t = fo.createrange(); return t.selectnode(fo.body), t.createcontextualfragment(n.responsetext) } var ao = { version: "3.5.17" } , lo = [].slice , co = function(n) { return lo.call(n) } , fo = this.document; if (fo) try { co(fo.documentelement.childnodes)[0].nodetype } catch (so) { co = function(n) { for (var t = n.length, e = new array(t); t--; ) e[t] = n[t]; return e } } if (date.now || (date.now = function() { return +new date } ), fo) try { fo.createelement("div").style.setproperty("opacity", 0, "") } catch (ho) { var po = this.element.prototype , go = po.setattribute , vo = po.setattributens , yo = this.cssstyledeclaration.prototype , mo = yo.setproperty; po.setattribute = function(n, t) { go.call(this, n, t + "") } , po.setattributens = function(n, t, e) { vo.call(this, n, t, e + "") } , yo.setproperty = function(n, t, e) { mo.call(this, n, t + "", e) } } ao.ascending = e, ao.descending = function(n, t) { return n > t ? -1 : t > n ? 1 : t >= n ? 0 : nan } , ao.min = function(n, t) { var e, r, i = -1, u = n.length; if (1 === arguments.length) { for (; ++i < u; ) if (null != (r = n[i]) && r >= r) { e = r; break } for (; ++i < u; ) null != (r = n[i]) && e > r && (e = r) } else { for (; ++i < u; ) if (null != (r = t.call(n, n[i], i)) && r >= r) { e = r; break } for (; ++i < u; ) null != (r = t.call(n, n[i], i)) && e > r && (e = r) } return e } , ao.max = function(n, t) { var e, r, i = -1, u = n.length; if (1 === arguments.length) { for (; ++i < u; ) if (null != (r = n[i]) && r >= r) { e = r; break } for (; ++i < u; ) null != (r = n[i]) && r > e && (e = r) } else { for (; ++i < u; ) if (null != (r = t.call(n, n[i], i)) && r >= r) { e = r; break } for (; ++i < u; ) null != (r = t.call(n, n[i], i)) && r > e && (e = r) } return e } , ao.extent = function(n, t) { var e, r, i, u = -1, o = n.length; if (1 === arguments.length) { for (; ++u < o; ) if (null != (r = n[u]) && r >= r) { e = i = r; break } for (; ++u < o; ) null != (r = n[u]) && (e > r && (e = r), r > i && (i = r)) } else { for (; ++u < o; ) if (null != (r = t.call(n, n[u], u)) && r >= r) { e = i = r; break } for (; ++u < o; ) null != (r = t.call(n, n[u], u)) && (e > r && (e = r), r > i && (i = r)) } return [e, i] } , ao.sum = function(n, t) { var e, r = 0, u = n.length, o = -1; if (1 === arguments.length) for (; ++o < u; ) i(e = +n[o]) && (r += e); else for (; ++o < u; ) i(e = +t.call(n, n[o], o)) && (r += e); return r } , ao.mean = function(n, t) { var e, u = 0, o = n.length, a = -1, l = o; if (1 === arguments.length) for (; ++a < o; ) i(e = r(n[a])) ? u += e : --l; else for (; ++a < o; ) i(e = r(t.call(n, n[a], a))) ? u += e : --l; return l ? u / l : void 0 } , ao.quantile = function(n, t) { var e = (n.length - 1) * t + 1 , r = math.floor(e) , i = +n[r - 1] , u = e - r; return u ? i + u * (n[r] - i) : i } , ao.median = function(n, t) { var u, o = [], a = n.length, l = -1; if (1 === arguments.length) for (; ++l < a; ) i(u = r(n[l])) && o.push(u); else for (; ++l < a; ) i(u = r(t.call(n, n[l], l))) && o.push(u); return o.length ? ao.quantile(o.sort(e), .5) : void 0 } , ao.variance = function(n, t) { var e, u, o = n.length, a = 0, l = 0, c = -1, f = 0; if (1 === arguments.length) for (; ++c < o; ) i(e = r(n[c])) && (u = e - a, a += u / ++f, l += u * (e - a)); else for (; ++c < o; ) i(e = r(t.call(n, n[c], c))) && (u = e - a, a += u / ++f, l += u * (e - a)); return f > 1 ? l / (f - 1) : void 0 } , ao.deviation = function() { var n = ao.variance.apply(this, arguments); return n ? math.sqrt(n) : n } ; var mo = u(e); ao.bisectleft = mo.left, ao.bisect = ao.bisectright = mo.right, ao.bisector = function(n) { return u(1 === n.length ? function(t, r) { return e(n(t), r) } : n) } , ao.shuffle = function(n, t, e) { (u = arguments.length) < 3 && (e = n.length, 2 > u && (t = 0)); for (var r, i, u = e - t; u; ) i = math.random() * u-- | 0, r = n[u + t], n[u + t] = n[i + t], n[i + t] = r; return n } , ao.permute = function(n, t) { for (var e = t.length, r = new array(e); e--; ) r[e] = n[t[e]]; return r } , ao.pairs = function(n) { for (var t, e = 0, r = n.length - 1, i = n[0], u = new array(0 > r ? 0 : r); r > e; ) u[e] = [t = i, i = n[++e]]; return u } , ao.transpose = function(n) { if (!(i = n.length)) return []; for (var t = -1, e = ao.min(n, o), r = new array(e); ++t < e; ) for (var i, u = -1, a = r[t] = new array(i); ++u < i; ) a[u] = n[u][t]; return r } , ao.zip = function() { return ao.transpose(arguments) } , ao.keys = function(n) { var t = []; for (var e in n) t.push(e); return t } , ao.values = function(n) { var t = []; for (var e in n) t.push(n[e]); return t } , ao.entries = function(n) { var t = []; for (var e in n) t.push({ key: e, value: n[e] }); return t } , ao.merge = function(n) { for (var t, e, r, i = n.length, u = -1, o = 0; ++u < i; ) o += n[u].length; for (e = new array(o); --i >= 0; ) for (r = n[i], t = r.length; --t >= 0; ) e[--o] = r[t]; return e } ; var xo = math.abs; ao.range = function(n, t, e) { if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new error("infinite range"); var r, i = [], u = a(xo(e)), o = -1; if (n *= u, t *= u, e *= u, 0 > e) for (; (r = n + e * ++o) > t; ) i.push(r / u); else for (; (r = n + e * ++o) < t; ) i.push(r / u); return i } , ao.map = function(n, t) { var e = new c; if (n instanceof c) n.foreach(function(n, t) { e.set(n, t) }); else if (array.isarray(n)) { var r, i = -1, u = n.length; if (1 === arguments.length) for (; ++i < u; ) e.set(i, n[i]); else for (; ++i < u; ) e.set(t.call(n, r = n[i], i), r) } else for (var o in n) e.set(o, n[o]); return e } ; var bo = "__proto__" , _o = "\x00"; l(c, { has: h, get: function(n) { return this._[f(n)] }, set: function(n, t) { return this._[f(n)] = t }, remove: p, keys: g, values: function() { var n = []; for (var t in this._) n.push(this._[t]); return n }, entries: function() { var n = []; for (var t in this._) n.push({ key: s(t), value: this._[t] }); return n }, size: v, empty: d, foreach: function(n) { for (var t in this._) n.call(this, s(t), this._[t]) } }), ao.nest = function() { function n(t, o, a) { if (a >= u.length) return r ? r.call(i, o) : e ? o.sort(e) : o; for (var l, f, s, h, p = -1, g = o.length, v = u[a++], d = new c; ++p < g; ) (h = d.get(l = v(f = o[p]))) ? h.push(f) : d.set(l, [f]); return t ? (f = t(), s = function(e, r) { f.set(e, n(t, r, a)) } ) : (f = {}, s = function(e, r) { f[e] = n(t, r, a) } ), d.foreach(s), f } function t(n, e) { if (e >= u.length) return n; var r = [] , i = o[e++]; return n.foreach(function(n, i) { r.push({ key: n, values: t(i, e) }) }), i ? r.sort(function(n, t) { return i(n.key, t.key) }) : r } var e, r, i = {}, u = [], o = []; return i.map = function(t, e) { return n(e, t, 0) } , i.entries = function(e) { return t(n(ao.map, e, 0), 0) } , i.key = function(n) { return u.push(n), i } , i.sortkeys = function(n) { return o[u.length - 1] = n, i } , i.sortvalues = function(n) { return e = n, i } , i.rollup = function(n) { return r = n, i } , i } , ao.set = function(n) { var t = new y; if (n) for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]); return t } , l(y, { has: h, add: function(n) { return this._[f(n += "")] = !0, n }, remove: p, values: g, size: v, empty: d, foreach: function(n) { for (var t in this._) n.call(this, s(t)) } }), ao.behavior = {}, ao.rebind = function(n, t) { for (var e, r = 1, i = arguments.length; ++r < i; ) n[e = arguments[r]] = m(n, t, t[e]); return n } ; var wo = ["webkit", "ms", "moz", "moz", "o", "o"]; ao.dispatch = function() { for (var n = new _, t = -1, e = arguments.length; ++t < e; ) n[arguments[t]] = w(n); return n } , _.prototype.on = function(n, t) { var e = n.indexof(".") , r = ""; if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t); if (2 === arguments.length) { if (null == t) for (n in this) this.hasownproperty(n) && this[n].on(r, null); return this } } , ao.event = null, ao.requote = function(n) { return n.replace(so, "\\$&") } ; var so = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g , ko = {}.__proto__ ? function(n, t) { n.__proto__ = t } : function(n, t) { for (var e in t) n[e] = t[e] } , no = function(n, t) { return t.queryselector(n) } , eo = function(n, t) { return t.queryselectorall(n) } , ao = function(n, t) { var e = n.matches || n[x(n, "matchesselector")]; return (ao = function(n, t) { return e.call(n, t) } )(n, t) }; "function" == typeof sizzle && (no = function(n, t) { return sizzle(n, t)[0] || null } , eo = sizzle, ao = sizzle.matchesselector), ao.selection = function() { return ao.select(fo.documentelement) } ; var co = ao.selection.prototype = []; co.select = function(n) { var t, e, r, i, u = []; n = a(n); for (var o = -1, a = this.length; ++o < a; ) { u.push(t = []), t.parentnode = (r = this[o]).parentnode; for (var l = -1, c = r.length; ++l < c; ) (i = r[l]) ? (t.push(e = n.call(i, i.__data__, l, o)), e && "__data__"in i && (e.__data__ = i.__data__)) : t.push(null) } return e(u) } , co.selectall = function(n) { var t, e, r = []; n = c(n); for (var i = -1, u = this.length; ++i < u; ) for (var o = this[i], a = -1, l = o.length; ++a < l; ) (e = o[a]) && (r.push(t = co(n.call(e, e.__data__, a, i))), t.parentnode = e); return e(r) } ; var zo = "http://www.w3.org/1999/xhtml" , lo = { svg: "http://www.w3.org/2000/svg", xhtml: zo, xlink: "http://www.w3.org/1999/xlink", xml: "http://www.w3.org/xml/1998/namespace", xmlns: "http://www.w3.org/2000/xmlns/" }; ao.ns = { prefix: lo, qualify: function(n) { var t = n.indexof(":") , e = n; return t >= 0 && "xmlns" !== (e = n.slice(0, t)) && (n = n.slice(t + 1)), lo.hasownproperty(e) ? { space: lo[e], local: n } : n } }, co.attr = function(n, t) { if (arguments.length < 2) { if ("string" == typeof n) { var e = this.node(); return n = ao.ns.qualify(n), n.local ? e.getattributens(n.space, n.local) : e.getattribute(n) } for (t in n) this.each(z(t, n[t])); return this } return this.each(z(n, t)) } , co.classed = function(n, t) { if (arguments.length < 2) { if ("string" == typeof n) { var e = this.node() , r = (n = t(n)).length , i = -1; if (t = e.classlist) { for (; ++i < r; ) if (!t.contains(n[i])) return !1 } else for (t = e.getattribute("class"); ++i < r; ) if (!q(n[i]).test(t)) return !1; return !0 } for (t in n) this.each(r(t, n[t])); return this } return this.each(r(n, t)) } , co.style = function(n, e, r) { var i = arguments.length; if (3 > i) { if ("string" != typeof n) { 2 > i && (e = ""); for (r in n) this.each(p(r, n[r], e)); return this } if (2 > i) { var u = this.node(); return t(u).getcomputedstyle(u, null).getpropertyvalue(n) } r = "" } return this.each(p(n, e, r)) } , co.property = function(n, t) { if (arguments.length < 2) { if ("string" == typeof n) return this.node()[n]; for (t in n) this.each(u(t, n[t])); return this } return this.each(u(n, t)) } , co.text = function(n) { return arguments.length ? this.each("function" == typeof n ? function() { var t = n.apply(this, arguments); this.textcontent = null == t ? "" : t } : null == n ? function() { this.textcontent = "" } : function() { this.textcontent = n } ) : this.node().textcontent } , co.html = function(n) { return arguments.length ? this.each("function" == typeof n ? function() { var t = n.apply(this, arguments); this.innerhtml = null == t ? "" : t } : null == n ? function() { this.innerhtml = "" } : function() { this.innerhtml = n } ) : this.node().innerhtml } , co.append = function(n) { return n = j(n), this.select(function() { return this.appendchild(n.apply(this, arguments)) }) } , co.insert = function(n, t) { return n = j(n), t = a(t), this.select(function() { return this.insertbefore(n.apply(this, arguments), t.apply(this, arguments) || null) }) } , co.remove = function() { return this.each(f) } , co.data = function(n, t) { function e(n, e) { var r, i, u, o = n.length, s = e.length, h = math.min(o, s), p = new array(s), g = new array(s), v = new array(o); if (t) { var d, y = new c, m = new array(o); for (r = -1; ++r < o; ) (i = n[r]) && (y.has(d = t.call(i, i.__data__, r)) ? v[r] = i : y.set(d, i), m[r] = d); for (r = -1; ++r < s; ) (i = y.get(d = t.call(e, u = e[r], r))) ? i !== !0 && (p[r] = i, i.__data__ = u) : g[r] = h(u), y.set(d, !0); for (r = -1; ++r < o; ) r in m && y.get(m[r]) !== !0 && (v[r] = n[r]) } else { for (r = -1; ++r < h; ) i = n[r], u = e[r], i ? (i.__data__ = u, p[r] = i) : g[r] = h(u); for (; s > r; ++r) g[r] = h(e[r]); for (; o > r; ++r) v[r] = n[r] } g.update = p, g.parentnode = p.parentnode = v.parentnode = n.parentnode, a.push(g), l.push(p), f.push(v) } var r, i, u = -1, o = this.length; if (!arguments.length) { for (n = new array(o = (r = this[0]).length); ++u < o; ) (i = r[u]) && (n[u] = i.__data__); return n } var a = z([]) , l = e([]) , f = e([]); if ("function" == typeof n) for (; ++u < o; ) e(r = this[u], n.call(r, r.parentnode.__data__, u)); else for (; ++u < o; ) e(r = this[u], n); return l.enter = function() { return a } , l.exit = function() { return f } , l } , co.datum = function(n) { return arguments.length ? this.property("__data__", n) : this.property("__data__") } , co.filter = function(n) { var t, e, r, i = []; "function" != typeof n && (n = o(n)); for (var u = 0, o = this.length; o > u; u++) { i.push(t = []), t.parentnode = (e = this[u]).parentnode; for (var a = 0, l = e.length; l > a; a++) (r = e[a]) && n.call(r, r.__data__, a, u) && t.push(r) } return e(i) } , co.order = function() { for (var n = -1, t = this.length; ++n < t; ) for (var e, r = this[n], i = r.length - 1, u = r[i]; --i >= 0; ) (e = r[i]) && (u && u !== e.nextsibling && u.parentnode.insertbefore(e, u), u = e); return this } , co.sort = function(n) { n = i.apply(this, arguments); for (var t = -1, e = this.length; ++t < e; ) this[t].sort(n); return this.order() } , co.each = function(n) { return y(this, function(t, e, r) { n.call(t, t.__data__, e, r) }) } , co.call = function(n) { var t = co(arguments); return n.apply(t[0] = this, t), this } , co.empty = function() { return !this.node() } , co.node = function() { for (var n = 0, t = this.length; t > n; n++) for (var e = this[n], r = 0, i = e.length; i > r; r++) { var u = e[r]; if (u) return u } return null } , co.size = function() { var n = 0; return y(this, function() { ++n }), n } ; var qo = []; ao.selection.enter = z, ao.selection.enter.prototype = qo, qo.append = co.append, qo.empty = co.empty, qo.node = co.node, qo.call = co.call, qo.size = co.size, qo.select = function(n) { for (var t, e, r, i, u, o = [], a = -1, l = this.length; ++a < l; ) { r = (i = this[a]).update, o.push(t = []), t.parentnode = i.parentnode; for (var c = -1, f = i.length; ++c < f; ) (u = i[c]) ? (t.push(r[c] = e = n.call(i.parentnode, u.__data__, c, a)), e.__data__ = u.__data__) : t.push(null) } return e(o) } , qo.insert = function(n, t) { return arguments.length < 2 && (t = v(this)), co.insert.call(this, n, t) } , ao.select = function(t) { var e; return "string" == typeof t ? (e = [no(t, fo)], e.parentnode = fo.documentelement) : (e = [t], e.parentnode = n(t)), e([e]) } , ao.selectall = function(n) { var t; return "string" == typeof n ? (t = co(eo(n, fo)), t.parentnode = fo.documentelement) : (t = co(n), t.parentnode = null), e([t]) } , co.on = function(n, t, e) { var r = arguments.length; if (3 > r) { if ("string" != typeof n) { 2 > r && (t = !1); for (e in n) this.each(x(e, n[e], t)); return this } if (2 > r) return (r = this.node()["__on" + n]) && r._; e = !1 } return this.each(x(n, t, e)) } ; var to = ao.map({ mouseenter: "mouseover", mouseleave: "mouseout" }); fo && to.foreach(function(n) { "on" + n in fo && to.remove(n) }); var ro, do = 0; ao.mouse = function(n) { return j(n, k()) } ; var po = this.navigator && /webkit/.test(this.navigator.useragent) ? -1 : 0; ao.touch = function(n, t, e) { if (arguments.length < 3 && (e = t, t = k().changedtouches), t) for (var r, i = 0, u = t.length; u > i; ++i) if ((r = t[i]).identifier === e) return j(n, r) } , ao.behavior.drag = function() { function n() { this.on("mousedown.drag", u).on("touchstart.drag", o) } function e(n, t, e, u, o) { return function() { function a() { var n, e, r = t(h, v); r && (n = r[0] - m[0], e = r[1] - m[1], g |= n | e, m = r, p({ type: "drag", x: r[0] + c[0], y: r[1] + c[1], dx: n, dy: e })) } function l() { t(h, v) && (y.on(u + d, null).on(o + d, null), m(g), p({ type: "dragend" })) } var c, f = this, s = ao.event.target.correspondingelement || ao.event.target, h = f.parentnode, p = r.of(f, arguments), g = 0, v = n(), d = ".drag" + (null == v ? "" : "-" + v), y = ao.select(e(s)).on(u + d, a).on(o + d, l), m = w(s), m = t(h, v); i ? (c = i.apply(f, arguments), c = [c.x - m[0], c.y - m[1]]) : c = [0, 0], p({ type: "dragstart" }) } } var r = n(n, "drag", "dragstart", "dragend") , i = null , u = e(b, ao.mouse, t, "mousemove", "mouseup") , o = e(g, ao.touch, m, "touchmove", "touchend"); return n.origin = function(t) { return arguments.length ? (i = t, n) : i } , ao.rebind(n, r, "on") } , ao.touches = function(n, t) { return arguments.length < 2 && (t = k().touches), t ? co(t).map(function(t) { var e = j(n, t); return e.identifier = t.identifier, e }) : [] } ; var uo = 1e-6 , jo = uo * uo , fo = math.pi , ho = 2 * fo , oo = ho - uo , io = fo / 2 , yo = fo / 180 , zo = 180 / fo , vo = math.sqrt2 , xo = 2 , $o = 4; ao.interpolatezoom = function(n, t) { var e, r, i = n[0], u = n[1], o = n[2], a = t[0], l = t[1], c = t[2], f = a - i, s = l - u, h = f * f + s * s; if (jo > h) r = math.log(c / o) / vo, e = function(n) { return [i + n * f, u + n * s, o * math.exp(vo * n * r)] } ; else { var p = math.sqrt(h) , g = (c * c - o * o + $o * h) / (2 * o * xo * p) , v = (c * c - o * o - $o * h) / (2 * c * xo * p) , d = math.log(math.sqrt(g * g + 1) - g) , y = math.log(math.sqrt(v * v + 1) - v); r = (y - d) / vo, e = function(n) { var t = n * r , e = rn(d) , a = o / (xo * p) * (e * un(vo * t + d) - en(d)); return [i + a * f, u + a * s, o * e / rn(vo * t + d)] } } return e.duration = 1e3 * r, e } , ao.behavior.zoom = function() { function n(n) { n.on(l, s).on(wo + ".zoom", p).on("dblclick.zoom", g).on(r, h) } function e(n) { return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k] } function r(n) { return [n[0] * k.k + k.x, n[1] * k.k + k.y] } function i(n) { k.k = math.max(a[0], math.min(a[1], n)) } function u(n, t) { t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1] } function o(t, e, r, o) { t.__chart__ = { x: k.x, y: k.y, k: k.k }, i(math.pow(2, o)), u(d = e, r), t = ao.select(t), c > 0 && (t = t.transition().duration(c)), t.call(n.event) } function a() { b && b.domain(x.range().map(function(n) { return (n - k.x) / k.k }).map(x.invert)), w && w.domain(_.range().map(function(n) { return (n - k.y) / k.k }).map(_.invert)) } function l(n) { z++ || n({ type: "zoomstart" }) } function c(n) { a(), n({ type: "zoom", scale: k.k, translate: [k.x, k.y] }) } function f(n) { --z || (n({ type: "zoomend" }), d = null) } function s() { function n() { a = 1, u(ao.mouse(i), h), c(o) } function r() { s.on(q, null).on(t, null), p(a), f(o) } var i = this , o = d.of(i, arguments) , a = 0 , s = ao.select(t(i)).on(q, n).on(t, r) , h = e(ao.mouse(i)) , p = w(i); il.call(i), l(o) } function h() { function n() { var n = ao.touches(g); return p = k.k, n.foreach(function(n) { n.identifier in d && (d[n.identifier] = e(n)) }), n } function t() { var t = ao.event.target; ao.select(t).on(x, r).on(b, a), _.push(t); for (var e = ao.event.changedtouches, i = 0, u = e.length; u > i; ++i) d[e[i].identifier] = null; var l = n() , c = date.now(); if (1 === l.length) { if (500 > c - m) { var f = l[0]; o(g, f, d[f.identifier], math.floor(math.log(k.k) / math.ln2) + 1), s() } m = c } else if (l.length > 1) { var f = l[0] , s = l[1] , h = f[0] - s[0] , p = f[1] - s[1]; y = h * h + p * p } } function r() { var n, t, e, r, o = ao.touches(g); il.call(g); for (var a = 0, l = o.length; l > a; ++a, r = null) if (e = o[a], r = d[e.identifier]) { if (t) break; n = e, t = r } if (r) { var f = (f = e[0] - n[0]) * f + (f = e[1] - n[1]) * f , s = y && math.sqrt(f / y); n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], i(s * p) } m = null, u(n, t), c(v) } function a() { if (ao.event.touches.length) { for (var t = ao.event.changedtouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier]; for (var i in d) return void n() } ao.selectall(_).on(m, null), w.on(l, s).on(r, h), n(), f(v) } var p, g = this, v = d.of(g, arguments), d = {}, y = 0, m = ".zoom-" + ao.event.changedtouches[0].identifier, x = "touchmove" + m, b = "touchend" + m, _ = [], w = ao.select(g), n = w(g); t(), l(v), w.on(l, null).on(r, t) } function p() { var n = d.of(this, arguments); m ? cleartimeout(m) : (il.call(this), v = e(d = y || ao.mouse(this)), l(n)), m = settimeout(function() { m = null, f(n) }, 50), s(), i(math.pow(2, .002 * bo()) * k.k), u(d, v), c(n) } function g() { var n = ao.mouse(this) , t = math.log(k.k) / math.ln2; o(this, n, e(n), ao.event.shiftkey ? math.ceil(t) - 1 : math.floor(t) + 1) } var v, d, y, m, m, x, b, _, w, k = { x: 0, y: 0, k: 1 }, e = [960, 500], a = jo, c = 250, z = 0, l = "mousedown.zoom", q = "mousemove.zoom", t = "mouseup.zoom", r = "touchstart.zoom", d = n(n, "zoomstart", "zoom", "zoomend"); return wo || (wo = "onwheel"in fo ? (bo = function() { return -ao.event.deltay * (ao.event.deltamode ? 120 : 1) } , "wheel") : "onmousewheel"in fo ? (bo = function() { return ao.event.wheeldelta } , "mousewheel") : (bo = function() { return -ao.event.detail } , "mozmousepixelscroll")), n.event = function(n) { n.each(function() { var n = d.of(this, arguments) , t = k; hl ? ao.select(this).transition().each("start.zoom", function() { k = this.__chart__ || { x: 0, y: 0, k: 1 }, l(n) }).tween("zoom:zoom", function() { var e = e[0] , r = e[1] , i = d ? d[0] : e / 2 , u = d ? d[1] : r / 2 , o = ao.interpolatezoom([(i - k.x) / k.k, (u - k.y) / k.k, e / k.k], [(i - t.x) / t.k, (u - t.y) / t.k, e / t.k]); return function(t) { var r = o(t) , a = e / r[2]; this.__chart__ = k = { x: i - r[0] * a, y: u - r[1] * a, k: a }, c(n) } }).each("interrupt.zoom", function() { f(n) }).each("end.zoom", function() { f(n) }) : (this.__chart__ = k, l(n), c(n), f(n)) }) } , n.translate = function(t) { return arguments.length ? (k = { x: +t[0], y: +t[1], k: k.k }, a(), n) : [k.x, k.y] } , n.scale = function(t) { return arguments.length ? (k = { x: k.x, y: k.y, k: null }, i(+t), a(), n) : k.k } , n.scaleextent = function(t) { return arguments.length ? (a = null == t ? jo : [+t[0], +t[1]], n) : a } , n.center = function(t) { return arguments.length ? (y = t && [+t[0], +t[1]], n) : y } , n.size = function(t) { return arguments.length ? (e = t && [+t[0], +t[1]], n) : e } , n.duration = function(t) { return arguments.length ? (c = +t, n) : c } , n.x = function(t) { return arguments.length ? (b = t, x = t.copy(), k = { x: 0, y: 0, k: 1 }, n) : b } , n.y = function(t) { return arguments.length ? (w = t, _ = t.copy(), k = { x: 0, y: 0, k: 1 }, n) : w } , ao.rebind(n, d, "on") } ; var bo, wo, jo = [0, 1 / 0]; ao.color = an, an.prototype.tostring = function() { return this.rgb() + "" } , ao.hsl = ln; var go = ln.prototype = new an; go.brighter = function(n) { return n = math.pow(.7, arguments.length ? n : 1), new ln(this.h,this.s,this.l / n) } , go.darker = function(n) { return n = math.pow(.7, arguments.length ? n : 1), new ln(this.h,this.s,n * this.l) } , go.rgb = function() { return cn(this.h, this.s, this.l) } , ao.hcl = fn; var ko = fn.prototype = new an; ko.brighter = function(n) { return new fn(this.h,this.c,math.min(100, this.l + qo * (arguments.length ? n : 1))) } , ko.darker = function(n) { return new fn(this.h,this.c,math.max(0, this.l - qo * (arguments.length ? n : 1))) } , ko.rgb = function() { return sn(this.h, this.c, this.l).rgb() } , ao.lab = hn; var qo = 18 , na = .95047 , ta = 1 , ea = 1.08883 , ra = hn.prototype = new an; ra.brighter = function(n) { return new hn(math.min(100, this.l + qo * (arguments.length ? n : 1)),this.a,this.b) } , ra.darker = function(n) { return new hn(math.max(0, this.l - qo * (arguments.length ? n : 1)),this.a,this.b) } , ra.rgb = function() { return pn(this.l, this.a, this.b) } , ao.rgb = mn; var ia = mn.prototype = new an; ia.brighter = function(n) { n = math.pow(.7, arguments.length ? n : 1); var t = this.r , e = this.g , r = this.b , i = 30; return t || e || r ? (t && i > t && (t = i), e && i > e && (e = i), r && i > r && (r = i), new mn(math.min(255, t / n),math.min(255, e / n),math.min(255, r / n))) : new mn(i,i,i) } , ia.darker = function(n) { return n = math.pow(.7, arguments.length ? n : 1), new mn(n * this.r,n * this.g,n * this.b) } , ia.hsl = function() { return wn(this.r, this.g, this.b) } , ia.tostring = function() { return "#" + bn(this.r) + bn(this.g) + bn(this.b) } ; var ua = ao.map({ aliceblue: 15792383, antiquewhite: 16444375, aqua: 65535, aquamarine: 8388564, azure: 15794175, beige: 16119260, bisque: 16770244, black: 0, blanchedalmond: 16772045, blue: 255, blueviolet: 9055202, brown: 10824234, burlywood: 14596231, cadetblue: 6266528, chartreuse: 8388352, chocolate: 13789470, coral: 16744272, cornflowerblue: 6591981, cornsilk: 16775388, crimson: 14423100, cyan: 65535, darkblue: 139, darkcyan: 35723, darkgoldenrod: 12092939, darkgray: 11119017, darkgreen: 25600, darkgrey: 11119017, darkkhaki: 12433259, darkmagenta: 9109643, darkolivegreen: 5597999, darkorange: 16747520, darkorchid: 10040012, darkred: 9109504, darksalmon: 15308410, darkseagreen: 9419919, darkslateblue: 4734347, darkslategray: 3100495, darkslategrey: 3100495, darkturquoise: 52945, darkviolet: 9699539, deeppink: 16716947, deepskyblue: 49151, dimgray: 6908265, dimgrey: 6908265, dodgerblue: 2003199, firebrick: 11674146, floralwhite: 16775920, forestgreen: 2263842, fuchsia: 16711935, gainsboro: 14474460, ghostwhite: 16316671, gold: 16766720, goldenrod: 14329120, gray: 8421504, green: 32768, greenyellow: 11403055, grey: 8421504, honeydew: 15794160, hotpink: 16738740, indianred: 13458524, indigo: 4915330, ivory: 16777200, khaki: 15787660, lavender: 15132410, lavenderblush: 16773365, lawngreen: 8190976, lemonchiffon: 16775885, lightblue: 11393254, lightcoral: 15761536, lightcyan: 14745599, lightgoldenrodyellow: 16448210, lightgray: 13882323, lightgreen: 9498256, lightgrey: 13882323, lightpink: 16758465, lightsalmon: 16752762, lightseagreen: 2142890, lightskyblue: 8900346, lightslategray: 7833753, lightslategrey: 7833753, lightsteelblue: 11584734, lightyellow: 16777184, lime: 65280, limegreen: 3329330, linen: 16445670, magenta: 16711935, maroon: 8388608, mediumaquamarine: 6737322, mediumblue: 205, mediumorchid: 12211667, mediumpurple: 9662683, mediumseagreen: 3978097, mediumslateblue: 8087790, mediumspringgreen: 64154, mediumturquoise: 4772300, mediumvioletred: 13047173, midnightblue: 1644912, mintcream: 16121850, mistyrose: 16770273, moccasin: 16770229, navajowhite: 16768685, navy: 128, oldlace: 16643558, olive: 8421376, olivedrab: 7048739, orange: 16753920, orangered: 16729344, orchid: 14315734, palegoldenrod: 15657130, palegreen: 10025880, paleturquoise: 11529966, palevioletred: 14381203, papayawhip: 16773077, peachpuff: 16767673, peru: 13468991, pink: 16761035, plum: 14524637, powderblue: 11591910, purple: 8388736, rebeccapurple: 6697881, red: 16711680, rosybrown: 12357519, royalblue: 4286945, saddlebrown: 9127187, salmon: 16416882, sandybrown: 16032864, seagreen: 3050327, seashell: 16774638, sienna: 10506797, silver: 12632256, skyblue: 8900331, slateblue: 6970061, slategray: 7372944, slategrey: 7372944, snow: 16775930, springgreen: 65407, steelblue: 4620980, tan: 13808780, teal: 32896, thistle: 14204888, tomato: 16737095, turquoise: 4251856, violet: 15631086, wheat: 16113331, white: 16777215, whitesmoke: 16119285, yellow: 16776960, yellowgreen: 10145074 }); ua.foreach(function(n, t) { ua.set(n, mn(t)) }), ao.functor = en, ao.xhr = an(m), ao.dsv = function(n, t) { function e(n, e, u) { arguments.length < 3 && (u = e, e = null); var o = cn(n, t, null == e ? r : i(e), u); return o.row = function(n) { return arguments.length ? o.response(null == (e = n) ? r : i(n)) : e } , o } function r(n) { return e.parse(n.responsetext) } function i(n) { return function(t) { return e.parse(t.responsetext, n) } } function u(t) { return t.map(o).join(n) } function o(n) { return a.test(n) ? '"' + n.replace(/\"/g, '""') + '"' : n } var a = new regexp('["' + n + "\n]") , l = n.charcodeat(0); return e.parse = function(n, t) { var r; return e.parserows(n, function(n, e) { if (r) return r(n, e - 1); var i = new function("d","return {" + n.map(function(n, t) { return json.stringify(n) + ": d[" + t + "]" }).join(",") + "}"); r = t ? function(n, e) { return t(i(n), e) } : i }) } , e.parserows = function(n, t) { function e() { if (f >= c) return o; if (i) return i = !1, u; var t = f; if (34 === n.charcodeat(t)) { for (var e = t; e++ < c; ) if (34 === n.charcodeat(e)) { if (34 !== n.charcodeat(e + 1)) break; ++e } f = e + 2; var r = n.charcodeat(e + 1); return 13 === r ? (i = !0, 10 === n.charcodeat(e + 2) && ++f) : 10 === r && (i = !0), n.slice(t + 1, e).replace(/""/g, '"') } for (; c > f; ) { var r = n.charcodeat(f++) , a = 1; if (10 === r) i = !0; else if (13 === r) i = !0, 10 === n.charcodeat(f) && (++f, ++a); else if (r !== l) continue; return n.slice(t, f - a) } return n.slice(t) } for (var r, i, u = {}, o = {}, a = [], c = n.length, f = 0, s = 0; (r = e()) !== o; ) { for (var h = []; r !== u && r !== o; ) h.push(r), r = e(); t && null == (h = t(h, s++)) || a.push(h) } return a } , e.format = function(t) { if (array.isarray(t[0])) return e.formatrows(t); var r = new y , i = []; return t.foreach(function(n) { for (var t in n) r.has(t) || i.push(r.add(t)) }), [i.map(o).join(n)].concat(t.map(function(t) { return i.map(function(n) { return o(t[n]) }).join(n) })).join("\n") } , e.formatrows = function(n) { return n.map(u).join("\n") } , e } , ao.csv = ao.dsv(",", "text/csv"), ao.tsv = ao.dsv(" ", "text/tab-separated-values"); var oa, aa, la, ca, fa = this[x(this, "requestanimationframe")] || function(n) { settimeout(n, 17) } ; ao.timer = function() { qn.apply(this, arguments) } , ao.timer.flush = function() { rn(), dn() } , ao.round = function(n, t) { return t ? math.round(n * (t = math.pow(10, t))) / t : math.round(n) } ; var sa = ["y", "z", "a", "f", "p", "n", "\xb5", "m", "", "k", "m", "g", "t", "p", "e", "z", "y"].map(un); ao.formatprefix = function(n, t) { var e = 0; return (n = +n) && (0 > n && (n *= -1), t && (n = ao.round(n, pn(n, t))), e = 1 + math.floor(1e-12 + math.log(n) / math.ln10), e = math.max(-24, math.min(24, 3 * math.floor((e - 1) / 3)))), sa[8 + e / 3] } ; var ha = /(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i , pa = ao.map({ b: function(n) { return n.tostring(2) }, c: function(n) { return string.fromcharcode(n) }, o: function(n) { return n.tostring(8) }, x: function(n) { return n.tostring(16) }, x: function(n) { return n.tostring(16).touppercase() }, g: function(n, t) { return n.toprecision(t) }, e: function(n, t) { return n.toexponential(t) }, f: function(n, t) { return n.tofixed(t) }, r: function(n, t) { return (n = ao.round(n, pn(n, t))).tofixed(math.max(0, math.min(20, pn(n * (1 + 1e-15), t)))) } }) , ga = ao.time = {} , va = date; hn.prototype = { getdate: function() { return this._.getutcdate() }, getday: function() { return this._.getutcday() }, getfullyear: function() { return this._.getutcfullyear() }, gethours: function() { return this._.getutchours() }, getmilliseconds: function() { return this._.getutcmilliseconds() }, getminutes: function() { return this._.getutcminutes() }, getmonth: function() { return this._.getutcmonth() }, getseconds: function() { return this._.getutcseconds() }, gettime: function() { return this._.gettime() }, gettimezoneoffset: function() { return 0 }, valueof: function() { return this._.valueof() }, setdate: function() { da.setutcdate.apply(this._, arguments) }, setday: function() { da.setutcday.apply(this._, arguments) }, setfullyear: function() { da.setutcfullyear.apply(this._, arguments) }, sethours: function() { da.setutchours.apply(this._, arguments) }, setmilliseconds: function() { da.setutcmilliseconds.apply(this._, arguments) }, setminutes: function() { da.setutcminutes.apply(this._, arguments) }, setmonth: function() { da.setutcmonth.apply(this._, arguments) }, setseconds: function() { da.setutcseconds.apply(this._, arguments) }, settime: function() { da.settime.apply(this._, arguments) } }; var da = date.prototype; ga.year = on(function(n) { return n = ga.day(n), n.setmonth(0, 1), n }, function(n, t) { n.setfullyear(n.getfullyear() + t) }, function(n) { return n.getfullyear() }), ga.years = ga.year.range, ga.years.utc = ga.year.utc.range, ga.day = on(function(n) { var t = new va(2e3,0); return t.setfullyear(n.getfullyear(), n.getmonth(), n.getdate()), t }, function(n, t) { n.setdate(n.getdate() + t) }, function(n) { return n.getdate() - 1 }), ga.days = ga.day.range, ga.days.utc = ga.day.utc.range, ga.dayofyear = function(n) { var t = ga.year(n); return math.floor((n - t - 6e4 * (n.gettimezoneoffset() - t.gettimezoneoffset())) / 864e5) } , ["sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"].foreach(function(n, t) { t = 7 - t; var e = ga[n] = on(function(n) { return (n = ga.day(n)).setdate(n.getdate() - (n.getday() + t) % 7), n }, function(n, t) { n.setdate(n.getdate() + 7 * math.floor(t)) }, function(n) { var e = ga.year(n).getday(); return math.floor((ga.dayofyear(n) + (e + t) % 7) / 7) - (e !== t) }); ga[n + "s"] = e.range, ga[n + "s"].utc = e.utc.range, ga[n + "ofyear"] = function(n) { var e = ga.year(n).getday(); return math.floor((ga.dayofyear(n) + (e + t) % 7) / 7) } }), ga.week = ga.sunday, ga.weeks = ga.sunday.range, ga.weeks.utc = ga.sunday.utc.range, ga.weekofyear = ga.sundayofyear; var ya = { "-": "", _: " ", 0: "0" } , ma = /^\s*\d+/ , ma = /^%/; ao.locale = function(n) { return { numberformat: jn(n), timeformat: yn(n) } } ; var xa = ao.locale({ decimal: ".", thousands: ",", grouping: [3], currency: ["$", ""], datetime: "%a %b %e %x %y", date: "%m/%d/%y", time: "%h:%m:%s", 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"] }); ao.format = xa.numberformat, ao.geo = {}, ft.prototype = { s: 0, t: 0, add: function(n) { st(n, this.t, ba), st(ba.s, this.s, this), this.s ? this.t += ba.t : this.s = ba.t }, reset: function() { this.s = this.t = 0 }, valueof: function() { return this.s } }; var ba = new ft; ao.geo.stream = function(n, t) { n && _a.hasownproperty(n.type) ? _a[n.type](n, t) : ht(n, t) } ; var _a = { feature: function(n, t) { ht(n.geometry, t) }, featurecollection: function(n, t) { for (var e = n.features, r = -1, i = e.length; ++r < i; ) ht(e[r].geometry, t) } } , wa = { sphere: function(n, t) { t.sphere() }, point: function(n, t) { n = n.coordinates, t.point(n[0], n[1], n[2]) }, multipoint: function(n, t) { for (var e = n.coordinates, r = -1, i = e.length; ++r < i; ) n = e[r], t.point(n[0], n[1], n[2]) }, linestring: function(n, t) { pt(n.coordinates, t, 0) }, multilinestring: function(n, t) { for (var e = n.coordinates, r = -1, i = e.length; ++r < i; ) pt(e[r], t, 0) }, polygon: function(n, t) { gt(n.coordinates, t) }, multipolygon: function(n, t) { for (var e = n.coordinates, r = -1, i = e.length; ++r < i; ) gt(e[r], t) }, geometrycollection: function(n, t) { for (var e = n.geometries, r = -1, i = e.length; ++r < i; ) ht(e[r], t) } }; ao.geo.area = function(n) { return sa = 0, ao.geo.stream(n, na), sa } ; var sa, ka = new ft, na = { sphere: function() { sa += 4 * fo }, point: b, linestart: b, lineend: b, polygonstart: function() { ka.reset(), na.linestart = vt }, polygonend: function() { var n = 2 * ka; sa += 0 > n ? 4 * fo + n : n, na.linestart = na.lineend = na.point = b } }; ao.geo.bounds = function() { function n(n, t) { m.push(x = [f = n, h = n]), s > t && (s = t), t > p && (p = t) } function t(t, e) { var r = dt([t * yo, e * yo]); if (y) { var i = mt(y, r) , u = [i[1], -i[0], 0] , o = mt(u, i); bt(o), o = _t(o); var l = t - g , c = l > 0 ? 1 : -1 , v = o[0] * zo * c , d = xo(l) > 180; if (d ^ (v > c * g && c * t > v)) { var m = o[1] * zo; m > p && (p = m) } else if (v = (v + 360) % 360 - 180, d ^ (v > c * g && c * t > v)) { var m = -o[1] * zo; s > m && (s = m) } else s > e && (s = e), e > p && (p = e); d ? g > t ? a(f, t) > a(f, h) && (h = t) : a(t, h) > a(f, h) && (f = t) : h >= f ? (f > t && (f = t), t > h && (h = t)) : t > g ? a(f, t) > a(f, h) && (h = t) : a(t, h) > a(f, h) && (f = t) } else n(t, e); y = r, g = t } function e() { b.point = t } function r() { x[0] = f, x[1] = h, b.point = n, y = null } function i(n, e) { if (y) { var r = n - g; m += xo(r) > 180 ? r + (r > 0 ? 360 : -360) : r } else v = n, d = e; na.point(n, e), t(n, e) } function u() { na.linestart() } function o() { i(v, d), na.lineend(), xo(m) > uo && (f = -(h = 180)), x[0] = f, x[1] = h, y = null } function a(n, t) { return (t -= n) < 0 ? t + 360 : t } function l(n, t) { return n[0] - t[0] } function c(n, t) { return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n } var f, s, h, p, g, v, d, y, m, m, x, b = { point: n, linestart: e, lineend: r, polygonstart: function() { b.point = i, b.linestart = u, b.lineend = o, m = 0, na.polygonstart() }, polygonend: function() { na.polygonend(), b.point = n, b.linestart = e, b.lineend = r, 0 > ka ? (f = -(h = 180), s = -(p = 90)) : m > uo ? p = 90 : -uo > m && (s = -90), x[0] = f, x[1] = h } }; return function(n) { p = h = -(f = s = 1 / 0), m = [], ao.geo.stream(n, b); var t = m.length; if (t) { m.sort(l); for (var e, r = 1, i = m[0], u = [i]; t > r; ++r) e = m[r], c(e[0], i) || c(e[1], i) ? (a(i[0], e[1]) > a(i[0], i[1]) && (i[1] = e[1]), a(e[0], i[1]) > a(i[0], i[1]) && (i[0] = e[0])) : u.push(i = e); for (var o, e, g = -(1 / 0), t = u.length - 1, r = 0, i = u[t]; t >= r; i = e, ++r) e = u[r], (o = a(i[1], e[0])) > g && (g = o, f = e[0], h = i[1]) } return m = x = null, f === 1 / 0 || s === 1 / 0 ? [[nan, nan], [nan, nan]] : [[f, s], [h, p]] } }(), ao.geo.centroid = function(n) { ea = aa = ca = za = la = qa = ta = ra = da = pa = ua = 0, ao.geo.stream(n, ja); var t = da , e = pa , r = ua , i = t * t + e * e + r * r; return jo > i && (t = qa, e = ta, r = ra, uo > aa && (t = ca, e = za, r = la), i = t * t + e * e + r * r, jo > i) ? [nan, nan] : [math.atan2(e, t) * zo, tn(r / math.sqrt(i)) * zo] } ; var ea, aa, ca, za, la, qa, ta, ra, da, pa, ua, ja = { sphere: b, point: st, linestart: nt, lineend: et, polygonstart: function() { ja.linestart = at }, polygonend: function() { ja.linestart = nt } }, fa = rt(zt, jt, ht, [-fo, -fo / 2]), ha = 1e9; ao.geo.clipextent = function() { var n, t, e, r, i, u, o = { stream: function(n) { return i && (i.valid = !1), i = u(n), i.valid = !0, i }, extent: function(a) { return arguments.length ? (u = zt(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), i && (i.valid = !1, i = null), o) : [[n, t], [e, r]] } }; return o.extent([[0, 0], [960, 500]]) } , (ao.geo.conicequalarea = function() { return vt(xt) } ).raw = xt, ao.geo.albers = function() { return ao.geo.conicequalarea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070) } , ao.geo.albersusa = function() { function n(n) { var u = n[0] , o = n[1]; return t = null, e(u, o), t || (r(u, o), t) || i(u, o), t } var t, e, r, i, u = ao.geo.albers(), o = ao.geo.conicequalarea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), a = ao.geo.conicequalarea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), l = { point: function(n, e) { t = [n, e] } }; return n.invert = function(n) { var t = u.scale() , e = u.translate() , r = (n[0] - e[0]) / t , i = (n[1] - e[1]) / t; return (i >= .12 && .234 > i && r >= -.425 && -.214 > r ? o : i >= .166 && .234 > i && r >= -.214 && -.115 > r ? a : u).invert(n) } , n.stream = function(n) { var t = u.stream(n) , e = o.stream(n) , r = a.stream(n); return { point: function(n, i) { t.point(n, i), e.point(n, i), r.point(n, i) }, sphere: function() { t.sphere(), e.sphere(), r.sphere() }, linestart: function() { t.linestart(), e.linestart(), r.linestart() }, lineend: function() { t.lineend(), e.lineend(), r.lineend() }, polygonstart: function() { t.polygonstart(), e.polygonstart(), r.polygonstart() }, polygonend: function() { t.polygonend(), e.polygonend(), r.polygonend() } } } , n.precision = function(t) { return arguments.length ? (u.precision(t), o.precision(t), a.precision(t), n) : u.precision() } , n.scale = function(t) { return arguments.length ? (u.scale(t), o.scale(.35 * t), a.scale(t), n.translate(u.translate())) : u.scale() } , n.translate = function(t) { if (!arguments.length) return u.translate(); var c = u.scale() , f = +t[0] , s = +t[1]; return e = u.translate(t).clipextent([[f - .455 * c, s - .238 * c], [f + .455 * c, s + .238 * c]]).stream(l).point, r = o.translate([f - .307 * c, s + .201 * c]).clipextent([[f - .425 * c + uo, s + .12 * c + uo], [f - .214 * c - uo, s + .234 * c - uo]]).stream(l).point, i = a.translate([f - .205 * c, s + .212 * c]).clipextent([[f - .214 * c + uo, s + .166 * c + uo], [f - .115 * c - uo, s + .234 * c - uo]]).stream(l).point, n } , n.scale(1070) } ; var oa, ia, ya, za, va, xa, $a = { point: b, linestart: b, lineend: b, polygonstart: function() { ia = 0, $a.linestart = $t }, polygonend: function() { $a.linestart = $a.lineend = $a.point = b, oa += xo(ia / 2) } }, ba = { point: bt, linestart: b, lineend: b, polygonstart: b, polygonend: b }, wa = { point: gt, linestart: kt, lineend: qt, polygonstart: function() { wa.linestart = ne }, polygonend: function() { wa.point = gt, wa.linestart = kt, wa.lineend = qt } }; ao.geo.path = function() { function n(n) { return n && ("function" == typeof a && u.pointradius(+a.apply(this, arguments)), o && o.valid || (o = i(u)), ao.geo.stream(n, o)), u.result() } function t() { return o = null, n } var e, r, i, u, o, a = 4.5; return n.area = function(n) { return oa = 0, ao.geo.stream(n, i($a)), oa } , n.centroid = function(n) { return ca = za = la = qa = ta = ra = da = pa = ua = 0, ao.geo.stream(n, i(wa)), ua ? [da / ua, pa / ua] : ra ? [qa / ra, ta / ra] : la ? [ca / la, za / la] : [nan, nan] } , n.bounds = function(n) { return va = xa = -(ya = za = 1 / 0), ao.geo.stream(n, i(ba)), [[ya, za], [va, xa]] } , n.projection = function(n) { return arguments.length ? (i = (e = n) ? n.stream || re(n) : m, t()) : e } , n.context = function(n) { return arguments.length ? (u = null == (r = n) ? new wt : new te(n), "function" != typeof a && u.pointradius(a), t()) : r } , n.pointradius = function(t) { return arguments.length ? (a = "function" == typeof t ? t : (u.pointradius(+t), +t), n) : a } , n.projection(ao.geo.albersusa()).context(null) } , ao.geo.transform = function(n) { return { stream: function(t) { var e = new ie(t); for (var r in n) e[r] = n[r]; return e } } } , ie.prototype = { point: function(n, t) { this.stream.point(n, t) }, 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() } }, ao.geo.projection = oe, ao.geo.projectionmutator = ae, (ao.geo.equirectangular = function() { return oe(ce) } ).raw = ce.invert = ce, ao.geo.rotation = function(n) { function t(t) { return t = n(t[0] * yo, t[1] * yo), t[0] *= zo, t[1] *= zo, t } return n = se(n[0] % 360 * yo, n[1] * yo, n.length > 2 ? n[2] * yo : 0), t.invert = function(t) { return t = n.invert(t[0] * yo, t[1] * yo), t[0] *= zo, t[1] *= zo, t } , t } , fe.invert = ce, ao.geo.circle = function() { function n() { var n = "function" == typeof r ? r.apply(this, arguments) : r , t = se(-n[0] * yo, -n[1] * yo, 0).invert , i = []; return e(null, null, 1, { point: function(n, e) { i.push(n = t(n, e)), n[0] *= zo, n[1] *= zo } }), { type: "polygon", coordinates: [i] } } var t, e, r = [0, 0], i = 6; return n.origin = function(t) { return arguments.length ? (r = t, n) : r } , n.angle = function(r) { return arguments.length ? (e = ve((t = +r) * yo, i * yo), n) : t } , n.precision = function(r) { return arguments.length ? (e = ve(t * yo, (i = +r) * yo), n) : i } , n.angle(90) } , ao.geo.distance = function(n, t) { var e, r = (t[0] - n[0]) * yo, i = n[1] * yo, u = t[1] * yo, o = math.sin(r), a = math.cos(r), l = math.sin(i), c = math.cos(i), f = math.sin(u), s = math.cos(u); return math.atan2(math.sqrt((e = s * o) * e + (e = c * f - l * s * a) * e), l * f + c * s * a) } , ao.geo.graticule = function() { function n() { return { type: "multilinestring", coordinates: t() } } function t() { return ao.range(math.ceil(u / d) * d, i, d).map(h).concat(ao.range(math.ceil(c / y) * y, l, y).map(p)).concat(ao.range(math.ceil(r / g) * g, e, g).filter(function(n) { return xo(n % d) > uo }).map(f)).concat(ao.range(math.ceil(a / v) * v, o, v).filter(function(n) { return xo(n % y) > uo }).map(s)) } var e, r, i, u, o, a, l, c, f, s, h, p, g = 10, v = g, d = 90, y = 360, m = 2.5; return n.lines = function() { return t().map(function(n) { return { type: "linestring", coordinates: n } }) } , n.outline = function() { return { type: "polygon", coordinates: [h(u).concat(p(l).slice(1), h(i).reverse().slice(1), p(c).reverse().slice(1))] } } , n.extent = function(t) { return arguments.length ? n.majorextent(t).minorextent(t) : n.minorextent() } , n.majorextent = function(t) { return arguments.length ? (u = +t[0][0], i = +t[1][0], c = +t[0][1], l = +t[1][1], u > i && (t = u, u = i, i = t), c > l && (t = c, c = l, l = t), n.precision(m)) : [[u, c], [i, l]] } , n.minorextent = function(t) { return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(m)) : [[r, a], [e, o]] } , n.step = function(t) { return arguments.length ? n.majorstep(t).minorstep(t) : n.minorstep() } , n.majorstep = function(t) { return arguments.length ? (d = +t[0], y = +t[1], n) : [d, y] } , n.minorstep = function(t) { return arguments.length ? (g = +t[0], v = +t[1], n) : [g, v] } , n.precision = function(t) { return arguments.length ? (m = +t, f = ye(a, o, 90), s = me(r, e, m), h = ye(c, l, 90), p = me(u, i, m), n) : m } , n.majorextent([[-180, -90 + uo], [180, 90 - uo]]).minorextent([[-180, -80 - uo], [180, 80 + uo]]) } , ao.geo.greatarc = function() { function n() { return { type: "linestring", coordinates: [t || r.apply(this, arguments), e || i.apply(this, arguments)] } } var t, e, r = me, i = xe; return n.distance = function() { return ao.geo.distance(t || r.apply(this, arguments), e || i.apply(this, arguments)) } , n.source = function(e) { return arguments.length ? (r = e, t = "function" == typeof e ? null : e, n) : r } , n.target = function(t) { return arguments.length ? (i = t, e = "function" == typeof t ? null : t, n) : i } , n.precision = function() { return arguments.length ? n : 0 } , n } , ao.geo.interpolate = function(n, t) { return be(n[0] * yo, n[1] * yo, t[0] * yo, t[1] * yo) } , ao.geo.length = function(n) { return ja = 0, ao.geo.stream(n, ga), ja } ; var ja, ga = { sphere: b, point: b, linestart: _e, lineend: b, polygonstart: b, polygonend: b }, ka = we(function(n) { return math.sqrt(2 / (1 + n)) }, function(n) { return 2 * math.asin(n / 2) }); (ao.geo.azimuthalequalarea = function() { return oe(ka) } ).raw = ka; var qa = we(function(n) { var t = math.acos(n); return t && t / math.sin(t) }, m); (ao.geo.azimuthalequidistant = function() { return oe(qa) } ).raw = qa, (ao.geo.conicconformal = function() { return vt(se) } ).raw = se, (ao.geo.conicequidistant = function() { return vt(ke) } ).raw = ke; var nl = we(function(n) { return 1 / n }, math.atan); (ao.geo.gnomonic = function() { return oe(nl) } ).raw = nl, ne.invert = function(n, t) { return [n, 2 * math.atan(math.exp(t)) - io] } , (ao.geo.mercator = function() { return ee(ne) } ).raw = ne; var tl = we(function() { return 1 }, math.asin); (ao.geo.orthographic = function() { return oe(tl) } ).raw = tl; var el = we(function(n) { return 1 / (1 + n) }, function(n) { return 2 * math.atan(n) }); (ao.geo.stereographic = function() { return oe(el) } ).raw = el, ae.invert = function(n, t) { return [-t, 2 * math.atan(math.exp(n)) - io] } , (ao.geo.transversemercator = function() { var n = ee(ae) , t = n.center , e = n.rotate; return n.center = function(n) { return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]]) } , n.rotate = function(n) { return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90]) } , e([0, 0, 90]) } ).raw = ae, ao.geom = {}, ao.geom.hull = function(n) { function t(n) { if (n.length < 3) return []; var t, i = en(e), u = en(r), o = n.length, a = [], l = []; for (t = 0; o > t; t++) a.push([+i.call(this, n[t], t), +u.call(this, n[t], t), t]); for (a.sort(qe), t = 0; o > t; t++) l.push([a[t][0], -a[t][1]]); var c = le(a) , f = le(l) , s = f[0] === c[0] , h = f[f.length - 1] === c[c.length - 1] , p = []; for (t = c.length - 1; t >= 0; --t) p.push(n[a[c[t]][2]]); for (t = +s; t < f.length - h; ++t) p.push(n[a[f[t]][2]]); return p } var e = ce , r = ze; return arguments.length ? t(n) : (t.x = function(n) { return arguments.length ? (e = n, t) : e } , t.y = function(n) { return arguments.length ? (r = n, t) : r } , t) } , ao.geom.polygon = function(n) { return ko(n, rl), n } ; var rl = ao.geom.polygon.prototype = []; rl.area = function() { for (var n, t = -1, e = this.length, r = this[e - 1], i = 0; ++t < e; ) n = r, r = this[t], i += n[1] * r[0] - n[0] * r[1]; return .5 * i } , rl.centroid = function(n) { var t, e, r = -1, i = this.length, u = 0, o = 0, a = this[i - 1]; for (arguments.length || (n = -1 / (6 * this.area())); ++r < i; ) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], u += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e; return [u * n, o * n] } , rl.clip = function(n) { for (var t, e, r, i, u, o, a = de(n), l = -1, c = this.length - de(this), f = this[c - 1]; ++l < c; ) { for (t = n.slice(), n.length = 0, i = this[l], u = t[(r = t.length - a) - 1], e = -1; ++e < r; ) o = t[e], te(o, f, i) ? (te(u, f, i) || n.push(re(u, o, f, i)), n.push(o)) : te(u, f, i) && n.push(re(u, o, f, i)), u = o; a && n.push(n[0]), f = i } return n } ; var il, ul, ol, al, ll, cl = [], fl = []; ye.prototype.prepare = function() { for (var n, t = this.edges, e = t.length; e--; ) n = t[e].edge, n.b && n.a || t.splice(e, 1); return t.sort(ve), t.length } , tr.prototype = { start: function() { return this.edge.l === this.site ? this.edge.a : this.edge.b }, end: function() { return this.edge.l === this.site ? this.edge.b : this.edge.a } }, er.prototype = { insert: function(n, t) { var e, r, i; if (n) { if (t.p = n, t.n = n.n, n.n && (n.n.p = t), n.n = t, n.r) { for (n = n.r; n.l; ) n = n.l; n.l = t } else n.r = t; e = n } else this._ ? (n = or(this._), t.p = null, t.n = n, n.p = n.l = t, e = n) : (t.p = t.n = null, this._ = t, e = null); for (t.l = t.r = null, t.u = e, t.c = !0, n = t; e && e.c; ) r = e.u, e === r.l ? (i = r.r, i && i.c ? (e.c = i.c = !1, r.c = !0, n = r) : (n === e.r && (ir(this, e), n = e, e = n.u), e.c = !1, r.c = !0, ur(this, r))) : (i = r.l, i && i.c ? (e.c = i.c = !1, r.c = !0, n = r) : (n === e.l && (ur(this, e), n = e, e = n.u), e.c = !1, r.c = !0, ir(this, r))), e = n.u; this._.c = !1 }, remove: function(n) { n.n && (n.n.p = n.p), n.p && (n.p.n = n.n), n.n = n.p = null; var t, e, r, i = n.u, u = n.l, o = n.r; if (e = u ? o ? or(o) : u : o, i ? i.l === n ? i.l = e : i.r = e : this._ = e, u && o ? (r = e.c, e.c = n.c, e.l = u, u.u = e, e !== o ? (i = e.u, e.u = n.u, n = e.r, i.l = n, e.r = o, o.u = e) : (e.u = i, i = e, n = e.r)) : (r = n.c, n = e), n && (n.u = i), !r) { if (n && n.c) return void (n.c = !1); do { if (n === this._) break; if (n === i.l) { if (t = i.r, t.c && (t.c = !1, i.c = !0, ir(this, i), t = i.r), t.l && t.l.c || t.r && t.r.c) { t.r && t.r.c || (t.l.c = !1, t.c = !0, ur(this, t), t = i.r), t.c = i.c, i.c = t.r.c = !1, ir(this, i), n = this._; break } } else if (t = i.l, t.c && (t.c = !1, i.c = !0, ur(this, i), t = i.l), t.l && t.l.c || t.r && t.r.c) { t.l && t.l.c || (t.r.c = !1, t.c = !0, ir(this, t), t = i.l), t.c = i.c, i.c = t.l.c = !1, ur(this, i), n = this._; break } t.c = !0, n = i, i = i.u } while (!n.c);n && (n.c = !1) } } }, ao.geom.voronoi = function(n) { function t(n) { var t = new array(n.length) , r = a[0][0] , i = a[0][1] , u = a[1][0] , o = a[1][1]; return ar(e(n), a).cells.foreach(function(e, a) { var l = e.edges , c = e.site , f = t[a] = l.length ? l.map(function(n) { var t = n.start(); return [t.x, t.y] }) : c.x >= r && c.x <= u && c.y >= i && c.y <= o ? [[r, o], [u, o], [u, i], [r, i]] : []; f.point = n[a] }), t } function e(n) { return n.map(function(n, t) { return { x: math.round(u(n, t) / uo) * uo, y: math.round(o(n, t) / uo) * uo, i: t } }) } var r = ce , i = ze , u = r , o = i , a = sl; return n ? t(n) : (t.links = function(n) { return ar(e(n)).edges.filter(function(n) { return n.l && n.r }).map(function(t) { return { source: n[t.l.i], target: n[t.r.i] } }) } , t.triangles = function(n) { var t = []; return ar(e(n)).cells.foreach(function(e, r) { for (var i, u, o = e.site, a = e.edges.sort(ve), l = -1, c = a.length, f = a[c - 1].edge, s = f.l === o ? f.r : f.l; ++l < c; ) i = f, u = s, f = a[l].edge, s = f.l === o ? f.r : f.l, r < u.i && r < s.i && cr(o, u, s) < 0 && t.push([n[r], n[u.i], n[s.i]]) }), t } , t.x = function(n) { return arguments.length ? (u = en(r = n), t) : r } , t.y = function(n) { return arguments.length ? (o = en(i = n), t) : i } , t.clipextent = function(n) { return arguments.length ? (a = null == n ? sl : n, t) : a === sl ? null : a } , t.size = function(n) { return arguments.length ? t.clipextent(n && [[0, 0], n]) : a === sl ? null : a && a[1] } , t) } ; var sl = [[-1e6, -1e6], [1e6, 1e6]]; ao.geom.delaunay = function(n) { return ao.geom.voronoi().triangles(n) } , ao.geom.quadtree = function(n, t, e, r, i) { function u(n) { function u(n, t, e, r, i, u, o, a) { if (!isnan(e) && !isnan(r)) if (n.leaf) { var l = n.x , f = n.y; if (null != l) if (xo(l - e) + xo(f - r) < .01) c(n, t, e, r, i, u, o, a); else { var s = n.point; n.x = n.y = n.point = null, c(n, s, l, f, i, u, o, a), c(n, t, e, r, i, u, o, a) } else n.x = e, n.y = r, n.point = t } else c(n, t, e, r, i, u, o, a) } function c(n, t, e, r, i, o, a, l) { var c = .5 * (i + a) , f = .5 * (o + l) , s = e >= c , h = r >= f , p = h << 1 | s; n.leaf = !1, n = n.nodes[p] || (n.nodes[p] = hr()), s ? i = c : a = c, h ? o = f : l = f, u(n, t, e, r, i, o, a, l) } var f, s, h, p, g, v, d, y, m, m = en(a), x = en(l); if (null != t) v = t, d = e, y = r, m = i; else if (y = m = -(v = d = 1 / 0), s = [], h = [], g = n.length, o) for (p = 0; g > p; ++p) f = n[p], f.x < v && (v = f.x), f.y < d && (d = f.y), f.x > y && (y = f.x), f.y > m && (m = f.y), s.push(f.x), h.push(f.y); else for (p = 0; g > p; ++p) { var b = +m(f = n[p], p) , _ = +x(f, p); v > b && (v = b), d > _ && (d = _), b > y && (y = b), _ > m && (m = _), s.push(b), h.push(_) } var w = y - v , s = m - d; w > s ? m = d + w : y = v + s; var k = hr(); if (k.add = function(n) { u(k, n, +m(n, ++p), +x(n, p), v, d, y, m) } , k.visit = function(n) { pr(n, k, v, d, y, m) } , k.find = function(n) { return gr(k, n[0], n[1], v, d, y, m) } , p = -1, null == t) { for (; ++p < g; ) u(k, n[p], s[p], h[p], v, d, y, m); --p } else n.foreach(k.add); return s = h = n = f = null, k } var o, a = ce, l = ze; return (o = arguments.length) ? (a = fr, l = sr, 3 === o && (i = e, r = t, e = t = 0), u(n)) : (u.x = function(n) { return arguments.length ? (a = n, u) : a } , u.y = function(n) { return arguments.length ? (l = n, u) : l } , u.extent = function(n) { return arguments.length ? (null == n ? t = e = r = i = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], i = +n[1][1]), u) : null == t ? null : [[t, e], [r, i]] } , u.size = function(n) { return arguments.length ? (null == n ? t = e = r = i = null : (t = e = 0, r = +n[0], i = +n[1]), u) : null == t ? null : [r - t, i - e] } , u) } , ao.interpolatergb = vr, ao.interpolateobject = dr, ao.interpolatenumber = yr, ao.interpolatestring = mr; var hl = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[ee][-+]?\d+)?/g , pl = new regexp(hl.source,"g"); ao.interpolate = mr, ao.interpolators = [function(n, t) { var e = typeof t; return ("string" === e ? ua.has(t.tolowercase()) || /^(#|rgb\(|hsl\()/i.test(t) ? vr : mr : t instanceof an ? vr : array.isarray(t) ? xr : "object" === e && isnan(t) ? dr : yr)(n, t) } ], ao.interpolatearray = xr; var gl = function() { return m } , vl = ao.map({ linear: gl, poly: er, quad: function() { return sr }, cubic: function() { return kr }, sin: function() { return ar }, exp: function() { return cr }, circle: function() { return zr }, elastic: lr, back: qr, bounce: function() { return tr } }) , dl = ao.map({ "in": m, out: _r, "in-out": wr, "out-in": function(n) { return wr(_r(n)) } }); ao.ease = function(n) { var t = n.indexof("-") , e = t >= 0 ? n.slice(0, t) : n , r = t >= 0 ? n.slice(t + 1) : "in"; return e = vl.get(e) || gl, r = dl.get(r) || m, br(r(e.apply(null, lo.call(arguments, 1)))) } , ao.interpolatehcl = rr, ao.interpolatehsl = dr, ao.interpolatelab = pr, ao.interpolateround = ur, ao.transform = function(n) { var t = fo.createelementns(ao.ns.prefix.svg, "g"); return (ao.transform = function(n) { if (null != n) { t.setattribute("transform", n); var e = t.transform.baseval.consolidate() } return new jr(e ? e.matrix : yl) } )(n) } , jr.prototype.tostring = function() { return "translate(" + this.translate + ")rotate(" + this.rotate + ")skewx(" + this.skew + ")scale(" + this.scale + ")" } ; var yl = { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0 }; ao.interpolatetransform = $r, ao.layout = {}, ao.layout.bundle = function() { return function(n) { for (var t = [], e = -1, r = n.length; ++e < r; ) t.push(jr(n[e])); return t } } , ao.layout.chord = function() { function n() { var n, c, s, h, p, g = {}, v = [], d = ao.range(u), y = []; for (e = [], r = [], n = 0, h = -1; ++h < u; ) { for (c = 0, p = -1; ++p < u; ) c += i[h][p]; v.push(c), y.push(ao.range(u)), n += c } for (o && d.sort(function(n, t) { return o(v[n], v[t]) }), a && y.foreach(function(n, t) { n.sort(function(n, e) { return a(i[t][n], i[t][e]) }) }), n = (ho - f * u) / n, c = 0, h = -1; ++h < u; ) { for (s = c, p = -1; ++p < u; ) { var m = d[h] , m = y[m][p] , x = i[m][m] , b = c , _ = c += x * n; g[m + "-" + m] = { index: m, subindex: m, startangle: b, endangle: _, value: x } } r[m] = { index: m, startangle: s, endangle: c, value: v[m] }, c += f } for (h = -1; ++h < u; ) for (p = h - 1; ++p < u; ) { var w = g[h + "-" + p] , s = g[p + "-" + h]; (w.value || s.value) && e.push(w.value < s.value ? { source: s, target: w } : { source: w, target: s }) } l && t() } function t() { e.sort(function(n, t) { return l((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2) }) } var e, r, i, u, o, a, l, c = {}, f = 0; return c.matrix = function(n) { return arguments.length ? (u = (i = n) && i.length, e = r = null, c) : i } , c.padding = function(n) { return arguments.length ? (f = n, e = r = null, c) : f } , c.sortgroups = function(n) { return arguments.length ? (o = n, e = r = null, c) : o } , c.sortsubgroups = function(n) { return arguments.length ? (a = n, e = null, c) : a } , c.sortchords = function(n) { return arguments.length ? (l = n, e && t(), c) : l } , c.chords = function() { return e || n(), e } , c.groups = function() { return r || n(), r } , c } , ao.layout.force = function() { function n(n) { return function(t, e, r, i) { if (t.point !== n) { var u = t.cx - n.x , o = t.cy - n.y , a = i - e , l = u * u + o * o; if (l > a * a / y) { if (v > l) { var c = t.charge / l; n.px -= u * c, n.py -= o * c } return !0 } if (t.point && l && v > l) { var c = t.pointcharge / l; n.px -= u * c, n.py -= o * c } } return !t.charge } } function t(n) { n.px = ao.event.x, n.py = ao.event.y, l.resume() } var e, r, i, u, o, a, l = {}, c = ao.dispatch("start", "tick", "end"), f = [1, 1], s = .9, h = ml, p = ml, g = -30, v = xl, d = .1, y = .64, m = [], x = []; return l.tick = function() { if ((i *= .99) < .005) return e = null, c.end({ type: "end", alpha: i = 0 }), !0; var t, r, l, h, p, v, y, m, b, _ = m.length, w = x.length; for (r = 0; w > r; ++r) l = x[r], h = l.source, p = l.target, m = p.x - h.x, b = p.y - h.y, (v = m * m + b * b) && (v = i * o[r] * ((v = math.sqrt(v)) - u[r]) / v, m *= v, b *= v, p.x -= m * (y = h.weight + p.weight ? h.weight / (h.weight + p.weight) : .5), p.y -= b * y, h.x += m * (y = 1 - y), h.y += b * y); if ((y = i * d) && (m = f[0] / 2, b = f[1] / 2, r = -1, y)) for (; ++r < _; ) l = m[r], l.x += (m - l.x) * y, l.y += (b - l.y) * y; if (g) for (ri(t = ao.geom.quadtree(m), i, a), r = -1; ++r < _; ) (l = m[r]).fixed || t.visit(n(l)); for (r = -1; ++r < _; ) l = m[r], l.fixed ? (l.x = l.px, l.y = l.py) : (l.x -= (l.px - (l.px = l.x)) * s, l.y -= (l.py - (l.py = l.y)) * s); c.tick({ type: "tick", alpha: i }) } , l.nodes = function(n) { return arguments.length ? (m = n, l) : m } , l.links = function(n) { return arguments.length ? (x = n, l) : x } , l.size = function(n) { return arguments.length ? (f = n, l) : f } , l.linkdistance = function(n) { return arguments.length ? (h = "function" == typeof n ? n : +n, l) : h } , l.distance = l.linkdistance, l.linkstrength = function(n) { return arguments.length ? (p = "function" == typeof n ? n : +n, l) : p } , l.friction = function(n) { return arguments.length ? (s = +n, l) : s } , l.charge = function(n) { return arguments.length ? (g = "function" == typeof n ? n : +n, l) : g } , l.chargedistance = function(n) { return arguments.length ? (v = n * n, l) : math.sqrt(v) } , l.gravity = function(n) { return arguments.length ? (d = +n, l) : d } , l.theta = function(n) { return arguments.length ? (y = n * n, l) : math.sqrt(y) } , l.alpha = function(n) { return arguments.length ? (n = +n, i ? n > 0 ? i = n : (e.c = null, e.t = nan, e = null, c.end({ type: "end", alpha: i = 0 })) : n > 0 && (c.start({ type: "start", alpha: i = n }), e = qn(l.tick)), l) : i } , l.start = function() { function n(n, r) { if (!e) { for (e = new array(i), l = 0; i > l; ++l) e[l] = []; for (l = 0; c > l; ++l) { var u = x[l]; e[u.source.index].push(u.target), e[u.target.index].push(u.source) } } for (var o, a = e[t], l = -1, f = a.length; ++l < f; ) if (!isnan(o = a[l][n])) return o; return math.random() * r } var t, e, r, i = m.length, c = x.length, s = f[0], v = f[1]; for (t = 0; i > t; ++t) (r = m[t]).index = t, r.weight = 0; for (t = 0; c > t; ++t) r = x[t], "number" == typeof r.source && (r.source = m[r.source]), "number" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight; for (t = 0; i > t; ++t) r = m[t], isnan(r.x) && (r.x = n("x", s)), isnan(r.y) && (r.y = n("y", v)), isnan(r.px) && (r.px = r.x), isnan(r.py) && (r.py = r.y); if (u = [], "function" == typeof h) for (t = 0; c > t; ++t) u[t] = +h.call(this, x[t], t); else for (t = 0; c > t; ++t) u[t] = h; if (o = [], "function" == typeof p) for (t = 0; c > t; ++t) o[t] = +p.call(this, x[t], t); else for (t = 0; c > t; ++t) o[t] = p; if (a = [], "function" == typeof g) for (t = 0; i > t; ++t) a[t] = +g.call(this, m[t], t); else for (t = 0; i > t; ++t) a[t] = g; return l.resume() } , l.resume = function() { return l.alpha(.1) } , l.stop = function() { return l.alpha(0) } , l.drag = function() { return r || (r = ao.behavior.drag().origin(m).on("dragstart.force", qr).on("drag.force", t).on("dragend.force", ni)), arguments.length ? void this.on("mouseover.force", ti).on("mouseout.force", ei).call(r) : r } , ao.rebind(l, c, "on") } ; var ml = 20 , ml = 1 , xl = 1 / 0; ao.layout.hierarchy = function() { function n(i) { var u, o = [i], a = []; for (i.depth = 0; null != (u = o.pop()); ) if (a.push(u), (c = e.call(n, u, u.depth)) && (l = c.length)) { for (var l, c, f; --l >= 0; ) o.push(f = c[l]), f.parent = u, f.depth = u.depth + 1; r && (u.value = 0), u.children = c } else r && (u.value = +r.call(n, u, u.depth) || 0), delete u.children; return oi(i, function(n) { var e, i; t && (e = n.children) && e.sort(t), r && (i = n.parent) && (i.value += n.value) }), a } var t = ci , e = ai , r = li; return n.sort = function(e) { return arguments.length ? (t = e, n) : t } , n.children = function(t) { return arguments.length ? (e = t, n) : e } , n.value = function(t) { return arguments.length ? (r = t, n) : r } , n.revalue = function(t) { return r && (ui(t, function(n) { n.children && (n.value = 0) }), oi(t, function(t) { var e; t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value) })), t } , n } , ao.layout.partition = function() { function n(t, e, r, i) { var u = t.children; if (t.x = e, t.y = t.depth * i, t.dx = r, t.dy = i, u && (o = u.length)) { var o, a, l, c = -1; for (r = t.value ? r / t.value : 0; ++c < o; ) n(a = u[c], e, l = a.value * r, i), e += l } } function t(n) { var e = n.children , r = 0; if (e && (i = e.length)) for (var i, u = -1; ++u < i; ) r = math.max(r, t(e[u])); return 1 + r } function e(e, u) { var o = r.call(this, e, u); return n(o[0], 0, i[0], i[1] / t(o[0])), o } var r = ao.layout.hierarchy() , i = [1, 1]; return e.size = function(n) { return arguments.length ? (i = n, e) : i } , ii(e, r) } , ao.layout.pie = function() { function n(o) { var a, l = o.length, c = o.map(function(e, r) { return +t.call(n, e, r) }), f = +("function" == typeof r ? r.apply(this, arguments) : r), s = ("function" == typeof i ? i.apply(this, arguments) : i) - f, h = math.min(math.abs(s) / l, +("function" == typeof u ? u.apply(this, arguments) : u)), p = h * (0 > s ? -1 : 1), g = ao.sum(c), v = g ? (s - l * p) / g : 0, d = ao.range(l), y = []; return null != e && d.sort(e === bl ? function(n, t) { return c[t] - c[n] } : function(n, t) { return e(o[n], o[t]) } ), d.foreach(function(n) { y[n] = { data: o[n], value: a = c[n], startangle: f, endangle: f += a * v + p, padangle: h } }), y } var t = number , e = bl , r = 0 , i = ho , u = 0; return n.value = function(e) { return arguments.length ? (t = e, n) : t } , n.sort = function(t) { return arguments.length ? (e = t, n) : e } , n.startangle = function(t) { return arguments.length ? (r = t, n) : r } , n.endangle = function(t) { return arguments.length ? (i = t, n) : i } , n.padangle = function(t) { return arguments.length ? (u = t, n) : u } , n } ; var bl = {}; ao.layout.stack = function() { function n(a, l) { if (!(h = a.length)) return a; var c = a.map(function(e, r) { return t.call(n, e, r) }) , f = c.map(function(t) { return t.map(function(t, e) { return [u.call(n, t, e), o.call(n, t, e)] }) }) , s = e.call(n, f, l); c = ao.permute(c, s), f = ao.permute(f, s); var h, p, g, v, d = r.call(n, f, l), y = c[0].length; for (g = 0; y > g; ++g) for (i.call(n, c[0][g], v = d[g], f[0][g][1]), p = 1; h > p; ++p) i.call(n, c[p][g], v += f[p - 1][g][1], f[p][g][1]); return a } var t = m , e = gi , r = vi , i = pi , u = si , o = hi; return n.values = function(e) { return arguments.length ? (t = e, n) : t } , n.order = function(t) { return arguments.length ? (e = "function" == typeof t ? t : _l.get(t) || gi, n) : e } , n.offset = function(t) { return arguments.length ? (r = "function" == typeof t ? t : wl.get(t) || vi, n) : r } , n.x = function(t) { return arguments.length ? (u = t, n) : u } , n.y = function(t) { return arguments.length ? (o = t, n) : o } , n.out = function(t) { return arguments.length ? (i = t, n) : i } , n } ; var _l = ao.map({ "inside-out": function(n) { var t, e, r = n.length, i = n.map(di), u = n.map(yi), o = ao.range(r).sort(function(n, t) { return i[n] - i[t] }), a = 0, l = 0, c = [], f = []; for (t = 0; r > t; ++t) e = o[t], l > a ? (a += u[e], c.push(e)) : (l += u[e], f.push(e)); return f.reverse().concat(c) }, reverse: function(n) { return ao.range(n.length).reverse() }, "default": gi }) , wl = ao.map({ silhouette: function(n) { var t, e, r, i = n.length, u = n[0].length, o = [], a = 0, l = []; for (e = 0; u > e; ++e) { for (t = 0, r = 0; i > t; t++) r += n[t][e][1]; r > a && (a = r), o.push(r) } for (e = 0; u > e; ++e) l[e] = (a - o[e]) / 2; return l }, wiggle: function(n) { var t, e, r, i, u, o, a, l, c, f = n.length, s = n[0], h = s.length, p = []; for (p[0] = l = c = 0, e = 1; h > e; ++e) { for (t = 0, i = 0; f > t; ++t) i += n[t][e][1]; for (t = 0, u = 0, a = s[e][0] - s[e - 1][0]; f > t; ++t) { for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a; u += o * n[t][e][1] } p[e] = l -= i ? u / i * a : 0, c > l && (c = l) } for (e = 0; h > e; ++e) p[e] -= c; return p }, expand: function(n) { var t, e, r, i = n.length, u = n[0].length, o = 1 / i, a = []; for (e = 0; u > e; ++e) { for (t = 0, r = 0; i > t; t++) r += n[t][e][1]; if (r) for (t = 0; i > t; t++) n[t][e][1] /= r; else for (t = 0; i > t; t++) n[t][e][1] = o } for (e = 0; u > e; ++e) a[e] = 0; return a }, zero: vi }); ao.layout.histogram = function() { function n(n, u) { for (var o, a, l = [], c = n.map(e, this), f = r.call(this, c, u), s = i.call(this, f, c, u), u = -1, h = c.length, p = s.length - 1, g = t ? 1 : 1 / h; ++u < p; ) o = l[u] = [], o.dx = s[u + 1] - (o.x = s[u]), o.y = 0; if (p > 0) for (u = -1; ++u < h; ) a = c[u], a >= f[0] && a <= f[1] && (o = l[ao.bisect(s, a, 1, p) - 1], o.y += g, o.push(n[u])); return l } var t = !0 , e = number , r = bi , i = mi; return n.value = function(t) { return arguments.length ? (e = t, n) : e } , n.range = function(t) { return arguments.length ? (r = en(t), n) : r } , n.bins = function(t) { return arguments.length ? (i = "number" == typeof t ? function(n) { return xi(n, t) } : en(t), n) : i } , n.frequency = function(e) { return arguments.length ? (t = !!e, n) : t } , n } , ao.layout.pack = function() { function n(n, u) { var o = e.call(this, n, u) , a = o[0] , l = i[0] , c = i[1] , f = null == t ? math.sqrt : "function" == typeof t ? t : function() { return t } ; if (a.x = a.y = 0, oi(a, function(n) { n.r = +f(n.value) }), oi(a, ni), r) { var s = r * (t ? 1 : math.max(2 * a.r / l, 2 * a.r / c)) / 2; oi(a, function(n) { n.r += s }), oi(a, ni), oi(a, function(n) { n.r -= s }) } return ci(a, l / 2, c / 2, t ? 1 : 1 / math.max(2 * a.r / l, 2 * a.r / c)), o } var t, e = ao.layout.hierarchy().sort(_i), r = 0, i = [1, 1]; return n.size = function(t) { return arguments.length ? (i = t, n) : i } , n.radius = function(e) { return arguments.length ? (t = null == e || "function" == typeof e ? e : +e, n) : t } , n.padding = function(t) { return arguments.length ? (r = +t, n) : r } , ii(n, e) } , ao.layout.tree = function() { function n(n, i) { var f = o.call(this, n, i) , s = f[0] , h = t(s); if (oi(h, e), h.parent.m = -h.z, ui(h, r), c) ui(s, u); else { var p = s , g = s , v = s; ui(s, function(n) { n.x < p.x && (p = n), n.x > g.x && (g = n), n.depth > v.depth && (v = n) }); var d = a(p, g) / 2 - p.x , y = l[0] / (g.x + a(g, p) / 2 + d) , m = l[1] / (v.depth || 1); ui(s, function(n) { n.x = (n.x + d) * y, n.y = n.depth * m }) } return f } function t(n) { for (var t, e = { a: null, children: [n] }, r = [e]; null != (t = r.pop()); ) for (var i, u = t.children, o = 0, a = u.length; a > o; ++o) r.push((u[o] = i = { _: u[o], parent: t, children: (i = u[o].children) && i.slice() || [], a: null, a: null, z: 0, m: 0, c: 0, s: 0, t: null, i: o }).a = i); return e.children[0] } function e(n) { var t = n.children , e = n.parent.children , r = n.i ? e[n.i - 1] : null; if (t.length) { di(n); var u = (t[0].z + t[t.length - 1].z) / 2; r ? (n.z = r.z + a(n._, r._), n.m = n.z - u) : n.z = u } else r && (n.z = r.z + a(n._, r._)); n.parent.a = i(n, r, n.parent.a || e[0]) } function r(n) { n._.x = n.z + n.parent.m, n.m += n.parent.m } function i(n, t, e) { if (t) { for (var r, i = n, u = n, o = t, l = i.parent.children[0], c = i.m, f = u.m, s = o.m, h = l.m; o = ti(o), i = qi(i), o && i; ) l = qi(l), u = ti(u), u.a = n, r = o.z + s - i.z - c + a(o._, i._), r > 0 && (ri(pi(o, n, e), n, r), c += r, f += r), s += o.m, c += i.m, h += l.m, f += u.m; o && !ti(u) && (u.t = o, u.m += s - f), i && !qi(l) && (l.t = i, l.m += c - h, e = n) } return e } function u(n) { n.x *= l[0], n.y = n.depth * l[1] } var o = ao.layout.hierarchy().sort(null).value(null) , a = li , l = [1, 1] , c = null; return n.separation = function(t) { return arguments.length ? (a = t, n) : a } , n.size = function(t) { return arguments.length ? (c = null == (l = t) ? u : null, n) : c ? null : l } , n.nodesize = function(t) { return arguments.length ? (c = null == (l = t) ? null : u, n) : c ? l : null } , ii(n, o) } , ao.layout.cluster = function() { function n(n, u) { var o, a = t.call(this, n, u), l = a[0], c = 0; oi(l, function(n) { var t = n.children; t && t.length ? (n.x = ji(t), n.y = ui(t)) : (n.x = o ? c += e(n, o) : 0, n.y = 0, o = n) }); var f = fi(l) , s = hi(l) , h = f.x - e(f, s) / 2 , p = s.x + e(s, f) / 2; return oi(l, i ? function(n) { n.x = (n.x - l.x) * r[0], n.y = (l.y - n.y) * r[1] } : function(n) { n.x = (n.x - h) / (p - h) * r[0], n.y = (1 - (l.y ? n.y / l.y : 1)) * r[1] } ), a } var t = ao.layout.hierarchy().sort(null).value(null) , e = li , r = [1, 1] , i = !1; return n.separation = function(t) { return arguments.length ? (e = t, n) : e } , n.size = function(t) { return arguments.length ? (i = null == (r = t), n) : i ? null : r } , n.nodesize = function(t) { return arguments.length ? (i = null != (r = t), n) : i ? r : null } , ii(n, t) } , ao.layout.treemap = function() { function n(n, t) { for (var e, r, i = -1, u = n.length; ++i < u; ) r = (e = n[i]).value * (0 > t ? 0 : t), e.area = isnan(r) || 0 >= r ? 0 : r } function t(e) { var u = e.children; if (u && u.length) { var o, a, l, c = s(e), f = [], h = u.slice(), g = 1 / 0, v = "slice" === p ? c.dx : "dice" === p ? c.dy : "slice-dice" === p ? 1 & e.depth ? c.dy : c.dx : math.min(c.dx, c.dy); for (n(h, c.dx * c.dy / e.value), f.area = 0; (l = h.length) > 0; ) f.push(o = h[l - 1]), f.area += o.area, "squarify" !== p || (a = r(f, v)) <= g ? (h.pop(), g = a) : (f.area -= f.pop().area, i(f, v, c, !1), v = math.min(c.dx, c.dy), f.length = f.area = 0, g = 1 / 0); f.length && (i(f, v, c, !0), f.length = f.area = 0), u.foreach(t) } } function e(t) { var r = t.children; if (r && r.length) { var u, o = s(t), a = r.slice(), l = []; for (n(a, o.dx * o.dy / t.value), l.area = 0; u = a.pop(); ) l.push(u), l.area += u.area, null != u.z && (i(l, u.z ? o.dx : o.dy, o, !a.length), l.length = l.area = 0); r.foreach(e) } } function r(n, t) { for (var e, r = n.area, i = 0, u = 1 / 0, o = -1, a = n.length; ++o < a; ) (e = n[o].area) && (u > e && (u = e), e > i && (i = e)); return r *= r, t *= t, r ? math.max(t * i * g / r, r / (t * u * g)) : 1 / 0 } function i(n, t, e, r) { var i, u = -1, o = n.length, a = e.x, c = e.y, f = t ? l(n.area / t) : 0; if (t == e.dx) { for ((r || f > e.dy) && (f = e.dy); ++u < o; ) i = n[u], i.x = a, i.y = c, i.dy = f, a += i.dx = math.min(e.x + e.dx - a, f ? l(i.area / f) : 0); i.z = !0, i.dx += e.x + e.dx - a, e.y += f, e.dy -= f } else { for ((r || f > e.dx) && (f = e.dx); ++u < o; ) i = n[u], i.x = a, i.y = c, i.dx = f, c += i.dy = math.min(e.y + e.dy - c, f ? l(i.area / f) : 0); i.z = !1, i.dy += e.y + e.dy - c, e.x += f, e.dx -= f } } function u(r) { var i = o || a(r) , u = i[0]; return u.x = u.y = 0, u.value ? (u.dx = c[0], u.dy = c[1]) : u.dx = u.dy = 0, o && a.revalue(u), n([u], u.dx * u.dy / u.value), (o ? e : t)(u), h && (o = i), i } var o, a = ao.layout.hierarchy(), l = math.round, c = [1, 1], f = null, s = oi, h = !1, p = "squarify", g = .5 * (1 + math.sqrt(5)); return u.size = function(n) { return arguments.length ? (c = n, u) : c } , u.padding = function(n) { function t(t) { var e = n.call(u, t, t.depth); return null == e ? oi(t) : ii(t, "number" == typeof e ? [e, e, e, e] : e) } function e(t) { return ii(t, n) } if (!arguments.length) return f; var r; return s = null == (f = n) ? oi : "function" == (r = typeof n) ? t : "number" === r ? (n = [n, n, n, n], e) : e, u } , u.round = function(n) { return arguments.length ? (l = n ? math.round : number, u) : l != number } , u.sticky = function(n) { return arguments.length ? (h = n, o = null, u) : h } , u.ratio = function(n) { return arguments.length ? (g = n, u) : g } , u.mode = function(n) { return arguments.length ? (p = n + "", u) : p } , ii(u, a) } , ao.random = { normal: function(n, t) { var e = arguments.length; return 2 > e && (t = 1), 1 > e && (n = 0), function() { var e, r, i; do e = 2 * math.random() - 1, r = 2 * math.random() - 1, i = e * e + r * r; while (!i || i > 1);return n + t * e * math.sqrt(-2 * math.log(i) / i) } }, lognormal: function() { var n = ao.random.normal.apply(ao, arguments); return function() { return math.exp(n()) } }, bates: function(n) { var t = ao.random.irwinhall(n); return function() { return t() / n } }, irwinhall: function(n) { return function() { for (var t = 0, e = 0; n > e; e++) t += math.random(); return t } } }, ao.scale = {}; var sl = { floor: m, ceil: m }; ao.scale.linear = function() { return wi([0, 1], [0, 1], mr, !1) } ; var kl = { s: 1, g: 1, p: 1, r: 1, e: 1 }; ao.scale.log = function() { return ru(ao.scale.linear().domain([0, 1]), 10, !0, [1, 10]) } ; var nl = ao.format(".0e") , el = { floor: function(n) { return -math.ceil(-n) }, ceil: function(n) { return -math.floor(-n) } }; ao.scale.pow = function() { return iu(ao.scale.linear(), 1, [0, 1]) } , ao.scale.sqrt = function() { return ao.scale.pow().exponent(.5) } , ao.scale.ordinal = function() { return ou([], { t: "range", a: [[]] }) } , ao.scale.category10 = function() { return ao.scale.ordinal().range(al) } , ao.scale.category20 = function() { return ao.scale.ordinal().range(cl) } , ao.scale.category20b = function() { return ao.scale.ordinal().range(zl) } , ao.scale.category20c = function() { return ao.scale.ordinal().range(ll) } ; var al = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(xn) , cl = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(xn) , zl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(xn) , ll = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(xn); ao.scale.quantile = function() { return au([], []) } , ao.scale.quantize = function() { return lu(0, 1, [0, 1]) } , ao.scale.threshold = function() { return cu([.5], [0, 1]) } , ao.scale.identity = function() { return fu([0, 1]) } , ao.svg = {}, ao.svg.arc = function() { function n() { var n = math.max(0, +e.apply(this, arguments)) , c = math.max(0, +r.apply(this, arguments)) , f = o.apply(this, arguments) - io , s = a.apply(this, arguments) - io , h = math.abs(s - f) , p = f > s ? 0 : 1; if (n > c && (g = c, c = n, n = g), h >= oo) return t(c, p) + (n ? t(n, 1 - p) : "") + "z"; var g, v, d, y, m, m, x, b, _, w, s, k, n = 0, e = 0, a = []; if ((y = (+l.apply(this, arguments) || 0) / 2) && (d = u === ql ? math.sqrt(n * n + c * c) : +u.apply(this, arguments), p || (e *= -1), c && (e = tn(d / c * math.sin(y))), n && (n = tn(d / n * math.sin(y)))), c) { m = c * math.cos(f + e), m = c * math.sin(f + e), x = c * math.cos(s - e), b = c * math.sin(s - e); var c = math.abs(s - f - 2 * e) <= fo ? 0 : 1; if (e && yu(m, m, x, b) === p ^ c) { var z = (f + s) / 2; m = c * math.cos(z), m = c * math.sin(z), x = b = null } } else m = m = 0; if (n) { _ = n * math.cos(s - n), w = n * math.sin(s - n), s = n * math.cos(f + n), k = n * math.sin(f + n); var l = math.abs(f - s + 2 * n) <= fo ? 0 : 1; if (n && yu(_, w, s, k) === 1 - p ^ l) { var q = (f + s) / 2; _ = n * math.cos(q), w = n * math.sin(q), s = k = null } } else _ = w = 0; if (h > uo && (g = math.min(math.abs(c - n) / 2, +i.apply(this, arguments))) > .001) { v = c > n ^ p ? 0 : 1; var t = g , r = g; if (fo > h) { var d = null == s ? [_, w] : null == x ? [m, m] : re([m, m], [s, k], [x, b], [_, w]) , p = m - d[0] , u = m - d[1] , j = x - d[0] , f = b - d[1] , h = 1 / math.sin(math.acos((p * j + u * f) / (math.sqrt(p * p + u * u) * math.sqrt(j * j + f * f))) / 2) , o = math.sqrt(d[0] * d[0] + d[1] * d[1]); r = math.min(g, (n - o) / (h - 1)), t = math.min(g, (c - o) / (h + 1)) } if (null != x) { var i = mu(null == s ? [_, w] : [s, k], [m, m], c, t, p) , y = mu([x, b], [_, w], c, t, p); g === t ? a.push("m", i[0], "a", t, ",", t, " 0 0,", v, " ", i[1], "a", c, ",", c, " 0 ", 1 - p ^ yu(i[1][0], i[1][1], y[1][0], y[1][1]), ",", p, " ", y[1], "a", t, ",", t, " 0 0,", v, " ", y[0]) : a.push("m", i[0], "a", t, ",", t, " 0 1,", v, " ", y[0]) } else a.push("m", m, ",", m); if (null != s) { var z = mu([m, m], [s, k], n, -r, p) , v = mu([_, w], null == x ? [m, m] : [x, b], n, -r, p); g === r ? a.push("l", v[0], "a", r, ",", r, " 0 0,", v, " ", v[1], "a", n, ",", n, " 0 ", p ^ yu(v[1][0], v[1][1], z[1][0], z[1][1]), ",", 1 - p, " ", z[1], "a", r, ",", r, " 0 0,", v, " ", z[0]) : a.push("l", v[0], "a", r, ",", r, " 0 0,", v, " ", z[0]) } else a.push("l", _, ",", w) } else a.push("m", m, ",", m), null != x && a.push("a", c, ",", c, " 0 ", c, ",", p, " ", x, ",", b), a.push("l", _, ",", w), null != s && a.push("a", n, ",", n, " 0 ", l, ",", 1 - p, " ", s, ",", k); return a.push("z"), a.join("") } function t(n, t) { return "m0," + n + "a" + n + "," + n + " 0 1," + t + " 0," + -n + "a" + n + "," + n + " 0 1," + t + " 0," + n } var e = hu , r = pu , i = su , u = ql , o = gu , a = vu , l = du; return n.innerradius = function(t) { return arguments.length ? (e = en(t), n) : e } , n.outerradius = function(t) { return arguments.length ? (r = en(t), n) : r } , n.cornerradius = function(t) { return arguments.length ? (i = en(t), n) : i } , n.padradius = function(t) { return arguments.length ? (u = t == ql ? ql : en(t), n) : u } , n.startangle = function(t) { return arguments.length ? (o = en(t), n) : o } , n.endangle = function(t) { return arguments.length ? (a = en(t), n) : a } , n.padangle = function(t) { return arguments.length ? (l = en(t), n) : l } , n.centroid = function() { var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2 , t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - io; return [math.cos(t) * n, math.sin(t) * n] } , n } ; var ql = "auto"; ao.svg.line = function() { return mu(m) } ; var tl = ao.map({ linear: xu, "linear-closed": bu, step: _u, "step-before": wu, "step-after": su, basis: zu, "basis-open": lu, "basis-closed": qu, bundle: tu, cardinal: eu, "cardinal-open": ku, "cardinal-closed": nu, monotone: fu }); tl.foreach(function(n, t) { t.key = n, t.closed = /-closed$/.test(n) }); var rl = [0, 2 / 3, 1 / 3, 0] , dl = [0, 1 / 3, 2 / 3, 0] , pl = [0, 1 / 6, 2 / 3, 1 / 6]; ao.svg.line.radial = function() { var n = mu(hu); return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n } , wu.reverse = su, su.reverse = wu, ao.svg.area = function() { return ou(m) } , ao.svg.area.radial = function() { var n = ou(hu); return n.radius = n.x, delete n.x, n.innerradius = n.x0, delete n.x0, n.outerradius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startangle = n.y0, delete n.y0, n.endangle = n.y1, delete n.y1, n } , ao.svg.chord = function() { function n(n, a) { var l = t(this, u, n, a) , c = t(this, o, n, a); return "m" + l.p0 + r(l.r, l.p1, l.a1 - l.a0) + (e(l, c) ? i(l.r, l.p1, l.r, l.p0) : i(l.r, l.p1, c.r, c.p0) + r(c.r, c.p1, c.a1 - c.a0) + i(c.r, c.p1, l.r, l.p0)) + "z" } function t(n, t, e, r) { var i = t.call(n, e, r) , u = a.call(n, i, r) , o = l.call(n, i, r) - io , f = c.call(n, i, r) - io; return { r: u, a0: o, a1: f, p0: [u * math.cos(o), u * math.sin(o)], p1: [u * math.cos(f), u * math.sin(f)] } } function e(n, t) { return n.a0 == t.a0 && n.a1 == t.a1 } function r(n, t, e) { return "a" + n + "," + n + " 0 " + +(e > fo) + ",1 " + t } function i(n, t, e, r) { return "q 0,0 " + r } var u = me , o = xe , a = iu , l = gu , c = vu; return n.radius = function(t) { return arguments.length ? (a = en(t), n) : a } , n.source = function(t) { return arguments.length ? (u = en(t), n) : u } , n.target = function(t) { return arguments.length ? (o = en(t), n) : o } , n.startangle = function(t) { return arguments.length ? (l = en(t), n) : l } , n.endangle = function(t) { return arguments.length ? (c = en(t), n) : c } , n } , ao.svg.diagonal = function() { function n(n, i) { var u = t.call(this, n, i) , o = e.call(this, n, i) , a = (u.y + o.y) / 2 , l = [u, { x: u.x, y: a }, { x: o.x, y: a }, o]; return l = l.map(r), "m" + l[0] + "c" + l[1] + " " + l[2] + " " + l[3] } var t = me , e = xe , r = yu; return n.source = function(e) { return arguments.length ? (t = en(e), n) : t } , n.target = function(t) { return arguments.length ? (e = en(t), n) : e } , n.projection = function(t) { return arguments.length ? (r = t, n) : r } , n } , ao.svg.diagonal.radial = function() { var n = ao.svg.diagonal() , t = yu , e = n.projection; return n.projection = function(n) { return arguments.length ? e(zu(t = n)) : t } , n } , ao.svg.symbol = function() { function n(n, r) { return (ul.get(t.call(this, n, r)) || $u)(e.call(this, n, r)) } var t = xu , e = vu; return n.type = function(e) { return arguments.length ? (t = en(e), n) : t } , n.size = function(t) { return arguments.length ? (e = en(t), n) : e } , n } ; var ul = ao.map({ circle: $u, cross: function(n) { var t = math.sqrt(n / 5) / 2; return "m" + -3 * t + "," + -t + "h" + -t + "v" + -3 * t + "h" + t + "v" + -t + "h" + 3 * t + "v" + t + "h" + t + "v" + 3 * t + "h" + -t + "v" + t + "h" + -3 * t + "z" }, diamond: function(n) { var t = math.sqrt(n / (2 * fl)) , e = t * fl; return "m0," + -t + "l" + e + ",0 0," + t + " " + -e + ",0z" }, square: function(n) { var t = math.sqrt(n) / 2; return "m" + -t + "," + -t + "l" + t + "," + -t + " " + t + "," + t + " " + -t + "," + t + "z" }, "triangle-down": function(n) { var t = math.sqrt(n / jl) , e = t * jl / 2; return "m0," + e + "l" + t + "," + -e + " " + -t + "," + -e + "z" }, "triangle-up": function(n) { var t = math.sqrt(n / jl) , e = t * jl / 2; return "m0," + -e + "l" + t + "," + e + " " + -t + "," + e + "z" } }); ao.svg.symboltypes = ul.keys(); var jl = math.sqrt(3) , fl = math.tan(30 * yo); co.transition = function(n) { for (var t, e, r = hl || ++zl, i = ku(n), u = [], o = ol || { time: date.now(), ease: nr, delay: 0, duration: 250 }, a = -1, l = this.length; ++a < l; ) { u.push(t = []); for (var c = this[a], f = -1, s = c.length; ++f < s; ) (e = c[f]) && qu(e, f, i, r, o), t.push(e) } return wu(u, i, r) } , co.interrupt = function(n) { return this.each(null == n ? il : bu(ku(n))) } ; var hl, ol, il = bu(ku()), yl = [], zl = 0; yl.call = co.call, yl.empty = co.empty, yl.node = co.node, yl.size = co.size, ao.transition = function(n, t) { return n && n.transition ? hl ? n.transition(t) : n : ao.selection().transition(n) } , ao.transition.prototype = yl, yl.select = function(n) { var t, e, r, i = this.id, u = this.namespace, o = []; n = a(n); for (var a = -1, l = this.length; ++a < l; ) { o.push(t = []); for (var c = this[a], f = -1, s = c.length; ++f < s; ) (r = c[f]) && (e = n.call(r, r.__data__, f, a)) ? ("__data__"in r && (e.__data__ = r.__data__), qu(e, f, u, i, r[u][i]), t.push(e)) : t.push(null) } return wu(o, u, i) } , yl.selectall = function(n) { var t, e, r, i, u, o = this.id, a = this.namespace, l = []; n = c(n); for (var c = -1, f = this.length; ++c < f; ) for (var s = this[c], h = -1, p = s.length; ++h < p; ) if (r = s[h]) { u = r[a][o], e = n.call(r, r.__data__, h, c), l.push(t = []); for (var g = -1, v = e.length; ++g < v; ) (i = e[g]) && qu(i, g, a, o, u), t.push(i) } return wu(l, a, o) } , yl.filter = function(n) { var t, e, r, i = []; "function" != typeof n && (n = o(n)); for (var u = 0, o = this.length; o > u; u++) { i.push(t = []); for (var e = this[u], a = 0, l = e.length; l > a; a++) (r = e[a]) && n.call(r, r.__data__, a, u) && t.push(r) } return wu(i, this.namespace, this.id) } , yl.tween = function(n, t) { var e = this.id , r = this.namespace; return arguments.length < 2 ? this.node()[r][e].tween.get(n) : y(this, null == t ? function(t) { t[r][e].tween.remove(n) } : function(i) { i[r][e].tween.set(n, t) } ) } , yl.attr = function(n, t) { function e() { this.removeattribute(a) } function r() { this.removeattributens(a.space, a.local) } function i(n) { return null == n ? e : (n += "", function() { var t, e = this.getattribute(a); return e !== n && (t = o(e, n), function(n) { this.setattribute(a, t(n)) } ) } ) } function u(n) { return null == n ? r : (n += "", function() { var t, e = this.getattributens(a.space, a.local); return e !== n && (t = o(e, n), function(n) { this.setattributens(a.space, a.local, t(n)) } ) } ) } if (arguments.length < 2) { for (t in n) this.attr(t, n[t]); return this } var o = "transform" == n ? $r : mr , a = ao.ns.qualify(n); return ju(this, "attr." + n, t, a.local ? u : i) } , yl.attrtween = function(n, t) { function e(n, e) { var r = t.call(this, n, e, this.getattribute(i)); return r && function(n) { this.setattribute(i, r(n)) } } function r(n, e) { var r = t.call(this, n, e, this.getattributens(i.space, i.local)); return r && function(n) { this.setattributens(i.space, i.local, r(n)) } } var i = ao.ns.qualify(n); return this.tween("attr." + n, i.local ? r : e) } , yl.style = function(n, e, r) { function i() { this.style.removeproperty(n) } function u(e) { return null == e ? i : (e += "", function() { var i, u = t(this).getcomputedstyle(this, null).getpropertyvalue(n); return u !== e && (i = mr(u, e), function(t) { this.style.setproperty(n, i(t), r) } ) } ) } var o = arguments.length; if (3 > o) { if ("string" != typeof n) { 2 > o && (e = ""); for (r in n) this.style(r, n[r], e); return this } r = "" } return ju(this, "style." + n, e, u) } , yl.styletween = function(n, e, r) { function i(i, u) { var o = e.call(this, i, u, t(this).getcomputedstyle(this, null).getpropertyvalue(n)); return o && function(t) { this.style.setproperty(n, o(t), r) } } return arguments.length < 3 && (r = ""), this.tween("style." + n, i) } , yl.text = function(n) { return ju(this, "text", n, gu) } , yl.remove = function() { var n = this.namespace; return this.each("end.transition", function() { var t; this[n].count < 2 && (t = this.parentnode) && t.removechild(this) }) } , yl.ease = function(n) { var t = this.id , e = this.namespace; return arguments.length < 1 ? this.node()[e][t].ease : ("function" != typeof n && (n = ao.ease.apply(ao, arguments)), y(this, function(r) { r[e][t].ease = n })) } , yl.delay = function(n) { var t = this.id , e = this.namespace; return arguments.length < 1 ? this.node()[e][t].delay : y(this, "function" == typeof n ? function(r, i, u) { r[e][t].delay = +n.call(r, r.__data__, i, u) } : (n = +n, function(r) { r[e][t].delay = n } )) } , yl.duration = function(n) { var t = this.id , e = this.namespace; return arguments.length < 1 ? this.node()[e][t].duration : y(this, "function" == typeof n ? function(r, i, u) { r[e][t].duration = math.max(1, n.call(r, r.__data__, i, u)) } : (n = math.max(1, n), function(r) { r[e][t].duration = n } )) } , yl.each = function(n, t) { var e = this.id , r = this.namespace; if (arguments.length < 2) { var i = ol , u = hl; try { hl = e, y(this, function(t, i, u) { ol = t[r][e], n.call(t, t.__data__, i, u) }) } finally { ol = i, hl = u } } else y(this, function(i) { var u = i[r][e]; (u.event || (u.event = ao.dispatch("start", "end", "interrupt"))).on(n, t) }); return this } , yl.transition = function() { for (var n, t, e, r, i = this.id, u = ++zl, o = this.namespace, a = [], l = 0, c = this.length; c > l; l++) { a.push(n = []); for (var t = this[l], f = 0, s = t.length; s > f; f++) (e = t[f]) && (r = e[o][i], qu(e, f, o, u, { time: r.time, ease: r.ease, delay: r.delay + r.duration, duration: r.duration })), n.push(e) } return wu(a, o, u) } , ao.svg.axis = function() { function n(n) { n.each(function() { var n, c = ao.select(this), f = this.__chart__ || e, s = this.__chart__ = e.copy(), h = null == l ? s.ticks ? s.ticks.apply(s, a) : s.domain() : l, p = null == t ? s.tickformat ? s.tickformat.apply(s, a) : m : t, g = c.selectall(".tick").data(h, s), v = g.enter().insert("g", ".domain").attr("class", "tick").style("opacity", uo), d = ao.transition(g.exit()).style("opacity", uo).remove(), y = ao.transition(g.order()).style("opacity", 1), m = math.max(i, 0) + o, x = zi(s), b = c.selectall(".domain").data([0]), _ = (b.enter().append("path").attr("class", "domain"), ao.transition(b)); v.append("line"), v.append("text"); var w, s, k, n, e = v.select("line"), a = y.select("line"), c = g.select("text").text(p), z = v.select("text"), l = y.select("text"), q = "top" === r || "left" === r ? -1 : 1; if ("bottom" === r || "top" === r ? (n = no, w = "x", k = "y", s = "x2", n = "y2", c.attr("dy", 0 > q ? "0em" : ".71em").style("text-anchor", "middle"), _.attr("d", "m" + x[0] + "," + q * u + "v0h" + x[1] + "v" + q * u)) : (n = to, w = "y", k = "x", s = "y2", n = "x2", c.attr("dy", ".32em").style("text-anchor", 0 > q ? "end" : "start"), _.attr("d", "m" + q * u + "," + x[0] + "h0v" + x[1] + "h" + q * u)), e.attr(n, q * i), z.attr(k, q * m), a.attr(s, 0).attr(n, q * i), l.attr(w, 0).attr(k, q * m), s.rangeband) { var t = s , r = t.rangeband() / 2; f = s = function(n) { return t(n) + r } } else f.rangeband ? f = s : d.call(n, s, f); v.call(n, f, s), y.call(n, s, s) }) } var t, e = ao.scale.linear(), r = vl, i = 6, u = 6, o = 3, a = [10], l = null; return n.scale = function(t) { return arguments.length ? (e = t, n) : e } , n.orient = function(t) { return arguments.length ? (r = t in xl ? t + "" : vl, n) : r } , n.ticks = function() { return arguments.length ? (a = co(arguments), n) : a } , n.tickvalues = function(t) { return arguments.length ? (l = t, n) : l } , n.tickformat = function(e) { return arguments.length ? (t = e, n) : t } , n.ticksize = function(t) { var e = arguments.length; return e ? (i = +t, u = +arguments[e - 1], n) : i } , n.innerticksize = function(t) { return arguments.length ? (i = +t, n) : i } , n.outerticksize = function(t) { return arguments.length ? (u = +t, n) : u } , n.tickpadding = function(t) { return arguments.length ? (o = +t, n) : o } , n.ticksubdivide = function() { return arguments.length && n } , n } ; var vl = "bottom" , xl = { top: 1, right: 1, bottom: 1, left: 1 }; ao.svg.brush = function() { function n(t) { t.each(function() { var t = ao.select(this).style("pointer-events", "all").style("-webkit-tap-highlight-color", "rgba(0,0,0,0)").on("mousedown.brush", u).on("touchstart.brush", u) , o = t.selectall(".background").data([0]); o.enter().append("rect").attr("class", "background").style("visibility", "hidden").style("cursor", "crosshair"), t.selectall(".extent").data([0]).enter().append("rect").attr("class", "extent").style("cursor", "move"); var a = t.selectall(".resize").data(v, m); a.exit().remove(), a.enter().append("g").attr("class", function(n) { return "resize " + n }).style("cursor", function(n) { return $l[n] }).append("rect").attr("x", function(n) { return /[ew]$/.test(n) ? -3 : null }).attr("y", function(n) { return /^[ns]/.test(n) ? -3 : null }).attr("width", 6).attr("height", 6).style("visibility", "hidden"), a.style("display", n.empty() ? "none" : null); var l, s = ao.transition(t), h = ao.transition(o); c && (l = zi(c), h.attr("x", l[0]).attr("width", l[1] - l[0]), r(s)), f && (l = zi(f), h.attr("y", l[0]).attr("height", l[1] - l[0]), i(s)), e(s) }) } function e(n) { n.selectall(".resize").attr("transform", function(n) { return "translate(" + s[+/e$/.test(n)] + "," + h[+/^s/.test(n)] + ")" }) } function r(n) { n.select(".extent").attr("x", s[0]), n.selectall(".extent,.n>rect,.s>rect").attr("width", s[1] - s[0]) } function i(n) { n.select(".extent").attr("y", h[0]), n.selectall(".extent,.e>rect,.w>rect").attr("height", h[1] - h[0]) } function u() { function u() { 32 == ao.event.keycode && (c || (m = null, l[0] -= s[1], l[1] -= h[1], c = 2), s()) } function v() { 32 == ao.event.keycode && 2 == c && (l[0] += s[1], l[1] += h[1], c = 0, s()) } function d() { var n = ao.mouse(b) , t = !1; x && (n[0] += x[0], n[1] += x[1]), c || (ao.event.altkey ? (m || (m = [(s[0] + s[1]) / 2, (h[0] + h[1]) / 2]), l[0] = s[+(n[0] < m[0])], l[1] = h[+(n[1] < m[1])]) : m = null), e && y(n, c, 0) && (r(k), t = !0), a && y(n, f, 1) && (i(k), t = !0), t && (e(k), w({ type: "brush", mode: c ? "move" : "resize" })) } function y(n, t, e) { var r, i, u = zi(t), l = u[0], c = u[1], f = l[e], v = e ? h : s, d = v[1] - v[0]; return c && (l -= f, c -= d + f), r = (e ? g : p) ? math.max(l, math.min(c, n[e])) : n[e], c ? i = (r += f) + d : (m && (f = math.max(l, math.min(c, 2 * m[e] - r))), r > f ? (i = r, r = f) : i = f), v[0] != r || v[1] != i ? (e ? a = null : o = null, v[0] = r, v[1] = i, !0) : void 0 } function m() { d(), k.style("pointer-events", "all").selectall(".resize").style("display", n.empty() ? "none" : null), ao.select("body").style("cursor", null), q.on("mousemove.brush", null).on("mouseup.brush", null).on("touchmove.brush", null).on("touchend.brush", null).on("keydown.brush", null).on("keyup.brush", null), z(), w({ type: "brushend" }) } var m, x, b = this, _ = ao.select(ao.event.target), w = l.of(b, arguments), k = ao.select(b), n = _.datum(), e = !/^(n|s)$/.test(n) && c, a = !/^(e|w)$/.test(n) && f, c = _.classed("extent"), z = w(b), l = ao.mouse(b), q = ao.select(t(b)).on("keydown.brush", u).on("keyup.brush", v); if (ao.event.changedtouches ? q.on("touchmove.brush", d).on("touchend.brush", m) : q.on("mousemove.brush", d).on("mouseup.brush", m), k.interrupt().selectall("*").interrupt(), c) l[0] = s[0] - l[0], l[1] = h[0] - l[1]; else if (n) { var t = +/w$/.test(n) , r = +/^n/.test(n); x = [s[1 - t] - l[0], h[1 - r] - l[1]], l[0] = s[t], l[1] = h[r] } else ao.event.altkey && (m = l.slice()); k.style("pointer-events", "none").selectall(".resize").style("display", null), ao.select("body").style("cursor", _.style("cursor")), w({ type: "brushstart" }), d() } var o, a, l = n(n, "brushstart", "brush", "brushend"), c = null, f = null, s = [0, 0], h = [0, 0], p = !0, g = !0, v = bl[0]; return n.event = function(n) { n.each(function() { var n = l.of(this, arguments) , t = { x: s, y: h, i: o, j: a } , e = this.__chart__ || t; this.__chart__ = t, hl ? ao.select(this).transition().each("start.brush", function() { o = e.i, a = e.j, s = e.x, h = e.y, n({ type: "brushstart" }) }).tween("brush:brush", function() { var e = xr(s, t.x) , r = xr(h, t.y); return o = a = null, function(i) { s = t.x = e(i), h = t.y = r(i), n({ type: "brush", mode: "resize" }) } }).each("end.brush", function() { o = t.i, a = t.j, n({ type: "brush", mode: "resize" }), n({ type: "brushend" }) }) : (n({ type: "brushstart" }), n({ type: "brush", mode: "resize" }), n({ type: "brushend" })) }) } , n.x = function(t) { return arguments.length ? (c = t, v = bl[!c << 1 | !f], n) : c } , n.y = function(t) { return arguments.length ? (f = t, v = bl[!c << 1 | !f], n) : f } , n.clamp = function(t) { return arguments.length ? (c && f ? (p = !!t[0], g = !!t[1]) : c ? p = !!t : f && (g = !!t), n) : c && f ? [p, g] : c ? p : f ? g : null } , n.extent = function(t) { var e, r, i, u, l; return arguments.length ? (c && (e = t[0], r = t[1], f && (e = e[0], r = r[0]), o = [e, r], c.invert && (e = c(e), r = c(r)), e > r && (l = e, e = r, r = l), e == s[0] && r == s[1] || (s = [e, r])), f && (i = t[0], u = t[1], c && (i = i[1], u = u[1]), a = [i, u], f.invert && (i = f(i), u = f(u)), i > u && (l = i, i = u, u = l), i == h[0] && u == h[1] || (h = [i, u])), n) : (c && (o ? (e = o[0], r = o[1]) : (e = s[0], r = s[1], c.invert && (e = c.invert(e), r = c.invert(r)), e > r && (l = e, e = r, r = l))), f && (a ? (i = a[0], u = a[1]) : (i = h[0], u = h[1], f.invert && (i = f.invert(i), u = f.invert(u)), i > u && (l = i, i = u, u = l))), c && f ? [[e, i], [r, u]] : c ? [e, r] : f && [i, u]) } , n.clear = function() { return n.empty() || (s = [0, 0], h = [0, 0], o = a = null), n } , n.empty = function() { return !!c && s[0] == s[1] || !!f && h[0] == h[1] } , ao.rebind(n, l, "on") } ; var $l = { n: "ns-resize", e: "ew-resize", s: "ns-resize", w: "ew-resize", nw: "nwse-resize", ne: "nesw-resize", se: "nwse-resize", sw: "nesw-resize" } , bl = [["n", "e", "s", "w", "nw", "ne", "se", "sw"], ["e", "w"], ["n", "s"], []] , wl = ga.format = xa.timeformat , jl = wl.utc , gl = jl("%y-%m-%dt%h:%m:%s.%lz"); wl.iso = date.prototype.toisostring && +new date("2000-01-01t00:00:00.000z") ? eo : gl, eo.parse = function(n) { var t = new date(n); return isnan(t) ? null : t } , eo.tostring = gl.tostring, ga.second = on(function(n) { return new va(1e3 * math.floor(n / 1e3)) }, function(n, t) { n.settime(n.gettime() + 1e3 * math.floor(t)) }, function(n) { return n.getseconds() }), ga.seconds = ga.second.range, ga.seconds.utc = ga.second.utc.range, ga.minute = on(function(n) { return new va(6e4 * math.floor(n / 6e4)) }, function(n, t) { n.settime(n.gettime() + 6e4 * math.floor(t)) }, function(n) { return n.getminutes() }), ga.minutes = ga.minute.range, ga.minutes.utc = ga.minute.utc.range, ga.hour = on(function(n) { var t = n.gettimezoneoffset() / 60; return new va(36e5 * (math.floor(n / 36e5 - t) + t)) }, function(n, t) { n.settime(n.gettime() + 36e5 * math.floor(t)) }, function(n) { return n.gethours() }), ga.hours = ga.hour.range, ga.hours.utc = ga.hour.utc.range, ga.month = on(function(n) { return n = ga.day(n), n.setdate(1), n }, function(n, t) { n.setmonth(n.getmonth() + t) }, function(n) { return n.getmonth() }), ga.months = ga.month.range, ga.months.utc = ga.month.utc.range; var kl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6] , ql = [[ga.second, 1], [ga.second, 5], [ga.second, 15], [ga.second, 30], [ga.minute, 1], [ga.minute, 5], [ga.minute, 15], [ga.minute, 30], [ga.hour, 1], [ga.hour, 3], [ga.hour, 6], [ga.hour, 12], [ga.day, 1], [ga.day, 2], [ga.week, 1], [ga.month, 1], [ga.month, 3], [ga.year, 1]] , nc = wl.multi([[".%l", function(n) { return n.getmilliseconds() } ], [":%s", function(n) { return n.getseconds() } ], ["%i:%m", function(n) { return n.getminutes() } ], ["%i %p", function(n) { return n.gethours() } ], ["%a %d", function(n) { return n.getday() && 1 != n.getdate() } ], ["%b %d", function(n) { return 1 != n.getdate() } ], ["%b", function(n) { return n.getmonth() } ], ["%y", zt]]) , tc = { range: function(n, t, e) { return ao.range(math.ceil(n / e) * e, +t, e).map(io) }, floor: m, ceil: m }; ql.year = ga.year, ga.scale = function() { return ro(ao.scale.linear(), ql, nc) } ; var ec = ql.map(function(n) { return [n[0].utc, n[1]] }) , rc = jl.multi([[".%l", function(n) { return n.getutcmilliseconds() } ], [":%s", function(n) { return n.getutcseconds() } ], ["%i:%m", function(n) { return n.getutcminutes() } ], ["%i %p", function(n) { return n.getutchours() } ], ["%a %d", function(n) { return n.getutcday() && 1 != n.getutcdate() } ], ["%b %d", function(n) { return 1 != n.getutcdate() } ], ["%b", function(n) { return n.getutcmonth() } ], ["%y", zt]]); ec.year = ga.year.utc, ga.scale.utc = function() { return ro(ao.scale.linear(), ec, rc) } , ao.text = an(function(n) { return n.responsetext }), ao.json = function(n, t) { return cn(n, "application/json", uo, t) } , ao.html = function(n, t) { return cn(n, "text/html", oo, t) } , ao.xml = an(function(n) { return n.responsexml }), "function" == typeof define && define.amd ? (this.d3 = ao, define(ao)) : "object" == typeof module && module.exports ? module.exports = ao : this.d3 = ao }();