You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by mc...@apache.org on 2014/12/10 17:32:16 UTC

[1/3] incubator-nifi git commit: NIFI-27: - Latest version of D3.

Repository: incubator-nifi
Updated Branches:
  refs/heads/nifi-27 eb880757b -> fef807136


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/fef80713/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-status-history.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-status-history.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-status-history.js
index f570082..178207e 100644
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-status-history.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-status-history.js
@@ -60,13 +60,6 @@ nf.StatusHistory = (function () {
     };
 
     /**
-     * version 3.4+ of D3 provides a mechanism for specifying
-     * a number of custom formatters. this achieves similar function
-     * until we're able to upgrade.
-     */
-    var timeFormats = null;
-
-    /**
      * The time offset of the server.
      */
     var serverTimeOffset = null;
@@ -373,26 +366,21 @@ nf.StatusHistory = (function () {
                 visible: instances[instance.id] === true
             });
         });
-
+        
         // --------------------------
         // custom time axis formatter
         // --------------------------
 
-        // create the formatting function
-        var customTimeFormat = function (d) {
-            var formatter;
-
-            // identify the most appropriate formatter for this date
-            $.each(timeFormats, function (_, timeFormat) {
-                if (timeFormat[1](d)) {
-                    formatter = timeFormat;
-                    return false;
-                }
-            });
-
-            // return the formatter date
-            return formatter[0](d);
-        };
+        var customTimeFormat = d3.time.format.multi([
+            [':%S.%L', function (d) { return d.getMilliseconds(); }], 
+            [':%S', function (d) { return d.getSeconds(); }],
+            ['%H:%M', function (d) { return d.getMinutes(); }],
+            ['%H:%M', function (d) { return d.getHours(); }],
+            ['%a %d', function (d) { return d.getDay() && d.getDate() !== 1; }],
+            ['%b %d', function (d) { return d.getDate() !== 1; }],
+            ['%B', function (d) { return d.getMonth(); }],
+            ['%Y', function () { return true; }]
+        ]);
 
         // ----------
         // main chart
@@ -1136,34 +1124,6 @@ nf.StatusHistory = (function () {
         init: function (timeOffset) {
             serverTimeOffset = timeOffset;
 
-            // initialize the time formats
-            timeFormats = [
-                [d3.time.format(':%S.%L'), function (d) {
-                        return d.getMilliseconds();
-                    }],
-                [d3.time.format(':%S'), function (d) {
-                        return d.getSeconds();
-                    }],
-                [d3.time.format('%H:%M'), function (d) {
-                        return d.getMinutes();
-                    }],
-                [d3.time.format('%H:%M'), function (d) {
-                        return d.getHours();
-                    }],
-                [d3.time.format('%a %d'), function (d) {
-                        return d.getDay() && d.getDate() !== 1;
-                    }],
-                [d3.time.format('%b %d'), function (d) {
-                        return d.getDate() !== 1;
-                    }],
-                [d3.time.format('%B'), function (d) {
-                        return d.getMonth();
-                    }],
-                [d3.time.format('%Y'), function () {
-                        return true;
-                    }]
-            ];
-
             nf.Common.addHoverEffect('#status-history-refresh-button', 'button-refresh', 'button-refresh-hover').click(function () {
                 var statusHistory = $('#status-history-dialog').data('status-history');
                 if (statusHistory !== null) {


[3/3] incubator-nifi git commit: NIFI-27: - Latest version of D3.

Posted by mc...@apache.org.
NIFI-27:
- Latest version of D3.

Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/fef80713
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/fef80713
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/fef80713

Branch: refs/heads/nifi-27
Commit: fef80713600d87e4bf984f4d090e18dafecae574
Parents: eb88075
Author: Matt Gilman <ma...@gmail.com>
Authored: Wed Dec 10 11:26:27 2014 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Wed Dec 10 11:26:27 2014 -0500

----------------------------------------------------------------------
 .../nifi-web-ui/src/main/webapp/js/d3/LICENSE   |   52 +-
 .../nifi-web-ui/src/main/webapp/js/d3/d3.min.js | 5390 +-----------------
 .../src/main/webapp/js/nf/nf-status-history.js  |   62 +-
 3 files changed, 42 insertions(+), 5462 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/fef80713/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/d3/LICENSE
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/d3/LICENSE b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/d3/LICENSE
old mode 100755
new mode 100644
index 83602d5..8301346
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/d3/LICENSE
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/d3/LICENSE
@@ -1,26 +1,26 @@
-Copyright (c) 2013, Michael Bostock
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice, this
-  list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright notice,
-  this list of conditions and the following disclaimer in the documentation
-  and/or other materials provided with the distribution.
-
-* The name Michael Bostock may not be used to endorse or promote products
-  derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,
-INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+Copyright (c) 2010-2014, Michael Bostock
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+* The name Michael Bostock may not be used to endorse or promote products
+  derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


[2/3] incubator-nifi git commit: NIFI-27: - Latest version of D3.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/fef80713/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/d3/d3.min.js
----------------------------------------------------------------------
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/d3/d3.min.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/d3/d3.min.js
old mode 100755
new mode 100644
index 862fcb2..ddaf546
--- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/d3/d3.min.js
+++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/d3/d3.min.js
@@ -1,5385 +1,5 @@
-d3 = function () {
-    function n(n) {
-        return null != n && !isNaN(n)
-    }
-    function t(n) {
-        return n.length
-    }
-    function e(n) {
-        for (var t = 1; n * t % 1; )
-            t *= 10;
-        return t
-    }
-    function r(n, t) {
-        try {
-            for (var e in t)
-                Object.defineProperty(n.prototype, e, {value: t[e], enumerable: !1})
-        } catch (r) {
-            n.prototype = t
-        }
-    }
-    function u() {
-    }
-    function i() {
-    }
-    function o(n, t, e) {
-        return function () {
-            var r = e.apply(t, arguments);
-            return r === t ? n : r
-        }
-    }
-    function a(n, t) {
-        if (t in n)
-            return t;
-        t = t.charAt(0).toUpperCase() + t.substring(1);
-        for (var e = 0, r = Co.length; r > e; ++e) {
-            var u = Co[e] + t;
-            if (u in n)
-                return u
-        }
-    }
-    function c() {
-    }
-    function l() {
-    }
-    function s(n) {
-        function t() {
-            for (var t, r = e, u = -1, i = r.length; ++u < i; )
-                (t = r[u].on) && t.apply(this, arguments);
-            return n
-        }
-        var e = [], r = new u;
-        return t.on = function (t, u) {
-            var i, o = r.get(t);
-            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {on: u})), n)
-        }, t
-    }
-    function f() {
-        vo.event.preventDefault()
-    }
-    function h() {
-        for (var n, t = vo.event; n = t.sourceEvent; )
-            t = n;
-        return t
-    }
-    function g(n) {
-        for (var t = new l, e = 0, r = arguments.length; ++e < r; )
-            t[arguments[e]] = s(t);
-        return t.of = function (e, r) {
-            return function (u) {
-                try {
-                    var i = u.sourceEvent = vo.event;
-                    u.target = n, vo.event = u, t[u.type].apply(e, r)
-                } finally {
-                    vo.event = i
-                }
-            }
-        }, t
-    }
-    function p(n) {
-        return jo(n, Oo), n
-    }
-    function d(n) {
-        return"function" == typeof n ? n : function () {
-            return Lo(n, this)
-        }
-    }
-    function v(n) {
-        return"function" == typeof n ? n : function () {
-            return Ho(n, this)
-        }
-    }
-    function m(n, t) {
-        function e() {
-            this.removeAttribute(n)
-        }
-        function r() {
-            this.removeAttributeNS(n.space, n.local)
-        }
-        function u() {
-            this.setAttribute(n, t)
-        }
-        function i() {
-            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 = vo.ns.qualify(n), null == t ? n.local ? r : e : "function" == typeof t ? n.local ? a : o : n.local ? i : u
-    }
-    function y(n) {
-        return n.trim().replace(/\s+/g, " ")
-    }
-    function M(n) {
-        return new RegExp("(?:^|\\s+)" + vo.requote(n) + "(?:\\s+|$)", "g")
-    }
-    function x(n, t) {
-        function e() {
-            for (var e = -1; ++e < u; )
-                n[e](this, t)
-        }
-        function r() {
-            for (var e = -1, r = t.apply(this, arguments); ++e < u; )
-                n[e](this, r)
-        }
-        n = n.trim().split(/\s+/).map(b);
-        var u = n.length;
-        return"function" == typeof t ? r : e
-    }
-    function b(n) {
-        var t = M(n);
-        return function (e, r) {
-            if (u = e.classList)
-                return r ? u.add(n) : u.remove(n);
-            var u = e.getAttribute("class") || "";
-            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute("class", y(u + " " + n))) : e.setAttribute("class", y(u.replace(t, " ")))
-        }
-    }
-    function _(n, t, e) {
-        function r() {
-            this.style.removeProperty(n)
-        }
-        function u() {
-            this.style.setProperty(n, t, e)
-        }
-        function i() {
-            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 ? i : u
-    }
-    function w(n, t) {
-        function e() {
-            delete this[n]
-        }
-        function r() {
-            this[n] = t
-        }
-        function u() {
-            var e = t.apply(this, arguments);
-            null == e ? delete this[n] : this[n] = e
-        }
-        return null == t ? e : "function" == typeof t ? u : r
-    }
-    function S(n) {
-        return"function" == typeof n ? n : (n = vo.ns.qualify(n)).local ? function () {
-            return Mo.createElementNS(n.space, n.local)
-        } : function () {
-            return Mo.createElementNS(this.namespaceURI, n)
-        }
-    }
-    function E(n) {
-        return{__data__: n}
-    }
-    function k(n) {
-        return function () {
-            return Po(this, n)
-        }
-    }
-    function A(n) {
-        return arguments.length || (n = vo.ascending), function (t, e) {
-            return t && e ? n(t.__data__, e.__data__) : !t - !e
-        }
-    }
-    function N(n, t) {
-        for (var e = 0, r = n.length; r > e; e++)
-            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)
-                (u = i[o]) && t(u, o, e);
-        return n
-    }
-    function q(n) {
-        return jo(n, Yo), n
-    }
-    function T(n) {
-        var t, e;
-        return function (r, u, i) {
-            var o, a = n[i].update, c = a.length;
-            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c; )
-                ;
-            return o
-        }
-    }
-    function z() {
-        var n = this.__transition__;
-        n && ++n.active
-    }
-    function C(n, t, e) {
-        function r() {
-            var t = this[o];
-            t && (this.removeEventListener(n, t, t.$), delete this[o])
-        }
-        function u() {
-            var u = l(t, yo(arguments));
-            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t
-        }
-        function i() {
-            var t, e = new RegExp("^__on([^.]+)" + vo.requote(n) + "$");
-            for (var r in this)
-                if (t = r.match(e)) {
-                    var u = this[r];
-                    this.removeEventListener(t[1], u, u.$), delete this[r]
-                }
-        }
-        var o = "__on" + n, a = n.indexOf("."), l = D;
-        a > 0 && (n = n.substring(0, a));
-        var s = Uo.get(n);
-        return s && (n = s, l = j), a ? t ? u : r : t ? c : i
-    }
-    function D(n, t) {
-        return function (e) {
-            var r = vo.event;
-            vo.event = e, t[0] = this.__data__;
-            try {
-                n.apply(this, t)
-            } finally {
-                vo.event = r
-            }
-        }
-    }
-    function j(n, t) {
-        var e = D(n, t);
-        return function (n) {
-            var t = this, r = n.relatedTarget;
-            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)
-        }
-    }
-    function L() {
-        var n = ".dragsuppress-" + ++Zo, t = "touchmove" + n, e = "selectstart" + n, r = "dragstart" + n, u = "click" + n, i = vo.select(bo).on(t, f).on(e, f).on(r, f), o = xo.style, a = o[Vo];
-        return o[Vo] = "none", function (t) {
-            function e() {
-                i.on(u, null)
-            }
-            i.on(n, null), o[Vo] = a, t && (i.on(u, function () {
-                f(), e()
-            }, !0), setTimeout(e, 0))
-        }
-    }
-    function H(n, t) {
-        var e = n.ownerSVGElement || n;
-        if (e.createSVGPoint) {
-            var r = e.createSVGPoint();
-            if (0 > Xo && (bo.scrollX || bo.scrollY)) {
-                e = vo.select("body").append("svg").style({position: "absolute", top: 0, left: 0, margin: 0, padding: 0, border: "none"}, "important");
-                var u = e[0][0].getScreenCTM();
-                Xo = !(u.f || u.e), e.remove()
-            }
-            return Xo ? (r.x = t.pageX, r.y = t.pageY) : (r.x = t.clientX, r.y = t.clientY), r = r.matrixTransform(n.getScreenCTM().inverse()), [r.x, r.y]
-        }
-        var i = n.getBoundingClientRect();
-        return[t.clientX - i.left - n.clientLeft, t.clientY - i.top - n.clientTop]
-    }
-    function F(n) {
-        return n > 0 ? 1 : 0 > n ? -1 : 0
-    }
-    function P(n) {
-        return n > 1 ? 0 : -1 > n ? Bo : Math.acos(n)
-    }
-    function O(n) {
-        return n > 1 ? Bo / 2 : -1 > n ? -Bo / 2 : Math.asin(n)
-    }
-    function R(n) {
-        return(Math.exp(n) - Math.exp(-n)) / 2
-    }
-    function Y(n) {
-        return(Math.exp(n) + Math.exp(-n)) / 2
-    }
-    function I(n) {
-        return R(n) / Y(n)
-    }
-    function U(n) {
-        return(n = Math.sin(n / 2)) * n
-    }
-    function V() {
-    }
-    function Z(n, t, e) {
-        return new X(n, t, e)
-    }
-    function X(n, t, e) {
-        this.h = n, this.s = t, this.l = e
-    }
-    function B(n, t, e) {
-        function r(n) {
-            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i
-        }
-        function u(n) {
-            return Math.round(255 * r(n))
-        }
-        var i, 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, i = 2 * e - o, ot(u(n + 120), u(n), u(n - 120))
-    }
-    function $(n, t, e) {
-        return new W(n, t, e)
-    }
-    function W(n, t, e) {
-        this.h = n, this.c = t, this.l = e
-    }
-    function J(n, t, e) {
-        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), G(e, Math.cos(n *= Jo) * t, Math.sin(n) * t)
-    }
-    function G(n, t, e) {
-        return new K(n, t, e)
-    }
-    function K(n, t, e) {
-        this.l = n, this.a = t, this.b = e
-    }
-    function Q(n, t, e) {
-        var r = (n + 16) / 116, u = r + t / 500, i = r - e / 200;
-        return u = tt(u) * aa, r = tt(r) * ca, i = tt(i) * la, ot(rt(3.2404542 * u - 1.5371385 * r - .4985314 * i), rt(-.969266 * u + 1.8760108 * r + .041556 * i), rt(.0556434 * u - .2040259 * r + 1.0572252 * i))
-    }
-    function nt(n, t, e) {
-        return n > 0 ? $(Math.atan2(e, t) * Go, Math.sqrt(t * t + e * e), n) : $(0 / 0, 0 / 0, n)
-    }
-    function tt(n) {
-        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037
-    }
-    function et(n) {
-        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29
-    }
-    function rt(n) {
-        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))
-    }
-    function ut(n) {
-        return ot(n >> 16, 255 & n >> 8, 255 & n)
-    }
-    function it(n) {
-        return ut(n) + ""
-    }
-    function ot(n, t, e) {
-        return new at(n, t, e)
-    }
-    function at(n, t, e) {
-        this.r = n, this.g = t, this.b = e
-    }
-    function ct(n) {
-        return 16 > n ? "0" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)
-    }
-    function lt(n, t, e) {
-        var r, u, i, o = 0, a = 0, c = 0;
-        if (r = /([a-z]+)\((.*)\)/i.exec(n))
-            switch (u = r[2].split(","), r[1]) {
-                case"hsl":
-                    return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);
-                case"rgb":
-                    return t(gt(u[0]), gt(u[1]), gt(u[2]))
-            }
-        return(i = ha.get(n)) ? t(i.r, i.g, i.b) : (null != n && "#" === n.charAt(0) && (4 === n.length ? (o = n.charAt(1), o += o, a = n.charAt(2), a += a, c = n.charAt(3), c += c) : 7 === n.length && (o = n.substring(1, 3), a = n.substring(3, 5), c = n.substring(5, 7)), o = parseInt(o, 16), a = parseInt(a, 16), c = parseInt(c, 16)), t(o, a, c))
-    }
-    function st(n, t, e) {
-        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255), o = Math.max(n, t, e), a = o - i, c = (o + i) / 2;
-        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), Z(r, u, c)
-    }
-    function ft(n, t, e) {
-        n = ht(n), t = ht(t), e = ht(e);
-        var r = et((.4124564 * n + .3575761 * t + .1804375 * e) / aa), u = et((.2126729 * n + .7151522 * t + .072175 * e) / ca), i = et((.0193339 * n + .119192 * t + .9503041 * e) / la);
-        return G(116 * u - 16, 500 * (r - u), 200 * (u - i))
-    }
-    function ht(n) {
-        return(n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)
-    }
-    function gt(n) {
-        var t = parseFloat(n);
-        return"%" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t
-    }
-    function pt(n) {
-        return"function" == typeof n ? n : function () {
-            return n
-        }
-    }
-    function dt(n) {
-        return n
-    }
-    function vt(n) {
-        return function (t, e, r) {
-            return 2 === arguments.length && "function" == typeof e && (r = e, e = null), mt(t, e, n, r)
-        }
-    }
-    function mt(n, t, e, r) {
-        function u() {
-            var n, t = c.status;
-            if (!t && c.responseText || t >= 200 && 300 > t || 304 === t) {
-                try {
-                    n = e.call(i, c)
-                } catch (r) {
-                    return o.error.call(i, r), void 0
-                }
-                o.load.call(i, n)
-            } else
-                o.error.call(i, c)
-        }
-        var i = {}, o = vo.dispatch("beforesend", "progress", "load", "error"), a = {}, c = new XMLHttpRequest, l = null;
-        return!bo.XDomainRequest || "withCredentials"in c || !/^(http(s)?:)?\/\//.test(n) || (c = new XDomainRequest), "onload"in c ? c.onload = c.onerror = u : c.onreadystatechange = function () {
-            c.readyState > 3 && u()
-        }, c.onprogress = function (n) {
-            var t = vo.event;
-            vo.event = n;
-            try {
-                o.progress.call(i, c)
-            } finally {
-                vo.event = t
-            }
-        }, i.header = function (n, t) {
-            return n = (n + "").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + "", i)
-        }, i.mimeType = function (n) {
-            return arguments.length ? (t = null == n ? null : n + "", i) : t
-        }, i.responseType = function (n) {
-            return arguments.length ? (l = n, i) : l
-        }, i.response = function (n) {
-            return e = n, i
-        }, ["get", "post"].forEach(function (n) {
-            i[n] = function () {
-                return i.send.apply(i, [n].concat(yo(arguments)))
-            }
-        }), i.send = function (e, r, u) {
-            if (2 === arguments.length && "function" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || "accept"in a || (a.accept = t + ",*/*"), c.setRequestHeader)
-                for (var s in a)
-                    c.setRequestHeader(s, a[s]);
-            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on("error", u).on("load", function (n) {
-                u(null, n)
-            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i
-        }, i.abort = function () {
-            return c.abort(), i
-        }, vo.rebind(i, o, "on"), null == r ? i : i.get(yt(r))
-    }
-    function yt(n) {
-        return 1 === n.length ? function (t, e) {
-            n(null == t ? e : null)
-        } : n
-    }
-    function Mt() {
-        var n = bt(), t = _t() - n;
-        t > 24 ? (isFinite(t) && (clearTimeout(va), va = setTimeout(Mt, t)), da = 0) : (da = 1, ya(Mt))
-    }
-    function xt(n, t, e) {
-        var r = arguments.length;
-        2 > r && (t = 0), 3 > r && (e = Date.now()), ma.callback = n, ma.time = e + t
-    }
-    function bt() {
-        var n = Date.now();
-        for (ma = ga; ma; )
-            n >= ma.time && (ma.flush = ma.callback(n - ma.time)), ma = ma.next;
-        return n
-    }
-    function _t() {
-        for (var n, t = ga, e = 1 / 0; t; )
-            t.flush ? t = n ? n.next = t.next : ga = t.next : (t.time < e && (e = t.time), t = (n = t).next);
-        return pa = n, e
-    }
-    function wt(n, t) {
-        var e = Math.pow(10, 3 * Math.abs(8 - t));
-        return{scale: t > 8 ? function (n) {
-                return n / e
-            } : function (n) {
-                return n * e
-            }, symbol: n}
-    }
-    function St(n, t) {
-        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)
-    }
-    function Et(n) {
-        return n + ""
-    }
-    function kt() {
-    }
-    function At(n, t, e) {
-        var r = e.s = n + t, u = r - n, i = r - u;
-        e.t = n - i + (t - u)
-    }
-    function Nt(n, t) {
-        n && Ta.hasOwnProperty(n.type) && Ta[n.type](n, t)
-    }
-    function qt(n, t, e) {
-        var r, u = -1, i = n.length - e;
-        for (t.lineStart(); ++u < i; )
-            r = n[u], t.point(r[0], r[1], r[2]);
-        t.lineEnd()
-    }
-    function Tt(n, t) {
-        var e = -1, r = n.length;
-        for (t.polygonStart(); ++e < r; )
-            qt(n[e], t, 1);
-        t.polygonEnd()
-    }
-    function zt() {
-        function n(n, t) {
-            n *= Jo, t = t * Jo / 2 + Bo / 4;
-            var e = n - r, o = Math.cos(t), a = Math.sin(t), c = i * a, l = u * o + c * Math.cos(e), s = c * Math.sin(e);
-            Ca.add(Math.atan2(s, l)), r = n, u = o, i = a
-        }
-        var t, e, r, u, i;
-        Da.point = function (o, a) {
-            Da.point = n, r = (t = o) * Jo, u = Math.cos(a = (e = a) * Jo / 2 + Bo / 4), i = Math.sin(a)
-        }, Da.lineEnd = function () {
-            n(t, e)
-        }
-    }
-    function Ct(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 Dt(n, t) {
-        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]
-    }
-    function jt(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 Lt(n, t) {
-        n[0] += t[0], n[1] += t[1], n[2] += t[2]
-    }
-    function Ht(n, t) {
-        return[n[0] * t, n[1] * t, n[2] * t]
-    }
-    function Ft(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 Pt(n) {
-        return[Math.atan2(n[1], n[0]), O(n[2])]
-    }
-    function Ot(n, t) {
-        return Math.abs(n[0] - t[0]) < $o && Math.abs(n[1] - t[1]) < $o
-    }
-    function Rt(n, t) {
-        n *= Jo;
-        var e = Math.cos(t *= Jo);
-        Yt(e * Math.cos(n), e * Math.sin(n), Math.sin(t))
-    }
-    function Yt(n, t, e) {
-        ++ja, Ha += (n - Ha) / ja, Fa += (t - Fa) / ja, Pa += (e - Pa) / ja
-    }
-    function It() {
-        function n(n, u) {
-            n *= Jo;
-            var i = Math.cos(u *= Jo), o = i * Math.cos(n), a = i * Math.sin(n), c = Math.sin(u), l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);
-            La += l, Oa += l * (t + (t = o)), Ra += l * (e + (e = a)), Ya += l * (r + (r = c)), Yt(t, e, r)
-        }
-        var t, e, r;
-        Za.point = function (u, i) {
-            u *= Jo;
-            var o = Math.cos(i *= Jo);
-            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), Za.point = n, Yt(t, e, r)
-        }
-    }
-    function Ut() {
-        Za.point = Rt
-    }
-    function Vt() {
-        function n(n, t) {
-            n *= Jo;
-            var e = Math.cos(t *= Jo), o = e * Math.cos(n), a = e * Math.sin(n), c = Math.sin(t), l = u * c - i * a, s = i * o - r * c, f = r * a - u * o, h = Math.sqrt(l * l + s * s + f * f), g = r * o + u * a + i * c, p = h && -P(g) / h, d = Math.atan2(h, g);
-            Ia += p * l, Ua += p * s, Va += p * f, La += d, Oa += d * (r + (r = o)), Ra += d * (u + (u = a)), Ya += d * (i + (i = c)), Yt(r, u, i)
-        }
-        var t, e, r, u, i;
-        Za.point = function (o, a) {
-            t = o, e = a, Za.point = n, o *= Jo;
-            var c = Math.cos(a *= Jo);
-            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), Yt(r, u, i)
-        }, Za.lineEnd = function () {
-            n(t, e), Za.lineEnd = Ut, Za.point = Rt
-        }
-    }
-    function Zt() {
-        return!0
-    }
-    function Xt(n, t, e, r, u) {
-        var i = [], o = [];
-        if (n.forEach(function (n) {
-            if (!((t = n.length - 1) <= 0)) {
-                var t, e = n[0], r = n[t];
-                if (Ot(e, r)) {
-                    u.lineStart();
-                    for (var a = 0; t > a; ++a)
-                        u.point((e = n[a])[0], e[1]);
-                    return u.lineEnd(), void 0
-                }
-                var c = {point: e, points: n, other: null, visited: !1, entry: !0, subject: !0}, l = {point: e, points: [e], other: c, visited: !1, entry: !1, subject: !1};
-                c.other = l, i.push(c), o.push(l), c = {point: r, points: [r], other: null, visited: !1, entry: !1, subject: !0}, l = {point: r, points: [r], other: c, visited: !1, entry: !0, subject: !1}, c.other = l, i.push(c), o.push(l)
-            }
-        }), o.sort(t), Bt(i), Bt(o), i.length) {
-            if (e)
-                for (var a = 1, c = !e(o[0].point), l = o.length; l > a; ++a)
-                    o[a].entry = c = !c;
-            for (var s, f, h, g = i[0]; ; ) {
-                for (s = g; s.visited; )
-                    if ((s = s.next) === g)
-                        return;
-                f = s.points, u.lineStart();
-                do {
-                    if (s.visited = s.other.visited = !0, s.entry) {
-                        if (s.subject)
-                            for (var a = 0; a < f.length; a++)
-                                u.point((h = f[a])[0], h[1]);
-                        else
-                            r(s.point, s.next.point, 1, u);
-                        s = s.next
-                    } else {
-                        if (s.subject) {
-                            f = s.prev.points;
-                            for (var a = f.length; --a >= 0; )
-                                u.point((h = f[a])[0], h[1])
-                        } else
-                            r(s.point, s.prev.point, -1, u);
-                        s = s.prev
-                    }
-                    s = s.other, f = s.points
-                } while (!s.visited);
-                u.lineEnd()
-            }
-        }
-    }
-    function Bt(n) {
-        if (t = n.length) {
-            for (var t, e, r = 0, u = n[0]; ++r < t; )
-                u.next = e = n[r], e.prev = u, u = e;
-            u.next = e = n[0], e.prev = u
-        }
-    }
-    function $t(n, t, e, r) {
-        return function (u) {
-            function i(t, e) {
-                n(t, e) && u.point(t, e)
-            }
-            function o(n, t) {
-                d.point(n, t)
-            }
-            function a() {
-                v.point = o, d.lineStart()
-            }
-            function c() {
-                v.point = i, d.lineEnd()
-            }
-            function l(n, t) {
-                y.point(n, t), p.push([n, t])
-            }
-            function s() {
-                y.lineStart(), p = []
-            }
-            function f() {
-                l(p[0][0], p[0][1]), y.lineEnd();
-                var n, t = y.clean(), e = m.buffer(), r = e.length;
-                if (p.pop(), g.push(p), p = null, r) {
-                    if (1 & t) {
-                        n = e[0];
-                        var i, r = n.length - 1, o = -1;
-                        for (u.lineStart(); ++o < r; )
-                            u.point((i = n[o])[0], i[1]);
-                        return u.lineEnd(), void 0
-                    }
-                    r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), h.push(e.filter(Wt))
-                }
-            }
-            var h, g, p, d = t(u), v = {point: i, lineStart: a, lineEnd: c, polygonStart: function () {
-                    v.point = l, v.lineStart = s, v.lineEnd = f, h = [], g = [], u.polygonStart()
-                }, polygonEnd: function () {
-                    v.point = i, v.lineStart = a, v.lineEnd = c, h = vo.merge(h), h.length ? Xt(h, Gt, null, e, u) : r(g) && (u.lineStart(), e(null, null, 1, u), u.lineEnd()), u.polygonEnd(), h = g = null
-                }, sphere: function () {
-                    u.polygonStart(), u.lineStart(), e(null, null, 1, u), u.lineEnd(), u.polygonEnd()
-                }}, m = Jt(), y = t(m);
-            return v
-        }
-    }
-    function Wt(n) {
-        return n.length > 1
-    }
-    function Jt() {
-        var n, t = [];
-        return{lineStart: function () {
-                t.push(n = [])
-            }, point: function (t, e) {
-                n.push([t, e])
-            }, lineEnd: c, buffer: function () {
-                var e = t;
-                return t = [], n = null, e
-            }, rejoin: function () {
-                t.length > 1 && t.push(t.pop().concat(t.shift()))
-            }}
-    }
-    function Gt(n, t) {
-        return((n = n.point)[0] < 0 ? n[1] - Bo / 2 - $o : Bo / 2 - n[1]) - ((t = t.point)[0] < 0 ? t[1] - Bo / 2 - $o : Bo / 2 - t[1])
-    }
-    function Kt(n, t) {
-        var e = n[0], r = n[1], u = [Math.sin(e), -Math.cos(e), 0], i = 0, o = !1, a = !1, c = 0;
-        Ca.reset();
-        for (var l = 0, s = t.length; s > l; ++l) {
-            var f = t[l], h = f.length;
-            if (h) {
-                for (var g = f[0], p = g[0], d = g[1] / 2 + Bo / 4, v = Math.sin(d), m = Math.cos(d), y = 1; ; ) {
-                    y === h && (y = 0), n = f[y];
-                    var M = n[0], x = n[1] / 2 + Bo / 4, b = Math.sin(x), _ = Math.cos(x), w = M - p, S = Math.abs(w) > Bo, E = v * b;
-                    if (Ca.add(Math.atan2(E * Math.sin(w), m * _ + E * Math.cos(w))), Math.abs(x) < $o && (a = !0), i += S ? w + (w >= 0 ? 2 : -2) * Bo : w, S ^ p >= e ^ M >= e) {
-                        var k = jt(Ct(g), Ct(n));
-                        Ft(k);
-                        var A = jt(u, k);
-                        Ft(A);
-                        var N = (S ^ w >= 0 ? -1 : 1) * O(A[2]);
-                        r > N && (c += S ^ w >= 0 ? 1 : -1)
-                    }
-                    if (!y++)
-                        break;
-                    p = M, v = b, m = _, g = n
-                }
-                Math.abs(i) > $o && (o = !0)
-            }
-        }
-        return(!a && !o && 0 > Ca || -$o > i) ^ 1 & c
-    }
-    function Qt(n) {
-        var t, e = 0 / 0, r = 0 / 0, u = 0 / 0;
-        return{lineStart: function () {
-                n.lineStart(), t = 1
-            }, point: function (i, o) {
-                var a = i > 0 ? Bo : -Bo, c = Math.abs(i - e);
-                Math.abs(c - Bo) < $o ? (n.point(e, r = (r + o) / 2 > 0 ? Bo / 2 : -Bo / 2), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= Bo && (Math.abs(e - u) < $o && (e -= u * $o), Math.abs(i - a) < $o && (i -= a * $o), r = ne(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a
-            }, lineEnd: function () {
-                n.lineEnd(), e = r = 0 / 0
-            }, clean: function () {
-                return 2 - t
-            }}
-    }
-    function ne(n, t, e, r) {
-        var u, i, o = Math.sin(n - e);
-        return Math.abs(o) > $o ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2
-    }
-    function te(n, t, e, r) {
-        var u;
-        if (null == n)
-            u = e * Bo / 2, r.point(-Bo, u), r.point(0, u), r.point(Bo, u), r.point(Bo, 0), r.point(Bo, -u), r.point(0, -u), r.point(-Bo, -u), r.point(-Bo, 0), r.point(-Bo, u);
-        else if (Math.abs(n[0] - t[0]) > $o) {
-            var i = (n[0] < t[0] ? 1 : -1) * Bo;
-            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)
-        } else
-            r.point(t[0], t[1])
-    }
-    function ee(n) {
-        return Kt(Ba, n)
-    }
-    function re(n) {
-        function t(n, t) {
-            return Math.cos(n) * Math.cos(t) > o
-        }
-        function e(n) {
-            var e, i, o, c, s;
-            return{lineStart: function () {
-                    c = o = !1, s = 1
-                }, point: function (f, h) {
-                    var g, p = [f, h], d = t(f, h), v = a ? d ? 0 : u(f, h) : d ? u(f + (0 > f ? Bo : -Bo), h) : 0;
-                    if (!e && (c = o = d) && n.lineStart(), d !== o && (g = r(e, p), (Ot(e, g) || Ot(p, g)) && (p[0] += $o, p[1] += $o, d = t(p[0], p[1]))), d !== o)
-                        s = 0, d ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;
-                    else if (l && e && a ^ d) {
-                        var m;
-                        v & i || !(m = r(p, e, !0)) || (s = 0, a ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))
-                    }
-                    !d || e && Ot(e, p) || n.point(p[0], p[1]), e = p, o = d, i = v
-                }, lineEnd: function () {
-                    o && n.lineEnd(), e = null
-                }, clean: function () {
-                    return s | (c && o) << 1
-                }}
-        }
-        function r(n, t, e) {
-            var r = Ct(n), u = Ct(t), i = [1, 0, 0], a = jt(r, u), c = Dt(a, a), l = a[0], s = c - l * l;
-            if (!s)
-                return!e && n;
-            var f = o * c / s, h = -o * l / s, g = jt(i, a), p = Ht(i, f), d = Ht(a, h);
-            Lt(p, d);
-            var v = g, m = Dt(p, v), y = Dt(v, v), M = m * m - y * (Dt(p, p) - 1);
-            if (!(0 > M)) {
-                var x = Math.sqrt(M), b = Ht(v, (-m - x) / y);
-                if (Lt(b, p), b = Pt(b), !e)
-                    return b;
-                var _, w = n[0], S = t[0], E = n[1], k = t[1];
-                w > S && (_ = w, w = S, S = _);
-                var A = S - w, N = Math.abs(A - Bo) < $o, q = N || $o > A;
-                if (!N && E > k && (_ = E, E = k, k = _), q ? N ? E + k > 0 ^ b[1] < (Math.abs(b[0] - w) < $o ? E : k) : E <= b[1] && b[1] <= k : A > Bo ^ (w <= b[0] && b[0] <= S)) {
-                    var T = Ht(v, (-m + x) / y);
-                    return Lt(T, p), [b, Pt(T)]
-                }
-            }
-        }
-        function u(t, e) {
-            var r = a ? n : Bo - n, u = 0;
-            return-r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u
-        }
-        function i(n) {
-            return Kt(c, n)
-        }
-        var o = Math.cos(n), a = o > 0, c = [n, 0], l = Math.abs(o) > $o, s = qe(n, 6 * Jo);
-        return $t(t, e, s, i)
-    }
-    function ue(n, t, e, r) {
-        function u(r, u) {
-            return Math.abs(r[0] - n) < $o ? u > 0 ? 0 : 3 : Math.abs(r[0] - e) < $o ? u > 0 ? 2 : 1 : Math.abs(r[1] - t) < $o ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2
-        }
-        function i(n, t) {
-            return o(n.point, t.point)
-        }
-        function o(n, t) {
-            var e = u(n, 1), r = u(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]
-        }
-        function a(u, i) {
-            var o = i[0] - u[0], a = i[1] - u[1], c = [0, 1];
-            return Math.abs(o) < $o && Math.abs(a) < $o ? n <= u[0] && u[0] <= e && t <= u[1] && u[1] <= r : ie(n - u[0], o, c) && ie(u[0] - e, -o, c) && ie(t - u[1], a, c) && ie(u[1] - r, -a, c) ? (c[1] < 1 && (i[0] = u[0] + c[1] * o, i[1] = u[1] + c[1] * a), c[0] > 0 && (u[0] += c[0] * o, u[1] += c[0] * a), !0) : !1
-        }
-        return function (c) {
-            function l(i) {
-                var o = u(i, -1), a = s([0 === o || 3 === o ? n : e, o > 1 ? r : t]);
-                return a
-            }
-            function s(n) {
-                for (var t = 0, e = M.length, r = n[1], u = 0; e > u; ++u)
-                    for (var i, o = 1, a = M[u], c = a.length, l = a[0]; c > o; ++o)
-                        i = a[o], l[1] <= r ? i[1] > r && f(l, i, n) > 0 && ++t : i[1] <= r && f(l, i, n) < 0 && --t, l = i;
-                return 0 !== t
-            }
-            function f(n, t, e) {
-                return(t[0] - n[0]) * (e[1] - n[1]) - (e[0] - n[0]) * (t[1] - n[1])
-            }
-            function h(i, a, c, l) {
-                var s = 0, f = 0;
-                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {
-                    do
-                        l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t);
-                    while ((s = (s + c + 4) % 4) !== f)
-                } else
-                    l.point(a[0], a[1])
-            }
-            function g(u, i) {
-                return u >= n && e >= u && i >= t && r >= i
-            }
-            function p(n, t) {
-                g(n, t) && c.point(n, t)
-            }
-            function d() {
-                T.point = m, M && M.push(x = []), A = !0, k = !1, S = E = 0 / 0
-            }
-            function v() {
-                y && (m(b, _), w && k && q.rejoin(), y.push(q.buffer())), T.point = p, k && c.lineEnd()
-            }
-            function m(n, t) {
-                n = Math.max(-$a, Math.min($a, n)), t = Math.max(-$a, Math.min($a, t));
-                var e = g(n, t);
-                if (M && x.push([n, t]), A)
-                    b = n, _ = t, w = e, A = !1, e && (c.lineStart(), c.point(n, t));
-                else if (e && k)
-                    c.point(n, t);
-                else {
-                    var r = [S, E], u = [n, t];
-                    a(r, u) ? (k || (c.lineStart(), c.point(r[0], r[1])), c.point(u[0], u[1]), e || c.lineEnd()) : e && (c.lineStart(), c.point(n, t))
-                }
-                S = n, E = t, k = e
-            }
-            var y, M, x, b, _, w, S, E, k, A, N = c, q = Jt(), T = {point: p, lineStart: d, lineEnd: v, polygonStart: function () {
-                    c = q, y = [], M = []
-                }, polygonEnd: function () {
-                    c = N, (y = vo.merge(y)).length ? (c.polygonStart(), Xt(y, i, l, h, c), c.polygonEnd()) : s([n, t]) && (c.polygonStart(), c.lineStart(), h(null, null, 1, c), c.lineEnd(), c.polygonEnd()), y = M = x = null
-                }};
-            return T
-        }
-    }
-    function ie(n, t, e) {
-        if (Math.abs(t) < $o)
-            return 0 >= n;
-        var r = n / t;
-        if (t > 0) {
-            if (r > e[1])
-                return!1;
-            r > e[0] && (e[0] = r)
-        } else {
-            if (r < e[0])
-                return!1;
-            r < e[1] && (e[1] = r)
-        }
-        return!0
-    }
-    function oe(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 ae(n) {
-        var t = 0, e = Bo / 3, r = _e(n), u = r(t, e);
-        return u.parallels = function (n) {
-            return arguments.length ? r(t = n[0] * Bo / 180, e = n[1] * Bo / 180) : [180 * (t / Bo), 180 * (e / Bo)]
-        }, u
-    }
-    function ce(n, t) {
-        function e(n, t) {
-            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;
-            return[e * Math.sin(n *= u), o - e * Math.cos(n)]
-        }
-        var r = Math.sin(n), u = (r + Math.sin(t)) / 2, i = 1 + r * (2 * u - r), o = Math.sqrt(i) / u;
-        return e.invert = function (n, t) {
-            var e = o - t;
-            return[Math.atan2(n, e) / u, O((i - (n * n + e * e) * u * u) / (2 * u))]
-        }, e
-    }
-    function le() {
-        function n(n, t) {
-            Ja += u * n - r * t, r = n, u = t
-        }
-        var t, e, r, u;
-        tc.point = function (i, o) {
-            tc.point = n, t = r = i, e = u = o
-        }, tc.lineEnd = function () {
-            n(t, e)
-        }
-    }
-    function se(n, t) {
-        Ga > n && (Ga = n), n > Qa && (Qa = n), Ka > t && (Ka = t), t > nc && (nc = t)
-    }
-    function fe() {
-        function n(n, t) {
-            o.push("M", n, ",", t, i)
-        }
-        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 u() {
-            o.push("Z")
-        }
-        var i = he(4.5), o = [], a = {point: n, lineStart: function () {
-                a.point = t
-            }, lineEnd: r, polygonStart: function () {
-                a.lineEnd = u
-            }, polygonEnd: function () {
-                a.lineEnd = r, a.point = n
-            }, pointRadius: function (n) {
-                return i = he(n), a
-            }, result: function () {
-                if (o.length) {
-                    var n = o.join("");
-                    return o = [], n
-                }
-            }};
-        return a
-    }
-    function he(n) {
-        return"m0," + n + "a" + n + "," + n + " 0 1,1 0," + -2 * n + "a" + n + "," + n + " 0 1,1 0," + 2 * n + "z"
-    }
-    function ge(n, t) {
-        Ha += n, Fa += t, ++Pa
-    }
-    function pe() {
-        function n(n, r) {
-            var u = n - t, i = r - e, o = Math.sqrt(u * u + i * i);
-            Oa += o * (t + n) / 2, Ra += o * (e + r) / 2, Ya += o, ge(t = n, e = r)
-        }
-        var t, e;
-        rc.point = function (r, u) {
-            rc.point = n, ge(t = r, e = u)
-        }
-    }
-    function de() {
-        rc.point = ge
-    }
-    function ve() {
-        function n(n, t) {
-            var e = n - r, i = t - u, o = Math.sqrt(e * e + i * i);
-            Oa += o * (r + n) / 2, Ra += o * (u + t) / 2, Ya += o, o = u * n - r * t, Ia += o * (r + n), Ua += o * (u + t), Va += 3 * o, ge(r = n, u = t)
-        }
-        var t, e, r, u;
-        rc.point = function (i, o) {
-            rc.point = n, ge(t = r = i, e = u = o)
-        }, rc.lineEnd = function () {
-            n(t, e)
-        }
-    }
-    function me(n) {
-        function t(t, e) {
-            n.moveTo(t, e), n.arc(t, e, o, 0, 2 * Bo)
-        }
-        function e(t, e) {
-            n.moveTo(t, e), a.point = r
-        }
-        function r(t, e) {
-            n.lineTo(t, e)
-        }
-        function u() {
-            a.point = t
-        }
-        function i() {
-            n.closePath()
-        }
-        var o = 4.5, a = {point: t, lineStart: function () {
-                a.point = e
-            }, lineEnd: u, polygonStart: function () {
-                a.lineEnd = i
-            }, polygonEnd: function () {
-                a.lineEnd = u, a.point = t
-            }, pointRadius: function (n) {
-                return o = n, a
-            }, result: c};
-        return a
-    }
-    function ye(n) {
-        function t(t) {
-            function r(e, r) {
-                e = n(e, r), t.point(e[0], e[1])
-            }
-            function u() {
-                M = 0 / 0, S.point = o, t.lineStart()
-            }
-            function o(r, u) {
-                var o = Ct([r, u]), a = n(r, u);
-                e(M, x, y, b, _, w, M = a[0], x = a[1], y = r, b = o[0], _ = o[1], w = o[2], i, t), t.point(M, x)
-            }
-            function a() {
-                S.point = r, t.lineEnd()
-            }
-            function c() {
-                u(), S.point = l, S.lineEnd = s
-            }
-            function l(n, t) {
-                o(f = n, h = t), g = M, p = x, d = b, v = _, m = w, S.point = o
-            }
-            function s() {
-                e(M, x, y, b, _, w, g, p, f, d, v, m, i, t), S.lineEnd = a, a()
-            }
-            var f, h, g, p, d, v, m, y, M, x, b, _, w, S = {point: r, lineStart: u, lineEnd: a, polygonStart: function () {
-                    t.polygonStart(), S.lineStart = c
-                }, polygonEnd: function () {
-                    t.polygonEnd(), S.lineStart = u
-                }};
-            return S
-        }
-        function e(t, i, o, a, c, l, s, f, h, g, p, d, v, m) {
-            var y = s - t, M = f - i, x = y * y + M * M;
-            if (x > 4 * r && v--) {
-                var b = a + g, _ = c + p, w = l + d, S = Math.sqrt(b * b + _ * _ + w * w), E = Math.asin(w /= S), k = Math.abs(Math.abs(w) - 1) < $o ? (o + h) / 2 : Math.atan2(_, b), A = n(k, E), N = A[0], q = A[1], T = N - t, z = q - i, C = M * T - y * z;
-                (C * C / x > r || Math.abs((y * T + M * z) / x - .5) > .3 || u > a * g + c * p + l * d) && (e(t, i, o, a, c, l, N, q, k, b /= S, _ /= S, w, v, m), m.point(N, q), e(N, q, k, b, _, w, s, f, h, g, p, d, v, m))
-            }
-        }
-        var r = .5, u = Math.cos(30 * Jo), i = 16;
-        return t.precision = function (n) {
-            return arguments.length ? (i = (r = n * n) > 0 && 16, t) : Math.sqrt(r)
-        }, t
-    }
-    function Me(n) {
-        this.stream = n
-    }
-    function xe(n) {
-        var t = ye(function (t, e) {
-            return n([t * Go, e * Go])
-        });
-        return function (n) {
-            var e = new Me(n = t(n));
-            return e.point = function (t, e) {
-                n.point(t * Jo, e * Jo)
-            }, e
-        }
-    }
-    function be(n) {
-        return _e(function () {
-            return n
-        })()
-    }
-    function _e(n) {
-        function t(n) {
-            return n = a(n[0] * Jo, n[1] * Jo), [n[0] * h + c, l - n[1] * h]
-        }
-        function e(n) {
-            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Go, n[1] * Go]
-        }
-        function r() {
-            a = oe(o = Ee(m, y, M), i);
-            var n = i(d, v);
-            return c = g - n[0] * h, l = p + n[1] * h, u()
-        }
-        function u() {
-            return s && (s.valid = !1, s = null), t
-        }
-        var i, o, a, c, l, s, f = ye(function (n, t) {
-            return n = i(n, t), [n[0] * h + c, l - n[1] * h]
-        }), h = 150, g = 480, p = 250, d = 0, v = 0, m = 0, y = 0, M = 0, x = Xa, b = dt, _ = null, w = null;
-        return t.stream = function (n) {
-            return s && (s.valid = !1), s = we(o, x(f(b(n)))), s.valid = !0, s
-        }, t.clipAngle = function (n) {
-            return arguments.length ? (x = null == n ? (_ = n, Xa) : re((_ = +n) * Jo), u()) : _
-        }, t.clipExtent = function (n) {
-            return arguments.length ? (w = n, b = n ? ue(n[0][0], n[0][1], n[1][0], n[1][1]) : dt, u()) : w
-        }, t.scale = function (n) {
-            return arguments.length ? (h = +n, r()) : h
-        }, t.translate = function (n) {
-            return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]
-        }, t.center = function (n) {
-            return arguments.length ? (d = n[0] % 360 * Jo, v = n[1] % 360 * Jo, r()) : [d * Go, v * Go]
-        }, t.rotate = function (n) {
-            return arguments.length ? (m = n[0] % 360 * Jo, y = n[1] % 360 * Jo, M = n.length > 2 ? n[2] % 360 * Jo : 0, r()) : [m * Go, y * Go, M * Go]
-        }, vo.rebind(t, f, "precision"), function () {
-            return i = n.apply(this, arguments), t.invert = i.invert && e, r()
-        }
-    }
-    function we(n, t) {
-        var e = new Me(t);
-        return e.point = function (e, r) {
-            r = n(e * Jo, r * Jo), e = r[0], t.point(e > Bo ? e - 2 * Bo : -Bo > e ? e + 2 * Bo : e, r[1])
-        }, e
-    }
-    function Se(n, t) {
-        return[n, t]
-    }
-    function Ee(n, t, e) {
-        return n ? t || e ? oe(Ae(n), Ne(t, e)) : Ae(n) : t || e ? Ne(t, e) : Se
-    }
-    function ke(n) {
-        return function (t, e) {
-            return t += n, [t > Bo ? t - 2 * Bo : -Bo > t ? t + 2 * Bo : t, e]
-        }
-    }
-    function Ae(n) {
-        var t = ke(n);
-        return t.invert = ke(-n), t
-    }
-    function Ne(n, t) {
-        function e(n, t) {
-            var e = Math.cos(t), a = Math.cos(n) * e, c = Math.sin(n) * e, l = Math.sin(t), s = l * r + a * u;
-            return[Math.atan2(c * i - s * o, a * r - l * u), O(s * i + c * o)]
-        }
-        var r = Math.cos(n), u = Math.sin(n), i = Math.cos(t), o = Math.sin(t);
-        return e.invert = function (n, t) {
-            var e = Math.cos(t), a = Math.cos(n) * e, c = Math.sin(n) * e, l = Math.sin(t), s = l * i - c * o;
-            return[Math.atan2(c * i + l * o, a * r + s * u), O(s * r - a * u)]
-        }, e
-    }
-    function qe(n, t) {
-        var e = Math.cos(n), r = Math.sin(n);
-        return function (u, i, o, a) {
-            var c = o * t;
-            null != u ? (u = Te(e, u), i = Te(e, i), (o > 0 ? i > u : u > i) && (u += 2 * o * Bo)) : (u = n + 2 * o * Bo, i = n - .5 * c);
-            for (var l, s = u; o > 0?s > i:i > s; s -= c)
-                a.point((l = Pt([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])
-        }
-    }
-    function Te(n, t) {
-        var e = Ct(t);
-        e[0] -= n, Ft(e);
-        var r = P(-e[1]);
-        return((-e[2] < 0 ? -r : r) + 2 * Math.PI - $o) % (2 * Math.PI)
-    }
-    function ze(n, t, e) {
-        var r = vo.range(n, t - $o, e).concat(t);
-        return function (n) {
-            return r.map(function (t) {
-                return[n, t]
-            })
-        }
-    }
-    function Ce(n, t, e) {
-        var r = vo.range(n, t - $o, e).concat(t);
-        return function (n) {
-            return r.map(function (t) {
-                return[t, n]
-            })
-        }
-    }
-    function De(n) {
-        return n.source
-    }
-    function je(n) {
-        return n.target
-    }
-    function Le(n, t, e, r) {
-        var u = Math.cos(t), i = Math.sin(t), o = Math.cos(r), a = Math.sin(r), c = u * Math.cos(n), l = u * Math.sin(n), s = o * Math.cos(e), f = o * Math.sin(e), h = 2 * Math.asin(Math.sqrt(U(r - t) + u * o * U(e - n))), g = 1 / Math.sin(h), p = h ? function (n) {
-            var t = Math.sin(n *= h) * g, e = Math.sin(h - n) * g, r = e * c + t * s, u = e * l + t * f, o = e * i + t * a;
-            return[Math.atan2(u, r) * Go, Math.atan2(o, Math.sqrt(r * r + u * u)) * Go]
-        } : function () {
-            return[n * Go, t * Go]
-        };
-        return p.distance = h, p
-    }
-    function He() {
-        function n(n, u) {
-            var i = Math.sin(u *= Jo), o = Math.cos(u), a = Math.abs((n *= Jo) - t), c = Math.cos(a);
-            uc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o
-        }
-        var t, e, r;
-        ic.point = function (u, i) {
-            t = u * Jo, e = Math.sin(i *= Jo), r = Math.cos(i), ic.point = n
-        }, ic.lineEnd = function () {
-            ic.point = ic.lineEnd = c
-        }
-    }
-    function Fe(n, t) {
-        function e(t, e) {
-            var r = Math.cos(t), u = Math.cos(e), i = n(r * u);
-            return[i * u * Math.sin(t), i * Math.sin(e)]
-        }
-        return e.invert = function (n, e) {
-            var r = Math.sqrt(n * n + e * e), u = t(r), i = Math.sin(u), o = Math.cos(u);
-            return[Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]
-        }, e
-    }
-    function Pe(n, t) {
-        function e(n, t) {
-            var e = Math.abs(Math.abs(t) - Bo / 2) < $o ? 0 : o / Math.pow(u(t), i);
-            return[e * Math.sin(i * n), o - e * Math.cos(i * n)]
-        }
-        var r = Math.cos(n), u = function (n) {
-            return Math.tan(Bo / 4 + n / 2)
-        }, i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)), o = r * Math.pow(u(n), i) / i;
-        return i ? (e.invert = function (n, t) {
-            var e = o - t, r = F(i) * Math.sqrt(n * n + e * e);
-            return[Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Bo / 2]
-        }, e) : Re
-    }
-    function Oe(n, t) {
-        function e(n, t) {
-            var e = i - t;
-            return[e * Math.sin(u * n), i - e * Math.cos(u * n)]
-        }
-        var r = Math.cos(n), u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n), i = r / u + n;
-        return Math.abs(u) < $o ? Se : (e.invert = function (n, t) {
-            var e = i - t;
-            return[Math.atan2(n, e) / u, i - F(u) * Math.sqrt(n * n + e * e)]
-        }, e)
-    }
-    function Re(n, t) {
-        return[n, Math.log(Math.tan(Bo / 4 + t / 2))]
-    }
-    function Ye(n) {
-        var t, e = be(n), r = e.scale, u = e.translate, i = 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 = u.apply(e, arguments);
-            return n === e ? t ? e.clipExtent(null) : e : n
-        }, e.clipExtent = function (n) {
-            var o = i.apply(e, arguments);
-            if (o === e) {
-                if (t = null == n) {
-                    var a = Bo * r(), c = u();
-                    i([[c[0] - a, c[1] - a], [c[0] + a, c[1] + a]])
-                }
-            } else
-                t && (o = null);
-            return o
-        }, e.clipExtent(null)
-    }
-    function Ie(n, t) {
-        var e = Math.cos(t) * Math.sin(n);
-        return[Math.log((1 + e) / (1 - e)) / 2, Math.atan2(Math.tan(t), Math.cos(n))]
-    }
-    function Ue(n) {
-        function t(t) {
-            function o() {
-                l.push("M", i(n(s), a))
-            }
-            for (var c, l = [], s = [], f = -1, h = t.length, g = pt(e), p = pt(r); ++f < h; )
-                u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);
-            return s.length && o(), l.length ? l.join("") : null
-        }
-        var e = Ve, r = Ze, u = Zt, i = Xe, o = i.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 ? (u = n, t) : u
-        }, t.interpolate = function (n) {
-            return arguments.length ? (o = "function" == typeof n ? i = n : (i = fc.get(n) || Xe).key, t) : o
-        }, t.tension = function (n) {
-            return arguments.length ? (a = n, t) : a
-        }, t
-    }
-    function Ve(n) {
-        return n[0]
-    }
-    function Ze(n) {
-        return n[1]
-    }
-    function Xe(n) {
-        return n.join("L")
-    }
-    function Be(n) {
-        return Xe(n) + "Z"
-    }
-    function $e(n) {
-        for (var t = 0, e = n.length, r = n[0], u = [r[0], ",", r[1]]; ++t < e; )
-            u.push("H", (r[0] + (r = n[t])[0]) / 2, "V", r[1]);
-        return e > 1 && u.push("H", r[0]), u.join("")
-    }
-    function We(n) {
-        for (var t = 0, e = n.length, r = n[0], u = [r[0], ",", r[1]]; ++t < e; )
-            u.push("V", (r = n[t])[1], "H", r[0]);
-        return u.join("")
-    }
-    function Je(n) {
-        for (var t = 0, e = n.length, r = n[0], u = [r[0], ",", r[1]]; ++t < e; )
-            u.push("H", (r = n[t])[0], "V", r[1]);
-        return u.join("")
-    }
-    function Ge(n, t) {
-        return n.length < 4 ? Xe(n) : n[1] + nr(n.slice(1, n.length - 1), tr(n, t))
-    }
-    function Ke(n, t) {
-        return n.length < 3 ? Xe(n) : n[0] + nr((n.push(n[0]), n), tr([n[n.length - 2]].concat(n, [n[1]]), t))
-    }
-    function Qe(n, t) {
-        return n.length < 3 ? Xe(n) : n[0] + nr(n, tr(n, t))
-    }
-    function nr(n, t) {
-        if (t.length < 1 || n.length != t.length && n.length != t.length + 2)
-            return Xe(n);
-        var e = n.length != t.length, r = "", u = n[0], i = n[1], o = t[0], a = o, c = 1;
-        if (e && (r += "Q" + (i[0] - 2 * o[0] / 3) + "," + (i[1] - 2 * o[1] / 3) + "," + i[0] + "," + i[1], u = n[1], c = 2), t.length > 1) {
-            a = t[1], i = n[c], c++, r += "C" + (u[0] + o[0]) + "," + (u[1] + o[1]) + "," + (i[0] - a[0]) + "," + (i[1] - a[1]) + "," + i[0] + "," + i[1];
-            for (var l = 2; l < t.length; l++, c++)
-                i = n[c], a = t[l], r += "S" + (i[0] - a[0]) + "," + (i[1] - a[1]) + "," + i[0] + "," + i[1]
-        }
-        if (e) {
-            var s = n[c];
-            r += "Q" + (i[0] + 2 * a[0] / 3) + "," + (i[1] + 2 * a[1] / 3) + "," + s[0] + "," + s[1]
-        }
-        return r
-    }
-    function tr(n, t) {
-        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c; )
-            e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);
-        return r
-    }
-    function er(n) {
-        if (n.length < 3)
-            return Xe(n);
-        var t = 1, e = n.length, r = n[0], u = r[0], i = r[1], o = [u, u, u, (r = n[1])[0]], a = [i, i, i, r[1]], c = [u, ",", i, "L", or(pc, o), ",", or(pc, a)];
-        for (n.push(n[e - 1]); ++t <= e; )
-            r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), ar(c, o, a);
-        return n.pop(), c.push("L", r), c.join("")
-    }
-    function rr(n) {
-        if (n.length < 4)
-            return Xe(n);
-        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3; )
-            t = n[r], i.push(t[0]), o.push(t[1]);
-        for (e.push(or(pc, i) + "," + or(pc, o)), --r; ++r < u; )
-            t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), ar(e, i, o);
-        return e.join("")
-    }
-    function ur(n) {
-        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4; )
-            e = n[r % u], o.push(e[0]), a.push(e[1]);
-        for (t = [or(pc, o), ",", or(pc, a)], --r; ++r < i; )
-            e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), ar(t, o, a);
-        return t.join("")
-    }
-    function ir(n, t) {
-        var e = n.length - 1;
-        if (e)
-            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e; )
-                r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);
-        return er(n)
-    }
-    function or(n, t) {
-        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]
-    }
-    function ar(n, t, e) {
-        n.push("C", or(hc, t), ",", or(hc, e), ",", or(gc, t), ",", or(gc, e), ",", or(pc, t), ",", or(pc, e))
-    }
-    function cr(n, t) {
-        return(t[1] - n[1]) / (t[0] - n[0])
-    }
-    function lr(n) {
-        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = cr(u, i); ++t < e; )
-            r[t] = (o + (o = cr(u = i, i = n[t + 1]))) / 2;
-        return r[t] = o, r
-    }
-    function sr(n) {
-        for (var t, e, r, u, i = [], o = lr(n), a = -1, c = n.length - 1; ++a < c; )
-            t = cr(n[a], n[a + 1]), Math.abs(t) < 1e-6 ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));
-        for (a = - 1; ++a <= c; )
-            u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);
-        return i
-    }
-    function fr(n) {
-        return n.length < 3 ? Xe(n) : n[0] + nr(n, sr(n))
-    }
-    function hr(n, t, e, r) {
-        var u, i, o, a, c, l, s;
-        return u = r[n], i = u[0], o = u[1], u = r[t], a = u[0], c = u[1], u = r[e], l = u[0], s = u[1], (s - o) * (a - i) - (c - o) * (l - i) > 0
-    }
-    function gr(n, t, e) {
-        return(e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])
-    }
-    function pr(n, t, e, r) {
-        var u = n[0], i = e[0], o = t[0] - u, a = r[0] - i, c = n[1], l = e[1], s = t[1] - c, f = r[1] - l, h = (a * (c - l) - f * (u - i)) / (f * o - a * s);
-        return[u + h * o, c + h * s]
-    }
-    function dr(n) {
-        var t = n[0], e = n[n.length - 1];
-        return!(t[0] - e[0] || t[1] - e[1])
-    }
-    function vr(n, t) {
-        var e = {list: n.map(function (n, t) {
-                return{index: t, x: n[0], y: n[1]}
-            }).sort(function (n, t) {
-                return n.y < t.y ? -1 : n.y > t.y ? 1 : n.x < t.x ? -1 : n.x > t.x ? 1 : 0
-            }), bottomSite: null}, r = {list: [], leftEnd: null, rightEnd: null, init: function () {
-                r.leftEnd = r.createHalfEdge(null, "l"), r.rightEnd = r.createHalfEdge(null, "l"), r.leftEnd.r = r.rightEnd, r.rightEnd.l = r.leftEnd, r.list.unshift(r.leftEnd, r.rightEnd)
-            }, createHalfEdge: function (n, t) {
-                return{edge: n, side: t, vertex: null, l: null, r: null}
-            }, insert: function (n, t) {
-                t.l = n, t.r = n.r, n.r.l = t, n.r = t
-            }, leftBound: function (n) {
-                var t = r.leftEnd;
-                do
-                    t = t.r;
-                while (t != r.rightEnd && u.rightOf(t, n));
-                return t = t.l
-            }, del: function (n) {
-                n.l.r = n.r, n.r.l = n.l, n.edge = null
-            }, right: function (n) {
-                return n.r
-            }, left: function (n) {
-                return n.l
-            }, leftRegion: function (n) {
-                return null == n.edge ? e.bottomSite : n.edge.region[n.side]
-            }, rightRegion: function (n) {
-                return null == n.edge ? e.bottomSite : n.edge.region[vc[n.side]]
-            }}, u = {bisect: function (n, t) {
-                var e = {region: {l: n, r: t}, ep: {l: null, r: null}}, r = t.x - n.x, u = t.y - n.y, i = r > 0 ? r : -r, o = u > 0 ? u : -u;
-                return e.c = n.x * r + n.y * u + .5 * (r * r + u * u), i > o ? (e.a = 1, e.b = u / r, e.c /= r) : (e.b = 1, e.a = r / u, e.c /= u), e
-            }, intersect: function (n, t) {
-                var e = n.edge, r = t.edge;
-                if (!e || !r || e.region.r == r.region.r)
-                    return null;
-                var u = e.a * r.b - e.b * r.a;
-                if (Math.abs(u) < 1e-10)
-                    return null;
-                var i, o, a = (e.c * r.b - r.c * e.b) / u, c = (r.c * e.a - e.c * r.a) / u, l = e.region.r, s = r.region.r;
-                l.y < s.y || l.y == s.y && l.x < s.x ? (i = n, o = e) : (i = t, o = r);
-                var f = a >= o.region.r.x;
-                return f && "l" === i.side || !f && "r" === i.side ? null : {x: a, y: c}
-            }, rightOf: function (n, t) {
-                var e = n.edge, r = e.region.r, u = t.x > r.x;
-                if (u && "l" === n.side)
-                    return 1;
-                if (!u && "r" === n.side)
-                    return 0;
-                if (1 === e.a) {
-                    var i = t.y - r.y, o = t.x - r.x, a = 0, c = 0;
-                    if (!u && e.b < 0 || u && e.b >= 0 ? c = a = i >= e.b * o : (c = t.x + t.y * e.b > e.c, e.b < 0 && (c = !c), c || (a = 1)), !a) {
-                        var l = r.x - e.region.l.x;
-                        c = e.b * (o * o - i * i) < l * i * (1 + 2 * o / l + e.b * e.b), e.b < 0 && (c = !c)
-                    }
-                } else {
-                    var s = e.c - e.a * t.x, f = t.y - s, h = t.x - r.x, g = s - r.y;
-                    c = f * f > h * h + g * g
-                }
-                return"l" === n.side ? c : !c
-            }, endPoint: function (n, e, r) {
-                n.ep[e] = r, n.ep[vc[e]] && t(n)
-            }, distance: function (n, t) {
-                var e = n.x - t.x, r = n.y - t.y;
-                return Math.sqrt(e * e + r * r)
-            }}, i = {list: [], insert: function (n, t, e) {
-                n.vertex = t, n.ystar = t.y + e;
-                for (var r = 0, u = i.list, o = u.length; o > r; r++) {
-                    var a = u[r];
-                    if (!(n.ystar > a.ystar || n.ystar == a.ystar && t.x > a.vertex.x))
-                        break
-                }
-                u.splice(r, 0, n)
-            }, del: function (n) {
-                for (var t = 0, e = i.list, r = e.length; r > t && e[t] != n; ++t)
-                    ;
-                e.splice(t, 1)
-            }, empty: function () {
-                return 0 === i.list.length
-            }, nextEvent: function (n) {
-                for (var t = 0, e = i.list, r = e.length; r > t; ++t)
-                    if (e[t] == n)
-                        return e[t + 1];
-                return null
-            }, min: function () {
-                var n = i.list[0];
-                return{x: n.vertex.x, y: n.ystar}
-            }, extractMin: function () {
-                return i.list.shift()
-            }};
-        r.init(), e.bottomSite = e.list.shift();
-        for (var o, a, c, l, s, f, h, g, p, d, v, m, y, M = e.list.shift(); ; )
-            if (i.empty() || (o = i.min()), M && (i.empty() || M.y < o.y || M.y == o.y && M.x < o.x))
-                a = r.leftBound(M), c = r.right(a), h = r.rightRegion(a), m = u.bisect(h, M), f = r.createHalfEdge(m, "l"), r.insert(a, f), d = u.intersect(a, f), d && (i.del(a), i.insert(a, d, u.distance(d, M))), a = f, f = r.createHalfEdge(m, "r"), r.insert(a, f), d = u.intersect(f, c), d && i.insert(f, d, u.distance(d, M)), M = e.list.shift();
-            else {
-                if (i.empty())
-                    break;
-                a = i.extractMin(), l = r.left(a), c = r.right(a), s = r.right(c), h = r.leftRegion(a), g = r.rightRegion(c), v = a.vertex, u.endPoint(a.edge, a.side, v), u.endPoint(c.edge, c.side, v), r.del(a), i.del(c), r.del(c), y = "l", h.y > g.y && (p = h, h = g, g = p, y = "r"), m = u.bisect(h, g), f = r.createHalfEdge(m, y), r.insert(l, f), u.endPoint(m, vc[y], v), d = u.intersect(l, f), d && (i.del(l), i.insert(l, d, u.distance(d, h))), d = u.intersect(f, s), d && i.insert(f, d, u.distance(d, h))
-            }
-        for (a = r.right(r.leftEnd); a != r.rightEnd; a = r.right(a))
-            t(a.edge)
-    }
-    function mr(n) {
-        return n.x
-    }
-    function yr(n) {
-        return n.y
-    }
-    function Mr() {
-        return{leaf: !0, nodes: [], point: null, x: null, y: null}
-    }
-    function xr(n, t, e, r, u, i) {
-        if (!n(t, e, r, u, i)) {
-            var o = .5 * (e + u), a = .5 * (r + i), c = t.nodes;
-            c[0] && xr(n, c[0], e, r, o, a), c[1] && xr(n, c[1], o, r, u, a), c[2] && xr(n, c[2], e, a, o, i), c[3] && xr(n, c[3], o, a, u, i)
-        }
-    }
-    function br(n, t) {
-        n = vo.rgb(n), t = vo.rgb(t);
-        var e = n.r, r = n.g, u = n.b, i = t.r - e, o = t.g - r, a = t.b - u;
-        return function (n) {
-            return"#" + ct(Math.round(e + i * n)) + ct(Math.round(r + o * n)) + ct(Math.round(u + a * n))
-        }
-    }
-    function _r(n, t) {
-        var e, r = {}, u = {};
-        for (e in n)
-            e in t ? r[e] = Er(n[e], t[e]) : u[e] = n[e];
-        for (e in t)
-            e in n || (u[e] = t[e]);
-        return function (n) {
-            for (e in r)
-                u[e] = r[e](n);
-            return u
-        }
-    }
-    function wr(n, t) {
-        return t -= n = +n, function (e) {
-            return n + t * e
-        }
-    }
-    function Sr(n, t) {
-        var e, r, u, i, o, a = 0, c = 0, l = [], s = [];
-        for (n += "", t += "", mc.lastIndex = 0, r = 0; e = mc.exec(t); ++r)
-            e.index && l.push(t.substring(a, c = e.index)), s.push({i: l.length, x: e[0]}), l.push(null), a = mc.lastIndex;
-        for (a < t.length && l.push(t.substring(a)), r = 0, i = s.length; (e = mc.exec(n)) && i > r; ++r)
-            if (o = s[r], o.x == e[0]) {
-                if (o.i)
-                    if (null == l[o.i + 1])
-                        for (l[o.i - 1] += o.x, l.splice(o.i, 1), u = r + 1; i > u; ++u)
-                            s[u].i--;
-                    else
-                        for (l[o.i - 1] += o.x + l[o.i + 1], l.splice(o.i, 2), u = r + 1; i > u; ++u)
-                            s[u].i -= 2;
-                else if (null == l[o.i + 1])
-                    l[o.i] = o.x;
-                else
-                    for (l[o.i] = o.x + l[o.i + 1], l.splice(o.i + 1, 1), u = r + 1; i > u; ++u)
-                        s[u].i--;
-                s.splice(r, 1), i--, r--
-            } else
-                o.x = wr(parseFloat(e[0]), parseFloat(o.x));
-        for (; i > r; )
-            o = s.pop(), null == l[o.i + 1] ? l[o.i] = o.x : (l[o.i] = o.x + l[o.i + 1], l.splice(o.i + 1, 1)), i--;
-        return 1 === l.length ? null == l[0] ? (o = s[0].x, function (n) {
-            return o(n) + ""
-        }) : function () {
-            return t
-        } : function (n) {
-            for (r = 0; i > r; ++r)
-                l[(o = s[r]).i] = o.x(n);
-            return l.join("")
-        }
-    }
-    function Er(n, t) {
-        for (var e, r = vo.interpolators.length; --r >= 0 && !(e = vo.interpolators[r](n, t)); )
-            ;
-        return e
-    }
-    function kr(n, t) {
-        var e, r = [], u = [], i = n.length, o = t.length, a = Math.min(n.length, t.length);
-        for (e = 0; a > e; ++e)
-            r.push(Er(n[e], t[e]));
-        for (; i > e; ++e)
-            u[e] = n[e];
-        for (; o > e; ++e)
-            u[e] = t[e];
-        return function (n) {
-            for (e = 0; a > e; ++e)
-                u[e] = r[e](n);
-            return u
-        }
-    }
-    function Ar(n) {
-        return function (t) {
-            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)
-        }
-    }
-    function Nr(n) {
-        return function (t) {
-            return 1 - n(1 - t)
-        }
-    }
-    function qr(n) {
-        return function (t) {
-            return.5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))
-        }
-    }
-    function Tr(n) {
-        return n * n
-    }
-    function zr(n) {
-        return n * n * n
-    }
-    function Cr(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 Dr(n) {
-        return function (t) {
-            return Math.pow(t, n)
-        }
-    }
-    function jr(n) {
-        return 1 - Math.cos(n * Bo / 2)
-    }
-    function Lr(n) {
-        return Math.pow(2, 10 * (n - 1))
-    }
-    function Hr(n) {
-        return 1 - Math.sqrt(1 - n * n)
-    }
-    function Fr(n, t) {
-        var e;
-        return arguments.length < 2 && (t = .45), arguments.length ? e = t / (2 * Bo) * Math.asin(1 / n) : (n = 1, e = t / 4), function (r) {
-            return 1 + n * Math.pow(2, 10 * -r) * Math.sin(2 * (r - e) * Bo / t)
-        }
-    }
-    function Pr(n) {
-        return n || (n = 1.70158), function (t) {
-            return t * t * ((n + 1) * t - n)
-        }
-    }
-    function Or(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 = vo.hcl(n), t = vo.hcl(t);
-        var e = n.h, r = n.c, u = n.l, i = t.h - e, o = t.c - r, a = t.l - u;
-        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360), function (n) {
-            return J(e + i * n, r + o * n, u + a * n) + ""
-        }
-    }
-    function Yr(n, t) {
-        n = vo.hsl(n), t = vo.hsl(t);
-        var e = n.h, r = n.s, u = n.l, i = t.h - e, o = t.s - r, a = t.l - u;
-        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360), function (n) {
-            return B(e + i * n, r + o * n, u + a * n) + ""
-        }
-    }
-    function Ir(n, t) {
-        n = vo.lab(n), t = vo.lab(t);
-        var e = n.l, r = n.a, u = n.b, i = t.l - e, o = t.a - r, a = t.b - u;
-        return function (n) {
-            return Q(e + i * n, r + o * n, u + a * n) + ""
-        }
-    }
-    function Ur(n, t) {
-        return t -= n, function (e) {
-            return Math.round(n + t * e)
-        }
-    }
-    function Vr(n) {
-        var t = [n.a, n.b], e = [n.c, n.d], r = Xr(t), u = Zr(t, e), i = Xr(Br(e, t, -u)) || 0;
-        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Go, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Go : 0
-    }
-    function Zr(n, t) {
-        return n[0] * t[0] + n[1] * t[1]
-    }
-    function Xr(n) {
-        var t = Math.sqrt(Zr(n, n));
-        return t && (n[0] /= t, n[1] /= t), t
-    }
-    function Br(n, t, e) {
-        return n[0] += e * t[0], n[1] += e * t[1], n
-    }
-    function $r(n, t) {
-        var e, r = [], u = [], i = vo.transform(n), o = vo.transform(t), a = i.translate, c = o.translate, l = i.rotate, s = o.rotate, f = i.skew, h = o.skew, g = i.scale, p = o.scale;
-        return a[0] != c[0] || a[1] != c[1] ? (r.push("translate(", null, ",", null, ")"), u.push({i: 1, x: wr(a[0], c[0])}, {i: 3, x: wr(a[1], c[1])})) : c[0] || c[1] ? r.push("translate(" + c + ")") : r.push(""), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({i: r.push(r.pop() + "rotate(", null, ")") - 2, x: wr(l, s)})) : s && r.push(r.pop() + "rotate(" + s + ")"), f != h ? u.push({i: r.push(r.pop() + "skewX(", null, ")") - 2, x: wr(f, h)}) : h && r.push(r.pop() + "skewX(" + h + ")"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + "scale(", null, ",", null, ")"), u.push({i: e - 4, x: wr(g[0], p[0])}, {i: e - 2, x: wr(g[1], p[1])})) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + "scale(" + p + ")"), e = u.length, function (n) {
-            for (var t, i = -1; ++i < e; )
-                r[(t = u[i]).i] = t.x(n);
-            return r.join("")
-        }
-    }
-    function Wr(n, t) {
-        return t = t - (n = +n) ? 1 / (t - n) : 0, function (e) {
-            return(e - n) * t
-        }
-    }
-    function Jr(n, t) {
-        return t = t - (n = +n) ? 1 / (t - n) : 0, function (e) {
-            return Math.max(0, Math.min(1, (e - n) * t))
-        }
-    }
-    function Gr(n) {
-        for (var t = n.source, e = n.target, r = Qr(t, e), u = [t]; t !== r; )
-            t = t.parent, u.push(t);
-        for (var i = u.length; e !== r; )
-            u.splice(i, 0, e), e = e.parent;
-        return u
-    }
-    function Kr(n) {
-        for (var t = [], e = n.parent; null != e; )
-            t.push(n), n = e, e = e.parent;
-        return t.push(n), t
-    }
-    function Qr(n, t) {
-        if (n === t)
-            return n;
-        for (var e = Kr(n), r = Kr(t), u = e.pop(), i = r.pop(), o = null; u === i; )
-            o = u, u = e.pop(), i = r.pop();
-        return o
-    }
-    function nu(n) {
-        n.fixed |= 2
-    }
-    function tu(n) {
-        n.fixed &= -7
-    }
-    function eu(n) {
-        n.fixed |= 4, n.px = n.x, n.py = n.y
-    }
-    function ru(n) {
-        n.fixed &= -5
-    }
-    function uu(n, t, e) {
-        var r = 0, u = 0;
-        if (n.charge = 0, !n.leaf)
-            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a; )
-                i = o[c], null != i && (uu(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);
-        if (n.point) {
-            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);
-            var l = t * e[n.point.index];
-            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y
-        }
-        n.cx = r / n.charge, n.cy = u / n.charge
-    }
-    function iu(n, t) {
-        return vo.rebind(n, t, "sort", "children", "value"), n.nodes = n, n.links = lu, n
-    }
-    function ou(n) {
-        return n.children
-    }
-    function au(n) {
-        return n.value
-    }
-    function cu(n, t) {
-        return t.value - n.value
-    }
-    function lu(n) {
-        return vo.merge(n.map(function (n) {
-            return(n.children || []).map(function (t) {
-                return{source: n, target: t}
-            })
-        }))
-    }
-    function su(n) {
-        return n.x
-    }
-    function fu(n) {
-        return n.y
-    }
-    function hu(n, t, e) {
-        n.y0 = t, n.y = e
-    }
-    function gu(n) {
-        return vo.range(n.length)
-    }
-    function pu(n) {
-        for (var t = -1, e = n[0].length, r = []; ++t < e; )
-            r[t] = 0;
-        return r
-    }
-    function du(n) {
-        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)
-            (t = n[e][1]) > u && (r = e, u = t);
-        return r
-    }
-    function vu(n) {
-        return n.reduce(mu, 0)
-    }
-    function mu(n, t) {
-        return n + t[1]
-    }
-    function yu(n, t) {
-        return Mu(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))
-    }
-    function Mu(n, t) {
-        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t; )
-            i[e] = u * e + r;
-        return i
-    }
-    function xu(n) {
-        return[vo.min(n), vo.max(n)]
-    }
-    function bu(n, t) {
-        return n.parent == t.parent ? 1 : 2
-    }
-    function _u(n) {
-        var t = n.children;
-        return t && t.length ? t[0] : n._tree.thread
-    }
-    function wu(n) {
-        var t, e = n.children;
-        return e && (t = e.length) ? e[t - 1] : n._tree.thread
-    }
-    function Su(n, t) {
-        var e = n.children;
-        if (e && (u = e.length))
-            for (var r, u, i = -1; ++i < u; )
-                t(r = Su(e[i], t), n) > 0 && (n = r);
-        return n
-    }
-    function Eu(n, t) {
-        return n.x - t.x
-    }
-    function ku(n, t) {
-        return t.x - n.x
-    }
-    function Au(n, t) {
-        return n.depth - t.depth
-    }
-    function Nu(n, t) {
-        function e(n, r) {
-            var u = n.children;
-            if (u && (o = u.length))
-                for (var i, o, a = null, c = -1; ++c < o; )
-                    i = u[c], e(i, a), a = i;
-            t(n, r)
-        }
-        e(n, null)
-    }
-    function qu(n) {
-        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0; )
-            t = u[i]._tree, t.prelim += e, t.mod += e, e += t.shift + (r += t.change)
-    }
-    function Tu(n, t, e) {
-        n = n._tree, t = t._tree;
-        var r = e / (t.number - n.number);
-        n.change += r, t.change -= r, t.shift += e, t.prelim += e, t.mod += e
-    }
-    function zu(n, t, e) {
-        return n._tree.ancestor.parent == t.parent ? n._tree.ancestor : e
-    }
-    function Cu(n, t) {
-        return n.value - t.value
-    }
-    function Du(n, t) {
-        var e = n._pack_next;
-        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t
-    }
-    function ju(n, t) {
-        n._pack_next = t, t._pack_prev = n
-    }
-    function Lu(n, t) {
-        var e = t.x - n.x, r = t.y - n.y, u = n.r + t.r;
-        return.999 * u * u > e * e + r * r
-    }
-    function Hu(n) {
-        function t(n) {
-            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)
-        }
-        if ((e = n.children) && (l = e.length)) {
-            var e, r, u, i, o, a, c, l, s = 1 / 0, f = -1 / 0, h = 1 / 0, g = -1 / 0;
-            if (e.forEach(Fu), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))
-                for (i = e[2], Ru(r, u, i), t(i), Du(r, i), r._pack_prev = i, Du(i, u), u = r._pack_next, o = 3; l > o; o++) {
-                    Ru(r, u, i = e[o]);
-                    var p = 0, d = 1, v = 1;
-                    for (a = u._pack_next; a !== u; a = a._pack_next, d++)
-                        if (Lu(a, i)) {
-                            p = 1;
-                            break
-                        }
-                    if (1 == p)
-                        for (c = r._pack_prev; c !== a._pack_prev && !Lu(c, i); c = c._pack_prev, v++)
-                            ;
-                    p ? (v > d || d == v && u.r < r.r ? ju(r, u = a) : ju(r = c, u), o--) : (Du(r, i), u = i, t(i))
-                }
-            var m = (s + f) / 2, y = (h + g) / 2, M = 0;
-            for (o = 0; l > o; o++)
-                i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));
-            n.r = M, e.forEach(Pu)
-        }
-    }
-    function Fu(n) {
-        n._pack_next = n._pack_prev = n
-    }
-    function Pu(n) {
-        delete n._pack_next, delete n._pack_prev
-    }
-    function Ou(n, t, e, r) {
-        var u = n.children;
-        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)
-            for (var i = -1, o = u.length; ++i < o; )
-                Ou(u[i], t, e, r)
-    }
-    function Ru(n, t, e) {
-        var r = n.r + e.r, u = t.x - n.x, i = t.y - n.y;
-        if (r && (u || i)) {
-            var o = t.r + e.r, a = u * u + i * i;
-            o *= o, r *= r;
-            var c = .5 + (r - o) / (2 * a), l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);
-            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u
-        } else
-            e.x = n.x + r, e.y = n.y
-    }
-    function Yu(n) {
-        return 1 + vo.max(n, function (n) {
-            return n.y
-        })
-    }
-    function Iu(n) {
-        return n.reduce(function (n, t) {
-            return n + t.x
-        }, 0) / n.length
-    }
-    function Uu(n) {
-        var t = n.children;
-        return t && t.length ? Uu(t[0]) : n
-    }
-    function Vu(n) {
-        var t, e = n.children;
-        return e && (t = e.length) ? Vu(e[t - 1]) : n
-    }
-    function Zu(n) {
-        return{x: n.x, y: n.y, dx: n.dx, dy: n.dy}
-    }
-    function Xu(n, t) {
-        var e = n.x + t[3], r = n.y + t[0], u = n.dx - t[1] - t[3], i = n.dy - t[0] - t[2];
-        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {x: e, y: r, dx: u, dy: i}
-    }
-    function Bu(n) {
-        var t = n[0], e = n[n.length - 1];
-        return e > t ? [t, e] : [e, t]
-    }
-    function $u(n) {
-        return n.rangeExtent ? n.rangeExtent() : Bu(n.range())
-    }
-    function Wu(n, t, e, r) {
-        var u = e(n[0], n[1]), i = r(t[0], t[1]);
-        return function (n) {
-            return i(u(n))
-        }
-    }
-    function Ju(n, t) {
-        var e, r = 0, u = n.length - 1, i = n[r], o = n[u];
-        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n
-    }
-    function Gu(n) {
-        return n ? {floor: function (t) {
-                return Math.floor(t / n) * n
-            }, ceil: function (t) {
-                return Math.ceil(t / n) * n
-            }} : Ac
-    }
-    function Ku(n, t, e, r) {
-        var u = [], i = [], 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; )
-            u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));
-        return function (t) {
-            var e = vo.bisect(n, t, 1, a) - 1;
-            return i[e](u[e](t))
-        }
-    }
-    function Qu(n, t, e, r) {
-        function u() {
-            var u = Math.min(n.length, t.length) > 2 ? Ku : Wu, c = r ? Jr : Wr;
-            return o = u(n, t, c, e), a = u(t, n, c, Er), i
-        }
-        function i(n) {
-            return o(n)
-        }
-        var o, a;
-        return i.invert = function (n) {
-            return a(n)
-        }, i.domain = function (t) {
-            return arguments.length ? (n = t.map(Number), u()) : n
-        }, i.range = function (n) {
-            return arguments.length ? (t = n, u()) : t
-        }, i.rangeRound = function (n) {
-            return i.range(n).interpolate(Ur)
-        }, i.clamp = function (n) {
-            return arguments.length ? (r = n, u()) : r
-        }, i.interpolate = function (n) {
-            return arguments.length ? (e = n, u()) : e
-        }, i.ticks = function (t) {
-            return ri(n, t)
-        }, i.tickFormat = function (t, e) {
-            return ui(n, t, e)
-        }, i.nice = function (t) {
-            return ti(n, t), u()
-        }, i.copy = function () {
-            return Qu(n, t, e, r)
-        }, u()
-    }
-    function ni(n, t) {
-        return vo.rebind(n, t, "range", "rangeRound", "interpolate", "clamp")
-    }
-    function ti(n, t) {
-        return Ju(n, Gu(ei(n, t)[2]))
-    }
-    function ei(n, t) {
-        null == t && (t = 10);
-        var e = Bu(n), r = e[1] - e[0], u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)), i = t / r * u;
-        return.15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e
-    }
-    function ri(n, t) {
-        return vo.range.apply(vo, ei(n, t))
-    }
-    function ui(n, t, e) {
-        var r = -Math.floor(Math.log(ei(n, t)[2]) / Math.LN10 + .01);
-        return vo.format(e ? e.replace(Sa, function (n, t, e, u, i, o, a, c, l, s) {
-            return[t, e, u, i, o, a, c, l || "." + (r - 2 * ("%" === s)), s].join("")
-        }) : ",." + r + "f")
-    }
-    function ii(n, t, e, r) {
-        function u(n) {
-            return(e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)
-        }
-        function i(n) {
-            return e ? Math.pow(t, n) : -Math.pow(t, -n)
-        }
-        function o(t) {
-            return n(u(t))
-        }
-        return o.invert = function (t) {
-            return i(n.invert(t))
-        }, o.domain = function (t) {
-            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r
-        }, o.base = function (e) {
-            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t
-        }, o.nice = function () {
-            var t = Ju(r.map(u), e ? Math : qc);
-            return n.domain(t), r = t.map(i), o
-        }, o.ticks = function () {
-            var n = Bu(r), o = [], a = n[0], c = n[1], l = Math.floor(u(a)), s = Math.ceil(u(c)), f = t % 1 ? 2 : t;
-            if (isFinite(s - l)) {
-                if (e) {
-                    for (; s > l; l++)
-                        for (var h = 1; f > h; h++)
-                            o.push(i(l) * h);
-                    o.push(i(l))
-                } else
-                    for (o.push(i(l)); l++ < s; )
-                        for (var h = f - 1; h > 0; h--)
-                            o.push(i(l) * h);
-                for (l = 0; o[l] < a; l++)
-                    ;
-                for (s = o.length; o[s - 1] > c; s--)
-                    ;
-                o = o.slice(l, s)
-            }
-            return o
-        }, o.tickFormat = function (n, t) {
-            if (!arguments.length)
-                return Nc;
-            arguments.length < 2 ? t = Nc : "function" != typeof t && (t = vo.format(t));
-            var r, a = Math.max(.1, n / o.ticks().length), c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);
-            return function (n) {
-                return n / i(c(u(n) + r)) <= a ? t(n) : ""
-            }
-        }, o.copy = function () {
-            return ii(n.copy(), t, e, r)
-        }, ni(o, n)
-    }
-    function oi(n, t, e) {
-        function r(t) {
-            return n(u(t))
-        }
-        var u = ai(t), i = ai(1 / t);
-        return r.invert = function (t) {
-            return i(n.invert(t))
-        }, r.domain = function (t) {
-            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e
-        }, r.ticks = function (n) {
-            return ri(e, n)
-        }, r.tickFormat = function (n, t) {
-            return ui(e, n, t)
-        }, r.nice = function (n) {
-            return r.domain(ti(e, n))
-        }, r.exponent = function (o) {
-            return arguments.length ? (u = ai(t = o), i = ai(1 / t), n.domain(e.map(u)), r) : t
-        }, r.copy = function () {
-            return oi(n.copy(), t, e)
-        }, ni(r, n)
-    }
-    function ai(n) {
-        return function (t) {
-            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)
-        }
-    }
-    function ci(n, t) {
-        function e(t) {
-            return o[((i.get(t) || i.set(t, n.push(t))) - 1) % o.length]
-        }
-        function r(t, e) {
-            return vo.range(n.length).map(function (n) {
-                return t + e * n
-            })
-        }
-        var i, o, a;
-        return e.domain = function (r) {
-            if (!arguments.length)
-                return n;
-            n = [], i = new u;
-            for (var o, a = -1, c = r.length; ++a < c; )
-                i.has(o = r[a]) || i.set(o, n.push(o));
-            return e[t.t].apply(e, t.a)
-        }, e.range = function (n) {
-            return arguments.length ? (o = n, a = 0, t = {t: "range", a: arguments}, e) : o
-        }, e.rangePoints = function (u, i) {
-            arguments.length < 2 && (i = 0);
-            var c = u[0], l = u[1], s = (l - c) / (Math.max(1, n.length - 1) + i);
-            return o = r(n.length < 2 ? (c + l) / 2 : c + s * i / 2, s), a = 0, t = {t: "rangePoints", a: arguments}, e
-        }, e.rangeBands = function (u, i, c) {
-            arguments.length < 2 && (i = 0), arguments.length < 3 && (c = i);
-            var l = u[1] < u[0], s = u[l - 0], f = u[1 - l], h = (f - s) / (n.length - i + 2 * c);
-            return o = r(s + h * c, h), l && o.reverse(), a = h * (1 - i), t = {t: "rangeBands", a: arguments}, e
-        }, e.rangeRoundBands = function (u, i, c) {
-            arguments.length < 2 && (i = 0), arguments.length < 3 && (c = i);
-            var l = u[1] < u[0], s = u[l - 0], f = u[1 - l], h = Math.floor((f - s) / (n.length - i + 2 * c)), g = f - s - (n.length - i) * h;
-            return o = r(s + Math.round(g / 2), h), l && o.reverse(), a = Math.round(h * (1 - i)), t = {t: "rangeRoundBands", a: arguments}, e
-        }, e.rangeBand = function () {
-            return a
-        }, e.rangeExtent = function () {
-            return Bu(t.a[0])
-        }, e.copy = function () {
-            return ci(n, t)
-        }, e.domain(n)
-    }
-    function li(n, t) {
-        function e() {
-            var e = 0, i = t.length;
-            for (u = []; ++e < i; )
-                u[e - 1] = vo.quantile(n, e / i);
-            return r
-        }
-        function r(n) {
-            return isNaN(n = +n) ? void 0 : t[vo.bisect(u, n)]
-        }
-        var u;
-        return r.domain = function (t) {
-            return arguments.length ? (n = t.filter(function (n) {
-                return!isNaN(n)
-            }).sort(vo.ascending), e()) : n
-        }, r.range = function (n) {
-            return arguments.length ? (t = n, e()) : t
-        }, r.quantiles = function () {
-            return u
-        }, r.invertExtent = function (e) {
-            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? u[e - 1] : n[0], e < u.length ? u[e] : n[n.length - 1]]
-        }, r.copy = function () {
-            return li(n, t)
-        }, e()
-    }
-    function si(n, t, e) {
-        function r(t) {
-          

<TRUNCATED>