Tracing Covid-19 deaths across the country from the first death to the hardest-hit county.
By Elliott Ramos, Pedro Barquinha and Jiachuan Wu Feb. 22, 2021
The United States on Sunday hit the half-a-million mark for the number of lives claimed by Covid-19.
Nearly a year since the coronavirus was declared a pandemic on March 11, 2020, 100,000 Covid-19 deaths in the U.S. was the low estimate. Early on, cities such as New York and Chicago were hit hard, particularly in communities of color. Then, hot spots in nursing homes and meatpacking plants began to emerge as the virus hit suburban and rural communities.
Scroll through the map to trace Covid-19 deaths across the country from the first death to the hardest-hit county.
Methodology NBC News, using Johns Hopkins University's per-county Covid-19 death counts and the U.S. Census Bureau's 2010 decennial census, plotted deaths based on census block-level populations within the county the deaths were reported in. Locations are representative and, except for Chicago, not exact. The locations of Chicago's Covid-19 deaths came from the Cook County Medical Examiner.
")
}
function Fu(t) {
return new RegExp("^(?:" + t.map(Ou).join("|") + ")", "i")
}
function Iu(t) {
for (var n = {}, e = -1, r = t.length; ++e 68 ? 1900 : 2e3), e + r[0].length) : -1
}
function Wu(t, n, e) {
var r = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(n.slice(e, e + 6));
return r ? (t.Z = r[1] ? 0 : -(r[2] + (r[3] || "00")), e + r[0].length) : -1
}
function Zu(t, n, e) {
var r = Tg.exec(n.slice(e, e + 2));
return r ? (t.m = r[0] - 1, e + r[0].length) : -1
}
function Gu(t, n, e) {
var r = Tg.exec(n.slice(e, e + 2));
return r ? (t.d = +r[0], e + r[0].length) : -1
}
function Qu(t, n, e) {
var r = Tg.exec(n.slice(e, e + 3));
return r ? (t.m = 0, t.d = +r[0], e + r[0].length) : -1
}
function Ju(t, n, e) {
var r = Tg.exec(n.slice(e, e + 2));
return r ? (t.H = +r[0], e + r[0].length) : -1
}
function Ku(t, n, e) {
var r = Tg.exec(n.slice(e, e + 2));
return r ? (t.M = +r[0], e + r[0].length) : -1
}
function ta(t, n, e) {
var r = Tg.exec(n.slice(e, e + 2));
return r ? (t.S = +r[0], e + r[0].length) : -1
}
function na(t, n, e) {
var r = Tg.exec(n.slice(e, e + 3));
return r ? (t.L = +r[0], e + r[0].length) : -1
}
function ea(t, n, e) {
var r = Tg.exec(n.slice(e, e + 6));
return r ? (t.L = Math.floor(r[0] / 1e3), e + r[0].length) : -1
}
function ra(t, n, e) {
var r = Ng.exec(n.slice(e, e + 1));
return r ? e + r[0].length : -1
}
function ia(t, n, e) {
var r = Tg.exec(n.slice(e));
return r ? (t.Q = +r[0], e + r[0].length) : -1
}
function oa(t, n, e) {
var r = Tg.exec(n.slice(e));
return r ? (t.Q = 1e3 * +r[0], e + r[0].length) : -1
}
function ua(t, n) {
return Uu(t.getDate(), n, 2)
}
function aa(t, n) {
return Uu(t.getHours(), n, 2)
}
function ca(t, n) {
return Uu(t.getHours() % 12 || 12, n, 2)
}
function sa(t, n) {
return Uu(1 + Pv.count(Gv(t), t), n, 3)
}
function fa(t, n) {
return Uu(t.getMilliseconds(), n, 3)
}
function la(t, n) {
return fa(t, n) + "000"
}
function ha(t, n) {
return Uu(t.getMonth() + 1, n, 2)
}
function pa(t, n) {
return Uu(t.getMinutes(), n, 2)
}
function da(t, n) {
return Uu(t.getSeconds(), n, 2)
}
function va(t) {
var n = t.getDay();
return 0 === n ? 7 : n
}
function ga(t, n) {
return Uu(Lv.count(Gv(t), t), n, 2)
}
function _a(t, n) {
var e = t.getDay();
return t = e >= 4 || 0 === e ? Ov(t) : Ov.ceil(t), Uu(Ov.count(Gv(t), t) + (4 === Gv(t).getDay()), n, 2)
}
function ya(t) {
return t.getDay()
}
function ma(t, n) {
return Uu(qv.count(Gv(t), t), n, 2)
}
function xa(t, n) {
return Uu(t.getFullYear() % 100, n, 2)
}
function ba(t, n) {
return Uu(t.getFullYear() % 1e4, n, 4)
}
function wa(t) {
var n = t.getTimezoneOffset();
return (n > 0 ? "-" : (n *= -1, "+")) + Uu(n / 60 | 0, "0", 2) + Uu(n % 60, "0", 2)
}
function Ma(t, n) {
return Uu(t.getUTCDate(), n, 2)
}
function Ta(t, n) {
return Uu(t.getUTCHours(), n, 2)
}
function Na(t, n) {
return Uu(t.getUTCHours() % 12 || 12, n, 2)
}
function ka(t, n) {
return Uu(1 + eg.count(xg(t), t), n, 3)
}
function Sa(t, n) {
return Uu(t.getUTCMilliseconds(), n, 3)
}
function Ea(t, n) {
return Sa(t, n) + "000"
}
function Aa(t, n) {
return Uu(t.getUTCMonth() + 1, n, 2)
}
function Ca(t, n) {
return Uu(t.getUTCMinutes(), n, 2)
}
function za(t, n) {
return Uu(t.getUTCSeconds(), n, 2)
}
function Pa(t) {
var n = t.getUTCDay();
return 0 === n ? 7 : n
}
function Ra(t, n) {
return Uu(ig.count(xg(t), t), n, 2)
}
function La(t, n) {
var e = t.getUTCDay();
return t = e >= 4 || 0 === e ? cg(t) : cg.ceil(t), Uu(cg.count(xg(t), t) + (4 === xg(t).getUTCDay()), n, 2)
}
function qa(t) {
return t.getUTCDay()
}
function Da(t, n) {
return Uu(og.count(xg(t), t), n, 2)
}
function Ua(t, n) {
return Uu(t.getUTCFullYear() % 100, n, 2)
}
function Oa(t, n) {
return Uu(t.getUTCFullYear() % 1e4, n, 4)
}
function Fa() {
return "+0000"
}
function Ia() {
return "%"
}
function Ya(t) {
return +t
}
function Ba(t) {
return Math.floor(+t / 1e3)
}
function Ha(n) {
return bg = Du(n), t.timeFormat = bg.format, t.timeParse = bg.parse, t.utcFormat = bg.utcFormat, t.utcParse = bg.utcParse, bg
}
function ja(t) {
return new Date(t)
}
function Xa(t) {
return t instanceof Date ? +t : +new Date(+t)
}
function Va(t, n, r, i, o, u, a, c, s) {
function f(e) {
return (a(e) = 1 ? i_ : t C * C + z * z && (T = k, N = S), {
cx: T,
cy: N,
x01: -f,
y01: -l,
x11: T * (i / b - 1),
y11: N * (i / b - 1)
}
}
function ic(t) {
this._context = t
}
function oc(t) {
return new ic(t)
}
function uc(t) {
return t[0]
}
function ac(t) {
return t[1]
}
function cc() {
function t(t) {
var a, c, s, f = t.length,
l = !1;
for (null == i && (u = o(s = ee())), a = 0; a = f; --l) s.point(g[l], _[l]);
s.lineEnd(), s.areaEnd()
} v && (g[n] = +e(h, n, t), _[n] = +i(h, n, t), s.point(r ? +r(h, n, t) : g[n], o ? +o(h, n, t) : _[n]))
}
if (p) return s = null, p + "" || null
}
function n() {
return cc().defined(u).curve(c).context(a)
}
var e = uc,
r = null,
i = Ga(0),
o = ac,
u = Ga(!0),
a = null,
c = oc,
s = null;
return t.x = function(n) {
return arguments.length ? (e = "function" == typeof n ? n : Ga(+n), r = null, t) : e
}, t.x0 = function(n) {
return arguments.length ? (e = "function" == typeof n ? n : Ga(+n), t) : e
}, t.x1 = function(n) {
return arguments.length ? (r = null == n ? null : "function" == typeof n ? n : Ga(+n), t) : r
}, t.y = function(n) {
return arguments.length ? (i = "function" == typeof n ? n : Ga(+n), o = null, t) : i
}, t.y0 = function(n) {
return arguments.length ? (i = "function" == typeof n ? n : Ga(+n), t) : i
}, t.y1 = function(n) {
return arguments.length ? (o = null == n ? null : "function" == typeof n ? n : Ga(+n), t) : o
}, t.lineX0 = t.lineY0 = function() {
return n().x(e).y(i)
}, t.lineY1 = function() {
return n().x(e).y(o)
}, t.lineX1 = function() {
return n().x(r).y(i)
}, t.defined = function(n) {
return arguments.length ? (u = "function" == typeof n ? n : Ga(!!n), t) : u
}, t.curve = function(n) {
return arguments.length ? (c = n, null != a && (s = c(a)), t) : c
}, t.context = function(n) {
return arguments.length ? (null == n ? a = s = null : s = c(a = n), t) : a
}, t
}
function fc(t, n) {
return n t ? 1 : n >= t ? 0 : NaN
}
function lc(t) {
return t
}
function hc(t) {
this._curve = t
}
function pc(t) {
function n(n) {
return new hc(t(n))
}
return n._curve = t, n
}
function dc(t) {
var n = t.curve;
return t.angle = t.x, delete t.x, t.radius = t.y, delete t.y, t.curve = function(t) {
return arguments.length ? n(pc(t)) : n()._curve
}, t
}
function vc() {
return dc(cc().curve(u_))
}
function gc() {
var t = sc().curve(u_),
n = t.curve,
e = t.lineX0,
r = t.lineX1,
i = t.lineY0,
o = t.lineY1;
return t.angle = t.x, delete t.x, t.startAngle = t.x0, delete t.x0, t.endAngle = t.x1, delete t.x1, t.radius = t.y, delete t.y, t.innerRadius = t.y0, delete t.y0, t.outerRadius = t.y1, delete t.y1, t.lineStartAngle = function() {
return dc(e())
}, delete t.lineX0, t.lineEndAngle = function() {
return dc(r())
}, delete t.lineX1, t.lineInnerRadius = function() {
return dc(i())
}, delete t.lineY0, t.lineOuterRadius = function() {
return dc(o())
}, delete t.lineY1, t.curve = function(t) {
return arguments.length ? n(pc(t)) : n()._curve
}, t
}
function _c(t, n) {
return [(n = +n) * Math.cos(t -= Math.PI / 2), n * Math.sin(t)]
}
function yc(t) {
return t.source
}
function mc(t) {
return t.target
}
function xc(t) {
function n() {
var n, a = a_.call(arguments),
c = e.apply(this, a),
s = r.apply(this, a);
if (u || (u = n = ee()), t(u, +i.apply(this, (a[0] = c, a)), +o.apply(this, a), +i.apply(this, (a[0] = s, a)), +o.apply(this, a)), n) return u = null, n + "" || null
}
var e = yc,
r = mc,
i = uc,
o = ac,
u = null;
return n.source = function(t) {
return arguments.length ? (e = t, n) : e
}, n.target = function(t) {
return arguments.length ? (r = t, n) : r
}, n.x = function(t) {
return arguments.length ? (i = "function" == typeof t ? t : Ga(+t), n) : i
}, n.y = function(t) {
return arguments.length ? (o = "function" == typeof t ? t : Ga(+t), n) : o
}, n.context = function(t) {
return arguments.length ? (u = null == t ? null : t, n) : u
}, n
}
function bc(t, n, e, r, i) {
t.moveTo(n, e), t.bezierCurveTo(n = (n + r) / 2, e, n, i, r, i)
}
function wc(t, n, e, r, i) {
t.moveTo(n, e), t.bezierCurveTo(n, e = (e + i) / 2, r, e, r, i)
}
function Mc(t, n, e, r, i) {
var o = _c(n, e),
u = _c(n, e = (e + i) / 2),
a = _c(r, e),
c = _c(r, i);
t.moveTo(o[0], o[1]), t.bezierCurveTo(u[0], u[1], a[0], a[1], c[0], c[1])
}
function Tc() {}
function Nc(t, n, e) {
t._context.bezierCurveTo((2 * t._x0 + t._x1) / 3, (2 * t._y0 + t._y1) / 3, (t._x0 + 2 * t._x1) / 3, (t._y0 + 2 * t._y1) / 3, (t._x0 + 4 * t._x1 + n) / 6, (t._y0 + 4 * t._y1 + e) / 6)
}
function kc(t) {
this._context = t
}
function Sc(t) {
this._context = t
}
function Ec(t) {
this._context = t
}
function Ac(t, n) {
this._basis = new kc(t), this._beta = n
}
function Cc(t, n, e) {
t._context.bezierCurveTo(t._x1 + t._k * (t._x2 - t._x0), t._y1 + t._k * (t._y2 - t._y0), t._x2 + t._k * (t._x1 - n), t._y2 + t._k * (t._y1 - e), t._x2, t._y2)
}
function zc(t, n) {
this._context = t, this._k = (1 - n) / 6
}
function Pc(t, n) {
this._context = t, this._k = (1 - n) / 6
}
function Rc(t, n) {
this._context = t, this._k = (1 - n) / 6
}
function Lc(t, n, e) {
var r = t._x1,
i = t._y1,
o = t._x2,
u = t._y2;
if (t._l01_a > e_) {
var a = 2 * t._l01_2a + 3 * t._l01_a * t._l12_a + t._l12_2a,
c = 3 * t._l01_a * (t._l01_a + t._l12_a);
r = (r * a - t._x0 * t._l12_2a + t._x2 * t._l01_2a) / c, i = (i * a - t._y0 * t._l12_2a + t._y2 * t._l01_2a) / c
}
if (t._l23_a > e_) {
var s = 2 * t._l23_2a + 3 * t._l23_a * t._l12_a + t._l12_2a,
f = 3 * t._l23_a * (t._l23_a + t._l12_a);
o = (o * s + t._x1 * t._l23_2a - n * t._l12_2a) / f, u = (u * s + t._y1 * t._l23_2a - e * t._l12_2a) / f
}
t._context.bezierCurveTo(r, i, o, u, t._x2, t._y2)
}
function qc(t, n) {
this._context = t, this._alpha = n
}
function Dc(t, n) {
this._context = t, this._alpha = n
}
function Uc(t, n) {
this._context = t, this._alpha = n
}
function Oc(t) {
this._context = t
}
function Fc(t) {
return t = 0; --n) i[n] = (u[n] - i[n + 1]) / o[n];
for (o[r - 1] = (t[r] + i[r - 1]) / 2, n = 0; n 1)
for (var e, r, i, o = 1, u = t[n[0]], a = u.length; o = 0;) e[n] = n;
return e
}
function Qc(t, n) {
return t[n]
}
function Jc(t) {
var n = t.map(Kc);
return Gc(t).sort(function(t, e) {
return n[t] - n[e]
})
}
function Kc(t) {
for (var n, e = 0, r = -1, i = t.length; ++r 0)) {
if (o /= h, h 0) {
if (o > l) return;
o > f && (f = o)
}
if (o = r - c, h || !(o l) return;
o > f && (f = o)
} else if (h > 0) {
if (o 0)) {
if (o /= p, p 0) {
if (o > l) return;
o > f && (f = o)
}
if (o = i - s, p || !(o l) return;
o > f && (f = o)
} else if (p > 0) {
if (o 0 || l 0 && (t[0] = [c + f * h, s + f * p]), l = r) return;
if (l > p) {
if (c) {
if (c[1] >= i) return
} else c = [v, e];
o = [v, i]
} else {
if (c) {
if (c[1] 1)
if (l > p) {
if (c) {
if (c[1] >= i) return
} else c = [(e - a) / u, e];
o = [(i - a) / u, i]
} else {
if (c) {
if (c[1] = r) return
} else c = [n, u * n + a];
o = [r, u * r + a]
} else {
if (c) {
if (c[0] = -I_)) {
var p = c * c + s * s,
d = f * f + l * l,
v = (l * p - s * d) / h,
g = (c * d - f * p) / h,
_ = U_.pop() || new function() {
is(this), this.x = this.y = this.arc = this.site = this.cy = null
};
_.arc = t, _.site = i, _.x = v + u, _.y = (_.cy = g + a) + Math.sqrt(v * v + g * g), t.circle = _;
for (var y = null, m = q_._; m;)
if (_.y F_) a = a.L;
else {
if (!((i = o - function(t, n) {
var e = t.N;
if (e) return ws(e, n);
var r = t.site;
return r[1] === n ? r[0] : 1 / 0
}(a, u)) > F_)) {
r > -F_ ? (n = a.P, e = a) : i > -F_ ? (n = a, e = a.N) : n = e = a;
break
}
if (!a.R) {
n = a;
break
}
a = a.R
}(function(t) {
L_[t.index] = {
site: t,
halfedges: []
}
})(t);
var c = ys(t);
if (R_.insert(n, c), n || e) {
if (n === e) return _s(n), e = ys(n.site), R_.insert(c, e), c.edge = e.edge = cs(n.site, c.site), gs(n), void gs(e);
if (e) {
_s(n), _s(e);
var s = n.site,
f = s[0],
l = s[1],
h = t[0] - f,
p = t[1] - l,
d = e.site,
v = d[0] - f,
g = d[1] - l,
_ = 2 * (h * g - p * v),
y = h * h + p * p,
m = v * v + g * g,
x = [(g * y - p * m) / _ + f, (h * m - v * y) / _ + l];
fs(e.edge, s, d, x), c.edge = cs(s, t, null, x), e.edge = cs(t, d, null, x), gs(n), gs(e)
} else c.edge = cs(n.site, c.site)
}
}
function ws(t, n) {
var e = t.site,
r = e[0],
i = e[1],
o = i - n;
if (!o) return r;
var u = t.P;
if (!u) return -1 / 0;
var a = (e = u.site)[0],
c = e[1],
s = c - n;
if (!s) return a;
var f = a - r,
l = 1 / o - 1 / s,
h = f / s;
return l ? (-h + Math.sqrt(h * h - 2 * l * (f * f / (-2 * s) - c + s / 2 + i - o / 2))) / l + r : (r + a) / 2
}
function Ms(t, n, e) {
return (t[0] - e[0]) * (n[1] - t[1]) - (t[0] - n[0]) * (e[1] - t[1])
}
function Ts(t, n) {
return n[1] - t[1] || n[0] - t[0]
}
function Ns(t, n) {
var e, r, i, o = t.sort(Ts).pop();
for (D_ = [], L_ = new Array(t.length), R_ = new rs, q_ = new rs;;)
if (i = P_, o && (!i || o[1] F_ || Math.abs(i[0][1] - i[1][1]) > F_) || delete D_[o]
})(u, a, c, s),
function(t, n, e, r) {
var i, o, u, a, c, s, f, l, h, p, d, v, g = L_.length,
_ = !0;
for (i = 0; i F_ || Math.abs(v - h) > F_) && (c.splice(a, 0, D_.push(ss(u, p, Math.abs(d - t) F_ ? [t, Math.abs(l - t) F_ ? [Math.abs(h - r) F_ ? [e, Math.abs(l - e) F_ ? [Math.abs(h - n) r ? (r + i) / 2 : Math.min(0, r) || Math.max(0, i), u > o ? (o + u) / 2 : Math.min(0, o) || Math.max(0, u))
}
var Us = e(n),
Os = Us.right,
Fs = Us.left,
Is = Array.prototype,
Ys = Is.slice,
Bs = Is.map,
Hs = Math.sqrt(50),
js = Math.sqrt(10),
Xs = Math.sqrt(2),
Vs = Array.prototype.slice,
$s = 1,
Ws = 2,
Zs = 3,
Gs = 4,
Qs = 1e-6,
Js = {
value: function() {}
};
k.prototype = N.prototype = {
constructor: k,
on: function(t, n) {
var e, r = this._,
i = function(t, n) {
return t.trim().split(/^|\s+/).map(function(t) {
var e = "",
r = t.indexOf(".");
if (r >= 0 && (e = t.slice(r + 1), t = t.slice(0, r)), t && !n.hasOwnProperty(t)) throw new Error("unknown type: " + t);
return {
type: t,
name: e
}
})
}(t + "", r),
o = -1,
u = i.length; {
if (!(arguments.length 0)
for (var e, r, i = new Array(e), o = 0; o = 0 && (this._names.splice(n, 1), this._node.setAttribute("class", this._names.join(" ")))
},
contains: function(t) {
return this._names.indexOf(t) >= 0
}
};
var af = {};
if (t.event = null, "undefined" != typeof document) {
"onmouseenter" in document.documentElement || (af = {
mouseenter: "mouseover",
mouseleave: "mouseout"
})
}
var cf = [null];
ut.prototype = at.prototype = {
constructor: ut,
select: function(t) {
"function" != typeof t && (t = z(t));
for (var n = this._groups, e = n.length, r = new Array(e), i = 0; i = x && (x = m + 1); !(y = g[x]) && ++x = 0;)(r = i[o]) && (u && u !== r.nextSibling && u.parentNode.insertBefore(r, u), u = r);
return this
},
sort: function(t) {
function n(n, e) {
return n && e ? t(n.__data__, e.__data__) : !n - !e
}
t || (t = O);
for (var e = this._groups, r = e.length, i = new Array(r), o = 0; o 1 ? this.each((null == n ? function(t) {
return function() {
this.style.removeProperty(t)
}
} : "function" == typeof n ? function(t, n, e) {
return function() {
var r = n.apply(this, arguments);
null == r ? this.style.removeProperty(t) : this.style.setProperty(t, r, e)
}
} : function(t, n, e) {
return function() {
this.style.setProperty(t, n, e)
}
})(t, n, null == e ? "" : e)) : I(this.node(), t)
},
property: function(t, n) {
return arguments.length > 1 ? this.each((null == n ? function(t) {
return function() {
delete this[t]
}
} : "function" == typeof n ? function(t, n) {
return function() {
var e = n.apply(this, arguments);
null == e ? delete this[t] : this[t] = e
}
} : function(t, n) {
return function() {
this[t] = n
}
})(t, n)) : this.node()[t]
},
classed: function(t, n) {
var e = Y(t + "");
if (arguments.length = 0 && (n = t.slice(e + 1), t = t.slice(0, e)), {
type: t,
name: n
}
})
}(t + ""),
u = o.length;
if (!(arguments.length = 240 ? t - 240 : t + 120, i, r), Ut(t, i, r), Ut(t = 0 && (t = t.slice(0, n)), !t || "start" === t
})
}(n) ? An : Cn;
return function() {
var u = o(this, t),
a = u.on;
a !== r && (i = (r = a).copy()).on(n, e), u.on = i
}
}(e, t, n))
},
attr: function(t, n) {
var e = E(t),
r = "transform" === e ? Qf : Ln;
return this.attrTween(t, "function" == typeof n ? (e.local ? function(t, n, e) {
var r, i, o;
return function() {
var u, a = e(this);
if (null != a) return (u = this.getAttributeNS(t.space, t.local)) === a ? null : u === r && a === i ? o : o = n(r = u, i = a);
this.removeAttributeNS(t.space, t.local)
}
} : function(t, n, e) {
var r, i, o;
return function() {
var u, a = e(this);
if (null != a) return (u = this.getAttribute(t)) === a ? null : u === r && a === i ? o : o = n(r = u, i = a);
this.removeAttribute(t)
}
})(e, r, Rn(this, "attr." + t, n)) : null == n ? (e.local ? function(t) {
return function() {
this.removeAttributeNS(t.space, t.local)
}
} : function(t) {
return function() {
this.removeAttribute(t)
}
})(e) : (e.local ? function(t, n, e) {
var r, i;
return function() {
var o = this.getAttributeNS(t.space, t.local);
return o === e ? null : o === r ? i : i = n(r = o, e)
}
} : function(t, n, e) {
var r, i;
return function() {
var o = this.getAttribute(t);
return o === e ? null : o === r ? i : i = n(r = o, e)
}
})(e, r, n + ""))
},
attrTween: function(t, n) {
var e = "attr." + t;
if (arguments.length 1e-6)
if (Math.abs(f * a - c * s) > 1e-6 && i) {
var h = e - o,
p = r - u,
d = a * a + c * c,
v = h * h + p * p,
g = Math.sqrt(d),
_ = Math.sqrt(l),
y = i * Math.tan((yh - Math.acos((d + l - v) / (2 * g * _))) / 2),
m = y / _,
x = y / g;
Math.abs(m - 1) > 1e-6 && (this._ += "L" + (t + m * s) + "," + (n + m * f)), this._ += "A" + i + "," + i + ",0,0," + +(f * h > s * p) + "," + (this._x1 = t + x * a) + "," + (this._y1 = n + x * c)
} else this._ += "L" + (this._x1 = t) + "," + (this._y1 = n);
else;
},
arc: function(t, n, e, r, i, o) {
t = +t, n = +n;
var u = (e = +e) * Math.cos(r),
a = e * Math.sin(r),
c = t + u,
s = n + a,
f = 1 ^ o,
l = o ? r - i : i - r;
if (e 1e-6 || Math.abs(this._y1 - s) > 1e-6) && (this._ += "L" + c + "," + s), e && (l xh ? this._ += "A" + e + "," + e + ",0,1," + f + "," + (t - u) + "," + (n - a) + "A" + e + "," + e + ",0,1," + f + "," + (this._x1 = c) + "," + (this._y1 = s) : l > 1e-6 && (this._ += "A" + e + "," + e + ",0," + +(l >= yh) + "," + f + "," + (this._x1 = t + e * Math.cos(i)) + "," + (this._y1 = n + e * Math.sin(i))))
},
rect: function(t, n, e, r) {
this._ += "M" + (this._x0 = this._x1 = +t) + "," + (this._y0 = this._y1 = +n) + "h" + +e + "v" + +r + "h" + -e + "Z"
},
toString: function() {
return this._
}
};
ce.prototype = se.prototype = {
constructor: ce,
has: function(t) {
return "$" + t in this
},
get: function(t) {
return this["$" + t]
},
set: function(t, n) {
return this["$" + t] = n, this
},
remove: function(t) {
var n = "$" + t;
return n in this && delete this[n]
},
clear: function() {
for (var t in this) "$" === t[0] && delete this[t]
},
keys: function() {
var t = [];
for (var n in this) "$" === n[0] && t.push(n.slice(1));
return t
},
values: function() {
var t = [];
for (var n in this) "$" === n[0] && t.push(this[n]);
return t
},
entries: function() {
var t = [];
for (var n in this) "$" === n[0] && t.push({
key: n.slice(1),
value: this[n]
});
return t
},
size: function() {
var t = 0;
for (var n in this) "$" === n[0] && ++t;
return t
},
empty: function() {
for (var t in this)
if ("$" === t[0]) return !1;
return !0
},
each: function(t) {
for (var n in this) "$" === n[0] && t(this[n], n.slice(1), this)
}
};
var bh = se.prototype;
de.prototype = ve.prototype = {
constructor: de,
has: bh.has,
add: function(t) {
return t += "", this["$" + t] = t, this
},
remove: bh.remove,
clear: bh.clear,
values: bh.keys,
size: bh.size,
empty: bh.empty,
each: bh.each
};
var wh = {},
Mh = {},
Th = 34,
Nh = 10,
kh = 13,
Sh = _e(","),
Eh = Sh.parse,
Ah = Sh.parseRows,
Ch = Sh.format,
zh = Sh.formatRows,
Ph = _e("\t"),
Rh = Ph.parse,
Lh = Ph.parseRows,
qh = Ph.format,
Dh = Ph.formatRows,
Uh = Te.prototype = Ne.prototype;
Uh.copy = function() {
var t, n, e = new Ne(this._x, this._y, this._x0, this._y0, this._x1, this._y1),
r = this._root;
if (!r) return e;
if (!r.length) return e._root = ke(r), e;
for (t = [{
source: r,
target: e._root = new Array(4)
}]; r = t.pop();)
for (var i = 0; i f && (f = r), i l && (l = i));
for (f t || t > i || r > n || n > o)) return this;
var u, a, c = i - e,
s = this._root;
switch (a = (n i || n > o);
break;
case 1:
do {
u = new Array(4), u[a] = s, s = u
} while (c *= 2, e = i - c, o = r + c, e > t || n > o);
break;
case 2:
do {
u = new Array(4), u[a] = s, s = u
} while (c *= 2, i = e + c, r = o - c, t > i || r > n);
break;
case 3:
do {
u = new Array(4), u[a] = s, s = u
} while (c *= 2, e = i - c, r = o - c, e > t || r > n)
}
this._root && this._root.length && (this._root = s)
}
return this._x0 = e, this._y0 = r, this._x1 = i, this._y1 = o, this
}, Uh.data = function() {
var t = [];
return this.visit(function(n) {
if (!n.length)
do {
t.push(n.data)
} while (n = n.next)
}), t
}, Uh.extent = function(t) {
return arguments.length ? this.cover(+t[0][0], +t[0][1]).cover(+t[1][0], +t[1][1]) : isNaN(this._x0) ? void 0 : [
[this._x0, this._y0],
[this._x1, this._y1]
]
}, Uh.find = function(t, n, e) {
var r, i, o, u, a, c, s, f = this._x0,
l = this._y0,
h = this._x1,
p = this._y1,
d = [],
v = this._root;
for (v && d.push(new be(v, f, l, h, p)), null == e ? e = 1 / 0 : (f = t - e, l = n - e, h = t + e, p = n + e, e *= e); c = d.pop();)
if (!(!(v = c.node) || (i = c.x0) > h || (o = c.y0) > p || (u = c.x1) = _) = g) && (c = d[d.length - 1], d[d.length - 1] = d[d.length - 1 - s], d[d.length - 1 - s] = c)
} else {
var y = t - +this._x.call(null, v.data),
m = n - +this._y.call(null, v.data),
x = y * y + m * m;
if (x = (a = (d + g) / 2)) ? d = a : g = a, (f = u >= (c = (v + _) / 2)) ? v = c : _ = c, n = p, !(p = p[l = f 0 && (o = 0)
}
return o > 0 ? t.slice(0, o) + t.slice(e + 1) : t
},
"%": function(t, n) {
return (100 * t).toFixed(n)
},
b: function(t) {
return Math.round(t).toString(2)
},
c: function(t) {
return t + ""
},
d: function(t) {
return Math.round(t).toString(10)
},
e: function(t, n) {
return t.toExponential(n)
},
f: function(t, n) {
return t.toFixed(n)
},
g: function(t, n) {
return t.toPrecision(n)
},
o: function(t) {
return Math.round(t).toString(8)
},
p: function(t, n) {
return qe(100 * t, n)
},
r: qe,
s: function(t, n) {
var e = Re(t, n);
if (!e) return t + "";
var r = e[0],
i = e[1],
o = i - (Oh = 3 * Math.max(-8, Math.min(8, Math.floor(i / 3)))) + 1,
u = r.length;
return o === u ? r : o > u ? r + new Array(o - u + 1).join("0") : o > 0 ? r.slice(0, o) + "." + r.slice(o) : "0." + new Array(1 - o).join("0") + Re(t, Math.max(0, n + o - 1))[0]
},
X: function(t) {
return Math.round(t).toString(16).toUpperCase()
},
x: function(t) {
return Math.round(t).toString(16)
}
},
Bh = /^(?:(.)?([=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i;
De.prototype = Ue.prototype, Ue.prototype.toString = function() {
return this.fill + this.align + this.sign + this.symbol + (this.zero ? "0" : "") + (null == this.width ? "" : Math.max(1, 0 | this.width)) + (this.comma ? "," : "") + (null == this.precision ? "" : "." + Math.max(0, 0 | this.precision)) + this.type
};
var Hh, jh = ["y", "z", "a", "f", "p", "n", "µ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y"];
Ie({
decimal: ".",
thousands: ",",
grouping: [3],
currency: ["$", ""]
}), Xe.prototype = {
constructor: Xe,
reset: function() {
this.s = this.t = 0
},
add: function(t) {
Ve(wp, t, this.t), Ve(this, wp.s, this.s), this.s ? this.t += wp.t : this.s = wp.t
},
valueOf: function() {
return this.s
}
};
var Xh, Vh, $h, Wh, Zh, Gh, Qh, Jh, Kh, tp, np, ep, rp, ip, op, up, ap, cp, sp, fp, lp, hp, pp, dp, vp, gp, _p, yp, mp, xp, bp, wp = new Xe,
Mp = 1e-6,
Tp = 1e-12,
Np = Math.PI,
kp = Np / 2,
Sp = Np / 4,
Ep = 2 * Np,
Ap = 180 / Np,
Cp = Np / 180,
zp = Math.abs,
Pp = Math.atan,
Rp = Math.atan2,
Lp = Math.cos,
qp = Math.ceil,
Dp = Math.exp,
Up = Math.log,
Op = Math.pow,
Fp = Math.sin,
Ip = Math.sign || function(t) {
return t > 0 ? 1 : t Mp ? Kh = 90 : Wp 0 ? Np : -Np,
c = zp(o - e);
zp(c - Np) 0 ? kp : -kp), t.point(i, r), t.lineEnd(), t.lineStart(), t.point(a, r), t.point(o, r), n = 0) : i !== a && c >= Np && (zp(e - i) Mp ? Pp((Fp(n) * (o = Lp(r)) * Fp(e) - Fp(r) * (i = Lp(n)) * Fp(t)) / (i * o * u)) : (n + r) / 2
}(e, r, o, u), t.point(i, r), t.lineEnd(), t.lineStart(), t.point(a, r), n = 0), t.point(e = o, r = u), i = a
},
lineEnd: function() {
t.lineEnd(), e = r = NaN
},
clean: function() {
return 2 - n
}
}
}, function(t, n, e, r) {
var i;
if (null == t) i = e * kp, r.point(-Np, i), r.point(0, i), r.point(Np, i), r.point(Np, 0), r.point(Np, -i), r.point(0, -i), r.point(-Np, -i), r.point(-Np, 0), r.point(-Np, i);
else if (zp(t[0] - n[0]) > Mp) {
var o = t[0] Md && (Md = t), n Td && (Td = n)
},
lineStart: Ge,
lineEnd: Ge,
polygonStart: Ge,
polygonEnd: Ge,
result: function() {
var t = [
[bd, wd],
[Md, Td]
];
return Md = Td = -(wd = bd = 1 / 0), t
}
},
kd = 0,
Sd = 0,
Ed = 0,
Ad = 0,
Cd = 0,
zd = 0,
Pd = 0,
Rd = 0,
Ld = 0,
qd = {
point: yi,
lineStart: mi,
lineEnd: wi,
polygonStart: function() {
qd.lineStart = Mi, qd.lineEnd = Ti
},
polygonEnd: function() {
qd.point = yi, qd.lineStart = mi, qd.lineEnd = wi
},
result: function() {
var t = Ld ? [Pd / Ld, Rd / Ld] : zd ? [Ad / zd, Cd / zd] : Ed ? [kd / Ed, Sd / Ed] : [NaN, NaN];
return kd = Sd = Ed = Ad = Cd = zd = Pd = Rd = Ld = 0, t
}
};
Si.prototype = {
_radius: 4.5,
pointRadius: function(t) {
return this._radius = t, this
},
polygonStart: function() {
this._line = 0
},
polygonEnd: function() {
this._line = NaN
},
lineStart: function() {
this._point = 0
},
lineEnd: function() {
0 === this._line && this._context.closePath(), this._point = NaN
},
point: function(t, n) {
switch (this._point) {
case 0:
this._context.moveTo(t, n), this._point = 1;
break;
case 1:
this._context.lineTo(t, n);
break;
default:
this._context.moveTo(t + this._radius, n), this._context.arc(t, n, this._radius, 0, Ep)
}
},
result: Ge
};
var Dd, Ud, Od, Fd, Id, Yd = je(),
Bd = {
point: Ge,
lineStart: function() {
Bd.point = Ei
},
lineEnd: function() {
Dd && Ai(Ud, Od), Bd.point = Ge
},
polygonStart: function() {
Dd = !0
},
polygonEnd: function() {
Dd = null
},
result: function() {
var t = +Yd;
return Yd.reset(), t
}
};
Ci.prototype = {
_radius: 4.5,
_circle: zi(4.5),
pointRadius: function(t) {
return (t = +t) !== this._radius && (this._radius = t, this._circle = null), this
},
polygonStart: function() {
this._line = 0
},
polygonEnd: function() {
this._line = NaN
},
lineStart: function() {
this._point = 0
},
lineEnd: function() {
0 === this._line && this._string.push("Z"), this._point = NaN
},
point: function(t, n) {
switch (this._point) {
case 0:
this._string.push("M", t, ",", n), this._point = 1;
break;
case 1:
this._string.push("L", t, ",", n);
break;
default:
null == this._circle && (this._circle = zi(this._radius)), this._string.push("M", t, ",", n, this._circle)
}
},
result: function() {
if (this._string.length) {
var t = this._string.join("");
return this._string = [], t
}
return null
}
}, Ri.prototype = {
constructor: Ri,
point: function(t, n) {
this.stream.point(t, n)
},
sphere: function() {
this.stream.sphere()
},
lineStart: function() {
this.stream.lineStart()
},
lineEnd: function() {
this.stream.lineEnd()
},
polygonStart: function() {
this.stream.polygonStart()
},
polygonEnd: function() {
this.stream.polygonEnd()
}
};
var Hd = 16,
jd = Lp(30 * Cp),
Xd = Pi({
point: function(t, n) {
this.stream.point(t * Cp, n * Cp)
}
}),
Vd = Vi(function(t) {
return Yp(2 / (1 + t))
});
Vd.invert = $i(function(t) {
return 2 * We(t / 2)
});
var $d = Vi(function(t) {
return (t = $e(t)) && t / Fp(t)
});
$d.invert = $i(function(t) {
return t
}), Wi.invert = function(t, n) {
return [t, 2 * Pp(Dp(n)) - kp]
}, Ji.invert = Ji, to.invert = $i(Pp), eo.invert = function(t, n) {
var e, r = n,
i = 25;
do {
var o = r * r,
u = o * o;
r -= e = (r * (1.007226 + o * (.015085 + u * (.028874 * o - .044475 - .005916 * u))) - n) / (1.007226 + o * (.045255 + u * (.259866 * o - .311325 - .005916 * 11 * u)))
} while (zp(e) > Mp && --i > 0);
return [t / (.8707 + (o = r * r) * (o * (o * o * o * (.003971 - .001529 * o) - .013791) - .131979)), r]
}, ro.invert = $i(We), io.invert = $i(function(t) {
return 2 * Pp(t)
}), oo.invert = function(t, n) {
return [-n, 2 * Pp(Dp(t)) - kp]
}, vo.prototype = fo.prototype = {
constructor: vo,
count: function() {
return this.eachAfter(so)
},
each: function(t) {
var n, e, r, i, o = this,
u = [o];
do {
for (n = u.reverse(), u = []; o = n.pop();)
if (t(o), e = o.children)
for (r = 0, i = e.length; r = 0; --e) i.push(n[e]);
return this
},
sum: function(t) {
return this.eachAfter(function(n) {
for (var e = +t(n.data) || 0, r = n.children, i = r && r.length; --i >= 0;) e += r[i].value;
n.value = e
})
},
sort: function(t) {
return this.eachBefore(function(n) {
n.children && n.children.sort(t)
})
},
path: function(t) {
for (var n = this, e = function(t, n) {
if (t === n) return t;
var e = t.ancestors(),
r = n.ancestors(),
i = null;
for (t = e.pop(), n = r.pop(); t === n;) i = t, t = e.pop(), n = r.pop();
return i
}(n, t), r = [n]; n !== e;) n = n.parent, r.push(n);
for (var i = r.length; t !== e;) r.splice(i, 0, t), t = t.parent;
return r
},
ancestors: function() {
for (var t = this, n = [t]; t = t.parent;) n.push(t);
return n
},
descendants: function() {
var t = [];
return this.each(function(n) {
t.push(n)
}), t
},
leaves: function() {
var t = [];
return this.eachBefore(function(n) {
n.children || t.push(n)
}), t
},
links: function() {
var t = this,
n = [];
return t.each(function(e) {
e !== t && n.push({
source: e.parent,
target: e
})
}), n
},
copy: function() {
return fo(this).eachBefore(ho)
}
};
var Wd = Array.prototype.slice,
Zd = "$",
Gd = {
depth: -1
},
Qd = {};
Ho.prototype = Object.create(vo.prototype);
var Jd = (1 + Math.sqrt(5)) / 2,
Kd = function t(n) {
function e(t, e, r, i, o) {
Xo(n, t, e, r, i, o)
}
return e.ratio = function(n) {
return t((n = +n) > 1 ? n : 1)
}, e
}(Jd),
tv = function t(n) {
function e(t, e, r, i, o) {
if ((u = t._squarify) && u.ratio === n)
for (var u, a, c, s, f, l = -1, h = u.length, p = t.value; ++l 1 ? n : 1)
}, e
}(Jd),
nv = [].slice,
ev = {};
Zo.prototype = Ko.prototype = {
constructor: Zo,
defer: function(t) {
if ("function" != typeof t) throw new Error("invalid callback");
if (this._call) throw new Error("defer after await");
if (null != this._error) return this;
var n = nv.call(arguments, 1);
return n.push(t), ++this._waiting, this._tasks.push(n), Go(this), this
},
abort: function() {
return null == this._error && Qo(this, new Error("abort")), this
},
await: function(t) {
if ("function" != typeof t) throw new Error("invalid callback");
if (this._call) throw new Error("multiple await");
return this._call = function(n, e) {
t.apply(null, [n].concat(e))
}, Jo(this), this
},
awaitAll: function(t) {
if ("function" != typeof t) throw new Error("invalid callback");
if (this._call) throw new Error("multiple await");
return this._call = t, Jo(this), this
}
};
var rv = function t(n) {
function e(t, e) {
return t = null == t ? 0 : +t, e = null == e ? 1 : +e, 1 === arguments.length ? (e = t, t = 0) : e -= t,
function() {
return n() * e + t
}
}
return e.source = t, e
}(tu),
iv = function t(n) {
function e(t, e) {
var r, i;
return t = null == t ? 0 : +t, e = null == e ? 1 : +e,
function() {
var o;
if (null != r) o = r, r = null;
else
do {
r = 2 * n() - 1, o = 2 * n() - 1, i = r * r + o * o
} while (!i || i > 1);
return t + e * o * Math.sqrt(-2 * Math.log(i) / i)
}
}
return e.source = t, e
}(tu),
ov = function t(n) {
function e() {
var t = iv.source(n).apply(this, arguments);
return function() {
return Math.exp(t())
}
}
return e.source = t, e
}(tu),
uv = function t(n) {
function e(t) {
return function() {
for (var e = 0, r = 0; r 0 ? t > 1 ? Cu(function(n) {
n.setTime(Math.floor(n / t) * t)
}, function(n, e) {
n.setTime(+n + e * t)
}, function(n, e) {
return (e - n) / t
}) : wv : null
};
var Mv = wv.range,
Tv = 6e4,
Nv = 6048e5,
kv = Cu(function(t) {
t.setTime(1e3 * Math.floor(t / 1e3))
}, function(t, n) {
t.setTime(+t + 1e3 * n)
}, function(t, n) {
return (n - t) / 1e3
}, function(t) {
return t.getUTCSeconds()
}),
Sv = kv.range,
Ev = Cu(function(t) {
t.setTime(Math.floor(t / Tv) * Tv)
}, function(t, n) {
t.setTime(+t + n * Tv)
}, function(t, n) {
return (n - t) / Tv
}, function(t) {
return t.getMinutes()
}),
Av = Ev.range,
Cv = Cu(function(t) {
var n = t.getTimezoneOffset() * Tv % 36e5;
n 0 ? Cu(function(n) {
n.setFullYear(Math.floor(n.getFullYear() / t) * t), n.setMonth(0, 1), n.setHours(0, 0, 0, 0)
}, function(n, e) {
n.setFullYear(n.getFullYear() + e * t)
}) : null
};
var Qv = Gv.range,
Jv = Cu(function(t) {
t.setUTCSeconds(0, 0)
}, function(t, n) {
t.setTime(+t + n * Tv)
}, function(t, n) {
return (n - t) / Tv
}, function(t) {
return t.getUTCMinutes()
}),
Kv = Jv.range,
tg = Cu(function(t) {
t.setUTCMinutes(0, 0, 0)
}, function(t, n) {
t.setTime(+t + 36e5 * n)
}, function(t, n) {
return (n - t) / 36e5
}, function(t) {
return t.getUTCHours()
}),
ng = tg.range,
eg = Cu(function(t) {
t.setUTCHours(0, 0, 0, 0)
}, function(t, n) {
t.setUTCDate(t.getUTCDate() + n)
}, function(t, n) {
return (n - t) / 864e5
}, function(t) {
return t.getUTCDate() - 1
}),
rg = eg.range,
ig = Pu(0),
og = Pu(1),
ug = Pu(2),
ag = Pu(3),
cg = Pu(4),
sg = Pu(5),
fg = Pu(6),
lg = ig.range,
hg = og.range,
pg = ug.range,
dg = ag.range,
vg = cg.range,
gg = sg.range,
_g = fg.range,
yg = Cu(function(t) {
t.setUTCDate(1), t.setUTCHours(0, 0, 0, 0)
}, function(t, n) {
t.setUTCMonth(t.getUTCMonth() + n)
}, function(t, n) {
return n.getUTCMonth() - t.getUTCMonth() + 12 * (n.getUTCFullYear() - t.getUTCFullYear())
}, function(t) {
return t.getUTCMonth()
}),
mg = yg.range,
xg = Cu(function(t) {
t.setUTCMonth(0, 1), t.setUTCHours(0, 0, 0, 0)
}, function(t, n) {
t.setUTCFullYear(t.getUTCFullYear() + n)
}, function(t, n) {
return n.getUTCFullYear() - t.getUTCFullYear()
}, function(t) {
return t.getUTCFullYear()
});
xg.every = function(t) {
return isFinite(t = Math.floor(t)) && t > 0 ? Cu(function(n) {
n.setUTCFullYear(Math.floor(n.getUTCFullYear() / t) * t), n.setUTCMonth(0, 1), n.setUTCHours(0, 0, 0, 0)
}, function(n, e) {
n.setUTCFullYear(n.getUTCFullYear() + e * t)
}) : null
};
var bg, wg = xg.range,
Mg = {
"-": "",
_: " ",
0: "0"
},
Tg = /^\s*\d+/,
Ng = /^%/,
kg = /[\\^$*+?|[\]().{}]/g;
Ha({
dateTime: "%x, %X",
date: "%-m/%-d/%Y",
time: "%-I:%M:%S %p",
periods: ["AM", "PM"],
days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
});
var Sg = "%Y-%m-%dT%H:%M:%S.%LZ",
Eg = Date.prototype.toISOString ? function(t) {
return t.toISOString()
} : t.utcFormat(Sg),
Ag = +new Date("2000-01-01T00:00:00.000Z") ? function(t) {
var n = new Date(t);
return isNaN(n) ? null : n
} : t.utcParse(Sg),
Cg = 1e3,
zg = 60 * Cg,
Pg = 60 * zg,
Rg = 24 * Pg,
Lg = 7 * Rg,
qg = 30 * Rg,
Dg = 365 * Rg,
Ug = $a("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"),
Og = $a("393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6"),
Fg = $a("3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9"),
Ig = $a("1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5"),
Yg = al($t(300, .5, 0), $t(-240, .5, 1)),
Bg = al($t(-100, .75, .35), $t(80, 1.5, .8)),
Hg = al($t(260, .75, .35), $t(80, 1.5, .8)),
jg = $t(),
Xg = Wa($a("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),
Vg = Wa($a("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),
$g = Wa($a("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),
Wg = Wa($a("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),
Zg = Math.abs,
Gg = Math.atan2,
Qg = Math.cos,
Jg = Math.max,
Kg = Math.min,
t_ = Math.sin,
n_ = Math.sqrt,
e_ = 1e-12,
r_ = Math.PI,
i_ = r_ / 2,
o_ = 2 * r_;
ic.prototype = {
areaStart: function() {
this._line = 0
},
areaEnd: function() {
this._line = NaN
},
lineStart: function() {
this._point = 0
},
lineEnd: function() {
(this._line || 0 !== this._line && 1 === this._point) && this._context.closePath(), this._line = 1 - this._line
},
point: function(t, n) {
switch (t = +t, n = +n, this._point) {
case 0:
this._point = 1, this._line ? this._context.lineTo(t, n) : this._context.moveTo(t, n);
break;
case 1:
this._point = 2;
default:
this._context.lineTo(t, n)
}
}
};
var u_ = pc(oc);
hc.prototype = {
areaStart: function() {
this._curve.areaStart()
},
areaEnd: function() {
this._curve.areaEnd()
},
lineStart: function() {
this._curve.lineStart()
},
lineEnd: function() {
this._curve.lineEnd()
},
point: function(t, n) {
this._curve.point(n * Math.sin(t), n * -Math.cos(t))
}
};
var a_ = Array.prototype.slice,
c_ = {
draw: function(t, n) {
var e = Math.sqrt(n / r_);
t.moveTo(e, 0), t.arc(0, 0, e, 0, o_)
}
},
s_ = {
draw: function(t, n) {
var e = Math.sqrt(n / 5) / 2;
t.moveTo(-3 * e, -e), t.lineTo(-e, -e), t.lineTo(-e, -3 * e), t.lineTo(e, -3 * e), t.lineTo(e, -e), t.lineTo(3 * e, -e), t.lineTo(3 * e, e), t.lineTo(e, e), t.lineTo(e, 3 * e), t.lineTo(-e, 3 * e), t.lineTo(-e, e), t.lineTo(-3 * e, e), t.closePath()
}
},
f_ = Math.sqrt(1 / 3),
l_ = 2 * f_,
h_ = {
draw: function(t, n) {
var e = Math.sqrt(n / l_),
r = e * f_;
t.moveTo(0, -e), t.lineTo(r, 0), t.lineTo(0, e), t.lineTo(-r, 0), t.closePath()
}
},
p_ = Math.sin(r_ / 10) / Math.sin(7 * r_ / 10),
d_ = Math.sin(o_ / 10) * p_,
v_ = -Math.cos(o_ / 10) * p_,
g_ = {
draw: function(t, n) {
var e = Math.sqrt(.8908130915292852 * n),
r = d_ * e,
i = v_ * e;
t.moveTo(0, -e), t.lineTo(r, i);
for (var o = 1; o 0)
for (var r, i = t[0], o = n[0], u = t[e] - i, a = n[e] - o, c = -1; ++c = 0 && (this._t = 1 - this._t, this._line = 1 - this._line)
},
point: function(t, n) {
switch (t = +t, n = +n, this._point) {
case 0:
this._point = 1, this._line ? this._context.lineTo(t, n) : this._context.moveTo(t, n);
break;
case 1:
this._point = 2;
default:
if (this._t = a) return null;
var c = t - i.site[0],
s = n - i.site[1],
f = c * c + s * s;
do {
i = o.cells[r = u], u = null, i.halfedges.forEach(function(e) {
var r = o.edges[e],
a = r.left;
if (a !== i.site && a || (a = r.right)) {
var c = t - a[0],
s = n - a[1],
l = c * c + s * s;
l t ? 1 : n >= t ? 0 : NaN
}, t.deviation = u, t.extent = a, t.histogram = function() {
function t(t) {
var i, o, u = t.length,
a = new Array(u);
for (i = 0; i l;) h.pop(), --d;
var v, g = new Array(d + 1);
for (i = 0; i 0 ? h[i - 1] : s, v.x1 = i = e)
for (r = e; ++o r && (r = e)
} else
for (; ++o = e)
for (r = e; ++o r && (r = e);
return r
}, t.mean = function(t, n) {
var e, r = t.length,
o = r,
u = -1,
a = 0;
if (null == n)
for (; ++u = o.length) return null != e && n.sort(e), null != r ? r(n) : n;
for (var c, s, f, l = -1, h = n.length, p = o[i++], d = se(), v = u(); ++l o.length) return t;
var i, a = u[e - 1];
return null != r && e >= o.length ? i = t.entries() : (i = [], t.each(function(t, r) {
i.push({
key: r,
values: n(t, e)
})
})), null != a ? i.sort(function(t, n) {
return a(t.key, n.key)
}) : i
}
var e, r, i, o = [],
u = [];
return i = {
object: function(n) {
return t(n, 0, fe, le)
},
map: function(n) {
return t(n, 0, he, pe)
},
entries: function(e) {
return n(t(e, 0, he, pe), 0)
},
key: function(t) {
return o.push(t), i
},
sortKeys: function(t) {
return u[o.length - 1] = t, i
},
sortValues: function(t) {
return e = t, i
},
rollup: function(t) {
return r = t, i
}
}
}, t.set = ve, t.map = se, t.keys = function(t) {
var n = [];
for (var e in t) n.push(e);
return n
}, t.values = function(t) {
var n = [];
for (var e in t) n.push(t[e]);
return n
}, t.entries = function(t) {
var n = [];
for (var e in t) n.push({
key: e,
value: t[e]
});
return n
}, t.color = Et, t.rgb = Pt, t.hsl = qt, t.lab = Ft, t.hcl = Xt, t.cubehelix = $t, t.dispatch = N, t.drag = function() {
function n(t) {
t.on("mousedown.drag", e).filter(g).on("touchstart.drag", o).on("touchmove.drag", u).on("touchend.drag touchcancel.drag", a).style("touch-action", "none").style("-webkit-tap-highlight-color", "rgba(0,0,0,0)")
}
function e() {
if (!h && p.apply(this, arguments)) {
var n = c("mouse", d.apply(this, arguments), pt, this, arguments);
n && (ct(t.event.view).on("mousemove.drag", r, !0).on("mouseup.drag", i, !0), _t(t.event.view), vt(), l = !1, s = t.event.clientX, f = t.event.clientY, n("start"))
}
}
function r() {
if (gt(), !l) {
var n = t.event.clientX - s,
e = t.event.clientY - f;
l = n * n + e * e > x
}
_.mouse("drag")
}
function i() {
ct(t.event.view).on("mousemove.drag mouseup.drag", null), yt(t.event.view, l), gt(), _.mouse("end")
}
function o() {
if (p.apply(this, arguments)) {
var n, e, r = t.event.changedTouches,
i = d.apply(this, arguments),
o = r.length;
for (n = 0; n c + p || i s + p || o r.index) {
var d = c - a.x - a.vx,
v = s - a.y - a.vy,
g = d * d + v * v;
g t.r && (t.r = t[n].r)
}
function r() {
if (i) {
var n, e, r = i.length;
for (o = new Array(r), n = 0; n = f)) {
(t.data !== o || t.next) && (0 === i && (i = me(), p += i * i), 0 === c && (c = me(), p += c * c), p 1 ? (null == n ? l.remove(t) : l.set(t, i(n)), o) : l.get(t)
},
find: function(n, e, r) {
var i, o, u, a, c, s = 0,
f = t.length;
for (null == r ? r = 1 / 0 : r *= r, s = 0; s 1 ? (p.on(t, n), o) : p.on(t)
}
}
}, t.forceX = function(t) {
function n(t) {
for (var n, e = 0, u = r.length; e mr(r[0], r[1]) && (r[1] = i[1]), mr(i[0], r[1]) > mr(r[0], r[1]) && (r[0] = i[0])) : o.push(r = i);
for (u = -1 / 0, n = 0, r = o[e = o.length - 1]; n u && (u = a, Gh = i[0], Jh = r[1])
}
return ip = op = null, Gh === 1 / 0 || Qh === 1 / 0 ? [
[NaN, NaN],
[NaN, NaN]
] : [
[Gh, Qh],
[Jh, Kh]
]
}, t.geoCentroid = function(t) {
up = ap = cp = sp = fp = lp = hp = pp = dp = vp = gp = 0, tr(t, Gp);
var n = dp,
e = vp,
r = gp,
i = n * n + e * e + r * r;
return i = .12 && i = -.425 && r = .166 && i = -.214 && r 2 ? t[2] + 90 : 90]) : (t = e(), [t[0], t[1], t[2] - 90])
}, e([0, 0, 90]).scale(159.155)
}, t.geoTransverseMercatorRaw = oo, t.geoRotation = Fr, t.geoStream = tr, t.geoTransform = function(t) {
return {
stream: Pi(t)
}
}, t.cluster = function() {
function t(t) {
var o, u = 0;
t.eachAfter(function(t) {
var e = t.children;
e ? (t.x = function(t) {
return t.reduce(ao, 0) / t.length
}(e), t.y = function(t) {
return 1 + t.reduce(co, 0)
}(e)) : (t.x = o ? u += n(t, o) : 0, t.y = 0, o = t)
});
var a = function(t) {
for (var n; n = t.children;) t = n[0];
return t
}(t),
c = function(t) {
for (var n; n = t.children;) t = n[n.length - 1];
return t
}(t),
s = a.x - n(a, c) / 2,
f = c.x + n(c, a) / 2;
return t.eachAfter(i ? function(n) {
n.x = (n.x - t.x) * e, n.y = (t.y - n.y) * r
} : function(n) {
n.x = (n.x - s) / (f - s) * e, n.y = (1 - (t.y ? n.y / t.y : 1)) * r
})
}
var n = uo,
e = 1,
r = 1,
i = !1;
return t.separation = function(e) {
return arguments.length ? (n = e, t) : n
}, t.size = function(n) {
return arguments.length ? (i = !1, e = +n[0], r = +n[1], t) : i ? null : [e, r]
}, t.nodeSize = function(n) {
return arguments.length ? (i = !0, e = +n[0], r = +n[1], t) : i ? [e, r] : null
}, t
}, t.hierarchy = fo, t.pack = function() {
function t(t) {
return t.x = e / 2, t.y = r / 2, n ? t.eachBefore(zo(n)).eachAfter(Po(i, .5)).eachBefore(Ro(1)) : t.eachBefore(zo(Co)).eachAfter(Po(Eo, 1)).eachAfter(Po(i, t.r / Math.min(e, r))).eachBefore(Ro(Math.min(e, r) / (2 * t.r))), t
}
var n = null,
e = 1,
r = 1,
i = Eo;
return t.radius = function(e) {
return arguments.length ? (n = function(t) {
return null == t ? null : So(t)
}(e), t) : n
}, t.size = function(n) {
return arguments.length ? (e = +n[0], r = +n[1], t) : [e, r]
}, t.padding = function(n) {
return arguments.length ? (i = "function" == typeof n ? n : Ao(+n), t) : i
}, t
}, t.packSiblings = function(t) {
return ko(t), t
}, t.packEnclose = go, t.partition = function() {
function t(t) {
var o = t.height + 1;
return t.x0 = t.y0 = r, t.x1 = n, t.y1 = e / o, t.eachBefore(function(t, n) {
return function(e) {
e.children && qo(e, e.x0, t * (e.depth + 1) / n, e.x1, t * (e.depth + 2) / n);
var i = e.x0,
o = e.y0,
u = e.x1 - r,
a = e.y1 - r;
u 0) throw new Error("cycle");
return o
}
var n = Do,
e = Uo;
return t.id = function(e) {
return arguments.length ? (n = So(e), t) : n
}, t.parentId = function(n) {
return arguments.length ? (e = So(n), t) : e
}, t
}, t.tree = function() {
function t(t) {
var c = function(t) {
for (var n, e, r, i, o, u = new Ho(t, 0), a = [u]; n = a.pop();)
if (r = n._.children)
for (n.children = new Array(o = r.length), i = o - 1; i >= 0; --i) a.push(e = n.children[i] = new Ho(r[i], i)), e.parent = n;
return (u.parent = new Ho(null, 0)).children = [u], u
}(t);
if (c.eachAfter(n), c.parent.m = -c.z, c.eachBefore(e), a) t.eachBefore(r);
else {
var s = t,
f = t,
l = t;
t.eachBefore(function(t) {
t.x f.x && (f = t), t.depth > l.depth && (l = t)
});
var h = s === f ? 1 : i(s, f) / 2,
p = h - s.x,
d = o / (f.x + h + p),
v = u / (l.depth || 1);
t.eachBefore(function(t) {
t.x = (t.x + p) * d, t.y = t.depth * v
})
}
return t
}
function n(t) {
var n = t.children,
e = t.parent.children,
r = t.i ? e[t.i - 1] : null;
if (n) {
(function(t) {
for (var n, e = 0, r = 0, i = t.children, o = i.length; --o >= 0;)(n = i[o]).z += e, n.m += e, e += n.s + (r += n.c)
})(t);
var o = (n[0].z + n[n.length - 1].z) / 2;
r ? (t.z = r.z + i(t._, r._), t.m = t.z - o) : t.z = o
} else r && (t.z = r.z + i(t._, r._));
t.parent.A = function(t, n, e) {
if (n) {
for (var r, o = t, u = t, a = n, c = o.parent.children[0], s = o.m, f = u.m, l = a.m, h = c.m; a = Io(a), o = Fo(o), a && o;) c = Fo(c), (u = Io(u)).a = t, (r = a.z + l - o.z - s + i(a._, o._)) > 0 && (Yo(Bo(a, t, e), t, r), s += r, f += r), l += a.m, s += o.m, h += c.m, f += u.m;
a && !Io(u) && (u.t = a, u.m += l - f), o && !Fo(c) && (c.t = o, c.m += s - h, e = t)
}
return e
}(t, r, t.parent.A || e[0])
}
function e(t) {
t._.x = t.z + t.parent.m, t.m += t.parent.m
}
function r(t) {
t.x *= o, t.y = t.depth * u
}
var i = Oo,
o = 1,
u = 1,
a = null;
return t.separation = function(n) {
return arguments.length ? (i = n, t) : i
}, t.size = function(n) {
return arguments.length ? (a = !1, o = +n[0], u = +n[1], t) : a ? null : [o, u]
}, t.nodeSize = function(n) {
return arguments.length ? (a = !0, o = +n[0], u = +n[1], t) : a ? [o, u] : null
}, t
}, t.treemap = function() {
function t(t) {
return t.x0 = t.y0 = 0, t.x1 = i, t.y1 = o, t.eachBefore(n), u = [0], r && t.eachBefore(Lo), t
}
function n(t) {
var n = u[t.depth],
r = t.x0 + n,
i = t.y0 + n,
o = t.x1 - n,
h = t.y1 - n;
o = n - 1) {
var s = c[t];
return s.x0 = r, s.y0 = i, s.x1 = u, void(s.y1 = a)
}
for (var l = f[t], h = e / 2 + l, p = t + 1, d = n - 1; p >> 1;
f[v] a - i) {
var y = (r * _ + u * g) / e;
o(t, p, g, r, i, y, a), o(p, n, _, y, i, u, a)
} else {
var m = (i * _ + a * g) / e;
o(t, p, g, r, i, u, m), o(p, n, _, r, m, u, a)
}
}
var u, a, c = t.children,
s = c.length,
f = new Array(s + 1);
for (f[0] = a = u = 0; u = 0; --n) s.push(t[r[o[n]][2]]);
for (n = +a; n a != s > a && u 1) && (t -= Math.floor(t));
var n = Math.abs(t - .5);
return jg.h = 360 * t - 100, jg.s = 1.5 - 1.5 * n, jg.l = .8 - .9 * n, jg + ""
}, t.interpolateWarm = Bg, t.interpolateCool = Hg, t.interpolateViridis = Xg, t.interpolateMagma = Vg, t.interpolateInferno = $g, t.interpolatePlasma = Wg, t.scaleSequential = Za, t.create = function(t) {
return ct(A(t).call(document.documentElement))
}, t.creator = A, t.local = st, t.matcher = of , t.mouse = pt, t.namespace = E, t.namespaces = tf, t.clientPoint = ht, t.select = ct, t.selectAll = function(t) {
return "string" == typeof t ? new ut([document.querySelectorAll(t)], [document.documentElement]) : new ut([null == t ? [] : t], cf)
}, t.selection = at, t.selector = z, t.selectorAll = R, t.style = I, t.touch = dt, t.touches = function(t, n) {
null == n && (n = lt().touches);
for (var e = 0, r = n ? n.length : 0, i = new Array(r); e h;
if (c || (c = t = ee()), l e_)
if (d > o_ - e_) c.moveTo(l * Qg(h), l * t_(h)), c.arc(0, 0, l, h, p, !v), f > e_ && (c.moveTo(f * Qg(p), f * t_(p)), c.arc(0, 0, f, p, h, v));
else {
var g, _, y = h,
m = p,
x = h,
b = p,
w = d,
M = d,
T = a.apply(this, arguments) / 2,
N = T > e_ && (i ? +i.apply(this, arguments) : n_(f * f + l * l)),
k = Kg(Zg(l - f) / 2, +r.apply(this, arguments)),
S = k,
E = k;
if (N > e_) {
var A = Qa(N / f * t_(T)),
C = Qa(N / l * t_(T));
(w -= 2 * A) > e_ ? (A *= v ? 1 : -1, x += A, b -= A) : (w = 0, x = b = (h + p) / 2), (M -= 2 * C) > e_ ? (C *= v ? 1 : -1, y += C, m -= C) : (M = 0, y = m = (h + p) / 2)
}
var z = l * Qg(y),
P = l * t_(y),
R = f * Qg(b),
L = f * t_(b);
if (k > e_) {
var q = l * Qg(m),
D = l * t_(m),
U = f * Qg(x),
O = f * t_(x);
if (d e_ ? function(t, n, e, r, i, o, u, a) {
var c = e - t,
s = r - n,
f = u - i,
l = a - o,
h = (f * (n - o) - l * (t - i)) / (l * c - f * s);
return [t + h * c, n + h * s]
}(z, P, U, O, q, D, R, L) : [R, L],
I = z - F[0],
Y = P - F[1],
B = q - F[0],
H = D - F[1],
j = 1 / t_(function(t) {
return t > 1 ? 0 : t e_ ? E > e_ ? (g = rc(U, O, z, P, l, E, v), _ = rc(q, D, R, L, l, E, v), c.moveTo(g.cx + g.x01, g.cy + g.y01), E e_ && w > e_ ? S > e_ ? (g = rc(R, L, q, D, f, -S, v), _ = rc(z, P, U, O, f, -S, v), c.lineTo(g.cx + g.x01, g.cy + g.y01), S 0 && (p += l);
for (null != e ? d.sort(function(t, n) {
return e(v[t], v[n])
}) : null != r && d.sort(function(n, e) {
return r(t[n], t[e])
}), a = 0, s = p ? (_ - h * m) / p : 0; a 0 ? l * s : 0) + m, v[c] = {
data: t[c],
index: a,
value: l,
startAngle: g,
endAngle: f,
padAngle: y
};
return v
}
var n = lc,
e = fc,
r = null,
i = Ga(0),
o = Ga(o_),
u = Ga(0);
return t.value = function(e) {
return arguments.length ? (n = "function" == typeof e ? e : Ga(+e), t) : n
}, t.sortValues = function(n) {
return arguments.length ? (e = n, r = null, t) : e
}, t.sort = function(n) {
return arguments.length ? (r = n, e = null, t) : r
}, t.startAngle = function(n) {
return arguments.length ? (i = "function" == typeof n ? n : Ga(+n), t) : i
}, t.endAngle = function(n) {
return arguments.length ? (o = "function" == typeof n ? n : Ga(+n), t) : o
}, t.padAngle = function(n) {
return arguments.length ? (u = "function" == typeof n ? n : Ga(+n), t) : u
}, t
}, t.areaRadial = gc, t.radialArea = gc, t.lineRadial = vc, t.radialLine = vc, t.pointRadial = _c, t.linkHorizontal = function() {
return xc(bc)
}, t.linkVertical = function() {
return xc(wc)
}, t.linkRadial = function() {
var t = xc(Mc);
return t.angle = t.x, delete t.x, t.radius = t.y, delete t.y, t
}, t.symbol = function() {
function t() {
var t;
if (r || (r = t = ee()), n.apply(this, arguments).draw(r, +e.apply(this, arguments)), t) return r = null, t + "" || null
}
var n = Ga(c_),
e = Ga(64),
r = null;
return t.type = function(e) {
return arguments.length ? (n = "function" == typeof e ? e : Ga(e), t) : n
}, t.size = function(n) {
return arguments.length ? (e = "function" == typeof n ? n : Ga(+n), t) : e
}, t.context = function(n) {
return arguments.length ? (r = null == n ? null : n, t) : r
}, t
}, t.symbols = T_, t.symbolCircle = c_, t.symbolCross = s_, t.symbolDiamond = h_, t.symbolSquare = __, t.symbolStar = g_, t.symbolTriangle = m_, t.symbolWye = M_, t.curveBasisClosed = function(t) {
return new Sc(t)
}, t.curveBasisOpen = function(t) {
return new Ec(t)
}, t.curveBasis = function(t) {
return new kc(t)
}, t.curveBundle = N_, t.curveCardinalClosed = S_, t.curveCardinalOpen = E_, t.curveCardinal = k_, t.curveCatmullRomClosed = C_, t.curveCatmullRomOpen = z_, t.curveCatmullRom = A_, t.curveLinearClosed = function(t) {
return new Oc(t)
}, t.curveLinear = oc, t.curveMonotoneX = function(t) {
return new Hc(t)
}, t.curveMonotoneY = function(t) {
return new jc(t)
}, t.curveNatural = function(t) {
return new Vc(t)
}, t.curveStep = function(t) {
return new Wc(t, .5)
}, t.curveStepAfter = function(t) {
return new Wc(t, 1)
}, t.curveStepBefore = function(t) {
return new Wc(t, 0)
}, t.stack = function() {
function t(t) {
var o, u, a = n.apply(this, arguments),
c = t.length,
s = a.length,
f = new Array(s);
for (o = 0; o 0) {
for (var e, r, i, o = 0, u = t[0].length; o 1)
for (var e, r, i, o, u, a, c = 0, s = t[n[0]].length; c = 0 ? (r[0] = o, r[1] = o += i) : i 0) {
for (var e, r = 0, i = t[n[0]], o = i.length; r 0 && (r = (e = t[n[0]]).length) > 0) {
for (var e, r, i, o = 0, u = 1; u xl && e.name === n) return new qn([
[t]
], Jl, n, +r)
}
return null
}, t.interrupt = Pn, t.voronoi = function() {
function t(t) {
return new Ns(t.map(function(r, i) {
var o = [Math.round(n(r, i, t) / F_) * F_, Math.round(e(r, i, t) / F_) * F_];
return o.index = i, o.data = r, o
}), r)
}
var n = ns,
e = es,
r = null;
return t.polygons = function(n) {
return t(n).polygons()
}, t.links = function(n) {
return t(n).links()
}, t.triangles = function(n) {
return t(n).triangles()
}, t.x = function(e) {
return arguments.length ? (n = "function" == typeof e ? e : ts(+e), t) : n
}, t.y = function(n) {
return arguments.length ? (e = "function" == typeof n ? n : ts(+n), t) : e
}, t.extent = function(n) {
return arguments.length ? (r = null == n ? null : [
[+n[0][0], +n[0][1]],
[+n[1][0], +n[1][1]]
], t) : r && [
[r[0][0], r[0][1]],
[r[1][0], r[1][1]]
]
}, t.size = function(n) {
return arguments.length ? (r = null == n ? null : [
[0, 0],
[+n[0], +n[1]]
], t) : r && [r[1][0] - r[0][0], r[1][1] - r[0][1]]
}, t
}, t.zoom = function() {
function n(t) {
t.property("__zoom", Rs).on("wheel.zoom", c).on("mousedown.zoom", s).on("dblclick.zoom", f).filter(x).on("touchstart.zoom", l).on("touchmove.zoom", h).on("touchend.zoom touchcancel.zoom", p).style("touch-action", "none").style("-webkit-tap-highlight-color", "rgba(0,0,0,0)")
}
function e(t, n) {
return (n = Math.max(b[0], Math.min(b[1], n))) === t.k ? t : new Ss(n, t.x, t.y)
}
function r(t, n, e) {
var r = n[0] - e[0] * t.k,
i = n[1] - e[1] * t.k;
return r === t.x && i === t.y ? t : new Ss(t.k, r, i)
}
function i(t) {
return [(+t[0][0] + +t[1][0]) / 2, (+t[0][1] + +t[1][1]) / 2]
}
function o(t, n, e) {
t.on("start.zoom", function() {
u(this, arguments).start()
}).on("interrupt.zoom end.zoom", function() {
u(this, arguments).end()
}).tween("zoom", function() {
var t = arguments,
r = u(this, t),
o = _.apply(this, t),
a = e || i(o),
c = Math.max(o[1][0] - o[0][0], o[1][1] - o[0][1]),
s = this.__zoom,
f = "function" == typeof n ? n.apply(this, t) : n,
l = T(s.invert(a).concat(c / s.k), f.invert(a).concat(c / f.k));
return function(t) {
if (1 === t) t = f;
else {
var n = l(t),
e = c / n[2];
t = new Ss(e, a[0] - n[0] * e, a[1] - n[1] * e)
}
r.zoom(null, t)
}
})
}
function u(t, n) {
for (var e, r = 0, i = k.length; r C
}
n.zoom("mouse", y(r(n.that.__zoom, n.mouse[0] = pt(n.that), n.mouse[1]), n.extent, w))
}, !0).on("mouseup.zoom", function() {
e.on("mousemove.zoom mouseup.zoom", null), yt(t.event.view, n.moved), Cs(), n.end()
}, !0),
i = pt(this),
o = t.event.clientX,
a = t.event.clientY;
_t(t.event.view), As(), n.mouse = [i, this.__zoom.invert(i)], Pn(this), n.start()
}
}
function f() {
if (g.apply(this, arguments)) {
var i = this.__zoom,
u = pt(this),
a = i.invert(u),
c = i.k * (t.event.shiftKey ? .5 : 2),
s = y(r(e(i, c), u, a), _.apply(this, arguments), w);
Cs(), M > 0 ? ct(this).transition().duration(M).call(o, s, u) : ct(this).call(n.transform, s)
}
}
function l() {
if (g.apply(this, arguments)) {
var n, e, r, i, o = u(this, arguments),
a = t.event.changedTouches,
c = a.length;
for (As(), e = 0; e =', ['get', 'symbolrank'], 11], 10, ['>=', ['get', 'symbolrank'], 12], 11, ['>=', ['get', 'symbolrank'], 13], 12, ['>=', ['get', 'symbolrank'], 15], 13, ['>=', ['get', 'symbolrank'], 11], 14, ['>=', ['get', 'symbolrank'], 13]]
],
layout: {
'text-line-height': 1.1,
'text-size': ['interpolate', ['cubic-bezier', 0.2, 0, 0.9, 1],
['zoom'], 3, ['step', ['get', 'symbolrank'], 12, 9, 11, 10, 10.5, 12, 9.5, 14, 8.5, 16, 6.5, 17, 4], 13, ['step', ['get', 'symbolrank'], 23, 9, 21, 10, 19, 11, 17, 12, 16, 13, 15, 15, 13]
],
'icon-image': '',
'text-font': ['DIN Pro Regular', 'Arial Unicode MS Regular'],
'text-offset': ['step', ['zoom'],
['literal', [0, 0]], 8, ['literal', [0, 0]]
],
'text-anchor': ['step', ['zoom'], 'center', 8, 'center'],
'text-field': ['coalesce', ['get', 'name_en'],
['get', 'name']
],
'text-max-width': 7
},
paint: {
'text-color': 'hsl(0, 6%, 45%)',
'text-halo-color': 'hsl(175, 5%, 100%)',
'text-halo-width': 1,
'icon-opacity': ['step', ['zoom'], 1, 8, 0],
'text-halo-blur': 1
}
}, {
id: 'settlement-major-label',
type: 'symbol',
metadata: {
'mapbox:featureComponent': 'place-labels',
'mapbox:group': 'Place labels, place-labels'
},
source: 'composite',
'source-layer': 'place_label',
maxzoom: 15,
filter: ['all', ['=', ['get', 'symbolrank'], 11], 14, ['>=', ['get', 'symbolrank'], 13]]
],
layout: {
'text-line-height': 1.1,
'text-size': ['interpolate', ['cubic-bezier', 0.2, 0, 0.9, 1],
['zoom'], 8, ['step', ['get', 'symbolrank'], 18, 9, 17, 10, 15], 15, ['step', ['get', 'symbolrank'], 23, 9, 22, 10, 20, 11, 18, 12, 16, 13, 15, 15, 13]
],
'icon-image': '',
'text-font': ['DIN Pro Medium', 'Arial Unicode MS Regular'],
'text-offset': ['step', ['zoom'],
['literal', [0, 0]], 8, ['literal', [0, 0]]
],
'text-anchor': ['step', ['zoom'], 'center', 8, 'center'],
'text-field': ['coalesce', ['get', 'name_en'],
['get', 'name']
],
'text-max-width': 7
},
paint: {
'text-color': 'hsl(0, 6%, 45%)',
'text-halo-color': 'hsl(175, 5%, 100%)',
'text-halo-width': 1,
'icon-opacity': ['step', ['zoom'], 1, 10, 0],
'text-halo-blur': 1
}
}, {
id: 'state-label',
type: 'symbol',
metadata: {
'mapbox:featureComponent': 'place-labels',
'mapbox:group': 'Place labels, place-labels'
},
source: 'composite',
'source-layer': 'place_label',
minzoom: 3,
maxzoom: 9,
filter: ['match', ['get', 'class'], 'state', ['==', ['get', 'iso_3166_1'], 'US'], 'disputed_state', ['all', ['==', ['get', 'disputed'], 'true'],
['match', ['get', 'worldview'],
['all', 'US'], true, false
]
], false],
layout: {
'text-size': ['interpolate', ['cubic-bezier', 0.85, 0.7, 0.65, 1],
['zoom'], 4, ['step', ['get', 'symbolrank'], 10, 6, 9.5, 7, 9], 9, ['step', ['get', 'symbolrank'], 21, 6, 16, 7, 13]
],
'text-transform': 'uppercase',
'text-font': ['DIN Pro Bold', 'Arial Unicode MS Bold'],
'text-field': ['step', ['zoom'],
['step', ['get', 'symbolrank'],
['coalesce', ['get', 'name_en'],
['get', 'name']
], 5, ['coalesce', ['get', 'abbr'],
['get', 'name_en'],
['get', 'name']
]
], 5, ['coalesce', ['get', 'name_en'],
['get', 'name']
]
],
'text-letter-spacing': 0.15,
'text-max-width': 6
},
paint: {
'text-color': 'hsl(0, 6%, 45%)',
'text-halo-color': 'hsl(175, 5%, 100%)',
'text-halo-width': 1
} // {
// id: 'country-label',
// type: 'symbol',
// metadata: {
// 'mapbox:featureComponent': 'place-labels',
// 'mapbox:group': 'Place labels, place-labels'
// },
// source: 'composite',
// 'source-layer': 'place_label',
// minzoom: 1,
// maxzoom: 10,
// filter: [
// 'match',
// ['get', 'class'],
// 'country',
// ['match', ['get', 'worldview'], ['all', 'US'], true, false],
// 'disputed_country',
// [
// 'all',
// ['==', ['get', 'disputed'], 'true'],
// ['match', ['get', 'worldview'], ['all', 'US'], true, false]
// ],
// false
// ],
// layout: {
// 'text-line-height': 1.1,
// 'text-size': [
// 'interpolate',
// ['cubic-bezier', 0.2, 0, 0.7, 1],
// ['zoom'],
// 1,
// ['step', ['get', 'symbolrank'], 11, 4, 9, 5, 8],
// 9,
// ['step', ['get', 'symbolrank'], 22, 4, 19, 5, 17]
// ],
// 'icon-image': '',
// 'text-font': ['DIN Pro Medium', 'Arial Unicode MS Regular'],
// 'text-offset': ['literal', [0, 0]],
// 'text-field': ['coalesce', ['get', 'name_en'], ['get', 'name']],
// 'text-max-width': 6
// },
// paint: {
// 'icon-opacity': [
// 'step',
// ['zoom'],
// ['case', ['has', 'text_anchor'], 1, 0],
// 7,
// 0
// ],
// 'text-color': 'hsl(0, 6%, 45%)',
// 'text-halo-color': [
// 'interpolate',
// ['linear'],
// ['zoom'],
// 2,
// 'hsla(175, 5%, 100%, 0.75)',
// 3,
// 'hsl(175, 5%, 100%)'
// ],
// 'text-halo-width': 1.25
// }
// }
}];
var style = {
version: 8,
name: 'Basic',
metadata: {
'mapbox:type': 'default',
'mapbox:origin': 'basic-v1',
'mapbox:sdk-support': {
android: '9.3.0',
ios: '5.10.0',
js: '1.10.0'
},
'mapbox:autocomposite': true,
'mapbox:groups': {
'Land & water, land': {
name: 'Land & water, land',
collapsed: false
},
'Land & water, water': {
name: 'Land & water, water',
collapsed: false
},
'Land & water, built': {
name: 'Land & water, built',
collapsed: false
},
'Transit, built': {
name: 'Transit, built',
collapsed: false
},
'Buildings, built': {
name: 'Buildings, built',
collapsed: false
},
'Walking, cycling, etc., tunnels': {
name: 'Walking, cycling, etc., tunnels',
collapsed: false
},
'Road network, tunnels': {
name: 'Road network, tunnels',
collapsed: false
},
'Walking, cycling, etc., surface': {
name: 'Walking, cycling, etc., surface',
collapsed: false
},
'Road network, surface': {
name: 'Road network, surface',
collapsed: false
},
'Walking, cycling, etc., barriers-bridges': {
name: 'Walking, cycling, etc., barriers-bridges',
collapsed: false
},
'Road network, bridges': {
name: 'Road network, bridges',
collapsed: false
},
'Administrative boundaries, admin': {
name: 'Administrative boundaries, admin',
collapsed: false
},
'Road network, road-labels': {
name: 'Road network, road-labels',
collapsed: false
},
'Walking, cycling, etc., walking-cycling-labels': {
name: 'Walking, cycling, etc., walking-cycling-labels',
collapsed: false
},
'Natural features, natural-labels': {
name: 'Natural features, natural-labels',
collapsed: false
},
'Point of interest labels, poi-labels': {
name: 'Point of interest labels, poi-labels',
collapsed: false
},
'Transit, transit-labels': {
name: 'Transit, transit-labels',
collapsed: false
},
'Place labels, place-labels': {
name: 'Place labels, place-labels',
collapsed: false
}
},
'mapbox:decompiler': {
id: 'basic-spring-v1',
componentVersion: '7.1.0',
strata: [{
id: 'basic-v1',
order: [
['land-and-water', 'land'],
['land-and-water', 'water'],
['land-and-water', 'built'],
['transit', 'built'],
['buildings', 'built'],
['road-network', 'tunnels-case'],
['walking-cycling', 'tunnels'],
['road-network', 'tunnels'],
['transit', 'ferries'],
['walking-cycling', 'surface'],
['road-network', 'surface'],
['transit', 'surface'],
['road-network', 'surface-icons'],
['walking-cycling', 'barriers-bridges'],
['road-network', 'bridges'],
['transit', 'bridges'],
['road-network', 'traffic-and-closures'],
['buildings', 'extruded'],
['transit', 'elevated'],
['admin-boundaries', 'admin'],
['buildings', 'building-labels'],
['road-network', 'road-labels'],
['walking-cycling', 'walking-cycling-labels'],
['transit', 'ferry-aerialway-labels'],
['natural-features', 'natural-labels'],
['point-of-interest-labels', 'poi-labels'],
['transit', 'transit-labels'],
['place-labels', 'place-labels']
]
}],
components: {
'road-network': '7.1.0',
'natural-features': '7.1.0',
'place-labels': '7.1.0',
'admin-boundaries': '7.1.0',
'point-of-interest-labels': '7.1.0',
'walking-cycling': '7.1.0',
transit: '7.1.0',
'land-and-water': '7.1.0',
buildings: '7.1.0'
},
propConfig: {
'road-network': {
'color-base': 'hsl(175, 0%, 100%)',
'color-road': 'hsl(0, 13%, 94%)',
roadNetwork: 'Simple'
},
'natural-features': {
'color-base': 'hsl(175, 0%, 100%)',
'color-water': 'hsl(177, 63%, 94%)',
'color-poi': 'hsl(20, 2%, 55%)'
},
'place-labels': {
'color-base': 'hsl(175, 0%, 100%)',
'color-place-label': 'hsl(0, 6%, 66%)',
settlementSubdivisionsDensity: 3,
settlementLabelStyle: 'Text only'
},
'admin-boundaries': {
'color-base': 'hsl(175, 0%, 100%)',
'color-place-label': 'hsl(0, 6%, 66%)'
},
'point-of-interest-labels': {
'color-base': 'hsl(175, 0%, 100%)',
'color-greenspace': 'hsl(127, 10%, 85%)',
'color-greenspace-label': 'hsl(128, 12%, 47%)',
'color-poi': 'hsl(20, 2%, 55%)',
density: 2
},
'walking-cycling': {
'color-base': 'hsl(175, 0%, 100%)',
'color-road': 'hsl(0, 13%, 94%)',
'color-greenspace': 'hsl(127, 10%, 85%)',
'color-greenspace-label': 'hsl(128, 12%, 47%)',
walkingCyclingPisteBackground: false,
golfHoleLabelLine: false,
pedestrianPolygonFeatures: false
},
transit: {
'color-airport': 'hsl(345, 3%, 70%)',
'color-transit': 'hsl(40, 3%, 70%)',
aerialways: false,
'color-road': 'hsl(0, 13%, 94%)',
'color-water': 'hsl(177, 63%, 94%)',
transitLabels: false,
railways: false,
ferries: false,
'color-base': 'hsl(175, 0%, 100%)'
},
'land-and-water': {
'color-airport': 'hsl(345, 3%, 70%)',
landcover: false,
'color-greenspace': 'hsl(127, 10%, 85%)',
'color-water': 'hsl(177, 63%, 94%)',
transitionLandOnZoom: false,
waterStyle: 'Simple',
'color-base': 'hsl(175, 0%, 100%)'
},
buildings: {
'color-base': 'hsl(175, 0%, 100%)',
houseNumbers: false
}
}
}
},
zoom: 12,
center: [0, 0],
sources: {
'mapbox://mapbox.mapbox-traffic-v1': {
url: 'mapbox://mapbox.mapbox-traffic-v1',
type: 'vector'
},
'mapbox://mapbox.mapbox-incidents-v1': {
url: 'mapbox://mapbox.mapbox-incidents-v1',
type: 'vector'
},
composite: {
url: 'mapbox://mapbox.mapbox-streets-v8,mapbox.mapbox-terrain-v2',
type: 'vector'
},
covidPoints: {
tiles: ['https://nodeassets.nbcnews.com/mapbox-tiles-prod/covid-death-points3/{z}/{x}/{y}.pbf'],
type: 'vector',
format: 'pbf',
bounds: [-159.6, 13.4, 144.9, 71.3]
},
covidCounties: {
tiles: ['https://nodeassets.nbcnews.com/mapbox-tiles-prod/covid-counties3/{z}/{x}/{y}.pbf'],
type: 'vector',
format: 'pbf',
bounds: [-159.6, 13.4, 144.9, 71.3] // zipcodes: {
// tiles: [
// 'https://nodeassets.nbcnews.com/mapbox-tiles-prod/zipcodes/{z}/{x}/{y}.pbf'
// ],
// type: 'vector',
// format: 'pbf',
// bounds: [-159.6, 13.4, 144.9, 71.3]
// }
}
},
sprite: 'mapbox://sprites/nbcdatateam/ck6sbg8b137161io1cfz8q0qa/ck2u8j60r58fu0sgyxrigm3cu',
glyphs: 'mapbox://fonts/nbcdatateam/{fontstack}/{range}.pbf',
layers: [].concat(openStreetLayers, [{
id: 'covid-points',
type: 'circle',
source: 'covidPoints',
'source-layer': 'coviddeathpoints',
paint: {
'circle-opacity': 1,
'circle-radius': ['interpolate', ['linear'],
['zoom'], 5, 0.5, 9, 1, 10, 1.6
],
'circle-color': ['to-color', ['feature-state', 'color'], '#FA3A3A']
}
}, {
id: 'covid-counties-fill',
type: 'fill',
source: 'covidCounties',
'source-layer': 'countiescovid',
paint: {
'fill-color': 'black',
'fill-opacity': 0 // 'fill-outline-color': 'white'
// 'line-width': 3,
// 'line-opacity': ['number', ['feature-state', 'opacity'], 0]
}
}, {
id: 'covid-counties',
type: 'line',
source: 'covidCounties',
'source-layer': 'countiescovid',
paint: {
'line-color': 'grey',
// 'line-opacity': 0.4
// 'fill-outline-color': 'white'
'line-width': 1,
'line-opacity': ['to-number', ['feature-state', 'opacity'], 0]
}
}], labels),
created: '2021-01-19T16:03:02.856Z',
modified: '2021-01-19T16:03:12.179Z',
id: 'ckk46s3x60lpm17p4jr850sux',
owner: 'nbcdatateam',
visibility: 'private',
draft: false
};
(function() {
/* from https://davidwalsh.name/javascript-debounce-function */
function debounce(func, wait, immediate) {
var timeout;
return function() {
var context = this,
args = arguments;
var later = function later() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
}
window.graphicDoneLoading = function graphicDoneLoading() {
if (typeof Android === 'undefined') return;
Android.loadingFinished();
};
document.addEventListener('DOMContentLoaded', function() {
var pymChild = pym.Child({
polling: 500
});
var map;
var getExpressionToMuteDotsOutsideCounty = function getExpressionToMuteDotsOutsideCounty(fips) {
return Array.isArray(fips) ? ['case'].concat(_toConsumableArray(fips.flatMap(function(oneFips) {
return [
['==', ['get', 'fips'], oneFips], '#FA3A3A'
];
})), ['grey']) : ['match', ['get', 'fips'], fips, '#FA3A3A', 'grey'];
};
var resetDots = function resetDots() {
return map.setPaintProperty('covid-points', 'circle-color', '#FA3A3A');
};
var config = {
style: 'mapbox://styles/mapbox/streets-v11',
accessToken: 'pk.eyJ1IjoibmJjZGF0YXRlYW0iLCJhIjoiY2pzMHVhbXlqMHJkODQ0bWdzbnpqZWZheCJ9.KXxevZdcUQLI0GnNWbea6w',
showMarkers: false,
markerColor: '#555555',
theme: 'dark',
use3dTerrain: false,
title: 'The Title Text of this Story',
subtitle: 'A descriptive and interesting subtitle to draw in the reader',
byline: 'By a Digital Storyteller',
footer: 'Source: source citations, etc.',
chapters: [{
id: 'intro',
alignment: 'center',
hidden: false,
title: '',
description: "Each dot on the map represents a person who died from Covid-19.",
rotateAnimation: false,
onChapterEnter: [],
onChapterExit: []
}, {
id: 'slug-style-id',
alignment: 'left',
hidden: false,
title: '
Kirkland, King County Wash.
',
description: "The first reported U.S. death from Covid-19 was a man in his 50s in Washington state last Feb. 29. That same day, the Centers for Disease Control and Prevention reported its first outbreak, at a long-term care facility in that state.",
location: [
[-122.58152386549379, 47.380619167542136],
[-121.76891885035707, 47.9537299492267]
],
options: {
zoom: 10.045419985439006,
bearing: -55.65000000000005,
pitch: 60
},
mapAnimation: 'fitBounds',
rotateAnimation: false,
callback: function callback() {
map.setPaintProperty('settlement-minor-label', 'text-opacity', ['case', ['==', ['get', 'name'], 'Kirkland'], 1, ['==', ['get', 'name'], 'Cold Spring'], 1, 0]);
map.setFeatureState({
id: 11001,
sourceLayer: 'countiescovid',
source: 'covidCounties'
}, {
opacity: 0.4
});
window.setExpression = function() {
return map.setPaintProperty('covid-points', 'circle-color', getExpressionToMuteDotsOutsideCounty('53033'));
};
map.on('moveend', setExpression);
},
exitcallback: function exitcallback() {
map.off('moveend', setExpression);
resetDots();
map.setPaintProperty('settlement-minor-label', 'text-opacity', 1);
},
onChapterEnter: [],
onChapterExit: []
}, {
id: 'other-identifier',
alignment: 'left',
hidden: false,
title: '
Santa Clara County, Calif.
',
description: "It was later revealed that the country\u2019s first actual Covid-19 death was in Santa Clara County, Calif., weeks earlier.",
location: [
[-122.51488613475054, 36.830065978088626],
[-121.37996631989401, 37.72616163434586]
],
options: {
pitch: 60,
bearing: -43.2
},
mapAnimation: 'fitBounds',
rotateAnimation: false,
callback: function callback() {
map.setPaintProperty('settlement-major-label', 'text-opacity', ['match', ['get', 'name'], 'Santa Clara', 1, 0]);
window.setExpression = function() {
map.setPaintProperty('covid-points', 'circle-color', ['match', ['get', 'fips'], '06085', '#FA3A3A', 'darkgrey']);
map.setLayoutProperty('settlement-major-label', 'text-allow-overlap', true);
};
map.on('moveend', setExpression);
},
exitcallback: function exitcallback() {
map.off('moveend', setExpression);
map.setLayoutProperty('settlement-major-label', 'text-allow-overlap', false);
resetDots();
map.setPaintProperty('settlement-major-label', 'text-opacity', 1);
},
onChapterEnter: [],
onChapterExit: []
}, {
id: 'New York',
alignment: 'left',
hidden: false,
title: '
New York City
',
description: "The first reported case of Covid-19 in New York state was on March 1. The first two Covid deaths followed two weeks later. By the end of the month, New York City had surpassed 1,000 deaths. The death toll in the city is now nearly 29,000.",
location: [
[-74.14770376239926, 40.56502170756556],
[-73.75926522818276, 40.79514108863091]
],
options: {
bearing: -12.075678827680122,
pitch: 59.69082638889295
},
mapAnimation: 'fitBounds',
rotateAnimation: false,
callback: function callback() {
window.setExpression = function() {
return map.setPaintProperty('covid-points', 'circle-color', getExpressionToMuteDotsOutsideCounty(['36081', '36005', '36013', '36061', '36047', '36085']));
};
map.on('moveend', setExpression);
},
exitcallback: function exitcallback() {
resetDots();
map.off('moveend', setExpression);
},
onChapterEnter: [],
onChapterExit: []
}, {
id: 'Chicago',
alignment: 'left',
hidden: false,
title: '
',
description: "In Sioux Falls, a Smithfield Foods meat processing plant became a Covid-19 hot spot, and was linked to nearly 900 cases, a figure that was later revised to more than 1,000. Four people eventually died in the outbreak. Minnehaha County, where the city is, would eventually see more than 320 Covid-19-related deaths.",
location: [
[-96.92001244939769, 43.424350518723685],
[-96.58899473396492, 43.61186647712]
],
options: {
bearing: -3.854465260900042,
pitch: 59.69082638889295
},
mapAnimation: 'fitBounds',
rotateAnimation: false,
callback: '',
onChapterEnter: [],
onChapterExit: []
}, {
id: 'Cold Spring',
alignment: 'left',
hidden: false,
title: '
Cold Spring, Minn.
',
description: "The case highlighted how meatpacking plants became virus hot spots in their communities, such as a Pilgrim\u2019s Pride plant in Cold Spring, Minn., which was linked to a 454 percent jump in cases in Stearns County. The county would eventually record nearly 200 deaths from the virus.",
location: [
[-94.51513787531658, 45.40093316743145],
[-94.35776846364435, 45.514553200672765]
],
options: {
bearing: 51.7062227179332,
pitch: 59.69082638889295
},
mapAnimation: 'fitBounds',
rotateAnimation: false,
callback: '',
halfwaycallback: function halfwaycallback() {
map.setPaintProperty('covid-points', 'circle-color', getExpressionToMuteDotsOutsideCounty('27145'));
map.fitBounds([
[-94.46170616896077, 45.41006828096292],
[-94.01315685355553, 45.683478966822435]
], {
pitch: 54.009999999999984,
bearing: -15.569999999999897,
duration: 800
});
},
exitcallback: function exitcallback() {
resetDots();
},
onChapterEnter: [],
onChapterExit: []
}, {
id: 'Texas',
alignment: 'left',
hidden: false,
title: '
Houston
',
description: "Last summer, when coronavirus cases surged in June, Houston\u2019s Latino community was hit especially hard. Hospitalizations in Harris County were found to be mostly of Hispanic residents, and the county would eventually record more than 4,700 deaths from the virus.",
location: [
[-95.95049972435363, 29.379325349613467],
[-94.77791466774222, 30.284384470948453]
],
options: {
bearing: 19.599932764130592,
pitch: 59.69082638889295
},
mapAnimation: 'fitBounds',
rotateAnimation: false,
callback: function callback() {
window.setExpression = function() {
return map.setPaintProperty('covid-points', 'circle-color', getExpressionToMuteDotsOutsideCounty('48201'));
};
map.on('moveend', setExpression);
},
exitcallback: function exitcallback() {
map.off('moveend', setExpression);
resetDots();
},
onChapterEnter: [],
onChapterExit: []
}, {
id: 'miami',
alignment: 'left',
hidden: false,
title: '
Miami
',
description: "On July 30, Florida recorded 253 deaths in one day, the state\u2019s highest in one day, after breaking two records days before. Many of the deaths came from Miami-Dade County, which would eventually lose more than 5,200 lives.",
location: [
[-80.7966522852921, 25.338280631821377],
[-79.8519438554419, 26.003428221339632]
],
optiosn: {
pitch: 44.01,
bearing: -37.82
},
mapAnimation: 'fitBounds',
rotateAnimation: false,
callback: function callback() {
window.setExpression = function() {
return map.setPaintProperty('covid-points', 'circle-color', getExpressionToMuteDotsOutsideCounty('12086'));
};
map.on('moveend', setExpression); // document
// .querySelector('.mapboxgl-control-container')
// .setAttribute('style', 'opacity: 0')
map.dragPan.disable();
map.dragRotate.disable();
map.touchZoomRotate.disableRotation();
map.doubleClickZoom.disable();
map.scrollZoom.disable();
map.touchPitch.disable();
document.querySelector('#story').setAttribute('style', '');
},
exitcallback: function exitcallback() {
map.off('moveend', setExpression);
resetDots();
window.setExpression = function() {
if (!isMobile) map.dragPan.enable();
map.dragRotate.enable();
map.doubleClickZoom.enable();
map.setMaxZoom(10);
};
map.on('moveend', setExpression);
},
onChapterEnter: [],
onChapterExit: []
}, {
id: 'last',
alignment: 'left',
hidden: true,
location: [
[-127.08785704613271, 16.027775562318794],
[-65.23996815656886, 54.08527271051253]
],
options: {
minzoom: 5,
pitch: 0,
bearing: 0
},
mapAnimation: 'fitBounds',
rotateAnimation: false,
callback: function callback() {
map.setPaintProperty('covid-points', 'circle-color', ['to-color', ['feature-state', 'color'], '#FA3A3A']);
map.dragPan.enable();
document.querySelector('.mapboxgl-control-container').setAttribute('style', 'opacity: 1');
document.querySelector('.suggestions').setAttribute('style', 'display: block!important;');
var suggestions = d3.select('.suggestions div.suggestion-text-container').node();
if (!suggestions) {
d3.select('.suggestions').append('div').classed('suggestion-text-container', true).html("
".concat(isMobile ? 'Tap the map to see county details.' : 'Hover over the map to see county details.', " ").concat(isMobile ? 'Use two fingers to pan map.' : '', "
"));
}
document.querySelector('#story').setAttribute('style', 'pointer-events: none;');
document.querySelector('#graphic').setAttribute('style', 'z-index: 0;');
},
exitcallback: function exitcallback() {
map.off('moveend', setExpression);
},
onChapterEnter: [],
onChapterExit: []
}] // change everythign to fit bounds
};
mapboxgl.accessToken = config.accessToken;
var layerTypes = {
fill: ['fill-opacity'],
line: ['line-opacity'],
circle: ['circle-opacity', 'circle-stroke-opacity'],
symbol: ['icon-opacity', 'text-opacity'],
raster: ['raster-opacity'],
'fill-extrusion': ['fill-extrusion-opacity'],
heatmap: ['heatmap-opacity']
};
var alignments = {
left: 'lefty',
center: 'centered',
right: 'righty',
full: 'fully'
};
function getLayerPaintType(layer) {
var layerType = map.getLayer(layer).type;
return layerTypes[layerType];
}
window.mbmap = map;
function setLayerOpacity(layer) {
var paintProps = getLayerPaintType(layer.layer);
paintProps.forEach(function(prop) {
var options = {};
if (layer.duration) {
var transitionProp = prop + '-transition';
options = {
duration: layer.duration
};
map.setPaintProperty(layer.layer, transitionProp, options);
}
map.setPaintProperty(layer.layer, prop, layer.opacity, options);
});
}
var map = new mapboxgl.Map({
container: 'mapb',
style: style,
bounds: [
[-66.66579630109005, 53.30383812069897],
[-124.81573737919335, 5.875291360183255]
],
maxzoom: 10
}); // Create a popup, but don't add it to the map yet.
var popup = new mapboxgl.Popup({
closeButton: false,
closeOnClick: false,
anchor: 'top'
});
var lastFeat = 0;
var format = d3.format(',');
var formatOnedecimal = d3.format(',.1f');
map.on('mousemove', 'covid-counties-fill', function(e) {
// Change the cursor style as a UI indicator.
map.getCanvas().style.cursor = 'pointer';
var feat = e.features[0];
var properties = feat.properties;
map.removeFeatureState({
source: 'covidPoints',
sourceLayer: 'coviddeathpoints',
id: lastFeat
});
map.removeFeatureState({
id: lastFeat,
source: 'covidCounties',
sourceLayer: 'countiescovid'
});
lastFeat = feat.id;
map.setFeatureState({
source: 'covidPoints',
sourceLayer: 'coviddeathpoints',
id: feat.id
}, {
color: 'black' //,size: 2 }
}); // choose dot color for selection
map.setFeatureState({
id: feat.id,
source: 'covidCounties',
sourceLayer: 'countiescovid'
}, {
opacity: 1
}); // Populate the popup and set its coordinates
// based on the feature found.
popup.setLngLat(e.lngLat).setHTML("\n