From 588d7e23df6faed0f844f483460be48ca6eead07 Mon Sep 17 00:00:00 2001 From: baigner <benedikt.aigner@rwth-aachen.de> Date: Tue, 30 May 2017 12:50:05 +0200 Subject: [PATCH] UPDATE for Visualization Package: The three views (XDSM, Edge Bundles and Sankey Diagram) work with all right click options. Former-commit-id: 01b5cbe3b94d03a1cada65b028006d59849c3d5c --- MANIFEST.in | 3 +- .../KADMOS_VisPack.html | 845 + .../supportFiles/circleLayout.html | 189 + .../supportFiles/circleLayout.js | 2464 ++ .../supportFiles/edgeBundles.html | 224 + .../supportFiles/edgeBundles.js | 2810 +++ .../supportFiles/include/AGILE_Background.png | Bin 0 -> 21140 bytes .../supportFiles/include/AGILE_Icon.png | Bin 0 -> 24690 bytes .../include/KADMOS_VisualizationPack_Icon.png | Bin 0 -> 14199 bytes .../include/KADMOS_VisualizationPack_Logo.png | Bin 0 -> 87879 bytes .../supportFiles/include/RWTH_Logo.png | Bin 0 -> 52099 bytes .../supportFiles/include/TUDelft_Logo.png | Bin 0 -> 4545 bytes .../include/acknowledgements.html | 54 + .../supportFiles/json/empty_file | 1 + .../supportFiles/sankeyDiagram.html | 230 + .../supportFiles/sankeyDiagram.js | 3528 +++ .../supportFiles/xdsm.html | 379 + .../supportFiles/xdsm.js | 19906 ++++++++++++++++ 18 files changed, 30631 insertions(+), 2 deletions(-) create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/KADMOS_VisPack.html create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/circleLayout.html create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/circleLayout.js create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/edgeBundles.html create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/edgeBundles.js create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/AGILE_Background.png create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/AGILE_Icon.png create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/KADMOS_VisualizationPack_Icon.png create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/KADMOS_VisualizationPack_Logo.png create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/RWTH_Logo.png create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/TUDelft_Logo.png create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/acknowledgements.html create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/json/empty_file create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/sankeyDiagram.html create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/sankeyDiagram.js create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/xdsm.html create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/xdsm.js diff --git a/MANIFEST.in b/MANIFEST.in index 15c6e7aa6..f138e6b31 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -10,10 +10,9 @@ graft kadmos/interface/templates graft kadmos/utilities/cmdows # Include current vispack templates -graft kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170403_Arial -graft kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170403_TrebuchetMS graft kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170419 graft kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170523 +graft kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530 # Include XDSM templates include kadmos/external/XDSM_writer/*.tex diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/KADMOS_VisPack.html b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/KADMOS_VisPack.html new file mode 100644 index 000000000..467ebf538 --- /dev/null +++ b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/KADMOS_VisPack.html @@ -0,0 +1,845 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<style> + +.ackn { +fill: #666666; +stroke: #666666; +stroke-width: 2.0; +} + +.acknGroup:hover .ackn{ +fill: #3399FF; +stroke: #3399FF; +} + +.newDiv { + position:relative; + top: -100px; + left: 220px; + background-color: none; +} +.newDiv a { + text-decoration: none; + color: white; + font-family: Arial; + font-size: 20pt; + padding-top: 12px; + padding-right: 12px; + padding-bottom: 12px; + padding-left: 6px; + display:inline-block; +} +ul { + display: inline-block;; + margin: 0; + padding: 0; + background-color: #666666; +} +ul li {display: inline-block;} +ul li:hover {background: #888;} +ul li:hover ul {display: block;} +ul li ul { + position: absolute; + min-width: 200px; + display: none; +} +ul li ul li { + background: #555; + display: block; +} +ul li ul li a { + display:block !important +} +ul li ul li:hover {background: #3399FF;} + +.acknText { +font-family: Arial; +font-size: 12pt; +fill: #666666; +} + +</style> +<head> + <title>KADMOS Visualization Package</title> + <script> + + /*! + * Bowser - a browser detector + * https://github.com/ded/bowser + * MIT License | (c) Dustin Diaz 2015 + */ + + !function (root, name, definition) { + if (typeof module != 'undefined' && module.exports) module.exports = definition() + else if (typeof define == 'function' && define.amd) define(name, definition) + else root[name] = definition() + }(this, 'bowser', function () { + /** + * See useragents.js for examples of navigator.userAgent + */ + + var t = true + + function detect(ua) { + + function getFirstMatch(regex) { + var match = ua.match(regex); + return (match && match.length > 1 && match[1]) || ''; + } + + function getSecondMatch(regex) { + var match = ua.match(regex); + return (match && match.length > 1 && match[2]) || ''; + } + + var iosdevice = getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase() + , likeAndroid = /like android/i.test(ua) + , android = !likeAndroid && /android/i.test(ua) + , nexusMobile = /nexus\s*[0-6]\s*/i.test(ua) + , nexusTablet = !nexusMobile && /nexus\s*[0-9]+/i.test(ua) + , chromeos = /CrOS/.test(ua) + , silk = /silk/i.test(ua) + , sailfish = /sailfish/i.test(ua) + , tizen = /tizen/i.test(ua) + , webos = /(web|hpw)os/i.test(ua) + , windowsphone = /windows phone/i.test(ua) + , samsungBrowser = /SamsungBrowser/i.test(ua) + , windows = !windowsphone && /windows/i.test(ua) + , mac = !iosdevice && !silk && /macintosh/i.test(ua) + , linux = !android && !sailfish && !tizen && !webos && /linux/i.test(ua) + , edgeVersion = getFirstMatch(/edge\/(\d+(\.\d+)?)/i) + , versionIdentifier = getFirstMatch(/version\/(\d+(\.\d+)?)/i) + , tablet = /tablet/i.test(ua) + , mobile = !tablet && /[^-]mobi/i.test(ua) + , xbox = /xbox/i.test(ua) + , result + + if (/opera/i.test(ua)) { + // an old Opera + result = { + name: 'Opera' + , opera: t + , version: versionIdentifier || getFirstMatch(/(?:opera|opr|opios)[\s\/](\d+(\.\d+)?)/i) + } + } else if (/opr|opios/i.test(ua)) { + // a new Opera + result = { + name: 'Opera' + , opera: t + , version: getFirstMatch(/(?:opr|opios)[\s\/](\d+(\.\d+)?)/i) || versionIdentifier + } + } + else if (/SamsungBrowser/i.test(ua)) { + result = { + name: 'Samsung Internet for Android' + , samsungBrowser: t + , version: versionIdentifier || getFirstMatch(/(?:SamsungBrowser)[\s\/](\d+(\.\d+)?)/i) + } + } + else if (/coast/i.test(ua)) { + result = { + name: 'Opera Coast' + , coast: t + , version: versionIdentifier || getFirstMatch(/(?:coast)[\s\/](\d+(\.\d+)?)/i) + } + } + else if (/yabrowser/i.test(ua)) { + result = { + name: 'Yandex Browser' + , yandexbrowser: t + , version: versionIdentifier || getFirstMatch(/(?:yabrowser)[\s\/](\d+(\.\d+)?)/i) + } + } + else if (/ucbrowser/i.test(ua)) { + result = { + name: 'UC Browser' + , ucbrowser: t + , version: getFirstMatch(/(?:ucbrowser)[\s\/](\d+(?:\.\d+)+)/i) + } + } + else if (/mxios/i.test(ua)) { + result = { + name: 'Maxthon' + , maxthon: t + , version: getFirstMatch(/(?:mxios)[\s\/](\d+(?:\.\d+)+)/i) + } + } + else if (/epiphany/i.test(ua)) { + result = { + name: 'Epiphany' + , epiphany: t + , version: getFirstMatch(/(?:epiphany)[\s\/](\d+(?:\.\d+)+)/i) + } + } + else if (/puffin/i.test(ua)) { + result = { + name: 'Puffin' + , puffin: t + , version: getFirstMatch(/(?:puffin)[\s\/](\d+(?:\.\d+)?)/i) + } + } + else if (/sleipnir/i.test(ua)) { + result = { + name: 'Sleipnir' + , sleipnir: t + , version: getFirstMatch(/(?:sleipnir)[\s\/](\d+(?:\.\d+)+)/i) + } + } + else if (/k-meleon/i.test(ua)) { + result = { + name: 'K-Meleon' + , kMeleon: t + , version: getFirstMatch(/(?:k-meleon)[\s\/](\d+(?:\.\d+)+)/i) + } + } + else if (windowsphone) { + result = { + name: 'Windows Phone' + , windowsphone: t + } + if (edgeVersion) { + result.msedge = t + result.version = edgeVersion + } + else { + result.msie = t + result.version = getFirstMatch(/iemobile\/(\d+(\.\d+)?)/i) + } + } + else if (/msie|trident/i.test(ua)) { + result = { + name: 'Internet Explorer' + , msie: t + , version: getFirstMatch(/(?:msie |rv:)(\d+(\.\d+)?)/i) + } + } else if (chromeos) { + result = { + name: 'Chrome' + , chromeos: t + , chromeBook: t + , chrome: t + , version: getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i) + } + } else if (/chrome.+? edge/i.test(ua)) { + result = { + name: 'Microsoft Edge' + , msedge: t + , version: edgeVersion + } + } + else if (/vivaldi/i.test(ua)) { + result = { + name: 'Vivaldi' + , vivaldi: t + , version: getFirstMatch(/vivaldi\/(\d+(\.\d+)?)/i) || versionIdentifier + } + } + else if (sailfish) { + result = { + name: 'Sailfish' + , sailfish: t + , version: getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i) + } + } + else if (/seamonkey\//i.test(ua)) { + result = { + name: 'SeaMonkey' + , seamonkey: t + , version: getFirstMatch(/seamonkey\/(\d+(\.\d+)?)/i) + } + } + else if (/firefox|iceweasel|fxios/i.test(ua)) { + result = { + name: 'Firefox' + , firefox: t + , version: getFirstMatch(/(?:firefox|iceweasel|fxios)[ \/](\d+(\.\d+)?)/i) + } + if (/\((mobile|tablet);[^\)]*rv:[\d\.]+\)/i.test(ua)) { + result.firefoxos = t + } + } + else if (silk) { + result = { + name: 'Amazon Silk' + , silk: t + , version : getFirstMatch(/silk\/(\d+(\.\d+)?)/i) + } + } + else if (/phantom/i.test(ua)) { + result = { + name: 'PhantomJS' + , phantom: t + , version: getFirstMatch(/phantomjs\/(\d+(\.\d+)?)/i) + } + } + else if (/slimerjs/i.test(ua)) { + result = { + name: 'SlimerJS' + , slimer: t + , version: getFirstMatch(/slimerjs\/(\d+(\.\d+)?)/i) + } + } + else if (/blackberry|\bbb\d+/i.test(ua) || /rim\stablet/i.test(ua)) { + result = { + name: 'BlackBerry' + , blackberry: t + , version: versionIdentifier || getFirstMatch(/blackberry[\d]+\/(\d+(\.\d+)?)/i) + } + } + else if (webos) { + result = { + name: 'WebOS' + , webos: t + , version: versionIdentifier || getFirstMatch(/w(?:eb)?osbrowser\/(\d+(\.\d+)?)/i) + }; + /touchpad\//i.test(ua) && (result.touchpad = t) + } + else if (/bada/i.test(ua)) { + result = { + name: 'Bada' + , bada: t + , version: getFirstMatch(/dolfin\/(\d+(\.\d+)?)/i) + }; + } + else if (tizen) { + result = { + name: 'Tizen' + , tizen: t + , version: getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.\d+)?)/i) || versionIdentifier + }; + } + else if (/qupzilla/i.test(ua)) { + result = { + name: 'QupZilla' + , qupzilla: t + , version: getFirstMatch(/(?:qupzilla)[\s\/](\d+(?:\.\d+)+)/i) || versionIdentifier + } + } + else if (/chromium/i.test(ua)) { + result = { + name: 'Chromium' + , chromium: t + , version: getFirstMatch(/(?:chromium)[\s\/](\d+(?:\.\d+)?)/i) || versionIdentifier + } + } + else if (/chrome|crios|crmo/i.test(ua)) { + result = { + name: 'Chrome' + , chrome: t + , version: getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i) + } + } + else if (android) { + result = { + name: 'Android' + , version: versionIdentifier + } + } + else if (/safari|applewebkit/i.test(ua)) { + result = { + name: 'Safari' + , safari: t + } + if (versionIdentifier) { + result.version = versionIdentifier + } + } + else if (iosdevice) { + result = { + name : iosdevice == 'iphone' ? 'iPhone' : iosdevice == 'ipad' ? 'iPad' : 'iPod' + } + // WTF: version is not part of user agent in web apps + if (versionIdentifier) { + result.version = versionIdentifier + } + } + else if(/googlebot/i.test(ua)) { + result = { + name: 'Googlebot' + , googlebot: t + , version: getFirstMatch(/googlebot\/(\d+(\.\d+))/i) || versionIdentifier + } + } + else { + result = { + name: getFirstMatch(/^(.*)\/(.*) /), + version: getSecondMatch(/^(.*)\/(.*) /) + }; + } + + // set webkit or gecko flag for browsers based on these engines + if (!result.msedge && /(apple)?webkit/i.test(ua)) { + if (/(apple)?webkit\/537\.36/i.test(ua)) { + result.name = result.name || "Blink" + result.blink = t + } else { + result.name = result.name || "Webkit" + result.webkit = t + } + if (!result.version && versionIdentifier) { + result.version = versionIdentifier + } + } else if (!result.opera && /gecko\//i.test(ua)) { + result.name = result.name || "Gecko" + result.gecko = t + result.version = result.version || getFirstMatch(/gecko\/(\d+(\.\d+)?)/i) + } + + // set OS flags for platforms that have multiple browsers + if (!result.windowsphone && !result.msedge && (android || result.silk)) { + result.android = t + } else if (!result.windowsphone && !result.msedge && iosdevice) { + result[iosdevice] = t + result.ios = t + } else if (mac) { + result.mac = t + } else if (xbox) { + result.xbox = t + } else if (windows) { + result.windows = t + } else if (linux) { + result.linux = t + } + + function getWindowsVersion (s) { + switch (s) { + case 'NT': return 'NT' + case 'XP': return 'XP' + case 'NT 5.0': return '2000' + case 'NT 5.1': return 'XP' + case 'NT 5.2': return '2003' + case 'NT 6.0': return 'Vista' + case 'NT 6.1': return '7' + case 'NT 6.2': return '8' + case 'NT 6.3': return '8.1' + case 'NT 10.0': return '10' + default: return undefined + } + } + + // OS version extraction + var osVersion = ''; + if (result.windows) { + osVersion = getWindowsVersion(getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i)) + } else if (result.windowsphone) { + osVersion = getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i); + } else if (result.mac) { + osVersion = getFirstMatch(/Mac OS X (\d+([_\.\s]\d+)*)/i); + osVersion = osVersion.replace(/[_\s]/g, '.'); + } else if (iosdevice) { + osVersion = getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i); + osVersion = osVersion.replace(/[_\s]/g, '.'); + } else if (android) { + osVersion = getFirstMatch(/android[ \/-](\d+(\.\d+)*)/i); + } else if (result.webos) { + osVersion = getFirstMatch(/(?:web|hpw)os\/(\d+(\.\d+)*)/i); + } else if (result.blackberry) { + osVersion = getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i); + } else if (result.bada) { + osVersion = getFirstMatch(/bada\/(\d+(\.\d+)*)/i); + } else if (result.tizen) { + osVersion = getFirstMatch(/tizen[\/\s](\d+(\.\d+)*)/i); + } + if (osVersion) { + result.osversion = osVersion; + } + + // device type extraction + var osMajorVersion = !result.windows && osVersion.split('.')[0]; + if ( + tablet + || nexusTablet + || iosdevice == 'ipad' + || (android && (osMajorVersion == 3 || (osMajorVersion >= 4 && !mobile))) + || result.silk + ) { + result.tablet = t + } else if ( + mobile + || iosdevice == 'iphone' + || iosdevice == 'ipod' + || android + || nexusMobile + || result.blackberry + || result.webos + || result.bada + ) { + result.mobile = t + } + + // Graded Browser Support + // http://developer.yahoo.com/yui/articles/gbs + if (result.msedge || + (result.msie && result.version >= 10) || + (result.yandexbrowser && result.version >= 15) || + (result.vivaldi && result.version >= 1.0) || + (result.chrome && result.version >= 20) || + (result.samsungBrowser && result.version >= 4) || + (result.firefox && result.version >= 20.0) || + (result.safari && result.version >= 6) || + (result.opera && result.version >= 10.0) || + (result.ios && result.osversion && result.osversion.split(".")[0] >= 6) || + (result.blackberry && result.version >= 10.1) + || (result.chromium && result.version >= 20) + ) { + result.a = t; + } + else if ((result.msie && result.version < 10) || + (result.chrome && result.version < 20) || + (result.firefox && result.version < 20.0) || + (result.safari && result.version < 6) || + (result.opera && result.version < 10.0) || + (result.ios && result.osversion && result.osversion.split(".")[0] < 6) + || (result.chromium && result.version < 20) + ) { + result.c = t + } else result.x = t + + return result + } + + var bowser = detect(typeof navigator !== 'undefined' ? navigator.userAgent || '' : '') + + bowser.test = function (browserList) { + for (var i = 0; i < browserList.length; ++i) { + var browserItem = browserList[i]; + if (typeof browserItem=== 'string') { + if (browserItem in bowser) { + return true; + } + } + } + return false; + } + + /** + * Get version precisions count + * + * @example + * getVersionPrecision("1.10.3") // 3 + * + * @param {string} version + * @return {number} + */ + function getVersionPrecision(version) { + return version.split(".").length; + } + + /** + * Array::map polyfill + * + * @param {Array} arr + * @param {Function} iterator + * @return {Array} + */ + function map(arr, iterator) { + var result = [], i; + if (Array.prototype.map) { + return Array.prototype.map.call(arr, iterator); + } + for (i = 0; i < arr.length; i++) { + result.push(iterator(arr[i])); + } + return result; + } + + /** + * Calculate browser version weight + * + * @example + * compareVersions(['1.10.2.1', '1.8.2.1.90']) // 1 + * compareVersions(['1.010.2.1', '1.09.2.1.90']); // 1 + * compareVersions(['1.10.2.1', '1.10.2.1']); // 0 + * compareVersions(['1.10.2.1', '1.0800.2']); // -1 + * + * @param {Array<String>} versions versions to compare + * @return {Number} comparison result + */ + function compareVersions(versions) { + // 1) get common precision for both versions, for example for "10.0" and "9" it should be 2 + var precision = Math.max(getVersionPrecision(versions[0]), getVersionPrecision(versions[1])); + var chunks = map(versions, function (version) { + var delta = precision - getVersionPrecision(version); + + // 2) "9" -> "9.0" (for precision = 2) + version = version + new Array(delta + 1).join(".0"); + + // 3) "9.0" -> ["000000000"", "000000009"] + return map(version.split("."), function (chunk) { + return new Array(20 - chunk.length).join("0") + chunk; + }).reverse(); + }); + + // iterate in reverse order by reversed chunks array + while (--precision >= 0) { + // 4) compare: "000000009" > "000000010" = false (but "9" > "10" = true) + if (chunks[0][precision] > chunks[1][precision]) { + return 1; + } + else if (chunks[0][precision] === chunks[1][precision]) { + if (precision === 0) { + // all version chunks are same + return 0; + } + } + else { + return -1; + } + } + } + + /** + * Check if browser is unsupported + * + * @example + * bowser.isUnsupportedBrowser({ + * msie: "10", + * firefox: "23", + * chrome: "29", + * safari: "5.1", + * opera: "16", + * phantom: "534" + * }); + * + * @param {Object} minVersions map of minimal version to browser + * @param {Boolean} [strictMode = false] flag to return false if browser wasn't found in map + * @param {String} [ua] user agent string + * @return {Boolean} + */ + function isUnsupportedBrowser(minVersions, strictMode, ua) { + var _bowser = bowser; + + // make strictMode param optional with ua param usage + if (typeof strictMode === 'string') { + ua = strictMode; + strictMode = void(0); + } + + if (strictMode === void(0)) { + strictMode = false; + } + if (ua) { + _bowser = detect(ua); + } + + var version = "" + _bowser.version; + for (var browser in minVersions) { + if (minVersions.hasOwnProperty(browser)) { + if (_bowser[browser]) { + if (typeof minVersions[browser] !== 'string') { + throw new Error('Browser version in the minVersion map should be a string: ' + browser + ': ' + String(minVersions)); + } + + // browser version and min supported version. + return compareVersions([version, minVersions[browser]]) < 0; + } + } + } + + return strictMode; // not found + } + + /** + * Check if browser is supported + * + * @param {Object} minVersions map of minimal version to browser + * @param {Boolean} [strictMode = false] flag to return false if browser wasn't found in map + * @param {String} [ua] user agent string + * @return {Boolean} + */ + function check(minVersions, strictMode, ua) { + return !isUnsupportedBrowser(minVersions, strictMode, ua); + } + + bowser.isUnsupportedBrowser = isUnsupportedBrowser; + bowser.compareVersions = compareVersions; + bowser.check = check; + + /* + * Set our detect method to the main bowser object so we can + * reuse it to test other user agents. + * This is needed to implement future tests. + */ + bowser._detect = detect; + + return bowser + }); + + if (bowser.name!="Firefox"&&bowser.name!="Safari") + { + alert("OOPS! The KADMOS Visualization Package unfortunately does not work on " + bowser.name + ". Please use Firefox or Safari to see its awesome visualization features!") + } + + !function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===bo||n[0]===_o?_o+n:n}function s(n){return(n+="")[0]===_o?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=wo.length;r>e;++e){var i=wo[e]+t;if(i in n)return i}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,i=-1,u=r.length;++i<u;)(t=r[i].on)&&t.apply(this,arguments);return n}var e=[],r=new c;return t.on=function(t,i){var u,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,u=e.indexOf(o)).concat(e.slice(u+1)),r.remove(t)),i&&e.push(r.set(t,{on:i})),n)},t}function S(){ao.event.preventDefault()}function k(){for(var n,t=ao.event;n=t.sourceEvent;)t=n;return t}function N(n){for(var t=new _,e=0,r=arguments.length;++e<r;)t[arguments[e]]=w(t);return t.of=function(e,r){return function(i){try{var u=i.sourceEvent=ao.event;i.target=n,ao.event=i,t[i.type].apply(e,r)}finally{ao.event=u}}},t}function E(n){return ko(n,Co),n}function A(n){return"function"==typeof n?n:function(){return No(n,this)}}function C(n){return"function"==typeof n?n:function(){return Eo(n,this)}}function z(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function i(){this.setAttribute(n,t)}function u(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=ao.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?u:i}function L(n){return n.trim().replace(/\s+/g," ")}function q(n){return new RegExp("(?:^|\\s+)"+ao.requote(n)+"(?:\\s+|$)","g")}function T(n){return(n+"").trim().split(/^|\s+/)}function R(n,t){function e(){for(var e=-1;++e<i;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<i;)n[e](this,r)}n=T(n).map(D);var i=n.length;return"function"==typeof t?r:e}function D(n){var t=q(n);return function(e,r){if(i=e.classList)return r?i.add(n):i.remove(n);var i=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(i)||e.setAttribute("class",L(i+" "+n))):e.setAttribute("class",L(i.replace(t," ")))}}function P(n,t,e){function r(){this.style.removeProperty(n)}function i(){this.style.setProperty(n,t,e)}function u(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?u:i}function U(n,t){function e(){delete this[n]}function r(){this[n]=t}function i(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?i:r}function j(n){function t(){var t=this.ownerDocument,e=this.namespaceURI;return e===zo&&t.documentElement.namespaceURI===zo?t.createElement(n):t.createElementNS(e,n)}function e(){return this.ownerDocument.createElementNS(n.space,n.local)}return"function"==typeof n?n:(n=ao.ns.qualify(n)).local?e:t}function F(){var n=this.parentNode;n&&n.removeChild(this)}function H(n){return{__data__:n}}function O(n){return function(){return Ao(this,n)}}function I(n){return arguments.length||(n=e),function(t,e){return t&&e?n(t.__data__,e.__data__):!t-!e}}function Y(n,t){for(var e=0,r=n.length;r>e;e++)for(var i,u=n[e],o=0,a=u.length;a>o;o++)(i=u[o])&&t(i,o,e);return n}function Z(n){return ko(n,qo),n}function V(n){var t,e;return function(r,i,u){var o,a=n[u].update,l=a.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(o=a[t])&&++t<l;);return o}}function X(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function i(){var i=l(t,co(arguments));r.call(this),this.addEventListener(n,this[o]=i,i.$=e),i._=t}function u(){var t,e=new RegExp("^__on([^.]+)"+ao.requote(n)+"$");for(var r in this)if(t=r.match(e)){var i=this[r];this.removeEventListener(t[1],i,i.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),l=$;a>0&&(n=n.slice(0,a));var c=To.get(n);return c&&(n=c,l=B),a?t?i:r:t?b:u}function $(n,t){return function(e){var r=ao.event;ao.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ao.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Do,i="click"+r,u=ao.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ro&&(Ro="onselectstart"in e?!1:x(e.style,"userSelect")),Ro){var o=n(e).style,a=o[Ro];o[Ro]="none"}return function(n){if(u.on(r,null),Ro&&(o[Ro]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(0>Po){var u=t(n);if(u.scrollX||u.scrollY){r=ao.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Po=!(o.f||o.e),r.remove()}}return Po?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ao.event.changedTouches[0].identifier}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:-1>n?Fo:Math.acos(n)}function tn(n){return n>1?Io:-1>n?-Io:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):_n(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(o-u)*n/60:180>n?o:240>n?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=ao.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Yo)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=vn(i)*na,r=vn(r)*ta,u=vn(u)*ea,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Zo,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function vn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function dn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):_n(""+n,mn,cn):new mn(n,t,e)}function Mn(n){return new mn(n>>16,n>>8&255,255&n)}function xn(n){return Mn(n)+""}function bn(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _n(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=ua.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o=o>>4|o,a=240&u,a=a>>4|a,l=15&u,l=l<<4|l):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=.5>l?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=NaN,i=l>0&&1>l?0:r),new ln(r,i,l)}function Sn(n,t,e){n=kn(n),t=kn(t),e=kn(e);var r=dn((.4124564*n+.3575761*t+.1804375*e)/na),i=dn((.2126729*n+.7151522*t+.072175*e)/ta),u=dn((.0193339*n+.119192*t+.9503041*e)/ea);return hn(116*i-16,500*(r-i),200*(i-u))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&300>t||304===t){try{n=e.call(u,l)}catch(r){return void o.error.call(u,r)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=ao.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=ao.event;ao.event=n;try{o.progress.call(u,l)}finally{ao.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(co(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},ao.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var i=e+t,u={c:n,t:i,n:null};return aa?aa.n=u:oa=u,aa=u,la||(ca=clearTimeout(ca),la=1,fa(Tn)),u}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(ca),ca=setTimeout(Tn,t)),la=0):(la=1,fa(Tn))}function Rn(){for(var n=Date.now(),t=oa;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=oa,e=1/0;t;)t.c?(t.t<e&&(e=t.t),t=(n=t).n):t=n?n.n=t.n:oa=t.n;return aa=n,e}function Pn(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Un(n,t){var e=Math.pow(10,3*xo(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function jn(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ha.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,v="",d="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,d="%",p="f";break;case"p":g=100,d="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(v="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(v=i[0],d=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=pa.get(p)||Fn;var M=c&&s;return function(n){var e=d;if(y&&n%1)return"";var i=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>g){var l=ao.formatPrefix(n,h);n=l.scale(n),e=l.symbol+d}else n*=g;n=p(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=m?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!c&&s&&(x=u(x,1/0));var S=v.length+x.length+b.length+(M?0:i.length),k=f>S?new Array(S=f-S+1).join(r):"";return M&&(x=u(k+x,k.length?f-b.length:1/0)),i+=v,n=x+b,("<"===o?i+n+k:">"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(M?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new va(e-1)),1),e}function u(n,e){return t(n=new va(+n),e),n}function o(n,r,u){var o=i(n),a=[];if(u>1)for(;r>o;)e(o)%u||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{va=Hn;var r=new Hn;return r._=n,o(r,t,e)}finally{va=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=o;var l=n.utc=In(n);return l.floor=l,l.round=In(r),l.ceil=In(i),l.offset=In(u),l.range=a,n}function In(n){return function(t,e){try{va=Hn;var r=new Hn;return r._=t,n(r,e)._}finally{va=Date}}}function Yn(n){function t(n){function t(t){for(var e,i,u,o=[],a=-1,l=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.slice(l,a)),null!=(i=ya[e=n.charAt(++a)])&&(e=n.charAt(++a)),(u=A[e])&&(e=u(t,null==i?"e"===e?" ":"0":i)),o.push(e),l=a+1);return o.push(n.slice(l,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},i=e(r,n,t,0);if(i!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var u=null!=r.Z&&va!==Hn,o=new(u?Hn:va);return"j"in r?o.setFullYear(r.y,0,r.j):"W"in r||"U"in r?("w"in r||(r.w="W"in r?1:0),o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+(r.Z/100|0),r.M+r.Z%100,r.S,r.L),u?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var i,u,o,a=0,l=t.length,c=e.length;l>a;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(o=t.charAt(a++),u=C[o in ya?t.charAt(a++):o],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,v=n.days,d=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{va=Hn;var t=new va;return t._=n,r(t)}finally{va=Date}}var r=t(n);return e.parse=function(n){try{va=Hn;var t=r.parse(n);return t&&t._}finally{va=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var M=ao.map(),x=Vn(v),b=Xn(v),_=Vn(d),w=Xn(d),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){M.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ga.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ga.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ga.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=0>n?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Vn(n){return new RegExp("^(?:"+n.map(ao.requote).join("|")+")","i")}function Xn(n){for(var t=new c,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function $n(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Bn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.U=+r[0],e+r[0].length):-1}function Wn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.W=+r[0],e+r[0].length):-1}function Jn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Gn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.y=Qn(+r[0]),e+r[0].length):-1}function Kn(n,t,e){return/^[+-]\d{4}$/.test(t=t.slice(e,e+5))?(n.Z=-t,e+5):-1}function Qn(n){return n+(n>68?1900:2e3)}function nt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=xo(t)/60|0,i=xo(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){Ma.lastIndex=0;var r=Ma.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ft(){}function st(n,t,e){var r=e.s=n+t,i=r-n,u=r-i;e.t=n-u+(t-i)}function ht(n,t){n&&wa.hasOwnProperty(n.type)&&wa[n.type](n,t)}function pt(n,t,e){var r,i=-1,u=n.length-e;for(t.lineStart();++i<u;)r=n[i],t.point(r[0],r[1],r[2]);t.lineEnd()}function gt(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)pt(n[e],t,1);t.polygonEnd()}function vt(){function n(n,t){n*=Yo,t=t*Yo/2+Fo/4;var e=n-r,o=e>=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);ka.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;Na.point=function(o,a){Na.point=n,r=(t=o)*Yo,i=Math.cos(a=(e=a)*Yo/2+Fo/4),u=Math.sin(a)},Na.lineEnd=function(){n(t,e)}}function dt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function bt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function _t(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return xo(n[0]-t[0])<Uo&&xo(n[1]-t[1])<Uo}function St(n,t){n*=Yo;var e=Math.cos(t*=Yo);kt(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function kt(n,t,e){++Ea,Ca+=(n-Ca)/Ea,za+=(t-za)/Ea,La+=(e-La)/Ea}function Nt(){function n(n,i){n*=Yo;var u=Math.cos(i*=Yo),o=u*Math.cos(n),a=u*Math.sin(n),l=Math.sin(i),c=Math.atan2(Math.sqrt((c=e*l-r*a)*c+(c=r*o-t*l)*c+(c=t*a-e*o)*c),t*o+e*a+r*l);Aa+=c,qa+=c*(t+(t=o)),Ta+=c*(e+(e=a)),Ra+=c*(r+(r=l)),kt(t,e,r)}var t,e,r;ja.point=function(i,u){i*=Yo;var o=Math.cos(u*=Yo);t=o*Math.cos(i),e=o*Math.sin(i),r=Math.sin(u),ja.point=n,kt(t,e,r)}}function Et(){ja.point=St}function At(){function n(n,t){n*=Yo;var e=Math.cos(t*=Yo),o=e*Math.cos(n),a=e*Math.sin(n),l=Math.sin(t),c=i*l-u*a,f=u*o-r*l,s=r*a-i*o,h=Math.sqrt(c*c+f*f+s*s),p=r*o+i*a+u*l,g=h&&-nn(p)/h,v=Math.atan2(h,p);Da+=g*c,Pa+=g*f,Ua+=g*s,Aa+=v,qa+=v*(r+(r=o)),Ta+=v*(i+(i=a)),Ra+=v*(u+(u=l)),kt(r,i,u)}var t,e,r,i,u;ja.point=function(o,a){t=o,e=a,ja.point=n,o*=Yo;var l=Math.cos(a*=Yo);r=l*Math.cos(o),i=l*Math.sin(o),u=Math.sin(a),kt(r,i,u)},ja.lineEnd=function(){n(t,e),ja.lineEnd=Et,ja.point=St}}function Ct(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function zt(){return!0}function Lt(n,t,e,r,i){var u=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(wt(e,r)){i.lineStart();for(var a=0;t>a;++a)i.point((e=n[a])[0],e[1]);return void i.lineEnd()}var l=new Tt(e,n,null,!0),c=new Tt(e,null,l,!1);l.o=c,u.push(l),o.push(c),l=new Tt(r,n,null,!1),c=new Tt(r,null,l,!0),l.o=c,u.push(l),o.push(c)}}),o.sort(t),qt(u),qt(o),u.length){for(var a=0,l=e,c=o.length;c>a;++a)o[a].e=l=!l;for(var f,s,h=u[0];;){for(var p=h,g=!0;p.v;)if((p=p.n)===h)return;f=p.z,i.lineStart();do{if(p.v=p.o.v=!0,p.e){if(g)for(var a=0,c=f.length;c>a;++a)i.point((s=f[a])[0],s[1]);else r(p.x,p.n.x,1,i);p=p.n}else{if(g){f=p.p.z;for(var a=f.length-1;a>=0;--a)i.point((s=f[a])[0],s[1])}else r(p.x,p.p.x,-1,i);p=p.p}p=p.o,f=p.z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r<t;)i.n=e=n[r],e.p=i,i=e;i.n=e=n[0],e.p=i}}function Tt(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Rt(n,t,e,r){return function(i,u){function o(t,e){var r=i(t,e);n(t=r[0],e=r[1])&&u.point(t,e)}function a(n,t){var e=i(n,t);d.point(e[0],e[1])}function l(){m.point=a,d.lineStart()}function c(){m.point=o,d.lineEnd()}function f(n,t){v.push([n,t]);var e=i(n,t);x.point(e[0],e[1])}function s(){x.lineStart(),v=[]}function h(){f(v[0][0],v[0][1]),x.lineEnd();var n,t=x.clean(),e=M.buffer(),r=e.length;if(v.pop(),g.push(v),v=null,r)if(1&t){n=e[0];var i,r=n.length-1,o=-1;if(r>0){for(b||(u.polygonStart(),b=!0),u.lineStart();++o<r;)u.point((i=n[o])[0],i[1]);u.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,v,d=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=ao.merge(p);var n=Ot(y,g);p.length?(b||(u.polygonStart(),b=!0),Lt(p,Ut,n,e,u)):n&&(b||(u.polygonStart(),b=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),b&&(u.polygonEnd(),b=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},M=Pt(),x=t(M),b=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ut(n,t){return((n=n.x)[0]<0?n[1]-Io-Uo:Io-n[1])-((t=t.x)[0]<0?t[1]-Io-Uo:Io-t[1])}function jt(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Fo:-Fo,l=xo(u-e);xo(l-Fo)<Uo?(n.point(e,r=(r+o)/2>0?Io:-Io),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Fo&&(xo(e-i)<Uo&&(e-=i*Uo),xo(u-a)<Uo&&(u-=a*Uo),r=Ft(e,r,u,o),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=u,r=o),i=a},lineEnd:function(){n.lineEnd(),e=r=NaN},clean:function(){return 2-t}}}function Ft(n,t,e,r){var i,u,o=Math.sin(n-e);return xo(o)>Uo?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Io,r.point(-Fo,i),r.point(0,i),r.point(Fo,i),r.point(Fo,0),r.point(Fo,-i),r.point(0,-i),r.point(-Fo,-i),r.point(-Fo,0),r.point(-Fo,i);else if(xo(n[0]-t[0])>Uo){var u=n[0]<t[0]?Fo:-Fo;i=e*u/2,r.point(-u,i),r.point(0,i),r.point(u,i)}else r.point(t[0],t[1])}function Ot(n,t){var e=n[0],r=n[1],i=[Math.sin(e),-Math.cos(e),0],u=0,o=0;ka.reset();for(var a=0,l=t.length;l>a;++a){var c=t[a],f=c.length;if(f)for(var s=c[0],h=s[0],p=s[1]/2+Fo/4,g=Math.sin(p),v=Math.cos(p),d=1;;){d===f&&(d=0),n=c[d];var y=n[0],m=n[1]/2+Fo/4,M=Math.sin(m),x=Math.cos(m),b=y-h,_=b>=0?1:-1,w=_*b,S=w>Fo,k=g*M;if(ka.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),u+=S?b+_*Ho:b,S^h>=e^y>=e){var N=mt(dt(s),dt(n));bt(N);var E=mt(i,N);bt(E);var A=(S^b>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=y,g=M,v=x,s=n}}return(-Uo>u||Uo>u&&-Uo>ka)^1&o}function It(n){function t(n,t){return Math.cos(n)*Math.cos(t)>u}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],v=t(s,h),d=o?v?0:i(s,h):v?i(s+(0>s?Fo:-Fo),h):0;if(!e&&(c=l=v)&&n.lineStart(),v!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Uo,g[1]+=Uo,v=t(g[0],g[1]))),v!==l)f=0,v?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^v){var y;d&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!v||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=v,u=d},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=dt(n),i=dt(t),o=[1,0,0],a=mt(r,i),l=yt(a,a),c=a[0],f=l-c*c;if(!f)return!e&&n;var s=u*l/f,h=-u*c/f,p=mt(o,a),g=xt(o,s),v=xt(a,h);Mt(g,v);var d=p,y=yt(g,d),m=yt(d,d),M=y*y-m*(yt(g,g)-1);if(!(0>M)){var x=Math.sqrt(M),b=xt(d,(-y-x)/m);if(Mt(b,g),b=_t(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],N=t[1];w>S&&(_=w,w=S,S=_);var E=S-w,A=xo(E-Fo)<Uo,C=A||Uo>E;if(!A&&k>N&&(_=k,k=N,N=_),C?A?k+N>0^b[1]<(xo(b[0]-w)<Uo?k:N):k<=b[1]&&b[1]<=N:E>Fo^(w<=b[0]&&b[0]<=S)){var z=xt(d,(-y+x)/m);return Mt(z,g),[b,_t(z)]}}}function i(t,e){var r=o?n:Fo-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=xo(u)>Uo,l=ve(n,6*Yo);return Rt(t,e,l,o?[0,-n]:[-Fo,n-Fo])}function Yt(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=a.x,s=a.y,h=0,p=1,g=f-l,v=s-c;if(u=n-l,g||!(u>0)){if(u/=g,0>g){if(h>u)return;p>u&&(p=u)}else if(g>0){if(u>p)return;u>h&&(h=u)}if(u=e-l,g||!(0>u)){if(u/=g,0>g){if(u>p)return;u>h&&(h=u)}else if(g>0){if(h>u)return;p>u&&(p=u)}if(u=t-c,v||!(u>0)){if(u/=v,0>v){if(h>u)return;p>u&&(p=u)}else if(v>0){if(u>p)return;u>h&&(h=u)}if(u=r-c,v||!(0>u)){if(u/=v,0>v){if(u>p)return;u>h&&(h=u)}else if(v>0){if(h>u)return;p>u&&(p=u)}return h>0&&(i.a={x:l+h*g,y:c+h*v}),1>p&&(i.b={x:l+p*g,y:c+p*v}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return xo(r[0]-n)<Uo?i>0?0:3:xo(r[0]-e)<Uo?i>0?2:1:xo(r[1]-t)<Uo?i>0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=d.length,r=n[1],i=0;e>i;++i)for(var u,o=1,a=d[i],l=a.length,c=a[0];l>o;++o)u=a[o],c[1]<=r?u[1]>r&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0){do c.point(0===f||3===f?n:e,f>1?r:t);while((f=(f+l+4)%4)!==s)}else c.point(a[0],a[1])}function f(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,d&&d.push(y=[]),S=!0,w=!1,b=_=NaN}function p(){v&&(g(m,M),x&&w&&E.rejoin(),v.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){n=Math.max(-Ha,Math.min(Ha,n)),t=Math.max(-Ha,Math.min(Ha,t));var e=f(n,t);if(d&&y.push([n,t]),S)m=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,y,m,M,x,b,_,w,S,k,N=a,E=Pt(),A=Yt(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,v=[],d=[],k=!0},polygonEnd:function(){a=N,v=ao.merge(v);var t=l([n,r]),e=k&&t,i=v.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(v,u,t,c,a),a.polygonEnd()),v=d=y=null}};return C}}function Vt(n){var t=0,e=Fo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Fo/180,e=n[1]*Fo/180):[t/Fo*180,e/Fo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){Ia+=i*n-r*t,r=n,i=t}var t,e,r,i;$a.point=function(u,o){$a.point=n,t=r=u,e=i=o},$a.lineEnd=function(){n(t,e)}}function Bt(n,t){Ya>n&&(Ya=n),n>Va&&(Va=n),Za>t&&(Za=t),t>Xa&&(Xa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){Ca+=n,za+=t,++La}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);qa+=o*(t+n)/2,Ta+=o*(e+r)/2,Ra+=o,Gt(t=n,e=r)}var t,e;Wa.point=function(r,i){Wa.point=n,Gt(t=r,e=i)}}function Qt(){Wa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);qa+=o*(r+n)/2,Ta+=o*(i+t)/2,Ra+=o,o=i*n-r*t,Da+=o*(r+n),Pa+=o*(i+t),Ua+=3*o,Gt(r=n,i=t)}var t,e,r,i;Wa.point=function(u,o){Wa.point=n,Gt(t=r=u,e=i=o)},Wa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Ho)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=NaN,S.point=u,t.lineStart()}function u(e,r){var u=dt([e,r]),o=n(e,r);i(M,x,m,b,_,w,M=o[0],x=o[1],m=e,b=u[0],_=u[1],w=u[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function l(){ + r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=M,g=x,v=b,d=_,y=w,S.point=u}function f(){i(M,x,m,b,_,w,p,g,s,v,d,y,a,t),S.lineEnd=o,o()}var s,h,p,g,v,d,y,m,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,v,d,y){var m=f-t,M=s-e,x=m*m+M*M;if(x>4*u&&d--){var b=a+p,_=l+g,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=xo(xo(w)-1)<Uo||xo(r-h)<Uo?(r+h)/2:Math.atan2(_,b),E=n(N,k),A=E[0],C=E[1],z=A-t,L=C-e,q=M*z-m*L;(q*q/x>u||xo((m*z+M*L)/x-.5)>.3||o>a*p+l*g+c*v)&&(i(t,e,r,a,l,c,A,C,N,b/=S,_/=S,w,d,y),y.point(A,C),i(A,C,N,b,_,w,f,s,h,p,g,v,d,y))}}var u=.5,o=Math.cos(30*Yo),a=16;return t.precision=function(n){return arguments.length?(a=(u=n*n)>0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Zo,e*Zo])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Yo,n[1]*Yo),[n[0]*h+l,c-n[1]*h]}function e(n){return n=a.invert((n[0]-l)/h,(c-n[1])/h),n&&[n[0]*Zo,n[1]*Zo]}function r(){a=Ct(o=se(y,M,x),u);var n=u(v,d);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,v=0,d=0,y=0,M=0,x=0,b=Fa,_=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(b(o,s(_(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Fa):It((w=+n)*Yo),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(v=n[0]%360*Yo,d=n[1]%360*Yo,r()):[v*Zo,d*Zo]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Yo,M=n[1]%360*Yo,x=n.length>2?n[2]%360*Yo:0,r()):[y*Zo,M*Zo,x*Zo]},ao.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Yo,e*Yo)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Fo?n-Ho:-Fo>n?n+Ho:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Fo?t-Ho:-Fo>t?t+Ho:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function ve(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=de(e,i),u=de(e,u),(o>0?u>i:i>u)&&(i+=o*Ho)):(i=n+o*Ho,u=n-.5*l);for(var c,f=i;o>0?f>u:u>f;f-=l)a.point((c=_t([e,-r*Math.cos(f),-r*Math.sin(f)]))[0],c[1])}}function de(n,t){var e=dt(t);e[0]-=n,bt(e);var r=nn(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Uo)%(2*Math.PI)}function ye(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function me(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function Me(n){return n.source}function xe(n){return n.target}function be(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),o=Math.cos(r),a=Math.sin(r),l=i*Math.cos(n),c=i*Math.sin(n),f=o*Math.cos(e),s=o*Math.sin(e),h=2*Math.asin(Math.sqrt(on(r-t)+i*o*on(e-n))),p=1/Math.sin(h),g=h?function(n){var t=Math.sin(n*=h)*p,e=Math.sin(h-n)*p,r=e*l+t*f,i=e*c+t*s,o=e*u+t*a;return[Math.atan2(i,r)*Zo,Math.atan2(o,Math.sqrt(r*r+i*i))*Zo]}:function(){return[n*Zo,t*Zo]};return g.distance=h,g}function _e(){function n(n,i){var u=Math.sin(i*=Yo),o=Math.cos(i),a=xo((n*=Yo)-t),l=Math.cos(a);Ja+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*u-e*o*l)*a),e*u+r*o*l),t=n,e=u,r=o}var t,e,r;Ga.point=function(i,u){t=i*Yo,e=Math.sin(u*=Yo),r=Math.cos(u),Ga.point=n},Ga.lineEnd=function(){Ga.point=Ga.lineEnd=b}}function we(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),o=Math.cos(i);return[Math.atan2(n*u,r*o),Math.asin(r&&e*u/r)]},e}function Se(n,t){function e(n,t){o>0?-Io+Uo>t&&(t=-Io+Uo):t>Io-Uo&&(t=Io-Uo);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Fo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Io]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return xo(i)<Uo?ce:(e.invert=function(n,t){var e=u-t;return[Math.atan2(n,e)/i,u-K(i)*Math.sqrt(n*n+e*e)]},e)}function Ne(n,t){return[n,Math.log(Math.tan(Fo/4+t/2))]}function Ee(n){var t,e=oe(n),r=e.scale,i=e.translate,u=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=i.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=u.apply(e,arguments);if(o===e){if(t=null==n){var a=Fo*r(),l=i();u([[l[0]-a,l[1]-a],[l[0]+a,l[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function Ae(n,t){return[Math.log(Math.tan(Fo/4+t/2)),-n]}function Ce(n){return n[0]}function ze(n){return n[1]}function Le(n){for(var t=n.length,e=[0,1],r=2,i=2;t>i;i++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function Ue(n){var t=cl.pop()||new Pe;return t.site=n,t}function je(n){Be(n),ol.remove(n),cl.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];je(n);for(var l=u;l.circle&&xo(e-l.circle.x)<Uo&&xo(r-l.circle.cy)<Uo;)u=l.P,a.unshift(l),je(l),l=u;a.unshift(l),Be(l);for(var c=o;c.circle&&xo(e-c.circle.x)<Uo&&xo(r-c.circle.cy)<Uo;)o=c.N,a.push(c),je(c),c=o;a.push(c),Be(c);var f,s=a.length;for(f=1;s>f;++f)c=a[f],l=a[f-1],nr(c.edge,l.site,c.site,i);l=a[0],c=a[s-1],c.edge=Ke(l.site,c.site,null,i),$e(l),$e(c)}function He(n){for(var t,e,r,i,u=n.x,o=n.y,a=ol._;a;)if(r=Oe(a,o)-u,r>Uo)a=a.L;else{if(i=u-Ie(a,o),!(i>Uo)){r>-Uo?(t=a.P,e=a):i>-Uo?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=Ue(n);if(ol.insert(t,l),t||e){if(t===e)return Be(t),e=Ue(t.site),ol.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(!e)return void(l.edge=Ke(t.site,l.site));Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,v=g.x-f,d=g.y-s,y=2*(h*d-p*v),m=h*h+p*p,M=v*v+d*d,x={x:(d*m-p*M)/y+f,y:(h*M-v*m)/y+s};nr(e.edge,c,g,x),l.edge=Ke(c,n,null,x),e.edge=Ke(n,g,null,x),$e(t),$e(e)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-(1/0);e=o.site;var a=e.x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ie(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ye(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],v=ul,d=v.length;d--;)if(u=v[d],u&&u.prepare())for(a=u.edges,l=a.length,o=0;l>o;)f=a[o].end(),r=f.x,i=f.y,c=a[++o%l].start(),t=c.x,e=c.y,(xo(r-t)>Uo||xo(i-e)>Uo)&&(a.splice(o,0,new tr(Qe(u.site,f,xo(r-s)<Uo&&g-i>Uo?{x:s,y:xo(t-s)<Uo?e:g}:xo(i-g)<Uo&&h-r>Uo?{x:xo(e-g)<Uo?t:h,y:g}:xo(r-h)<Uo&&i-p>Uo?{x:h,y:xo(t-h)<Uo?e:p}:xo(i-p)<Uo&&r-s>Uo?{x:xo(e-p)<Uo?t:s,y:p}:null),u.site,null)),++l)}function Ve(n,t){return t.angle-n.angle}function Xe(){rr(this),this.x=this.y=this.arc=this.site=this.cy=null}function $e(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,i=n.site,u=e.site;if(r!==u){var o=i.x,a=i.y,l=r.x-o,c=r.y-a,f=u.x-o,s=u.y-a,h=2*(l*s-c*f);if(!(h>=-jo)){var p=l*l+c*c,g=f*f+s*s,v=(s*p-c*g)/h,d=(l*g-f*p)/h,s=d+a,y=fl.pop()||new Xe;y.arc=n,y.site=i,y.x=v+o,y.y=s+Math.sqrt(v*v+d*d),y.cy=s,n.circle=y;for(var m=null,M=ll._;M;)if(y.y<M.y||y.y===M.y&&y.x<=M.x){if(!M.L){m=M.P;break}M=M.L}else{if(!M.R){m=M;break}M=M.R}ll.insert(m,y),m||(al=y)}}}}function Be(n){var t=n.circle;t&&(t.P||(al=t.N),ll.remove(t),fl.push(t),rr(t),n.circle=null)}function We(n){for(var t,e=il,r=Yt(n[0][0],n[0][1],n[1][0],n[1][1]),i=e.length;i--;)t=e[i],(!Je(t,n)||!r(t)||xo(t.a.x-t.b.x)<Uo&&xo(t.a.y-t.b.y)<Uo)&&(t.a=t.b=null,e.splice(i,1))}function Je(n,t){var e=n.b;if(e)return!0;var r,i,u=n.a,o=t[0][0],a=t[1][0],l=t[0][1],c=t[1][1],f=n.l,s=n.r,h=f.x,p=f.y,g=s.x,v=s.y,d=(h+g)/2,y=(p+v)/2;if(v===p){if(o>d||d>=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:d,y:l};e={x:d,y:c}}else{if(u){if(u.y<l)return}else u={x:d,y:c};e={x:d,y:l}}}else if(r=(h-g)/(v-p),i=y-r*d,-1>r||r>1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.y<l)return}else u={x:(c-i)/r,y:c};e={x:(l-i)/r,y:l}}else if(v>p){if(u){if(u.x>=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.x<o)return}else u={x:a,y:r*a+i};e={x:o,y:r*o+i}}return n.a=u,n.b=e,!0}function Ge(n,t){this.l=n,this.r=t,this.a=this.b=null}function Ke(n,t,e,r){var i=new Ge(n,t);return il.push(i),e&&nr(i,n,t,e),r&&nr(i,t,n,r),ul[n.i].edges.push(new tr(i,n,t)),ul[t.i].edges.push(new tr(i,t,n)),i}function Qe(n,t,e){var r=new Ge(n,null);return r.a=t,r.b=e,il.push(r),r}function nr(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function tr(n,t,e){var r=n.a,i=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(i.x-r.x,r.y-i.y):Math.atan2(r.x-i.x,i.y-r.y)}function er(){this._=null}function rr(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function ir(n,t){var e=t,r=t.R,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function ur(n,t){var e=t,r=t.L,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function or(n){for(;n.L;)n=n.L;return n}function ar(n,t){var e,r,i,u=n.sort(lr).pop();for(il=[],ul=new Array(n.length),ol=new er,ll=new er;;)if(i=al,u&&(!i||u.y<i.y||u.y===i.y&&u.x<i.x))u.x===e&&u.y===r||(ul[u.i]=new Ye(u),He(u),e=u.x,r=u.y),u=n.pop();else{if(!i)break;Fe(i.arc)}t&&(We(t),Ze(t));var o={cells:ul,edges:il};return ol=ll=il=ul=null,o}function lr(n,t){return t.y-n.y||t.x-n.x}function cr(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function fr(n){return n.x}function sr(n){return n.y}function hr(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function pr(n,t,e,r,i,u){if(!n(t,e,r,i,u)){var o=.5*(e+i),a=.5*(r+u),l=t.nodes;l[0]&&pr(n,l[0],e,r,o,a),l[1]&&pr(n,l[1],o,r,i,a),l[2]&&pr(n,l[2],e,a,o,u),l[3]&&pr(n,l[3],o,a,i,u)}}function gr(n,t,e,r,i,u,o){var a,l=1/0;return function c(n,f,s,h,p){if(!(f>u||s>o||r>h||i>p)){if(g=n.point){var g,v=t-n.x,d=e-n.y,y=v*v+d*d;if(l>y){var m=Math.sqrt(l=y);r=t-m,i=e-m,u=t+m,o=e+m,a=g}}for(var M=n.nodes,x=.5*(f+h),b=.5*(s+p),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:c(n,f,s,x,b);break;case 1:c(n,x,s,h,b);break;case 2:c(n,f,b,x,p);break;case 3:c(n,x,b,h,p)}}}(n,r,i,u,o),a}function vr(n,t){n=ao.rgb(n),t=ao.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,o=t.g-r,a=t.b-i;return function(n){return"#"+bn(Math.round(e+u*n))+bn(Math.round(r+o*n))+bn(Math.round(i+a*n))}}function dr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=Mr(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function yr(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function mr(n,t){var e,r,i,u=hl.lastIndex=pl.lastIndex=0,o=-1,a=[],l=[];for(n+="",t+="";(e=hl.exec(n))&&(r=pl.exec(t));)(i=r.index)>u&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:yr(e,r)})),u=pl.lastIndex;return u<t.length&&(i=t.slice(u),a[o]?a[o]+=i:a[++o]=i),a.length<2?l[0]?(t=l[0].x,function(n){return t(n)+""}):function(){return t}:(t=l.length,function(n){for(var e,r=0;t>r;++r)a[(e=l[r]).i]=e.x(n);return a.join("")})}function Mr(n,t){for(var e,r=ao.interpolators.length;--r>=0&&!(e=ao.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(Mr(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;o>e;++e)i[e]=t[e];return function(n){for(e=0;a>e;++e)i[e]=r[e](n);return i}}function br(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function wr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function Sr(n){return n*n}function kr(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Er(n){return function(t){return Math.pow(t,n)}}function Ar(n){return 1-Math.cos(n*Io)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Lr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ho*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ho/t)}}function qr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Tr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=ao.hcl(n),t=ao.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=ao.hsl(n),t=ao.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){n=ao.lab(n),t=ao.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Hr(t),i=Fr(t,e),u=Hr(Or(e,t,-i))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,i*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Zo,this.translate=[n.e,n.f],this.scale=[r,u],this.skew=u?Math.atan2(i,u)*Zo:0}function Fr(n,t){return n[0]*t[0]+n[1]*t[1]}function Hr(n){var t=Math.sqrt(Fr(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Or(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Ir(n){return n.length?n.pop()+",":""}function Yr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push("translate(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else(t[0]||t[1])&&e.push("translate("+t+")")}function Zr(n,t,e,r){n!==t?(n-t>180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+"rotate(",null,")")-2,x:yr(n,t)})):t&&e.push(Ir(e)+"rotate("+t+")")}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+"skewX(",null,")")-2,x:yr(n,t)}):t&&e.push(Ir(e)+"skewX("+t+")")}function Xr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Ir(e)+"scale(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Ir(e)+"scale("+t+")")}function $r(n,t){var e=[],r=[];return n=ao.transform(n),t=ao.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i<u;)e[(t=r[i]).i]=t.x(n);return e.join("")}}function Br(n,t){return t=(t-=n=+n)||1/t,function(e){return(e-n)/t}}function Wr(n,t){return t=(t-=n=+n)||1/t,function(e){return Math.max(0,Math.min(1,(e-n)/t))}}function Jr(n){for(var t=n.source,e=n.target,r=Kr(t,e),i=[t];t!==r;)t=t.parent,i.push(t);for(var u=i.length;e!==r;)i.splice(u,0,e),e=e.parent;return i}function Gr(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Kr(n,t){if(n===t)return n;for(var e=Gr(n),r=Gr(t),i=e.pop(),u=r.pop(),o=null;i===u;)o=i,i=e.pop(),u=r.pop();return o}function Qr(n){n.fixed|=2}function ni(n){n.fixed&=-7}function ti(n){n.fixed|=4,n.px=n.x,n.py=n.y}function ei(n){n.fixed&=-5}function ri(n,t,e){var r=0,i=0;if(n.charge=0,!n.leaf)for(var u,o=n.nodes,a=o.length,l=-1;++l<a;)u=o[l],null!=u&&(ri(u,t,e),n.charge+=u.charge,r+=u.charge*u.cx,i+=u.charge*u.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var c=t*e[n.point.index];n.charge+=n.pointCharge=c,r+=c*n.point.x,i+=c*n.point.y}n.cx=r/n.charge,n.cy=i/n.charge}function ii(n,t){return ao.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=fi,n}function ui(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(i=n.children)&&(r=i.length))for(var r,i;--r>=0;)e.push(i[r])}function oi(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++o<i;)e.push(u[o]);for(;null!=(n=r.pop());)t(n)}function ai(n){return n.children}function li(n){return n.value}function ci(n,t){return t.value-n.value}function fi(n){return ao.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function si(n){return n.x}function hi(n){return n.y}function pi(n,t,e){n.y0=t,n.y=e}function gi(n){return ao.range(n.length)}function vi(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function di(n){for(var t,e=1,r=0,i=n[0][1],u=n.length;u>e;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function yi(n){return n.reduce(mi,0)}function mi(n,t){return n+t[1]}function Mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function bi(n){return[ao.min(n),ao.max(n)]}function _i(n,t){return n.value-t.value}function wi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Si(n,t){n._pack_next=t,t._pack_prev=n}function ki(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ni(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-(1/0),h=1/0,p=-(1/0);if(e.forEach(Ei),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(u=e[2],zi(r,i,u),t(u),wi(r,u),r._pack_prev=u,wi(u,i),i=r._pack_next,o=3;c>o;o++){zi(r,i,u=e[o]);var g=0,v=1,d=1;for(a=i._pack_next;a!==i;a=a._pack_next,v++)if(ki(a,u)){g=1;break}if(1==g)for(l=r._pack_prev;l!==a._pack_prev&&!ki(l,u);l=l._pack_prev,d++);g?(d>v||v==d&&i.r<r.r?Si(r,i=a):Si(r=l,i),o--):(wi(r,u),i=u,t(u))}var y=(f+s)/2,m=(h+p)/2,M=0;for(o=0;c>o;o++)u=e[o],u.x-=y,u.y-=m,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(Ai)}}function Ei(n){n._pack_next=n._pack_prev=n}function Ai(n){delete n._pack_next,delete n._pack_prev}function Ci(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,o=i.length;++u<o;)Ci(i[u],t,e,r)}function zi(n,t,e){var r=n.r+e.r,i=t.x-n.x,u=t.y-n.y;if(r&&(i||u)){var o=t.r+e.r,a=i*i+u*u;o*=o,r*=r;var l=.5+(r-o)/(2*a),c=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+l*i+c*u,e.y=n.y+l*u-c*i}else e.x=n.x+r,e.y=n.y}function Li(n,t){return n.parent==t.parent?1:2}function qi(n){var t=n.children;return t.length?t[0]:n.t}function Ti(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function Ri(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function Di(n){for(var t,e=0,r=0,i=n.children,u=i.length;--u>=0;)t=i[u],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Pi(n,t,e){return n.a.parent===t.parent?n.a:e}function Ui(n){return 1+ao.max(n,function(n){return n.y})}function ji(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Fi(n){var t=n.children;return t&&t.length?Fi(t[0]):n}function Hi(n){var t,e=n.children;return e&&(t=e.length)?Hi(e[t-1]):n}function Oi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ii(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Yi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Zi(n){return n.rangeExtent?n.rangeExtent():Yi(n.range())}function Vi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Xi(n,t){var e,r=0,i=n.length-1,u=n[r],o=n[i];return u>o&&(e=r,r=i,i=e,e=u,u=o,o=e),n[r]=t.floor(u),n[i]=t.ceil(o),n}function $i(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:Sl}function Bi(n,t,e,r){var i=[],u=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)i.push(e(n[o-1],n[o])),u.push(r(t[o-1],t[o]));return function(t){var e=ao.bisect(n,t,1,a)-1;return u[e](i[e](t))}}function Wi(n,t,e,r){function i(){var i=Math.min(n.length,t.length)>2?Bi:Vi,l=r?Wr:Br;return o=i(n,t,l,e),a=i(t,n,l,Mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Ur)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return ao.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Xi(n,$i(Ki(n,t)[2])),Xi(n,$i(Ki(n,t)[2])),n}function Ki(n,t){null==t&&(t=10);var e=Yi(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ao.range.apply(ao,Ki(n,t))}function nu(n,t,e){var r=Ki(n,t);if(e){var i=ha.exec(e);if(i.shift(),"s"===i[8]){var u=ao.formatPrefix(Math.max(xo(r[0]),xo(r[1])));return i[7]||(i[7]="."+tu(u.scale(r[2]))),i[8]="f",e=ao.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+eu(i[8],r)),e=i.join("")}else e=",."+tu(r[2])+"f";return ao.format(e)}function tu(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function eu(n,t){var e=tu(t[2]);return n in kl?Math.abs(e-tu(Math.max(xo(t[0]),xo(t[1]))))+ +("e"!==n):e-2*("%"===n)}function ru(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Xi(r.map(i),e?Math:El);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=Yi(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;f>c;c++)for(var h=1;s>h;h++)o.push(u(c)*h);o.push(u(c))}else for(o.push(u(c));c++<f;)for(var h=s-1;h>0;h--)o.push(u(c)*h);for(c=0;o[c]<a;c++);for(f=o.length;o[f-1]>l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return Nl;arguments.length<2?e=Nl:"function"!=typeof e&&(e=ao.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return t-.5>o*t&&(o*=t),r>=o?e(n):""}},o.copy=function(){return ru(n.copy(),t,e,r)},Ji(o,n)}function iu(n,t,e){function r(t){return n(i(t))}var i=uu(t),u=uu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return Qi(e,n)},r.tickFormat=function(n,t){return nu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(o){return arguments.length?(i=uu(t=o),u=uu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return iu(n.copy(),t,e)},Ji(r,n)}function uu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function ou(n,t){function e(e){return u[((i.get(e)||("range"===t.t?i.set(e,n.push(e)):NaN))-1)%u.length]}function r(t,e){return ao.range(n.length).map(function(n){return t+e*n})}var i,u,o;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new c;for(var u,o=-1,a=r.length;++o<a;)i.has(u=r[o])||i.set(u,n.push(u));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(u=n,o=0,t={t:"range",a:arguments},e):u},e.rangePoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=(l+c)/2,0):(c-l)/(n.length-1+a);return u=r(l+f*a/2,f),o=0,t={t:"rangePoints",a:arguments},e},e.rangeRoundPoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=c=Math.round((l+c)/2),0):(c-l)/(n.length-1+a)|0;return u=r(l+Math.round(f*a/2+(c-l-(n.length-1+a)*f)/2),f),o=0,t={t:"rangeRoundPoints",a:arguments},e},e.rangeBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=(s-f)/(n.length-a+2*l);return u=r(f+h*l,h),c&&u.reverse(),o=h*(1-a),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=Math.floor((s-f)/(n.length-a+2*l));return u=r(f+Math.round((s-f-(n.length-a)*h)/2),h),c&&u.reverse(),o=Math.round(h*(1-a)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return Yi(t.a[0])},e.copy=function(){return ou(n,t)},e.domain(n)}function au(n,t){function u(){var e=0,r=t.length;for(a=[];++e<r;)a[e-1]=ao.quantile(n,e/r);return o}function o(n){return isNaN(n=+n)?void 0:t[ao.bisect(a,n)]}var a;return o.domain=function(t){return arguments.length?(n=t.map(r).filter(i).sort(e),u()):n},o.range=function(n){return arguments.length?(t=n,u()):t},o.quantiles=function(){return a},o.invertExtent=function(e){return e=t.indexOf(e),0>e?[NaN,NaN]:[e>0?a[e-1]:n[0],e<a.length?a[e]:n[n.length-1]]},o.copy=function(){return au(n,t)},u()}function lu(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(u*(t-n))))]}function i(){return u=e.length/(t-n),o=e.length-1,r}var u,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],i()):[n,t]},r.range=function(n){return arguments.length?(e=n,i()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?NaN:t/u+n,[t,t+1/u]},r.copy=function(){return lu(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[ao.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function fu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Qi(n,t)},t.tickFormat=function(t,e){return nu(n,t,e)},t.copy=function(){return fu(n)},t}function su(){return 0}function hu(n){return n.innerRadius}function pu(n){return n.outerRadius}function gu(n){return n.startAngle}function vu(n){return n.endAngle}function du(n){return n&&n.padAngle}function yu(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function mu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,v=(s+p)/2,d=h-f,y=p-s,m=d*d+y*y,M=e-r,x=f*p-h*s,b=(0>y?-1:1)*Math.sqrt(Math.max(0,M*M*m-x*x)),_=(x*y-d*b)/m,w=(-x*d-y*b)/m,S=(x*y+d*b)/m,k=(-x*d+y*b)/m,N=_-g,E=w-v,A=S-g,C=k-v;return N*N+E*E>A*A+C*C&&(_=S,w=k),[[_-l,w-c],[_*e/M,w*e/M]]}function Mu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s<h;)i.call(this,l=t[s],s)?f.push([+p.call(this,l,s),+g.call(this,l,s)]):f.length&&(o(),f=[]);return f.length&&o(),c.length?c.join(""):null}var e=Ce,r=ze,i=zt,u=xu,o=u.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(i=n,t):i},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?u=n:(u=Tl.get(n)||xu).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function xu(n){return n.length>1?n.join("L"):n+"Z"}function bu(n){return n.join("L")+"Z"}function _u(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&i.push("H",r[0]),i.join("")}function wu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("V",(r=n[t])[1],"H",r[0]);return i.join("")}function Su(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r=n[t])[0],"V",r[1]);return i.join("")}function ku(n,t){return n.length<4?xu(n):n[1]+Au(n.slice(1,-1),Cu(n,t))}function Nu(n,t){return n.length<3?bu(n):n[0]+Au((n.push(n[0]),n),Cu([n[n.length-2]].concat(n,[n[1]]),t))}function Eu(n,t){return n.length<3?xu(n):n[0]+Au(n,Cu(n,t))}function Au(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return xu(n);var e=n.length!=t.length,r="",i=n[0],u=n[1],o=t[0],a=o,l=1;if(e&&(r+="Q"+(u[0]-2*o[0]/3)+","+(u[1]-2*o[1]/3)+","+u[0]+","+u[1],i=n[1],l=2),t.length>1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c<t.length;c++,l++)u=n[l],a=t[c],r+="S"+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1]}if(e){var f=n[l];r+="Q"+(u[0]+2*a[0]/3)+","+(u[1]+2*a[1]/3)+","+f[0]+","+f[1]}return r}function Cu(n,t){for(var e,r=[],i=(1-t)/2,u=n[0],o=n[1],a=1,l=n.length;++a<l;)e=u,u=o,o=n[a],r.push([i*(o[0]-e[0]),i*(o[1]-e[1])]);return r}function zu(n){if(n.length<3)return xu(n);var t=1,e=n.length,r=n[0],i=r[0],u=r[1],o=[i,i,i,(r=n[1])[0]],a=[u,u,u,r[1]],l=[i,",",u,"L",Ru(Pl,o),",",Ru(Pl,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),Du(l,o,a);return n.pop(),l.push("L",r),l.join("")}function Lu(n){if(n.length<4)return xu(n);for(var t,e=[],r=-1,i=n.length,u=[0],o=[0];++r<3;)t=n[r],u.push(t[0]),o.push(t[1]);for(e.push(Ru(Pl,u)+","+Ru(Pl,o)),--r;++r<i;)t=n[r],u.shift(),u.push(t[0]),o.shift(),o.push(t[1]),Du(e,u,o);return e.join("")}function qu(n){for(var t,e,r=-1,i=n.length,u=i+4,o=[],a=[];++r<4;)e=n[r%i],o.push(e[0]),a.push(e[1]);for(t=[Ru(Pl,o),",",Ru(Pl,a)],--r;++r<u;)e=n[r%i],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),Du(t,o,a);return t.join("")}function Tu(n,t){var e=n.length-1;if(e)for(var r,i,u=n[0][0],o=n[0][1],a=n[e][0]-u,l=n[e][1]-o,c=-1;++c<=e;)r=n[c],i=c/e,r[0]=t*r[0]+(1-t)*(u+i*a),r[1]=t*r[1]+(1-t)*(o+i*l);return zu(n)}function Ru(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function Du(n,t,e){n.push("C",Ru(Rl,t),",",Ru(Rl,e),",",Ru(Dl,t),",",Ru(Dl,e),",",Ru(Pl,t),",",Ru(Pl,e))}function Pu(n,t){return(t[1]-n[1])/(t[0]-n[0])}function Uu(n){for(var t=0,e=n.length-1,r=[],i=n[0],u=n[1],o=r[0]=Pu(i,u);++t<e;)r[t]=(o+(o=Pu(i=u,u=n[t+1])))/2;return r[t]=o,r}function ju(n){for(var t,e,r,i,u=[],o=Uu(n),a=-1,l=n.length-1;++a<l;)t=Pu(n[a],n[a+1]),xo(t)<Uo?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,i=e*e+r*r,i>9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r));for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Fu(n){return n.length<3?xu(n):n[0]+Au(n,ju(n))}function Hu(n){for(var t,e,r,i=-1,u=n.length;++i<u;)t=n[i],e=t[0],r=t[1]-Io,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Ou(n){function t(t){function l(){v.push("M",a(n(y),s),f,c(n(d.reverse()),s),"Z")}for(var h,p,g,v=[],d=[],y=[],m=-1,M=t.length,x=En(e),b=En(i),_=e===r?function(){ + return p}:En(r),w=i===u?function(){return g}:En(u);++m<M;)o.call(this,h=t[m],m)?(d.push([p=+x.call(this,h,m),g=+b.call(this,h,m)]),y.push([+_.call(this,h,m),+w.call(this,h,m)])):d.length&&(l(),d=[],y=[]);return d.length&&l(),v.length?v.join(""):null}var e=Ce,r=Ce,i=0,u=ze,o=zt,a=xu,l=a.key,c=a,f="L",s=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(i=u=n,t):u},t.y0=function(n){return arguments.length?(i=n,t):i},t.y1=function(n){return arguments.length?(u=n,t):u},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(l="function"==typeof n?a=n:(a=Tl.get(n)||xu).key,c=a.reverse||a,f=a.closed?"M":"L",t):l},t.tension=function(n){return arguments.length?(s=n,t):s},t}function Iu(n){return n.radius}function Yu(n){return[n.x,n.y]}function Zu(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]-Io;return[e*Math.cos(r),e*Math.sin(r)]}}function Vu(){return 64}function Xu(){return"circle"}function $u(n){var t=Math.sqrt(n/Fo);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Bu(n){return function(){var t,e,r;(t=this[n])&&(r=t[e=t.active])&&(r.timer.c=null,r.timer.t=NaN,--t.count?delete t[e]:delete this[n],t.active+=.5,r.event&&r.event.interrupt.call(this,this.__data__,r.index))}}function Wu(n,t,e){return ko(n,Yl),n.namespace=t,n.id=e,n}function Ju(n,t,e,r){var i=n.id,u=n.namespace;return Y(n,"function"==typeof e?function(n,o,a){n[u][i].tween.set(t,r(e.call(n,n.__data__,o,a)))}:(e=r(e),function(n){n[u][i].tween.set(t,e)}))}function Gu(n){return null==n&&(n=""),function(){this.textContent=n}}function Ku(n){return null==n?"__transition__":"__transition_"+n+"__"}function Qu(n,t,e,r,i){function u(n){var t=v.delay;return f.t=t+l,n>=t?o(n-t):void(f.c=o)}function o(e){var i=g.active,u=g[i];u&&(u.timer.c=null,u.timer.t=NaN,--g.count,delete g[i],u.event&&u.event.interrupt.call(n,n.__data__,u.index));for(var o in g)if(r>+o){var c=g[o];c.timer.c=null,c.timer.t=NaN,--g.count,delete g[o]}f.c=a,qn(function(){return f.c&&a(e||1)&&(f.c=null,f.t=NaN),1},0,l),g.active=r,v.event&&v.event.start.call(n,n.__data__,t),p=[],v.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&p.push(r)}),h=v.ease,s=v.duration}function a(i){for(var u=i/s,o=h(u),a=p.length;a>0;)p[--a].call(n,o);return u>=1?(v.event&&v.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1):void 0}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),v=g[r];v||(l=i.time,f=qn(u,0,l),v=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function no(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function to(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function eo(n){return n.toISOString()}function ro(n,t,e){function r(t){return n(t)}function i(n,e){var r=n[1]-n[0],i=r/e,u=ao.bisect(Kl,i);return u==Kl.length?[t.year,Ki(n.map(function(n){return n/31536e6}),e)[2]]:u?t[i/Kl[u-1]<Kl[u]/i?u-1:u]:[tc,Ki(n,e)[2]]}return r.invert=function(t){return io(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(io)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,io(+e+1),t).length}var u=r.domain(),o=Yi(u),a=null==n?i(o,10):"number"==typeof n&&i(o,n);return a&&(n=a[0],t=a[1]),r.domain(Xi(u,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yi(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],io(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ro(n.copy(),t,e)},Ji(r,n)}function io(n){return new Date(n)}function uo(n){return JSON.parse(n.responseText)}function oo(n){var t=fo.createRange();return t.selectNode(fo.body),t.createContextualFragment(n.responseText)}var ao={version:"3.5.17"},lo=[].slice,co=function(n){return lo.call(n)},fo=this.document;if(fo)try{co(fo.documentElement.childNodes)[0].nodeType}catch(so){co=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(ho){var po=this.Element.prototype,go=po.setAttribute,vo=po.setAttributeNS,yo=this.CSSStyleDeclaration.prototype,mo=yo.setProperty;po.setAttribute=function(n,t){go.call(this,n,t+"")},po.setAttributeNS=function(n,t,e){vo.call(this,n,t,e+"")},yo.setProperty=function(n,t,e){mo.call(this,n,t+"",e)}}ao.ascending=e,ao.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:NaN},ao.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&e>r&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&e>r&&(e=r)}return e},ao.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&r>e&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&r>e&&(e=r)}return e},ao.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u<o;)if(null!=(r=n[u])&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=n[u])&&(e>r&&(e=r),r>i&&(i=r))}else{for(;++u<o;)if(null!=(r=t.call(n,n[u],u))&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=t.call(n,n[u],u))&&(e>r&&(e=r),r>i&&(i=r))}return[e,i]},ao.sum=function(n,t){var e,r=0,u=n.length,o=-1;if(1===arguments.length)for(;++o<u;)i(e=+n[o])&&(r+=e);else for(;++o<u;)i(e=+t.call(n,n[o],o))&&(r+=e);return r},ao.mean=function(n,t){var e,u=0,o=n.length,a=-1,l=o;if(1===arguments.length)for(;++a<o;)i(e=r(n[a]))?u+=e:--l;else for(;++a<o;)i(e=r(t.call(n,n[a],a)))?u+=e:--l;return l?u/l:void 0},ao.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),i=+n[r-1],u=e-r;return u?i+u*(n[r]-i):i},ao.median=function(n,t){var u,o=[],a=n.length,l=-1;if(1===arguments.length)for(;++l<a;)i(u=r(n[l]))&&o.push(u);else for(;++l<a;)i(u=r(t.call(n,n[l],l)))&&o.push(u);return o.length?ao.quantile(o.sort(e),.5):void 0},ao.variance=function(n,t){var e,u,o=n.length,a=0,l=0,c=-1,f=0;if(1===arguments.length)for(;++c<o;)i(e=r(n[c]))&&(u=e-a,a+=u/++f,l+=u*(e-a));else for(;++c<o;)i(e=r(t.call(n,n[c],c)))&&(u=e-a,a+=u/++f,l+=u*(e-a));return f>1?l/(f-1):void 0},ao.deviation=function(){var n=ao.variance.apply(this,arguments);return n?Math.sqrt(n):n};var Mo=u(e);ao.bisectLeft=Mo.left,ao.bisect=ao.bisectRight=Mo.right,ao.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},ao.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,2>u&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},ao.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ao.pairs=function(n){for(var t,e=0,r=n.length-1,i=n[0],u=new Array(0>r?0:r);r>e;)u[e]=[t=i,i=n[++e]];return u},ao.transpose=function(n){if(!(i=n.length))return[];for(var t=-1,e=ao.min(n,o),r=new Array(e);++t<e;)for(var i,u=-1,a=r[t]=new Array(i);++u<i;)a[u]=n[u][t];return r},ao.zip=function(){return ao.transpose(arguments)},ao.keys=function(n){var t=[];for(var e in n)t.push(e);return t},ao.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},ao.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},ao.merge=function(n){for(var t,e,r,i=n.length,u=-1,o=0;++u<i;)o+=n[u].length;for(e=new Array(o);--i>=0;)for(r=n[i],t=r.length;--t>=0;)e[--o]=r[t];return e};var xo=Math.abs;ao.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,i=[],u=a(xo(e)),o=-1;if(n*=u,t*=u,e*=u,0>e)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)<t;)i.push(r/u);return i},ao.map=function(n,t){var e=new c;if(n instanceof c)n.forEach(function(n,t){e.set(n,t)});else if(Array.isArray(n)){var r,i=-1,u=n.length;if(1===arguments.length)for(;++i<u;)e.set(i,n[i]);else for(;++i<u;)e.set(t.call(n,r=n[i],i),r)}else for(var o in n)e.set(o,n[o]);return e};var bo="__proto__",_o="\x00";l(c,{has:h,get:function(n){return this._[f(n)]},set:function(n,t){return this._[f(n)]=t},remove:p,keys:g,values:function(){var n=[];for(var t in this._)n.push(this._[t]);return n},entries:function(){var n=[];for(var t in this._)n.push({key:s(t),value:this._[t]});return n},size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t),this._[t])}}),ao.nest=function(){function n(t,o,a){if(a>=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,v=u[a++],d=new c;++p<g;)(h=d.get(l=v(f=o[p])))?h.push(f):d.set(l,[f]);return t?(f=t(),s=function(e,r){f.set(e,n(t,r,a))}):(f={},s=function(e,r){f[e]=n(t,r,a)}),d.forEach(s),f}function t(n,e){if(e>=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(ao.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},ao.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},l(y,{has:h,add:function(n){return this._[f(n+="")]=!0,n},remove:p,values:g,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t))}}),ao.behavior={},ao.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r<i;)n[e=arguments[r]]=M(n,t,t[e]);return n};var wo=["webkit","ms","moz","Moz","o","O"];ao.dispatch=function(){for(var n=new _,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=w(n);return n},_.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ao.event=null,ao.requote=function(n){return n.replace(So,"\\$&")};var So=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ko={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},No=function(n,t){return t.querySelector(n)},Eo=function(n,t){return t.querySelectorAll(n)},Ao=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(Ao=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(No=function(n,t){return Sizzle(n,t)[0]||null},Eo=Sizzle,Ao=Sizzle.matchesSelector),ao.selection=function(){return ao.select(fo.documentElement)};var Co=ao.selection.prototype=[];Co.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o<a;){u.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var l=-1,c=r.length;++l<c;)(i=r[l])?(t.push(e=n.call(i,i.__data__,l,o)),e&&"__data__"in i&&(e.__data__=i.__data__)):t.push(null)}return E(u)},Co.selectAll=function(n){var t,e,r=[];n=C(n);for(var i=-1,u=this.length;++i<u;)for(var o=this[i],a=-1,l=o.length;++a<l;)(e=o[a])&&(r.push(t=co(n.call(e,e.__data__,a,i))),t.parentNode=e);return E(r)};var zo="http://www.w3.org/1999/xhtml",Lo={svg:"http://www.w3.org/2000/svg",xhtml:zo,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};ao.ns={prefix:Lo,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),Lo.hasOwnProperty(e)?{space:Lo[e],local:n}:n}},Co.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ao.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},Co.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++i<r;)if(!t.contains(n[i]))return!1}else for(t=e.getAttribute("class");++i<r;)if(!q(n[i]).test(t))return!1;return!0}for(t in n)this.each(R(t,n[t]));return this}return this.each(R(n,t))},Co.style=function(n,e,r){var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(e="");for(r in n)this.each(P(r,n[r],e));return this}if(2>i){var u=this.node();return t(u).getComputedStyle(u,null).getPropertyValue(n)}r=""}return this.each(P(n,e,r))},Co.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(U(t,n[t]));return this}return this.each(U(n,t))},Co.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Co.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Co.append=function(n){return n=j(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Co.insert=function(n,t){return n=j(n),t=A(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},Co.remove=function(){return this.each(F)},Co.data=function(n,t){function e(n,e){var r,i,u,o=n.length,s=e.length,h=Math.min(o,s),p=new Array(s),g=new Array(s),v=new Array(o);if(t){var d,y=new c,m=new Array(o);for(r=-1;++r<o;)(i=n[r])&&(y.has(d=t.call(i,i.__data__,r))?v[r]=i:y.set(d,i),m[r]=d);for(r=-1;++r<s;)(i=y.get(d=t.call(e,u=e[r],r)))?i!==!0&&(p[r]=i,i.__data__=u):g[r]=H(u),y.set(d,!0);for(r=-1;++r<o;)r in m&&y.get(m[r])!==!0&&(v[r]=n[r])}else{for(r=-1;++r<h;)i=n[r],u=e[r],i?(i.__data__=u,p[r]=i):g[r]=H(u);for(;s>r;++r)g[r]=H(e[r]);for(;o>r;++r)v[r]=n[r]}g.update=p,g.parentNode=p.parentNode=v.parentNode=n.parentNode,a.push(g),l.push(p),f.push(v)}var r,i,u=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++u<o;)(i=r[u])&&(n[u]=i.__data__);return n}var a=Z([]),l=E([]),f=E([]);if("function"==typeof n)for(;++u<o;)e(r=this[u],n.call(r,r.parentNode.__data__,u));else for(;++u<o;)e(r=this[u],n);return l.enter=function(){return a},l.exit=function(){return f},l},Co.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},Co.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return E(i)},Co.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],i=r.length-1,u=r[i];--i>=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Co.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},Co.each=function(n){return Y(this,function(t,e,r){n.call(t,t.__data__,e,r)})},Co.call=function(n){var t=co(arguments);return n.apply(t[0]=this,t),this},Co.empty=function(){return!this.node()},Co.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Co.size=function(){var n=0;return Y(this,function(){++n}),n};var qo=[];ao.selection.enter=Z,ao.selection.enter.prototype=qo,qo.append=Co.append,qo.empty=Co.empty,qo.node=Co.node,qo.call=Co.call,qo.size=Co.size,qo.select=function(n){for(var t,e,r,i,u,o=[],a=-1,l=this.length;++a<l;){r=(i=this[a]).update,o.push(t=[]),t.parentNode=i.parentNode;for(var c=-1,f=i.length;++c<f;)(u=i[c])?(t.push(r[c]=e=n.call(i.parentNode,u.__data__,c,a)),e.__data__=u.__data__):t.push(null)}return E(o)},qo.insert=function(n,t){return arguments.length<2&&(t=V(this)),Co.insert.call(this,n,t)},ao.select=function(t){var e;return"string"==typeof t?(e=[No(t,fo)],e.parentNode=fo.documentElement):(e=[t],e.parentNode=n(t)),E([e])},ao.selectAll=function(n){var t;return"string"==typeof n?(t=co(Eo(n,fo)),t.parentNode=fo.documentElement):(t=co(n),t.parentNode=null),E([t])},Co.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(X(n,t,e))};var To=ao.map({mouseenter:"mouseover",mouseleave:"mouseout"});fo&&To.forEach(function(n){"on"+n in fo&&To.remove(n)});var Ro,Do=0;ao.mouse=function(n){return J(n,k())};var Po=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;ao.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,i=0,u=t.length;u>i;++i)if((r=t[i]).identifier===e)return J(n,r)},ao.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",o)}function e(n,t,e,u,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],g|=n|e,M=r,p({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:n,dy:e}))}function l(){t(h,v)&&(y.on(u+d,null).on(o+d,null),m(g),p({type:"dragend"}))}var c,f=this,s=ao.event.target.correspondingElement||ao.event.target,h=f.parentNode,p=r.of(f,arguments),g=0,v=n(),d=".drag"+(null==v?"":"-"+v),y=ao.select(e(s)).on(u+d,a).on(o+d,l),m=W(s),M=t(h,v);i?(c=i.apply(f,arguments),c=[c.x-M[0],c.y-M[1]]):c=[0,0],p({type:"dragstart"})}}var r=N(n,"drag","dragstart","dragend"),i=null,u=e(b,ao.mouse,t,"mousemove","mouseup"),o=e(G,ao.touch,m,"touchmove","touchend");return n.origin=function(t){return arguments.length?(i=t,n):i},ao.rebind(n,r,"on")},ao.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?co(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Uo=1e-6,jo=Uo*Uo,Fo=Math.PI,Ho=2*Fo,Oo=Ho-Uo,Io=Fo/2,Yo=Fo/180,Zo=180/Fo,Vo=Math.SQRT2,Xo=2,$o=4;ao.interpolateZoom=function(n,t){var e,r,i=n[0],u=n[1],o=n[2],a=t[0],l=t[1],c=t[2],f=a-i,s=l-u,h=f*f+s*s;if(jo>h)r=Math.log(c/o)/Vo,e=function(n){return[i+n*f,u+n*s,o*Math.exp(Vo*n*r)]};else{var p=Math.sqrt(h),g=(c*c-o*o+$o*h)/(2*o*Xo*p),v=(c*c-o*o-$o*h)/(2*c*Xo*p),d=Math.log(Math.sqrt(g*g+1)-g),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-d)/Vo,e=function(n){var t=n*r,e=rn(d),a=o/(Xo*p)*(e*un(Vo*t+d)-en(d));return[i+a*f,u+a*s,o*e/rn(Vo*t+d)]}}return e.duration=1e3*r,e},ao.behavior.zoom=function(){function n(n){n.on(L,s).on(Wo+".zoom",p).on("dblclick.zoom",g).on(R,h)}function e(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function r(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function i(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=r(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function o(t,e,r,o){t.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,o)),u(d=e,r),t=ao.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),d=null)}function s(){function n(){a=1,u(ao.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=ao.select(t(i)).on(q,n).on(T,r),h=e(ao.mouse(i)),p=W(i);Il.call(i),l(o)}function h(){function n(){var n=ao.touches(g);return p=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ao.event.target;ao.select(t).on(x,r).on(b,a),_.push(t);for(var e=ao.event.changedTouches,i=0,u=e.length;u>i;++i)d[e[i].identifier]=null;var l=n(),c=Date.now();if(1===l.length){if(500>c-M){var f=l[0];o(g,f,d[f.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=c}else if(l.length>1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=ao.touches(g);Il.call(g);for(var a=0,l=o.length;l>a;++a,r=null)if(e=o[a],r=d[e.identifier]){if(t)break;n=e,t=r}if(r){var f=(f=e[0]-n[0])*f+(f=e[1]-n[1])*f,s=y&&Math.sqrt(f/y);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+r[0])/2,(t[1]+r[1])/2],i(s*p)}M=null,u(n,t),c(v)}function a(){if(ao.event.touches.length){for(var t=ao.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var i in d)return void n()}ao.selectAll(_).on(m,null),w.on(L,s).on(R,h),N(),f(v)}var p,g=this,v=D.of(g,arguments),d={},y=0,m=".zoom-"+ao.event.changedTouches[0].identifier,x="touchmove"+m,b="touchend"+m,_=[],w=ao.select(g),N=W(g);t(),l(v),w.on(L,null).on(R,t)}function p(){var n=D.of(this,arguments);m?clearTimeout(m):(Il.call(this),v=e(d=y||ao.mouse(this)),l(n)),m=setTimeout(function(){m=null,f(n)},50),S(),i(Math.pow(2,.002*Bo())*k.k),u(d,v),c(n)}function g(){var n=ao.mouse(this),t=Math.log(k.k)/Math.LN2;o(this,n,e(n),ao.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,y,m,M,x,b,_,w,k={x:0,y:0,k:1},E=[960,500],A=Jo,C=250,z=0,L="mousedown.zoom",q="mousemove.zoom",T="mouseup.zoom",R="touchstart.zoom",D=N(n,"zoomstart","zoom","zoomend");return Wo||(Wo="onwheel"in fo?(Bo=function(){return-ao.event.deltaY*(ao.event.deltaMode?120:1)},"wheel"):"onmousewheel"in fo?(Bo=function(){return ao.event.wheelDelta},"mousewheel"):(Bo=function(){return-ao.event.detail},"MozMousePixelScroll")),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Hl?ao.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},l(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],i=d?d[0]:e/2,u=d?d[1]:r/2,o=ao.interpolateZoom([(i-k.x)/k.k,(u-k.y)/k.k,e/k.k],[(i-t.x)/t.k,(u-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:i-r[0]*a,y:u-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){f(n)}).each("end.zoom",function(){f(n)}):(this.__chart__=k,l(n),c(n),f(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},a(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:null},i(+t),a(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Jo:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(y=t&&[+t[0],+t[1]],n):y},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},ao.rebind(n,D,"on")};var Bo,Wo,Jo=[0,1/0];ao.color=an,an.prototype.toString=function(){return this.rgb()+""},ao.hsl=ln;var Go=ln.prototype=new an;Go.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,this.l/n)},Go.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,n*this.l)},Go.rgb=function(){return cn(this.h,this.s,this.l)},ao.hcl=fn;var Ko=fn.prototype=new an;Ko.brighter=function(n){return new fn(this.h,this.c,Math.min(100,this.l+Qo*(arguments.length?n:1)))},Ko.darker=function(n){return new fn(this.h,this.c,Math.max(0,this.l-Qo*(arguments.length?n:1)))},Ko.rgb=function(){return sn(this.h,this.c,this.l).rgb()},ao.lab=hn;var Qo=18,na=.95047,ta=1,ea=1.08883,ra=hn.prototype=new an;ra.brighter=function(n){return new hn(Math.min(100,this.l+Qo*(arguments.length?n:1)),this.a,this.b)},ra.darker=function(n){return new hn(Math.max(0,this.l-Qo*(arguments.length?n:1)),this.a,this.b)},ra.rgb=function(){return pn(this.l,this.a,this.b)},ao.rgb=mn;var ia=mn.prototype=new an;ia.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),new mn(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mn(i,i,i)},ia.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mn(n*this.r,n*this.g,n*this.b)},ia.hsl=function(){return wn(this.r,this.g,this.b)},ia.toString=function(){return"#"+bn(this.r)+bn(this.g)+bn(this.b)};var ua=ao.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ua.forEach(function(n,t){ua.set(n,Mn(t))}),ao.functor=En,ao.xhr=An(m),ao.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var o=Cn(n,t,null==e?r:i(e),u);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:i(n)):e},o}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function u(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(f>=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++<c;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}f=e+2;var r=n.charCodeAt(e+1);return 13===r?(i=!0,10===n.charCodeAt(e+2)&&++f):10===r&&(i=!0),n.slice(t+1,e).replace(/""/g,'"')}for(;c>f;){var r=n.charCodeAt(f++),a=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(f)&&(++f,++a);else if(r!==l)continue;return n.slice(t,f-a)}return n.slice(t)}for(var r,i,u={},o={},a=[],c=n.length,f=0,s=0;(r=e())!==o;){for(var h=[];r!==u&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,s++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new y,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(u).join("\n")},e},ao.csv=ao.dsv(",","text/csv"),ao.tsv=ao.dsv(" ","text/tab-separated-values");var oa,aa,la,ca,fa=this[x(this,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ao.timer=function(){qn.apply(this,arguments)},ao.timer.flush=function(){Rn(),Dn()},ao.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var sa=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Un);ao.formatPrefix=function(n,t){var e=0;return(n=+n)&&(0>n&&(n*=-1),t&&(n=ao.round(n,Pn(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),sa[8+e/3]};var ha=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,pa=ao.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ao.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ga=ao.time={},va=Date;Hn.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){da.setUTCDate.apply(this._,arguments)},setDay:function(){da.setUTCDay.apply(this._,arguments)},setFullYear:function(){da.setUTCFullYear.apply(this._,arguments)},setHours:function(){da.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){da.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){da.setUTCMinutes.apply(this._,arguments)},setMonth:function(){da.setUTCMonth.apply(this._,arguments)},setSeconds:function(){da.setUTCSeconds.apply(this._,arguments)},setTime:function(){da.setTime.apply(this._,arguments)}};var da=Date.prototype;ga.year=On(function(n){return n=ga.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ga.years=ga.year.range,ga.years.utc=ga.year.utc.range,ga.day=On(function(n){var t=new va(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ga.days=ga.day.range,ga.days.utc=ga.day.utc.range,ga.dayOfYear=function(n){var t=ga.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ga[n]=On(function(n){return(n=ga.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ga[n+"s"]=e.range,ga[n+"s"].utc=e.utc.range,ga[n+"OfYear"]=function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)}}),ga.week=ga.sunday,ga.weeks=ga.sunday.range,ga.weeks.utc=ga.sunday.utc.range,ga.weekOfYear=ga.sundayOfYear;var ya={"-":"",_:" ",0:"0"},ma=/^\s*\d+/,Ma=/^%/;ao.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xa=ao.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], + shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ao.format=xa.numberFormat,ao.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,ba),st(ba.s,this.s,this),this.s?this.t+=ba.t:this.s=ba.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ba=new ft;ao.geo.stream=function(n,t){n&&_a.hasOwnProperty(n.type)?_a[n.type](n,t):ht(n,t)};var _a={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++r<i;)ht(e[r].geometry,t)}},wa={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){pt(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)pt(e[r],t,0)},Polygon:function(n,t){gt(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)gt(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,i=e.length;++r<i;)ht(e[r],t)}};ao.geo.area=function(n){return Sa=0,ao.geo.stream(n,Na),Sa};var Sa,ka=new ft,Na={sphere:function(){Sa+=4*Fo},point:b,lineStart:b,lineEnd:b,polygonStart:function(){ka.reset(),Na.lineStart=vt},polygonEnd:function(){var n=2*ka;Sa+=0>n?4*Fo+n:n,Na.lineStart=Na.lineEnd=Na.point=b}};ao.geo.bounds=function(){function n(n,t){M.push(x=[f=n,h=n]),s>t&&(s=t),t>p&&(p=t)}function t(t,e){var r=dt([t*Yo,e*Yo]);if(y){var i=mt(y,r),u=[i[1],-i[0],0],o=mt(u,i);bt(o),o=_t(o);var l=t-g,c=l>0?1:-1,v=o[0]*Zo*c,d=xo(l)>180;if(d^(v>c*g&&c*t>v)){var m=o[1]*Zo;m>p&&(p=m)}else if(v=(v+360)%360-180,d^(v>c*g&&c*t>v)){var m=-o[1]*Zo;s>m&&(s=m)}else s>e&&(s=e),e>p&&(p=e);d?g>t?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(f>t&&(f=t),t>h&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){b.point=t}function r(){x[0]=f,x[1]=h,b.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=xo(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Na.point(n,e),t(n,e)}function u(){Na.lineStart()}function o(){i(v,d),Na.lineEnd(),xo(m)>Uo&&(f=-(h=180)),x[0]=f,x[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var f,s,h,p,g,v,d,y,m,M,x,b={point:n,lineStart:e,lineEnd:r,polygonStart:function(){b.point=i,b.lineStart=u,b.lineEnd=o,m=0,Na.polygonStart()},polygonEnd:function(){Na.polygonEnd(),b.point=n,b.lineStart=e,b.lineEnd=r,0>ka?(f=-(h=180),s=-(p=90)):m>Uo?p=90:-Uo>m&&(s=-90),x[0]=f,x[1]=h}};return function(n){p=h=-(f=s=1/0),M=[],ao.geo.stream(n,b);var t=M.length;if(t){M.sort(l);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],c(e[0],i)||c(e[1],i)?(a(i[0],e[1])>a(i[0],i[1])&&(i[1]=e[1]),a(e[0],i[1])>a(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var o,e,g=-(1/0),t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(o=a(i[1],e[0]))>g&&(g=o,f=e[0],h=i[1])}return M=x=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),ao.geo.centroid=function(n){Ea=Aa=Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,ja);var t=Da,e=Pa,r=Ua,i=t*t+e*e+r*r;return jo>i&&(t=qa,e=Ta,r=Ra,Uo>Aa&&(t=Ca,e=za,r=La),i=t*t+e*e+r*r,jo>i)?[NaN,NaN]:[Math.atan2(e,t)*Zo,tn(r/Math.sqrt(i))*Zo]};var Ea,Aa,Ca,za,La,qa,Ta,Ra,Da,Pa,Ua,ja={sphere:b,point:St,lineStart:Nt,lineEnd:Et,polygonStart:function(){ja.lineStart=At},polygonEnd:function(){ja.lineStart=Nt}},Fa=Rt(zt,jt,Ht,[-Fo,-Fo/2]),Ha=1e9;ao.geo.clipExtent=function(){var n,t,e,r,i,u,o={stream:function(n){return i&&(i.valid=!1),i=u(n),i.valid=!0,i},extent:function(a){return arguments.length?(u=Zt(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),i&&(i.valid=!1,i=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ao.geo.conicEqualArea=function(){return Vt(Xt)}).raw=Xt,ao.geo.albers=function(){return ao.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ao.geo.albersUsa=function(){function n(n){var u=n[0],o=n[1];return t=null,e(u,o),t||(r(u,o),t)||i(u,o),t}var t,e,r,i,u=ao.geo.albers(),o=ao.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ao.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?o:i>=.166&&.234>i&&r>=-.214&&-.115>r?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Uo,s+.12*c+Uo],[f-.214*c-Uo,s+.234*c-Uo]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Uo,s+.166*c+Uo],[f-.115*c-Uo,s+.234*c-Uo]]).stream(l).point,n},n.scale(1070)};var Oa,Ia,Ya,Za,Va,Xa,$a={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Ia=0,$a.lineStart=$t},polygonEnd:function(){$a.lineStart=$a.lineEnd=$a.point=b,Oa+=xo(Ia/2)}},Ba={point:Bt,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Wa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Wa.lineStart=ne},polygonEnd:function(){Wa.point=Gt,Wa.lineStart=Kt,Wa.lineEnd=Qt}};ao.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),ao.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return Oa=0,ao.geo.stream(n,i($a)),Oa},n.centroid=function(n){return Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,i(Wa)),Ua?[Da/Ua,Pa/Ua]:Ra?[qa/Ra,Ta/Ra]:La?[Ca/La,za/La]:[NaN,NaN]},n.bounds=function(n){return Va=Xa=-(Ya=Za=1/0),ao.geo.stream(n,i(Ba)),[[Ya,Za],[Va,Xa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(ao.geo.albersUsa()).context(null)},ao.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ao.geo.projection=oe,ao.geo.projectionMutator=ae,(ao.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,ao.geo.rotation=function(n){function t(t){return t=n(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t}return n=se(n[0]%360*Yo,n[1]*Yo,n.length>2?n[2]*Yo:0),t.invert=function(t){return t=n.invert(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t},t},fe.invert=ce,ao.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Yo,-n[1]*Yo,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Zo,n[1]*=Zo}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=ve((t=+r)*Yo,i*Yo),n):t},n.precision=function(r){return arguments.length?(e=ve(t*Yo,(i=+r)*Yo),n):i},n.angle(90)},ao.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Yo,i=n[1]*Yo,u=t[1]*Yo,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},ao.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ao.range(Math.ceil(u/d)*d,i,d).map(h).concat(ao.range(Math.ceil(c/y)*y,l,y).map(p)).concat(ao.range(Math.ceil(r/g)*g,e,g).filter(function(n){return xo(n%d)>Uo}).map(f)).concat(ao.range(Math.ceil(a/v)*v,o,v).filter(function(n){return xo(n%y)>Uo}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,v=g,d=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],y=+t[1],n):[d,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],n):[g,v]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Uo],[180,90-Uo]]).minorExtent([[-180,-80-Uo],[180,80+Uo]])},ao.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Me,i=xe;return n.distance=function(){return ao.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ao.geo.interpolate=function(n,t){return be(n[0]*Yo,n[1]*Yo,t[0]*Yo,t[1]*Yo)},ao.geo.length=function(n){return Ja=0,ao.geo.stream(n,Ga),Ja};var Ja,Ga={sphere:b,point:b,lineStart:_e,lineEnd:b,polygonStart:b,polygonEnd:b},Ka=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ao.geo.azimuthalEqualArea=function(){return oe(Ka)}).raw=Ka;var Qa=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(ao.geo.azimuthalEquidistant=function(){return oe(Qa)}).raw=Qa,(ao.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(ao.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var nl=we(function(n){return 1/n},Math.atan);(ao.geo.gnomonic=function(){return oe(nl)}).raw=nl,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Io]},(ao.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var tl=we(function(){return 1},Math.asin);(ao.geo.orthographic=function(){return oe(tl)}).raw=tl;var el=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ao.geo.stereographic=function(){return oe(el)}).raw=el,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Io]},(ao.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,ao.geom={},ao.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;o>t;t++)a.push([+i.call(this,n[t],t),+u.call(this,n[t],t),t]);for(a.sort(qe),t=0;o>t;t++)l.push([a[t][0],-a[t][1]]);var c=Le(a),f=Le(l),s=f[0]===c[0],h=f[f.length-1]===c[c.length-1],p=[];for(t=c.length-1;t>=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t<f.length-h;++t)p.push(n[a[f[t]][2]]);return p}var e=Ce,r=ze;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},ao.geom.polygon=function(n){return ko(n,rl),n};var rl=ao.geom.polygon.prototype=[];rl.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],i=0;++t<e;)n=r,r=this[t],i+=n[1]*r[0]-n[0]*r[1];return.5*i},rl.centroid=function(n){var t,e,r=-1,i=this.length,u=0,o=0,a=this[i-1];for(arguments.length||(n=-1/(6*this.area()));++r<i;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],u+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[u*n,o*n]},rl.clip=function(n){for(var t,e,r,i,u,o,a=De(n),l=-1,c=this.length-De(this),f=this[c-1];++l<c;){for(t=n.slice(),n.length=0,i=this[l],u=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Te(o,f,i)?(Te(u,f,i)||n.push(Re(u,o,f,i)),n.push(o)):Te(u,f,i)&&n.push(Re(u,o,f,i)),u=o;a&&n.push(n[0]),f=i}return n};var il,ul,ol,al,ll,cl=[],fl=[];Ye.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Ve),t.length},tr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},er.prototype={insert:function(n,t){var e,r,i;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=or(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(i=r.R,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.R&&(ir(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ur(this,r))):(i=r.L,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.L&&(ur(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ir(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,i=n.U,u=n.L,o=n.R;if(e=u?o?or(o):u:o,i?i.L===n?i.L=e:i.R=e:this._=e,u&&o?(r=e.C,e.C=n.C,e.L=u,u.U=e,e!==o?(i=e.U,e.U=n.U,n=e.R,i.L=n,e.R=o,o.U=e):(e.U=i,i=e,n=e.R)):(r=n.C,n=e),n&&(n.U=i),!r){if(n&&n.C)return void(n.C=!1);do{if(n===this._)break;if(n===i.L){if(t=i.R,t.C&&(t.C=!1,i.C=!0,ir(this,i),t=i.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,ur(this,t),t=i.R),t.C=i.C,i.C=t.R.C=!1,ir(this,i),n=this._;break}}else if(t=i.L,t.C&&(t.C=!1,i.C=!0,ur(this,i),t=i.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,ir(this,t),t=i.L),t.C=i.C,i.C=t.L.C=!1,ur(this,i),n=this._;break}t.C=!0,n=i,i=i.U}while(!n.C);n&&(n.C=!1)}}},ao.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],i=a[0][1],u=a[1][0],o=a[1][1];return ar(e(n),a).cells.forEach(function(e,a){var l=e.edges,c=e.site,f=t[a]=l.length?l.map(function(n){var t=n.start();return[t.x,t.y]}):c.x>=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[];f.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Uo)*Uo,y:Math.round(o(n,t)/Uo)*Uo,i:t}})}var r=Ce,i=ze,u=r,o=i,a=sl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u,o=e.site,a=e.edges.sort(Ve),l=-1,c=a.length,f=a[c-1].edge,s=f.l===o?f.r:f.l;++l<c;)i=f,u=s,f=a[l].edge,s=f.l===o?f.r:f.l,r<u.i&&r<s.i&&cr(o,u,s)<0&&t.push([n[r],n[u.i],n[s.i]])}),t},t.x=function(n){return arguments.length?(u=En(r=n),t):r},t.y=function(n){return arguments.length?(o=En(i=n),t):i},t.clipExtent=function(n){return arguments.length?(a=null==n?sl:n,t):a===sl?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===sl?null:a&&a[1]},t)};var sl=[[-1e6,-1e6],[1e6,1e6]];ao.geom.delaunay=function(n){return ao.geom.voronoi().triangles(n)},ao.geom.quadtree=function(n,t,e,r,i){function u(n){function u(n,t,e,r,i,u,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var l=n.x,f=n.y;if(null!=l)if(xo(l-e)+xo(f-r)<.01)c(n,t,e,r,i,u,o,a);else{var s=n.point;n.x=n.y=n.point=null,c(n,s,l,f,i,u,o,a),c(n,t,e,r,i,u,o,a)}else n.x=e,n.y=r,n.point=t}else c(n,t,e,r,i,u,o,a)}function c(n,t,e,r,i,o,a,l){var c=.5*(i+a),f=.5*(o+l),s=e>=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]=hr()),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,v,d,y,m,M=En(a),x=En(l);if(null!=t)v=t,d=e,y=r,m=i;else if(y=m=-(v=d=1/0),s=[],h=[],g=n.length,o)for(p=0;g>p;++p)f=n[p],f.x<v&&(v=f.x),f.y<d&&(d=f.y),f.x>y&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;g>p;++p){var b=+M(f=n[p],p),_=+x(f,p);v>b&&(v=b),d>_&&(d=_),b>y&&(y=b),_>m&&(m=_),s.push(b),h.push(_)}var w=y-v,S=m-d;w>S?m=d+w:y=v+S;var k=hr();if(k.add=function(n){u(k,n,+M(n,++p),+x(n,p),v,d,y,m)},k.visit=function(n){pr(n,k,v,d,y,m)},k.find=function(n){return gr(k,n[0],n[1],v,d,y,m)},p=-1,null==t){for(;++p<g;)u(k,n[p],s[p],h[p],v,d,y,m);--p}else n.forEach(k.add);return s=h=n=f=null,k}var o,a=Ce,l=ze;return(o=arguments.length)?(a=fr,l=sr,3===o&&(i=e,r=t,e=t=0),u(n)):(u.x=function(n){return arguments.length?(a=n,u):a},u.y=function(n){return arguments.length?(l=n,u):l},u.extent=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],i=+n[1][1]),u):null==t?null:[[t,e],[r,i]]},u.size=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=e=0,r=+n[0],i=+n[1]),u):null==t?null:[r-t,i-e]},u)},ao.interpolateRgb=vr,ao.interpolateObject=dr,ao.interpolateNumber=yr,ao.interpolateString=mr;var hl=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,pl=new RegExp(hl.source,"g");ao.interpolate=Mr,ao.interpolators=[function(n,t){var e=typeof t;return("string"===e?ua.has(t.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(t)?vr:mr:t instanceof an?vr:Array.isArray(t)?xr:"object"===e&&isNaN(t)?dr:yr)(n,t)}],ao.interpolateArray=xr;var gl=function(){return m},vl=ao.map({linear:gl,poly:Er,quad:function(){return Sr},cubic:function(){return kr},sin:function(){return Ar},exp:function(){return Cr},circle:function(){return zr},elastic:Lr,back:qr,bounce:function(){return Tr}}),dl=ao.map({"in":m,out:_r,"in-out":wr,"out-in":function(n){return wr(_r(n))}});ao.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=vl.get(e)||gl,r=dl.get(r)||m,br(r(e.apply(null,lo.call(arguments,1))))},ao.interpolateHcl=Rr,ao.interpolateHsl=Dr,ao.interpolateLab=Pr,ao.interpolateRound=Ur,ao.transform=function(n){var t=fo.createElementNS(ao.ns.prefix.svg,"g");return(ao.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:yl)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var yl={a:1,b:0,c:0,d:1,e:0,f:0};ao.interpolateTransform=$r,ao.layout={},ao.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Jr(n[e]));return t}},ao.layout.chord=function(){function n(){var n,c,s,h,p,g={},v=[],d=ao.range(u),y=[];for(e=[],r=[],n=0,h=-1;++h<u;){for(c=0,p=-1;++p<u;)c+=i[h][p];v.push(c),y.push(ao.range(u)),n+=c}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&y.forEach(function(n,t){n.sort(function(n,e){return a(i[t][n],i[t][e])})}),n=(Ho-f*u)/n,c=0,h=-1;++h<u;){for(s=c,p=-1;++p<u;){var m=d[h],M=y[m][p],x=i[m][M],b=c,_=c+=x*n;g[m+"-"+M]={index:m,subindex:M,startAngle:b,endAngle:_,value:x}}r[m]={index:m,startAngle:s,endAngle:c,value:v[m]},c+=f}for(h=-1;++h<u;)for(p=h-1;++p<u;){var w=g[h+"-"+p],S=g[p+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}l&&t()}function t(){e.sort(function(n,t){return l((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,i,u,o,a,l,c={},f=0;return c.matrix=function(n){return arguments.length?(u=(i=n)&&i.length,e=r=null,c):i},c.padding=function(n){return arguments.length?(f=n,e=r=null,c):f},c.sortGroups=function(n){return arguments.length?(o=n,e=r=null,c):o},c.sortSubgroups=function(n){return arguments.length?(a=n,e=null,c):a},c.sortChords=function(n){return arguments.length?(l=n,e&&t(),c):l},c.chords=function(){return e||n(),e},c.groups=function(){return r||n(),r},c},ao.layout.force=function(){function n(n){return function(t,e,r,i){if(t.point!==n){var u=t.cx-n.x,o=t.cy-n.y,a=i-e,l=u*u+o*o;if(l>a*a/y){if(v>l){var c=t.charge/l;n.px-=u*c,n.py-=o*c}return!0}if(t.point&&l&&v>l){var c=t.pointCharge/l;n.px-=u*c,n.py-=o*c}}return!t.charge}}function t(n){n.px=ao.event.x,n.py=ao.event.y,l.resume()}var e,r,i,u,o,a,l={},c=ao.dispatch("start","tick","end"),f=[1,1],s=.9,h=ml,p=Ml,g=-30,v=xl,d=.1,y=.64,M=[],x=[];return l.tick=function(){if((i*=.99)<.005)return e=null,c.end({type:"end",alpha:i=0}),!0;var t,r,l,h,p,v,y,m,b,_=M.length,w=x.length;for(r=0;w>r;++r)l=x[r],h=l.source,p=l.target,m=p.x-h.x,b=p.y-h.y,(v=m*m+b*b)&&(v=i*o[r]*((v=Math.sqrt(v))-u[r])/v,m*=v,b*=v,p.x-=m*(y=h.weight+p.weight?h.weight/(h.weight+p.weight):.5),p.y-=b*y,h.x+=m*(y=1-y),h.y+=b*y);if((y=i*d)&&(m=f[0]/2,b=f[1]/2,r=-1,y))for(;++r<_;)l=M[r],l.x+=(m-l.x)*y,l.y+=(b-l.y)*y;if(g)for(ri(t=ao.geom.quadtree(M),i,a),r=-1;++r<_;)(l=M[r]).fixed||t.visit(n(l));for(r=-1;++r<_;)l=M[r],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*s,l.y-=(l.py-(l.py=l.y))*s);c.tick({type:"tick",alpha:i})},l.nodes=function(n){return arguments.length?(M=n,l):M},l.links=function(n){return arguments.length?(x=n,l):x},l.size=function(n){return arguments.length?(f=n,l):f},l.linkDistance=function(n){return arguments.length?(h="function"==typeof n?n:+n,l):h},l.distance=l.linkDistance,l.linkStrength=function(n){return arguments.length?(p="function"==typeof n?n:+n,l):p},l.friction=function(n){return arguments.length?(s=+n,l):s},l.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,l):g},l.chargeDistance=function(n){return arguments.length?(v=n*n,l):Math.sqrt(v)},l.gravity=function(n){return arguments.length?(d=+n,l):d},l.theta=function(n){return arguments.length?(y=n*n,l):Math.sqrt(y)},l.alpha=function(n){return arguments.length?(n=+n,i?n>0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;i>l;++l)e[l]=[];for(l=0;c>l;++l){var u=x[l];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var o,a=e[t],l=-1,f=a.length;++l<f;)if(!isNaN(o=a[l][n]))return o;return Math.random()*r}var t,e,r,i=M.length,c=x.length,s=f[0],v=f[1];for(t=0;i>t;++t)(r=M[t]).index=t,r.weight=0;for(t=0;c>t;++t)r=x[t],"number"==typeof r.source&&(r.source=M[r.source]),"number"==typeof r.target&&(r.target=M[r.target]),++r.source.weight,++r.target.weight;for(t=0;i>t;++t)r=M[t],isNaN(r.x)&&(r.x=n("x",s)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof h)for(t=0;c>t;++t)u[t]=+h.call(this,x[t],t);else for(t=0;c>t;++t)u[t]=h;if(o=[],"function"==typeof p)for(t=0;c>t;++t)o[t]=+p.call(this,x[t],t);else for(t=0;c>t;++t)o[t]=p;if(a=[],"function"==typeof g)for(t=0;i>t;++t)a[t]=+g.call(this,M[t],t);else for(t=0;i>t;++t)a[t]=g;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){return r||(r=ao.behavior.drag().origin(m).on("dragstart.force",Qr).on("drag.force",t).on("dragend.force",ni)),arguments.length?void this.on("mouseover.force",ti).on("mouseout.force",ei).call(r):r},ao.rebind(l,c,"on")};var ml=20,Ml=1,xl=1/0;ao.layout.hierarchy=function(){function n(i){var u,o=[i],a=[];for(i.depth=0;null!=(u=o.pop());)if(a.push(u),(c=e.call(n,u,u.depth))&&(l=c.length)){for(var l,c,f;--l>=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return oi(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=ci,e=ai,r=li;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ui(t,function(n){n.children&&(n.value=0)}),oi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ao.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++c<o;)n(a=u[c],e,l=a.value*r,i),e+=l}}function t(n){var e=n.children,r=0;if(e&&(i=e.length))for(var i,u=-1;++u<i;)r=Math.max(r,t(e[u]));return 1+r}function e(e,u){var o=r.call(this,e,u);return n(o[0],0,i[0],i[1]/t(o[0])),o}var r=ao.layout.hierarchy(),i=[1,1];return e.size=function(n){return arguments.length?(i=n,e):i},ii(e,r)},ao.layout.pie=function(){function n(o){var a,l=o.length,c=o.map(function(e,r){return+t.call(n,e,r)}),f=+("function"==typeof r?r.apply(this,arguments):r),s=("function"==typeof i?i.apply(this,arguments):i)-f,h=Math.min(Math.abs(s)/l,+("function"==typeof u?u.apply(this,arguments):u)),p=h*(0>s?-1:1),g=ao.sum(c),v=g?(s-l*p)/g:0,d=ao.range(l),y=[];return null!=e&&d.sort(e===bl?function(n,t){return c[t]-c[n]}:function(n,t){return e(o[n],o[t])}),d.forEach(function(n){y[n]={data:o[n],value:a=c[n],startAngle:f,endAngle:f+=a*v+p,padAngle:h}}),y}var t=Number,e=bl,r=0,i=Ho,u=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n.padAngle=function(t){return arguments.length?(u=t,n):u},n};var bl={};ao.layout.stack=function(){function n(a,l){if(!(h=a.length))return a;var c=a.map(function(e,r){return t.call(n,e,r)}),f=c.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),o.call(n,t,e)]})}),s=e.call(n,f,l);c=ao.permute(c,s),f=ao.permute(f,s);var h,p,g,v,d=r.call(n,f,l),y=c[0].length;for(g=0;y>g;++g)for(i.call(n,c[0][g],v=d[g],f[0][g][1]),p=1;h>p;++p)i.call(n,c[p][g],v+=f[p-1][g][1],f[p][g][1]);return a}var t=m,e=gi,r=vi,i=pi,u=si,o=hi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:_l.get(t)||gi,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:wl.get(t)||vi,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(i=t,n):i},n};var _l=ao.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(di),u=n.map(yi),o=ao.range(r).sort(function(n,t){return i[n]-i[t]}),a=0,l=0,c=[],f=[];for(t=0;r>t;++t)e=o[t],l>a?(a+=u[e],c.push(e)):(l+=u[e],f.push(e));return f.reverse().concat(c)},reverse:function(n){return ao.range(n.length).reverse()},"default":gi}),wl=ao.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,o=[],a=0,l=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;u>e;++e)l[e]=(a-o[e])/2;return l},wiggle:function(n){var t,e,r,i,u,o,a,l,c,f=n.length,s=n[0],h=s.length,p=[];for(p[0]=l=c=0,e=1;h>e;++e){for(t=0,i=0;f>t;++t)i+=n[t][e][1];for(t=0,u=0,a=s[e][0]-s[e-1][0];f>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;u+=o*n[t][e][1]}p[e]=l-=i?u/i*a:0,c>l&&(c=l)}for(e=0;h>e;++e)p[e]-=c;return p},expand:function(n){var t,e,r,i=n.length,u=n[0].length,o=1/i,a=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=o}for(e=0;u>e;++e)a[e]=0;return a},zero:vi});ao.layout.histogram=function(){function n(n,u){for(var o,a,l=[],c=n.map(e,this),f=r.call(this,c,u),s=i.call(this,f,c,u),u=-1,h=c.length,p=s.length-1,g=t?1:1/h;++u<p;)o=l[u]=[],o.dx=s[u+1]-(o.x=s[u]),o.y=0;if(p>0)for(u=-1;++u<h;)a=c[u],a>=f[0]&&a<=f[1]&&(o=l[ao.bisect(s,a,1,p)-1],o.y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=bi,i=Mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ao.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,oi(a,function(n){n.r=+f(n.value)}),oi(a,Ni),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;oi(a,function(n){n.r+=s}),oi(a,Ni),oi(a,function(n){n.r-=s})}return Ci(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=ao.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ii(n,e)},ao.layout.tree=function(){function n(n,i){var f=o.call(this,n,i),s=f[0],h=t(s);if(oi(h,e),h.parent.m=-h.z,ui(h,r),c)ui(s,u);else{var p=s,g=s,v=s;ui(s,function(n){n.x<p.x&&(p=n),n.x>g.x&&(g=n),n.depth>v.depth&&(v=n)});var d=a(p,g)/2-p.x,y=l[0]/(g.x+a(g,p)/2+d),m=l[1]/(v.depth||1);ui(s,function(n){n.x=(n.x+d)*y,n.y=n.depth*m})}return f}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var i,u=t.children,o=0,a=u.length;a>o;++o)r.push((u[o]=i={_:u[o],parent:t,children:(i=u[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Di(n);var u=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-u):n.z=u}else r&&(n.z=r.z+a(n._,r._));n.parent.A=i(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function i(n,t,e){if(t){for(var r,i=n,u=n,o=t,l=i.parent.children[0],c=i.m,f=u.m,s=o.m,h=l.m;o=Ti(o),i=qi(i),o&&i;)l=qi(l),u=Ti(u),u.a=n,r=o.z+s-i.z-c+a(o._,i._),r>0&&(Ri(Pi(o,n,e),n,r),c+=r,f+=r),s+=o.m,c+=i.m,h+=l.m,f+=u.m;o&&!Ti(u)&&(u.t=o,u.m+=s-f),i&&!qi(l)&&(l.t=i,l.m+=c-h,e=n)}return e}function u(n){n.x*=l[0],n.y=n.depth*l[1]}var o=ao.layout.hierarchy().sort(null).value(null),a=Li,l=[1,1],c=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(c=null==(l=t)?u:null,n):c?null:l},n.nodeSize=function(t){return arguments.length?(c=null==(l=t)?null:u,n):c?l:null},ii(n,o)},ao.layout.cluster=function(){function n(n,u){var o,a=t.call(this,n,u),l=a[0],c=0;oi(l,function(n){var t=n.children;t&&t.length?(n.x=ji(t),n.y=Ui(t)):(n.x=o?c+=e(n,o):0,n.y=0,o=n)});var f=Fi(l),s=Hi(l),h=f.x-e(f,s)/2,p=s.x+e(s,f)/2;return oi(l,i?function(n){n.x=(n.x-l.x)*r[0],n.y=(l.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(p-h)*r[0],n.y=(1-(l.y?n.y/l.y:1))*r[1]}),a}var t=ao.layout.hierarchy().sort(null).value(null),e=Li,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ii(n,t)},ao.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++i<u;)r=(e=n[i]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var o,a,l,c=s(e),f=[],h=u.slice(),g=1/0,v="slice"===p?c.dx:"dice"===p?c.dy:"slice-dice"===p?1&e.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(n(h,c.dx*c.dy/e.value),f.area=0;(l=h.length)>0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,v))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,v,c,!1),v=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,v,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(u>e&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0; + if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++u<o;)i=n[u],i.x=a,i.y=c,i.dy=f,a+=i.dx=Math.min(e.x+e.dx-a,f?l(i.area/f):0);i.z=!0,i.dx+=e.x+e.dx-a,e.y+=f,e.dy-=f}else{for((r||f>e.dx)&&(f=e.dx);++u<o;)i=n[u],i.x=a,i.y=c,i.dx=f,c+=i.dy=Math.min(e.y+e.dy-c,f?l(i.area/f):0);i.z=!1,i.dy+=e.y+e.dy-c,e.x+=f,e.dx-=f}}function u(r){var i=o||a(r),u=i[0];return u.x=u.y=0,u.value?(u.dx=c[0],u.dy=c[1]):u.dx=u.dy=0,o&&a.revalue(u),n([u],u.dx*u.dy/u.value),(o?e:t)(u),h&&(o=i),i}var o,a=ao.layout.hierarchy(),l=Math.round,c=[1,1],f=null,s=Oi,h=!1,p="squarify",g=.5*(1+Math.sqrt(5));return u.size=function(n){return arguments.length?(c=n,u):c},u.padding=function(n){function t(t){var e=n.call(u,t,t.depth);return null==e?Oi(t):Ii(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return Ii(t,n)}if(!arguments.length)return f;var r;return s=null==(f=n)?Oi:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,u},u.round=function(n){return arguments.length?(l=n?Math.round:Number,u):l!=Number},u.sticky=function(n){return arguments.length?(h=n,o=null,u):h},u.ratio=function(n){return arguments.length?(g=n,u):g},u.mode=function(n){return arguments.length?(p=n+"",u):p},ii(u,a)},ao.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ao.random.normal.apply(ao,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ao.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ao.scale={};var Sl={floor:m,ceil:m};ao.scale.linear=function(){return Wi([0,1],[0,1],Mr,!1)};var kl={s:1,g:1,p:1,r:1,e:1};ao.scale.log=function(){return ru(ao.scale.linear().domain([0,1]),10,!0,[1,10])};var Nl=ao.format(".0e"),El={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ao.scale.pow=function(){return iu(ao.scale.linear(),1,[0,1])},ao.scale.sqrt=function(){return ao.scale.pow().exponent(.5)},ao.scale.ordinal=function(){return ou([],{t:"range",a:[[]]})},ao.scale.category10=function(){return ao.scale.ordinal().range(Al)},ao.scale.category20=function(){return ao.scale.ordinal().range(Cl)},ao.scale.category20b=function(){return ao.scale.ordinal().range(zl)},ao.scale.category20c=function(){return ao.scale.ordinal().range(Ll)};var Al=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(xn),Cl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(xn),zl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(xn),Ll=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(xn);ao.scale.quantile=function(){return au([],[])},ao.scale.quantize=function(){return lu(0,1,[0,1])},ao.scale.threshold=function(){return cu([.5],[0,1])},ao.scale.identity=function(){return fu([0,1])},ao.svg={},ao.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),f=o.apply(this,arguments)-Io,s=a.apply(this,arguments)-Io,h=Math.abs(s-f),p=f>s?0:1;if(n>c&&(g=c,c=n,n=g),h>=Oo)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,v,d,y,m,M,x,b,_,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(d=u===ql?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(d/c*Math.sin(y))),n&&(N=tn(d/n*Math.sin(y)))),c){m=c*Math.cos(f+E),M=c*Math.sin(f+E),x=c*Math.cos(s-E),b=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Fo?0:1;if(E&&yu(m,M,x,b)===p^C){var z=(f+s)/2;m=c*Math.cos(z),M=c*Math.sin(z),x=b=null}}else m=M=0;if(n){_=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Fo?0:1;if(N&&yu(_,w,S,k)===1-p^L){var q=(f+s)/2;_=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else _=w=0;if(h>Uo&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){v=c>n^p?0:1;var T=g,R=g;if(Fo>h){var D=null==S?[_,w]:null==x?[m,M]:Re([m,M],[S,k],[x,b],[_,w]),P=m-D[0],U=M-D[1],j=x-D[0],F=b-D[1],H=1/Math.sin(Math.acos((P*j+U*F)/(Math.sqrt(P*P+U*U)*Math.sqrt(j*j+F*F)))/2),O=Math.sqrt(D[0]*D[0]+D[1]*D[1]);R=Math.min(g,(n-O)/(H-1)),T=Math.min(g,(c-O)/(H+1))}if(null!=x){var I=mu(null==S?[_,w]:[S,k],[m,M],c,T,p),Y=mu([x,b],[_,w],c,T,p);g===T?A.push("M",I[0],"A",T,",",T," 0 0,",v," ",I[1],"A",c,",",c," 0 ",1-p^yu(I[1][0],I[1][1],Y[1][0],Y[1][1]),",",p," ",Y[1],"A",T,",",T," 0 0,",v," ",Y[0]):A.push("M",I[0],"A",T,",",T," 0 1,",v," ",Y[0])}else A.push("M",m,",",M);if(null!=S){var Z=mu([m,M],[S,k],n,-R,p),V=mu([_,w],null==x?[m,M]:[x,b],n,-R,p);g===R?A.push("L",V[0],"A",R,",",R," 0 0,",v," ",V[1],"A",n,",",n," 0 ",p^yu(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-p," ",Z[1],"A",R,",",R," 0 0,",v," ",Z[0]):A.push("L",V[0],"A",R,",",R," 0 0,",v," ",Z[0])}else A.push("L",_,",",w)}else A.push("M",m,",",M),null!=x&&A.push("A",c,",",c," 0 ",C,",",p," ",x,",",b),A.push("L",_,",",w),null!=S&&A.push("A",n,",",n," 0 ",L,",",1-p," ",S,",",k);return A.push("Z"),A.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=hu,r=pu,i=su,u=ql,o=gu,a=vu,l=du;return n.innerRadius=function(t){return arguments.length?(e=En(t),n):e},n.outerRadius=function(t){return arguments.length?(r=En(t),n):r},n.cornerRadius=function(t){return arguments.length?(i=En(t),n):i},n.padRadius=function(t){return arguments.length?(u=t==ql?ql:En(t),n):u},n.startAngle=function(t){return arguments.length?(o=En(t),n):o},n.endAngle=function(t){return arguments.length?(a=En(t),n):a},n.padAngle=function(t){return arguments.length?(l=En(t),n):l},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-Io;return[Math.cos(t)*n,Math.sin(t)*n]},n};var ql="auto";ao.svg.line=function(){return Mu(m)};var Tl=ao.map({linear:xu,"linear-closed":bu,step:_u,"step-before":wu,"step-after":Su,basis:zu,"basis-open":Lu,"basis-closed":qu,bundle:Tu,cardinal:Eu,"cardinal-open":ku,"cardinal-closed":Nu,monotone:Fu});Tl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Rl=[0,2/3,1/3,0],Dl=[0,1/3,2/3,0],Pl=[0,1/6,2/3,1/6];ao.svg.line.radial=function(){var n=Mu(Hu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},wu.reverse=Su,Su.reverse=wu,ao.svg.area=function(){return Ou(m)},ao.svg.area.radial=function(){var n=Ou(Hu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ao.svg.chord=function(){function n(n,a){var l=t(this,u,n,a),c=t(this,o,n,a);return"M"+l.p0+r(l.r,l.p1,l.a1-l.a0)+(e(l,c)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,l.r,l.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=a.call(n,i,r),o=l.call(n,i,r)-Io,f=c.call(n,i,r)-Io;return{r:u,a0:o,a1:f,p0:[u*Math.cos(o),u*Math.sin(o)],p1:[u*Math.cos(f),u*Math.sin(f)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Fo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Me,o=xe,a=Iu,l=gu,c=vu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},ao.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=Me,e=xe,r=Yu;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ao.svg.diagonal.radial=function(){var n=ao.svg.diagonal(),t=Yu,e=n.projection;return n.projection=function(n){return arguments.length?e(Zu(t=n)):t},n},ao.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$u)(e.call(this,n,r))}var t=Xu,e=Vu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=ao.map({circle:$u,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ao.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Yo);Co.transition=function(n){for(var t,e,r=Hl||++Zl,i=Ku(n),u=[],o=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},a=-1,l=this.length;++a<l;){u.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(e=c[f])&&Qu(e,f,i,r,o),t.push(e)}return Wu(u,i,r)},Co.interrupt=function(n){return this.each(null==n?Il:Bu(Ku(n)))};var Hl,Ol,Il=Bu(Ku()),Yl=[],Zl=0;Yl.call=Co.call,Yl.empty=Co.empty,Yl.node=Co.node,Yl.size=Co.size,ao.transition=function(n,t){return n&&n.transition?Hl?n.transition(t):n:ao.selection().transition(n)},ao.transition.prototype=Yl,Yl.select=function(n){var t,e,r,i=this.id,u=this.namespace,o=[];n=A(n);for(var a=-1,l=this.length;++a<l;){o.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(r=c[f])&&(e=n.call(r,r.__data__,f,a))?("__data__"in r&&(e.__data__=r.__data__),Qu(e,f,u,i,r[u][i]),t.push(e)):t.push(null)}return Wu(o,u,i)},Yl.selectAll=function(n){var t,e,r,i,u,o=this.id,a=this.namespace,l=[];n=C(n);for(var c=-1,f=this.length;++c<f;)for(var s=this[c],h=-1,p=s.length;++h<p;)if(r=s[h]){u=r[a][o],e=n.call(r,r.__data__,h,c),l.push(t=[]);for(var g=-1,v=e.length;++g<v;)(i=e[g])&&Qu(i,g,a,o,u),t.push(i)}return Wu(l,a,o)},Yl.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]);for(var e=this[u],a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return Wu(i,this.namespace,this.id)},Yl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):Y(this,null==t?function(t){t[r][e].tween.remove(n)}:function(i){i[r][e].tween.set(n,t)})},Yl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?$r:Mr,a=ao.ns.qualify(n);return Ju(this,"attr."+n,t,a.local?u:i)},Yl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=ao.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},Yl.style=function(n,e,r){function i(){this.style.removeProperty(n)}function u(e){return null==e?i:(e+="",function(){var i,u=t(this).getComputedStyle(this,null).getPropertyValue(n);return u!==e&&(i=Mr(u,e),function(t){this.style.setProperty(n,i(t),r)})})}var o=arguments.length;if(3>o){if("string"!=typeof n){2>o&&(e="");for(r in n)this.style(r,n[r],e);return this}r=""}return Ju(this,"style."+n,e,u)},Yl.styleTween=function(n,e,r){function i(i,u){var o=e.call(this,i,u,t(this).getComputedStyle(this,null).getPropertyValue(n));return o&&function(t){this.style.setProperty(n,o(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+n,i)},Yl.text=function(n){return Ju(this,"text",n,Gu)},Yl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Yl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ao.ease.apply(ao,arguments)),Y(this,function(r){r[e][t].ease=n}))},Yl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:Y(this,"function"==typeof n?function(r,i,u){r[e][t].delay=+n.call(r,r.__data__,i,u)}:(n=+n,function(r){r[e][t].delay=n}))},Yl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:Y(this,"function"==typeof n?function(r,i,u){r[e][t].duration=Math.max(1,n.call(r,r.__data__,i,u))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Yl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var i=Ol,u=Hl;try{Hl=e,Y(this,function(t,i,u){Ol=t[r][e],n.call(t,t.__data__,i,u)})}finally{Ol=i,Hl=u}}else Y(this,function(i){var u=i[r][e];(u.event||(u.event=ao.dispatch("start","end","interrupt"))).on(n,t)});return this},Yl.transition=function(){for(var n,t,e,r,i=this.id,u=++Zl,o=this.namespace,a=[],l=0,c=this.length;c>l;l++){a.push(n=[]);for(var t=this[l],f=0,s=t.length;s>f;f++)(e=t[f])&&(r=e[o][i],Qu(e,f,o,u,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Wu(a,o,u)},ao.svg.axis=function(){function n(n){n.each(function(){var n,c=ao.select(this),f=this.__chart__||e,s=this.__chart__=e.copy(),h=null==l?s.ticks?s.ticks.apply(s,a):s.domain():l,p=null==t?s.tickFormat?s.tickFormat.apply(s,a):m:t,g=c.selectAll(".tick").data(h,s),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",Uo),d=ao.transition(g.exit()).style("opacity",Uo).remove(),y=ao.transition(g.order()).style("opacity",1),M=Math.max(i,0)+o,x=Zi(s),b=c.selectAll(".domain").data([0]),_=(b.enter().append("path").attr("class","domain"),ao.transition(b));v.append("line"),v.append("text");var w,S,k,N,E=v.select("line"),A=y.select("line"),C=g.select("text").text(p),z=v.select("text"),L=y.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=no,w="x",k="y",S="x2",N="y2",C.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+q*u+"V0H"+x[1]+"V"+q*u)):(n=to,w="y",k="x",S="y2",N="x2",C.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),_.attr("d","M"+q*u+","+x[0]+"H0V"+x[1]+"H"+q*u)),E.attr(N,q*i),z.attr(k,q*M),A.attr(S,0).attr(N,q*i),L.attr(w,0).attr(k,q*M),s.rangeBand){var T=s,R=T.rangeBand()/2;f=s=function(n){return T(n)+R}}else f.rangeBand?f=s:d.call(n,s,f);v.call(n,f,s),y.call(n,s,s)})}var t,e=ao.scale.linear(),r=Vl,i=6,u=6,o=3,a=[10],l=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xl?t+"":Vl,n):r},n.ticks=function(){return arguments.length?(a=co(arguments),n):a},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(i=+t,u=+arguments[e-1],n):i},n.innerTickSize=function(t){return arguments.length?(i=+t,n):i},n.outerTickSize=function(t){return arguments.length?(u=+t,n):u},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Vl="bottom",Xl={top:1,right:1,bottom:1,left:1};ao.svg.brush=function(){function n(t){t.each(function(){var t=ao.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=t.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=t.selectAll(".resize").data(v,m);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return $l[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,s=ao.transition(t),h=ao.transition(o);c&&(l=Zi(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),r(s)),f&&(l=Zi(f),h.attr("y",l[0]).attr("height",l[1]-l[0]),i(s)),e(s)})}function e(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+h[+/^s/.test(n)]+")"})}function r(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==ao.event.keyCode&&(C||(M=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function v(){32==ao.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function d(){var n=ao.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ao.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0]<M[0])],L[1]=h[+(n[1]<M[1])]):M=null),E&&y(n,c,0)&&(r(k),t=!0),A&&y(n,f,1)&&(i(k),t=!0),t&&(e(k),w({type:"brush",mode:C?"move":"resize"}))}function y(n,t,e){var r,i,u=Zi(t),l=u[0],c=u[1],f=L[e],v=e?h:s,d=v[1]-v[0];return C&&(l-=f,c-=d+f),r=(e?g:p)?Math.max(l,Math.min(c,n[e])):n[e],C?i=(r+=f)+d:(M&&(f=Math.max(l,Math.min(c,2*M[e]-r))),r>f?(i=r,r=f):i=f),v[0]!=r||v[1]!=i?(e?a=null:o=null,v[0]=r,v[1]=i,!0):void 0}function m(){d(),k.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ao.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),z(),w({type:"brushend"})}var M,x,b=this,_=ao.select(ao.event.target),w=l.of(b,arguments),k=ao.select(b),N=_.datum(),E=!/^(n|s)$/.test(N)&&c,A=!/^(e|w)$/.test(N)&&f,C=_.classed("extent"),z=W(b),L=ao.mouse(b),q=ao.select(t(b)).on("keydown.brush",u).on("keyup.brush",v);if(ao.event.changedTouches?q.on("touchmove.brush",d).on("touchend.brush",m):q.on("mousemove.brush",d).on("mouseup.brush",m),k.interrupt().selectAll("*").interrupt(),C)L[0]=s[0]-L[0],L[1]=h[0]-L[1];else if(N){var T=+/w$/.test(N),R=+/^n/.test(N);x=[s[1-T]-L[0],h[1-R]-L[1]],L[0]=s[T],L[1]=h[R]}else ao.event.altKey&&(M=L.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),ao.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),d()}var o,a,l=N(n,"brushstart","brush","brushend"),c=null,f=null,s=[0,0],h=[0,0],p=!0,g=!0,v=Bl[0];return n.event=function(n){n.each(function(){var n=l.of(this,arguments),t={x:s,y:h,i:o,j:a},e=this.__chart__||t;this.__chart__=t,Hl?ao.select(this).transition().each("start.brush",function(){o=e.i,a=e.j,s=e.x,h=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=xr(s,t.x),r=xr(h,t.y);return o=a=null,function(i){s=t.x=e(i),h=t.y=r(i),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=t.i,a=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,v=Bl[!c<<1|!f],n):c},n.y=function(t){return arguments.length?(f=t,v=Bl[!c<<1|!f],n):f},n.clamp=function(t){return arguments.length?(c&&f?(p=!!t[0],g=!!t[1]):c?p=!!t:f&&(g=!!t),n):c&&f?[p,g]:c?p:f?g:null},n.extent=function(t){var e,r,i,u,l;return arguments.length?(c&&(e=t[0],r=t[1],f&&(e=e[0],r=r[0]),o=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(l=e,e=r,r=l),e==s[0]&&r==s[1]||(s=[e,r])),f&&(i=t[0],u=t[1],c&&(i=i[1],u=u[1]),a=[i,u],f.invert&&(i=f(i),u=f(u)),i>u&&(l=i,i=u,u=l),i==h[0]&&u==h[1]||(h=[i,u])),n):(c&&(o?(e=o[0],r=o[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(l=e,e=r,r=l))),f&&(a?(i=a[0],u=a[1]):(i=h[0],u=h[1],f.invert&&(i=f.invert(i),u=f.invert(u)),i>u&&(l=i,i=u,u=l))),c&&f?[[e,i],[r,u]]:c?[e,r]:f&&[i,u])},n.clear=function(){return n.empty()||(s=[0,0],h=[0,0],o=a=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!f&&h[0]==h[1]},ao.rebind(n,l,"on")};var $l={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Bl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Wl=ga.format=xa.timeFormat,Jl=Wl.utc,Gl=Jl("%Y-%m-%dT%H:%M:%S.%LZ");Wl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?eo:Gl,eo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},eo.toString=Gl.toString,ga.second=On(function(n){return new va(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ga.seconds=ga.second.range,ga.seconds.utc=ga.second.utc.range,ga.minute=On(function(n){return new va(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ga.minutes=ga.minute.range,ga.minutes.utc=ga.minute.utc.range,ga.hour=On(function(n){var t=n.getTimezoneOffset()/60;return new va(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ga.hours=ga.hour.range,ga.hours.utc=ga.hour.utc.range,ga.month=On(function(n){return n=ga.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ga.months=ga.month.range,ga.months.utc=ga.month.utc.range;var Kl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ql=[[ga.second,1],[ga.second,5],[ga.second,15],[ga.second,30],[ga.minute,1],[ga.minute,5],[ga.minute,15],[ga.minute,30],[ga.hour,1],[ga.hour,3],[ga.hour,6],[ga.hour,12],[ga.day,1],[ga.day,2],[ga.week,1],[ga.month,1],[ga.month,3],[ga.year,1]],nc=Wl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",zt]]),tc={range:function(n,t,e){return ao.range(Math.ceil(n/e)*e,+t,e).map(io)},floor:m,ceil:m};Ql.year=ga.year,ga.scale=function(){return ro(ao.scale.linear(),Ql,nc)};var ec=Ql.map(function(n){return[n[0].utc,n[1]]}),rc=Jl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",zt]]);ec.year=ga.year.utc,ga.scale.utc=function(){return ro(ao.scale.linear(),ec,rc)},ao.text=An(function(n){return n.responseText}),ao.json=function(n,t){return Cn(n,"application/json",uo,t)},ao.html=function(n,t){return Cn(n,"text/html",oo,t)},ao.xml=An(function(n){return n.responseXML}),"function"==typeof define&&define.amd?(this.d3=ao,define(ao)):"object"==typeof module&&module.exports?module.exports=ao:this.d3=ao}(); + </script> +</head> +<body> + +<script> + + + +function makeKadmosMenu(theGraphs) +{ + var imageWidth = 200; + var imageHeight = 150; + var padding = 10; + var rectHeight = 70; + var imgSize = 40; + var visPackDiv = d3.select("body").append("div").attr("class","vispackDiv"); + var visPackSvg = visPackDiv.append("svg") + .attr("class","visPackSvg") + .attr("width",imageWidth*5+40) + .attr("height",imageHeight+40) + .attr("transform", "translate(" + + String(10) + "," + String(10) + ")") + + + var defs = visPackSvg.append("defs"); + var filter = defs.append("filter") + .attr("id", "drop-shadow") + .attr("height", "130%") + filter.append("feColorMatrix") + .attr("values", "0.2 0 0 0 0 0 0.2 0 0 0 0 0 0.2 0 0 0 0 0 1 0") + .attr("result", "matrixOut") + filter.append("feGaussianBlur") + .attr("in", "matrixOut") + .attr("stdDeviation", 5) + .attr("result", "blur") + filter.append("feOffset") + .attr("in", "blur") + .attr("dx", 5) + .attr("dy", 5) + .attr("result", "offsetBlur") + var feMerge = filter.append("feMerge"); + feMerge.append("feMergeNode") + .attr("in", "offsetBlur") + feMerge.append("feMergeNode") + .attr("in", "SourceGraphic"); + + var visPackFrame = visPackSvg.append("rect") + .attr("width",imageWidth*5+12) + .attr("height",imageHeight) + .attr("fill", "white") + .style("filter", "url(#drop-shadow)") + + var imgs = visPackSvg.selectAll("image").data([0]); + imgs.enter() + .append("svg:image") + .attr("x",5) + .attr("xlink:href", "file:supportFiles/include/KADMOS_VisualizationPack_Icon.png") + .attr("width", imageWidth) + .attr("height", imageHeight) + .attr("position", "relative") + + + var offset_tmp = 860; + visPackSvg.append("text") + .attr("transform", "translate(" + + String(210) + "," + String(35) + ")") + .attr("font-family","Arial") + .attr("font-size","32pt") + .attr("fill","#666666") + .text("KADMOS Visualization Package") + + + var acknGroup = visPackSvg.append("g").attr("class","acknGroup").classed("acknGroup",true) + var acknRect = acknGroup.append("rect").classed("ackn",true) + .attr("height", 30) + .attr("transform", "translate(" + + String(offset_tmp) + "," + String(2) + ")") + acknGroup.append("text") + .attr("transform", "translate(" + + String(offset_tmp+padding/2) + "," + String(20) + ")") + .attr("text-anchor", "front") + .attr("font-family","Arial") + .attr("font-size","12pt") + .attr("fill","white") + .text("Acknowledgements") + acknRect = acknRect.attr("width", function(d) {return this.parentNode.getBBox().width+padding;}) + acknRect = acknRect.classed("VisPackMenu",true) + acknGroup = acknGroup.on("mouseover", function(){d3.select(this).style("cursor", "pointer")}) + .on("click",function(){window.open("supportFiles/include/acknowledgements.html", '_blank');}) + + var acknGroup2 = visPackSvg.append("g").attr("class","acknGroup2") + .attr("transform", "translate(" + + String(offset_tmp) + "," + String(40+padding) + ")") + acknGroup2.append("text") + .classed("acknText",true) + .attr("dy", "0em") + .text("Copyright:") + acknGroup2.append("text") + .classed("acknText",true) + .attr("dy", "1.5em") + .text("B. Aigner") + var imgs = visPackSvg.selectAll("img").data([0]); + imgs.enter() + .append("svg:image") + .attr("xlink:href", "file:supportFiles/include/RWTH_Logo.png") + .attr("x", String(offset_tmp+85)) + .attr("y", "3em") + .attr("width", "60") + .attr("height", "40"); + acknGroup2.append("text") + .classed("acknText",true) + .attr("dy", "3.2em") + .text("I. van Gent") + var imgs = visPackSvg.selectAll("img").data([0]); + imgs.enter() + .append("svg:image") + .attr("xlink:href", "file:supportFiles/include/TUDelft_Logo.png") + .attr("x", String(offset_tmp+85)) + .attr("y", "4.7em") + .attr("width", "60") + .attr("height", "40"); + + + var ul = d3.select("body").append("div").attr("class","newDiv").append("ul") + function makeViewButtons(graphs_tmp,name, visFile) + { + var dropdown1 = ul.append("li").on("mouseover", function(){d3.select(this).style("cursor", "default")}) + dropdown1.append("a").text(name) + dropdown1.append("img").attr("src","supportFiles/include/AGILE_Icon.png") + .attr("align","left") + .style("margin-left","6px") + .style("margin-right","0px") + .style("margin-top","6px") + .style("margin-bottom","6px") + .attr("height","42") + .attr("width","42") + var links = dropdown1.append("ul"); + for (var i=0; i < graphs_tmp.length; i++) + { + makeDropDown(graphs_tmp[i],visFile,links) + } + } + function makeDropDown(theData,file,theLinks) + { + var link = theLinks.append("li").append("a") + .text(theData.description) + .on("mouseover", function(){d3.select(this).style("cursor", "pointer")}) + .on("click", function(){ + window.location.replace("supportFiles/"+file, '_blank'); + window.localStorage.setItem("graphID", theData.id);}) + } + makeViewButtons(theGraphs,"XDSM","xdsm.html"); + makeViewButtons(theGraphs,"Edge Bundles","edgeBundles.html"); + makeViewButtons(theGraphs,"Sankey Diagram","sankeyDiagram.html"); +} +//#####################################################################// + + +d3.json("supportFiles/json/graphs.json", function(graphInfo) +{ + var graphs = graphInfo.graphs; + var categories = graphInfo.categories; + makeKadmosMenu(graphs); +}) + + +</script> diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/circleLayout.html b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/circleLayout.html new file mode 100644 index 000000000..e35687857 --- /dev/null +++ b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/circleLayout.html @@ -0,0 +1,189 @@ +<!doctype html> +<html class="js" lang=""> +<style> +.node { + fill: #aaa; +} + +.node:hover { + fill: #666666; +} + +.link { + stroke: #3399FF; + stroke-opacity: .4; + stroke-width: 2px; + fill: none; + +} + +.invisibleLink { + stroke: #000; + stroke-opacity: 0; + stroke-width: 15px; + fill: none; +} +.invisibleLink:hover { + stroke: #3399FF; + stroke-opacity: 0.4; + stroke-width: 5px; + fill: none; +} + +.node:hover, +.node--source, +.node--target { + font-weight: 700; +} + +.node--source { + fill: #99CC00; +} + +.node--target { + fill: #CC0000; +} + +.link--target, +.link--source{ + stroke-opacity: .8; + stroke-width: 2px; +} + +.link--source { + stroke: #CC0000; +} + +.link--target { + stroke: #99CC00; +} + + +.treeNode { +cursor: pointer; +} + +.overlay{ + background-color:#FFF; +} + +.treeNode circle { +fill: #fff; +stroke: #3399FF; +stroke-width: 1.5px; +} + +.treeNode text { +font-size:16px; +font-family:Arial; +} + +.treeLink { +fill: none; +stroke: #ccc; +stroke-width: 1.5px; +} + +.d3-context-menu { + position: absolute; + display: none; + background-color: #f2f2f2; + border-radius: 4px; + font-family: Arial; + font-size: 16pt; + min-width: 300px; + border: 1px solid #d4d4d4; + z-index:1200; +} +.d3-context-menu ul { + list-style-type: none; + margin: 4px 0px; + padding: 0px; + cursor: default; +} +.d3-context-menu ul li { + padding: 4px 16px; +} +.d3-context-menu ul li:hover { + background-color: #4677f8; +} +.d3-context-menu ul li > ul { + position: absolute; + background-color: #f2f2f2; + top: 0; + min-width: 350px; + left: 300px; + z-index: -1; +} + +.d3-context-menu ul li > ul li:hover +{ + background-color: #4677f8; + color: #fefefe; +} + +.ackn { +fill: #666666; +stroke: #666666; +stroke-width: 2.0; +} + +.acknGroup:hover .ackn{ +fill: #3399FF; +stroke: #3399FF; +} + +.newDiv { + position:relative; + top: -100px; + left: 220px; + background-color: none; +} +.newDiv a { + text-decoration: none; + color: white; + font-family: Arial; + font-size: 20pt; + padding-top: 12px; + padding-right: 12px; + padding-bottom: 12px; + padding-left: 6px; + display:inline-block; +} +.newDiv ul { + display: inline-block;; + margin: 0; + padding: 0; + background-color: #666666; +} +.newDiv ul li {display: inline-block;} +.newDiv ul li:hover {background: #888;} +.newDiv ul li:hover ul {display: block;} +.newDiv ul li ul { + position: absolute; + min-width: 200px; + display: none; +} +.newDiv ul li ul li { + background: #555; + display: block; +} +.newDiv ul li ul li a { + display:block !important +} +.newDiv ul li ul li:hover {background: #3399FF;} + +.acknText { +font-family: Arial; +font-size: 12pt; +fill: #666666; +} +</style> + <head> + <meta charset="utf-8"> + <title>KADMOS Edge Bundles</title> + </head> + <body> + <script src="circleLayout.js"></script> + </body> +</html> \ No newline at end of file diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/circleLayout.js b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/circleLayout.js new file mode 100644 index 000000000..178d5a4b4 --- /dev/null +++ b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/circleLayout.js @@ -0,0 +1,2464 @@ +(function() { +/*! jQuery v3.2.0 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.0",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c<b?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=Array.isArray(d)))?(e?(e=!1,f=c&&Array.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;f<g;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e);return!1}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}return!1}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;d<e;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,N,e),g(f,c,O,e)):(f++,j.call(a,g(f,c,N,e),g(f,c,O,e),g(f,c,N,c.notifyWith))):(d!==N&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S), +a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},U=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function V(){this.expando=r.expando+V.uid++}V.uid=1,V.prototype={cache:function(a){var b=a[this.expando];return b||(b={},U(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){Array.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(L)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var W=new V,X=new V,Y=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function $(a){return"true"===a||"false"!==a&&("null"===a?null:a===+a+""?+a:Y.test(a)?JSON.parse(a):a)}function _(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Z,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c=$(c)}catch(e){}X.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return X.hasData(a)||W.hasData(a)},data:function(a,b,c){return X.access(a,b,c)},removeData:function(a,b){X.remove(a,b)},_data:function(a,b,c){return W.access(a,b,c)},_removeData:function(a,b){W.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=X.get(f),1===f.nodeType&&!W.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),_(f,d,e[d])));W.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){X.set(this,a)}):T(this,function(b){var c;if(f&&void 0===b){if(c=X.get(f,a),void 0!==c)return c;if(c=_(f,a),void 0!==c)return c}else this.each(function(){X.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=W.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var aa=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ba=new RegExp("^(?:([+-])=|)("+aa+")([a-z%]*)$","i"),ca=["Top","Right","Bottom","Left"],da=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ea=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function fa(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&ba.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var ga={};function ha(a){var b,c=a.ownerDocument,d=a.nodeName,e=ga[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ga[d]=e,e)}function ia(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=W.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&da(d)&&(e[f]=ha(d))):"none"!==c&&(e[f]="none",W.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ia(this,!0)},hide:function(){return ia(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){da(this)?r(this).show():r(this).hide()})}});var ja=/^(?:checkbox|radio)$/i,ka=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c<d;c++)W.set(a[c],"globalEval",!b||W.get(b[c],"globalEval"))}var pa=/<|&#?\w+;/;function qa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(pa.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ka.exec(f)||["",""])[1].toLowerCase(),i=ma[h]||ma._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g,h=[],i=b.delegateCount,j=a.target;if(i&&j.nodeType&&!("click"===a.type&&a.button>=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c<i;c++)d=b[c],e=d.selector+" ",void 0===g[e]&&(g[e]=d.needsContext?r(e,this).index(j)>-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i<b.length&&h.push({elem:j,handlers:b.slice(i)}),h},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==xa()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===xa()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if(ja.test(this.type)&&this.click&&B(this,"input"))return this.click(),!1},_default:function(a){return B(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?va:wa,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:wa,isPropagationStopped:wa,isImmediatePropagationStopped:wa,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=va,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=va,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=va,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&sa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ta.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return ya(this,a,b,c,d)},one:function(a,b,c,d){return ya(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=wa),this.each(function(){r.event.remove(this,a,c,b)})}});var za=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/<script|<style|<link/i,Ba=/checked\s*(?:[^=]|=\s*.checked.)/i,Ca=/^true\/(.*)/,Da=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}X.hasData(a)&&(h=X.access(a),i=r.extend({},h),X.set(b,i))}}function Ia(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ja.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ja(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,na(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ga),l=0;l<i;l++)j=h[l],la.test(j.type||"")&&!W.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Da,""),k))}return a}function Ka(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(na(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&oa(na(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(za,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d<e;d++)Ia(f[d],g[d]);if(b)if(c)for(f=f||na(a),g=g||na(h),d=0,e=f.length;d<e;d++)Ha(f[d],g[d]);else Ha(a,h);return g=na(h,"script"),g.length>0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(na(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ja(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(na(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var La=/^margin/,Ma=new RegExp("^("+aa+")(?!px)[a-z%]+$","i"),Na=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",ra.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,ra.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Oa(a,b,c){var d,e,f,g,h=a.style;return c=c||Na(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ma.test(g)&&La.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function Pa(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Qa=/^(none|table(?!-c[ea]).+)/,Ra=/^--/,Sa={position:"absolute",visibility:"hidden",display:"block"},Ta={letterSpacing:"0",fontWeight:"400"},Ua=["Webkit","Moz","ms"],Va=d.createElement("div").style;function Wa(a){if(a in Va)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ua.length;while(c--)if(a=Ua[c]+b,a in Va)return a}function Xa(a){var b=r.cssProps[a];return b||(b=r.cssProps[a]=Wa(a)||a),b}function Ya(a,b,c){var d=ba.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Za(a,b,c,d,e){var f,g=0;for(f=c===(d?"border":"content")?4:"width"===b?1:0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+ca[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+ca[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+ca[f]+"Width",!0,e))):(g+=r.css(a,"padding"+ca[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+ca[f]+"Width",!0,e)));return g}function $a(a,b,c){var d,e=Na(a),f=Oa(a,b,e),g="border-box"===r.css(a,"boxSizing",!1,e);return Ma.test(f)?f:(d=g&&(o.boxSizingReliable()||f===a.style[b]),f=parseFloat(f)||0,f+Za(a,b,c||(g?"border":"content"),d,e)+"px")}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Oa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=Ra.test(b),j=a.style;return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:j[b]:(f=typeof c,"string"===f&&(e=ba.exec(c))&&e[1]&&(c=fa(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(j[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i?j.setProperty(b,c):j[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b),i=Ra.test(b);return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Oa(a,b,d)),"normal"===e&&b in Ta&&(e=Ta[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Qa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?$a(a,b,d):ea(a,Sa,function(){return $a(a,b,d)})},set:function(a,c,d){var e,f=d&&Na(a),g=d&&Za(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=ba.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ya(a,c,g)}}}),r.cssHooks.marginLeft=Pa(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Oa(a,"marginLeft"))||a.getBoundingClientRect().left-ea(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+ca[d]+b]=f[d]||f[d-2]||f[0];return e}},La.test(a)||(r.cssHooks[a+b].set=Ya)}),r.fn.extend({css:function(a,b){return T(this,function(a,b,c){var d,e,f={},g=0;if(Array.isArray(b)){for(d=Na(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&da(a),q=W.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],cb.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=W.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ia([a],!0),j=a.style.display||j,k=r.css(a,"display"),ia([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=W.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ia([a],!0),m.done(function(){p||ia([a]),W.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=hb(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],Array.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=kb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=ab||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;g<i;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),f<1&&i?c:(i||h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:ab||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;c<d;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);f<g;f++)if(d=kb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,hb,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j}r.Animation=r.extend(kb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return fa(c.elem,a,ba.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(L);for(var c,d=0,e=a.length;d<e;d++)c=a[d],kb.tweeners[c]=kb.tweeners[c]||[],kb.tweeners[c].unshift(b)},prefilters:[ib],prefilter:function(a,b){b?kb.prefilters.unshift(a):kb.prefilters.push(a)}}),r.speed=function(a,b,c){var d=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off?d.duration=0:"number"!=typeof d.duration&&(d.duration in r.fx.speeds?d.duration=r.fx.speeds[d.duration]:d.duration=r.fx.speeds._default),null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){r.isFunction(d.old)&&d.old.call(this),d.queue&&r.dequeue(this,d.queue)},d},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(da).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=kb(this,r.extend({},a),f);(e||W.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=r.timers,g=W.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&db.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=W.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;b<g;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),r.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(ab=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),ab=void 0},r.fx.timer=function(a){r.timers.push(a),r.fx.start()},r.fx.interval=13,r.fx.start=function(){bb||(bb=!0,eb())},r.fx.stop=function(){bb=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var lb,mb=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return T(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d)); +},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d<i;d++)if(c=e[d],(c.selected||d===f)&&!c.disabled&&(!c.parentNode.disabled||!B(c.parentNode,"optgroup"))){if(b=r(c).val(),g)return b;h.push(b)}return h},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Tb=[],Ub=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Tb.pop()||r.expando+"_"+ub++;return this[a]=!0,a}}),r.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Ub.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ub.test(b.data)&&"data");if(h||"jsonp"===b.dataTypes[0])return e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Ub,"$1"+e):b.jsonp!==!1&&(b.url+=(vb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||r.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Tb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),"script"}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=C.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=qa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=pb(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&r.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?r("<div>").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length},r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),b=f.ownerDocument,c=b.documentElement,e=b.defaultView,{top:d.top+e.pageYOffset-c.clientTop,left:d.left+e.pageXOffset-c.clientLeft}):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),B(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||ra})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return T(this,function(a,d,e){var f;return r.isWindow(a)?f=a:9===a.nodeType&&(f=a.defaultView),void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Pa(o.pixelPosition,function(a,c){if(c)return c=Oa(a,b),Ma.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return T(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)},holdReady:function(a){a?r.readyWait++:r.ready(!0)}}),r.isArray=Array.isArray,r.parseJSON=JSON.parse,r.nodeName=B,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var Vb=a.jQuery,Wb=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Wb),b&&a.jQuery===r&&(a.jQuery=Vb),r},b||(a.jQuery=a.$=r),r}); + +function createShiftArr(step) { + + var space = ' '; + + if ( isNaN(parseInt(step)) ) { // argument is string + space = step; + } else { // argument is integer + switch(step) { + case 1: space = ' '; break; + case 2: space = ' '; break; + case 3: space = ' '; break; + case 4: space = ' '; break; + case 5: space = ' '; break; + case 6: space = ' '; break; + case 7: space = ' '; break; + case 8: space = ' '; break; + case 9: space = ' '; break; + case 10: space = ' '; break; + case 11: space = ' '; break; + case 12: space = ' '; break; + } + } + + var shift = ['\n']; // array of shifts + for(ix=0;ix<100;ix++){ + shift.push(shift[ix]+space); + } + return shift; +} + +function vkbeautify(){ + this.step = ' '; // 4 spaces + this.shift = createShiftArr(this.step); +}; + +vkbeautify.prototype.xml = function(text,step) { + + var ar = text.replace(/>\s{0,}</g,"><") + .replace(/</g,"~::~<") + .replace(/\s*xmlns\:/g,"~::~xmlns:") + .replace(/\s*xmlns\=/g,"~::~xmlns=") + .split('~::~'), + len = ar.length, + inComment = false, + deep = 0, + str = '', + ix = 0, + shift = step ? createShiftArr(step) : this.shift; + + for(ix=0;ix<len;ix++) { + // start comment or <![CDATA[...]]> or <!DOCTYPE // + if(ar[ix].search(/<!/) > -1) { + str += shift[deep]+ar[ix]; + inComment = true; + // end comment or <![CDATA[...]]> // + if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1 || ar[ix].search(/!DOCTYPE/) > -1 ) { + inComment = false; + } + } else + // end comment or <![CDATA[...]]> // + if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1) { + str += ar[ix]; + inComment = false; + } else + // <elm></elm> // + if( /^<\w/.exec(ar[ix-1]) && /^<\/\w/.exec(ar[ix]) && + /^<[\w:\-\.\,]+/.exec(ar[ix-1]) == /^<\/[\w:\-\.\,]+/.exec(ar[ix])[0].replace('/','')) { + str += ar[ix]; + if(!inComment) deep--; + } else + // <elm> // + if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) == -1 && ar[ix].search(/\/>/) == -1 ) { + str = !inComment ? str += shift[deep++]+ar[ix] : str += ar[ix]; + } else + // <elm>...</elm> // + if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) > -1) { + str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix]; + } else + // </elm> // + if(ar[ix].search(/<\//) > -1) { + str = !inComment ? str += shift[--deep]+ar[ix] : str += ar[ix]; + } else + // <elm/> // + if(ar[ix].search(/\/>/) > -1 ) { + str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix]; + } else + // <? xml ... ?> // + if(ar[ix].search(/<\?/) > -1) { + str += shift[deep]+ar[ix]; + } else + // xmlns // + if( ar[ix].search(/xmlns\:/) > -1 || ar[ix].search(/xmlns\=/) > -1) { + str += shift[deep]+ar[ix]; + } + + else { + str += ar[ix]; + } + } + + return (str[0] == '\n') ? str.slice(1) : str; +} + +vkbeautify.prototype.json = function(text,step) { + + var step = step ? step : this.step; + + if (typeof JSON === 'undefined' ) return text; + + if ( typeof text === "string" ) return JSON.stringify(JSON.parse(text), null, step); + if ( typeof text === "object" ) return JSON.stringify(text, null, step); + + return text; // text is not string nor object +} + +vkbeautify.prototype.css = function(text, step) { + + var ar = text.replace(/\s{1,}/g,' ') + .replace(/\{/g,"{~::~") + .replace(/\}/g,"~::~}~::~") + .replace(/\;/g,";~::~") + .replace(/\/\*/g,"~::~/*") + .replace(/\*\//g,"*/~::~") + .replace(/~::~\s{0,}~::~/g,"~::~") + .split('~::~'), + len = ar.length, + deep = 0, + str = '', + ix = 0, + shift = step ? createShiftArr(step) : this.shift; + + for(ix=0;ix<len;ix++) { + + if( /\{/.exec(ar[ix])) { + str += shift[deep++]+ar[ix]; + } else + if( /\}/.exec(ar[ix])) { + str += shift[--deep]+ar[ix]; + } else + if( /\*\\/.exec(ar[ix])) { + str += shift[deep]+ar[ix]; + } + else { + str += shift[deep]+ar[ix]; + } + } + return str.replace(/^\n{1,}/,''); +} + +//---------------------------------------------------------------------------- + +function isSubquery(str, parenthesisLevel) { + return parenthesisLevel - (str.replace(/\(/g,'').length - str.replace(/\)/g,'').length ) +} + +function split_sql(str, tab) { + + return str.replace(/\s{1,}/g," ") + + .replace(/ AND /ig,"~::~"+tab+tab+"AND ") + .replace(/ BETWEEN /ig,"~::~"+tab+"BETWEEN ") + .replace(/ CASE /ig,"~::~"+tab+"CASE ") + .replace(/ ELSE /ig,"~::~"+tab+"ELSE ") + .replace(/ END /ig,"~::~"+tab+"END ") + .replace(/ FROM /ig,"~::~FROM ") + .replace(/ GROUP\s{1,}BY/ig,"~::~GROUP BY ") + .replace(/ HAVING /ig,"~::~HAVING ") + //.replace(/ SET /ig," SET~::~") + .replace(/ IN /ig," IN ") + + .replace(/ JOIN /ig,"~::~JOIN ") + .replace(/ CROSS~::~{1,}JOIN /ig,"~::~CROSS JOIN ") + .replace(/ INNER~::~{1,}JOIN /ig,"~::~INNER JOIN ") + .replace(/ LEFT~::~{1,}JOIN /ig,"~::~LEFT JOIN ") + .replace(/ RIGHT~::~{1,}JOIN /ig,"~::~RIGHT JOIN ") + + .replace(/ ON /ig,"~::~"+tab+"ON ") + .replace(/ OR /ig,"~::~"+tab+tab+"OR ") + .replace(/ ORDER\s{1,}BY/ig,"~::~ORDER BY ") + .replace(/ OVER /ig,"~::~"+tab+"OVER ") + + .replace(/\(\s{0,}SELECT /ig,"~::~(SELECT ") + .replace(/\)\s{0,}SELECT /ig,")~::~SELECT ") + + .replace(/ THEN /ig," THEN~::~"+tab+"") + .replace(/ UNION /ig,"~::~UNION~::~") + .replace(/ USING /ig,"~::~USING ") + .replace(/ WHEN /ig,"~::~"+tab+"WHEN ") + .replace(/ WHERE /ig,"~::~WHERE ") + .replace(/ WITH /ig,"~::~WITH ") + + //.replace(/\,\s{0,}\(/ig,",~::~( ") + //.replace(/\,/ig,",~::~"+tab+tab+"") + + .replace(/ ALL /ig," ALL ") + .replace(/ AS /ig," AS ") + .replace(/ ASC /ig," ASC ") + .replace(/ DESC /ig," DESC ") + .replace(/ DISTINCT /ig," DISTINCT ") + .replace(/ EXISTS /ig," EXISTS ") + .replace(/ NOT /ig," NOT ") + .replace(/ NULL /ig," NULL ") + .replace(/ LIKE /ig," LIKE ") + .replace(/\s{0,}SELECT /ig,"SELECT ") + .replace(/\s{0,}UPDATE /ig,"UPDATE ") + .replace(/ SET /ig," SET ") + + .replace(/~::~{1,}/g,"~::~") + .split('~::~'); +} + +vkbeautify.prototype.sql = function(text,step) { + + var ar_by_quote = text.replace(/\s{1,}/g," ") + .replace(/\'/ig,"~::~\'") + .split('~::~'), + len = ar_by_quote.length, + ar = [], + deep = 0, + tab = this.step,//+this.step, + inComment = true, + inQuote = false, + parenthesisLevel = 0, + str = '', + ix = 0, + shift = step ? createShiftArr(step) : this.shift;; + + for(ix=0;ix<len;ix++) { + if(ix%2) { + ar = ar.concat(ar_by_quote[ix]); + } else { + ar = ar.concat(split_sql(ar_by_quote[ix], tab) ); + } + } + + len = ar.length; + for(ix=0;ix<len;ix++) { + + parenthesisLevel = isSubquery(ar[ix], parenthesisLevel); + + if( /\s{0,}\s{0,}SELECT\s{0,}/.exec(ar[ix])) { + ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"") + } + + if( /\s{0,}\s{0,}SET\s{0,}/.exec(ar[ix])) { + ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"") + } + + if( /\s{0,}\(\s{0,}SELECT\s{0,}/.exec(ar[ix])) { + deep++; + str += shift[deep]+ar[ix]; + } else + if( /\'/.exec(ar[ix]) ) { + if(parenthesisLevel<1 && deep) { + deep--; + } + str += ar[ix]; + } + else { + str += shift[deep]+ar[ix]; + if(parenthesisLevel<1 && deep) { + deep--; + } + } + var junk = 0; + } + + str = str.replace(/^\n{1,}/,'').replace(/\n{1,}/g,"\n"); + return str; +} + + +vkbeautify.prototype.xmlmin = function(text, preserveComments) { + + var str = preserveComments ? text + : text.replace(/\<![ \r\n\t]*(--([^\-]|[\r\n]|-[^\-])*--[ \r\n\t]*)\>/g,"") + .replace(/[ \r\n\t]{1,}xmlns/g, ' xmlns'); + return str.replace(/>\s{0,}</g,"><"); +} + +vkbeautify.prototype.jsonmin = function(text) { + + if (typeof JSON === 'undefined' ) return text; + + return JSON.stringify(JSON.parse(text), null, 0); + +} + +vkbeautify.prototype.cssmin = function(text, preserveComments) { + + var str = preserveComments ? text + : text.replace(/\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\//g,"") ; + + return str.replace(/\s{1,}/g,' ') + .replace(/\{\s{1,}/g,"{") + .replace(/\}\s{1,}/g,"}") + .replace(/\;\s{1,}/g,";") + .replace(/\/\*\s{1,}/g,"/*") + .replace(/\*\/\s{1,}/g,"*/"); +} + +vkbeautify.prototype.sqlmin = function(text) { + return text.replace(/\s{1,}/g," ").replace(/\s{1,}\(/,"(").replace(/\s{1,}\)/,")"); +} + +window.vkbeautify = new vkbeautify(); + +})(); + + +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ +!function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===bo||n[0]===_o?_o+n:n}function s(n){return(n+="")[0]===_o?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=wo.length;r>e;++e){var i=wo[e]+t;if(i in n)return i}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,i=-1,u=r.length;++i<u;)(t=r[i].on)&&t.apply(this,arguments);return n}var e=[],r=new c;return t.on=function(t,i){var u,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,u=e.indexOf(o)).concat(e.slice(u+1)),r.remove(t)),i&&e.push(r.set(t,{on:i})),n)},t}function S(){ao.event.preventDefault()}function k(){for(var n,t=ao.event;n=t.sourceEvent;)t=n;return t}function N(n){for(var t=new _,e=0,r=arguments.length;++e<r;)t[arguments[e]]=w(t);return t.of=function(e,r){return function(i){try{var u=i.sourceEvent=ao.event;i.target=n,ao.event=i,t[i.type].apply(e,r)}finally{ao.event=u}}},t}function E(n){return ko(n,Co),n}function A(n){return"function"==typeof n?n:function(){return No(n,this)}}function C(n){return"function"==typeof n?n:function(){return Eo(n,this)}}function z(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function i(){this.setAttribute(n,t)}function u(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=ao.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?u:i}function L(n){return n.trim().replace(/\s+/g," ")}function q(n){return new RegExp("(?:^|\\s+)"+ao.requote(n)+"(?:\\s+|$)","g")}function T(n){return(n+"").trim().split(/^|\s+/)}function R(n,t){function e(){for(var e=-1;++e<i;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<i;)n[e](this,r)}n=T(n).map(D);var i=n.length;return"function"==typeof t?r:e}function D(n){var t=q(n);return function(e,r){if(i=e.classList)return r?i.add(n):i.remove(n);var i=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(i)||e.setAttribute("class",L(i+" "+n))):e.setAttribute("class",L(i.replace(t," ")))}}function P(n,t,e){function r(){this.style.removeProperty(n)}function i(){this.style.setProperty(n,t,e)}function u(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?u:i}function U(n,t){function e(){delete this[n]}function r(){this[n]=t}function i(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?i:r}function j(n){function t(){var t=this.ownerDocument,e=this.namespaceURI;return e===zo&&t.documentElement.namespaceURI===zo?t.createElement(n):t.createElementNS(e,n)}function e(){return this.ownerDocument.createElementNS(n.space,n.local)}return"function"==typeof n?n:(n=ao.ns.qualify(n)).local?e:t}function F(){var n=this.parentNode;n&&n.removeChild(this)}function H(n){return{__data__:n}}function O(n){return function(){return Ao(this,n)}}function I(n){return arguments.length||(n=e),function(t,e){return t&&e?n(t.__data__,e.__data__):!t-!e}}function Y(n,t){for(var e=0,r=n.length;r>e;e++)for(var i,u=n[e],o=0,a=u.length;a>o;o++)(i=u[o])&&t(i,o,e);return n}function Z(n){return ko(n,qo),n}function V(n){var t,e;return function(r,i,u){var o,a=n[u].update,l=a.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(o=a[t])&&++t<l;);return o}}function X(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function i(){var i=l(t,co(arguments));r.call(this),this.addEventListener(n,this[o]=i,i.$=e),i._=t}function u(){var t,e=new RegExp("^__on([^.]+)"+ao.requote(n)+"$");for(var r in this)if(t=r.match(e)){var i=this[r];this.removeEventListener(t[1],i,i.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),l=$;a>0&&(n=n.slice(0,a));var c=To.get(n);return c&&(n=c,l=B),a?t?i:r:t?b:u}function $(n,t){return function(e){var r=ao.event;ao.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ao.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Do,i="click"+r,u=ao.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ro&&(Ro="onselectstart"in e?!1:x(e.style,"userSelect")),Ro){var o=n(e).style,a=o[Ro];o[Ro]="none"}return function(n){if(u.on(r,null),Ro&&(o[Ro]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(0>Po){var u=t(n);if(u.scrollX||u.scrollY){r=ao.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Po=!(o.f||o.e),r.remove()}}return Po?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ao.event.changedTouches[0].identifier}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:-1>n?Fo:Math.acos(n)}function tn(n){return n>1?Io:-1>n?-Io:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):_n(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(o-u)*n/60:180>n?o:240>n?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=ao.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Yo)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=vn(i)*na,r=vn(r)*ta,u=vn(u)*ea,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Zo,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function vn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function dn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):_n(""+n,mn,cn):new mn(n,t,e)}function Mn(n){return new mn(n>>16,n>>8&255,255&n)}function xn(n){return Mn(n)+""}function bn(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _n(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=ua.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o=o>>4|o,a=240&u,a=a>>4|a,l=15&u,l=l<<4|l):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=.5>l?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=NaN,i=l>0&&1>l?0:r),new ln(r,i,l)}function Sn(n,t,e){n=kn(n),t=kn(t),e=kn(e);var r=dn((.4124564*n+.3575761*t+.1804375*e)/na),i=dn((.2126729*n+.7151522*t+.072175*e)/ta),u=dn((.0193339*n+.119192*t+.9503041*e)/ea);return hn(116*i-16,500*(r-i),200*(i-u))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&300>t||304===t){try{n=e.call(u,l)}catch(r){return void o.error.call(u,r)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=ao.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=ao.event;ao.event=n;try{o.progress.call(u,l)}finally{ao.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(co(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},ao.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var i=e+t,u={c:n,t:i,n:null};return aa?aa.n=u:oa=u,aa=u,la||(ca=clearTimeout(ca),la=1,fa(Tn)),u}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(ca),ca=setTimeout(Tn,t)),la=0):(la=1,fa(Tn))}function Rn(){for(var n=Date.now(),t=oa;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=oa,e=1/0;t;)t.c?(t.t<e&&(e=t.t),t=(n=t).n):t=n?n.n=t.n:oa=t.n;return aa=n,e}function Pn(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Un(n,t){var e=Math.pow(10,3*xo(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function jn(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ha.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,v="",d="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,d="%",p="f";break;case"p":g=100,d="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(v="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(v=i[0],d=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=pa.get(p)||Fn;var M=c&&s;return function(n){var e=d;if(y&&n%1)return"";var i=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>g){var l=ao.formatPrefix(n,h);n=l.scale(n),e=l.symbol+d}else n*=g;n=p(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=m?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!c&&s&&(x=u(x,1/0));var S=v.length+x.length+b.length+(M?0:i.length),k=f>S?new Array(S=f-S+1).join(r):"";return M&&(x=u(k+x,k.length?f-b.length:1/0)),i+=v,n=x+b,("<"===o?i+n+k:">"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(M?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new va(e-1)),1),e}function u(n,e){return t(n=new va(+n),e),n}function o(n,r,u){var o=i(n),a=[];if(u>1)for(;r>o;)e(o)%u||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{va=Hn;var r=new Hn;return r._=n,o(r,t,e)}finally{va=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=o;var l=n.utc=In(n);return l.floor=l,l.round=In(r),l.ceil=In(i),l.offset=In(u),l.range=a,n}function In(n){return function(t,e){try{va=Hn;var r=new Hn;return r._=t,n(r,e)._}finally{va=Date}}}function Yn(n){function t(n){function t(t){for(var e,i,u,o=[],a=-1,l=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.slice(l,a)),null!=(i=ya[e=n.charAt(++a)])&&(e=n.charAt(++a)),(u=A[e])&&(e=u(t,null==i?"e"===e?" ":"0":i)),o.push(e),l=a+1);return o.push(n.slice(l,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},i=e(r,n,t,0);if(i!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var u=null!=r.Z&&va!==Hn,o=new(u?Hn:va);return"j"in r?o.setFullYear(r.y,0,r.j):"W"in r||"U"in r?("w"in r||(r.w="W"in r?1:0),o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+(r.Z/100|0),r.M+r.Z%100,r.S,r.L),u?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var i,u,o,a=0,l=t.length,c=e.length;l>a;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(o=t.charAt(a++),u=C[o in ya?t.charAt(a++):o],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,v=n.days,d=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{va=Hn;var t=new va;return t._=n,r(t)}finally{va=Date}}var r=t(n);return e.parse=function(n){try{va=Hn;var t=r.parse(n);return t&&t._}finally{va=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var M=ao.map(),x=Vn(v),b=Xn(v),_=Vn(d),w=Xn(d),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){M.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ga.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ga.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ga.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=0>n?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Vn(n){return new RegExp("^(?:"+n.map(ao.requote).join("|")+")","i")}function Xn(n){for(var t=new c,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function $n(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Bn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.U=+r[0],e+r[0].length):-1}function Wn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.W=+r[0],e+r[0].length):-1}function Jn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Gn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.y=Qn(+r[0]),e+r[0].length):-1}function Kn(n,t,e){return/^[+-]\d{4}$/.test(t=t.slice(e,e+5))?(n.Z=-t,e+5):-1}function Qn(n){return n+(n>68?1900:2e3)}function nt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=xo(t)/60|0,i=xo(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){Ma.lastIndex=0;var r=Ma.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ft(){}function st(n,t,e){var r=e.s=n+t,i=r-n,u=r-i;e.t=n-u+(t-i)}function ht(n,t){n&&wa.hasOwnProperty(n.type)&&wa[n.type](n,t)}function pt(n,t,e){var r,i=-1,u=n.length-e;for(t.lineStart();++i<u;)r=n[i],t.point(r[0],r[1],r[2]);t.lineEnd()}function gt(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)pt(n[e],t,1);t.polygonEnd()}function vt(){function n(n,t){n*=Yo,t=t*Yo/2+Fo/4;var e=n-r,o=e>=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);ka.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;Na.point=function(o,a){Na.point=n,r=(t=o)*Yo,i=Math.cos(a=(e=a)*Yo/2+Fo/4),u=Math.sin(a)},Na.lineEnd=function(){n(t,e)}}function dt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function bt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function _t(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return xo(n[0]-t[0])<Uo&&xo(n[1]-t[1])<Uo}function St(n,t){n*=Yo;var e=Math.cos(t*=Yo);kt(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function kt(n,t,e){++Ea,Ca+=(n-Ca)/Ea,za+=(t-za)/Ea,La+=(e-La)/Ea}function Nt(){function n(n,i){n*=Yo;var u=Math.cos(i*=Yo),o=u*Math.cos(n),a=u*Math.sin(n),l=Math.sin(i),c=Math.atan2(Math.sqrt((c=e*l-r*a)*c+(c=r*o-t*l)*c+(c=t*a-e*o)*c),t*o+e*a+r*l);Aa+=c,qa+=c*(t+(t=o)),Ta+=c*(e+(e=a)),Ra+=c*(r+(r=l)),kt(t,e,r)}var t,e,r;ja.point=function(i,u){i*=Yo;var o=Math.cos(u*=Yo);t=o*Math.cos(i),e=o*Math.sin(i),r=Math.sin(u),ja.point=n,kt(t,e,r)}}function Et(){ja.point=St}function At(){function n(n,t){n*=Yo;var e=Math.cos(t*=Yo),o=e*Math.cos(n),a=e*Math.sin(n),l=Math.sin(t),c=i*l-u*a,f=u*o-r*l,s=r*a-i*o,h=Math.sqrt(c*c+f*f+s*s),p=r*o+i*a+u*l,g=h&&-nn(p)/h,v=Math.atan2(h,p);Da+=g*c,Pa+=g*f,Ua+=g*s,Aa+=v,qa+=v*(r+(r=o)),Ta+=v*(i+(i=a)),Ra+=v*(u+(u=l)),kt(r,i,u)}var t,e,r,i,u;ja.point=function(o,a){t=o,e=a,ja.point=n,o*=Yo;var l=Math.cos(a*=Yo);r=l*Math.cos(o),i=l*Math.sin(o),u=Math.sin(a),kt(r,i,u)},ja.lineEnd=function(){n(t,e),ja.lineEnd=Et,ja.point=St}}function Ct(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function zt(){return!0}function Lt(n,t,e,r,i){var u=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(wt(e,r)){i.lineStart();for(var a=0;t>a;++a)i.point((e=n[a])[0],e[1]);return void i.lineEnd()}var l=new Tt(e,n,null,!0),c=new Tt(e,null,l,!1);l.o=c,u.push(l),o.push(c),l=new Tt(r,n,null,!1),c=new Tt(r,null,l,!0),l.o=c,u.push(l),o.push(c)}}),o.sort(t),qt(u),qt(o),u.length){for(var a=0,l=e,c=o.length;c>a;++a)o[a].e=l=!l;for(var f,s,h=u[0];;){for(var p=h,g=!0;p.v;)if((p=p.n)===h)return;f=p.z,i.lineStart();do{if(p.v=p.o.v=!0,p.e){if(g)for(var a=0,c=f.length;c>a;++a)i.point((s=f[a])[0],s[1]);else r(p.x,p.n.x,1,i);p=p.n}else{if(g){f=p.p.z;for(var a=f.length-1;a>=0;--a)i.point((s=f[a])[0],s[1])}else r(p.x,p.p.x,-1,i);p=p.p}p=p.o,f=p.z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r<t;)i.n=e=n[r],e.p=i,i=e;i.n=e=n[0],e.p=i}}function Tt(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Rt(n,t,e,r){return function(i,u){function o(t,e){var r=i(t,e);n(t=r[0],e=r[1])&&u.point(t,e)}function a(n,t){var e=i(n,t);d.point(e[0],e[1])}function l(){m.point=a,d.lineStart()}function c(){m.point=o,d.lineEnd()}function f(n,t){v.push([n,t]);var e=i(n,t);x.point(e[0],e[1])}function s(){x.lineStart(),v=[]}function h(){f(v[0][0],v[0][1]),x.lineEnd();var n,t=x.clean(),e=M.buffer(),r=e.length;if(v.pop(),g.push(v),v=null,r)if(1&t){n=e[0];var i,r=n.length-1,o=-1;if(r>0){for(b||(u.polygonStart(),b=!0),u.lineStart();++o<r;)u.point((i=n[o])[0],i[1]);u.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,v,d=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=ao.merge(p);var n=Ot(y,g);p.length?(b||(u.polygonStart(),b=!0),Lt(p,Ut,n,e,u)):n&&(b||(u.polygonStart(),b=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),b&&(u.polygonEnd(),b=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},M=Pt(),x=t(M),b=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ut(n,t){return((n=n.x)[0]<0?n[1]-Io-Uo:Io-n[1])-((t=t.x)[0]<0?t[1]-Io-Uo:Io-t[1])}function jt(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Fo:-Fo,l=xo(u-e);xo(l-Fo)<Uo?(n.point(e,r=(r+o)/2>0?Io:-Io),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Fo&&(xo(e-i)<Uo&&(e-=i*Uo),xo(u-a)<Uo&&(u-=a*Uo),r=Ft(e,r,u,o),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=u,r=o),i=a},lineEnd:function(){n.lineEnd(),e=r=NaN},clean:function(){return 2-t}}}function Ft(n,t,e,r){var i,u,o=Math.sin(n-e);return xo(o)>Uo?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Io,r.point(-Fo,i),r.point(0,i),r.point(Fo,i),r.point(Fo,0),r.point(Fo,-i),r.point(0,-i),r.point(-Fo,-i),r.point(-Fo,0),r.point(-Fo,i);else if(xo(n[0]-t[0])>Uo){var u=n[0]<t[0]?Fo:-Fo;i=e*u/2,r.point(-u,i),r.point(0,i),r.point(u,i)}else r.point(t[0],t[1])}function Ot(n,t){var e=n[0],r=n[1],i=[Math.sin(e),-Math.cos(e),0],u=0,o=0;ka.reset();for(var a=0,l=t.length;l>a;++a){var c=t[a],f=c.length;if(f)for(var s=c[0],h=s[0],p=s[1]/2+Fo/4,g=Math.sin(p),v=Math.cos(p),d=1;;){d===f&&(d=0),n=c[d];var y=n[0],m=n[1]/2+Fo/4,M=Math.sin(m),x=Math.cos(m),b=y-h,_=b>=0?1:-1,w=_*b,S=w>Fo,k=g*M;if(ka.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),u+=S?b+_*Ho:b,S^h>=e^y>=e){var N=mt(dt(s),dt(n));bt(N);var E=mt(i,N);bt(E);var A=(S^b>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=y,g=M,v=x,s=n}}return(-Uo>u||Uo>u&&-Uo>ka)^1&o}function It(n){function t(n,t){return Math.cos(n)*Math.cos(t)>u}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],v=t(s,h),d=o?v?0:i(s,h):v?i(s+(0>s?Fo:-Fo),h):0;if(!e&&(c=l=v)&&n.lineStart(),v!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Uo,g[1]+=Uo,v=t(g[0],g[1]))),v!==l)f=0,v?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^v){var y;d&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!v||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=v,u=d},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=dt(n),i=dt(t),o=[1,0,0],a=mt(r,i),l=yt(a,a),c=a[0],f=l-c*c;if(!f)return!e&&n;var s=u*l/f,h=-u*c/f,p=mt(o,a),g=xt(o,s),v=xt(a,h);Mt(g,v);var d=p,y=yt(g,d),m=yt(d,d),M=y*y-m*(yt(g,g)-1);if(!(0>M)){var x=Math.sqrt(M),b=xt(d,(-y-x)/m);if(Mt(b,g),b=_t(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],N=t[1];w>S&&(_=w,w=S,S=_);var E=S-w,A=xo(E-Fo)<Uo,C=A||Uo>E;if(!A&&k>N&&(_=k,k=N,N=_),C?A?k+N>0^b[1]<(xo(b[0]-w)<Uo?k:N):k<=b[1]&&b[1]<=N:E>Fo^(w<=b[0]&&b[0]<=S)){var z=xt(d,(-y+x)/m);return Mt(z,g),[b,_t(z)]}}}function i(t,e){var r=o?n:Fo-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=xo(u)>Uo,l=ve(n,6*Yo);return Rt(t,e,l,o?[0,-n]:[-Fo,n-Fo])}function Yt(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=a.x,s=a.y,h=0,p=1,g=f-l,v=s-c;if(u=n-l,g||!(u>0)){if(u/=g,0>g){if(h>u)return;p>u&&(p=u)}else if(g>0){if(u>p)return;u>h&&(h=u)}if(u=e-l,g||!(0>u)){if(u/=g,0>g){if(u>p)return;u>h&&(h=u)}else if(g>0){if(h>u)return;p>u&&(p=u)}if(u=t-c,v||!(u>0)){if(u/=v,0>v){if(h>u)return;p>u&&(p=u)}else if(v>0){if(u>p)return;u>h&&(h=u)}if(u=r-c,v||!(0>u)){if(u/=v,0>v){if(u>p)return;u>h&&(h=u)}else if(v>0){if(h>u)return;p>u&&(p=u)}return h>0&&(i.a={x:l+h*g,y:c+h*v}),1>p&&(i.b={x:l+p*g,y:c+p*v}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return xo(r[0]-n)<Uo?i>0?0:3:xo(r[0]-e)<Uo?i>0?2:1:xo(r[1]-t)<Uo?i>0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=d.length,r=n[1],i=0;e>i;++i)for(var u,o=1,a=d[i],l=a.length,c=a[0];l>o;++o)u=a[o],c[1]<=r?u[1]>r&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0){do c.point(0===f||3===f?n:e,f>1?r:t);while((f=(f+l+4)%4)!==s)}else c.point(a[0],a[1])}function f(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,d&&d.push(y=[]),S=!0,w=!1,b=_=NaN}function p(){v&&(g(m,M),x&&w&&E.rejoin(),v.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){n=Math.max(-Ha,Math.min(Ha,n)),t=Math.max(-Ha,Math.min(Ha,t));var e=f(n,t);if(d&&y.push([n,t]),S)m=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,y,m,M,x,b,_,w,S,k,N=a,E=Pt(),A=Yt(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,v=[],d=[],k=!0},polygonEnd:function(){a=N,v=ao.merge(v);var t=l([n,r]),e=k&&t,i=v.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(v,u,t,c,a),a.polygonEnd()),v=d=y=null}};return C}}function Vt(n){var t=0,e=Fo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Fo/180,e=n[1]*Fo/180):[t/Fo*180,e/Fo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){Ia+=i*n-r*t,r=n,i=t}var t,e,r,i;$a.point=function(u,o){$a.point=n,t=r=u,e=i=o},$a.lineEnd=function(){n(t,e)}}function Bt(n,t){Ya>n&&(Ya=n),n>Va&&(Va=n),Za>t&&(Za=t),t>Xa&&(Xa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){Ca+=n,za+=t,++La}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);qa+=o*(t+n)/2,Ta+=o*(e+r)/2,Ra+=o,Gt(t=n,e=r)}var t,e;Wa.point=function(r,i){Wa.point=n,Gt(t=r,e=i)}}function Qt(){Wa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);qa+=o*(r+n)/2,Ta+=o*(i+t)/2,Ra+=o,o=i*n-r*t,Da+=o*(r+n),Pa+=o*(i+t),Ua+=3*o,Gt(r=n,i=t)}var t,e,r,i;Wa.point=function(u,o){Wa.point=n,Gt(t=r=u,e=i=o)},Wa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Ho)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=NaN,S.point=u,t.lineStart()}function u(e,r){var u=dt([e,r]),o=n(e,r);i(M,x,m,b,_,w,M=o[0],x=o[1],m=e,b=u[0],_=u[1],w=u[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function l(){ +r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=M,g=x,v=b,d=_,y=w,S.point=u}function f(){i(M,x,m,b,_,w,p,g,s,v,d,y,a,t),S.lineEnd=o,o()}var s,h,p,g,v,d,y,m,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,v,d,y){var m=f-t,M=s-e,x=m*m+M*M;if(x>4*u&&d--){var b=a+p,_=l+g,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=xo(xo(w)-1)<Uo||xo(r-h)<Uo?(r+h)/2:Math.atan2(_,b),E=n(N,k),A=E[0],C=E[1],z=A-t,L=C-e,q=M*z-m*L;(q*q/x>u||xo((m*z+M*L)/x-.5)>.3||o>a*p+l*g+c*v)&&(i(t,e,r,a,l,c,A,C,N,b/=S,_/=S,w,d,y),y.point(A,C),i(A,C,N,b,_,w,f,s,h,p,g,v,d,y))}}var u=.5,o=Math.cos(30*Yo),a=16;return t.precision=function(n){return arguments.length?(a=(u=n*n)>0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Zo,e*Zo])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Yo,n[1]*Yo),[n[0]*h+l,c-n[1]*h]}function e(n){return n=a.invert((n[0]-l)/h,(c-n[1])/h),n&&[n[0]*Zo,n[1]*Zo]}function r(){a=Ct(o=se(y,M,x),u);var n=u(v,d);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,v=0,d=0,y=0,M=0,x=0,b=Fa,_=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(b(o,s(_(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Fa):It((w=+n)*Yo),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(v=n[0]%360*Yo,d=n[1]%360*Yo,r()):[v*Zo,d*Zo]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Yo,M=n[1]%360*Yo,x=n.length>2?n[2]%360*Yo:0,r()):[y*Zo,M*Zo,x*Zo]},ao.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Yo,e*Yo)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Fo?n-Ho:-Fo>n?n+Ho:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Fo?t-Ho:-Fo>t?t+Ho:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function ve(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=de(e,i),u=de(e,u),(o>0?u>i:i>u)&&(i+=o*Ho)):(i=n+o*Ho,u=n-.5*l);for(var c,f=i;o>0?f>u:u>f;f-=l)a.point((c=_t([e,-r*Math.cos(f),-r*Math.sin(f)]))[0],c[1])}}function de(n,t){var e=dt(t);e[0]-=n,bt(e);var r=nn(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Uo)%(2*Math.PI)}function ye(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function me(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function Me(n){return n.source}function xe(n){return n.target}function be(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),o=Math.cos(r),a=Math.sin(r),l=i*Math.cos(n),c=i*Math.sin(n),f=o*Math.cos(e),s=o*Math.sin(e),h=2*Math.asin(Math.sqrt(on(r-t)+i*o*on(e-n))),p=1/Math.sin(h),g=h?function(n){var t=Math.sin(n*=h)*p,e=Math.sin(h-n)*p,r=e*l+t*f,i=e*c+t*s,o=e*u+t*a;return[Math.atan2(i,r)*Zo,Math.atan2(o,Math.sqrt(r*r+i*i))*Zo]}:function(){return[n*Zo,t*Zo]};return g.distance=h,g}function _e(){function n(n,i){var u=Math.sin(i*=Yo),o=Math.cos(i),a=xo((n*=Yo)-t),l=Math.cos(a);Ja+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*u-e*o*l)*a),e*u+r*o*l),t=n,e=u,r=o}var t,e,r;Ga.point=function(i,u){t=i*Yo,e=Math.sin(u*=Yo),r=Math.cos(u),Ga.point=n},Ga.lineEnd=function(){Ga.point=Ga.lineEnd=b}}function we(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),o=Math.cos(i);return[Math.atan2(n*u,r*o),Math.asin(r&&e*u/r)]},e}function Se(n,t){function e(n,t){o>0?-Io+Uo>t&&(t=-Io+Uo):t>Io-Uo&&(t=Io-Uo);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Fo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Io]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return xo(i)<Uo?ce:(e.invert=function(n,t){var e=u-t;return[Math.atan2(n,e)/i,u-K(i)*Math.sqrt(n*n+e*e)]},e)}function Ne(n,t){return[n,Math.log(Math.tan(Fo/4+t/2))]}function Ee(n){var t,e=oe(n),r=e.scale,i=e.translate,u=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=i.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=u.apply(e,arguments);if(o===e){if(t=null==n){var a=Fo*r(),l=i();u([[l[0]-a,l[1]-a],[l[0]+a,l[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function Ae(n,t){return[Math.log(Math.tan(Fo/4+t/2)),-n]}function Ce(n){return n[0]}function ze(n){return n[1]}function Le(n){for(var t=n.length,e=[0,1],r=2,i=2;t>i;i++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function Ue(n){var t=cl.pop()||new Pe;return t.site=n,t}function je(n){Be(n),ol.remove(n),cl.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];je(n);for(var l=u;l.circle&&xo(e-l.circle.x)<Uo&&xo(r-l.circle.cy)<Uo;)u=l.P,a.unshift(l),je(l),l=u;a.unshift(l),Be(l);for(var c=o;c.circle&&xo(e-c.circle.x)<Uo&&xo(r-c.circle.cy)<Uo;)o=c.N,a.push(c),je(c),c=o;a.push(c),Be(c);var f,s=a.length;for(f=1;s>f;++f)c=a[f],l=a[f-1],nr(c.edge,l.site,c.site,i);l=a[0],c=a[s-1],c.edge=Ke(l.site,c.site,null,i),$e(l),$e(c)}function He(n){for(var t,e,r,i,u=n.x,o=n.y,a=ol._;a;)if(r=Oe(a,o)-u,r>Uo)a=a.L;else{if(i=u-Ie(a,o),!(i>Uo)){r>-Uo?(t=a.P,e=a):i>-Uo?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=Ue(n);if(ol.insert(t,l),t||e){if(t===e)return Be(t),e=Ue(t.site),ol.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(!e)return void(l.edge=Ke(t.site,l.site));Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,v=g.x-f,d=g.y-s,y=2*(h*d-p*v),m=h*h+p*p,M=v*v+d*d,x={x:(d*m-p*M)/y+f,y:(h*M-v*m)/y+s};nr(e.edge,c,g,x),l.edge=Ke(c,n,null,x),e.edge=Ke(n,g,null,x),$e(t),$e(e)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-(1/0);e=o.site;var a=e.x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ie(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ye(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],v=ul,d=v.length;d--;)if(u=v[d],u&&u.prepare())for(a=u.edges,l=a.length,o=0;l>o;)f=a[o].end(),r=f.x,i=f.y,c=a[++o%l].start(),t=c.x,e=c.y,(xo(r-t)>Uo||xo(i-e)>Uo)&&(a.splice(o,0,new tr(Qe(u.site,f,xo(r-s)<Uo&&g-i>Uo?{x:s,y:xo(t-s)<Uo?e:g}:xo(i-g)<Uo&&h-r>Uo?{x:xo(e-g)<Uo?t:h,y:g}:xo(r-h)<Uo&&i-p>Uo?{x:h,y:xo(t-h)<Uo?e:p}:xo(i-p)<Uo&&r-s>Uo?{x:xo(e-p)<Uo?t:s,y:p}:null),u.site,null)),++l)}function Ve(n,t){return t.angle-n.angle}function Xe(){rr(this),this.x=this.y=this.arc=this.site=this.cy=null}function $e(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,i=n.site,u=e.site;if(r!==u){var o=i.x,a=i.y,l=r.x-o,c=r.y-a,f=u.x-o,s=u.y-a,h=2*(l*s-c*f);if(!(h>=-jo)){var p=l*l+c*c,g=f*f+s*s,v=(s*p-c*g)/h,d=(l*g-f*p)/h,s=d+a,y=fl.pop()||new Xe;y.arc=n,y.site=i,y.x=v+o,y.y=s+Math.sqrt(v*v+d*d),y.cy=s,n.circle=y;for(var m=null,M=ll._;M;)if(y.y<M.y||y.y===M.y&&y.x<=M.x){if(!M.L){m=M.P;break}M=M.L}else{if(!M.R){m=M;break}M=M.R}ll.insert(m,y),m||(al=y)}}}}function Be(n){var t=n.circle;t&&(t.P||(al=t.N),ll.remove(t),fl.push(t),rr(t),n.circle=null)}function We(n){for(var t,e=il,r=Yt(n[0][0],n[0][1],n[1][0],n[1][1]),i=e.length;i--;)t=e[i],(!Je(t,n)||!r(t)||xo(t.a.x-t.b.x)<Uo&&xo(t.a.y-t.b.y)<Uo)&&(t.a=t.b=null,e.splice(i,1))}function Je(n,t){var e=n.b;if(e)return!0;var r,i,u=n.a,o=t[0][0],a=t[1][0],l=t[0][1],c=t[1][1],f=n.l,s=n.r,h=f.x,p=f.y,g=s.x,v=s.y,d=(h+g)/2,y=(p+v)/2;if(v===p){if(o>d||d>=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:d,y:l};e={x:d,y:c}}else{if(u){if(u.y<l)return}else u={x:d,y:c};e={x:d,y:l}}}else if(r=(h-g)/(v-p),i=y-r*d,-1>r||r>1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.y<l)return}else u={x:(c-i)/r,y:c};e={x:(l-i)/r,y:l}}else if(v>p){if(u){if(u.x>=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.x<o)return}else u={x:a,y:r*a+i};e={x:o,y:r*o+i}}return n.a=u,n.b=e,!0}function Ge(n,t){this.l=n,this.r=t,this.a=this.b=null}function Ke(n,t,e,r){var i=new Ge(n,t);return il.push(i),e&&nr(i,n,t,e),r&&nr(i,t,n,r),ul[n.i].edges.push(new tr(i,n,t)),ul[t.i].edges.push(new tr(i,t,n)),i}function Qe(n,t,e){var r=new Ge(n,null);return r.a=t,r.b=e,il.push(r),r}function nr(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function tr(n,t,e){var r=n.a,i=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(i.x-r.x,r.y-i.y):Math.atan2(r.x-i.x,i.y-r.y)}function er(){this._=null}function rr(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function ir(n,t){var e=t,r=t.R,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function ur(n,t){var e=t,r=t.L,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function or(n){for(;n.L;)n=n.L;return n}function ar(n,t){var e,r,i,u=n.sort(lr).pop();for(il=[],ul=new Array(n.length),ol=new er,ll=new er;;)if(i=al,u&&(!i||u.y<i.y||u.y===i.y&&u.x<i.x))u.x===e&&u.y===r||(ul[u.i]=new Ye(u),He(u),e=u.x,r=u.y),u=n.pop();else{if(!i)break;Fe(i.arc)}t&&(We(t),Ze(t));var o={cells:ul,edges:il};return ol=ll=il=ul=null,o}function lr(n,t){return t.y-n.y||t.x-n.x}function cr(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function fr(n){return n.x}function sr(n){return n.y}function hr(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function pr(n,t,e,r,i,u){if(!n(t,e,r,i,u)){var o=.5*(e+i),a=.5*(r+u),l=t.nodes;l[0]&&pr(n,l[0],e,r,o,a),l[1]&&pr(n,l[1],o,r,i,a),l[2]&&pr(n,l[2],e,a,o,u),l[3]&&pr(n,l[3],o,a,i,u)}}function gr(n,t,e,r,i,u,o){var a,l=1/0;return function c(n,f,s,h,p){if(!(f>u||s>o||r>h||i>p)){if(g=n.point){var g,v=t-n.x,d=e-n.y,y=v*v+d*d;if(l>y){var m=Math.sqrt(l=y);r=t-m,i=e-m,u=t+m,o=e+m,a=g}}for(var M=n.nodes,x=.5*(f+h),b=.5*(s+p),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:c(n,f,s,x,b);break;case 1:c(n,x,s,h,b);break;case 2:c(n,f,b,x,p);break;case 3:c(n,x,b,h,p)}}}(n,r,i,u,o),a}function vr(n,t){n=ao.rgb(n),t=ao.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,o=t.g-r,a=t.b-i;return function(n){return"#"+bn(Math.round(e+u*n))+bn(Math.round(r+o*n))+bn(Math.round(i+a*n))}}function dr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=Mr(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function yr(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function mr(n,t){var e,r,i,u=hl.lastIndex=pl.lastIndex=0,o=-1,a=[],l=[];for(n+="",t+="";(e=hl.exec(n))&&(r=pl.exec(t));)(i=r.index)>u&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:yr(e,r)})),u=pl.lastIndex;return u<t.length&&(i=t.slice(u),a[o]?a[o]+=i:a[++o]=i),a.length<2?l[0]?(t=l[0].x,function(n){return t(n)+""}):function(){return t}:(t=l.length,function(n){for(var e,r=0;t>r;++r)a[(e=l[r]).i]=e.x(n);return a.join("")})}function Mr(n,t){for(var e,r=ao.interpolators.length;--r>=0&&!(e=ao.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(Mr(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;o>e;++e)i[e]=t[e];return function(n){for(e=0;a>e;++e)i[e]=r[e](n);return i}}function br(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function wr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function Sr(n){return n*n}function kr(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Er(n){return function(t){return Math.pow(t,n)}}function Ar(n){return 1-Math.cos(n*Io)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Lr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ho*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ho/t)}}function qr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Tr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=ao.hcl(n),t=ao.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=ao.hsl(n),t=ao.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){n=ao.lab(n),t=ao.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Hr(t),i=Fr(t,e),u=Hr(Or(e,t,-i))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,i*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Zo,this.translate=[n.e,n.f],this.scale=[r,u],this.skew=u?Math.atan2(i,u)*Zo:0}function Fr(n,t){return n[0]*t[0]+n[1]*t[1]}function Hr(n){var t=Math.sqrt(Fr(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Or(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Ir(n){return n.length?n.pop()+",":""}function Yr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push("translate(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else(t[0]||t[1])&&e.push("translate("+t+")")}function Zr(n,t,e,r){n!==t?(n-t>180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+"rotate(",null,")")-2,x:yr(n,t)})):t&&e.push(Ir(e)+"rotate("+t+")")}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+"skewX(",null,")")-2,x:yr(n,t)}):t&&e.push(Ir(e)+"skewX("+t+")")}function Xr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Ir(e)+"scale(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Ir(e)+"scale("+t+")")}function $r(n,t){var e=[],r=[];return n=ao.transform(n),t=ao.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i<u;)e[(t=r[i]).i]=t.x(n);return e.join("")}}function Br(n,t){return t=(t-=n=+n)||1/t,function(e){return(e-n)/t}}function Wr(n,t){return t=(t-=n=+n)||1/t,function(e){return Math.max(0,Math.min(1,(e-n)/t))}}function Jr(n){for(var t=n.source,e=n.target,r=Kr(t,e),i=[t];t!==r;)t=t.parent,i.push(t);for(var u=i.length;e!==r;)i.splice(u,0,e),e=e.parent;return i}function Gr(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Kr(n,t){if(n===t)return n;for(var e=Gr(n),r=Gr(t),i=e.pop(),u=r.pop(),o=null;i===u;)o=i,i=e.pop(),u=r.pop();return o}function Qr(n){n.fixed|=2}function ni(n){n.fixed&=-7}function ti(n){n.fixed|=4,n.px=n.x,n.py=n.y}function ei(n){n.fixed&=-5}function ri(n,t,e){var r=0,i=0;if(n.charge=0,!n.leaf)for(var u,o=n.nodes,a=o.length,l=-1;++l<a;)u=o[l],null!=u&&(ri(u,t,e),n.charge+=u.charge,r+=u.charge*u.cx,i+=u.charge*u.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var c=t*e[n.point.index];n.charge+=n.pointCharge=c,r+=c*n.point.x,i+=c*n.point.y}n.cx=r/n.charge,n.cy=i/n.charge}function ii(n,t){return ao.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=fi,n}function ui(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(i=n.children)&&(r=i.length))for(var r,i;--r>=0;)e.push(i[r])}function oi(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++o<i;)e.push(u[o]);for(;null!=(n=r.pop());)t(n)}function ai(n){return n.children}function li(n){return n.value}function ci(n,t){return t.value-n.value}function fi(n){return ao.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function si(n){return n.x}function hi(n){return n.y}function pi(n,t,e){n.y0=t,n.y=e}function gi(n){return ao.range(n.length)}function vi(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function di(n){for(var t,e=1,r=0,i=n[0][1],u=n.length;u>e;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function yi(n){return n.reduce(mi,0)}function mi(n,t){return n+t[1]}function Mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function bi(n){return[ao.min(n),ao.max(n)]}function _i(n,t){return n.value-t.value}function wi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Si(n,t){n._pack_next=t,t._pack_prev=n}function ki(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ni(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-(1/0),h=1/0,p=-(1/0);if(e.forEach(Ei),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(u=e[2],zi(r,i,u),t(u),wi(r,u),r._pack_prev=u,wi(u,i),i=r._pack_next,o=3;c>o;o++){zi(r,i,u=e[o]);var g=0,v=1,d=1;for(a=i._pack_next;a!==i;a=a._pack_next,v++)if(ki(a,u)){g=1;break}if(1==g)for(l=r._pack_prev;l!==a._pack_prev&&!ki(l,u);l=l._pack_prev,d++);g?(d>v||v==d&&i.r<r.r?Si(r,i=a):Si(r=l,i),o--):(wi(r,u),i=u,t(u))}var y=(f+s)/2,m=(h+p)/2,M=0;for(o=0;c>o;o++)u=e[o],u.x-=y,u.y-=m,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(Ai)}}function Ei(n){n._pack_next=n._pack_prev=n}function Ai(n){delete n._pack_next,delete n._pack_prev}function Ci(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,o=i.length;++u<o;)Ci(i[u],t,e,r)}function zi(n,t,e){var r=n.r+e.r,i=t.x-n.x,u=t.y-n.y;if(r&&(i||u)){var o=t.r+e.r,a=i*i+u*u;o*=o,r*=r;var l=.5+(r-o)/(2*a),c=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+l*i+c*u,e.y=n.y+l*u-c*i}else e.x=n.x+r,e.y=n.y}function Li(n,t){return n.parent==t.parent?1:2}function qi(n){var t=n.children;return t.length?t[0]:n.t}function Ti(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function Ri(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function Di(n){for(var t,e=0,r=0,i=n.children,u=i.length;--u>=0;)t=i[u],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Pi(n,t,e){return n.a.parent===t.parent?n.a:e}function Ui(n){return 1+ao.max(n,function(n){return n.y})}function ji(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Fi(n){var t=n.children;return t&&t.length?Fi(t[0]):n}function Hi(n){var t,e=n.children;return e&&(t=e.length)?Hi(e[t-1]):n}function Oi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ii(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Yi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Zi(n){return n.rangeExtent?n.rangeExtent():Yi(n.range())}function Vi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Xi(n,t){var e,r=0,i=n.length-1,u=n[r],o=n[i];return u>o&&(e=r,r=i,i=e,e=u,u=o,o=e),n[r]=t.floor(u),n[i]=t.ceil(o),n}function $i(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:Sl}function Bi(n,t,e,r){var i=[],u=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)i.push(e(n[o-1],n[o])),u.push(r(t[o-1],t[o]));return function(t){var e=ao.bisect(n,t,1,a)-1;return u[e](i[e](t))}}function Wi(n,t,e,r){function i(){var i=Math.min(n.length,t.length)>2?Bi:Vi,l=r?Wr:Br;return o=i(n,t,l,e),a=i(t,n,l,Mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Ur)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return ao.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Xi(n,$i(Ki(n,t)[2])),Xi(n,$i(Ki(n,t)[2])),n}function Ki(n,t){null==t&&(t=10);var e=Yi(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ao.range.apply(ao,Ki(n,t))}function nu(n,t,e){var r=Ki(n,t);if(e){var i=ha.exec(e);if(i.shift(),"s"===i[8]){var u=ao.formatPrefix(Math.max(xo(r[0]),xo(r[1])));return i[7]||(i[7]="."+tu(u.scale(r[2]))),i[8]="f",e=ao.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+eu(i[8],r)),e=i.join("")}else e=",."+tu(r[2])+"f";return ao.format(e)}function tu(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function eu(n,t){var e=tu(t[2]);return n in kl?Math.abs(e-tu(Math.max(xo(t[0]),xo(t[1]))))+ +("e"!==n):e-2*("%"===n)}function ru(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Xi(r.map(i),e?Math:El);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=Yi(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;f>c;c++)for(var h=1;s>h;h++)o.push(u(c)*h);o.push(u(c))}else for(o.push(u(c));c++<f;)for(var h=s-1;h>0;h--)o.push(u(c)*h);for(c=0;o[c]<a;c++);for(f=o.length;o[f-1]>l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return Nl;arguments.length<2?e=Nl:"function"!=typeof e&&(e=ao.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return t-.5>o*t&&(o*=t),r>=o?e(n):""}},o.copy=function(){return ru(n.copy(),t,e,r)},Ji(o,n)}function iu(n,t,e){function r(t){return n(i(t))}var i=uu(t),u=uu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return Qi(e,n)},r.tickFormat=function(n,t){return nu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(o){return arguments.length?(i=uu(t=o),u=uu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return iu(n.copy(),t,e)},Ji(r,n)}function uu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function ou(n,t){function e(e){return u[((i.get(e)||("range"===t.t?i.set(e,n.push(e)):NaN))-1)%u.length]}function r(t,e){return ao.range(n.length).map(function(n){return t+e*n})}var i,u,o;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new c;for(var u,o=-1,a=r.length;++o<a;)i.has(u=r[o])||i.set(u,n.push(u));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(u=n,o=0,t={t:"range",a:arguments},e):u},e.rangePoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=(l+c)/2,0):(c-l)/(n.length-1+a);return u=r(l+f*a/2,f),o=0,t={t:"rangePoints",a:arguments},e},e.rangeRoundPoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=c=Math.round((l+c)/2),0):(c-l)/(n.length-1+a)|0;return u=r(l+Math.round(f*a/2+(c-l-(n.length-1+a)*f)/2),f),o=0,t={t:"rangeRoundPoints",a:arguments},e},e.rangeBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=(s-f)/(n.length-a+2*l);return u=r(f+h*l,h),c&&u.reverse(),o=h*(1-a),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=Math.floor((s-f)/(n.length-a+2*l));return u=r(f+Math.round((s-f-(n.length-a)*h)/2),h),c&&u.reverse(),o=Math.round(h*(1-a)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return Yi(t.a[0])},e.copy=function(){return ou(n,t)},e.domain(n)}function au(n,t){function u(){var e=0,r=t.length;for(a=[];++e<r;)a[e-1]=ao.quantile(n,e/r);return o}function o(n){return isNaN(n=+n)?void 0:t[ao.bisect(a,n)]}var a;return o.domain=function(t){return arguments.length?(n=t.map(r).filter(i).sort(e),u()):n},o.range=function(n){return arguments.length?(t=n,u()):t},o.quantiles=function(){return a},o.invertExtent=function(e){return e=t.indexOf(e),0>e?[NaN,NaN]:[e>0?a[e-1]:n[0],e<a.length?a[e]:n[n.length-1]]},o.copy=function(){return au(n,t)},u()}function lu(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(u*(t-n))))]}function i(){return u=e.length/(t-n),o=e.length-1,r}var u,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],i()):[n,t]},r.range=function(n){return arguments.length?(e=n,i()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?NaN:t/u+n,[t,t+1/u]},r.copy=function(){return lu(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[ao.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function fu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Qi(n,t)},t.tickFormat=function(t,e){return nu(n,t,e)},t.copy=function(){return fu(n)},t}function su(){return 0}function hu(n){return n.innerRadius}function pu(n){return n.outerRadius}function gu(n){return n.startAngle}function vu(n){return n.endAngle}function du(n){return n&&n.padAngle}function yu(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function mu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,v=(s+p)/2,d=h-f,y=p-s,m=d*d+y*y,M=e-r,x=f*p-h*s,b=(0>y?-1:1)*Math.sqrt(Math.max(0,M*M*m-x*x)),_=(x*y-d*b)/m,w=(-x*d-y*b)/m,S=(x*y+d*b)/m,k=(-x*d+y*b)/m,N=_-g,E=w-v,A=S-g,C=k-v;return N*N+E*E>A*A+C*C&&(_=S,w=k),[[_-l,w-c],[_*e/M,w*e/M]]}function Mu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s<h;)i.call(this,l=t[s],s)?f.push([+p.call(this,l,s),+g.call(this,l,s)]):f.length&&(o(),f=[]);return f.length&&o(),c.length?c.join(""):null}var e=Ce,r=ze,i=zt,u=xu,o=u.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(i=n,t):i},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?u=n:(u=Tl.get(n)||xu).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function xu(n){return n.length>1?n.join("L"):n+"Z"}function bu(n){return n.join("L")+"Z"}function _u(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&i.push("H",r[0]),i.join("")}function wu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("V",(r=n[t])[1],"H",r[0]);return i.join("")}function Su(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r=n[t])[0],"V",r[1]);return i.join("")}function ku(n,t){return n.length<4?xu(n):n[1]+Au(n.slice(1,-1),Cu(n,t))}function Nu(n,t){return n.length<3?bu(n):n[0]+Au((n.push(n[0]),n),Cu([n[n.length-2]].concat(n,[n[1]]),t))}function Eu(n,t){return n.length<3?xu(n):n[0]+Au(n,Cu(n,t))}function Au(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return xu(n);var e=n.length!=t.length,r="",i=n[0],u=n[1],o=t[0],a=o,l=1;if(e&&(r+="Q"+(u[0]-2*o[0]/3)+","+(u[1]-2*o[1]/3)+","+u[0]+","+u[1],i=n[1],l=2),t.length>1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c<t.length;c++,l++)u=n[l],a=t[c],r+="S"+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1]}if(e){var f=n[l];r+="Q"+(u[0]+2*a[0]/3)+","+(u[1]+2*a[1]/3)+","+f[0]+","+f[1]}return r}function Cu(n,t){for(var e,r=[],i=(1-t)/2,u=n[0],o=n[1],a=1,l=n.length;++a<l;)e=u,u=o,o=n[a],r.push([i*(o[0]-e[0]),i*(o[1]-e[1])]);return r}function zu(n){if(n.length<3)return xu(n);var t=1,e=n.length,r=n[0],i=r[0],u=r[1],o=[i,i,i,(r=n[1])[0]],a=[u,u,u,r[1]],l=[i,",",u,"L",Ru(Pl,o),",",Ru(Pl,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),Du(l,o,a);return n.pop(),l.push("L",r),l.join("")}function Lu(n){if(n.length<4)return xu(n);for(var t,e=[],r=-1,i=n.length,u=[0],o=[0];++r<3;)t=n[r],u.push(t[0]),o.push(t[1]);for(e.push(Ru(Pl,u)+","+Ru(Pl,o)),--r;++r<i;)t=n[r],u.shift(),u.push(t[0]),o.shift(),o.push(t[1]),Du(e,u,o);return e.join("")}function qu(n){for(var t,e,r=-1,i=n.length,u=i+4,o=[],a=[];++r<4;)e=n[r%i],o.push(e[0]),a.push(e[1]);for(t=[Ru(Pl,o),",",Ru(Pl,a)],--r;++r<u;)e=n[r%i],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),Du(t,o,a);return t.join("")}function Tu(n,t){var e=n.length-1;if(e)for(var r,i,u=n[0][0],o=n[0][1],a=n[e][0]-u,l=n[e][1]-o,c=-1;++c<=e;)r=n[c],i=c/e,r[0]=t*r[0]+(1-t)*(u+i*a),r[1]=t*r[1]+(1-t)*(o+i*l);return zu(n)}function Ru(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function Du(n,t,e){n.push("C",Ru(Rl,t),",",Ru(Rl,e),",",Ru(Dl,t),",",Ru(Dl,e),",",Ru(Pl,t),",",Ru(Pl,e))}function Pu(n,t){return(t[1]-n[1])/(t[0]-n[0])}function Uu(n){for(var t=0,e=n.length-1,r=[],i=n[0],u=n[1],o=r[0]=Pu(i,u);++t<e;)r[t]=(o+(o=Pu(i=u,u=n[t+1])))/2;return r[t]=o,r}function ju(n){for(var t,e,r,i,u=[],o=Uu(n),a=-1,l=n.length-1;++a<l;)t=Pu(n[a],n[a+1]),xo(t)<Uo?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,i=e*e+r*r,i>9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r));for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Fu(n){return n.length<3?xu(n):n[0]+Au(n,ju(n))}function Hu(n){for(var t,e,r,i=-1,u=n.length;++i<u;)t=n[i],e=t[0],r=t[1]-Io,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Ou(n){function t(t){function l(){v.push("M",a(n(y),s),f,c(n(d.reverse()),s),"Z")}for(var h,p,g,v=[],d=[],y=[],m=-1,M=t.length,x=En(e),b=En(i),_=e===r?function(){ +return p}:En(r),w=i===u?function(){return g}:En(u);++m<M;)o.call(this,h=t[m],m)?(d.push([p=+x.call(this,h,m),g=+b.call(this,h,m)]),y.push([+_.call(this,h,m),+w.call(this,h,m)])):d.length&&(l(),d=[],y=[]);return d.length&&l(),v.length?v.join(""):null}var e=Ce,r=Ce,i=0,u=ze,o=zt,a=xu,l=a.key,c=a,f="L",s=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(i=u=n,t):u},t.y0=function(n){return arguments.length?(i=n,t):i},t.y1=function(n){return arguments.length?(u=n,t):u},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(l="function"==typeof n?a=n:(a=Tl.get(n)||xu).key,c=a.reverse||a,f=a.closed?"M":"L",t):l},t.tension=function(n){return arguments.length?(s=n,t):s},t}function Iu(n){return n.radius}function Yu(n){return[n.x,n.y]}function Zu(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]-Io;return[e*Math.cos(r),e*Math.sin(r)]}}function Vu(){return 64}function Xu(){return"circle"}function $u(n){var t=Math.sqrt(n/Fo);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Bu(n){return function(){var t,e,r;(t=this[n])&&(r=t[e=t.active])&&(r.timer.c=null,r.timer.t=NaN,--t.count?delete t[e]:delete this[n],t.active+=.5,r.event&&r.event.interrupt.call(this,this.__data__,r.index))}}function Wu(n,t,e){return ko(n,Yl),n.namespace=t,n.id=e,n}function Ju(n,t,e,r){var i=n.id,u=n.namespace;return Y(n,"function"==typeof e?function(n,o,a){n[u][i].tween.set(t,r(e.call(n,n.__data__,o,a)))}:(e=r(e),function(n){n[u][i].tween.set(t,e)}))}function Gu(n){return null==n&&(n=""),function(){this.textContent=n}}function Ku(n){return null==n?"__transition__":"__transition_"+n+"__"}function Qu(n,t,e,r,i){function u(n){var t=v.delay;return f.t=t+l,n>=t?o(n-t):void(f.c=o)}function o(e){var i=g.active,u=g[i];u&&(u.timer.c=null,u.timer.t=NaN,--g.count,delete g[i],u.event&&u.event.interrupt.call(n,n.__data__,u.index));for(var o in g)if(r>+o){var c=g[o];c.timer.c=null,c.timer.t=NaN,--g.count,delete g[o]}f.c=a,qn(function(){return f.c&&a(e||1)&&(f.c=null,f.t=NaN),1},0,l),g.active=r,v.event&&v.event.start.call(n,n.__data__,t),p=[],v.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&p.push(r)}),h=v.ease,s=v.duration}function a(i){for(var u=i/s,o=h(u),a=p.length;a>0;)p[--a].call(n,o);return u>=1?(v.event&&v.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1):void 0}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),v=g[r];v||(l=i.time,f=qn(u,0,l),v=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function no(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function to(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function eo(n){return n.toISOString()}function ro(n,t,e){function r(t){return n(t)}function i(n,e){var r=n[1]-n[0],i=r/e,u=ao.bisect(Kl,i);return u==Kl.length?[t.year,Ki(n.map(function(n){return n/31536e6}),e)[2]]:u?t[i/Kl[u-1]<Kl[u]/i?u-1:u]:[tc,Ki(n,e)[2]]}return r.invert=function(t){return io(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(io)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,io(+e+1),t).length}var u=r.domain(),o=Yi(u),a=null==n?i(o,10):"number"==typeof n&&i(o,n);return a&&(n=a[0],t=a[1]),r.domain(Xi(u,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yi(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],io(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ro(n.copy(),t,e)},Ji(r,n)}function io(n){return new Date(n)}function uo(n){return JSON.parse(n.responseText)}function oo(n){var t=fo.createRange();return t.selectNode(fo.body),t.createContextualFragment(n.responseText)}var ao={version:"3.5.17"},lo=[].slice,co=function(n){return lo.call(n)},fo=this.document;if(fo)try{co(fo.documentElement.childNodes)[0].nodeType}catch(so){co=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(ho){var po=this.Element.prototype,go=po.setAttribute,vo=po.setAttributeNS,yo=this.CSSStyleDeclaration.prototype,mo=yo.setProperty;po.setAttribute=function(n,t){go.call(this,n,t+"")},po.setAttributeNS=function(n,t,e){vo.call(this,n,t,e+"")},yo.setProperty=function(n,t,e){mo.call(this,n,t+"",e)}}ao.ascending=e,ao.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:NaN},ao.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&e>r&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&e>r&&(e=r)}return e},ao.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&r>e&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&r>e&&(e=r)}return e},ao.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u<o;)if(null!=(r=n[u])&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=n[u])&&(e>r&&(e=r),r>i&&(i=r))}else{for(;++u<o;)if(null!=(r=t.call(n,n[u],u))&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=t.call(n,n[u],u))&&(e>r&&(e=r),r>i&&(i=r))}return[e,i]},ao.sum=function(n,t){var e,r=0,u=n.length,o=-1;if(1===arguments.length)for(;++o<u;)i(e=+n[o])&&(r+=e);else for(;++o<u;)i(e=+t.call(n,n[o],o))&&(r+=e);return r},ao.mean=function(n,t){var e,u=0,o=n.length,a=-1,l=o;if(1===arguments.length)for(;++a<o;)i(e=r(n[a]))?u+=e:--l;else for(;++a<o;)i(e=r(t.call(n,n[a],a)))?u+=e:--l;return l?u/l:void 0},ao.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),i=+n[r-1],u=e-r;return u?i+u*(n[r]-i):i},ao.median=function(n,t){var u,o=[],a=n.length,l=-1;if(1===arguments.length)for(;++l<a;)i(u=r(n[l]))&&o.push(u);else for(;++l<a;)i(u=r(t.call(n,n[l],l)))&&o.push(u);return o.length?ao.quantile(o.sort(e),.5):void 0},ao.variance=function(n,t){var e,u,o=n.length,a=0,l=0,c=-1,f=0;if(1===arguments.length)for(;++c<o;)i(e=r(n[c]))&&(u=e-a,a+=u/++f,l+=u*(e-a));else for(;++c<o;)i(e=r(t.call(n,n[c],c)))&&(u=e-a,a+=u/++f,l+=u*(e-a));return f>1?l/(f-1):void 0},ao.deviation=function(){var n=ao.variance.apply(this,arguments);return n?Math.sqrt(n):n};var Mo=u(e);ao.bisectLeft=Mo.left,ao.bisect=ao.bisectRight=Mo.right,ao.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},ao.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,2>u&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},ao.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ao.pairs=function(n){for(var t,e=0,r=n.length-1,i=n[0],u=new Array(0>r?0:r);r>e;)u[e]=[t=i,i=n[++e]];return u},ao.transpose=function(n){if(!(i=n.length))return[];for(var t=-1,e=ao.min(n,o),r=new Array(e);++t<e;)for(var i,u=-1,a=r[t]=new Array(i);++u<i;)a[u]=n[u][t];return r},ao.zip=function(){return ao.transpose(arguments)},ao.keys=function(n){var t=[];for(var e in n)t.push(e);return t},ao.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},ao.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},ao.merge=function(n){for(var t,e,r,i=n.length,u=-1,o=0;++u<i;)o+=n[u].length;for(e=new Array(o);--i>=0;)for(r=n[i],t=r.length;--t>=0;)e[--o]=r[t];return e};var xo=Math.abs;ao.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,i=[],u=a(xo(e)),o=-1;if(n*=u,t*=u,e*=u,0>e)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)<t;)i.push(r/u);return i},ao.map=function(n,t){var e=new c;if(n instanceof c)n.forEach(function(n,t){e.set(n,t)});else if(Array.isArray(n)){var r,i=-1,u=n.length;if(1===arguments.length)for(;++i<u;)e.set(i,n[i]);else for(;++i<u;)e.set(t.call(n,r=n[i],i),r)}else for(var o in n)e.set(o,n[o]);return e};var bo="__proto__",_o="\x00";l(c,{has:h,get:function(n){return this._[f(n)]},set:function(n,t){return this._[f(n)]=t},remove:p,keys:g,values:function(){var n=[];for(var t in this._)n.push(this._[t]);return n},entries:function(){var n=[];for(var t in this._)n.push({key:s(t),value:this._[t]});return n},size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t),this._[t])}}),ao.nest=function(){function n(t,o,a){if(a>=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,v=u[a++],d=new c;++p<g;)(h=d.get(l=v(f=o[p])))?h.push(f):d.set(l,[f]);return t?(f=t(),s=function(e,r){f.set(e,n(t,r,a))}):(f={},s=function(e,r){f[e]=n(t,r,a)}),d.forEach(s),f}function t(n,e){if(e>=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(ao.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},ao.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},l(y,{has:h,add:function(n){return this._[f(n+="")]=!0,n},remove:p,values:g,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t))}}),ao.behavior={},ao.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r<i;)n[e=arguments[r]]=M(n,t,t[e]);return n};var wo=["webkit","ms","moz","Moz","o","O"];ao.dispatch=function(){for(var n=new _,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=w(n);return n},_.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ao.event=null,ao.requote=function(n){return n.replace(So,"\\$&")};var So=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ko={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},No=function(n,t){return t.querySelector(n)},Eo=function(n,t){return t.querySelectorAll(n)},Ao=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(Ao=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(No=function(n,t){return Sizzle(n,t)[0]||null},Eo=Sizzle,Ao=Sizzle.matchesSelector),ao.selection=function(){return ao.select(fo.documentElement)};var Co=ao.selection.prototype=[];Co.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o<a;){u.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var l=-1,c=r.length;++l<c;)(i=r[l])?(t.push(e=n.call(i,i.__data__,l,o)),e&&"__data__"in i&&(e.__data__=i.__data__)):t.push(null)}return E(u)},Co.selectAll=function(n){var t,e,r=[];n=C(n);for(var i=-1,u=this.length;++i<u;)for(var o=this[i],a=-1,l=o.length;++a<l;)(e=o[a])&&(r.push(t=co(n.call(e,e.__data__,a,i))),t.parentNode=e);return E(r)};var zo="http://www.w3.org/1999/xhtml",Lo={svg:"http://www.w3.org/2000/svg",xhtml:zo,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};ao.ns={prefix:Lo,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),Lo.hasOwnProperty(e)?{space:Lo[e],local:n}:n}},Co.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ao.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},Co.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++i<r;)if(!t.contains(n[i]))return!1}else for(t=e.getAttribute("class");++i<r;)if(!q(n[i]).test(t))return!1;return!0}for(t in n)this.each(R(t,n[t]));return this}return this.each(R(n,t))},Co.style=function(n,e,r){var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(e="");for(r in n)this.each(P(r,n[r],e));return this}if(2>i){var u=this.node();return t(u).getComputedStyle(u,null).getPropertyValue(n)}r=""}return this.each(P(n,e,r))},Co.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(U(t,n[t]));return this}return this.each(U(n,t))},Co.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Co.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Co.append=function(n){return n=j(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Co.insert=function(n,t){return n=j(n),t=A(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},Co.remove=function(){return this.each(F)},Co.data=function(n,t){function e(n,e){var r,i,u,o=n.length,s=e.length,h=Math.min(o,s),p=new Array(s),g=new Array(s),v=new Array(o);if(t){var d,y=new c,m=new Array(o);for(r=-1;++r<o;)(i=n[r])&&(y.has(d=t.call(i,i.__data__,r))?v[r]=i:y.set(d,i),m[r]=d);for(r=-1;++r<s;)(i=y.get(d=t.call(e,u=e[r],r)))?i!==!0&&(p[r]=i,i.__data__=u):g[r]=H(u),y.set(d,!0);for(r=-1;++r<o;)r in m&&y.get(m[r])!==!0&&(v[r]=n[r])}else{for(r=-1;++r<h;)i=n[r],u=e[r],i?(i.__data__=u,p[r]=i):g[r]=H(u);for(;s>r;++r)g[r]=H(e[r]);for(;o>r;++r)v[r]=n[r]}g.update=p,g.parentNode=p.parentNode=v.parentNode=n.parentNode,a.push(g),l.push(p),f.push(v)}var r,i,u=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++u<o;)(i=r[u])&&(n[u]=i.__data__);return n}var a=Z([]),l=E([]),f=E([]);if("function"==typeof n)for(;++u<o;)e(r=this[u],n.call(r,r.parentNode.__data__,u));else for(;++u<o;)e(r=this[u],n);return l.enter=function(){return a},l.exit=function(){return f},l},Co.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},Co.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return E(i)},Co.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],i=r.length-1,u=r[i];--i>=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Co.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},Co.each=function(n){return Y(this,function(t,e,r){n.call(t,t.__data__,e,r)})},Co.call=function(n){var t=co(arguments);return n.apply(t[0]=this,t),this},Co.empty=function(){return!this.node()},Co.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Co.size=function(){var n=0;return Y(this,function(){++n}),n};var qo=[];ao.selection.enter=Z,ao.selection.enter.prototype=qo,qo.append=Co.append,qo.empty=Co.empty,qo.node=Co.node,qo.call=Co.call,qo.size=Co.size,qo.select=function(n){for(var t,e,r,i,u,o=[],a=-1,l=this.length;++a<l;){r=(i=this[a]).update,o.push(t=[]),t.parentNode=i.parentNode;for(var c=-1,f=i.length;++c<f;)(u=i[c])?(t.push(r[c]=e=n.call(i.parentNode,u.__data__,c,a)),e.__data__=u.__data__):t.push(null)}return E(o)},qo.insert=function(n,t){return arguments.length<2&&(t=V(this)),Co.insert.call(this,n,t)},ao.select=function(t){var e;return"string"==typeof t?(e=[No(t,fo)],e.parentNode=fo.documentElement):(e=[t],e.parentNode=n(t)),E([e])},ao.selectAll=function(n){var t;return"string"==typeof n?(t=co(Eo(n,fo)),t.parentNode=fo.documentElement):(t=co(n),t.parentNode=null),E([t])},Co.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(X(n,t,e))};var To=ao.map({mouseenter:"mouseover",mouseleave:"mouseout"});fo&&To.forEach(function(n){"on"+n in fo&&To.remove(n)});var Ro,Do=0;ao.mouse=function(n){return J(n,k())};var Po=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;ao.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,i=0,u=t.length;u>i;++i)if((r=t[i]).identifier===e)return J(n,r)},ao.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",o)}function e(n,t,e,u,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],g|=n|e,M=r,p({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:n,dy:e}))}function l(){t(h,v)&&(y.on(u+d,null).on(o+d,null),m(g),p({type:"dragend"}))}var c,f=this,s=ao.event.target.correspondingElement||ao.event.target,h=f.parentNode,p=r.of(f,arguments),g=0,v=n(),d=".drag"+(null==v?"":"-"+v),y=ao.select(e(s)).on(u+d,a).on(o+d,l),m=W(s),M=t(h,v);i?(c=i.apply(f,arguments),c=[c.x-M[0],c.y-M[1]]):c=[0,0],p({type:"dragstart"})}}var r=N(n,"drag","dragstart","dragend"),i=null,u=e(b,ao.mouse,t,"mousemove","mouseup"),o=e(G,ao.touch,m,"touchmove","touchend");return n.origin=function(t){return arguments.length?(i=t,n):i},ao.rebind(n,r,"on")},ao.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?co(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Uo=1e-6,jo=Uo*Uo,Fo=Math.PI,Ho=2*Fo,Oo=Ho-Uo,Io=Fo/2,Yo=Fo/180,Zo=180/Fo,Vo=Math.SQRT2,Xo=2,$o=4;ao.interpolateZoom=function(n,t){var e,r,i=n[0],u=n[1],o=n[2],a=t[0],l=t[1],c=t[2],f=a-i,s=l-u,h=f*f+s*s;if(jo>h)r=Math.log(c/o)/Vo,e=function(n){return[i+n*f,u+n*s,o*Math.exp(Vo*n*r)]};else{var p=Math.sqrt(h),g=(c*c-o*o+$o*h)/(2*o*Xo*p),v=(c*c-o*o-$o*h)/(2*c*Xo*p),d=Math.log(Math.sqrt(g*g+1)-g),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-d)/Vo,e=function(n){var t=n*r,e=rn(d),a=o/(Xo*p)*(e*un(Vo*t+d)-en(d));return[i+a*f,u+a*s,o*e/rn(Vo*t+d)]}}return e.duration=1e3*r,e},ao.behavior.zoom=function(){function n(n){n.on(L,s).on(Wo+".zoom",p).on("dblclick.zoom",g).on(R,h)}function e(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function r(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function i(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=r(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function o(t,e,r,o){t.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,o)),u(d=e,r),t=ao.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),d=null)}function s(){function n(){a=1,u(ao.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=ao.select(t(i)).on(q,n).on(T,r),h=e(ao.mouse(i)),p=W(i);Il.call(i),l(o)}function h(){function n(){var n=ao.touches(g);return p=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ao.event.target;ao.select(t).on(x,r).on(b,a),_.push(t);for(var e=ao.event.changedTouches,i=0,u=e.length;u>i;++i)d[e[i].identifier]=null;var l=n(),c=Date.now();if(1===l.length){if(500>c-M){var f=l[0];o(g,f,d[f.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=c}else if(l.length>1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=ao.touches(g);Il.call(g);for(var a=0,l=o.length;l>a;++a,r=null)if(e=o[a],r=d[e.identifier]){if(t)break;n=e,t=r}if(r){var f=(f=e[0]-n[0])*f+(f=e[1]-n[1])*f,s=y&&Math.sqrt(f/y);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+r[0])/2,(t[1]+r[1])/2],i(s*p)}M=null,u(n,t),c(v)}function a(){if(ao.event.touches.length){for(var t=ao.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var i in d)return void n()}ao.selectAll(_).on(m,null),w.on(L,s).on(R,h),N(),f(v)}var p,g=this,v=D.of(g,arguments),d={},y=0,m=".zoom-"+ao.event.changedTouches[0].identifier,x="touchmove"+m,b="touchend"+m,_=[],w=ao.select(g),N=W(g);t(),l(v),w.on(L,null).on(R,t)}function p(){var n=D.of(this,arguments);m?clearTimeout(m):(Il.call(this),v=e(d=y||ao.mouse(this)),l(n)),m=setTimeout(function(){m=null,f(n)},50),S(),i(Math.pow(2,.002*Bo())*k.k),u(d,v),c(n)}function g(){var n=ao.mouse(this),t=Math.log(k.k)/Math.LN2;o(this,n,e(n),ao.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,y,m,M,x,b,_,w,k={x:0,y:0,k:1},E=[960,500],A=Jo,C=250,z=0,L="mousedown.zoom",q="mousemove.zoom",T="mouseup.zoom",R="touchstart.zoom",D=N(n,"zoomstart","zoom","zoomend");return Wo||(Wo="onwheel"in fo?(Bo=function(){return-ao.event.deltaY*(ao.event.deltaMode?120:1)},"wheel"):"onmousewheel"in fo?(Bo=function(){return ao.event.wheelDelta},"mousewheel"):(Bo=function(){return-ao.event.detail},"MozMousePixelScroll")),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Hl?ao.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},l(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],i=d?d[0]:e/2,u=d?d[1]:r/2,o=ao.interpolateZoom([(i-k.x)/k.k,(u-k.y)/k.k,e/k.k],[(i-t.x)/t.k,(u-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:i-r[0]*a,y:u-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){f(n)}).each("end.zoom",function(){f(n)}):(this.__chart__=k,l(n),c(n),f(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},a(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:null},i(+t),a(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Jo:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(y=t&&[+t[0],+t[1]],n):y},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},ao.rebind(n,D,"on")};var Bo,Wo,Jo=[0,1/0];ao.color=an,an.prototype.toString=function(){return this.rgb()+""},ao.hsl=ln;var Go=ln.prototype=new an;Go.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,this.l/n)},Go.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,n*this.l)},Go.rgb=function(){return cn(this.h,this.s,this.l)},ao.hcl=fn;var Ko=fn.prototype=new an;Ko.brighter=function(n){return new fn(this.h,this.c,Math.min(100,this.l+Qo*(arguments.length?n:1)))},Ko.darker=function(n){return new fn(this.h,this.c,Math.max(0,this.l-Qo*(arguments.length?n:1)))},Ko.rgb=function(){return sn(this.h,this.c,this.l).rgb()},ao.lab=hn;var Qo=18,na=.95047,ta=1,ea=1.08883,ra=hn.prototype=new an;ra.brighter=function(n){return new hn(Math.min(100,this.l+Qo*(arguments.length?n:1)),this.a,this.b)},ra.darker=function(n){return new hn(Math.max(0,this.l-Qo*(arguments.length?n:1)),this.a,this.b)},ra.rgb=function(){return pn(this.l,this.a,this.b)},ao.rgb=mn;var ia=mn.prototype=new an;ia.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),new mn(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mn(i,i,i)},ia.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mn(n*this.r,n*this.g,n*this.b)},ia.hsl=function(){return wn(this.r,this.g,this.b)},ia.toString=function(){return"#"+bn(this.r)+bn(this.g)+bn(this.b)};var ua=ao.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ua.forEach(function(n,t){ua.set(n,Mn(t))}),ao.functor=En,ao.xhr=An(m),ao.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var o=Cn(n,t,null==e?r:i(e),u);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:i(n)):e},o}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function u(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(f>=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++<c;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}f=e+2;var r=n.charCodeAt(e+1);return 13===r?(i=!0,10===n.charCodeAt(e+2)&&++f):10===r&&(i=!0),n.slice(t+1,e).replace(/""/g,'"')}for(;c>f;){var r=n.charCodeAt(f++),a=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(f)&&(++f,++a);else if(r!==l)continue;return n.slice(t,f-a)}return n.slice(t)}for(var r,i,u={},o={},a=[],c=n.length,f=0,s=0;(r=e())!==o;){for(var h=[];r!==u&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,s++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new y,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(u).join("\n")},e},ao.csv=ao.dsv(",","text/csv"),ao.tsv=ao.dsv(" ","text/tab-separated-values");var oa,aa,la,ca,fa=this[x(this,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ao.timer=function(){qn.apply(this,arguments)},ao.timer.flush=function(){Rn(),Dn()},ao.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var sa=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Un);ao.formatPrefix=function(n,t){var e=0;return(n=+n)&&(0>n&&(n*=-1),t&&(n=ao.round(n,Pn(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),sa[8+e/3]};var ha=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,pa=ao.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ao.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ga=ao.time={},va=Date;Hn.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){da.setUTCDate.apply(this._,arguments)},setDay:function(){da.setUTCDay.apply(this._,arguments)},setFullYear:function(){da.setUTCFullYear.apply(this._,arguments)},setHours:function(){da.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){da.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){da.setUTCMinutes.apply(this._,arguments)},setMonth:function(){da.setUTCMonth.apply(this._,arguments)},setSeconds:function(){da.setUTCSeconds.apply(this._,arguments)},setTime:function(){da.setTime.apply(this._,arguments)}};var da=Date.prototype;ga.year=On(function(n){return n=ga.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ga.years=ga.year.range,ga.years.utc=ga.year.utc.range,ga.day=On(function(n){var t=new va(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ga.days=ga.day.range,ga.days.utc=ga.day.utc.range,ga.dayOfYear=function(n){var t=ga.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ga[n]=On(function(n){return(n=ga.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ga[n+"s"]=e.range,ga[n+"s"].utc=e.utc.range,ga[n+"OfYear"]=function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)}}),ga.week=ga.sunday,ga.weeks=ga.sunday.range,ga.weeks.utc=ga.sunday.utc.range,ga.weekOfYear=ga.sundayOfYear;var ya={"-":"",_:" ",0:"0"},ma=/^\s*\d+/,Ma=/^%/;ao.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xa=ao.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], +shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ao.format=xa.numberFormat,ao.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,ba),st(ba.s,this.s,this),this.s?this.t+=ba.t:this.s=ba.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ba=new ft;ao.geo.stream=function(n,t){n&&_a.hasOwnProperty(n.type)?_a[n.type](n,t):ht(n,t)};var _a={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++r<i;)ht(e[r].geometry,t)}},wa={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){pt(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)pt(e[r],t,0)},Polygon:function(n,t){gt(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)gt(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,i=e.length;++r<i;)ht(e[r],t)}};ao.geo.area=function(n){return Sa=0,ao.geo.stream(n,Na),Sa};var Sa,ka=new ft,Na={sphere:function(){Sa+=4*Fo},point:b,lineStart:b,lineEnd:b,polygonStart:function(){ka.reset(),Na.lineStart=vt},polygonEnd:function(){var n=2*ka;Sa+=0>n?4*Fo+n:n,Na.lineStart=Na.lineEnd=Na.point=b}};ao.geo.bounds=function(){function n(n,t){M.push(x=[f=n,h=n]),s>t&&(s=t),t>p&&(p=t)}function t(t,e){var r=dt([t*Yo,e*Yo]);if(y){var i=mt(y,r),u=[i[1],-i[0],0],o=mt(u,i);bt(o),o=_t(o);var l=t-g,c=l>0?1:-1,v=o[0]*Zo*c,d=xo(l)>180;if(d^(v>c*g&&c*t>v)){var m=o[1]*Zo;m>p&&(p=m)}else if(v=(v+360)%360-180,d^(v>c*g&&c*t>v)){var m=-o[1]*Zo;s>m&&(s=m)}else s>e&&(s=e),e>p&&(p=e);d?g>t?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(f>t&&(f=t),t>h&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){b.point=t}function r(){x[0]=f,x[1]=h,b.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=xo(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Na.point(n,e),t(n,e)}function u(){Na.lineStart()}function o(){i(v,d),Na.lineEnd(),xo(m)>Uo&&(f=-(h=180)),x[0]=f,x[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var f,s,h,p,g,v,d,y,m,M,x,b={point:n,lineStart:e,lineEnd:r,polygonStart:function(){b.point=i,b.lineStart=u,b.lineEnd=o,m=0,Na.polygonStart()},polygonEnd:function(){Na.polygonEnd(),b.point=n,b.lineStart=e,b.lineEnd=r,0>ka?(f=-(h=180),s=-(p=90)):m>Uo?p=90:-Uo>m&&(s=-90),x[0]=f,x[1]=h}};return function(n){p=h=-(f=s=1/0),M=[],ao.geo.stream(n,b);var t=M.length;if(t){M.sort(l);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],c(e[0],i)||c(e[1],i)?(a(i[0],e[1])>a(i[0],i[1])&&(i[1]=e[1]),a(e[0],i[1])>a(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var o,e,g=-(1/0),t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(o=a(i[1],e[0]))>g&&(g=o,f=e[0],h=i[1])}return M=x=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),ao.geo.centroid=function(n){Ea=Aa=Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,ja);var t=Da,e=Pa,r=Ua,i=t*t+e*e+r*r;return jo>i&&(t=qa,e=Ta,r=Ra,Uo>Aa&&(t=Ca,e=za,r=La),i=t*t+e*e+r*r,jo>i)?[NaN,NaN]:[Math.atan2(e,t)*Zo,tn(r/Math.sqrt(i))*Zo]};var Ea,Aa,Ca,za,La,qa,Ta,Ra,Da,Pa,Ua,ja={sphere:b,point:St,lineStart:Nt,lineEnd:Et,polygonStart:function(){ja.lineStart=At},polygonEnd:function(){ja.lineStart=Nt}},Fa=Rt(zt,jt,Ht,[-Fo,-Fo/2]),Ha=1e9;ao.geo.clipExtent=function(){var n,t,e,r,i,u,o={stream:function(n){return i&&(i.valid=!1),i=u(n),i.valid=!0,i},extent:function(a){return arguments.length?(u=Zt(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),i&&(i.valid=!1,i=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ao.geo.conicEqualArea=function(){return Vt(Xt)}).raw=Xt,ao.geo.albers=function(){return ao.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ao.geo.albersUsa=function(){function n(n){var u=n[0],o=n[1];return t=null,e(u,o),t||(r(u,o),t)||i(u,o),t}var t,e,r,i,u=ao.geo.albers(),o=ao.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ao.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?o:i>=.166&&.234>i&&r>=-.214&&-.115>r?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Uo,s+.12*c+Uo],[f-.214*c-Uo,s+.234*c-Uo]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Uo,s+.166*c+Uo],[f-.115*c-Uo,s+.234*c-Uo]]).stream(l).point,n},n.scale(1070)};var Oa,Ia,Ya,Za,Va,Xa,$a={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Ia=0,$a.lineStart=$t},polygonEnd:function(){$a.lineStart=$a.lineEnd=$a.point=b,Oa+=xo(Ia/2)}},Ba={point:Bt,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Wa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Wa.lineStart=ne},polygonEnd:function(){Wa.point=Gt,Wa.lineStart=Kt,Wa.lineEnd=Qt}};ao.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),ao.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return Oa=0,ao.geo.stream(n,i($a)),Oa},n.centroid=function(n){return Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,i(Wa)),Ua?[Da/Ua,Pa/Ua]:Ra?[qa/Ra,Ta/Ra]:La?[Ca/La,za/La]:[NaN,NaN]},n.bounds=function(n){return Va=Xa=-(Ya=Za=1/0),ao.geo.stream(n,i(Ba)),[[Ya,Za],[Va,Xa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(ao.geo.albersUsa()).context(null)},ao.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ao.geo.projection=oe,ao.geo.projectionMutator=ae,(ao.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,ao.geo.rotation=function(n){function t(t){return t=n(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t}return n=se(n[0]%360*Yo,n[1]*Yo,n.length>2?n[2]*Yo:0),t.invert=function(t){return t=n.invert(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t},t},fe.invert=ce,ao.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Yo,-n[1]*Yo,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Zo,n[1]*=Zo}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=ve((t=+r)*Yo,i*Yo),n):t},n.precision=function(r){return arguments.length?(e=ve(t*Yo,(i=+r)*Yo),n):i},n.angle(90)},ao.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Yo,i=n[1]*Yo,u=t[1]*Yo,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},ao.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ao.range(Math.ceil(u/d)*d,i,d).map(h).concat(ao.range(Math.ceil(c/y)*y,l,y).map(p)).concat(ao.range(Math.ceil(r/g)*g,e,g).filter(function(n){return xo(n%d)>Uo}).map(f)).concat(ao.range(Math.ceil(a/v)*v,o,v).filter(function(n){return xo(n%y)>Uo}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,v=g,d=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],y=+t[1],n):[d,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],n):[g,v]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Uo],[180,90-Uo]]).minorExtent([[-180,-80-Uo],[180,80+Uo]])},ao.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Me,i=xe;return n.distance=function(){return ao.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ao.geo.interpolate=function(n,t){return be(n[0]*Yo,n[1]*Yo,t[0]*Yo,t[1]*Yo)},ao.geo.length=function(n){return Ja=0,ao.geo.stream(n,Ga),Ja};var Ja,Ga={sphere:b,point:b,lineStart:_e,lineEnd:b,polygonStart:b,polygonEnd:b},Ka=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ao.geo.azimuthalEqualArea=function(){return oe(Ka)}).raw=Ka;var Qa=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(ao.geo.azimuthalEquidistant=function(){return oe(Qa)}).raw=Qa,(ao.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(ao.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var nl=we(function(n){return 1/n},Math.atan);(ao.geo.gnomonic=function(){return oe(nl)}).raw=nl,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Io]},(ao.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var tl=we(function(){return 1},Math.asin);(ao.geo.orthographic=function(){return oe(tl)}).raw=tl;var el=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ao.geo.stereographic=function(){return oe(el)}).raw=el,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Io]},(ao.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,ao.geom={},ao.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;o>t;t++)a.push([+i.call(this,n[t],t),+u.call(this,n[t],t),t]);for(a.sort(qe),t=0;o>t;t++)l.push([a[t][0],-a[t][1]]);var c=Le(a),f=Le(l),s=f[0]===c[0],h=f[f.length-1]===c[c.length-1],p=[];for(t=c.length-1;t>=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t<f.length-h;++t)p.push(n[a[f[t]][2]]);return p}var e=Ce,r=ze;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},ao.geom.polygon=function(n){return ko(n,rl),n};var rl=ao.geom.polygon.prototype=[];rl.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],i=0;++t<e;)n=r,r=this[t],i+=n[1]*r[0]-n[0]*r[1];return.5*i},rl.centroid=function(n){var t,e,r=-1,i=this.length,u=0,o=0,a=this[i-1];for(arguments.length||(n=-1/(6*this.area()));++r<i;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],u+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[u*n,o*n]},rl.clip=function(n){for(var t,e,r,i,u,o,a=De(n),l=-1,c=this.length-De(this),f=this[c-1];++l<c;){for(t=n.slice(),n.length=0,i=this[l],u=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Te(o,f,i)?(Te(u,f,i)||n.push(Re(u,o,f,i)),n.push(o)):Te(u,f,i)&&n.push(Re(u,o,f,i)),u=o;a&&n.push(n[0]),f=i}return n};var il,ul,ol,al,ll,cl=[],fl=[];Ye.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Ve),t.length},tr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},er.prototype={insert:function(n,t){var e,r,i;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=or(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(i=r.R,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.R&&(ir(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ur(this,r))):(i=r.L,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.L&&(ur(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ir(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,i=n.U,u=n.L,o=n.R;if(e=u?o?or(o):u:o,i?i.L===n?i.L=e:i.R=e:this._=e,u&&o?(r=e.C,e.C=n.C,e.L=u,u.U=e,e!==o?(i=e.U,e.U=n.U,n=e.R,i.L=n,e.R=o,o.U=e):(e.U=i,i=e,n=e.R)):(r=n.C,n=e),n&&(n.U=i),!r){if(n&&n.C)return void(n.C=!1);do{if(n===this._)break;if(n===i.L){if(t=i.R,t.C&&(t.C=!1,i.C=!0,ir(this,i),t=i.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,ur(this,t),t=i.R),t.C=i.C,i.C=t.R.C=!1,ir(this,i),n=this._;break}}else if(t=i.L,t.C&&(t.C=!1,i.C=!0,ur(this,i),t=i.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,ir(this,t),t=i.L),t.C=i.C,i.C=t.L.C=!1,ur(this,i),n=this._;break}t.C=!0,n=i,i=i.U}while(!n.C);n&&(n.C=!1)}}},ao.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],i=a[0][1],u=a[1][0],o=a[1][1];return ar(e(n),a).cells.forEach(function(e,a){var l=e.edges,c=e.site,f=t[a]=l.length?l.map(function(n){var t=n.start();return[t.x,t.y]}):c.x>=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[];f.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Uo)*Uo,y:Math.round(o(n,t)/Uo)*Uo,i:t}})}var r=Ce,i=ze,u=r,o=i,a=sl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u,o=e.site,a=e.edges.sort(Ve),l=-1,c=a.length,f=a[c-1].edge,s=f.l===o?f.r:f.l;++l<c;)i=f,u=s,f=a[l].edge,s=f.l===o?f.r:f.l,r<u.i&&r<s.i&&cr(o,u,s)<0&&t.push([n[r],n[u.i],n[s.i]])}),t},t.x=function(n){return arguments.length?(u=En(r=n),t):r},t.y=function(n){return arguments.length?(o=En(i=n),t):i},t.clipExtent=function(n){return arguments.length?(a=null==n?sl:n,t):a===sl?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===sl?null:a&&a[1]},t)};var sl=[[-1e6,-1e6],[1e6,1e6]];ao.geom.delaunay=function(n){return ao.geom.voronoi().triangles(n)},ao.geom.quadtree=function(n,t,e,r,i){function u(n){function u(n,t,e,r,i,u,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var l=n.x,f=n.y;if(null!=l)if(xo(l-e)+xo(f-r)<.01)c(n,t,e,r,i,u,o,a);else{var s=n.point;n.x=n.y=n.point=null,c(n,s,l,f,i,u,o,a),c(n,t,e,r,i,u,o,a)}else n.x=e,n.y=r,n.point=t}else c(n,t,e,r,i,u,o,a)}function c(n,t,e,r,i,o,a,l){var c=.5*(i+a),f=.5*(o+l),s=e>=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]=hr()),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,v,d,y,m,M=En(a),x=En(l);if(null!=t)v=t,d=e,y=r,m=i;else if(y=m=-(v=d=1/0),s=[],h=[],g=n.length,o)for(p=0;g>p;++p)f=n[p],f.x<v&&(v=f.x),f.y<d&&(d=f.y),f.x>y&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;g>p;++p){var b=+M(f=n[p],p),_=+x(f,p);v>b&&(v=b),d>_&&(d=_),b>y&&(y=b),_>m&&(m=_),s.push(b),h.push(_)}var w=y-v,S=m-d;w>S?m=d+w:y=v+S;var k=hr();if(k.add=function(n){u(k,n,+M(n,++p),+x(n,p),v,d,y,m)},k.visit=function(n){pr(n,k,v,d,y,m)},k.find=function(n){return gr(k,n[0],n[1],v,d,y,m)},p=-1,null==t){for(;++p<g;)u(k,n[p],s[p],h[p],v,d,y,m);--p}else n.forEach(k.add);return s=h=n=f=null,k}var o,a=Ce,l=ze;return(o=arguments.length)?(a=fr,l=sr,3===o&&(i=e,r=t,e=t=0),u(n)):(u.x=function(n){return arguments.length?(a=n,u):a},u.y=function(n){return arguments.length?(l=n,u):l},u.extent=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],i=+n[1][1]),u):null==t?null:[[t,e],[r,i]]},u.size=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=e=0,r=+n[0],i=+n[1]),u):null==t?null:[r-t,i-e]},u)},ao.interpolateRgb=vr,ao.interpolateObject=dr,ao.interpolateNumber=yr,ao.interpolateString=mr;var hl=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,pl=new RegExp(hl.source,"g");ao.interpolate=Mr,ao.interpolators=[function(n,t){var e=typeof t;return("string"===e?ua.has(t.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(t)?vr:mr:t instanceof an?vr:Array.isArray(t)?xr:"object"===e&&isNaN(t)?dr:yr)(n,t)}],ao.interpolateArray=xr;var gl=function(){return m},vl=ao.map({linear:gl,poly:Er,quad:function(){return Sr},cubic:function(){return kr},sin:function(){return Ar},exp:function(){return Cr},circle:function(){return zr},elastic:Lr,back:qr,bounce:function(){return Tr}}),dl=ao.map({"in":m,out:_r,"in-out":wr,"out-in":function(n){return wr(_r(n))}});ao.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=vl.get(e)||gl,r=dl.get(r)||m,br(r(e.apply(null,lo.call(arguments,1))))},ao.interpolateHcl=Rr,ao.interpolateHsl=Dr,ao.interpolateLab=Pr,ao.interpolateRound=Ur,ao.transform=function(n){var t=fo.createElementNS(ao.ns.prefix.svg,"g");return(ao.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:yl)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var yl={a:1,b:0,c:0,d:1,e:0,f:0};ao.interpolateTransform=$r,ao.layout={},ao.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Jr(n[e]));return t}},ao.layout.chord=function(){function n(){var n,c,s,h,p,g={},v=[],d=ao.range(u),y=[];for(e=[],r=[],n=0,h=-1;++h<u;){for(c=0,p=-1;++p<u;)c+=i[h][p];v.push(c),y.push(ao.range(u)),n+=c}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&y.forEach(function(n,t){n.sort(function(n,e){return a(i[t][n],i[t][e])})}),n=(Ho-f*u)/n,c=0,h=-1;++h<u;){for(s=c,p=-1;++p<u;){var m=d[h],M=y[m][p],x=i[m][M],b=c,_=c+=x*n;g[m+"-"+M]={index:m,subindex:M,startAngle:b,endAngle:_,value:x}}r[m]={index:m,startAngle:s,endAngle:c,value:v[m]},c+=f}for(h=-1;++h<u;)for(p=h-1;++p<u;){var w=g[h+"-"+p],S=g[p+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}l&&t()}function t(){e.sort(function(n,t){return l((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,i,u,o,a,l,c={},f=0;return c.matrix=function(n){return arguments.length?(u=(i=n)&&i.length,e=r=null,c):i},c.padding=function(n){return arguments.length?(f=n,e=r=null,c):f},c.sortGroups=function(n){return arguments.length?(o=n,e=r=null,c):o},c.sortSubgroups=function(n){return arguments.length?(a=n,e=null,c):a},c.sortChords=function(n){return arguments.length?(l=n,e&&t(),c):l},c.chords=function(){return e||n(),e},c.groups=function(){return r||n(),r},c},ao.layout.force=function(){function n(n){return function(t,e,r,i){if(t.point!==n){var u=t.cx-n.x,o=t.cy-n.y,a=i-e,l=u*u+o*o;if(l>a*a/y){if(v>l){var c=t.charge/l;n.px-=u*c,n.py-=o*c}return!0}if(t.point&&l&&v>l){var c=t.pointCharge/l;n.px-=u*c,n.py-=o*c}}return!t.charge}}function t(n){n.px=ao.event.x,n.py=ao.event.y,l.resume()}var e,r,i,u,o,a,l={},c=ao.dispatch("start","tick","end"),f=[1,1],s=.9,h=ml,p=Ml,g=-30,v=xl,d=.1,y=.64,M=[],x=[];return l.tick=function(){if((i*=.99)<.005)return e=null,c.end({type:"end",alpha:i=0}),!0;var t,r,l,h,p,v,y,m,b,_=M.length,w=x.length;for(r=0;w>r;++r)l=x[r],h=l.source,p=l.target,m=p.x-h.x,b=p.y-h.y,(v=m*m+b*b)&&(v=i*o[r]*((v=Math.sqrt(v))-u[r])/v,m*=v,b*=v,p.x-=m*(y=h.weight+p.weight?h.weight/(h.weight+p.weight):.5),p.y-=b*y,h.x+=m*(y=1-y),h.y+=b*y);if((y=i*d)&&(m=f[0]/2,b=f[1]/2,r=-1,y))for(;++r<_;)l=M[r],l.x+=(m-l.x)*y,l.y+=(b-l.y)*y;if(g)for(ri(t=ao.geom.quadtree(M),i,a),r=-1;++r<_;)(l=M[r]).fixed||t.visit(n(l));for(r=-1;++r<_;)l=M[r],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*s,l.y-=(l.py-(l.py=l.y))*s);c.tick({type:"tick",alpha:i})},l.nodes=function(n){return arguments.length?(M=n,l):M},l.links=function(n){return arguments.length?(x=n,l):x},l.size=function(n){return arguments.length?(f=n,l):f},l.linkDistance=function(n){return arguments.length?(h="function"==typeof n?n:+n,l):h},l.distance=l.linkDistance,l.linkStrength=function(n){return arguments.length?(p="function"==typeof n?n:+n,l):p},l.friction=function(n){return arguments.length?(s=+n,l):s},l.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,l):g},l.chargeDistance=function(n){return arguments.length?(v=n*n,l):Math.sqrt(v)},l.gravity=function(n){return arguments.length?(d=+n,l):d},l.theta=function(n){return arguments.length?(y=n*n,l):Math.sqrt(y)},l.alpha=function(n){return arguments.length?(n=+n,i?n>0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;i>l;++l)e[l]=[];for(l=0;c>l;++l){var u=x[l];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var o,a=e[t],l=-1,f=a.length;++l<f;)if(!isNaN(o=a[l][n]))return o;return Math.random()*r}var t,e,r,i=M.length,c=x.length,s=f[0],v=f[1];for(t=0;i>t;++t)(r=M[t]).index=t,r.weight=0;for(t=0;c>t;++t)r=x[t],"number"==typeof r.source&&(r.source=M[r.source]),"number"==typeof r.target&&(r.target=M[r.target]),++r.source.weight,++r.target.weight;for(t=0;i>t;++t)r=M[t],isNaN(r.x)&&(r.x=n("x",s)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof h)for(t=0;c>t;++t)u[t]=+h.call(this,x[t],t);else for(t=0;c>t;++t)u[t]=h;if(o=[],"function"==typeof p)for(t=0;c>t;++t)o[t]=+p.call(this,x[t],t);else for(t=0;c>t;++t)o[t]=p;if(a=[],"function"==typeof g)for(t=0;i>t;++t)a[t]=+g.call(this,M[t],t);else for(t=0;i>t;++t)a[t]=g;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){return r||(r=ao.behavior.drag().origin(m).on("dragstart.force",Qr).on("drag.force",t).on("dragend.force",ni)),arguments.length?void this.on("mouseover.force",ti).on("mouseout.force",ei).call(r):r},ao.rebind(l,c,"on")};var ml=20,Ml=1,xl=1/0;ao.layout.hierarchy=function(){function n(i){var u,o=[i],a=[];for(i.depth=0;null!=(u=o.pop());)if(a.push(u),(c=e.call(n,u,u.depth))&&(l=c.length)){for(var l,c,f;--l>=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return oi(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=ci,e=ai,r=li;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ui(t,function(n){n.children&&(n.value=0)}),oi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ao.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++c<o;)n(a=u[c],e,l=a.value*r,i),e+=l}}function t(n){var e=n.children,r=0;if(e&&(i=e.length))for(var i,u=-1;++u<i;)r=Math.max(r,t(e[u]));return 1+r}function e(e,u){var o=r.call(this,e,u);return n(o[0],0,i[0],i[1]/t(o[0])),o}var r=ao.layout.hierarchy(),i=[1,1];return e.size=function(n){return arguments.length?(i=n,e):i},ii(e,r)},ao.layout.pie=function(){function n(o){var a,l=o.length,c=o.map(function(e,r){return+t.call(n,e,r)}),f=+("function"==typeof r?r.apply(this,arguments):r),s=("function"==typeof i?i.apply(this,arguments):i)-f,h=Math.min(Math.abs(s)/l,+("function"==typeof u?u.apply(this,arguments):u)),p=h*(0>s?-1:1),g=ao.sum(c),v=g?(s-l*p)/g:0,d=ao.range(l),y=[];return null!=e&&d.sort(e===bl?function(n,t){return c[t]-c[n]}:function(n,t){return e(o[n],o[t])}),d.forEach(function(n){y[n]={data:o[n],value:a=c[n],startAngle:f,endAngle:f+=a*v+p,padAngle:h}}),y}var t=Number,e=bl,r=0,i=Ho,u=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n.padAngle=function(t){return arguments.length?(u=t,n):u},n};var bl={};ao.layout.stack=function(){function n(a,l){if(!(h=a.length))return a;var c=a.map(function(e,r){return t.call(n,e,r)}),f=c.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),o.call(n,t,e)]})}),s=e.call(n,f,l);c=ao.permute(c,s),f=ao.permute(f,s);var h,p,g,v,d=r.call(n,f,l),y=c[0].length;for(g=0;y>g;++g)for(i.call(n,c[0][g],v=d[g],f[0][g][1]),p=1;h>p;++p)i.call(n,c[p][g],v+=f[p-1][g][1],f[p][g][1]);return a}var t=m,e=gi,r=vi,i=pi,u=si,o=hi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:_l.get(t)||gi,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:wl.get(t)||vi,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(i=t,n):i},n};var _l=ao.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(di),u=n.map(yi),o=ao.range(r).sort(function(n,t){return i[n]-i[t]}),a=0,l=0,c=[],f=[];for(t=0;r>t;++t)e=o[t],l>a?(a+=u[e],c.push(e)):(l+=u[e],f.push(e));return f.reverse().concat(c)},reverse:function(n){return ao.range(n.length).reverse()},"default":gi}),wl=ao.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,o=[],a=0,l=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;u>e;++e)l[e]=(a-o[e])/2;return l},wiggle:function(n){var t,e,r,i,u,o,a,l,c,f=n.length,s=n[0],h=s.length,p=[];for(p[0]=l=c=0,e=1;h>e;++e){for(t=0,i=0;f>t;++t)i+=n[t][e][1];for(t=0,u=0,a=s[e][0]-s[e-1][0];f>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;u+=o*n[t][e][1]}p[e]=l-=i?u/i*a:0,c>l&&(c=l)}for(e=0;h>e;++e)p[e]-=c;return p},expand:function(n){var t,e,r,i=n.length,u=n[0].length,o=1/i,a=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=o}for(e=0;u>e;++e)a[e]=0;return a},zero:vi});ao.layout.histogram=function(){function n(n,u){for(var o,a,l=[],c=n.map(e,this),f=r.call(this,c,u),s=i.call(this,f,c,u),u=-1,h=c.length,p=s.length-1,g=t?1:1/h;++u<p;)o=l[u]=[],o.dx=s[u+1]-(o.x=s[u]),o.y=0;if(p>0)for(u=-1;++u<h;)a=c[u],a>=f[0]&&a<=f[1]&&(o=l[ao.bisect(s,a,1,p)-1],o.y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=bi,i=Mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ao.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,oi(a,function(n){n.r=+f(n.value)}),oi(a,Ni),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;oi(a,function(n){n.r+=s}),oi(a,Ni),oi(a,function(n){n.r-=s})}return Ci(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=ao.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ii(n,e)},ao.layout.tree=function(){function n(n,i){var f=o.call(this,n,i),s=f[0],h=t(s);if(oi(h,e),h.parent.m=-h.z,ui(h,r),c)ui(s,u);else{var p=s,g=s,v=s;ui(s,function(n){n.x<p.x&&(p=n),n.x>g.x&&(g=n),n.depth>v.depth&&(v=n)});var d=a(p,g)/2-p.x,y=l[0]/(g.x+a(g,p)/2+d),m=l[1]/(v.depth||1);ui(s,function(n){n.x=(n.x+d)*y,n.y=n.depth*m})}return f}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var i,u=t.children,o=0,a=u.length;a>o;++o)r.push((u[o]=i={_:u[o],parent:t,children:(i=u[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Di(n);var u=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-u):n.z=u}else r&&(n.z=r.z+a(n._,r._));n.parent.A=i(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function i(n,t,e){if(t){for(var r,i=n,u=n,o=t,l=i.parent.children[0],c=i.m,f=u.m,s=o.m,h=l.m;o=Ti(o),i=qi(i),o&&i;)l=qi(l),u=Ti(u),u.a=n,r=o.z+s-i.z-c+a(o._,i._),r>0&&(Ri(Pi(o,n,e),n,r),c+=r,f+=r),s+=o.m,c+=i.m,h+=l.m,f+=u.m;o&&!Ti(u)&&(u.t=o,u.m+=s-f),i&&!qi(l)&&(l.t=i,l.m+=c-h,e=n)}return e}function u(n){n.x*=l[0],n.y=n.depth*l[1]}var o=ao.layout.hierarchy().sort(null).value(null),a=Li,l=[1,1],c=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(c=null==(l=t)?u:null,n):c?null:l},n.nodeSize=function(t){return arguments.length?(c=null==(l=t)?null:u,n):c?l:null},ii(n,o)},ao.layout.cluster=function(){function n(n,u){var o,a=t.call(this,n,u),l=a[0],c=0;oi(l,function(n){var t=n.children;t&&t.length?(n.x=ji(t),n.y=Ui(t)):(n.x=o?c+=e(n,o):0,n.y=0,o=n)});var f=Fi(l),s=Hi(l),h=f.x-e(f,s)/2,p=s.x+e(s,f)/2;return oi(l,i?function(n){n.x=(n.x-l.x)*r[0],n.y=(l.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(p-h)*r[0],n.y=(1-(l.y?n.y/l.y:1))*r[1]}),a}var t=ao.layout.hierarchy().sort(null).value(null),e=Li,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ii(n,t)},ao.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++i<u;)r=(e=n[i]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var o,a,l,c=s(e),f=[],h=u.slice(),g=1/0,v="slice"===p?c.dx:"dice"===p?c.dy:"slice-dice"===p?1&e.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(n(h,c.dx*c.dy/e.value),f.area=0;(l=h.length)>0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,v))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,v,c,!1),v=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,v,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(u>e&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0; +if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++u<o;)i=n[u],i.x=a,i.y=c,i.dy=f,a+=i.dx=Math.min(e.x+e.dx-a,f?l(i.area/f):0);i.z=!0,i.dx+=e.x+e.dx-a,e.y+=f,e.dy-=f}else{for((r||f>e.dx)&&(f=e.dx);++u<o;)i=n[u],i.x=a,i.y=c,i.dx=f,c+=i.dy=Math.min(e.y+e.dy-c,f?l(i.area/f):0);i.z=!1,i.dy+=e.y+e.dy-c,e.x+=f,e.dx-=f}}function u(r){var i=o||a(r),u=i[0];return u.x=u.y=0,u.value?(u.dx=c[0],u.dy=c[1]):u.dx=u.dy=0,o&&a.revalue(u),n([u],u.dx*u.dy/u.value),(o?e:t)(u),h&&(o=i),i}var o,a=ao.layout.hierarchy(),l=Math.round,c=[1,1],f=null,s=Oi,h=!1,p="squarify",g=.5*(1+Math.sqrt(5));return u.size=function(n){return arguments.length?(c=n,u):c},u.padding=function(n){function t(t){var e=n.call(u,t,t.depth);return null==e?Oi(t):Ii(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return Ii(t,n)}if(!arguments.length)return f;var r;return s=null==(f=n)?Oi:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,u},u.round=function(n){return arguments.length?(l=n?Math.round:Number,u):l!=Number},u.sticky=function(n){return arguments.length?(h=n,o=null,u):h},u.ratio=function(n){return arguments.length?(g=n,u):g},u.mode=function(n){return arguments.length?(p=n+"",u):p},ii(u,a)},ao.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ao.random.normal.apply(ao,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ao.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ao.scale={};var Sl={floor:m,ceil:m};ao.scale.linear=function(){return Wi([0,1],[0,1],Mr,!1)};var kl={s:1,g:1,p:1,r:1,e:1};ao.scale.log=function(){return ru(ao.scale.linear().domain([0,1]),10,!0,[1,10])};var Nl=ao.format(".0e"),El={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ao.scale.pow=function(){return iu(ao.scale.linear(),1,[0,1])},ao.scale.sqrt=function(){return ao.scale.pow().exponent(.5)},ao.scale.ordinal=function(){return ou([],{t:"range",a:[[]]})},ao.scale.category10=function(){return ao.scale.ordinal().range(Al)},ao.scale.category20=function(){return ao.scale.ordinal().range(Cl)},ao.scale.category20b=function(){return ao.scale.ordinal().range(zl)},ao.scale.category20c=function(){return ao.scale.ordinal().range(Ll)};var Al=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(xn),Cl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(xn),zl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(xn),Ll=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(xn);ao.scale.quantile=function(){return au([],[])},ao.scale.quantize=function(){return lu(0,1,[0,1])},ao.scale.threshold=function(){return cu([.5],[0,1])},ao.scale.identity=function(){return fu([0,1])},ao.svg={},ao.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),f=o.apply(this,arguments)-Io,s=a.apply(this,arguments)-Io,h=Math.abs(s-f),p=f>s?0:1;if(n>c&&(g=c,c=n,n=g),h>=Oo)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,v,d,y,m,M,x,b,_,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(d=u===ql?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(d/c*Math.sin(y))),n&&(N=tn(d/n*Math.sin(y)))),c){m=c*Math.cos(f+E),M=c*Math.sin(f+E),x=c*Math.cos(s-E),b=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Fo?0:1;if(E&&yu(m,M,x,b)===p^C){var z=(f+s)/2;m=c*Math.cos(z),M=c*Math.sin(z),x=b=null}}else m=M=0;if(n){_=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Fo?0:1;if(N&&yu(_,w,S,k)===1-p^L){var q=(f+s)/2;_=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else _=w=0;if(h>Uo&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){v=c>n^p?0:1;var T=g,R=g;if(Fo>h){var D=null==S?[_,w]:null==x?[m,M]:Re([m,M],[S,k],[x,b],[_,w]),P=m-D[0],U=M-D[1],j=x-D[0],F=b-D[1],H=1/Math.sin(Math.acos((P*j+U*F)/(Math.sqrt(P*P+U*U)*Math.sqrt(j*j+F*F)))/2),O=Math.sqrt(D[0]*D[0]+D[1]*D[1]);R=Math.min(g,(n-O)/(H-1)),T=Math.min(g,(c-O)/(H+1))}if(null!=x){var I=mu(null==S?[_,w]:[S,k],[m,M],c,T,p),Y=mu([x,b],[_,w],c,T,p);g===T?A.push("M",I[0],"A",T,",",T," 0 0,",v," ",I[1],"A",c,",",c," 0 ",1-p^yu(I[1][0],I[1][1],Y[1][0],Y[1][1]),",",p," ",Y[1],"A",T,",",T," 0 0,",v," ",Y[0]):A.push("M",I[0],"A",T,",",T," 0 1,",v," ",Y[0])}else A.push("M",m,",",M);if(null!=S){var Z=mu([m,M],[S,k],n,-R,p),V=mu([_,w],null==x?[m,M]:[x,b],n,-R,p);g===R?A.push("L",V[0],"A",R,",",R," 0 0,",v," ",V[1],"A",n,",",n," 0 ",p^yu(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-p," ",Z[1],"A",R,",",R," 0 0,",v," ",Z[0]):A.push("L",V[0],"A",R,",",R," 0 0,",v," ",Z[0])}else A.push("L",_,",",w)}else A.push("M",m,",",M),null!=x&&A.push("A",c,",",c," 0 ",C,",",p," ",x,",",b),A.push("L",_,",",w),null!=S&&A.push("A",n,",",n," 0 ",L,",",1-p," ",S,",",k);return A.push("Z"),A.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=hu,r=pu,i=su,u=ql,o=gu,a=vu,l=du;return n.innerRadius=function(t){return arguments.length?(e=En(t),n):e},n.outerRadius=function(t){return arguments.length?(r=En(t),n):r},n.cornerRadius=function(t){return arguments.length?(i=En(t),n):i},n.padRadius=function(t){return arguments.length?(u=t==ql?ql:En(t),n):u},n.startAngle=function(t){return arguments.length?(o=En(t),n):o},n.endAngle=function(t){return arguments.length?(a=En(t),n):a},n.padAngle=function(t){return arguments.length?(l=En(t),n):l},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-Io;return[Math.cos(t)*n,Math.sin(t)*n]},n};var ql="auto";ao.svg.line=function(){return Mu(m)};var Tl=ao.map({linear:xu,"linear-closed":bu,step:_u,"step-before":wu,"step-after":Su,basis:zu,"basis-open":Lu,"basis-closed":qu,bundle:Tu,cardinal:Eu,"cardinal-open":ku,"cardinal-closed":Nu,monotone:Fu});Tl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Rl=[0,2/3,1/3,0],Dl=[0,1/3,2/3,0],Pl=[0,1/6,2/3,1/6];ao.svg.line.radial=function(){var n=Mu(Hu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},wu.reverse=Su,Su.reverse=wu,ao.svg.area=function(){return Ou(m)},ao.svg.area.radial=function(){var n=Ou(Hu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ao.svg.chord=function(){function n(n,a){var l=t(this,u,n,a),c=t(this,o,n,a);return"M"+l.p0+r(l.r,l.p1,l.a1-l.a0)+(e(l,c)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,l.r,l.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=a.call(n,i,r),o=l.call(n,i,r)-Io,f=c.call(n,i,r)-Io;return{r:u,a0:o,a1:f,p0:[u*Math.cos(o),u*Math.sin(o)],p1:[u*Math.cos(f),u*Math.sin(f)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Fo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Me,o=xe,a=Iu,l=gu,c=vu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},ao.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=Me,e=xe,r=Yu;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ao.svg.diagonal.radial=function(){var n=ao.svg.diagonal(),t=Yu,e=n.projection;return n.projection=function(n){return arguments.length?e(Zu(t=n)):t},n},ao.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$u)(e.call(this,n,r))}var t=Xu,e=Vu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=ao.map({circle:$u,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ao.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Yo);Co.transition=function(n){for(var t,e,r=Hl||++Zl,i=Ku(n),u=[],o=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},a=-1,l=this.length;++a<l;){u.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(e=c[f])&&Qu(e,f,i,r,o),t.push(e)}return Wu(u,i,r)},Co.interrupt=function(n){return this.each(null==n?Il:Bu(Ku(n)))};var Hl,Ol,Il=Bu(Ku()),Yl=[],Zl=0;Yl.call=Co.call,Yl.empty=Co.empty,Yl.node=Co.node,Yl.size=Co.size,ao.transition=function(n,t){return n&&n.transition?Hl?n.transition(t):n:ao.selection().transition(n)},ao.transition.prototype=Yl,Yl.select=function(n){var t,e,r,i=this.id,u=this.namespace,o=[];n=A(n);for(var a=-1,l=this.length;++a<l;){o.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(r=c[f])&&(e=n.call(r,r.__data__,f,a))?("__data__"in r&&(e.__data__=r.__data__),Qu(e,f,u,i,r[u][i]),t.push(e)):t.push(null)}return Wu(o,u,i)},Yl.selectAll=function(n){var t,e,r,i,u,o=this.id,a=this.namespace,l=[];n=C(n);for(var c=-1,f=this.length;++c<f;)for(var s=this[c],h=-1,p=s.length;++h<p;)if(r=s[h]){u=r[a][o],e=n.call(r,r.__data__,h,c),l.push(t=[]);for(var g=-1,v=e.length;++g<v;)(i=e[g])&&Qu(i,g,a,o,u),t.push(i)}return Wu(l,a,o)},Yl.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]);for(var e=this[u],a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return Wu(i,this.namespace,this.id)},Yl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):Y(this,null==t?function(t){t[r][e].tween.remove(n)}:function(i){i[r][e].tween.set(n,t)})},Yl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?$r:Mr,a=ao.ns.qualify(n);return Ju(this,"attr."+n,t,a.local?u:i)},Yl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=ao.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},Yl.style=function(n,e,r){function i(){this.style.removeProperty(n)}function u(e){return null==e?i:(e+="",function(){var i,u=t(this).getComputedStyle(this,null).getPropertyValue(n);return u!==e&&(i=Mr(u,e),function(t){this.style.setProperty(n,i(t),r)})})}var o=arguments.length;if(3>o){if("string"!=typeof n){2>o&&(e="");for(r in n)this.style(r,n[r],e);return this}r=""}return Ju(this,"style."+n,e,u)},Yl.styleTween=function(n,e,r){function i(i,u){var o=e.call(this,i,u,t(this).getComputedStyle(this,null).getPropertyValue(n));return o&&function(t){this.style.setProperty(n,o(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+n,i)},Yl.text=function(n){return Ju(this,"text",n,Gu)},Yl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Yl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ao.ease.apply(ao,arguments)),Y(this,function(r){r[e][t].ease=n}))},Yl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:Y(this,"function"==typeof n?function(r,i,u){r[e][t].delay=+n.call(r,r.__data__,i,u)}:(n=+n,function(r){r[e][t].delay=n}))},Yl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:Y(this,"function"==typeof n?function(r,i,u){r[e][t].duration=Math.max(1,n.call(r,r.__data__,i,u))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Yl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var i=Ol,u=Hl;try{Hl=e,Y(this,function(t,i,u){Ol=t[r][e],n.call(t,t.__data__,i,u)})}finally{Ol=i,Hl=u}}else Y(this,function(i){var u=i[r][e];(u.event||(u.event=ao.dispatch("start","end","interrupt"))).on(n,t)});return this},Yl.transition=function(){for(var n,t,e,r,i=this.id,u=++Zl,o=this.namespace,a=[],l=0,c=this.length;c>l;l++){a.push(n=[]);for(var t=this[l],f=0,s=t.length;s>f;f++)(e=t[f])&&(r=e[o][i],Qu(e,f,o,u,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Wu(a,o,u)},ao.svg.axis=function(){function n(n){n.each(function(){var n,c=ao.select(this),f=this.__chart__||e,s=this.__chart__=e.copy(),h=null==l?s.ticks?s.ticks.apply(s,a):s.domain():l,p=null==t?s.tickFormat?s.tickFormat.apply(s,a):m:t,g=c.selectAll(".tick").data(h,s),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",Uo),d=ao.transition(g.exit()).style("opacity",Uo).remove(),y=ao.transition(g.order()).style("opacity",1),M=Math.max(i,0)+o,x=Zi(s),b=c.selectAll(".domain").data([0]),_=(b.enter().append("path").attr("class","domain"),ao.transition(b));v.append("line"),v.append("text");var w,S,k,N,E=v.select("line"),A=y.select("line"),C=g.select("text").text(p),z=v.select("text"),L=y.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=no,w="x",k="y",S="x2",N="y2",C.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+q*u+"V0H"+x[1]+"V"+q*u)):(n=to,w="y",k="x",S="y2",N="x2",C.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),_.attr("d","M"+q*u+","+x[0]+"H0V"+x[1]+"H"+q*u)),E.attr(N,q*i),z.attr(k,q*M),A.attr(S,0).attr(N,q*i),L.attr(w,0).attr(k,q*M),s.rangeBand){var T=s,R=T.rangeBand()/2;f=s=function(n){return T(n)+R}}else f.rangeBand?f=s:d.call(n,s,f);v.call(n,f,s),y.call(n,s,s)})}var t,e=ao.scale.linear(),r=Vl,i=6,u=6,o=3,a=[10],l=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xl?t+"":Vl,n):r},n.ticks=function(){return arguments.length?(a=co(arguments),n):a},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(i=+t,u=+arguments[e-1],n):i},n.innerTickSize=function(t){return arguments.length?(i=+t,n):i},n.outerTickSize=function(t){return arguments.length?(u=+t,n):u},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Vl="bottom",Xl={top:1,right:1,bottom:1,left:1};ao.svg.brush=function(){function n(t){t.each(function(){var t=ao.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=t.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=t.selectAll(".resize").data(v,m);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return $l[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,s=ao.transition(t),h=ao.transition(o);c&&(l=Zi(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),r(s)),f&&(l=Zi(f),h.attr("y",l[0]).attr("height",l[1]-l[0]),i(s)),e(s)})}function e(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+h[+/^s/.test(n)]+")"})}function r(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==ao.event.keyCode&&(C||(M=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function v(){32==ao.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function d(){var n=ao.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ao.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0]<M[0])],L[1]=h[+(n[1]<M[1])]):M=null),E&&y(n,c,0)&&(r(k),t=!0),A&&y(n,f,1)&&(i(k),t=!0),t&&(e(k),w({type:"brush",mode:C?"move":"resize"}))}function y(n,t,e){var r,i,u=Zi(t),l=u[0],c=u[1],f=L[e],v=e?h:s,d=v[1]-v[0];return C&&(l-=f,c-=d+f),r=(e?g:p)?Math.max(l,Math.min(c,n[e])):n[e],C?i=(r+=f)+d:(M&&(f=Math.max(l,Math.min(c,2*M[e]-r))),r>f?(i=r,r=f):i=f),v[0]!=r||v[1]!=i?(e?a=null:o=null,v[0]=r,v[1]=i,!0):void 0}function m(){d(),k.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ao.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),z(),w({type:"brushend"})}var M,x,b=this,_=ao.select(ao.event.target),w=l.of(b,arguments),k=ao.select(b),N=_.datum(),E=!/^(n|s)$/.test(N)&&c,A=!/^(e|w)$/.test(N)&&f,C=_.classed("extent"),z=W(b),L=ao.mouse(b),q=ao.select(t(b)).on("keydown.brush",u).on("keyup.brush",v);if(ao.event.changedTouches?q.on("touchmove.brush",d).on("touchend.brush",m):q.on("mousemove.brush",d).on("mouseup.brush",m),k.interrupt().selectAll("*").interrupt(),C)L[0]=s[0]-L[0],L[1]=h[0]-L[1];else if(N){var T=+/w$/.test(N),R=+/^n/.test(N);x=[s[1-T]-L[0],h[1-R]-L[1]],L[0]=s[T],L[1]=h[R]}else ao.event.altKey&&(M=L.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),ao.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),d()}var o,a,l=N(n,"brushstart","brush","brushend"),c=null,f=null,s=[0,0],h=[0,0],p=!0,g=!0,v=Bl[0];return n.event=function(n){n.each(function(){var n=l.of(this,arguments),t={x:s,y:h,i:o,j:a},e=this.__chart__||t;this.__chart__=t,Hl?ao.select(this).transition().each("start.brush",function(){o=e.i,a=e.j,s=e.x,h=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=xr(s,t.x),r=xr(h,t.y);return o=a=null,function(i){s=t.x=e(i),h=t.y=r(i),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=t.i,a=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,v=Bl[!c<<1|!f],n):c},n.y=function(t){return arguments.length?(f=t,v=Bl[!c<<1|!f],n):f},n.clamp=function(t){return arguments.length?(c&&f?(p=!!t[0],g=!!t[1]):c?p=!!t:f&&(g=!!t),n):c&&f?[p,g]:c?p:f?g:null},n.extent=function(t){var e,r,i,u,l;return arguments.length?(c&&(e=t[0],r=t[1],f&&(e=e[0],r=r[0]),o=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(l=e,e=r,r=l),e==s[0]&&r==s[1]||(s=[e,r])),f&&(i=t[0],u=t[1],c&&(i=i[1],u=u[1]),a=[i,u],f.invert&&(i=f(i),u=f(u)),i>u&&(l=i,i=u,u=l),i==h[0]&&u==h[1]||(h=[i,u])),n):(c&&(o?(e=o[0],r=o[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(l=e,e=r,r=l))),f&&(a?(i=a[0],u=a[1]):(i=h[0],u=h[1],f.invert&&(i=f.invert(i),u=f.invert(u)),i>u&&(l=i,i=u,u=l))),c&&f?[[e,i],[r,u]]:c?[e,r]:f&&[i,u])},n.clear=function(){return n.empty()||(s=[0,0],h=[0,0],o=a=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!f&&h[0]==h[1]},ao.rebind(n,l,"on")};var $l={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Bl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Wl=ga.format=xa.timeFormat,Jl=Wl.utc,Gl=Jl("%Y-%m-%dT%H:%M:%S.%LZ");Wl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?eo:Gl,eo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},eo.toString=Gl.toString,ga.second=On(function(n){return new va(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ga.seconds=ga.second.range,ga.seconds.utc=ga.second.utc.range,ga.minute=On(function(n){return new va(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ga.minutes=ga.minute.range,ga.minutes.utc=ga.minute.utc.range,ga.hour=On(function(n){var t=n.getTimezoneOffset()/60;return new va(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ga.hours=ga.hour.range,ga.hours.utc=ga.hour.utc.range,ga.month=On(function(n){return n=ga.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ga.months=ga.month.range,ga.months.utc=ga.month.utc.range;var Kl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ql=[[ga.second,1],[ga.second,5],[ga.second,15],[ga.second,30],[ga.minute,1],[ga.minute,5],[ga.minute,15],[ga.minute,30],[ga.hour,1],[ga.hour,3],[ga.hour,6],[ga.hour,12],[ga.day,1],[ga.day,2],[ga.week,1],[ga.month,1],[ga.month,3],[ga.year,1]],nc=Wl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",zt]]),tc={range:function(n,t,e){return ao.range(Math.ceil(n/e)*e,+t,e).map(io)},floor:m,ceil:m};Ql.year=ga.year,ga.scale=function(){return ro(ao.scale.linear(),Ql,nc)};var ec=Ql.map(function(n){return[n[0].utc,n[1]]}),rc=Jl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",zt]]);ec.year=ga.year.utc,ga.scale.utc=function(){return ro(ao.scale.linear(),ec,rc)},ao.text=An(function(n){return n.responseText}),ao.json=function(n,t){return Cn(n,"application/json",uo,t)},ao.html=function(n,t){return Cn(n,"text/html",oo,t)},ao.xml=An(function(n){return n.responseXML}),"function"==typeof define&&define.amd?(this.d3=ao,define(ao)):"object"==typeof module&&module.exports?module.exports=ao:this.d3=ao}(); + +//aigner: HERE IS WHERE IT ALL STARTS!!! +},{}],2:[function(require,module,exports){ +var d3 = require('d3'); + +var PULSE_DURATION = 700; +var SUB_ANIM_DELAY = 200; +var ACTIVE_COLOR = d3.rgb("seagreen"); + +function Animation(xdsms, rootId, delay) { + this.rootId = rootId; + if (typeof (rootId) === 'undefined') { + this.rootId = 'root'; + } + this.root = xdsms[this.rootId]; + this.xdsms = xdsms; + this.duration = PULSE_DURATION; + this.initialDelay = delay || 0; +} + +Animation.prototype._pulse = function(delay, toBeSelected, option) { + var sel = d3.select("svg." + this.rootId) + .selectAll(toBeSelected) + .transition().delay(delay); + if (option !== "out") { + sel = sel.transition().duration(200) + .style('stroke-width', '8px') + .style('stroke', ACTIVE_COLOR) + .style('fill', function(d) { + if (d.id) { + return ACTIVE_COLOR.brighter(); + }}); + } + if (option !== "in") { + sel.transition().duration(3 * PULSE_DURATION) + .style('stroke-width', null) + .style('stroke', null) + .style('fill', null); + } +}; + +Animation.prototype._animate = function() { + var self = this; + var delay = this.initialDelay; + var animDelay = SUB_ANIM_DELAY; + var graph = self.xdsms[self.rootId].graph; + + var title = d3.select("svg." + self.rootId).select("g.title"); + title.select("text").transition().delay(delay).style("fill", ACTIVE_COLOR); + d3.select("svg." + self.rootId).select("rect.border") + .transition().delay(delay) + .style("stroke-width", '5px').duration(200) + .transition().duration(1000) + .style("stroke", 'black').style("stroke-width", '0px'); + + graph.nodesByStep.forEach(function(nodesAtStep, n, nodesByStep) { + var offsets = []; + nodesAtStep.forEach(function(nodeId) { + var elapsed = delay + n * PULSE_DURATION; + if (n > 0) { + nodesByStep[n-1].forEach(function(prevNodeId) { // eslint-disable-line space-infix-ops + var from = graph.idxOf(prevNodeId); + var to = graph.idxOf(nodeId); + self._pulse(elapsed,"polyline.link_" + from + "_" + to); + }); + } + //aigner: Look for existing xdsms/Sub-xdsms. Only show those, which are expanded + var gnode = "g." + nodeId; + var nodeSel = d3.select("svg." + self.rootId).select(gnode); + var scnId = graph.getNode(nodeId).getScenarioId(); + if (nodeSel.classed("mdo") && self.xdsms[scnId]) + { + self._pulse(elapsed, gnode + " > rect", "in"); + var anim = new Animation(self.xdsms, scnId, elapsed + animDelay); + var offset = anim._animate(); + offsets.push(offset); + self._pulse(offset + elapsed + animDelay, gnode + " > rect", "out"); + } + else + { + self._pulse(elapsed, gnode + " > rect"); + } + }, this); + + if (offsets.length > 0) { + delay += Math.max.apply(null, offsets); + } + delay += animDelay; + }, this); + + title.select("text").transition() + .delay(graph.nodesByStep.length * PULSE_DURATION + delay) + .style("fill", null); + + return graph.nodesByStep.length * PULSE_DURATION; +}; + +Animation.prototype.run = function() { + this._animate(); +}; + +module.exports = Animation; + +}, +{"d3":1}],3:[function(require,module,exports){ +var UID = "_U_"; +var MULTI_TYPE = "_multi"; + +//aigner: Node() constructor additionally gets the "xdsm" +function Node(xdsm, id, name, type, metadata) { + + var splitUndef = name.split("undefined: ") + if (splitUndef.length>1) {name=splitUndef[1]} + else {name=splitUndef[0]} + + if (typeof (name) === 'undefined') { + name = id; + } + if (typeof (type) === 'undefined') { + type = 'analysis'; + } + this.xdsm = xdsm; + this.id = id; + this.name = name; + this.metadata = metadata; + this.isMulti = (type.search(/_multi$/) >= 0); + this.type = this.isMulti ? + type.substr(0, type.length - MULTI_TYPE.length) : type; +} + +Node.prototype.isMdo = function() { + return this.type === "mdo"; +}; + +Node.prototype.getScenarioId = function() { + if (this.isMdo()) { + var idxscn = this.name.indexOf("_scn-"); + if (idxscn === -1) { + console.log("Warning: MDO Scenario not found. " + + "Bad type or name for node: " + JSON.stringify(this)); + return null; + } + return this.name.substr(idxscn + 1); + } + return null; +}; + +function Edge(from, to, name, row, col, isMulti) { + this.id = "link_" + from + "_" + to; + this.name = name; + this.row = row; + this.col = col; + this.iotype = row < col ? "in" : "out"; + this.io = { + fromU: (from === UID), + toU: (to === UID) + }; + this.from = from; + this.to = to; + this.isMulti = isMulti; +} + +Edge.prototype.isIO = function() { + return this.io.fromU || this.io.toU; +}; + +//aigner: Function creates the xdsm graph +function Graph(mdo, refname) { + this.nodes = [new Node(UID, UID, UID, "user",[])]; + this.edges = []; + this.chains = []; + this.refname = refname || ""; + + //aigner: New numbering due to new workflow definition in KADMOS (Old stuff commented out) + var numbering = Graph.new_number(mdo.workflow); + //var numbering = Graph.number(mdo.workflow); + var numPrefixes = numbering.toNum; + this.nodesByStep = numbering.toNode; + + mdo.nodes.forEach(function(item) { + name = document.createElement("TEXTAREA"); + name = numPrefixes[item.id] + ": " + item.name; + this.nodes.push(new Node(item.xdsm, item.id, name, item.type,item.metadata)); + }, this); + + this.ids = this.nodes.map(function(elt) { + return elt.id; + }); + + mdo.edges.forEach(function(item) { + var idA = this.idxOf(item.from); + var idB = this.idxOf(item.to); + + var isMulti = this.nodes[idA].isMulti || this.nodes[idB].isMulti; + this.edges.push(new Edge(item.from, item.to, item.name, idA, idB, isMulti)); + }, this); + + + //aigner: new chains with new workflow definition for KADMOS (Old stuff commented out) + this.chains = Graph.new_expand(mdo.workflow,mdo.nodes); + // var echain = Graph.expand(mdo.workflow); + // echain.forEach(function(leafChain) { + // if (leafChain.length < 2) { + // throw new Error("Bad process chain (" + leafChain.length + "elt)"); + // } else { + // this.chains.push([]); + // var ids = this.nodes.map(function(elt) { + // return elt.id; + // }); + // leafChain.forEach(function(item, j) { + // if (j !== 0) { + // var idA = ids.indexOf(leafChain[j - 1]); + // if (idA < 0) { + // throw new Error("Process chain element (" + + // leafChain[j - 1] + ") not found"); + // } + // var idB = ids.indexOf(leafChain[j]); + // if (idB < 0) { + // throw new Error("Process chain element (" + + // leafChain[j] + ") not found"); + // } + // if (idA !== idB) { + // this.chains[this.chains.length - 1].push([idA, idB]); + // } + // } + // }, this); + // } + // }, this); + + +} + +Graph.prototype.idxOf = function(nodeId) { + return this.ids.indexOf(nodeId); +}; +Graph.prototype.getNode = function(nodeId) { + return this.nodes[this.ids.indexOf(nodeId)]; +}; + +function _expand(workflow) { + var ret = []; + var prev; + workflow.forEach(function(item) { + if (item instanceof Array) { + if (item[0].hasOwnProperty('parallel')) { + if (prev) { + ret = ret.slice(0, ret.length - 1).concat(item[0].parallel.map( + function(elt) { + return [prev].concat(_expand([elt]), prev); + })); + } else { + throw new Error("Bad workflow structure : " + + "cannot parallel loop without previous starting point."); + } + } else if (prev) { + ret = ret.concat(_expand(item), prev); + } else { + ret = ret.concat(_expand(item)); + } + prev = ret[ret.length - 1]; + } else if (item.hasOwnProperty('parallel')) { + if (prev) { + ret = ret.slice(0, ret.length - 1).concat( + item.parallel.map(function(elt) { + return [prev].concat(_expand([elt])); + })); + } else { + ret = ret.concat(item.parallel.map( + function(elt) { + return _expand([elt]); + })); + } + prev = undefined; + } else { + var i = ret.length - 1; + var flagParallel = false; + while (i >= 0 && (ret[i] instanceof Array)) { + ret[i] = ret[i].concat(item); + i -= 1; + flagParallel = true; + } + if (!flagParallel) { + ret.push(item); + } + prev = item; + } + }, this); + return ret; +} + +Graph.expand = function(item) { + var expanded = _expand(item); + var result = []; + var current = []; + expanded.forEach(function(elt) { + if (elt instanceof Array) { + if (current.length > 0) { + current.push(elt[0]); + result.push(current); + current = []; + } + result.push(elt); + } else { + if (result.length > 0 && current.length === 0) { + var lastChain = result[result.length - 1]; + var lastElt = lastChain[lastChain.length - 1]; + current.push(lastElt); + } + current.push(elt); + } + }, this); + if (current.length > 0) { + result.push(current); + } + return result; +}; + +Graph.new_expand = function(workflow,nodes) { + var ids = nodes.map(function(elt) { + return elt.id; + }); + var result_tmp = []; + for (var i=0; i < workflow.length; i++) + { + var stepNumber = workflow[i].step_number + var edges = workflow[i].edges; + for (var j=0; j < edges.length; j++) + { + var fromNode = edges[j][0]; + var toNode = edges[j][1]; + var fromId = ids.indexOf(fromNode)+1; + var toId = ids.indexOf(toNode)+1; + result_tmp.push([fromId,toId]); + } + } + var result = []; + result.push(result_tmp) + return result; +}; + +Graph.number = function(workflow, num) { + num = (typeof num === 'undefined') ? 0 : num; + var toNum = {}; + var toNode = []; + + function setStep(step, nodeId) { + if (step in toNode) { + toNode[step].push(nodeId); + } else { + toNode[step] = [nodeId]; + } + } + + function setNum(nodeId, beg, end) { + if (end === undefined) { + num = String(beg); + setStep(beg, nodeId); + } else { + num = end + "-" + beg; + setStep(end, nodeId); + } + if (nodeId in toNum) { + toNum[nodeId] += "," + num; + } else { + toNum[nodeId] = num; + } + } + + function _number(wks, num) { + var ret = 0; + if (wks instanceof Array) { + if (wks.length === 0) { + ret = num; + } else if (wks.length === 1) { + ret = _number(wks[0], num); + } else { + var head = wks[0]; + var tail = wks.slice(1); + var beg = _number(head, num); + if (tail[0] instanceof Array) { + var end = _number(tail[0], beg); + setNum(head, beg, end); + beg = end + 1; + tail.shift(); + } + ret = _number(tail, beg); + } + } else if ((wks instanceof Object) && 'parallel' in wks) { + var nums = wks.parallel.map(function(branch) { + return _number(branch, num); + }); + ret = Math.max.apply(null, nums); + } else { + setNum(wks, num); + ret = num + 1; + } + return ret; + } + + _number(workflow, num); + // console.log('toNodes=', JSON.stringify(toNode)); + // console.log('toNum=',JSON.stringify(toNum)); + return {toNum: toNum, toNode: toNode}; +}; + +//aigner: New numbering for the workflow nodes +Graph.new_number = function(workflow, num) { + num = (typeof num === 'undefined') ? 0 : num; + var toNum = {}; + var toNode = []; + + for (var i=0; i < workflow.length; i++) + { + //aigner: Number the nodes with respect to the defined process steps + //--> toNum + //########################################## + for (var j=0; j < workflow[i].process_step_blocks.length; j++) + { + var proc_id_to = workflow[i].process_step_blocks[j]; + if (proc_id_to) + { + + if (!toNum[proc_id_to]) + { + toNum[proc_id_to] = workflow[i].step_number; + } + else + { + toNum[proc_id_to] += "," + workflow[i].step_number; + } + } + } + for (var j=0; j < workflow[i].converger_step_blocks.length; j++) + { + var conv_id_to = workflow[i].converger_step_blocks[j]; + if (conv_id_to) + { + toNum[conv_id_to] += "," + workflow[i].step_number; + var stepID = parseInt(toNum[conv_id_to].split(',')[0])+1; + //aigner: CAUTION --> hard coded exception for coordinator + if (conv_id_to!="id_Coordinator"){toNum[conv_id_to] += "-" + stepID;} + } + } + //########################################## + //--> toNode + //########################################## + var stepNumber = workflow[i].step_number + var nodeId; + if (stepNumber==0){nodeId = [workflow[i].process_step_blocks[0]];} + else + { + var nodeIds = []; + for (var j=0; j<workflow[i].edges.length ;j++) + { + nodeIds.push(workflow[i].edges[j][1]); + } + nodeId = nodeIds; + } + toNode[stepNumber] = nodeId; + //########################################## + } + return {toNum: toNum, toNode: toNode}; +}; + +module.exports = Graph; + +},{}],4:[function(require,module,exports){ +function Labelizer() {} + +Labelizer.strParse = function(str) { + if (str === "") { + return [{base: '', sub: undefined, sup: undefined}]; + } + + //console.log("STR-->") + //console.log(str); + //aigner: Space sign added + var lstr = str.split(','); + var underscores = /_/g; + var rg = /([0-9\-]+: )?([A-Za-z0-9\{\}\(\)\[\]\-\.]+)(_[A-Za-z0-9\-\._]+)?(\^.+)?/; + + var res = lstr.map(function(s) { + var base; + var sub; + var sup; + + //aigner: Modification. xpath is split after each "/" + var s_split = s.split("/"); + s = s_split[s_split.length-1]; + + if ((s.match(underscores) || []).length > 1) { + var mu = s.match(/(.+)^(.+)/); + if (mu) { + return {base: mu[1], sub: undefined, sup: mu[2]}; + } + return {base: s, sub: undefined, sup: undefined}; + } + var m = s.match(rg); + if (m) { + base = (m[1] ? m[1] : "") + m[2]; + if (m[3]) { + sub = m[3].substring(1); + } + if (m[4]) { + sup = m[4].substring(1); + } + } else { + throw new Error("Labelizer.strParse: Can not parse '" + s + "'"); + } + return {base: base, sub: sub, sup: sup}; + }, this); + + return res; +}; + +Labelizer.labelize = function() { + var ellipsis = 0; + + //aigner: createLabel modified. Hide variable names if too long. + function createLabel(selection) + { + selection.each(function(d) { + //console.log("Labelize-->"); + //console.log(d); + var tokens = Labelizer.strParse(d.name); + var text = selection.append("text"); + + + + + var className = selection._groups[0][0].getAttribute("class"); + + if (className.includes("node")) + { + tokens.every(function(token, i, ary) + { + var offsetSub = 0; + var offsetSup = 0; + //aigner: If the node is too big, it will not be shown at first, only when hovering + if (ellipsis < 1 || i < 15) + { + text.append("tspan").text(token.base); + if (token.sub) + { + offsetSub = 10; + text.append("tspan") + .attr("class", "sub") + .attr("dy", offsetSub) + .text(token.sub); + } + if (token.sup) { + offsetSup = -10; + text.append("tspan") + .attr("class", "sup") + .attr("dx", -5) + .attr("dy", -offsetSub + offsetSup) + .text(token.sup); + offsetSub = 0; + } + } else + { + text.append("tspan") + .attr("dy", -offsetSub - offsetSup) + .text("..."); + selection.classed("ellipsized", true); + return false; + } + if (i < ary.length - 1) + { + text.append("tspan") + .attr("dy", -offsetSub - offsetSup) + .text(", "); + } + return true; + }, this); + } + else if(className.includes("edge")) + { + var offsetSub = 0; + var offsetSup = 0; + //aigner: If there are more than 5 variables in an edge, they are not shown! + tokens.every(function(token, i, ary) + { + if(d.io.fromU || d.from =="id_Coordinator"){text_tmp = "inp."} + else if(d.io.toU || d.to=="id_Coordinator"){text_tmp = "outp."} + else{text_tmp = "conn."} + //if (ary.length>1){text_tmp = text_tmp+"s"}; + text.append("tspan") + .attr("dy", -offsetSub - offsetSup) + .text(ary.length + " " + text_tmp); + + selection.classed("ellipsized", true); + return false; + }, this); + } + }); + } + + createLabel.ellipsis = function(value) { + if (!arguments.length) { + return ellipsis; + } + ellipsis = value; + return createLabel; + }; + + return createLabel; +}; + +Labelizer.tooltipize = function() { + var text = ""; + + function createTooltip(selection) { + var tokens = Labelizer.strParse(text); + var html = []; + tokens.forEach(function(token) { + var item = token.base; + if (token.sub) { + item += "<sub>" + token.sub + "</sub>"; + } + if (token.sup) { + item += "<sup>" + token.sup + "</sup>"; + } + html.push(item); + }, this); + selection.html(html.join(", ")); + } + + createTooltip.text = function(value) { + if (!arguments.length) { + return text; + } + text = value; + return createTooltip; + }; + + return createTooltip; +}; + +module.exports = Labelizer; + +},{}],5:[function(require,module,exports){ +var d3 = require('d3'); +var Labelizer = require('./labelizer.js'); + +var WIDTH = 1000; +var HEIGHT = 500; +var X_ORIG = 70; +var Y_ORIG = 20; +var PADDING = 20; +var CELL_W = 250; +var CELL_H = 75; +var MULTI_OFFSET = 3; + +function Cell(x, y, width, height) { + this.x = x; + this.y = y; + this.width = width; + this.height = height; +} + +function Xdsm(graph, svgid, tooltip) { + this.graph = graph; + this.tooltip = tooltip; + this.svg = d3.select(".xdsm") + .append("svg") + .attr("width", WIDTH) + .attr("height", HEIGHT) + .attr("class", svgid); + + this.grid = []; + this.nodes = []; + this.edges = []; +} + +Xdsm.prototype.draw = function(graphName) { + var self = this; + + if (self.graph.refname) { + var ref = self.svg.append('g').classed('title', true); + + var text_tmp = self.graph.refname.replace(/\w/g, function(l){ return l.toUpperCase() }) + + ref.append("text").text(graphName); + var bbox = ref.nodes()[0].getBBox(); + ref.insert("rect", "text") + .attr('x', bbox.x) + .attr('y', bbox.y) + .attr('width', bbox.width) + .attr('height', bbox.height); + + ref.attr('transform', + 'translate(' + X_ORIG + ',' + (Y_ORIG + bbox.height-10) + ')'); + } + + self.nodes = self._createTextGroup("node"); + self.edges = self._createTextGroup("edge"); + + // Workflow + self._createWorkflow(); + + // Layout texts + self._layoutText(self.nodes); + self._layoutText(self.edges); + + // Rectangles for nodes + self.nodes.each(function(d, i) { + var that = d3.select(this); + that.call(self._customRect.bind(self), d, i, 0); + if (d.isMulti) { + that.call(self._customRect.bind(self), d, i, 1 * Number(MULTI_OFFSET)); + that.call(self._customRect.bind(self), d, i, 2 * Number(MULTI_OFFSET)); + } + }); + + // Trapezium for edges + self.edges.each(function(d, i) { + var that = d3.select(this); + that.call(self._customTrapz.bind(self), d, i, 0); + if (d.isMulti) { + that.call(self._customTrapz.bind(self), d, i, 1 * Number(MULTI_OFFSET)); + that.call(self._customTrapz.bind(self), d, i, 2 * Number(MULTI_OFFSET)); + } + }); + + // Dataflow + self._createDataflow(self.edges); + + //aigner: set svg size + var w = CELL_W * (self.graph.nodes.length + 1); + var h = CELL_H * (self.graph.nodes.length + 1); + self.svg.attr("width", w).attr("height", h); + + var bordercolor = 'black'; + self.svg.append("rect") + .classed("border", true) + .attr("x", 4) + .attr("y", 4) + .attr("height", h - 4) + .attr("width", w - 4) + .style("stroke", bordercolor) + .style("fill", "none") + .style("stroke-width", 0); + + //aigner: PlayButton for animation + var playButton = self.svg.append("g").attr("class", "playButton") + .attr("transform", "translate("+ 10 +","+ 10 +")"); + playButton + .append("rect") + .attr("class", "playButton_rect") + .attr("width", 50) + .attr("height", 50) + .attr("rx", 4) + .style("fill", "#666666"); + playButton + .append("path") + .attr("class", "playButton_triangle") + .attr("d", "M15 10 L15 40 L35 25 Z") + .style("fill", "white"); + //aigner: Hide playbutton if there is no workflow process + if(self.graph.nodesByStep.length<1) + { + playButton.attr("visibility","hidden"); + } +}; + +Xdsm.prototype._createTextGroup = function(kind) { + var self = this; + + var group = self.svg.append('g').attr("class", kind + "s"); + + var textGroups = + group.selectAll("." + kind) + .data(this.graph[kind + "s"]) + .enter() + .append("g").attr("class", function(d) { + var klass = kind === "node" ? d.type : "dataInter"; + if (klass === "dataInter" && (d.isIO()||d.from=="id_Coordinator"||d.to=="id_Coordinator")) { + klass = "dataIO"; + } + return d.id + " " + kind + " " + klass; + }).each(function() { + var labelize = Labelizer.labelize().ellipsis(5); + d3.select(this).call(labelize); + }); + + d3.selectAll(".ellipsized") + .on("mouseover", function(d) { + d3.select(this).style("cursor", "pointer") + self.tooltip.transition().duration(200).style("opacity", 0.9); + var pipeData = d.name.split(","); + var pipeVariables=[]; + for (var i=0; i<pipeData.length; i++) + { + if (pipeData[i].includes("/")) + { + var splitPipeData = pipeData[i].split("/"); + pipeVariables.push(splitPipeData[splitPipeData.length-1]); + } + } + + + var pruned_pipeVars = {}; + var tooltipText=""; + pipeVariables.forEach(function(x) { pruned_pipeVars[x] = (pruned_pipeVars[x] || 0)+1; }); + for(var keyName in pruned_pipeVars) { + var textTmp; + var value = pruned_pipeVars[keyName] + if (value>1){textTmp = String(keyName+"("+value+")")} + else{textTmp=String(keyName)} + if (tooltipText==""){tooltipText+=textTmp} + else{tooltipText+=","+textTmp} + } + + var tooltipize = Labelizer.tooltipize().text(tooltipText); + self.tooltip.call(tooltipize) + .style("width", "200px") + .style("left", (d3.event.pageX) + "px") + .style("top", (d3.event.pageY - 28) + "px"); + }) + .on("mouseout", function() { + self.tooltip.transition().duration(500).style("opacity", 0); + }); + + return textGroups; +}; + +Xdsm.prototype._createWorkflow = function() { + // console.log(JSON.stringify(this.graph.chains)); + var workflow = this.svg.insert("g", ":first-child") + .attr("class", "workflow"); + workflow.selectAll("g") + .data(this.graph.chains) + .enter() + .insert('g').attr("class", "workflow-chain") + .selectAll('polyline') + .data(function(d) { return d; }) // eslint-disable-line brace-style + .enter() + .append("polyline") + .attr("class", function(d) { + return "link_" + d[0] + "_" + d[1]; + }) + .attr("points", function(d) { + var w = CELL_W * Math.abs(d[0] - d[1]); + var h = CELL_H * Math.abs(d[0] - d[1]); + var points = []; + if (d[0] < d[1]) { + if (d[0] !== 0) { + points.push((-w) + ",0"); + } + points.push("0,0"); + if (d[1] !== 0) { + points.push("0," + h); + } + } else { + if (d[0] !== 0) { + points.push(w + ",0"); + } + points.push("0,0"); + if (d[1] !== 0) { + points.push("0," + (-h)); + } + } + return points.join(" "); + }) + .attr("transform", function(d) { + var max = Math.max(d[0], d[1]); + var min = Math.min(d[0], d[1]); + var w; + var h; + if (d[0] < d[1]) { + w = CELL_W * max + X_ORIG; + h = CELL_H * min + Y_ORIG; + } else { + w = CELL_W * min + X_ORIG; + h = CELL_H * max + Y_ORIG; + } + return "translate(" + (X_ORIG + w) + "," + (Y_ORIG + h) + ")"; + }); +}; + +Xdsm.prototype._createDataflow = function(edges) { + var dataflow = this.svg.insert("g", ":first-child") + .attr("class", "dataflow"); + + edges.each(function(d, i) { + dataflow.insert("polyline", ":first-child") + .attr("points", function() { + var w = CELL_W * Math.abs(d.col - d.row); + var h = CELL_H * Math.abs(d.col - d.row); + var points = []; + if (d.iotype === "in") { + if (!d.io.fromU) { + points.push((-w) + ",0"); + } + points.push("0,0"); + if (!d.io.toU) { + points.push("0," + h); + } + } else { + if (!d.io.fromU) { + points.push(w + ",0"); + } + points.push("0,0"); + if (!d.io.toU) { + points.push("0," + (-h)); + } + } + return points.join(" "); + }).attr("transform", function() { + var m = (d.col === undefined) ? i : d.col; + var n = (d.row === undefined) ? i : d.row; + var w = CELL_W * m + X_ORIG; + var h = CELL_H * n + Y_ORIG; + return "translate(" + (X_ORIG + w) + "," + (Y_ORIG + h) + ")"; + }); + }); +}; + +Xdsm.prototype._layoutText = function(items) { + var grid = this.grid; + items.each(function(d, i) { + var item = d3.select(this); + if (grid[i] === undefined) { + grid[i] = new Array(items.length); + } + item.select("text").each(function(d, j) { + var that = d3.select(this); + var data = item.data()[0]; + var m = (data.row === undefined) ? i : data.row; + var n = (data.col === undefined) ? i : data.col; + var bbox = that.nodes()[j].getBBox(); + grid[m][n] = new Cell(-bbox.width / 2, 0, bbox.width, bbox.height); + that.attr("x", function() { + return grid[m][n].x; + }).attr("y", function() { + return grid[m][n].y; + }).attr("width", function() { + return grid[m][n].width; + }).attr("height", function() { + return grid[m][n].height; + }); + }); + }); + + items.attr("transform", function(d, i) { + var m = (d.col === undefined) ? i : d.col; + var n = (d.row === undefined) ? i : d.row; + var w = CELL_W * m + X_ORIG; + var h = CELL_H * n + Y_ORIG; + return "translate(" + (X_ORIG + w) + "," + (Y_ORIG + h) + ")"; + }); +}; + +Xdsm.prototype._customRect = function(node, d, i, offset) { + var grid = this.grid; + node.insert("rect", ":first-child").attr("x", function() { + return grid[i][i].x + offset - PADDING; + }).attr("y", function() { + return -grid[i][i].height * 2 / 3 - PADDING - offset; + }).attr("width", function() { + return grid[i][i].width + (PADDING * 2); + }).attr("height", function() { + return grid[i][i].height + (PADDING * 2); + }).attr("rx", function() { + var rounded = d.type === 'optimization' || + d.type === 'mda' || + d.type === 'doe' || + d.type === 'converger'; + return rounded ? (grid[i][i].height + (PADDING * 2)) / 2 : 0; + }).attr("ry", function() { + var rounded = d.type === 'optimization' || + d.type === 'mda' || + d.type === 'doe' || + d.type === 'converger'; + return rounded ? (grid[i][i].height + (PADDING * 2)) / 2 : 0; + }); +}; + +Xdsm.prototype._customTrapz = function(edge, d, i, offset) { + var grid = this.grid; + edge.insert("polygon", ":first-child").attr("points", function(d) { + var pad = 5; + var w = grid[d.row][d.col].width; + var h = grid[d.row][d.col].height; + var topleft = (-pad - w / 2 + offset) + ", " + + (-pad - h * 2 / 3 - offset); + var topright = (w / 2 + pad + offset + 5) + ", " + + (-pad - h * 2 / 3 - offset); + var botright = (w / 2 + pad + offset - 5 + 5) + ", " + + (pad + h / 3 - offset); + var botleft = (-pad - w / 2 + offset - 5) + ", " + + (pad + h / 3 - offset); + var tpz = [topleft, topright, botright, botleft].join(" "); + return tpz; + }); +}; + +module.exports = Xdsm; + +}, +{"./labelizer.js":4,"d3":1}],6:[function(require,module,exports){ +/* + * XDSMjs + * Copyright 2016 Rémi Lafage + */ +"use strict"; + +var d3 = require('d3'); + +//d3-context-menu for right-click-option +d3.contextMenu = function (menu, openCallback) { + + // create the div element that will hold the context menu + d3.selectAll('.d3-context-menu').data([1]) + .enter() + .append('div') + .attr('class', 'd3-context-menu'); + + // close menu + d3.select('body').on('click.d3-context-menu', function() { + d3.select('.d3-context-menu').style('display', 'none'); + }); + + // this gets executed when a contextmenu event occurs + return function(data, index) { + var elm = this; + + d3.selectAll('.d3-context-menu').html(''); + var list = d3.selectAll('.d3-context-menu').append('ul'); + list.selectAll('li').data(menu).enter() + .append('li') + .html(function(d) { + return d.title; + }) + .on('mousedown', function(d, i) { + d.onMouseDown(elm, data, index); + }) + .on('mouseup', function(d, i) { + d.onMouseUp(elm, data, index); + d3.select('.d3-context-menu').style('display', 'none'); + }) + .on('mouseenter',function(d,i){ + d.onMouseOver(elm,data,index); + if(d.childrenItems.length>0 ) + { + d3.select(this).selectAll("ul").remove(); + d3.select(this) + .append("ul") + .selectAll("li") + .data(d.childrenItems) + .enter().append("li") + .text(function(d) { return d.title; }) + .on("mouseenter", function(d,i){ + d.onMouseOver(elm,data,index); + }) + .on('click', function(d, i) { + d.onMouseClick(elm, d, index); + }) + .on('mouseleave',function(d,i){ + + }); + } + else + return false; + }) + .on('mouseleave',function(d,i){ + d3.select(this).selectAll("ul").style('display', 'none') + }); + + + + // the openCallback allows an action to fire before the menu is displayed + // an example usage would be closing a tooltip + if (openCallback) openCallback(data, index); + + // display context menu + d3.select('.d3-context-menu') + .style('left', (d3.event.pageX - 2) + 'px') + .style('top', (d3.event.pageY - 2) + 'px') + .style('display', 'block'); + + d3.event.preventDefault(); + }; +}; + +function makeKadmosMenu(theGraphs,currentView,currentID) +{ + var imageWidth = 200; + var imageHeight = 150; + var padding = 10; + var rectHeight = 70; + var imgSize = 40; + var visPackDiv = d3.select("body").append("div").attr("class","vispackDiv"); + var visPackSvg = visPackDiv.append("svg") + .attr("class","visPackSvg") + .attr("width",imageWidth*5+40) + .attr("height",imageHeight+40) + .attr("transform", "translate(" + + String(10) + "," + String(10) + ")") + + + var defs = visPackSvg.append("defs"); + var filter = defs.append("filter") + .attr("id", "drop-shadow") + .attr("height", "130%") + filter.append("feColorMatrix") + .attr("values", "0.2 0 0 0 0 0 0.2 0 0 0 0 0 0.2 0 0 0 0 0 1 0") + .attr("result", "matrixOut") + filter.append("feGaussianBlur") + .attr("in", "matrixOut") + .attr("stdDeviation", 5) + .attr("result", "blur") + filter.append("feOffset") + .attr("in", "blur") + .attr("dx", 5) + .attr("dy", 5) + .attr("result", "offsetBlur") + var feMerge = filter.append("feMerge"); + feMerge.append("feMergeNode") + .attr("in", "offsetBlur") + feMerge.append("feMergeNode") + .attr("in", "SourceGraphic"); + + var visPackFrame = visPackSvg.append("rect") + .attr("width",imageWidth*5+12) + .attr("height",imageHeight) + .attr("fill", "white") + .style("filter", "url(#drop-shadow)") + + var imgs = visPackSvg.selectAll("image").data([0]); + imgs.enter() + .append("svg:image") + .attr("x",5) + .attr("xlink:href", "file:../supportFiles/include/KADMOS_VisualizationPack_Icon.png") + .attr("width", imageWidth) + .attr("height", imageHeight) + .attr("position", "relative") + + var offset_tmp = 860; + visPackSvg.append("text") + .attr("transform", "translate(" + + String(210) + "," + String(35) + ")") + .attr("font-family","Arial") + .attr("font-size","32pt") + .attr("fill","#666666") + .text("KADMOS Visualization Package") + + + var acknGroup = visPackSvg.append("g").attr("class","acknGroup").classed("acknGroup",true) + var acknRect = acknGroup.append("rect").classed("ackn",true) + .attr("height", 30) + .attr("transform", "translate(" + + String(offset_tmp) + "," + String(2) + ")") + acknGroup.append("text") + .attr("transform", "translate(" + + String(offset_tmp+padding/2) + "," + String(20) + ")") + .attr("text-anchor", "front") + .attr("font-family","Arial") + .attr("font-size","12pt") + .attr("fill","white") + .text("Acknowledgements") + acknRect = acknRect.attr("width", function(d) {return this.parentNode.getBBox().width+padding;}) + acknRect = acknRect.classed("VisPackMenu",true) + acknGroup = acknGroup.on("mouseover", function(){d3.select(this).style("cursor", "pointer")}) + .on("click",function(){window.open("../supportFiles/include/acknowledgements.html", '_blank');}) + + var acknGroup2 = visPackSvg.append("g").attr("class","acknGroup2") + .attr("transform", "translate(" + + String(offset_tmp) + "," + String(40+padding) + ")") + acknGroup2.append("text") + .classed("acknText",true) + .attr("dy", "0em") + .text("Copyright:") + acknGroup2.append("text") + .classed("acknText",true) + .attr("dy", "1.5em") + .text("B. Aigner") + var imgs = visPackSvg.selectAll("img").data([0]); + imgs.enter() + .append("svg:image") + .attr("xlink:href", "file:../supportFiles/include/RWTH_Logo.png") + .attr("x", String(offset_tmp+85)) + .attr("y", "3em") + .attr("width", "60") + .attr("height", "40"); + acknGroup2.append("text") + .classed("acknText",true) + .attr("dy", "3.2em") + .text("I. van Gent") + var imgs = visPackSvg.selectAll("img").data([0]); + imgs.enter() + .append("svg:image") + .attr("xlink:href", "file:../supportFiles/include/TUDelft_Logo.png") + .attr("x", String(offset_tmp+85)) + .attr("y", "4.7em") + .attr("width", "60") + .attr("height", "40"); + + + var ul = d3.select("body").append("div").attr("class","newDiv").append("ul") + function makeViewButtons(graphs_tmp,aName, visFile) + { + var dropdown1 = ul.append("li").on("mouseover", function(){d3.select(this).style("cursor", "default")}) + dropdown1.append("a").text(aName) + dropdown1.append("img").attr("src","../supportFiles/include/AGILE_Icon.png") + .attr("align","left") + .style("margin-left","6px") + .style("margin-right","0px") + .style("margin-top","6px") + .style("margin-bottom","6px") + .attr("height","42") + .attr("width","42") + var links = dropdown1.append("ul"); + for (var i=0; i < graphs_tmp.length; i++) + { + makeDropDown(graphs_tmp[i],visFile,links,aName) + } + } + function makeDropDown(theData,file,theLinks,aName) + { + var linkLi = theLinks.append("li"); + var link = linkLi.append("a").text(theData.description) + if (theData.id == currentID && currentView == aName) + { + link + .on("mouseover", function(){ + d3.select(this).style("cursor", "default")}) + linkLi.style("background","#888") + } + else + { + link + .on("mouseover", function(){d3.select(this).style("cursor", "pointer")}) + .on("click", function(){ + window.location.replace("../supportFiles/"+file, '_blank'); + window.localStorage.setItem("graphID", theData.id);}) + } + } + makeViewButtons(theGraphs,"XDSM","xdsm.html"); + makeViewButtons(theGraphs,"Edge Bundles","circlelayout.html"); + makeViewButtons(theGraphs,"Sankey Diagram","sankeyDiagram.html"); +} + +//aigner: Move to front function +d3.selection.prototype.moveToFront = function() { + return this.each(function(){ + this.parentNode.appendChild(this); + }); +}; +//aigner: Move to back function +d3.selection.prototype.moveToBack = function() { + return this.each(function() { + var firstChild = this.parentNode.firstChild; + if (firstChild) { + this.parentNode.insertBefore(this, firstChild); + } + }); +}; + +//get the current graph ID from the KADMOS visualiazation package's starting page +var graphID = "01"; +if (window.localStorage.getItem("graphID")) +{ + graphID=window.localStorage.getItem("graphID"); +} +var jsonFile = "json/circleLayout_"+graphID+".json"; +var schemaFile = "json/schema_"+graphID+".json" +//Get graph info from graphs.json file +var graphs; +var varCategories; +d3.json("json/graphs.json", function(error, aGraphInfo) +{ + if (error) {throw error;} + graphs = aGraphInfo.graphs; + varCategories = aGraphInfo.categories; +}) + +var diameter = 960, + radius = diameter / 2, + innerRadius = radius - 120; + +var cluster = d3.layout.cluster() + .size([360, innerRadius]) + .sort(null) + .value(function(d) { return d.size; }); + +var bundle = d3.layout.bundle(); + +var line = d3.svg.line.radial() + .interpolate("bundle") + .tension(0.85) + .radius(function(d) { return d.y; }) + .angle(function(d) { return d.x / 180 * Math.PI; }); + +var svg = d3.select("body").append("div").append("svg") + .attr("class","circleSvg") + .attr("width", 10000) + .attr("height", 10000) + .append("g") + .attr("transform", "translate(" + radius*2 + "," + radius*1.2+ ")"); + +var width = diameter*1.5; +var imgWidth = width; +var imgs = svg.selectAll("image").data([0]); +imgs.enter() +.append("svg:image") +.attr("xlink:href", "../include/AGILE_Background.png") +.attr("x", -width/2) +.attr("y", -100) +.attr("width", imgWidth) +.attr("height", imgWidth/4.8) +.attr("opacity", 1) + +var link = svg.append("g").selectAll(".link"), + invisibleLink = svg.append("g").selectAll(".invisibleLink"), + node = svg.append("g").selectAll(".node"); + +d3.json(jsonFile, function(error, classes) { + d3.json (schemaFile, function(schema) + { + if (error) throw error; + + makeKadmosMenu(graphs,"Circle View",graphID); + + d3.select(".newDiv").moveToBack() + d3.select(".vispackDiv").moveToBack() + + var nodes = cluster.nodes(packageHierarchy(classes)); + var links = packageImports(nodes); + + link = link + .data(bundle(links)) + .enter().append("path") + .each(function(d) { + d.source = d[0]; + d.target = d[d.length - 1];}) + .attr("class", "link") + .attr("d", line) + + + invisibleLink = invisibleLink + .data(bundle(links)) + .enter().append("path") + .each(function(d) { + d.source = d[0]; + d.target = d[d.length - 1]; + d.createNew = true;}) + .attr("class", "invisibleLink") + + invisibleLink = invisibleLink + .attr("d", line) + .on("click", function(d) + { + createTreeLayout(schema,d); + d.createNew = false; + }) + + + node = node + .data(nodes.filter(function(n) { return !n.children; })) + .enter().append("text") + .attr("class", "node") + .attr("dy", ".31em") + .attr("transform", function(d) { return "rotate(" + (d.x - 90) + ")translate(" + (d.y + 8) + ",0)" + (d.x < 180 ? "" : "rotate(180)"); }) + .style("text-anchor", function(d) { return d.x < 180 ? "start" : "end"; }) + .style("font-family","Arial") + .style("font-size","24px") + .text(function(d) { return d.key; }) + .on("mouseover", nodeMouseovered) + .on("mouseout", nodeMouseouted); + }) +}); + +function nodeMouseovered(d) { + + node + .each(function(n) { + n.target = n.source = false; }); + + link + .classed("link--target", function(l) { if (l.target === d) return l.source.source = true; }) + .classed("link--source", function(l) { if (l.source === d) return l.target.target = true; }) + .filter(function(l) { return l.target === d || l.source === d; }) + .each(function() { this.parentNode.appendChild(this); }); + + node + .classed("node--target", function(n) { return n.target; }) + .classed("node--source", function(n) { return n.source; }); +} + +function nodeMouseouted(d) { + link + .classed("link--target", false) + .classed("link--source", false); + + node + .classed("node--target", false) + .classed("node--source", false); +} + +d3.select(self.frameElement).style("height", diameter + "px"); + +// Lazily construct the package hierarchy from class names. +function packageHierarchy(classes) { + var map = {}; + + function find(name, data) { + var node = map[name], i; + if (!node) { + node = map[name] = data || {name: name, children: []}; + if (name.length) { + node.parent = find(name.substring(0, i = name.lastIndexOf("/"))); + node.parent.children.push(node); + node.key = name.substring(i + 1); + } + } + return node; + } + + classes.forEach(function(d) { + find(d.name, d); + }); + + return map[""]; +} + +// Return a list of imports for the given array of nodes. +function packageImports(nodes) { + var map = {}, + map2 = {}, + input = []; + + // Compute a map from name to node. + nodes.forEach(function(d) { + map[d.name] = d; + map2[d.pipeline_data] = d; + }); + + // For each import, construct a link from the source to target node. + nodes.forEach(function(d) + { + if(d.input) + { + d.input.forEach(function(i) + { + if (map[i]) + { + input.push({source: map[d.name], + target: map[i], + pipeline_data: map2[d.pipeline_data]}); + } + }) + } + + }); + return input; +} + +function include(arr,obj) { + return (arr.indexOf(obj) != -1); +} + + +function prune_schema(theParent, objArray, xPathListIn, xPathListOut) +{ + for (var i = 0; i < objArray.length; ++i) + { + var obj = objArray[i]; + obj.pipeLineIn = false; + obj.pipeLineOut = false; + var objXPath = theParent.name+"/"+objArray[i].name; + var delete_it = true; + // console.log("Current node ->") + // console.log(objXPath) + for (var j = 0; j < xPathListIn.length; ++j) + { + var xPath = xPathListIn[j]; + // console.log(xPath); + // console.log("Position = " + j); + // console.log(include(xPath, objXPath)); + if (include(xPath, objXPath)) + { + obj.pipeLineIn = true; + delete_it = false; + } + } + for (var j = 0; j < xPathListOut.length; ++j) + { + var xPath = xPathListOut[j]; + // console.log(xPath); + // console.log("Position = " + j); + // console.log(include(xPath, objXPath)); + if (include(xPath, objXPath)) + { + obj.pipeLineOut = true; + delete_it = false; + } + } + if (delete_it==true) + { + // console.log("delete ->") + // console.log(objXPath) + objArray.splice(i, 1); + i--; + } + else + { + // console.log("do not delete ->") + // console.log(objXPath); + if (obj.children) + { + if (obj.children.length==0) + { + objArray.splice(i, 1); + i--; + } + prune_schema(obj, obj.children, xPathListIn, xPathListOut); + } + } + } +} + +function createTreeLayout(schema,theLink) +{ + if (theLink.createNew == false) + {return}; + + function cleanArray(actual) + { + var newArray = new Array(); + for (var i = 0; i < actual.length; i++) + { + if (actual[i]) + { + newArray.push(actual[i]); + } + } + return newArray; + } + + var inList = []; + var outList = []; + var pipeData_in = theLink.source.pipeline_data[theLink.target.name]; + var pipeData_out = theLink.target.pipeline_data[theLink.source.name]; + + <!-- console.log("###IN###"); --> + <!-- console.log(pipeData_in); --> + <!-- console.log("###OUT###"); --> + <!-- console.log(pipeData_out); --> + + var treeData = (JSON.parse(JSON.stringify(schema))); + + if (!pipeData_in){pipeData_in = [];} + if (!pipeData_out){pipeData_out = [];} + prune_schema(treeData, treeData.children, pipeData_in, pipeData_out); + //console.log(treeData); + + + var width= 1000; + var height= 500; + var xOffset = 10; + var xOffset2 = 100; + var canvas = d3.select(".circleSvg"); + // Calculate total nodes, max label length + var totalNodes = 0; + var maxLabelLength = 0; + // variables for drag/drop + var selectedNode = null; + var draggingNode = null; + // Misc. variables + var i = 0; + var duration = 500; + var root; + + + // size of the diagram + var viewerWidth = width/3; + var viewerHeight = height-50; + + var tree = d3.layout.tree() + .size([viewerHeight, viewerWidth]) + + // define a d3 diagonal projection for use by the node paths later on. + var diagonal = d3.svg.diagonal() + .projection(function(d) { + return [d.y+xOffset, d.x]; + }); + + // A recursive helper function for performing some setup by walking through all nodes + + function visit(parent, visitFn, childrenFn) { + if (!parent) return; + + visitFn(parent); + + var children = childrenFn(parent); + if (children) { + var count = children.length; + for (var i = 0; i < count; i++) { + visit(children[i], visitFn, childrenFn); + } + } + } + + // Call visit function to establish maxLabelLength + visit(treeData, function(d) { + totalNodes++; + maxLabelLength = Math.max(d.name.length, maxLabelLength); + }, function(d) { + return d.children && d.children.length > 0 ? d.children : null; + }); + + function getMaxLength(data) + { + var maxLen=0;; + for (var i = 0; i < data.length; i++) + { + maxLen = Math.max(data[i].name.length, maxLen); + } + for (var i = 0; i < data.length; i++) + { + data[i].labelLength = maxLen; + if (data[i].children) + {getMaxLength(data[i].children);} + if (data[i]._children) + {getMaxLength(data[i]._children);} + } + + } + if(treeData._children) + {getMaxLength(treeData._children);} + if(treeData.children) + {getMaxLength(treeData.children);} + treeData.labelLength = treeData.name.length; + + // sort the tree according to the node names + function sortTree() { + tree.sort(function(a, b) { + return b.name.toLowerCase() < a.name.toLowerCase() ? 1 : -1; + }); + } + // Sort the tree initially incase the JSON isn't in a sorted order. + //sortTree() + + + // Collapse the node and all it's children + function collapse(d) { + if(d.children) { + d._children = d.children + d._children.forEach(collapse) + d.children = null + } + } + // Collapse the node and all it's children + function expand(d) { + if(d._children) { + d.children = d._children + d.children.forEach(expand) + d._children = null + } + } + // Toggle children on click. + function click(d) + { + if (d.children) { + d._children = d.children; + d.children = null; + } else + { + d.children = d._children; + d._children = null; + } + update(d); + } + // Collapse/expand entire tree on double-click + function dblclick(d) + { + if(d.children) + { + collapse(d); + } + else if(d._children) + { + expand(d); + } + update(d); + } + + + + var treeGroup = canvas.append("g").attr("class","treeGroup") + .style("position","absolute") + + + var xPos = d3.event.pageX; + var yPos = d3.event.pageY-200; + + var frameGroup = treeGroup.append("g") + .style("position","absolute") + .attr("transform", "translate("+xPos+","+yPos+")") + .attr("class","frame") + var frame = frameGroup.append("rect") + .attr("stroke-width", 1) + .attr("stroke", "white") + .attr("fill-opacity", .8); + + var removeSymbol = frameGroup.append("g").attr("class", "remove"+d3.event.pageX+"_"+d3.event.pageX) + + + var r=8; + var cx=r+2; + var cy=r+2; + var circle = removeSymbol.append("circle") + .attr("cx", cx) + .attr("cy", cy) + .attr("r", r) + .style("stroke", "black") + .style("stroke-width", 1.5) + .style("fill", "red") + .style("fill-opacity", .6) + var minus = removeSymbol.append("line") + .attr("x1", cx+r/2) + .attr("y1", cy) + .attr("x2", cx-r/2) + .attr("y2", cy) + .style("stroke", "black") + .style("stroke-width", 1.5); + + removeSymbol + .on("mouseover", function(){circle.style("fill", "red").style("fill-opacity", .8);}) + .on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)}) + .on("mousedown",function() + { + circle.style("fill", "darkred").style("fill-opacity",1); + }) + .on("mouseup",function() + { + treeGroup.remove(); + theLink.createNew = true; + }) + + + // Append a group which holds all nodes and which the zoom Listener can act upon. + var svgGroup = treeGroup.append("g") + .attr("class","tree_"+theLink.source.name+"."+theLink.target.name) + .attr("transform", "translate("+String(xPos+70)+","+String(yPos+30)+")"); + + + // Define the root + root = treeData; + root.x0 = 0; + root.y0 = 0; + + collapse(root); + update(root,theLink); + + + function update(source,aLink) { + // Compute the new height, function counts total children of root node and sets tree height accordingly. + // This prevents the layout looking squashed when new nodes are made visible or looking sparse when nodes are removed + // This makes the layout more consistent. + var levelWidth = [1]; + var levelLength = [1]; + var childCount = function(level, n) { + + if (n.children && n.children.length > 0) { + if (levelWidth.length <= level + 1) levelWidth.push(0); + + levelWidth[level + 1] += n.children.length; + n.children.forEach(function(d) { + childCount(level + 1, d); + }); + } + }; + childCount(0, root); + + var newHeight = d3.max(levelWidth) * 20; // 20 pixels per line + var newWidth = viewerWidth+300; + + + + //BENNI: fill in viewerHeight instead of newHeight for other expanding/collapsing beaviour + tree = tree.size([newHeight, newWidth]); + + frame = frame.attr("width",newWidth) + .attr("height",newHeight+60) + .attr("fill","white"); + + if (aLink) + { + var frametext = frameGroup.append("text") + .attr("class", "frametext") + .attr("x",30) + .attr("y",-5) + .attr("text-anchor","start") + .attr("font-family","Arial") + .attr("font-size","18px") + .attr("font-weight","bold") + .text("Variable flow: " + aLink.source.name + " \-\-> " + aLink.target.name) + } + + // Compute the new tree layout. + var nodes = tree.nodes(root), + links = tree.links(nodes); + + //aigner: count all descendants of a node + function countDescendants(node, counter) + { + if (node._children) + { + node._children.forEach(function(n) + { + counter = countDescendants(n, counter); + }); + } + else if (node.children) + { + node.children.forEach(function(n) + { + counter = countDescendants(n, counter); + }); + } + else + { + counter ++; + } + return counter; + } + + + var depths = []; + var labelLength = []; + nodes.forEach(function(d) + { + //aigner: If node is collapsed show number of ancestors + if (d._children) + { + d._childrenNum = countDescendants(d, 0); + d.text = d.name + " (" + d._childrenNum + ")"; + } + else + { + d.text = d.name + } + + //aigner: Find maximum labelLength for each level + if (!depths.includes(d.depth)) + { + depths.push(d.depth); + labelLength.push(d.text.length); + } + else + { + if (d.depth!=0){labelLength[depths.indexOf(d.depth)] = Math.max(d.text.length, labelLength[depths.indexOf(d.depth)]);} + } + }); + // Set widths between levels based on labelLength of each level. + var newWidth=0; + var depth_tmp = 0; + nodes.forEach(function(d) + { + if (d.parent) + { + d.y = d.parent.y+(labelLength[depths.indexOf(d.depth)])*12+50; + } + else{d.y=0} + + + if (newWidth<d.y) + {newWidth=d.y;} + + // console.log("##############") + // console.log(d.name) + // console.log("x = " + d.x) + // console.log("y = " + d.y) + // console.log("depth = " + depths.indexOf(d.depth)) + // console.log("##############") + }); + + + // Update the nodes… + var treeNode = svgGroup.selectAll("g.treeNode") + .data(nodes, function(d) { + return d.id || (d.id = ++i); + }); + + var dblclick_timer = false; + // Enter any new nodes at the parent's previous position. + var nodeEnter = treeNode.enter().append('g') + .attr('class', 'treeNode') + .attr("transform", function(d) { + return "translate(" + source.y0 + "," + source.x0 + ")"; + }) + .on("click", function(d) { + // if double click timer is active, this click is the double click + if ( dblclick_timer ) + { + clearTimeout(dblclick_timer) + dblclick_timer = false + // double click code code comes here + //console.log("DOUBLE CLICK") + dblclick(d); + } + // otherwise, what to do after single click (double click has timed out) + else dblclick_timer = setTimeout( function(){ + dblclick_timer = false + // single click code code comes here + //console.log("SINGLE CLICK") + click(d); + }, 250) + }) + + + nodeEnter.append("circle") + .attr('class', 'nodeCircle') + .attr("r", 0) + .style("fill", function(d) { + return d._children ? "lightsteelblue" : "#fff"; + }) + .style("stroke", function(d) { + if(d.pipeLineIn && !d.pipeLineOut){ + //console.log(d); + return '#CC0000'} + else if(!d.pipeLineIn && d.pipeLineOut){ + //console.log(d); + return '#99CC00'} + }) + .attr("cx", function(d) {return xOffset}); + + nodeEnter.append("text") + .attr("x", function(d) + { + return d.children || d._children ? -10+xOffset : 10+xOffset; + }) + .attr("dy", ".35em") + .attr('class', 'nodeText') + .attr("text-anchor", function(d) { + return d.children || d._children ? "end" : "start"; + }) + .text(function(d) { + return d.name; + }) + .style("fill-opacity", 0) + + + // Update the text to reflect whether node has children or not. + treeNode.select('text') + .attr("x", function(d) { + return d.children || d._children ? -10+xOffset : 10+xOffset; + }) + .attr("text-anchor", function(d) { + return d.children || d._children ? "end" : "start"; + }) + .text(function(d) { + return d.name; + }); + + // Change the circle fill depending on whether it has children and is collapsed + treeNode.select("circle.nodeCircle") + .attr("r", 4.5) + .style("fill", function(d) { + return d._children ? "lightsteelblue" : "#fff"; + }); + + + //menu --> functions for right click options + var nodeMenu = [ + { + title: 'Show node information', + onMouseDown: function(elm, d, i) { + }, + onMouseUp: function(elm, d, i) {}, + onMouseOver: function(elm, d, i) {}, + childrenItems: [] + }, + { + title: 'Show usage of node in XDSM', + onMouseDown: function(elm, d, i) { + }, + onMouseUp: function(elm, d, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: [] + }, + { + title: 'Copy x-path to clipboard', + onMouseDown: function(elm, d, i) { + }, + onMouseUp: function(elm, d, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: [] + }, + { + title: 'Download full tree as XML-file', + onMouseDown: function(elm, d, i) { + }, + onMouseUp: function(elm, d, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: [] + }, + { + title: 'Download tree as XML-file from current node', + onMouseDown: function(elm, d, i) { + }, + onMouseUp: function(elm, d, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: [] + } + ] + + + nodeEnter = nodeEnter + .on('contextmenu', d3.contextMenu(nodeMenu)); + + // UPDATE + // Transition nodes to their new position. + var nodeUpdate = treeNode.transition() + .duration(duration) + .attr("transform", function(d) { + return "translate(" + d.y + "," + d.x + ")"; + }); + + // Fade the text in + nodeUpdate.select("text") + .style("fill-opacity", 1); + + //New object for invisible nodes + var exitNodes = []; + + // Transition exiting nodes to the parent's new position. + var nodeExit = treeNode.exit() + .transition() + .duration(duration) + .attr("transform", translation) + //.remove(); + + function translation(d) + { + + var closestAncestor; + closestAncestor = findClosestAncestor(nodes,d); + exitNodes.push(d); + exitNodes[exitNodes.length-1].x = closestAncestor.x; + exitNodes[exitNodes.length-1].y = closestAncestor.y; + return "translate(" + closestAncestor.y + "," + closestAncestor.x + ")"; + } + + function findClosestAncestor(allNodes, element) + { + var level = 0; + var closestAncestor; + for (var i=0;i<allNodes.length;i++) + { + if (!allNodes[i].level){allNodes[i].level=0}; + if (isDescendant(allNodes[i],element) && allNodes[i].level >= level) + { + level = allNodes[i].level; + closestAncestor = allNodes[i]; + } + } + return closestAncestor; + } + + function isDescendant(parent, child) + { + var node = child.parent; + while (node != null) + { + if (node == parent) + { + return true; + } + node = node.parent; + } + return false; + } + + nodeExit.select("circle") + .attr("r", 0); + + nodeExit.select("text") + .style("fill-opacity", 0); + + // Update the links… + var link = svgGroup.selectAll("path.treeLink") + .data(links, function(d) { + return d.target.id; + }); + + // Enter any new links at the parent's previous position. + link.enter().insert("path", "g") + .attr("class", "treeLink") + .attr("d", function(d) { + var o = { + x: source.x0, + y: source.y0 + }; + return diagonal({ + source: o, + target: o + }); + }); + + // Transition links to their new position. + link.transition() + .duration(duration) + .attr("d", diagonal); + + // Transition exiting nodes to the parent's new position. + link.exit().transition() + .duration(duration) + .attr("d", function(d) { + var o = { + x: source.x, + y: source.y + }; + return diagonal({ + source: o, + target: o + }); + }) + .remove(); + + // Stash the old positions for transition. + nodes.forEach(function(d) { + d.x0 = d.x; + d.y0 = d.y; + }); + } +} + + +}, +{"./src/animation":2,"./src/graph":3,"./src/xdsm":5,"d3":1}]},{},[6]); diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/edgeBundles.html b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/edgeBundles.html new file mode 100644 index 000000000..b3695e803 --- /dev/null +++ b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/edgeBundles.html @@ -0,0 +1,224 @@ +<!doctype html> +<html class="js" lang=""> +<style> +.node { + fill: #aaa; +} + +.node:hover { + fill: #666666; +} + +.link { + stroke: #3399FF; + stroke-opacity: 0.4; + stroke-width: 2px; + fill: none; + +} + +.invisibleLink { + stroke: #000; + stroke-opacity: 0; + stroke-width: 15px; + fill: none; +} +.invisibleLink:hover { + stroke: #3399FF; + stroke-opacity: 1.0; + stroke-width: 5px; + fill: none; +} + +.node:hover, +.node--source, +.node--target { + font-weight: 700; +} + +.node--source { + fill: #99CC00; +} + +.node--target { + fill: #CC0000; +} + +.link--target, +.link--source{ + stroke-opacity: .8; + stroke-width: 5px; +} + +.link--source { + stroke: #CC0000; +} + +.link--target { + stroke: #99CC00; +} + + +.treeNode { +cursor: pointer; +} + +.overlay{ + background-color:#FFF; +} + +.treeNode circle { +fill: #fff; +stroke: #3399FF; +stroke-width: 1.5px; +} + +.treeNode text { +font-size:16px; +font-family:Arial; +} + +.treeLink { +fill: none; +stroke: #ccc; +stroke-width: 1.5px; +} + +.d3-context-menu { + position: absolute; + display: none; + background-color: #f2f2f2; + border-radius: 4px; + font-family: Arial; + font-size: 16pt; + min-width: 300px; + border: 1px solid #d4d4d4; + z-index:1200; +} +.d3-context-menu ul { + list-style-type: none; + margin: 4px 0px; + padding: 0px; + cursor: default; +} +.d3-context-menu ul li { + padding: 4px 16px; +} +.d3-context-menu ul li:hover { + background-color: #4677f8; +} +.d3-context-menu ul li > ul { + position: absolute; + background-color: #f2f2f2; + top: 0; + min-width: 350px; + left: 300px; + z-index: -1; +} + +.d3-context-menu ul li > ul li:hover +{ + background-color: #4677f8; + color: #fefefe; +} + +.ackn { +fill: #666666; +stroke: #666666; +stroke-width: 2.0; +} + +.acknGroup:hover .ackn{ +fill: #3399FF; +stroke: #3399FF; +} + +.newDiv { + position:relative; + top: -100px; + left: 220px; + background-color: none; +} +.newDiv a { + text-decoration: none; + color: white; + font-family: Arial; + font-size: 20pt; + padding-top: 12px; + padding-right: 12px; + padding-bottom: 12px; + padding-left: 6px; + display:inline-block; +} +.newDiv ul { + display: inline-block;; + margin: 0; + padding: 0; + background-color: #666666; +} +.newDiv ul li {display: inline-block;} +.newDiv ul li:hover {background: #888;} +.newDiv ul li:hover ul {display: block;} +.newDiv ul li ul { + position: absolute; + min-width: 200px; + display: none; +} +.newDiv ul li ul li { + background: #555; + display: block; +} +.newDiv ul li ul li a { + display:block !important +} +.newDiv ul li ul li:hover {background: #3399FF;} + +table { + width: 800px; + table-layout:fixed; +} + +table, th, td { + font-family: Arial; + font-size: 16pt; + background-color: white; + border: 2pt solid darkgrey; + border-collapse: collapse; + text-align: left; + word-wrap:break-word; +} +} +th, td { + padding-top: 6px; + padding-right: 20px; + padding-bottom: 6px; + padding-left: 20px; + min-width: 100px; + max-width: 400px; +} + +.remCircle { + stroke: black; + stroke-width: 2; + fill: red; + fill-opacity: .6 +} +.remMinus { + stroke: black; + stroke-width: 2; +} + +.acknText { +font-family: Arial; +font-size: 12pt; +fill: #666666; +} +</style> + <head> + <meta charset="utf-8"> + <title>KADMOS Edge Bundles</title> + </head> + <body> + <script src="edgeBundles.js"></script> + </body> +</html> \ No newline at end of file diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/edgeBundles.js b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/edgeBundles.js new file mode 100644 index 000000000..8cdc7d70c --- /dev/null +++ b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/edgeBundles.js @@ -0,0 +1,2810 @@ +(function() { +/*! jQuery v3.2.0 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.0",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c<b?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=Array.isArray(d)))?(e?(e=!1,f=c&&Array.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;f<g;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e);return!1}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}return!1}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;d<e;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,N,e),g(f,c,O,e)):(f++,j.call(a,g(f,c,N,e),g(f,c,O,e),g(f,c,N,c.notifyWith))):(d!==N&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S), +a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},U=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function V(){this.expando=r.expando+V.uid++}V.uid=1,V.prototype={cache:function(a){var b=a[this.expando];return b||(b={},U(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){Array.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(L)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var W=new V,X=new V,Y=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function $(a){return"true"===a||"false"!==a&&("null"===a?null:a===+a+""?+a:Y.test(a)?JSON.parse(a):a)}function _(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Z,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c=$(c)}catch(e){}X.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return X.hasData(a)||W.hasData(a)},data:function(a,b,c){return X.access(a,b,c)},removeData:function(a,b){X.remove(a,b)},_data:function(a,b,c){return W.access(a,b,c)},_removeData:function(a,b){W.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=X.get(f),1===f.nodeType&&!W.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),_(f,d,e[d])));W.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){X.set(this,a)}):T(this,function(b){var c;if(f&&void 0===b){if(c=X.get(f,a),void 0!==c)return c;if(c=_(f,a),void 0!==c)return c}else this.each(function(){X.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=W.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var aa=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ba=new RegExp("^(?:([+-])=|)("+aa+")([a-z%]*)$","i"),ca=["Top","Right","Bottom","Left"],da=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ea=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function fa(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&ba.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var ga={};function ha(a){var b,c=a.ownerDocument,d=a.nodeName,e=ga[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ga[d]=e,e)}function ia(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=W.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&da(d)&&(e[f]=ha(d))):"none"!==c&&(e[f]="none",W.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ia(this,!0)},hide:function(){return ia(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){da(this)?r(this).show():r(this).hide()})}});var ja=/^(?:checkbox|radio)$/i,ka=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c<d;c++)W.set(a[c],"globalEval",!b||W.get(b[c],"globalEval"))}var pa=/<|&#?\w+;/;function qa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(pa.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ka.exec(f)||["",""])[1].toLowerCase(),i=ma[h]||ma._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g,h=[],i=b.delegateCount,j=a.target;if(i&&j.nodeType&&!("click"===a.type&&a.button>=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c<i;c++)d=b[c],e=d.selector+" ",void 0===g[e]&&(g[e]=d.needsContext?r(e,this).index(j)>-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i<b.length&&h.push({elem:j,handlers:b.slice(i)}),h},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==xa()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===xa()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if(ja.test(this.type)&&this.click&&B(this,"input"))return this.click(),!1},_default:function(a){return B(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?va:wa,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:wa,isPropagationStopped:wa,isImmediatePropagationStopped:wa,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=va,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=va,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=va,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&sa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ta.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return ya(this,a,b,c,d)},one:function(a,b,c,d){return ya(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=wa),this.each(function(){r.event.remove(this,a,c,b)})}});var za=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/<script|<style|<link/i,Ba=/checked\s*(?:[^=]|=\s*.checked.)/i,Ca=/^true\/(.*)/,Da=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}X.hasData(a)&&(h=X.access(a),i=r.extend({},h),X.set(b,i))}}function Ia(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ja.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ja(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,na(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ga),l=0;l<i;l++)j=h[l],la.test(j.type||"")&&!W.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Da,""),k))}return a}function Ka(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(na(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&oa(na(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(za,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d<e;d++)Ia(f[d],g[d]);if(b)if(c)for(f=f||na(a),g=g||na(h),d=0,e=f.length;d<e;d++)Ha(f[d],g[d]);else Ha(a,h);return g=na(h,"script"),g.length>0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(na(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ja(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(na(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var La=/^margin/,Ma=new RegExp("^("+aa+")(?!px)[a-z%]+$","i"),Na=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",ra.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,ra.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Oa(a,b,c){var d,e,f,g,h=a.style;return c=c||Na(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ma.test(g)&&La.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function Pa(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Qa=/^(none|table(?!-c[ea]).+)/,Ra=/^--/,Sa={position:"absolute",visibility:"hidden",display:"block"},Ta={letterSpacing:"0",fontWeight:"400"},Ua=["Webkit","Moz","ms"],Va=d.createElement("div").style;function Wa(a){if(a in Va)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ua.length;while(c--)if(a=Ua[c]+b,a in Va)return a}function Xa(a){var b=r.cssProps[a];return b||(b=r.cssProps[a]=Wa(a)||a),b}function Ya(a,b,c){var d=ba.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Za(a,b,c,d,e){var f,g=0;for(f=c===(d?"border":"content")?4:"width"===b?1:0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+ca[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+ca[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+ca[f]+"Width",!0,e))):(g+=r.css(a,"padding"+ca[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+ca[f]+"Width",!0,e)));return g}function $a(a,b,c){var d,e=Na(a),f=Oa(a,b,e),g="border-box"===r.css(a,"boxSizing",!1,e);return Ma.test(f)?f:(d=g&&(o.boxSizingReliable()||f===a.style[b]),f=parseFloat(f)||0,f+Za(a,b,c||(g?"border":"content"),d,e)+"px")}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Oa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=Ra.test(b),j=a.style;return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:j[b]:(f=typeof c,"string"===f&&(e=ba.exec(c))&&e[1]&&(c=fa(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(j[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i?j.setProperty(b,c):j[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b),i=Ra.test(b);return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Oa(a,b,d)),"normal"===e&&b in Ta&&(e=Ta[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Qa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?$a(a,b,d):ea(a,Sa,function(){return $a(a,b,d)})},set:function(a,c,d){var e,f=d&&Na(a),g=d&&Za(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=ba.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ya(a,c,g)}}}),r.cssHooks.marginLeft=Pa(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Oa(a,"marginLeft"))||a.getBoundingClientRect().left-ea(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+ca[d]+b]=f[d]||f[d-2]||f[0];return e}},La.test(a)||(r.cssHooks[a+b].set=Ya)}),r.fn.extend({css:function(a,b){return T(this,function(a,b,c){var d,e,f={},g=0;if(Array.isArray(b)){for(d=Na(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&da(a),q=W.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],cb.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=W.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ia([a],!0),j=a.style.display||j,k=r.css(a,"display"),ia([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=W.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ia([a],!0),m.done(function(){p||ia([a]),W.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=hb(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],Array.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=kb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=ab||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;g<i;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),f<1&&i?c:(i||h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:ab||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;c<d;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);f<g;f++)if(d=kb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,hb,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j}r.Animation=r.extend(kb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return fa(c.elem,a,ba.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(L);for(var c,d=0,e=a.length;d<e;d++)c=a[d],kb.tweeners[c]=kb.tweeners[c]||[],kb.tweeners[c].unshift(b)},prefilters:[ib],prefilter:function(a,b){b?kb.prefilters.unshift(a):kb.prefilters.push(a)}}),r.speed=function(a,b,c){var d=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off?d.duration=0:"number"!=typeof d.duration&&(d.duration in r.fx.speeds?d.duration=r.fx.speeds[d.duration]:d.duration=r.fx.speeds._default),null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){r.isFunction(d.old)&&d.old.call(this),d.queue&&r.dequeue(this,d.queue)},d},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(da).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=kb(this,r.extend({},a),f);(e||W.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=r.timers,g=W.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&db.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=W.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;b<g;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),r.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(ab=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),ab=void 0},r.fx.timer=function(a){r.timers.push(a),r.fx.start()},r.fx.interval=13,r.fx.start=function(){bb||(bb=!0,eb())},r.fx.stop=function(){bb=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var lb,mb=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return T(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d)); +},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d<i;d++)if(c=e[d],(c.selected||d===f)&&!c.disabled&&(!c.parentNode.disabled||!B(c.parentNode,"optgroup"))){if(b=r(c).val(),g)return b;h.push(b)}return h},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Tb=[],Ub=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Tb.pop()||r.expando+"_"+ub++;return this[a]=!0,a}}),r.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Ub.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ub.test(b.data)&&"data");if(h||"jsonp"===b.dataTypes[0])return e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Ub,"$1"+e):b.jsonp!==!1&&(b.url+=(vb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||r.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Tb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),"script"}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=C.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=qa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=pb(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&r.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?r("<div>").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length},r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),b=f.ownerDocument,c=b.documentElement,e=b.defaultView,{top:d.top+e.pageYOffset-c.clientTop,left:d.left+e.pageXOffset-c.clientLeft}):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),B(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||ra})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return T(this,function(a,d,e){var f;return r.isWindow(a)?f=a:9===a.nodeType&&(f=a.defaultView),void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Pa(o.pixelPosition,function(a,c){if(c)return c=Oa(a,b),Ma.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return T(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)},holdReady:function(a){a?r.readyWait++:r.ready(!0)}}),r.isArray=Array.isArray,r.parseJSON=JSON.parse,r.nodeName=B,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var Vb=a.jQuery,Wb=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Wb),b&&a.jQuery===r&&(a.jQuery=Vb),r},b||(a.jQuery=a.$=r),r}); + +function createShiftArr(step) { + + var space = ' '; + + if ( isNaN(parseInt(step)) ) { // argument is string + space = step; + } else { // argument is integer + switch(step) { + case 1: space = ' '; break; + case 2: space = ' '; break; + case 3: space = ' '; break; + case 4: space = ' '; break; + case 5: space = ' '; break; + case 6: space = ' '; break; + case 7: space = ' '; break; + case 8: space = ' '; break; + case 9: space = ' '; break; + case 10: space = ' '; break; + case 11: space = ' '; break; + case 12: space = ' '; break; + } + } + + var shift = ['\n']; // array of shifts + for(ix=0;ix<100;ix++){ + shift.push(shift[ix]+space); + } + return shift; +} + +function vkbeautify(){ + this.step = ' '; // 4 spaces + this.shift = createShiftArr(this.step); +}; + +vkbeautify.prototype.xml = function(text,step) { + + var ar = text.replace(/>\s{0,}</g,"><") + .replace(/</g,"~::~<") + .replace(/\s*xmlns\:/g,"~::~xmlns:") + .replace(/\s*xmlns\=/g,"~::~xmlns=") + .split('~::~'), + len = ar.length, + inComment = false, + deep = 0, + str = '', + ix = 0, + shift = step ? createShiftArr(step) : this.shift; + + for(ix=0;ix<len;ix++) { + // start comment or <![CDATA[...]]> or <!DOCTYPE // + if(ar[ix].search(/<!/) > -1) { + str += shift[deep]+ar[ix]; + inComment = true; + // end comment or <![CDATA[...]]> // + if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1 || ar[ix].search(/!DOCTYPE/) > -1 ) { + inComment = false; + } + } else + // end comment or <![CDATA[...]]> // + if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1) { + str += ar[ix]; + inComment = false; + } else + // <elm></elm> // + if( /^<\w/.exec(ar[ix-1]) && /^<\/\w/.exec(ar[ix]) && + /^<[\w:\-\.\,]+/.exec(ar[ix-1]) == /^<\/[\w:\-\.\,]+/.exec(ar[ix])[0].replace('/','')) { + str += ar[ix]; + if(!inComment) deep--; + } else + // <elm> // + if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) == -1 && ar[ix].search(/\/>/) == -1 ) { + str = !inComment ? str += shift[deep++]+ar[ix] : str += ar[ix]; + } else + // <elm>...</elm> // + if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) > -1) { + str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix]; + } else + // </elm> // + if(ar[ix].search(/<\//) > -1) { + str = !inComment ? str += shift[--deep]+ar[ix] : str += ar[ix]; + } else + // <elm/> // + if(ar[ix].search(/\/>/) > -1 ) { + str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix]; + } else + // <? xml ... ?> // + if(ar[ix].search(/<\?/) > -1) { + str += shift[deep]+ar[ix]; + } else + // xmlns // + if( ar[ix].search(/xmlns\:/) > -1 || ar[ix].search(/xmlns\=/) > -1) { + str += shift[deep]+ar[ix]; + } + + else { + str += ar[ix]; + } + } + + return (str[0] == '\n') ? str.slice(1) : str; +} + +vkbeautify.prototype.json = function(text,step) { + + var step = step ? step : this.step; + + if (typeof JSON === 'undefined' ) return text; + + if ( typeof text === "string" ) return JSON.stringify(JSON.parse(text), null, step); + if ( typeof text === "object" ) return JSON.stringify(text, null, step); + + return text; // text is not string nor object +} + +vkbeautify.prototype.css = function(text, step) { + + var ar = text.replace(/\s{1,}/g,' ') + .replace(/\{/g,"{~::~") + .replace(/\}/g,"~::~}~::~") + .replace(/\;/g,";~::~") + .replace(/\/\*/g,"~::~/*") + .replace(/\*\//g,"*/~::~") + .replace(/~::~\s{0,}~::~/g,"~::~") + .split('~::~'), + len = ar.length, + deep = 0, + str = '', + ix = 0, + shift = step ? createShiftArr(step) : this.shift; + + for(ix=0;ix<len;ix++) { + + if( /\{/.exec(ar[ix])) { + str += shift[deep++]+ar[ix]; + } else + if( /\}/.exec(ar[ix])) { + str += shift[--deep]+ar[ix]; + } else + if( /\*\\/.exec(ar[ix])) { + str += shift[deep]+ar[ix]; + } + else { + str += shift[deep]+ar[ix]; + } + } + return str.replace(/^\n{1,}/,''); +} + +//---------------------------------------------------------------------------- + +function isSubquery(str, parenthesisLevel) { + return parenthesisLevel - (str.replace(/\(/g,'').length - str.replace(/\)/g,'').length ) +} + +function split_sql(str, tab) { + + return str.replace(/\s{1,}/g," ") + + .replace(/ AND /ig,"~::~"+tab+tab+"AND ") + .replace(/ BETWEEN /ig,"~::~"+tab+"BETWEEN ") + .replace(/ CASE /ig,"~::~"+tab+"CASE ") + .replace(/ ELSE /ig,"~::~"+tab+"ELSE ") + .replace(/ END /ig,"~::~"+tab+"END ") + .replace(/ FROM /ig,"~::~FROM ") + .replace(/ GROUP\s{1,}BY/ig,"~::~GROUP BY ") + .replace(/ HAVING /ig,"~::~HAVING ") + //.replace(/ SET /ig," SET~::~") + .replace(/ IN /ig," IN ") + + .replace(/ JOIN /ig,"~::~JOIN ") + .replace(/ CROSS~::~{1,}JOIN /ig,"~::~CROSS JOIN ") + .replace(/ INNER~::~{1,}JOIN /ig,"~::~INNER JOIN ") + .replace(/ LEFT~::~{1,}JOIN /ig,"~::~LEFT JOIN ") + .replace(/ RIGHT~::~{1,}JOIN /ig,"~::~RIGHT JOIN ") + + .replace(/ ON /ig,"~::~"+tab+"ON ") + .replace(/ OR /ig,"~::~"+tab+tab+"OR ") + .replace(/ ORDER\s{1,}BY/ig,"~::~ORDER BY ") + .replace(/ OVER /ig,"~::~"+tab+"OVER ") + + .replace(/\(\s{0,}SELECT /ig,"~::~(SELECT ") + .replace(/\)\s{0,}SELECT /ig,")~::~SELECT ") + + .replace(/ THEN /ig," THEN~::~"+tab+"") + .replace(/ UNION /ig,"~::~UNION~::~") + .replace(/ USING /ig,"~::~USING ") + .replace(/ WHEN /ig,"~::~"+tab+"WHEN ") + .replace(/ WHERE /ig,"~::~WHERE ") + .replace(/ WITH /ig,"~::~WITH ") + + //.replace(/\,\s{0,}\(/ig,",~::~( ") + //.replace(/\,/ig,",~::~"+tab+tab+"") + + .replace(/ ALL /ig," ALL ") + .replace(/ AS /ig," AS ") + .replace(/ ASC /ig," ASC ") + .replace(/ DESC /ig," DESC ") + .replace(/ DISTINCT /ig," DISTINCT ") + .replace(/ EXISTS /ig," EXISTS ") + .replace(/ NOT /ig," NOT ") + .replace(/ NULL /ig," NULL ") + .replace(/ LIKE /ig," LIKE ") + .replace(/\s{0,}SELECT /ig,"SELECT ") + .replace(/\s{0,}UPDATE /ig,"UPDATE ") + .replace(/ SET /ig," SET ") + + .replace(/~::~{1,}/g,"~::~") + .split('~::~'); +} + +vkbeautify.prototype.sql = function(text,step) { + + var ar_by_quote = text.replace(/\s{1,}/g," ") + .replace(/\'/ig,"~::~\'") + .split('~::~'), + len = ar_by_quote.length, + ar = [], + deep = 0, + tab = this.step,//+this.step, + inComment = true, + inQuote = false, + parenthesisLevel = 0, + str = '', + ix = 0, + shift = step ? createShiftArr(step) : this.shift;; + + for(ix=0;ix<len;ix++) { + if(ix%2) { + ar = ar.concat(ar_by_quote[ix]); + } else { + ar = ar.concat(split_sql(ar_by_quote[ix], tab) ); + } + } + + len = ar.length; + for(ix=0;ix<len;ix++) { + + parenthesisLevel = isSubquery(ar[ix], parenthesisLevel); + + if( /\s{0,}\s{0,}SELECT\s{0,}/.exec(ar[ix])) { + ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"") + } + + if( /\s{0,}\s{0,}SET\s{0,}/.exec(ar[ix])) { + ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"") + } + + if( /\s{0,}\(\s{0,}SELECT\s{0,}/.exec(ar[ix])) { + deep++; + str += shift[deep]+ar[ix]; + } else + if( /\'/.exec(ar[ix]) ) { + if(parenthesisLevel<1 && deep) { + deep--; + } + str += ar[ix]; + } + else { + str += shift[deep]+ar[ix]; + if(parenthesisLevel<1 && deep) { + deep--; + } + } + var junk = 0; + } + + str = str.replace(/^\n{1,}/,'').replace(/\n{1,}/g,"\n"); + return str; +} + + +vkbeautify.prototype.xmlmin = function(text, preserveComments) { + + var str = preserveComments ? text + : text.replace(/\<![ \r\n\t]*(--([^\-]|[\r\n]|-[^\-])*--[ \r\n\t]*)\>/g,"") + .replace(/[ \r\n\t]{1,}xmlns/g, ' xmlns'); + return str.replace(/>\s{0,}</g,"><"); +} + +vkbeautify.prototype.jsonmin = function(text) { + + if (typeof JSON === 'undefined' ) return text; + + return JSON.stringify(JSON.parse(text), null, 0); + +} + +vkbeautify.prototype.cssmin = function(text, preserveComments) { + + var str = preserveComments ? text + : text.replace(/\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\//g,"") ; + + return str.replace(/\s{1,}/g,' ') + .replace(/\{\s{1,}/g,"{") + .replace(/\}\s{1,}/g,"}") + .replace(/\;\s{1,}/g,";") + .replace(/\/\*\s{1,}/g,"/*") + .replace(/\*\/\s{1,}/g,"*/"); +} + +vkbeautify.prototype.sqlmin = function(text) { + return text.replace(/\s{1,}/g," ").replace(/\s{1,}\(/,"(").replace(/\s{1,}\)/,")"); +} + +window.vkbeautify = new vkbeautify(); + +})(); + + +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ +!function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===bo||n[0]===_o?_o+n:n}function s(n){return(n+="")[0]===_o?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=wo.length;r>e;++e){var i=wo[e]+t;if(i in n)return i}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,i=-1,u=r.length;++i<u;)(t=r[i].on)&&t.apply(this,arguments);return n}var e=[],r=new c;return t.on=function(t,i){var u,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,u=e.indexOf(o)).concat(e.slice(u+1)),r.remove(t)),i&&e.push(r.set(t,{on:i})),n)},t}function S(){ao.event.preventDefault()}function k(){for(var n,t=ao.event;n=t.sourceEvent;)t=n;return t}function N(n){for(var t=new _,e=0,r=arguments.length;++e<r;)t[arguments[e]]=w(t);return t.of=function(e,r){return function(i){try{var u=i.sourceEvent=ao.event;i.target=n,ao.event=i,t[i.type].apply(e,r)}finally{ao.event=u}}},t}function E(n){return ko(n,Co),n}function A(n){return"function"==typeof n?n:function(){return No(n,this)}}function C(n){return"function"==typeof n?n:function(){return Eo(n,this)}}function z(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function i(){this.setAttribute(n,t)}function u(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=ao.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?u:i}function L(n){return n.trim().replace(/\s+/g," ")}function q(n){return new RegExp("(?:^|\\s+)"+ao.requote(n)+"(?:\\s+|$)","g")}function T(n){return(n+"").trim().split(/^|\s+/)}function R(n,t){function e(){for(var e=-1;++e<i;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<i;)n[e](this,r)}n=T(n).map(D);var i=n.length;return"function"==typeof t?r:e}function D(n){var t=q(n);return function(e,r){if(i=e.classList)return r?i.add(n):i.remove(n);var i=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(i)||e.setAttribute("class",L(i+" "+n))):e.setAttribute("class",L(i.replace(t," ")))}}function P(n,t,e){function r(){this.style.removeProperty(n)}function i(){this.style.setProperty(n,t,e)}function u(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?u:i}function U(n,t){function e(){delete this[n]}function r(){this[n]=t}function i(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?i:r}function j(n){function t(){var t=this.ownerDocument,e=this.namespaceURI;return e===zo&&t.documentElement.namespaceURI===zo?t.createElement(n):t.createElementNS(e,n)}function e(){return this.ownerDocument.createElementNS(n.space,n.local)}return"function"==typeof n?n:(n=ao.ns.qualify(n)).local?e:t}function F(){var n=this.parentNode;n&&n.removeChild(this)}function H(n){return{__data__:n}}function O(n){return function(){return Ao(this,n)}}function I(n){return arguments.length||(n=e),function(t,e){return t&&e?n(t.__data__,e.__data__):!t-!e}}function Y(n,t){for(var e=0,r=n.length;r>e;e++)for(var i,u=n[e],o=0,a=u.length;a>o;o++)(i=u[o])&&t(i,o,e);return n}function Z(n){return ko(n,qo),n}function V(n){var t,e;return function(r,i,u){var o,a=n[u].update,l=a.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(o=a[t])&&++t<l;);return o}}function X(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function i(){var i=l(t,co(arguments));r.call(this),this.addEventListener(n,this[o]=i,i.$=e),i._=t}function u(){var t,e=new RegExp("^__on([^.]+)"+ao.requote(n)+"$");for(var r in this)if(t=r.match(e)){var i=this[r];this.removeEventListener(t[1],i,i.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),l=$;a>0&&(n=n.slice(0,a));var c=To.get(n);return c&&(n=c,l=B),a?t?i:r:t?b:u}function $(n,t){return function(e){var r=ao.event;ao.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ao.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Do,i="click"+r,u=ao.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ro&&(Ro="onselectstart"in e?!1:x(e.style,"userSelect")),Ro){var o=n(e).style,a=o[Ro];o[Ro]="none"}return function(n){if(u.on(r,null),Ro&&(o[Ro]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(0>Po){var u=t(n);if(u.scrollX||u.scrollY){r=ao.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Po=!(o.f||o.e),r.remove()}}return Po?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ao.event.changedTouches[0].identifier}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:-1>n?Fo:Math.acos(n)}function tn(n){return n>1?Io:-1>n?-Io:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):_n(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(o-u)*n/60:180>n?o:240>n?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=ao.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Yo)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=vn(i)*na,r=vn(r)*ta,u=vn(u)*ea,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Zo,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function vn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function dn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):_n(""+n,mn,cn):new mn(n,t,e)}function Mn(n){return new mn(n>>16,n>>8&255,255&n)}function xn(n){return Mn(n)+""}function bn(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _n(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=ua.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o=o>>4|o,a=240&u,a=a>>4|a,l=15&u,l=l<<4|l):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=.5>l?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=NaN,i=l>0&&1>l?0:r),new ln(r,i,l)}function Sn(n,t,e){n=kn(n),t=kn(t),e=kn(e);var r=dn((.4124564*n+.3575761*t+.1804375*e)/na),i=dn((.2126729*n+.7151522*t+.072175*e)/ta),u=dn((.0193339*n+.119192*t+.9503041*e)/ea);return hn(116*i-16,500*(r-i),200*(i-u))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&300>t||304===t){try{n=e.call(u,l)}catch(r){return void o.error.call(u,r)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=ao.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=ao.event;ao.event=n;try{o.progress.call(u,l)}finally{ao.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(co(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},ao.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var i=e+t,u={c:n,t:i,n:null};return aa?aa.n=u:oa=u,aa=u,la||(ca=clearTimeout(ca),la=1,fa(Tn)),u}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(ca),ca=setTimeout(Tn,t)),la=0):(la=1,fa(Tn))}function Rn(){for(var n=Date.now(),t=oa;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=oa,e=1/0;t;)t.c?(t.t<e&&(e=t.t),t=(n=t).n):t=n?n.n=t.n:oa=t.n;return aa=n,e}function Pn(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Un(n,t){var e=Math.pow(10,3*xo(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function jn(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ha.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,v="",d="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,d="%",p="f";break;case"p":g=100,d="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(v="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(v=i[0],d=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=pa.get(p)||Fn;var M=c&&s;return function(n){var e=d;if(y&&n%1)return"";var i=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>g){var l=ao.formatPrefix(n,h);n=l.scale(n),e=l.symbol+d}else n*=g;n=p(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=m?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!c&&s&&(x=u(x,1/0));var S=v.length+x.length+b.length+(M?0:i.length),k=f>S?new Array(S=f-S+1).join(r):"";return M&&(x=u(k+x,k.length?f-b.length:1/0)),i+=v,n=x+b,("<"===o?i+n+k:">"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(M?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new va(e-1)),1),e}function u(n,e){return t(n=new va(+n),e),n}function o(n,r,u){var o=i(n),a=[];if(u>1)for(;r>o;)e(o)%u||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{va=Hn;var r=new Hn;return r._=n,o(r,t,e)}finally{va=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=o;var l=n.utc=In(n);return l.floor=l,l.round=In(r),l.ceil=In(i),l.offset=In(u),l.range=a,n}function In(n){return function(t,e){try{va=Hn;var r=new Hn;return r._=t,n(r,e)._}finally{va=Date}}}function Yn(n){function t(n){function t(t){for(var e,i,u,o=[],a=-1,l=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.slice(l,a)),null!=(i=ya[e=n.charAt(++a)])&&(e=n.charAt(++a)),(u=A[e])&&(e=u(t,null==i?"e"===e?" ":"0":i)),o.push(e),l=a+1);return o.push(n.slice(l,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},i=e(r,n,t,0);if(i!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var u=null!=r.Z&&va!==Hn,o=new(u?Hn:va);return"j"in r?o.setFullYear(r.y,0,r.j):"W"in r||"U"in r?("w"in r||(r.w="W"in r?1:0),o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+(r.Z/100|0),r.M+r.Z%100,r.S,r.L),u?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var i,u,o,a=0,l=t.length,c=e.length;l>a;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(o=t.charAt(a++),u=C[o in ya?t.charAt(a++):o],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,v=n.days,d=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{va=Hn;var t=new va;return t._=n,r(t)}finally{va=Date}}var r=t(n);return e.parse=function(n){try{va=Hn;var t=r.parse(n);return t&&t._}finally{va=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var M=ao.map(),x=Vn(v),b=Xn(v),_=Vn(d),w=Xn(d),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){M.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ga.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ga.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ga.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=0>n?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Vn(n){return new RegExp("^(?:"+n.map(ao.requote).join("|")+")","i")}function Xn(n){for(var t=new c,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function $n(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Bn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.U=+r[0],e+r[0].length):-1}function Wn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.W=+r[0],e+r[0].length):-1}function Jn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Gn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.y=Qn(+r[0]),e+r[0].length):-1}function Kn(n,t,e){return/^[+-]\d{4}$/.test(t=t.slice(e,e+5))?(n.Z=-t,e+5):-1}function Qn(n){return n+(n>68?1900:2e3)}function nt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=xo(t)/60|0,i=xo(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){Ma.lastIndex=0;var r=Ma.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ft(){}function st(n,t,e){var r=e.s=n+t,i=r-n,u=r-i;e.t=n-u+(t-i)}function ht(n,t){n&&wa.hasOwnProperty(n.type)&&wa[n.type](n,t)}function pt(n,t,e){var r,i=-1,u=n.length-e;for(t.lineStart();++i<u;)r=n[i],t.point(r[0],r[1],r[2]);t.lineEnd()}function gt(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)pt(n[e],t,1);t.polygonEnd()}function vt(){function n(n,t){n*=Yo,t=t*Yo/2+Fo/4;var e=n-r,o=e>=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);ka.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;Na.point=function(o,a){Na.point=n,r=(t=o)*Yo,i=Math.cos(a=(e=a)*Yo/2+Fo/4),u=Math.sin(a)},Na.lineEnd=function(){n(t,e)}}function dt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function bt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function _t(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return xo(n[0]-t[0])<Uo&&xo(n[1]-t[1])<Uo}function St(n,t){n*=Yo;var e=Math.cos(t*=Yo);kt(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function kt(n,t,e){++Ea,Ca+=(n-Ca)/Ea,za+=(t-za)/Ea,La+=(e-La)/Ea}function Nt(){function n(n,i){n*=Yo;var u=Math.cos(i*=Yo),o=u*Math.cos(n),a=u*Math.sin(n),l=Math.sin(i),c=Math.atan2(Math.sqrt((c=e*l-r*a)*c+(c=r*o-t*l)*c+(c=t*a-e*o)*c),t*o+e*a+r*l);Aa+=c,qa+=c*(t+(t=o)),Ta+=c*(e+(e=a)),Ra+=c*(r+(r=l)),kt(t,e,r)}var t,e,r;ja.point=function(i,u){i*=Yo;var o=Math.cos(u*=Yo);t=o*Math.cos(i),e=o*Math.sin(i),r=Math.sin(u),ja.point=n,kt(t,e,r)}}function Et(){ja.point=St}function At(){function n(n,t){n*=Yo;var e=Math.cos(t*=Yo),o=e*Math.cos(n),a=e*Math.sin(n),l=Math.sin(t),c=i*l-u*a,f=u*o-r*l,s=r*a-i*o,h=Math.sqrt(c*c+f*f+s*s),p=r*o+i*a+u*l,g=h&&-nn(p)/h,v=Math.atan2(h,p);Da+=g*c,Pa+=g*f,Ua+=g*s,Aa+=v,qa+=v*(r+(r=o)),Ta+=v*(i+(i=a)),Ra+=v*(u+(u=l)),kt(r,i,u)}var t,e,r,i,u;ja.point=function(o,a){t=o,e=a,ja.point=n,o*=Yo;var l=Math.cos(a*=Yo);r=l*Math.cos(o),i=l*Math.sin(o),u=Math.sin(a),kt(r,i,u)},ja.lineEnd=function(){n(t,e),ja.lineEnd=Et,ja.point=St}}function Ct(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function zt(){return!0}function Lt(n,t,e,r,i){var u=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(wt(e,r)){i.lineStart();for(var a=0;t>a;++a)i.point((e=n[a])[0],e[1]);return void i.lineEnd()}var l=new Tt(e,n,null,!0),c=new Tt(e,null,l,!1);l.o=c,u.push(l),o.push(c),l=new Tt(r,n,null,!1),c=new Tt(r,null,l,!0),l.o=c,u.push(l),o.push(c)}}),o.sort(t),qt(u),qt(o),u.length){for(var a=0,l=e,c=o.length;c>a;++a)o[a].e=l=!l;for(var f,s,h=u[0];;){for(var p=h,g=!0;p.v;)if((p=p.n)===h)return;f=p.z,i.lineStart();do{if(p.v=p.o.v=!0,p.e){if(g)for(var a=0,c=f.length;c>a;++a)i.point((s=f[a])[0],s[1]);else r(p.x,p.n.x,1,i);p=p.n}else{if(g){f=p.p.z;for(var a=f.length-1;a>=0;--a)i.point((s=f[a])[0],s[1])}else r(p.x,p.p.x,-1,i);p=p.p}p=p.o,f=p.z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r<t;)i.n=e=n[r],e.p=i,i=e;i.n=e=n[0],e.p=i}}function Tt(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Rt(n,t,e,r){return function(i,u){function o(t,e){var r=i(t,e);n(t=r[0],e=r[1])&&u.point(t,e)}function a(n,t){var e=i(n,t);d.point(e[0],e[1])}function l(){m.point=a,d.lineStart()}function c(){m.point=o,d.lineEnd()}function f(n,t){v.push([n,t]);var e=i(n,t);x.point(e[0],e[1])}function s(){x.lineStart(),v=[]}function h(){f(v[0][0],v[0][1]),x.lineEnd();var n,t=x.clean(),e=M.buffer(),r=e.length;if(v.pop(),g.push(v),v=null,r)if(1&t){n=e[0];var i,r=n.length-1,o=-1;if(r>0){for(b||(u.polygonStart(),b=!0),u.lineStart();++o<r;)u.point((i=n[o])[0],i[1]);u.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,v,d=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=ao.merge(p);var n=Ot(y,g);p.length?(b||(u.polygonStart(),b=!0),Lt(p,Ut,n,e,u)):n&&(b||(u.polygonStart(),b=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),b&&(u.polygonEnd(),b=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},M=Pt(),x=t(M),b=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ut(n,t){return((n=n.x)[0]<0?n[1]-Io-Uo:Io-n[1])-((t=t.x)[0]<0?t[1]-Io-Uo:Io-t[1])}function jt(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Fo:-Fo,l=xo(u-e);xo(l-Fo)<Uo?(n.point(e,r=(r+o)/2>0?Io:-Io),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Fo&&(xo(e-i)<Uo&&(e-=i*Uo),xo(u-a)<Uo&&(u-=a*Uo),r=Ft(e,r,u,o),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=u,r=o),i=a},lineEnd:function(){n.lineEnd(),e=r=NaN},clean:function(){return 2-t}}}function Ft(n,t,e,r){var i,u,o=Math.sin(n-e);return xo(o)>Uo?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Io,r.point(-Fo,i),r.point(0,i),r.point(Fo,i),r.point(Fo,0),r.point(Fo,-i),r.point(0,-i),r.point(-Fo,-i),r.point(-Fo,0),r.point(-Fo,i);else if(xo(n[0]-t[0])>Uo){var u=n[0]<t[0]?Fo:-Fo;i=e*u/2,r.point(-u,i),r.point(0,i),r.point(u,i)}else r.point(t[0],t[1])}function Ot(n,t){var e=n[0],r=n[1],i=[Math.sin(e),-Math.cos(e),0],u=0,o=0;ka.reset();for(var a=0,l=t.length;l>a;++a){var c=t[a],f=c.length;if(f)for(var s=c[0],h=s[0],p=s[1]/2+Fo/4,g=Math.sin(p),v=Math.cos(p),d=1;;){d===f&&(d=0),n=c[d];var y=n[0],m=n[1]/2+Fo/4,M=Math.sin(m),x=Math.cos(m),b=y-h,_=b>=0?1:-1,w=_*b,S=w>Fo,k=g*M;if(ka.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),u+=S?b+_*Ho:b,S^h>=e^y>=e){var N=mt(dt(s),dt(n));bt(N);var E=mt(i,N);bt(E);var A=(S^b>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=y,g=M,v=x,s=n}}return(-Uo>u||Uo>u&&-Uo>ka)^1&o}function It(n){function t(n,t){return Math.cos(n)*Math.cos(t)>u}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],v=t(s,h),d=o?v?0:i(s,h):v?i(s+(0>s?Fo:-Fo),h):0;if(!e&&(c=l=v)&&n.lineStart(),v!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Uo,g[1]+=Uo,v=t(g[0],g[1]))),v!==l)f=0,v?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^v){var y;d&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!v||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=v,u=d},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=dt(n),i=dt(t),o=[1,0,0],a=mt(r,i),l=yt(a,a),c=a[0],f=l-c*c;if(!f)return!e&&n;var s=u*l/f,h=-u*c/f,p=mt(o,a),g=xt(o,s),v=xt(a,h);Mt(g,v);var d=p,y=yt(g,d),m=yt(d,d),M=y*y-m*(yt(g,g)-1);if(!(0>M)){var x=Math.sqrt(M),b=xt(d,(-y-x)/m);if(Mt(b,g),b=_t(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],N=t[1];w>S&&(_=w,w=S,S=_);var E=S-w,A=xo(E-Fo)<Uo,C=A||Uo>E;if(!A&&k>N&&(_=k,k=N,N=_),C?A?k+N>0^b[1]<(xo(b[0]-w)<Uo?k:N):k<=b[1]&&b[1]<=N:E>Fo^(w<=b[0]&&b[0]<=S)){var z=xt(d,(-y+x)/m);return Mt(z,g),[b,_t(z)]}}}function i(t,e){var r=o?n:Fo-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=xo(u)>Uo,l=ve(n,6*Yo);return Rt(t,e,l,o?[0,-n]:[-Fo,n-Fo])}function Yt(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=a.x,s=a.y,h=0,p=1,g=f-l,v=s-c;if(u=n-l,g||!(u>0)){if(u/=g,0>g){if(h>u)return;p>u&&(p=u)}else if(g>0){if(u>p)return;u>h&&(h=u)}if(u=e-l,g||!(0>u)){if(u/=g,0>g){if(u>p)return;u>h&&(h=u)}else if(g>0){if(h>u)return;p>u&&(p=u)}if(u=t-c,v||!(u>0)){if(u/=v,0>v){if(h>u)return;p>u&&(p=u)}else if(v>0){if(u>p)return;u>h&&(h=u)}if(u=r-c,v||!(0>u)){if(u/=v,0>v){if(u>p)return;u>h&&(h=u)}else if(v>0){if(h>u)return;p>u&&(p=u)}return h>0&&(i.a={x:l+h*g,y:c+h*v}),1>p&&(i.b={x:l+p*g,y:c+p*v}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return xo(r[0]-n)<Uo?i>0?0:3:xo(r[0]-e)<Uo?i>0?2:1:xo(r[1]-t)<Uo?i>0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=d.length,r=n[1],i=0;e>i;++i)for(var u,o=1,a=d[i],l=a.length,c=a[0];l>o;++o)u=a[o],c[1]<=r?u[1]>r&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0){do c.point(0===f||3===f?n:e,f>1?r:t);while((f=(f+l+4)%4)!==s)}else c.point(a[0],a[1])}function f(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,d&&d.push(y=[]),S=!0,w=!1,b=_=NaN}function p(){v&&(g(m,M),x&&w&&E.rejoin(),v.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){n=Math.max(-Ha,Math.min(Ha,n)),t=Math.max(-Ha,Math.min(Ha,t));var e=f(n,t);if(d&&y.push([n,t]),S)m=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,y,m,M,x,b,_,w,S,k,N=a,E=Pt(),A=Yt(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,v=[],d=[],k=!0},polygonEnd:function(){a=N,v=ao.merge(v);var t=l([n,r]),e=k&&t,i=v.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(v,u,t,c,a),a.polygonEnd()),v=d=y=null}};return C}}function Vt(n){var t=0,e=Fo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Fo/180,e=n[1]*Fo/180):[t/Fo*180,e/Fo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){Ia+=i*n-r*t,r=n,i=t}var t,e,r,i;$a.point=function(u,o){$a.point=n,t=r=u,e=i=o},$a.lineEnd=function(){n(t,e)}}function Bt(n,t){Ya>n&&(Ya=n),n>Va&&(Va=n),Za>t&&(Za=t),t>Xa&&(Xa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){Ca+=n,za+=t,++La}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);qa+=o*(t+n)/2,Ta+=o*(e+r)/2,Ra+=o,Gt(t=n,e=r)}var t,e;Wa.point=function(r,i){Wa.point=n,Gt(t=r,e=i)}}function Qt(){Wa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);qa+=o*(r+n)/2,Ta+=o*(i+t)/2,Ra+=o,o=i*n-r*t,Da+=o*(r+n),Pa+=o*(i+t),Ua+=3*o,Gt(r=n,i=t)}var t,e,r,i;Wa.point=function(u,o){Wa.point=n,Gt(t=r=u,e=i=o)},Wa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Ho)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=NaN,S.point=u,t.lineStart()}function u(e,r){var u=dt([e,r]),o=n(e,r);i(M,x,m,b,_,w,M=o[0],x=o[1],m=e,b=u[0],_=u[1],w=u[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function l(){ +r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=M,g=x,v=b,d=_,y=w,S.point=u}function f(){i(M,x,m,b,_,w,p,g,s,v,d,y,a,t),S.lineEnd=o,o()}var s,h,p,g,v,d,y,m,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,v,d,y){var m=f-t,M=s-e,x=m*m+M*M;if(x>4*u&&d--){var b=a+p,_=l+g,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=xo(xo(w)-1)<Uo||xo(r-h)<Uo?(r+h)/2:Math.atan2(_,b),E=n(N,k),A=E[0],C=E[1],z=A-t,L=C-e,q=M*z-m*L;(q*q/x>u||xo((m*z+M*L)/x-.5)>.3||o>a*p+l*g+c*v)&&(i(t,e,r,a,l,c,A,C,N,b/=S,_/=S,w,d,y),y.point(A,C),i(A,C,N,b,_,w,f,s,h,p,g,v,d,y))}}var u=.5,o=Math.cos(30*Yo),a=16;return t.precision=function(n){return arguments.length?(a=(u=n*n)>0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Zo,e*Zo])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Yo,n[1]*Yo),[n[0]*h+l,c-n[1]*h]}function e(n){return n=a.invert((n[0]-l)/h,(c-n[1])/h),n&&[n[0]*Zo,n[1]*Zo]}function r(){a=Ct(o=se(y,M,x),u);var n=u(v,d);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,v=0,d=0,y=0,M=0,x=0,b=Fa,_=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(b(o,s(_(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Fa):It((w=+n)*Yo),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(v=n[0]%360*Yo,d=n[1]%360*Yo,r()):[v*Zo,d*Zo]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Yo,M=n[1]%360*Yo,x=n.length>2?n[2]%360*Yo:0,r()):[y*Zo,M*Zo,x*Zo]},ao.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Yo,e*Yo)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Fo?n-Ho:-Fo>n?n+Ho:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Fo?t-Ho:-Fo>t?t+Ho:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function ve(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=de(e,i),u=de(e,u),(o>0?u>i:i>u)&&(i+=o*Ho)):(i=n+o*Ho,u=n-.5*l);for(var c,f=i;o>0?f>u:u>f;f-=l)a.point((c=_t([e,-r*Math.cos(f),-r*Math.sin(f)]))[0],c[1])}}function de(n,t){var e=dt(t);e[0]-=n,bt(e);var r=nn(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Uo)%(2*Math.PI)}function ye(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function me(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function Me(n){return n.source}function xe(n){return n.target}function be(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),o=Math.cos(r),a=Math.sin(r),l=i*Math.cos(n),c=i*Math.sin(n),f=o*Math.cos(e),s=o*Math.sin(e),h=2*Math.asin(Math.sqrt(on(r-t)+i*o*on(e-n))),p=1/Math.sin(h),g=h?function(n){var t=Math.sin(n*=h)*p,e=Math.sin(h-n)*p,r=e*l+t*f,i=e*c+t*s,o=e*u+t*a;return[Math.atan2(i,r)*Zo,Math.atan2(o,Math.sqrt(r*r+i*i))*Zo]}:function(){return[n*Zo,t*Zo]};return g.distance=h,g}function _e(){function n(n,i){var u=Math.sin(i*=Yo),o=Math.cos(i),a=xo((n*=Yo)-t),l=Math.cos(a);Ja+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*u-e*o*l)*a),e*u+r*o*l),t=n,e=u,r=o}var t,e,r;Ga.point=function(i,u){t=i*Yo,e=Math.sin(u*=Yo),r=Math.cos(u),Ga.point=n},Ga.lineEnd=function(){Ga.point=Ga.lineEnd=b}}function we(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),o=Math.cos(i);return[Math.atan2(n*u,r*o),Math.asin(r&&e*u/r)]},e}function Se(n,t){function e(n,t){o>0?-Io+Uo>t&&(t=-Io+Uo):t>Io-Uo&&(t=Io-Uo);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Fo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Io]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return xo(i)<Uo?ce:(e.invert=function(n,t){var e=u-t;return[Math.atan2(n,e)/i,u-K(i)*Math.sqrt(n*n+e*e)]},e)}function Ne(n,t){return[n,Math.log(Math.tan(Fo/4+t/2))]}function Ee(n){var t,e=oe(n),r=e.scale,i=e.translate,u=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=i.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=u.apply(e,arguments);if(o===e){if(t=null==n){var a=Fo*r(),l=i();u([[l[0]-a,l[1]-a],[l[0]+a,l[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function Ae(n,t){return[Math.log(Math.tan(Fo/4+t/2)),-n]}function Ce(n){return n[0]}function ze(n){return n[1]}function Le(n){for(var t=n.length,e=[0,1],r=2,i=2;t>i;i++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function Ue(n){var t=cl.pop()||new Pe;return t.site=n,t}function je(n){Be(n),ol.remove(n),cl.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];je(n);for(var l=u;l.circle&&xo(e-l.circle.x)<Uo&&xo(r-l.circle.cy)<Uo;)u=l.P,a.unshift(l),je(l),l=u;a.unshift(l),Be(l);for(var c=o;c.circle&&xo(e-c.circle.x)<Uo&&xo(r-c.circle.cy)<Uo;)o=c.N,a.push(c),je(c),c=o;a.push(c),Be(c);var f,s=a.length;for(f=1;s>f;++f)c=a[f],l=a[f-1],nr(c.edge,l.site,c.site,i);l=a[0],c=a[s-1],c.edge=Ke(l.site,c.site,null,i),$e(l),$e(c)}function He(n){for(var t,e,r,i,u=n.x,o=n.y,a=ol._;a;)if(r=Oe(a,o)-u,r>Uo)a=a.L;else{if(i=u-Ie(a,o),!(i>Uo)){r>-Uo?(t=a.P,e=a):i>-Uo?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=Ue(n);if(ol.insert(t,l),t||e){if(t===e)return Be(t),e=Ue(t.site),ol.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(!e)return void(l.edge=Ke(t.site,l.site));Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,v=g.x-f,d=g.y-s,y=2*(h*d-p*v),m=h*h+p*p,M=v*v+d*d,x={x:(d*m-p*M)/y+f,y:(h*M-v*m)/y+s};nr(e.edge,c,g,x),l.edge=Ke(c,n,null,x),e.edge=Ke(n,g,null,x),$e(t),$e(e)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-(1/0);e=o.site;var a=e.x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ie(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ye(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],v=ul,d=v.length;d--;)if(u=v[d],u&&u.prepare())for(a=u.edges,l=a.length,o=0;l>o;)f=a[o].end(),r=f.x,i=f.y,c=a[++o%l].start(),t=c.x,e=c.y,(xo(r-t)>Uo||xo(i-e)>Uo)&&(a.splice(o,0,new tr(Qe(u.site,f,xo(r-s)<Uo&&g-i>Uo?{x:s,y:xo(t-s)<Uo?e:g}:xo(i-g)<Uo&&h-r>Uo?{x:xo(e-g)<Uo?t:h,y:g}:xo(r-h)<Uo&&i-p>Uo?{x:h,y:xo(t-h)<Uo?e:p}:xo(i-p)<Uo&&r-s>Uo?{x:xo(e-p)<Uo?t:s,y:p}:null),u.site,null)),++l)}function Ve(n,t){return t.angle-n.angle}function Xe(){rr(this),this.x=this.y=this.arc=this.site=this.cy=null}function $e(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,i=n.site,u=e.site;if(r!==u){var o=i.x,a=i.y,l=r.x-o,c=r.y-a,f=u.x-o,s=u.y-a,h=2*(l*s-c*f);if(!(h>=-jo)){var p=l*l+c*c,g=f*f+s*s,v=(s*p-c*g)/h,d=(l*g-f*p)/h,s=d+a,y=fl.pop()||new Xe;y.arc=n,y.site=i,y.x=v+o,y.y=s+Math.sqrt(v*v+d*d),y.cy=s,n.circle=y;for(var m=null,M=ll._;M;)if(y.y<M.y||y.y===M.y&&y.x<=M.x){if(!M.L){m=M.P;break}M=M.L}else{if(!M.R){m=M;break}M=M.R}ll.insert(m,y),m||(al=y)}}}}function Be(n){var t=n.circle;t&&(t.P||(al=t.N),ll.remove(t),fl.push(t),rr(t),n.circle=null)}function We(n){for(var t,e=il,r=Yt(n[0][0],n[0][1],n[1][0],n[1][1]),i=e.length;i--;)t=e[i],(!Je(t,n)||!r(t)||xo(t.a.x-t.b.x)<Uo&&xo(t.a.y-t.b.y)<Uo)&&(t.a=t.b=null,e.splice(i,1))}function Je(n,t){var e=n.b;if(e)return!0;var r,i,u=n.a,o=t[0][0],a=t[1][0],l=t[0][1],c=t[1][1],f=n.l,s=n.r,h=f.x,p=f.y,g=s.x,v=s.y,d=(h+g)/2,y=(p+v)/2;if(v===p){if(o>d||d>=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:d,y:l};e={x:d,y:c}}else{if(u){if(u.y<l)return}else u={x:d,y:c};e={x:d,y:l}}}else if(r=(h-g)/(v-p),i=y-r*d,-1>r||r>1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.y<l)return}else u={x:(c-i)/r,y:c};e={x:(l-i)/r,y:l}}else if(v>p){if(u){if(u.x>=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.x<o)return}else u={x:a,y:r*a+i};e={x:o,y:r*o+i}}return n.a=u,n.b=e,!0}function Ge(n,t){this.l=n,this.r=t,this.a=this.b=null}function Ke(n,t,e,r){var i=new Ge(n,t);return il.push(i),e&&nr(i,n,t,e),r&&nr(i,t,n,r),ul[n.i].edges.push(new tr(i,n,t)),ul[t.i].edges.push(new tr(i,t,n)),i}function Qe(n,t,e){var r=new Ge(n,null);return r.a=t,r.b=e,il.push(r),r}function nr(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function tr(n,t,e){var r=n.a,i=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(i.x-r.x,r.y-i.y):Math.atan2(r.x-i.x,i.y-r.y)}function er(){this._=null}function rr(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function ir(n,t){var e=t,r=t.R,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function ur(n,t){var e=t,r=t.L,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function or(n){for(;n.L;)n=n.L;return n}function ar(n,t){var e,r,i,u=n.sort(lr).pop();for(il=[],ul=new Array(n.length),ol=new er,ll=new er;;)if(i=al,u&&(!i||u.y<i.y||u.y===i.y&&u.x<i.x))u.x===e&&u.y===r||(ul[u.i]=new Ye(u),He(u),e=u.x,r=u.y),u=n.pop();else{if(!i)break;Fe(i.arc)}t&&(We(t),Ze(t));var o={cells:ul,edges:il};return ol=ll=il=ul=null,o}function lr(n,t){return t.y-n.y||t.x-n.x}function cr(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function fr(n){return n.x}function sr(n){return n.y}function hr(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function pr(n,t,e,r,i,u){if(!n(t,e,r,i,u)){var o=.5*(e+i),a=.5*(r+u),l=t.nodes;l[0]&&pr(n,l[0],e,r,o,a),l[1]&&pr(n,l[1],o,r,i,a),l[2]&&pr(n,l[2],e,a,o,u),l[3]&&pr(n,l[3],o,a,i,u)}}function gr(n,t,e,r,i,u,o){var a,l=1/0;return function c(n,f,s,h,p){if(!(f>u||s>o||r>h||i>p)){if(g=n.point){var g,v=t-n.x,d=e-n.y,y=v*v+d*d;if(l>y){var m=Math.sqrt(l=y);r=t-m,i=e-m,u=t+m,o=e+m,a=g}}for(var M=n.nodes,x=.5*(f+h),b=.5*(s+p),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:c(n,f,s,x,b);break;case 1:c(n,x,s,h,b);break;case 2:c(n,f,b,x,p);break;case 3:c(n,x,b,h,p)}}}(n,r,i,u,o),a}function vr(n,t){n=ao.rgb(n),t=ao.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,o=t.g-r,a=t.b-i;return function(n){return"#"+bn(Math.round(e+u*n))+bn(Math.round(r+o*n))+bn(Math.round(i+a*n))}}function dr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=Mr(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function yr(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function mr(n,t){var e,r,i,u=hl.lastIndex=pl.lastIndex=0,o=-1,a=[],l=[];for(n+="",t+="";(e=hl.exec(n))&&(r=pl.exec(t));)(i=r.index)>u&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:yr(e,r)})),u=pl.lastIndex;return u<t.length&&(i=t.slice(u),a[o]?a[o]+=i:a[++o]=i),a.length<2?l[0]?(t=l[0].x,function(n){return t(n)+""}):function(){return t}:(t=l.length,function(n){for(var e,r=0;t>r;++r)a[(e=l[r]).i]=e.x(n);return a.join("")})}function Mr(n,t){for(var e,r=ao.interpolators.length;--r>=0&&!(e=ao.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(Mr(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;o>e;++e)i[e]=t[e];return function(n){for(e=0;a>e;++e)i[e]=r[e](n);return i}}function br(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function wr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function Sr(n){return n*n}function kr(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Er(n){return function(t){return Math.pow(t,n)}}function Ar(n){return 1-Math.cos(n*Io)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Lr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ho*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ho/t)}}function qr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Tr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=ao.hcl(n),t=ao.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=ao.hsl(n),t=ao.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){n=ao.lab(n),t=ao.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Hr(t),i=Fr(t,e),u=Hr(Or(e,t,-i))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,i*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Zo,this.translate=[n.e,n.f],this.scale=[r,u],this.skew=u?Math.atan2(i,u)*Zo:0}function Fr(n,t){return n[0]*t[0]+n[1]*t[1]}function Hr(n){var t=Math.sqrt(Fr(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Or(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Ir(n){return n.length?n.pop()+",":""}function Yr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push("translate(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else(t[0]||t[1])&&e.push("translate("+t+")")}function Zr(n,t,e,r){n!==t?(n-t>180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+"rotate(",null,")")-2,x:yr(n,t)})):t&&e.push(Ir(e)+"rotate("+t+")")}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+"skewX(",null,")")-2,x:yr(n,t)}):t&&e.push(Ir(e)+"skewX("+t+")")}function Xr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Ir(e)+"scale(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Ir(e)+"scale("+t+")")}function $r(n,t){var e=[],r=[];return n=ao.transform(n),t=ao.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i<u;)e[(t=r[i]).i]=t.x(n);return e.join("")}}function Br(n,t){return t=(t-=n=+n)||1/t,function(e){return(e-n)/t}}function Wr(n,t){return t=(t-=n=+n)||1/t,function(e){return Math.max(0,Math.min(1,(e-n)/t))}}function Jr(n){for(var t=n.source,e=n.target,r=Kr(t,e),i=[t];t!==r;)t=t.parent,i.push(t);for(var u=i.length;e!==r;)i.splice(u,0,e),e=e.parent;return i}function Gr(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Kr(n,t){if(n===t)return n;for(var e=Gr(n),r=Gr(t),i=e.pop(),u=r.pop(),o=null;i===u;)o=i,i=e.pop(),u=r.pop();return o}function Qr(n){n.fixed|=2}function ni(n){n.fixed&=-7}function ti(n){n.fixed|=4,n.px=n.x,n.py=n.y}function ei(n){n.fixed&=-5}function ri(n,t,e){var r=0,i=0;if(n.charge=0,!n.leaf)for(var u,o=n.nodes,a=o.length,l=-1;++l<a;)u=o[l],null!=u&&(ri(u,t,e),n.charge+=u.charge,r+=u.charge*u.cx,i+=u.charge*u.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var c=t*e[n.point.index];n.charge+=n.pointCharge=c,r+=c*n.point.x,i+=c*n.point.y}n.cx=r/n.charge,n.cy=i/n.charge}function ii(n,t){return ao.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=fi,n}function ui(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(i=n.children)&&(r=i.length))for(var r,i;--r>=0;)e.push(i[r])}function oi(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++o<i;)e.push(u[o]);for(;null!=(n=r.pop());)t(n)}function ai(n){return n.children}function li(n){return n.value}function ci(n,t){return t.value-n.value}function fi(n){return ao.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function si(n){return n.x}function hi(n){return n.y}function pi(n,t,e){n.y0=t,n.y=e}function gi(n){return ao.range(n.length)}function vi(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function di(n){for(var t,e=1,r=0,i=n[0][1],u=n.length;u>e;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function yi(n){return n.reduce(mi,0)}function mi(n,t){return n+t[1]}function Mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function bi(n){return[ao.min(n),ao.max(n)]}function _i(n,t){return n.value-t.value}function wi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Si(n,t){n._pack_next=t,t._pack_prev=n}function ki(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ni(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-(1/0),h=1/0,p=-(1/0);if(e.forEach(Ei),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(u=e[2],zi(r,i,u),t(u),wi(r,u),r._pack_prev=u,wi(u,i),i=r._pack_next,o=3;c>o;o++){zi(r,i,u=e[o]);var g=0,v=1,d=1;for(a=i._pack_next;a!==i;a=a._pack_next,v++)if(ki(a,u)){g=1;break}if(1==g)for(l=r._pack_prev;l!==a._pack_prev&&!ki(l,u);l=l._pack_prev,d++);g?(d>v||v==d&&i.r<r.r?Si(r,i=a):Si(r=l,i),o--):(wi(r,u),i=u,t(u))}var y=(f+s)/2,m=(h+p)/2,M=0;for(o=0;c>o;o++)u=e[o],u.x-=y,u.y-=m,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(Ai)}}function Ei(n){n._pack_next=n._pack_prev=n}function Ai(n){delete n._pack_next,delete n._pack_prev}function Ci(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,o=i.length;++u<o;)Ci(i[u],t,e,r)}function zi(n,t,e){var r=n.r+e.r,i=t.x-n.x,u=t.y-n.y;if(r&&(i||u)){var o=t.r+e.r,a=i*i+u*u;o*=o,r*=r;var l=.5+(r-o)/(2*a),c=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+l*i+c*u,e.y=n.y+l*u-c*i}else e.x=n.x+r,e.y=n.y}function Li(n,t){return n.parent==t.parent?1:2}function qi(n){var t=n.children;return t.length?t[0]:n.t}function Ti(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function Ri(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function Di(n){for(var t,e=0,r=0,i=n.children,u=i.length;--u>=0;)t=i[u],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Pi(n,t,e){return n.a.parent===t.parent?n.a:e}function Ui(n){return 1+ao.max(n,function(n){return n.y})}function ji(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Fi(n){var t=n.children;return t&&t.length?Fi(t[0]):n}function Hi(n){var t,e=n.children;return e&&(t=e.length)?Hi(e[t-1]):n}function Oi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ii(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Yi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Zi(n){return n.rangeExtent?n.rangeExtent():Yi(n.range())}function Vi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Xi(n,t){var e,r=0,i=n.length-1,u=n[r],o=n[i];return u>o&&(e=r,r=i,i=e,e=u,u=o,o=e),n[r]=t.floor(u),n[i]=t.ceil(o),n}function $i(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:Sl}function Bi(n,t,e,r){var i=[],u=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)i.push(e(n[o-1],n[o])),u.push(r(t[o-1],t[o]));return function(t){var e=ao.bisect(n,t,1,a)-1;return u[e](i[e](t))}}function Wi(n,t,e,r){function i(){var i=Math.min(n.length,t.length)>2?Bi:Vi,l=r?Wr:Br;return o=i(n,t,l,e),a=i(t,n,l,Mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Ur)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return ao.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Xi(n,$i(Ki(n,t)[2])),Xi(n,$i(Ki(n,t)[2])),n}function Ki(n,t){null==t&&(t=10);var e=Yi(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ao.range.apply(ao,Ki(n,t))}function nu(n,t,e){var r=Ki(n,t);if(e){var i=ha.exec(e);if(i.shift(),"s"===i[8]){var u=ao.formatPrefix(Math.max(xo(r[0]),xo(r[1])));return i[7]||(i[7]="."+tu(u.scale(r[2]))),i[8]="f",e=ao.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+eu(i[8],r)),e=i.join("")}else e=",."+tu(r[2])+"f";return ao.format(e)}function tu(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function eu(n,t){var e=tu(t[2]);return n in kl?Math.abs(e-tu(Math.max(xo(t[0]),xo(t[1]))))+ +("e"!==n):e-2*("%"===n)}function ru(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Xi(r.map(i),e?Math:El);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=Yi(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;f>c;c++)for(var h=1;s>h;h++)o.push(u(c)*h);o.push(u(c))}else for(o.push(u(c));c++<f;)for(var h=s-1;h>0;h--)o.push(u(c)*h);for(c=0;o[c]<a;c++);for(f=o.length;o[f-1]>l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return Nl;arguments.length<2?e=Nl:"function"!=typeof e&&(e=ao.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return t-.5>o*t&&(o*=t),r>=o?e(n):""}},o.copy=function(){return ru(n.copy(),t,e,r)},Ji(o,n)}function iu(n,t,e){function r(t){return n(i(t))}var i=uu(t),u=uu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return Qi(e,n)},r.tickFormat=function(n,t){return nu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(o){return arguments.length?(i=uu(t=o),u=uu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return iu(n.copy(),t,e)},Ji(r,n)}function uu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function ou(n,t){function e(e){return u[((i.get(e)||("range"===t.t?i.set(e,n.push(e)):NaN))-1)%u.length]}function r(t,e){return ao.range(n.length).map(function(n){return t+e*n})}var i,u,o;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new c;for(var u,o=-1,a=r.length;++o<a;)i.has(u=r[o])||i.set(u,n.push(u));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(u=n,o=0,t={t:"range",a:arguments},e):u},e.rangePoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=(l+c)/2,0):(c-l)/(n.length-1+a);return u=r(l+f*a/2,f),o=0,t={t:"rangePoints",a:arguments},e},e.rangeRoundPoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=c=Math.round((l+c)/2),0):(c-l)/(n.length-1+a)|0;return u=r(l+Math.round(f*a/2+(c-l-(n.length-1+a)*f)/2),f),o=0,t={t:"rangeRoundPoints",a:arguments},e},e.rangeBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=(s-f)/(n.length-a+2*l);return u=r(f+h*l,h),c&&u.reverse(),o=h*(1-a),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=Math.floor((s-f)/(n.length-a+2*l));return u=r(f+Math.round((s-f-(n.length-a)*h)/2),h),c&&u.reverse(),o=Math.round(h*(1-a)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return Yi(t.a[0])},e.copy=function(){return ou(n,t)},e.domain(n)}function au(n,t){function u(){var e=0,r=t.length;for(a=[];++e<r;)a[e-1]=ao.quantile(n,e/r);return o}function o(n){return isNaN(n=+n)?void 0:t[ao.bisect(a,n)]}var a;return o.domain=function(t){return arguments.length?(n=t.map(r).filter(i).sort(e),u()):n},o.range=function(n){return arguments.length?(t=n,u()):t},o.quantiles=function(){return a},o.invertExtent=function(e){return e=t.indexOf(e),0>e?[NaN,NaN]:[e>0?a[e-1]:n[0],e<a.length?a[e]:n[n.length-1]]},o.copy=function(){return au(n,t)},u()}function lu(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(u*(t-n))))]}function i(){return u=e.length/(t-n),o=e.length-1,r}var u,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],i()):[n,t]},r.range=function(n){return arguments.length?(e=n,i()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?NaN:t/u+n,[t,t+1/u]},r.copy=function(){return lu(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[ao.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function fu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Qi(n,t)},t.tickFormat=function(t,e){return nu(n,t,e)},t.copy=function(){return fu(n)},t}function su(){return 0}function hu(n){return n.innerRadius}function pu(n){return n.outerRadius}function gu(n){return n.startAngle}function vu(n){return n.endAngle}function du(n){return n&&n.padAngle}function yu(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function mu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,v=(s+p)/2,d=h-f,y=p-s,m=d*d+y*y,M=e-r,x=f*p-h*s,b=(0>y?-1:1)*Math.sqrt(Math.max(0,M*M*m-x*x)),_=(x*y-d*b)/m,w=(-x*d-y*b)/m,S=(x*y+d*b)/m,k=(-x*d+y*b)/m,N=_-g,E=w-v,A=S-g,C=k-v;return N*N+E*E>A*A+C*C&&(_=S,w=k),[[_-l,w-c],[_*e/M,w*e/M]]}function Mu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s<h;)i.call(this,l=t[s],s)?f.push([+p.call(this,l,s),+g.call(this,l,s)]):f.length&&(o(),f=[]);return f.length&&o(),c.length?c.join(""):null}var e=Ce,r=ze,i=zt,u=xu,o=u.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(i=n,t):i},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?u=n:(u=Tl.get(n)||xu).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function xu(n){return n.length>1?n.join("L"):n+"Z"}function bu(n){return n.join("L")+"Z"}function _u(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&i.push("H",r[0]),i.join("")}function wu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("V",(r=n[t])[1],"H",r[0]);return i.join("")}function Su(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r=n[t])[0],"V",r[1]);return i.join("")}function ku(n,t){return n.length<4?xu(n):n[1]+Au(n.slice(1,-1),Cu(n,t))}function Nu(n,t){return n.length<3?bu(n):n[0]+Au((n.push(n[0]),n),Cu([n[n.length-2]].concat(n,[n[1]]),t))}function Eu(n,t){return n.length<3?xu(n):n[0]+Au(n,Cu(n,t))}function Au(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return xu(n);var e=n.length!=t.length,r="",i=n[0],u=n[1],o=t[0],a=o,l=1;if(e&&(r+="Q"+(u[0]-2*o[0]/3)+","+(u[1]-2*o[1]/3)+","+u[0]+","+u[1],i=n[1],l=2),t.length>1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c<t.length;c++,l++)u=n[l],a=t[c],r+="S"+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1]}if(e){var f=n[l];r+="Q"+(u[0]+2*a[0]/3)+","+(u[1]+2*a[1]/3)+","+f[0]+","+f[1]}return r}function Cu(n,t){for(var e,r=[],i=(1-t)/2,u=n[0],o=n[1],a=1,l=n.length;++a<l;)e=u,u=o,o=n[a],r.push([i*(o[0]-e[0]),i*(o[1]-e[1])]);return r}function zu(n){if(n.length<3)return xu(n);var t=1,e=n.length,r=n[0],i=r[0],u=r[1],o=[i,i,i,(r=n[1])[0]],a=[u,u,u,r[1]],l=[i,",",u,"L",Ru(Pl,o),",",Ru(Pl,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),Du(l,o,a);return n.pop(),l.push("L",r),l.join("")}function Lu(n){if(n.length<4)return xu(n);for(var t,e=[],r=-1,i=n.length,u=[0],o=[0];++r<3;)t=n[r],u.push(t[0]),o.push(t[1]);for(e.push(Ru(Pl,u)+","+Ru(Pl,o)),--r;++r<i;)t=n[r],u.shift(),u.push(t[0]),o.shift(),o.push(t[1]),Du(e,u,o);return e.join("")}function qu(n){for(var t,e,r=-1,i=n.length,u=i+4,o=[],a=[];++r<4;)e=n[r%i],o.push(e[0]),a.push(e[1]);for(t=[Ru(Pl,o),",",Ru(Pl,a)],--r;++r<u;)e=n[r%i],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),Du(t,o,a);return t.join("")}function Tu(n,t){var e=n.length-1;if(e)for(var r,i,u=n[0][0],o=n[0][1],a=n[e][0]-u,l=n[e][1]-o,c=-1;++c<=e;)r=n[c],i=c/e,r[0]=t*r[0]+(1-t)*(u+i*a),r[1]=t*r[1]+(1-t)*(o+i*l);return zu(n)}function Ru(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function Du(n,t,e){n.push("C",Ru(Rl,t),",",Ru(Rl,e),",",Ru(Dl,t),",",Ru(Dl,e),",",Ru(Pl,t),",",Ru(Pl,e))}function Pu(n,t){return(t[1]-n[1])/(t[0]-n[0])}function Uu(n){for(var t=0,e=n.length-1,r=[],i=n[0],u=n[1],o=r[0]=Pu(i,u);++t<e;)r[t]=(o+(o=Pu(i=u,u=n[t+1])))/2;return r[t]=o,r}function ju(n){for(var t,e,r,i,u=[],o=Uu(n),a=-1,l=n.length-1;++a<l;)t=Pu(n[a],n[a+1]),xo(t)<Uo?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,i=e*e+r*r,i>9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r));for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Fu(n){return n.length<3?xu(n):n[0]+Au(n,ju(n))}function Hu(n){for(var t,e,r,i=-1,u=n.length;++i<u;)t=n[i],e=t[0],r=t[1]-Io,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Ou(n){function t(t){function l(){v.push("M",a(n(y),s),f,c(n(d.reverse()),s),"Z")}for(var h,p,g,v=[],d=[],y=[],m=-1,M=t.length,x=En(e),b=En(i),_=e===r?function(){ +return p}:En(r),w=i===u?function(){return g}:En(u);++m<M;)o.call(this,h=t[m],m)?(d.push([p=+x.call(this,h,m),g=+b.call(this,h,m)]),y.push([+_.call(this,h,m),+w.call(this,h,m)])):d.length&&(l(),d=[],y=[]);return d.length&&l(),v.length?v.join(""):null}var e=Ce,r=Ce,i=0,u=ze,o=zt,a=xu,l=a.key,c=a,f="L",s=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(i=u=n,t):u},t.y0=function(n){return arguments.length?(i=n,t):i},t.y1=function(n){return arguments.length?(u=n,t):u},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(l="function"==typeof n?a=n:(a=Tl.get(n)||xu).key,c=a.reverse||a,f=a.closed?"M":"L",t):l},t.tension=function(n){return arguments.length?(s=n,t):s},t}function Iu(n){return n.radius}function Yu(n){return[n.x,n.y]}function Zu(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]-Io;return[e*Math.cos(r),e*Math.sin(r)]}}function Vu(){return 64}function Xu(){return"circle"}function $u(n){var t=Math.sqrt(n/Fo);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Bu(n){return function(){var t,e,r;(t=this[n])&&(r=t[e=t.active])&&(r.timer.c=null,r.timer.t=NaN,--t.count?delete t[e]:delete this[n],t.active+=.5,r.event&&r.event.interrupt.call(this,this.__data__,r.index))}}function Wu(n,t,e){return ko(n,Yl),n.namespace=t,n.id=e,n}function Ju(n,t,e,r){var i=n.id,u=n.namespace;return Y(n,"function"==typeof e?function(n,o,a){n[u][i].tween.set(t,r(e.call(n,n.__data__,o,a)))}:(e=r(e),function(n){n[u][i].tween.set(t,e)}))}function Gu(n){return null==n&&(n=""),function(){this.textContent=n}}function Ku(n){return null==n?"__transition__":"__transition_"+n+"__"}function Qu(n,t,e,r,i){function u(n){var t=v.delay;return f.t=t+l,n>=t?o(n-t):void(f.c=o)}function o(e){var i=g.active,u=g[i];u&&(u.timer.c=null,u.timer.t=NaN,--g.count,delete g[i],u.event&&u.event.interrupt.call(n,n.__data__,u.index));for(var o in g)if(r>+o){var c=g[o];c.timer.c=null,c.timer.t=NaN,--g.count,delete g[o]}f.c=a,qn(function(){return f.c&&a(e||1)&&(f.c=null,f.t=NaN),1},0,l),g.active=r,v.event&&v.event.start.call(n,n.__data__,t),p=[],v.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&p.push(r)}),h=v.ease,s=v.duration}function a(i){for(var u=i/s,o=h(u),a=p.length;a>0;)p[--a].call(n,o);return u>=1?(v.event&&v.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1):void 0}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),v=g[r];v||(l=i.time,f=qn(u,0,l),v=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function no(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function to(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function eo(n){return n.toISOString()}function ro(n,t,e){function r(t){return n(t)}function i(n,e){var r=n[1]-n[0],i=r/e,u=ao.bisect(Kl,i);return u==Kl.length?[t.year,Ki(n.map(function(n){return n/31536e6}),e)[2]]:u?t[i/Kl[u-1]<Kl[u]/i?u-1:u]:[tc,Ki(n,e)[2]]}return r.invert=function(t){return io(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(io)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,io(+e+1),t).length}var u=r.domain(),o=Yi(u),a=null==n?i(o,10):"number"==typeof n&&i(o,n);return a&&(n=a[0],t=a[1]),r.domain(Xi(u,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yi(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],io(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ro(n.copy(),t,e)},Ji(r,n)}function io(n){return new Date(n)}function uo(n){return JSON.parse(n.responseText)}function oo(n){var t=fo.createRange();return t.selectNode(fo.body),t.createContextualFragment(n.responseText)}var ao={version:"3.5.17"},lo=[].slice,co=function(n){return lo.call(n)},fo=this.document;if(fo)try{co(fo.documentElement.childNodes)[0].nodeType}catch(so){co=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(ho){var po=this.Element.prototype,go=po.setAttribute,vo=po.setAttributeNS,yo=this.CSSStyleDeclaration.prototype,mo=yo.setProperty;po.setAttribute=function(n,t){go.call(this,n,t+"")},po.setAttributeNS=function(n,t,e){vo.call(this,n,t,e+"")},yo.setProperty=function(n,t,e){mo.call(this,n,t+"",e)}}ao.ascending=e,ao.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:NaN},ao.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&e>r&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&e>r&&(e=r)}return e},ao.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&r>e&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&r>e&&(e=r)}return e},ao.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u<o;)if(null!=(r=n[u])&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=n[u])&&(e>r&&(e=r),r>i&&(i=r))}else{for(;++u<o;)if(null!=(r=t.call(n,n[u],u))&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=t.call(n,n[u],u))&&(e>r&&(e=r),r>i&&(i=r))}return[e,i]},ao.sum=function(n,t){var e,r=0,u=n.length,o=-1;if(1===arguments.length)for(;++o<u;)i(e=+n[o])&&(r+=e);else for(;++o<u;)i(e=+t.call(n,n[o],o))&&(r+=e);return r},ao.mean=function(n,t){var e,u=0,o=n.length,a=-1,l=o;if(1===arguments.length)for(;++a<o;)i(e=r(n[a]))?u+=e:--l;else for(;++a<o;)i(e=r(t.call(n,n[a],a)))?u+=e:--l;return l?u/l:void 0},ao.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),i=+n[r-1],u=e-r;return u?i+u*(n[r]-i):i},ao.median=function(n,t){var u,o=[],a=n.length,l=-1;if(1===arguments.length)for(;++l<a;)i(u=r(n[l]))&&o.push(u);else for(;++l<a;)i(u=r(t.call(n,n[l],l)))&&o.push(u);return o.length?ao.quantile(o.sort(e),.5):void 0},ao.variance=function(n,t){var e,u,o=n.length,a=0,l=0,c=-1,f=0;if(1===arguments.length)for(;++c<o;)i(e=r(n[c]))&&(u=e-a,a+=u/++f,l+=u*(e-a));else for(;++c<o;)i(e=r(t.call(n,n[c],c)))&&(u=e-a,a+=u/++f,l+=u*(e-a));return f>1?l/(f-1):void 0},ao.deviation=function(){var n=ao.variance.apply(this,arguments);return n?Math.sqrt(n):n};var Mo=u(e);ao.bisectLeft=Mo.left,ao.bisect=ao.bisectRight=Mo.right,ao.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},ao.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,2>u&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},ao.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ao.pairs=function(n){for(var t,e=0,r=n.length-1,i=n[0],u=new Array(0>r?0:r);r>e;)u[e]=[t=i,i=n[++e]];return u},ao.transpose=function(n){if(!(i=n.length))return[];for(var t=-1,e=ao.min(n,o),r=new Array(e);++t<e;)for(var i,u=-1,a=r[t]=new Array(i);++u<i;)a[u]=n[u][t];return r},ao.zip=function(){return ao.transpose(arguments)},ao.keys=function(n){var t=[];for(var e in n)t.push(e);return t},ao.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},ao.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},ao.merge=function(n){for(var t,e,r,i=n.length,u=-1,o=0;++u<i;)o+=n[u].length;for(e=new Array(o);--i>=0;)for(r=n[i],t=r.length;--t>=0;)e[--o]=r[t];return e};var xo=Math.abs;ao.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,i=[],u=a(xo(e)),o=-1;if(n*=u,t*=u,e*=u,0>e)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)<t;)i.push(r/u);return i},ao.map=function(n,t){var e=new c;if(n instanceof c)n.forEach(function(n,t){e.set(n,t)});else if(Array.isArray(n)){var r,i=-1,u=n.length;if(1===arguments.length)for(;++i<u;)e.set(i,n[i]);else for(;++i<u;)e.set(t.call(n,r=n[i],i),r)}else for(var o in n)e.set(o,n[o]);return e};var bo="__proto__",_o="\x00";l(c,{has:h,get:function(n){return this._[f(n)]},set:function(n,t){return this._[f(n)]=t},remove:p,keys:g,values:function(){var n=[];for(var t in this._)n.push(this._[t]);return n},entries:function(){var n=[];for(var t in this._)n.push({key:s(t),value:this._[t]});return n},size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t),this._[t])}}),ao.nest=function(){function n(t,o,a){if(a>=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,v=u[a++],d=new c;++p<g;)(h=d.get(l=v(f=o[p])))?h.push(f):d.set(l,[f]);return t?(f=t(),s=function(e,r){f.set(e,n(t,r,a))}):(f={},s=function(e,r){f[e]=n(t,r,a)}),d.forEach(s),f}function t(n,e){if(e>=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(ao.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},ao.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},l(y,{has:h,add:function(n){return this._[f(n+="")]=!0,n},remove:p,values:g,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t))}}),ao.behavior={},ao.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r<i;)n[e=arguments[r]]=M(n,t,t[e]);return n};var wo=["webkit","ms","moz","Moz","o","O"];ao.dispatch=function(){for(var n=new _,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=w(n);return n},_.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ao.event=null,ao.requote=function(n){return n.replace(So,"\\$&")};var So=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ko={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},No=function(n,t){return t.querySelector(n)},Eo=function(n,t){return t.querySelectorAll(n)},Ao=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(Ao=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(No=function(n,t){return Sizzle(n,t)[0]||null},Eo=Sizzle,Ao=Sizzle.matchesSelector),ao.selection=function(){return ao.select(fo.documentElement)};var Co=ao.selection.prototype=[];Co.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o<a;){u.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var l=-1,c=r.length;++l<c;)(i=r[l])?(t.push(e=n.call(i,i.__data__,l,o)),e&&"__data__"in i&&(e.__data__=i.__data__)):t.push(null)}return E(u)},Co.selectAll=function(n){var t,e,r=[];n=C(n);for(var i=-1,u=this.length;++i<u;)for(var o=this[i],a=-1,l=o.length;++a<l;)(e=o[a])&&(r.push(t=co(n.call(e,e.__data__,a,i))),t.parentNode=e);return E(r)};var zo="http://www.w3.org/1999/xhtml",Lo={svg:"http://www.w3.org/2000/svg",xhtml:zo,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};ao.ns={prefix:Lo,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),Lo.hasOwnProperty(e)?{space:Lo[e],local:n}:n}},Co.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ao.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},Co.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++i<r;)if(!t.contains(n[i]))return!1}else for(t=e.getAttribute("class");++i<r;)if(!q(n[i]).test(t))return!1;return!0}for(t in n)this.each(R(t,n[t]));return this}return this.each(R(n,t))},Co.style=function(n,e,r){var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(e="");for(r in n)this.each(P(r,n[r],e));return this}if(2>i){var u=this.node();return t(u).getComputedStyle(u,null).getPropertyValue(n)}r=""}return this.each(P(n,e,r))},Co.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(U(t,n[t]));return this}return this.each(U(n,t))},Co.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Co.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Co.append=function(n){return n=j(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Co.insert=function(n,t){return n=j(n),t=A(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},Co.remove=function(){return this.each(F)},Co.data=function(n,t){function e(n,e){var r,i,u,o=n.length,s=e.length,h=Math.min(o,s),p=new Array(s),g=new Array(s),v=new Array(o);if(t){var d,y=new c,m=new Array(o);for(r=-1;++r<o;)(i=n[r])&&(y.has(d=t.call(i,i.__data__,r))?v[r]=i:y.set(d,i),m[r]=d);for(r=-1;++r<s;)(i=y.get(d=t.call(e,u=e[r],r)))?i!==!0&&(p[r]=i,i.__data__=u):g[r]=H(u),y.set(d,!0);for(r=-1;++r<o;)r in m&&y.get(m[r])!==!0&&(v[r]=n[r])}else{for(r=-1;++r<h;)i=n[r],u=e[r],i?(i.__data__=u,p[r]=i):g[r]=H(u);for(;s>r;++r)g[r]=H(e[r]);for(;o>r;++r)v[r]=n[r]}g.update=p,g.parentNode=p.parentNode=v.parentNode=n.parentNode,a.push(g),l.push(p),f.push(v)}var r,i,u=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++u<o;)(i=r[u])&&(n[u]=i.__data__);return n}var a=Z([]),l=E([]),f=E([]);if("function"==typeof n)for(;++u<o;)e(r=this[u],n.call(r,r.parentNode.__data__,u));else for(;++u<o;)e(r=this[u],n);return l.enter=function(){return a},l.exit=function(){return f},l},Co.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},Co.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return E(i)},Co.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],i=r.length-1,u=r[i];--i>=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Co.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},Co.each=function(n){return Y(this,function(t,e,r){n.call(t,t.__data__,e,r)})},Co.call=function(n){var t=co(arguments);return n.apply(t[0]=this,t),this},Co.empty=function(){return!this.node()},Co.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Co.size=function(){var n=0;return Y(this,function(){++n}),n};var qo=[];ao.selection.enter=Z,ao.selection.enter.prototype=qo,qo.append=Co.append,qo.empty=Co.empty,qo.node=Co.node,qo.call=Co.call,qo.size=Co.size,qo.select=function(n){for(var t,e,r,i,u,o=[],a=-1,l=this.length;++a<l;){r=(i=this[a]).update,o.push(t=[]),t.parentNode=i.parentNode;for(var c=-1,f=i.length;++c<f;)(u=i[c])?(t.push(r[c]=e=n.call(i.parentNode,u.__data__,c,a)),e.__data__=u.__data__):t.push(null)}return E(o)},qo.insert=function(n,t){return arguments.length<2&&(t=V(this)),Co.insert.call(this,n,t)},ao.select=function(t){var e;return"string"==typeof t?(e=[No(t,fo)],e.parentNode=fo.documentElement):(e=[t],e.parentNode=n(t)),E([e])},ao.selectAll=function(n){var t;return"string"==typeof n?(t=co(Eo(n,fo)),t.parentNode=fo.documentElement):(t=co(n),t.parentNode=null),E([t])},Co.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(X(n,t,e))};var To=ao.map({mouseenter:"mouseover",mouseleave:"mouseout"});fo&&To.forEach(function(n){"on"+n in fo&&To.remove(n)});var Ro,Do=0;ao.mouse=function(n){return J(n,k())};var Po=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;ao.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,i=0,u=t.length;u>i;++i)if((r=t[i]).identifier===e)return J(n,r)},ao.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",o)}function e(n,t,e,u,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],g|=n|e,M=r,p({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:n,dy:e}))}function l(){t(h,v)&&(y.on(u+d,null).on(o+d,null),m(g),p({type:"dragend"}))}var c,f=this,s=ao.event.target.correspondingElement||ao.event.target,h=f.parentNode,p=r.of(f,arguments),g=0,v=n(),d=".drag"+(null==v?"":"-"+v),y=ao.select(e(s)).on(u+d,a).on(o+d,l),m=W(s),M=t(h,v);i?(c=i.apply(f,arguments),c=[c.x-M[0],c.y-M[1]]):c=[0,0],p({type:"dragstart"})}}var r=N(n,"drag","dragstart","dragend"),i=null,u=e(b,ao.mouse,t,"mousemove","mouseup"),o=e(G,ao.touch,m,"touchmove","touchend");return n.origin=function(t){return arguments.length?(i=t,n):i},ao.rebind(n,r,"on")},ao.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?co(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Uo=1e-6,jo=Uo*Uo,Fo=Math.PI,Ho=2*Fo,Oo=Ho-Uo,Io=Fo/2,Yo=Fo/180,Zo=180/Fo,Vo=Math.SQRT2,Xo=2,$o=4;ao.interpolateZoom=function(n,t){var e,r,i=n[0],u=n[1],o=n[2],a=t[0],l=t[1],c=t[2],f=a-i,s=l-u,h=f*f+s*s;if(jo>h)r=Math.log(c/o)/Vo,e=function(n){return[i+n*f,u+n*s,o*Math.exp(Vo*n*r)]};else{var p=Math.sqrt(h),g=(c*c-o*o+$o*h)/(2*o*Xo*p),v=(c*c-o*o-$o*h)/(2*c*Xo*p),d=Math.log(Math.sqrt(g*g+1)-g),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-d)/Vo,e=function(n){var t=n*r,e=rn(d),a=o/(Xo*p)*(e*un(Vo*t+d)-en(d));return[i+a*f,u+a*s,o*e/rn(Vo*t+d)]}}return e.duration=1e3*r,e},ao.behavior.zoom=function(){function n(n){n.on(L,s).on(Wo+".zoom",p).on("dblclick.zoom",g).on(R,h)}function e(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function r(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function i(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=r(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function o(t,e,r,o){t.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,o)),u(d=e,r),t=ao.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),d=null)}function s(){function n(){a=1,u(ao.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=ao.select(t(i)).on(q,n).on(T,r),h=e(ao.mouse(i)),p=W(i);Il.call(i),l(o)}function h(){function n(){var n=ao.touches(g);return p=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ao.event.target;ao.select(t).on(x,r).on(b,a),_.push(t);for(var e=ao.event.changedTouches,i=0,u=e.length;u>i;++i)d[e[i].identifier]=null;var l=n(),c=Date.now();if(1===l.length){if(500>c-M){var f=l[0];o(g,f,d[f.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=c}else if(l.length>1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=ao.touches(g);Il.call(g);for(var a=0,l=o.length;l>a;++a,r=null)if(e=o[a],r=d[e.identifier]){if(t)break;n=e,t=r}if(r){var f=(f=e[0]-n[0])*f+(f=e[1]-n[1])*f,s=y&&Math.sqrt(f/y);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+r[0])/2,(t[1]+r[1])/2],i(s*p)}M=null,u(n,t),c(v)}function a(){if(ao.event.touches.length){for(var t=ao.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var i in d)return void n()}ao.selectAll(_).on(m,null),w.on(L,s).on(R,h),N(),f(v)}var p,g=this,v=D.of(g,arguments),d={},y=0,m=".zoom-"+ao.event.changedTouches[0].identifier,x="touchmove"+m,b="touchend"+m,_=[],w=ao.select(g),N=W(g);t(),l(v),w.on(L,null).on(R,t)}function p(){var n=D.of(this,arguments);m?clearTimeout(m):(Il.call(this),v=e(d=y||ao.mouse(this)),l(n)),m=setTimeout(function(){m=null,f(n)},50),S(),i(Math.pow(2,.002*Bo())*k.k),u(d,v),c(n)}function g(){var n=ao.mouse(this),t=Math.log(k.k)/Math.LN2;o(this,n,e(n),ao.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,y,m,M,x,b,_,w,k={x:0,y:0,k:1},E=[960,500],A=Jo,C=250,z=0,L="mousedown.zoom",q="mousemove.zoom",T="mouseup.zoom",R="touchstart.zoom",D=N(n,"zoomstart","zoom","zoomend");return Wo||(Wo="onwheel"in fo?(Bo=function(){return-ao.event.deltaY*(ao.event.deltaMode?120:1)},"wheel"):"onmousewheel"in fo?(Bo=function(){return ao.event.wheelDelta},"mousewheel"):(Bo=function(){return-ao.event.detail},"MozMousePixelScroll")),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Hl?ao.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},l(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],i=d?d[0]:e/2,u=d?d[1]:r/2,o=ao.interpolateZoom([(i-k.x)/k.k,(u-k.y)/k.k,e/k.k],[(i-t.x)/t.k,(u-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:i-r[0]*a,y:u-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){f(n)}).each("end.zoom",function(){f(n)}):(this.__chart__=k,l(n),c(n),f(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},a(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:null},i(+t),a(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Jo:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(y=t&&[+t[0],+t[1]],n):y},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},ao.rebind(n,D,"on")};var Bo,Wo,Jo=[0,1/0];ao.color=an,an.prototype.toString=function(){return this.rgb()+""},ao.hsl=ln;var Go=ln.prototype=new an;Go.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,this.l/n)},Go.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,n*this.l)},Go.rgb=function(){return cn(this.h,this.s,this.l)},ao.hcl=fn;var Ko=fn.prototype=new an;Ko.brighter=function(n){return new fn(this.h,this.c,Math.min(100,this.l+Qo*(arguments.length?n:1)))},Ko.darker=function(n){return new fn(this.h,this.c,Math.max(0,this.l-Qo*(arguments.length?n:1)))},Ko.rgb=function(){return sn(this.h,this.c,this.l).rgb()},ao.lab=hn;var Qo=18,na=.95047,ta=1,ea=1.08883,ra=hn.prototype=new an;ra.brighter=function(n){return new hn(Math.min(100,this.l+Qo*(arguments.length?n:1)),this.a,this.b)},ra.darker=function(n){return new hn(Math.max(0,this.l-Qo*(arguments.length?n:1)),this.a,this.b)},ra.rgb=function(){return pn(this.l,this.a,this.b)},ao.rgb=mn;var ia=mn.prototype=new an;ia.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),new mn(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mn(i,i,i)},ia.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mn(n*this.r,n*this.g,n*this.b)},ia.hsl=function(){return wn(this.r,this.g,this.b)},ia.toString=function(){return"#"+bn(this.r)+bn(this.g)+bn(this.b)};var ua=ao.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ua.forEach(function(n,t){ua.set(n,Mn(t))}),ao.functor=En,ao.xhr=An(m),ao.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var o=Cn(n,t,null==e?r:i(e),u);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:i(n)):e},o}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function u(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(f>=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++<c;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}f=e+2;var r=n.charCodeAt(e+1);return 13===r?(i=!0,10===n.charCodeAt(e+2)&&++f):10===r&&(i=!0),n.slice(t+1,e).replace(/""/g,'"')}for(;c>f;){var r=n.charCodeAt(f++),a=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(f)&&(++f,++a);else if(r!==l)continue;return n.slice(t,f-a)}return n.slice(t)}for(var r,i,u={},o={},a=[],c=n.length,f=0,s=0;(r=e())!==o;){for(var h=[];r!==u&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,s++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new y,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(u).join("\n")},e},ao.csv=ao.dsv(",","text/csv"),ao.tsv=ao.dsv(" ","text/tab-separated-values");var oa,aa,la,ca,fa=this[x(this,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ao.timer=function(){qn.apply(this,arguments)},ao.timer.flush=function(){Rn(),Dn()},ao.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var sa=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Un);ao.formatPrefix=function(n,t){var e=0;return(n=+n)&&(0>n&&(n*=-1),t&&(n=ao.round(n,Pn(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),sa[8+e/3]};var ha=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,pa=ao.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ao.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ga=ao.time={},va=Date;Hn.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){da.setUTCDate.apply(this._,arguments)},setDay:function(){da.setUTCDay.apply(this._,arguments)},setFullYear:function(){da.setUTCFullYear.apply(this._,arguments)},setHours:function(){da.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){da.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){da.setUTCMinutes.apply(this._,arguments)},setMonth:function(){da.setUTCMonth.apply(this._,arguments)},setSeconds:function(){da.setUTCSeconds.apply(this._,arguments)},setTime:function(){da.setTime.apply(this._,arguments)}};var da=Date.prototype;ga.year=On(function(n){return n=ga.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ga.years=ga.year.range,ga.years.utc=ga.year.utc.range,ga.day=On(function(n){var t=new va(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ga.days=ga.day.range,ga.days.utc=ga.day.utc.range,ga.dayOfYear=function(n){var t=ga.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ga[n]=On(function(n){return(n=ga.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ga[n+"s"]=e.range,ga[n+"s"].utc=e.utc.range,ga[n+"OfYear"]=function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)}}),ga.week=ga.sunday,ga.weeks=ga.sunday.range,ga.weeks.utc=ga.sunday.utc.range,ga.weekOfYear=ga.sundayOfYear;var ya={"-":"",_:" ",0:"0"},ma=/^\s*\d+/,Ma=/^%/;ao.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xa=ao.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], +shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ao.format=xa.numberFormat,ao.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,ba),st(ba.s,this.s,this),this.s?this.t+=ba.t:this.s=ba.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ba=new ft;ao.geo.stream=function(n,t){n&&_a.hasOwnProperty(n.type)?_a[n.type](n,t):ht(n,t)};var _a={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++r<i;)ht(e[r].geometry,t)}},wa={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){pt(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)pt(e[r],t,0)},Polygon:function(n,t){gt(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)gt(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,i=e.length;++r<i;)ht(e[r],t)}};ao.geo.area=function(n){return Sa=0,ao.geo.stream(n,Na),Sa};var Sa,ka=new ft,Na={sphere:function(){Sa+=4*Fo},point:b,lineStart:b,lineEnd:b,polygonStart:function(){ka.reset(),Na.lineStart=vt},polygonEnd:function(){var n=2*ka;Sa+=0>n?4*Fo+n:n,Na.lineStart=Na.lineEnd=Na.point=b}};ao.geo.bounds=function(){function n(n,t){M.push(x=[f=n,h=n]),s>t&&(s=t),t>p&&(p=t)}function t(t,e){var r=dt([t*Yo,e*Yo]);if(y){var i=mt(y,r),u=[i[1],-i[0],0],o=mt(u,i);bt(o),o=_t(o);var l=t-g,c=l>0?1:-1,v=o[0]*Zo*c,d=xo(l)>180;if(d^(v>c*g&&c*t>v)){var m=o[1]*Zo;m>p&&(p=m)}else if(v=(v+360)%360-180,d^(v>c*g&&c*t>v)){var m=-o[1]*Zo;s>m&&(s=m)}else s>e&&(s=e),e>p&&(p=e);d?g>t?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(f>t&&(f=t),t>h&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){b.point=t}function r(){x[0]=f,x[1]=h,b.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=xo(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Na.point(n,e),t(n,e)}function u(){Na.lineStart()}function o(){i(v,d),Na.lineEnd(),xo(m)>Uo&&(f=-(h=180)),x[0]=f,x[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var f,s,h,p,g,v,d,y,m,M,x,b={point:n,lineStart:e,lineEnd:r,polygonStart:function(){b.point=i,b.lineStart=u,b.lineEnd=o,m=0,Na.polygonStart()},polygonEnd:function(){Na.polygonEnd(),b.point=n,b.lineStart=e,b.lineEnd=r,0>ka?(f=-(h=180),s=-(p=90)):m>Uo?p=90:-Uo>m&&(s=-90),x[0]=f,x[1]=h}};return function(n){p=h=-(f=s=1/0),M=[],ao.geo.stream(n,b);var t=M.length;if(t){M.sort(l);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],c(e[0],i)||c(e[1],i)?(a(i[0],e[1])>a(i[0],i[1])&&(i[1]=e[1]),a(e[0],i[1])>a(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var o,e,g=-(1/0),t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(o=a(i[1],e[0]))>g&&(g=o,f=e[0],h=i[1])}return M=x=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),ao.geo.centroid=function(n){Ea=Aa=Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,ja);var t=Da,e=Pa,r=Ua,i=t*t+e*e+r*r;return jo>i&&(t=qa,e=Ta,r=Ra,Uo>Aa&&(t=Ca,e=za,r=La),i=t*t+e*e+r*r,jo>i)?[NaN,NaN]:[Math.atan2(e,t)*Zo,tn(r/Math.sqrt(i))*Zo]};var Ea,Aa,Ca,za,La,qa,Ta,Ra,Da,Pa,Ua,ja={sphere:b,point:St,lineStart:Nt,lineEnd:Et,polygonStart:function(){ja.lineStart=At},polygonEnd:function(){ja.lineStart=Nt}},Fa=Rt(zt,jt,Ht,[-Fo,-Fo/2]),Ha=1e9;ao.geo.clipExtent=function(){var n,t,e,r,i,u,o={stream:function(n){return i&&(i.valid=!1),i=u(n),i.valid=!0,i},extent:function(a){return arguments.length?(u=Zt(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),i&&(i.valid=!1,i=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ao.geo.conicEqualArea=function(){return Vt(Xt)}).raw=Xt,ao.geo.albers=function(){return ao.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ao.geo.albersUsa=function(){function n(n){var u=n[0],o=n[1];return t=null,e(u,o),t||(r(u,o),t)||i(u,o),t}var t,e,r,i,u=ao.geo.albers(),o=ao.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ao.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?o:i>=.166&&.234>i&&r>=-.214&&-.115>r?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Uo,s+.12*c+Uo],[f-.214*c-Uo,s+.234*c-Uo]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Uo,s+.166*c+Uo],[f-.115*c-Uo,s+.234*c-Uo]]).stream(l).point,n},n.scale(1070)};var Oa,Ia,Ya,Za,Va,Xa,$a={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Ia=0,$a.lineStart=$t},polygonEnd:function(){$a.lineStart=$a.lineEnd=$a.point=b,Oa+=xo(Ia/2)}},Ba={point:Bt,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Wa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Wa.lineStart=ne},polygonEnd:function(){Wa.point=Gt,Wa.lineStart=Kt,Wa.lineEnd=Qt}};ao.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),ao.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return Oa=0,ao.geo.stream(n,i($a)),Oa},n.centroid=function(n){return Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,i(Wa)),Ua?[Da/Ua,Pa/Ua]:Ra?[qa/Ra,Ta/Ra]:La?[Ca/La,za/La]:[NaN,NaN]},n.bounds=function(n){return Va=Xa=-(Ya=Za=1/0),ao.geo.stream(n,i(Ba)),[[Ya,Za],[Va,Xa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(ao.geo.albersUsa()).context(null)},ao.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ao.geo.projection=oe,ao.geo.projectionMutator=ae,(ao.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,ao.geo.rotation=function(n){function t(t){return t=n(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t}return n=se(n[0]%360*Yo,n[1]*Yo,n.length>2?n[2]*Yo:0),t.invert=function(t){return t=n.invert(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t},t},fe.invert=ce,ao.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Yo,-n[1]*Yo,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Zo,n[1]*=Zo}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=ve((t=+r)*Yo,i*Yo),n):t},n.precision=function(r){return arguments.length?(e=ve(t*Yo,(i=+r)*Yo),n):i},n.angle(90)},ao.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Yo,i=n[1]*Yo,u=t[1]*Yo,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},ao.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ao.range(Math.ceil(u/d)*d,i,d).map(h).concat(ao.range(Math.ceil(c/y)*y,l,y).map(p)).concat(ao.range(Math.ceil(r/g)*g,e,g).filter(function(n){return xo(n%d)>Uo}).map(f)).concat(ao.range(Math.ceil(a/v)*v,o,v).filter(function(n){return xo(n%y)>Uo}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,v=g,d=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],y=+t[1],n):[d,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],n):[g,v]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Uo],[180,90-Uo]]).minorExtent([[-180,-80-Uo],[180,80+Uo]])},ao.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Me,i=xe;return n.distance=function(){return ao.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ao.geo.interpolate=function(n,t){return be(n[0]*Yo,n[1]*Yo,t[0]*Yo,t[1]*Yo)},ao.geo.length=function(n){return Ja=0,ao.geo.stream(n,Ga),Ja};var Ja,Ga={sphere:b,point:b,lineStart:_e,lineEnd:b,polygonStart:b,polygonEnd:b},Ka=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ao.geo.azimuthalEqualArea=function(){return oe(Ka)}).raw=Ka;var Qa=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(ao.geo.azimuthalEquidistant=function(){return oe(Qa)}).raw=Qa,(ao.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(ao.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var nl=we(function(n){return 1/n},Math.atan);(ao.geo.gnomonic=function(){return oe(nl)}).raw=nl,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Io]},(ao.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var tl=we(function(){return 1},Math.asin);(ao.geo.orthographic=function(){return oe(tl)}).raw=tl;var el=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ao.geo.stereographic=function(){return oe(el)}).raw=el,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Io]},(ao.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,ao.geom={},ao.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;o>t;t++)a.push([+i.call(this,n[t],t),+u.call(this,n[t],t),t]);for(a.sort(qe),t=0;o>t;t++)l.push([a[t][0],-a[t][1]]);var c=Le(a),f=Le(l),s=f[0]===c[0],h=f[f.length-1]===c[c.length-1],p=[];for(t=c.length-1;t>=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t<f.length-h;++t)p.push(n[a[f[t]][2]]);return p}var e=Ce,r=ze;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},ao.geom.polygon=function(n){return ko(n,rl),n};var rl=ao.geom.polygon.prototype=[];rl.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],i=0;++t<e;)n=r,r=this[t],i+=n[1]*r[0]-n[0]*r[1];return.5*i},rl.centroid=function(n){var t,e,r=-1,i=this.length,u=0,o=0,a=this[i-1];for(arguments.length||(n=-1/(6*this.area()));++r<i;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],u+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[u*n,o*n]},rl.clip=function(n){for(var t,e,r,i,u,o,a=De(n),l=-1,c=this.length-De(this),f=this[c-1];++l<c;){for(t=n.slice(),n.length=0,i=this[l],u=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Te(o,f,i)?(Te(u,f,i)||n.push(Re(u,o,f,i)),n.push(o)):Te(u,f,i)&&n.push(Re(u,o,f,i)),u=o;a&&n.push(n[0]),f=i}return n};var il,ul,ol,al,ll,cl=[],fl=[];Ye.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Ve),t.length},tr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},er.prototype={insert:function(n,t){var e,r,i;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=or(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(i=r.R,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.R&&(ir(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ur(this,r))):(i=r.L,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.L&&(ur(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ir(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,i=n.U,u=n.L,o=n.R;if(e=u?o?or(o):u:o,i?i.L===n?i.L=e:i.R=e:this._=e,u&&o?(r=e.C,e.C=n.C,e.L=u,u.U=e,e!==o?(i=e.U,e.U=n.U,n=e.R,i.L=n,e.R=o,o.U=e):(e.U=i,i=e,n=e.R)):(r=n.C,n=e),n&&(n.U=i),!r){if(n&&n.C)return void(n.C=!1);do{if(n===this._)break;if(n===i.L){if(t=i.R,t.C&&(t.C=!1,i.C=!0,ir(this,i),t=i.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,ur(this,t),t=i.R),t.C=i.C,i.C=t.R.C=!1,ir(this,i),n=this._;break}}else if(t=i.L,t.C&&(t.C=!1,i.C=!0,ur(this,i),t=i.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,ir(this,t),t=i.L),t.C=i.C,i.C=t.L.C=!1,ur(this,i),n=this._;break}t.C=!0,n=i,i=i.U}while(!n.C);n&&(n.C=!1)}}},ao.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],i=a[0][1],u=a[1][0],o=a[1][1];return ar(e(n),a).cells.forEach(function(e,a){var l=e.edges,c=e.site,f=t[a]=l.length?l.map(function(n){var t=n.start();return[t.x,t.y]}):c.x>=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[];f.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Uo)*Uo,y:Math.round(o(n,t)/Uo)*Uo,i:t}})}var r=Ce,i=ze,u=r,o=i,a=sl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u,o=e.site,a=e.edges.sort(Ve),l=-1,c=a.length,f=a[c-1].edge,s=f.l===o?f.r:f.l;++l<c;)i=f,u=s,f=a[l].edge,s=f.l===o?f.r:f.l,r<u.i&&r<s.i&&cr(o,u,s)<0&&t.push([n[r],n[u.i],n[s.i]])}),t},t.x=function(n){return arguments.length?(u=En(r=n),t):r},t.y=function(n){return arguments.length?(o=En(i=n),t):i},t.clipExtent=function(n){return arguments.length?(a=null==n?sl:n,t):a===sl?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===sl?null:a&&a[1]},t)};var sl=[[-1e6,-1e6],[1e6,1e6]];ao.geom.delaunay=function(n){return ao.geom.voronoi().triangles(n)},ao.geom.quadtree=function(n,t,e,r,i){function u(n){function u(n,t,e,r,i,u,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var l=n.x,f=n.y;if(null!=l)if(xo(l-e)+xo(f-r)<.01)c(n,t,e,r,i,u,o,a);else{var s=n.point;n.x=n.y=n.point=null,c(n,s,l,f,i,u,o,a),c(n,t,e,r,i,u,o,a)}else n.x=e,n.y=r,n.point=t}else c(n,t,e,r,i,u,o,a)}function c(n,t,e,r,i,o,a,l){var c=.5*(i+a),f=.5*(o+l),s=e>=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]=hr()),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,v,d,y,m,M=En(a),x=En(l);if(null!=t)v=t,d=e,y=r,m=i;else if(y=m=-(v=d=1/0),s=[],h=[],g=n.length,o)for(p=0;g>p;++p)f=n[p],f.x<v&&(v=f.x),f.y<d&&(d=f.y),f.x>y&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;g>p;++p){var b=+M(f=n[p],p),_=+x(f,p);v>b&&(v=b),d>_&&(d=_),b>y&&(y=b),_>m&&(m=_),s.push(b),h.push(_)}var w=y-v,S=m-d;w>S?m=d+w:y=v+S;var k=hr();if(k.add=function(n){u(k,n,+M(n,++p),+x(n,p),v,d,y,m)},k.visit=function(n){pr(n,k,v,d,y,m)},k.find=function(n){return gr(k,n[0],n[1],v,d,y,m)},p=-1,null==t){for(;++p<g;)u(k,n[p],s[p],h[p],v,d,y,m);--p}else n.forEach(k.add);return s=h=n=f=null,k}var o,a=Ce,l=ze;return(o=arguments.length)?(a=fr,l=sr,3===o&&(i=e,r=t,e=t=0),u(n)):(u.x=function(n){return arguments.length?(a=n,u):a},u.y=function(n){return arguments.length?(l=n,u):l},u.extent=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],i=+n[1][1]),u):null==t?null:[[t,e],[r,i]]},u.size=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=e=0,r=+n[0],i=+n[1]),u):null==t?null:[r-t,i-e]},u)},ao.interpolateRgb=vr,ao.interpolateObject=dr,ao.interpolateNumber=yr,ao.interpolateString=mr;var hl=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,pl=new RegExp(hl.source,"g");ao.interpolate=Mr,ao.interpolators=[function(n,t){var e=typeof t;return("string"===e?ua.has(t.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(t)?vr:mr:t instanceof an?vr:Array.isArray(t)?xr:"object"===e&&isNaN(t)?dr:yr)(n,t)}],ao.interpolateArray=xr;var gl=function(){return m},vl=ao.map({linear:gl,poly:Er,quad:function(){return Sr},cubic:function(){return kr},sin:function(){return Ar},exp:function(){return Cr},circle:function(){return zr},elastic:Lr,back:qr,bounce:function(){return Tr}}),dl=ao.map({"in":m,out:_r,"in-out":wr,"out-in":function(n){return wr(_r(n))}});ao.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=vl.get(e)||gl,r=dl.get(r)||m,br(r(e.apply(null,lo.call(arguments,1))))},ao.interpolateHcl=Rr,ao.interpolateHsl=Dr,ao.interpolateLab=Pr,ao.interpolateRound=Ur,ao.transform=function(n){var t=fo.createElementNS(ao.ns.prefix.svg,"g");return(ao.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:yl)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var yl={a:1,b:0,c:0,d:1,e:0,f:0};ao.interpolateTransform=$r,ao.layout={},ao.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Jr(n[e]));return t}},ao.layout.chord=function(){function n(){var n,c,s,h,p,g={},v=[],d=ao.range(u),y=[];for(e=[],r=[],n=0,h=-1;++h<u;){for(c=0,p=-1;++p<u;)c+=i[h][p];v.push(c),y.push(ao.range(u)),n+=c}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&y.forEach(function(n,t){n.sort(function(n,e){return a(i[t][n],i[t][e])})}),n=(Ho-f*u)/n,c=0,h=-1;++h<u;){for(s=c,p=-1;++p<u;){var m=d[h],M=y[m][p],x=i[m][M],b=c,_=c+=x*n;g[m+"-"+M]={index:m,subindex:M,startAngle:b,endAngle:_,value:x}}r[m]={index:m,startAngle:s,endAngle:c,value:v[m]},c+=f}for(h=-1;++h<u;)for(p=h-1;++p<u;){var w=g[h+"-"+p],S=g[p+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}l&&t()}function t(){e.sort(function(n,t){return l((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,i,u,o,a,l,c={},f=0;return c.matrix=function(n){return arguments.length?(u=(i=n)&&i.length,e=r=null,c):i},c.padding=function(n){return arguments.length?(f=n,e=r=null,c):f},c.sortGroups=function(n){return arguments.length?(o=n,e=r=null,c):o},c.sortSubgroups=function(n){return arguments.length?(a=n,e=null,c):a},c.sortChords=function(n){return arguments.length?(l=n,e&&t(),c):l},c.chords=function(){return e||n(),e},c.groups=function(){return r||n(),r},c},ao.layout.force=function(){function n(n){return function(t,e,r,i){if(t.point!==n){var u=t.cx-n.x,o=t.cy-n.y,a=i-e,l=u*u+o*o;if(l>a*a/y){if(v>l){var c=t.charge/l;n.px-=u*c,n.py-=o*c}return!0}if(t.point&&l&&v>l){var c=t.pointCharge/l;n.px-=u*c,n.py-=o*c}}return!t.charge}}function t(n){n.px=ao.event.x,n.py=ao.event.y,l.resume()}var e,r,i,u,o,a,l={},c=ao.dispatch("start","tick","end"),f=[1,1],s=.9,h=ml,p=Ml,g=-30,v=xl,d=.1,y=.64,M=[],x=[];return l.tick=function(){if((i*=.99)<.005)return e=null,c.end({type:"end",alpha:i=0}),!0;var t,r,l,h,p,v,y,m,b,_=M.length,w=x.length;for(r=0;w>r;++r)l=x[r],h=l.source,p=l.target,m=p.x-h.x,b=p.y-h.y,(v=m*m+b*b)&&(v=i*o[r]*((v=Math.sqrt(v))-u[r])/v,m*=v,b*=v,p.x-=m*(y=h.weight+p.weight?h.weight/(h.weight+p.weight):.5),p.y-=b*y,h.x+=m*(y=1-y),h.y+=b*y);if((y=i*d)&&(m=f[0]/2,b=f[1]/2,r=-1,y))for(;++r<_;)l=M[r],l.x+=(m-l.x)*y,l.y+=(b-l.y)*y;if(g)for(ri(t=ao.geom.quadtree(M),i,a),r=-1;++r<_;)(l=M[r]).fixed||t.visit(n(l));for(r=-1;++r<_;)l=M[r],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*s,l.y-=(l.py-(l.py=l.y))*s);c.tick({type:"tick",alpha:i})},l.nodes=function(n){return arguments.length?(M=n,l):M},l.links=function(n){return arguments.length?(x=n,l):x},l.size=function(n){return arguments.length?(f=n,l):f},l.linkDistance=function(n){return arguments.length?(h="function"==typeof n?n:+n,l):h},l.distance=l.linkDistance,l.linkStrength=function(n){return arguments.length?(p="function"==typeof n?n:+n,l):p},l.friction=function(n){return arguments.length?(s=+n,l):s},l.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,l):g},l.chargeDistance=function(n){return arguments.length?(v=n*n,l):Math.sqrt(v)},l.gravity=function(n){return arguments.length?(d=+n,l):d},l.theta=function(n){return arguments.length?(y=n*n,l):Math.sqrt(y)},l.alpha=function(n){return arguments.length?(n=+n,i?n>0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;i>l;++l)e[l]=[];for(l=0;c>l;++l){var u=x[l];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var o,a=e[t],l=-1,f=a.length;++l<f;)if(!isNaN(o=a[l][n]))return o;return Math.random()*r}var t,e,r,i=M.length,c=x.length,s=f[0],v=f[1];for(t=0;i>t;++t)(r=M[t]).index=t,r.weight=0;for(t=0;c>t;++t)r=x[t],"number"==typeof r.source&&(r.source=M[r.source]),"number"==typeof r.target&&(r.target=M[r.target]),++r.source.weight,++r.target.weight;for(t=0;i>t;++t)r=M[t],isNaN(r.x)&&(r.x=n("x",s)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof h)for(t=0;c>t;++t)u[t]=+h.call(this,x[t],t);else for(t=0;c>t;++t)u[t]=h;if(o=[],"function"==typeof p)for(t=0;c>t;++t)o[t]=+p.call(this,x[t],t);else for(t=0;c>t;++t)o[t]=p;if(a=[],"function"==typeof g)for(t=0;i>t;++t)a[t]=+g.call(this,M[t],t);else for(t=0;i>t;++t)a[t]=g;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){return r||(r=ao.behavior.drag().origin(m).on("dragstart.force",Qr).on("drag.force",t).on("dragend.force",ni)),arguments.length?void this.on("mouseover.force",ti).on("mouseout.force",ei).call(r):r},ao.rebind(l,c,"on")};var ml=20,Ml=1,xl=1/0;ao.layout.hierarchy=function(){function n(i){var u,o=[i],a=[];for(i.depth=0;null!=(u=o.pop());)if(a.push(u),(c=e.call(n,u,u.depth))&&(l=c.length)){for(var l,c,f;--l>=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return oi(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=ci,e=ai,r=li;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ui(t,function(n){n.children&&(n.value=0)}),oi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ao.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++c<o;)n(a=u[c],e,l=a.value*r,i),e+=l}}function t(n){var e=n.children,r=0;if(e&&(i=e.length))for(var i,u=-1;++u<i;)r=Math.max(r,t(e[u]));return 1+r}function e(e,u){var o=r.call(this,e,u);return n(o[0],0,i[0],i[1]/t(o[0])),o}var r=ao.layout.hierarchy(),i=[1,1];return e.size=function(n){return arguments.length?(i=n,e):i},ii(e,r)},ao.layout.pie=function(){function n(o){var a,l=o.length,c=o.map(function(e,r){return+t.call(n,e,r)}),f=+("function"==typeof r?r.apply(this,arguments):r),s=("function"==typeof i?i.apply(this,arguments):i)-f,h=Math.min(Math.abs(s)/l,+("function"==typeof u?u.apply(this,arguments):u)),p=h*(0>s?-1:1),g=ao.sum(c),v=g?(s-l*p)/g:0,d=ao.range(l),y=[];return null!=e&&d.sort(e===bl?function(n,t){return c[t]-c[n]}:function(n,t){return e(o[n],o[t])}),d.forEach(function(n){y[n]={data:o[n],value:a=c[n],startAngle:f,endAngle:f+=a*v+p,padAngle:h}}),y}var t=Number,e=bl,r=0,i=Ho,u=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n.padAngle=function(t){return arguments.length?(u=t,n):u},n};var bl={};ao.layout.stack=function(){function n(a,l){if(!(h=a.length))return a;var c=a.map(function(e,r){return t.call(n,e,r)}),f=c.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),o.call(n,t,e)]})}),s=e.call(n,f,l);c=ao.permute(c,s),f=ao.permute(f,s);var h,p,g,v,d=r.call(n,f,l),y=c[0].length;for(g=0;y>g;++g)for(i.call(n,c[0][g],v=d[g],f[0][g][1]),p=1;h>p;++p)i.call(n,c[p][g],v+=f[p-1][g][1],f[p][g][1]);return a}var t=m,e=gi,r=vi,i=pi,u=si,o=hi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:_l.get(t)||gi,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:wl.get(t)||vi,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(i=t,n):i},n};var _l=ao.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(di),u=n.map(yi),o=ao.range(r).sort(function(n,t){return i[n]-i[t]}),a=0,l=0,c=[],f=[];for(t=0;r>t;++t)e=o[t],l>a?(a+=u[e],c.push(e)):(l+=u[e],f.push(e));return f.reverse().concat(c)},reverse:function(n){return ao.range(n.length).reverse()},"default":gi}),wl=ao.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,o=[],a=0,l=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;u>e;++e)l[e]=(a-o[e])/2;return l},wiggle:function(n){var t,e,r,i,u,o,a,l,c,f=n.length,s=n[0],h=s.length,p=[];for(p[0]=l=c=0,e=1;h>e;++e){for(t=0,i=0;f>t;++t)i+=n[t][e][1];for(t=0,u=0,a=s[e][0]-s[e-1][0];f>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;u+=o*n[t][e][1]}p[e]=l-=i?u/i*a:0,c>l&&(c=l)}for(e=0;h>e;++e)p[e]-=c;return p},expand:function(n){var t,e,r,i=n.length,u=n[0].length,o=1/i,a=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=o}for(e=0;u>e;++e)a[e]=0;return a},zero:vi});ao.layout.histogram=function(){function n(n,u){for(var o,a,l=[],c=n.map(e,this),f=r.call(this,c,u),s=i.call(this,f,c,u),u=-1,h=c.length,p=s.length-1,g=t?1:1/h;++u<p;)o=l[u]=[],o.dx=s[u+1]-(o.x=s[u]),o.y=0;if(p>0)for(u=-1;++u<h;)a=c[u],a>=f[0]&&a<=f[1]&&(o=l[ao.bisect(s,a,1,p)-1],o.y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=bi,i=Mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ao.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,oi(a,function(n){n.r=+f(n.value)}),oi(a,Ni),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;oi(a,function(n){n.r+=s}),oi(a,Ni),oi(a,function(n){n.r-=s})}return Ci(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=ao.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ii(n,e)},ao.layout.tree=function(){function n(n,i){var f=o.call(this,n,i),s=f[0],h=t(s);if(oi(h,e),h.parent.m=-h.z,ui(h,r),c)ui(s,u);else{var p=s,g=s,v=s;ui(s,function(n){n.x<p.x&&(p=n),n.x>g.x&&(g=n),n.depth>v.depth&&(v=n)});var d=a(p,g)/2-p.x,y=l[0]/(g.x+a(g,p)/2+d),m=l[1]/(v.depth||1);ui(s,function(n){n.x=(n.x+d)*y,n.y=n.depth*m})}return f}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var i,u=t.children,o=0,a=u.length;a>o;++o)r.push((u[o]=i={_:u[o],parent:t,children:(i=u[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Di(n);var u=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-u):n.z=u}else r&&(n.z=r.z+a(n._,r._));n.parent.A=i(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function i(n,t,e){if(t){for(var r,i=n,u=n,o=t,l=i.parent.children[0],c=i.m,f=u.m,s=o.m,h=l.m;o=Ti(o),i=qi(i),o&&i;)l=qi(l),u=Ti(u),u.a=n,r=o.z+s-i.z-c+a(o._,i._),r>0&&(Ri(Pi(o,n,e),n,r),c+=r,f+=r),s+=o.m,c+=i.m,h+=l.m,f+=u.m;o&&!Ti(u)&&(u.t=o,u.m+=s-f),i&&!qi(l)&&(l.t=i,l.m+=c-h,e=n)}return e}function u(n){n.x*=l[0],n.y=n.depth*l[1]}var o=ao.layout.hierarchy().sort(null).value(null),a=Li,l=[1,1],c=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(c=null==(l=t)?u:null,n):c?null:l},n.nodeSize=function(t){return arguments.length?(c=null==(l=t)?null:u,n):c?l:null},ii(n,o)},ao.layout.cluster=function(){function n(n,u){var o,a=t.call(this,n,u),l=a[0],c=0;oi(l,function(n){var t=n.children;t&&t.length?(n.x=ji(t),n.y=Ui(t)):(n.x=o?c+=e(n,o):0,n.y=0,o=n)});var f=Fi(l),s=Hi(l),h=f.x-e(f,s)/2,p=s.x+e(s,f)/2;return oi(l,i?function(n){n.x=(n.x-l.x)*r[0],n.y=(l.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(p-h)*r[0],n.y=(1-(l.y?n.y/l.y:1))*r[1]}),a}var t=ao.layout.hierarchy().sort(null).value(null),e=Li,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ii(n,t)},ao.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++i<u;)r=(e=n[i]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var o,a,l,c=s(e),f=[],h=u.slice(),g=1/0,v="slice"===p?c.dx:"dice"===p?c.dy:"slice-dice"===p?1&e.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(n(h,c.dx*c.dy/e.value),f.area=0;(l=h.length)>0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,v))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,v,c,!1),v=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,v,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(u>e&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0; +if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++u<o;)i=n[u],i.x=a,i.y=c,i.dy=f,a+=i.dx=Math.min(e.x+e.dx-a,f?l(i.area/f):0);i.z=!0,i.dx+=e.x+e.dx-a,e.y+=f,e.dy-=f}else{for((r||f>e.dx)&&(f=e.dx);++u<o;)i=n[u],i.x=a,i.y=c,i.dx=f,c+=i.dy=Math.min(e.y+e.dy-c,f?l(i.area/f):0);i.z=!1,i.dy+=e.y+e.dy-c,e.x+=f,e.dx-=f}}function u(r){var i=o||a(r),u=i[0];return u.x=u.y=0,u.value?(u.dx=c[0],u.dy=c[1]):u.dx=u.dy=0,o&&a.revalue(u),n([u],u.dx*u.dy/u.value),(o?e:t)(u),h&&(o=i),i}var o,a=ao.layout.hierarchy(),l=Math.round,c=[1,1],f=null,s=Oi,h=!1,p="squarify",g=.5*(1+Math.sqrt(5));return u.size=function(n){return arguments.length?(c=n,u):c},u.padding=function(n){function t(t){var e=n.call(u,t,t.depth);return null==e?Oi(t):Ii(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return Ii(t,n)}if(!arguments.length)return f;var r;return s=null==(f=n)?Oi:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,u},u.round=function(n){return arguments.length?(l=n?Math.round:Number,u):l!=Number},u.sticky=function(n){return arguments.length?(h=n,o=null,u):h},u.ratio=function(n){return arguments.length?(g=n,u):g},u.mode=function(n){return arguments.length?(p=n+"",u):p},ii(u,a)},ao.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ao.random.normal.apply(ao,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ao.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ao.scale={};var Sl={floor:m,ceil:m};ao.scale.linear=function(){return Wi([0,1],[0,1],Mr,!1)};var kl={s:1,g:1,p:1,r:1,e:1};ao.scale.log=function(){return ru(ao.scale.linear().domain([0,1]),10,!0,[1,10])};var Nl=ao.format(".0e"),El={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ao.scale.pow=function(){return iu(ao.scale.linear(),1,[0,1])},ao.scale.sqrt=function(){return ao.scale.pow().exponent(.5)},ao.scale.ordinal=function(){return ou([],{t:"range",a:[[]]})},ao.scale.category10=function(){return ao.scale.ordinal().range(Al)},ao.scale.category20=function(){return ao.scale.ordinal().range(Cl)},ao.scale.category20b=function(){return ao.scale.ordinal().range(zl)},ao.scale.category20c=function(){return ao.scale.ordinal().range(Ll)};var Al=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(xn),Cl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(xn),zl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(xn),Ll=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(xn);ao.scale.quantile=function(){return au([],[])},ao.scale.quantize=function(){return lu(0,1,[0,1])},ao.scale.threshold=function(){return cu([.5],[0,1])},ao.scale.identity=function(){return fu([0,1])},ao.svg={},ao.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),f=o.apply(this,arguments)-Io,s=a.apply(this,arguments)-Io,h=Math.abs(s-f),p=f>s?0:1;if(n>c&&(g=c,c=n,n=g),h>=Oo)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,v,d,y,m,M,x,b,_,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(d=u===ql?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(d/c*Math.sin(y))),n&&(N=tn(d/n*Math.sin(y)))),c){m=c*Math.cos(f+E),M=c*Math.sin(f+E),x=c*Math.cos(s-E),b=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Fo?0:1;if(E&&yu(m,M,x,b)===p^C){var z=(f+s)/2;m=c*Math.cos(z),M=c*Math.sin(z),x=b=null}}else m=M=0;if(n){_=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Fo?0:1;if(N&&yu(_,w,S,k)===1-p^L){var q=(f+s)/2;_=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else _=w=0;if(h>Uo&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){v=c>n^p?0:1;var T=g,R=g;if(Fo>h){var D=null==S?[_,w]:null==x?[m,M]:Re([m,M],[S,k],[x,b],[_,w]),P=m-D[0],U=M-D[1],j=x-D[0],F=b-D[1],H=1/Math.sin(Math.acos((P*j+U*F)/(Math.sqrt(P*P+U*U)*Math.sqrt(j*j+F*F)))/2),O=Math.sqrt(D[0]*D[0]+D[1]*D[1]);R=Math.min(g,(n-O)/(H-1)),T=Math.min(g,(c-O)/(H+1))}if(null!=x){var I=mu(null==S?[_,w]:[S,k],[m,M],c,T,p),Y=mu([x,b],[_,w],c,T,p);g===T?A.push("M",I[0],"A",T,",",T," 0 0,",v," ",I[1],"A",c,",",c," 0 ",1-p^yu(I[1][0],I[1][1],Y[1][0],Y[1][1]),",",p," ",Y[1],"A",T,",",T," 0 0,",v," ",Y[0]):A.push("M",I[0],"A",T,",",T," 0 1,",v," ",Y[0])}else A.push("M",m,",",M);if(null!=S){var Z=mu([m,M],[S,k],n,-R,p),V=mu([_,w],null==x?[m,M]:[x,b],n,-R,p);g===R?A.push("L",V[0],"A",R,",",R," 0 0,",v," ",V[1],"A",n,",",n," 0 ",p^yu(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-p," ",Z[1],"A",R,",",R," 0 0,",v," ",Z[0]):A.push("L",V[0],"A",R,",",R," 0 0,",v," ",Z[0])}else A.push("L",_,",",w)}else A.push("M",m,",",M),null!=x&&A.push("A",c,",",c," 0 ",C,",",p," ",x,",",b),A.push("L",_,",",w),null!=S&&A.push("A",n,",",n," 0 ",L,",",1-p," ",S,",",k);return A.push("Z"),A.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=hu,r=pu,i=su,u=ql,o=gu,a=vu,l=du;return n.innerRadius=function(t){return arguments.length?(e=En(t),n):e},n.outerRadius=function(t){return arguments.length?(r=En(t),n):r},n.cornerRadius=function(t){return arguments.length?(i=En(t),n):i},n.padRadius=function(t){return arguments.length?(u=t==ql?ql:En(t),n):u},n.startAngle=function(t){return arguments.length?(o=En(t),n):o},n.endAngle=function(t){return arguments.length?(a=En(t),n):a},n.padAngle=function(t){return arguments.length?(l=En(t),n):l},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-Io;return[Math.cos(t)*n,Math.sin(t)*n]},n};var ql="auto";ao.svg.line=function(){return Mu(m)};var Tl=ao.map({linear:xu,"linear-closed":bu,step:_u,"step-before":wu,"step-after":Su,basis:zu,"basis-open":Lu,"basis-closed":qu,bundle:Tu,cardinal:Eu,"cardinal-open":ku,"cardinal-closed":Nu,monotone:Fu});Tl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Rl=[0,2/3,1/3,0],Dl=[0,1/3,2/3,0],Pl=[0,1/6,2/3,1/6];ao.svg.line.radial=function(){var n=Mu(Hu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},wu.reverse=Su,Su.reverse=wu,ao.svg.area=function(){return Ou(m)},ao.svg.area.radial=function(){var n=Ou(Hu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ao.svg.chord=function(){function n(n,a){var l=t(this,u,n,a),c=t(this,o,n,a);return"M"+l.p0+r(l.r,l.p1,l.a1-l.a0)+(e(l,c)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,l.r,l.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=a.call(n,i,r),o=l.call(n,i,r)-Io,f=c.call(n,i,r)-Io;return{r:u,a0:o,a1:f,p0:[u*Math.cos(o),u*Math.sin(o)],p1:[u*Math.cos(f),u*Math.sin(f)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Fo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Me,o=xe,a=Iu,l=gu,c=vu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},ao.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=Me,e=xe,r=Yu;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ao.svg.diagonal.radial=function(){var n=ao.svg.diagonal(),t=Yu,e=n.projection;return n.projection=function(n){return arguments.length?e(Zu(t=n)):t},n},ao.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$u)(e.call(this,n,r))}var t=Xu,e=Vu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=ao.map({circle:$u,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ao.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Yo);Co.transition=function(n){for(var t,e,r=Hl||++Zl,i=Ku(n),u=[],o=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},a=-1,l=this.length;++a<l;){u.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(e=c[f])&&Qu(e,f,i,r,o),t.push(e)}return Wu(u,i,r)},Co.interrupt=function(n){return this.each(null==n?Il:Bu(Ku(n)))};var Hl,Ol,Il=Bu(Ku()),Yl=[],Zl=0;Yl.call=Co.call,Yl.empty=Co.empty,Yl.node=Co.node,Yl.size=Co.size,ao.transition=function(n,t){return n&&n.transition?Hl?n.transition(t):n:ao.selection().transition(n)},ao.transition.prototype=Yl,Yl.select=function(n){var t,e,r,i=this.id,u=this.namespace,o=[];n=A(n);for(var a=-1,l=this.length;++a<l;){o.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(r=c[f])&&(e=n.call(r,r.__data__,f,a))?("__data__"in r&&(e.__data__=r.__data__),Qu(e,f,u,i,r[u][i]),t.push(e)):t.push(null)}return Wu(o,u,i)},Yl.selectAll=function(n){var t,e,r,i,u,o=this.id,a=this.namespace,l=[];n=C(n);for(var c=-1,f=this.length;++c<f;)for(var s=this[c],h=-1,p=s.length;++h<p;)if(r=s[h]){u=r[a][o],e=n.call(r,r.__data__,h,c),l.push(t=[]);for(var g=-1,v=e.length;++g<v;)(i=e[g])&&Qu(i,g,a,o,u),t.push(i)}return Wu(l,a,o)},Yl.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]);for(var e=this[u],a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return Wu(i,this.namespace,this.id)},Yl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):Y(this,null==t?function(t){t[r][e].tween.remove(n)}:function(i){i[r][e].tween.set(n,t)})},Yl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?$r:Mr,a=ao.ns.qualify(n);return Ju(this,"attr."+n,t,a.local?u:i)},Yl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=ao.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},Yl.style=function(n,e,r){function i(){this.style.removeProperty(n)}function u(e){return null==e?i:(e+="",function(){var i,u=t(this).getComputedStyle(this,null).getPropertyValue(n);return u!==e&&(i=Mr(u,e),function(t){this.style.setProperty(n,i(t),r)})})}var o=arguments.length;if(3>o){if("string"!=typeof n){2>o&&(e="");for(r in n)this.style(r,n[r],e);return this}r=""}return Ju(this,"style."+n,e,u)},Yl.styleTween=function(n,e,r){function i(i,u){var o=e.call(this,i,u,t(this).getComputedStyle(this,null).getPropertyValue(n));return o&&function(t){this.style.setProperty(n,o(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+n,i)},Yl.text=function(n){return Ju(this,"text",n,Gu)},Yl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Yl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ao.ease.apply(ao,arguments)),Y(this,function(r){r[e][t].ease=n}))},Yl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:Y(this,"function"==typeof n?function(r,i,u){r[e][t].delay=+n.call(r,r.__data__,i,u)}:(n=+n,function(r){r[e][t].delay=n}))},Yl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:Y(this,"function"==typeof n?function(r,i,u){r[e][t].duration=Math.max(1,n.call(r,r.__data__,i,u))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Yl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var i=Ol,u=Hl;try{Hl=e,Y(this,function(t,i,u){Ol=t[r][e],n.call(t,t.__data__,i,u)})}finally{Ol=i,Hl=u}}else Y(this,function(i){var u=i[r][e];(u.event||(u.event=ao.dispatch("start","end","interrupt"))).on(n,t)});return this},Yl.transition=function(){for(var n,t,e,r,i=this.id,u=++Zl,o=this.namespace,a=[],l=0,c=this.length;c>l;l++){a.push(n=[]);for(var t=this[l],f=0,s=t.length;s>f;f++)(e=t[f])&&(r=e[o][i],Qu(e,f,o,u,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Wu(a,o,u)},ao.svg.axis=function(){function n(n){n.each(function(){var n,c=ao.select(this),f=this.__chart__||e,s=this.__chart__=e.copy(),h=null==l?s.ticks?s.ticks.apply(s,a):s.domain():l,p=null==t?s.tickFormat?s.tickFormat.apply(s,a):m:t,g=c.selectAll(".tick").data(h,s),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",Uo),d=ao.transition(g.exit()).style("opacity",Uo).remove(),y=ao.transition(g.order()).style("opacity",1),M=Math.max(i,0)+o,x=Zi(s),b=c.selectAll(".domain").data([0]),_=(b.enter().append("path").attr("class","domain"),ao.transition(b));v.append("line"),v.append("text");var w,S,k,N,E=v.select("line"),A=y.select("line"),C=g.select("text").text(p),z=v.select("text"),L=y.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=no,w="x",k="y",S="x2",N="y2",C.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+q*u+"V0H"+x[1]+"V"+q*u)):(n=to,w="y",k="x",S="y2",N="x2",C.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),_.attr("d","M"+q*u+","+x[0]+"H0V"+x[1]+"H"+q*u)),E.attr(N,q*i),z.attr(k,q*M),A.attr(S,0).attr(N,q*i),L.attr(w,0).attr(k,q*M),s.rangeBand){var T=s,R=T.rangeBand()/2;f=s=function(n){return T(n)+R}}else f.rangeBand?f=s:d.call(n,s,f);v.call(n,f,s),y.call(n,s,s)})}var t,e=ao.scale.linear(),r=Vl,i=6,u=6,o=3,a=[10],l=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xl?t+"":Vl,n):r},n.ticks=function(){return arguments.length?(a=co(arguments),n):a},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(i=+t,u=+arguments[e-1],n):i},n.innerTickSize=function(t){return arguments.length?(i=+t,n):i},n.outerTickSize=function(t){return arguments.length?(u=+t,n):u},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Vl="bottom",Xl={top:1,right:1,bottom:1,left:1};ao.svg.brush=function(){function n(t){t.each(function(){var t=ao.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=t.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=t.selectAll(".resize").data(v,m);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return $l[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,s=ao.transition(t),h=ao.transition(o);c&&(l=Zi(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),r(s)),f&&(l=Zi(f),h.attr("y",l[0]).attr("height",l[1]-l[0]),i(s)),e(s)})}function e(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+h[+/^s/.test(n)]+")"})}function r(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==ao.event.keyCode&&(C||(M=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function v(){32==ao.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function d(){var n=ao.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ao.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0]<M[0])],L[1]=h[+(n[1]<M[1])]):M=null),E&&y(n,c,0)&&(r(k),t=!0),A&&y(n,f,1)&&(i(k),t=!0),t&&(e(k),w({type:"brush",mode:C?"move":"resize"}))}function y(n,t,e){var r,i,u=Zi(t),l=u[0],c=u[1],f=L[e],v=e?h:s,d=v[1]-v[0];return C&&(l-=f,c-=d+f),r=(e?g:p)?Math.max(l,Math.min(c,n[e])):n[e],C?i=(r+=f)+d:(M&&(f=Math.max(l,Math.min(c,2*M[e]-r))),r>f?(i=r,r=f):i=f),v[0]!=r||v[1]!=i?(e?a=null:o=null,v[0]=r,v[1]=i,!0):void 0}function m(){d(),k.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ao.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),z(),w({type:"brushend"})}var M,x,b=this,_=ao.select(ao.event.target),w=l.of(b,arguments),k=ao.select(b),N=_.datum(),E=!/^(n|s)$/.test(N)&&c,A=!/^(e|w)$/.test(N)&&f,C=_.classed("extent"),z=W(b),L=ao.mouse(b),q=ao.select(t(b)).on("keydown.brush",u).on("keyup.brush",v);if(ao.event.changedTouches?q.on("touchmove.brush",d).on("touchend.brush",m):q.on("mousemove.brush",d).on("mouseup.brush",m),k.interrupt().selectAll("*").interrupt(),C)L[0]=s[0]-L[0],L[1]=h[0]-L[1];else if(N){var T=+/w$/.test(N),R=+/^n/.test(N);x=[s[1-T]-L[0],h[1-R]-L[1]],L[0]=s[T],L[1]=h[R]}else ao.event.altKey&&(M=L.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),ao.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),d()}var o,a,l=N(n,"brushstart","brush","brushend"),c=null,f=null,s=[0,0],h=[0,0],p=!0,g=!0,v=Bl[0];return n.event=function(n){n.each(function(){var n=l.of(this,arguments),t={x:s,y:h,i:o,j:a},e=this.__chart__||t;this.__chart__=t,Hl?ao.select(this).transition().each("start.brush",function(){o=e.i,a=e.j,s=e.x,h=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=xr(s,t.x),r=xr(h,t.y);return o=a=null,function(i){s=t.x=e(i),h=t.y=r(i),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=t.i,a=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,v=Bl[!c<<1|!f],n):c},n.y=function(t){return arguments.length?(f=t,v=Bl[!c<<1|!f],n):f},n.clamp=function(t){return arguments.length?(c&&f?(p=!!t[0],g=!!t[1]):c?p=!!t:f&&(g=!!t),n):c&&f?[p,g]:c?p:f?g:null},n.extent=function(t){var e,r,i,u,l;return arguments.length?(c&&(e=t[0],r=t[1],f&&(e=e[0],r=r[0]),o=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(l=e,e=r,r=l),e==s[0]&&r==s[1]||(s=[e,r])),f&&(i=t[0],u=t[1],c&&(i=i[1],u=u[1]),a=[i,u],f.invert&&(i=f(i),u=f(u)),i>u&&(l=i,i=u,u=l),i==h[0]&&u==h[1]||(h=[i,u])),n):(c&&(o?(e=o[0],r=o[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(l=e,e=r,r=l))),f&&(a?(i=a[0],u=a[1]):(i=h[0],u=h[1],f.invert&&(i=f.invert(i),u=f.invert(u)),i>u&&(l=i,i=u,u=l))),c&&f?[[e,i],[r,u]]:c?[e,r]:f&&[i,u])},n.clear=function(){return n.empty()||(s=[0,0],h=[0,0],o=a=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!f&&h[0]==h[1]},ao.rebind(n,l,"on")};var $l={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Bl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Wl=ga.format=xa.timeFormat,Jl=Wl.utc,Gl=Jl("%Y-%m-%dT%H:%M:%S.%LZ");Wl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?eo:Gl,eo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},eo.toString=Gl.toString,ga.second=On(function(n){return new va(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ga.seconds=ga.second.range,ga.seconds.utc=ga.second.utc.range,ga.minute=On(function(n){return new va(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ga.minutes=ga.minute.range,ga.minutes.utc=ga.minute.utc.range,ga.hour=On(function(n){var t=n.getTimezoneOffset()/60;return new va(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ga.hours=ga.hour.range,ga.hours.utc=ga.hour.utc.range,ga.month=On(function(n){return n=ga.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ga.months=ga.month.range,ga.months.utc=ga.month.utc.range;var Kl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ql=[[ga.second,1],[ga.second,5],[ga.second,15],[ga.second,30],[ga.minute,1],[ga.minute,5],[ga.minute,15],[ga.minute,30],[ga.hour,1],[ga.hour,3],[ga.hour,6],[ga.hour,12],[ga.day,1],[ga.day,2],[ga.week,1],[ga.month,1],[ga.month,3],[ga.year,1]],nc=Wl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",zt]]),tc={range:function(n,t,e){return ao.range(Math.ceil(n/e)*e,+t,e).map(io)},floor:m,ceil:m};Ql.year=ga.year,ga.scale=function(){return ro(ao.scale.linear(),Ql,nc)};var ec=Ql.map(function(n){return[n[0].utc,n[1]]}),rc=Jl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",zt]]);ec.year=ga.year.utc,ga.scale.utc=function(){return ro(ao.scale.linear(),ec,rc)},ao.text=An(function(n){return n.responseText}),ao.json=function(n,t){return Cn(n,"application/json",uo,t)},ao.html=function(n,t){return Cn(n,"text/html",oo,t)},ao.xml=An(function(n){return n.responseXML}),"function"==typeof define&&define.amd?(this.d3=ao,define(ao)):"object"==typeof module&&module.exports?module.exports=ao:this.d3=ao}();},{}], +2:[function(require,module,exports){ +"use strict"; + +var d3 = require('d3'); + +//aigner: functions for drawing expand- and collapse-symbols +function drawExpandSymbol(aCircle, line1, line2) +{ + aCircle = aCircle + .attr("r", 10) + .style("stroke", "black") + .style("stroke-width", 2) + .style("fill", "green") + .style("fill-opacity", .6) + line1 = line1 + .attr("x1", parseFloat(aCircle.attr("cx"))-5) + .attr("y1", parseFloat(aCircle.attr("cy"))) + .attr("x2", parseFloat(aCircle.attr("cx"))+5) + .attr("y2", parseFloat(aCircle.attr("cy"))) + .style("stroke", "black") + .style("stroke-width", 2); + line2 = line2 + .attr("x1", parseFloat(aCircle.attr("cx"))) + .attr("y1", parseFloat(aCircle.attr("cy"))-5) + .attr("x2", parseFloat(aCircle.attr("cx"))) + .attr("y2", parseFloat(aCircle.attr("cy"))+5) + .style("stroke", "black") + .style("stroke-width", 2); +} +function drawRemoveSymbol(anXdsm, aCircle, aMinus) +{ + var xOffset=150; + var yOffset=12; + aCircle = aCircle + .attr("cx", anXdsm.svg.attr("width")-xOffset) + .attr("cy", yOffset) + .attr("r", 10) + .classed("remCircle",true) + aMinus = aMinus + .attr("x1", anXdsm.svg.attr("width")-xOffset+5) + .attr("y1", yOffset) + .attr("x2", anXdsm.svg.attr("width")-xOffset-5) + .attr("y2", yOffset) + .classed("remMinus",true) +} +//d3-context-menu for right-click-option +d3.contextMenu = function (menu, openCallback) { + + // create the div element that will hold the context menu + d3.selectAll('.d3-context-menu').data([1]) + .enter() + .append('div') + .attr('class', 'd3-context-menu'); + + // close menu + d3.select('body').on('click.d3-context-menu', function() { + d3.select('.d3-context-menu').style('display', 'none'); + }); + + // this gets executed when a contextmenu event occurs + return function(data, index) { + var elm = this; + + d3.selectAll('.d3-context-menu').html(''); + var list = d3.selectAll('.d3-context-menu').append('ul'); + list.selectAll('li').data(menu).enter() + .append('li') + .html(function(d) { + return d.title; + }) + .on('mousedown', function(d, i) { + d.onMouseDown(elm, data, index); + }) + .on('mouseup', function(d, i) { + d.onMouseUp(elm, data, index); + d3.select('.d3-context-menu').style('display', 'none'); + }) + .on('mouseenter',function(d,i){ + d.onMouseOver(elm,data,index); + if(d.childrenItems.length>0 ) + { + d3.select(this).selectAll("ul").remove(); + d3.select(this) + .append("ul") + .selectAll("li") + .data(d.childrenItems) + .enter().append("li") + .text(function(d) { return d.title; }) + .on("mouseenter", function(d,i){ + d.onMouseOver(elm,data,index); + }) + .on('click', function(d, i) { + d.onMouseClick(elm, d, index); + }) + .on('mouseleave',function(d,i){ + + }); + } + else + return false; + }) + .on('mouseleave',function(d,i){ + d3.select(this).selectAll("ul").style('display', 'none') + }); + + + + // the openCallback allows an action to fire before the menu is displayed + // an example usage would be closing a tooltip + if (openCallback) openCallback(data, index); + + // display context menu + d3.select('.d3-context-menu') + .style('left', (d3.event.pageX - 2) + 'px') + .style('top', (d3.event.pageY - 2) + 'px') + .style('display', 'block'); + + d3.event.preventDefault(); + }; +}; + +function makeKadmosMenu(theGraphs,currentView,currentID) +{ + var imageWidth = 200; + var imageHeight = 150; + var padding = 10; + var rectHeight = 70; + var imgSize = 40; + var visPackDiv = d3.select("body").append("div").attr("class","vispackDiv"); + var visPackSvg = visPackDiv.append("svg") + .attr("class","visPackSvg") + .attr("width",imageWidth*5+40) + .attr("height",imageHeight+40) + .attr("transform", "translate(" + + String(10) + "," + String(10) + ")") + + + var defs = visPackSvg.append("defs"); + var filter = defs.append("filter") + .attr("id", "drop-shadow") + .attr("height", "130%") + filter.append("feColorMatrix") + .attr("values", "0.2 0 0 0 0 0 0.2 0 0 0 0 0 0.2 0 0 0 0 0 1 0") + .attr("result", "matrixOut") + filter.append("feGaussianBlur") + .attr("in", "matrixOut") + .attr("stdDeviation", 5) + .attr("result", "blur") + filter.append("feOffset") + .attr("in", "blur") + .attr("dx", 5) + .attr("dy", 5) + .attr("result", "offsetBlur") + var feMerge = filter.append("feMerge"); + feMerge.append("feMergeNode") + .attr("in", "offsetBlur") + feMerge.append("feMergeNode") + .attr("in", "SourceGraphic"); + + var visPackFrame = visPackSvg.append("rect") + .attr("width",imageWidth*5+12) + .attr("height",imageHeight) + .attr("fill", "white") + .style("filter", "url(#drop-shadow)") + + var imgs = visPackSvg.selectAll("image").data([0]); + imgs.enter() + .append("svg:image") + .attr("x",5) + .attr("xlink:href", "file:../supportFiles/include/KADMOS_VisualizationPack_Icon.png") + .attr("width", imageWidth) + .attr("height", imageHeight) + .attr("position", "relative") + + var offset_tmp = 860; + visPackSvg.append("text") + .attr("transform", "translate(" + + String(210) + "," + String(35) + ")") + .attr("font-family","Arial") + .attr("font-size","32pt") + .attr("fill","#666666") + .text("KADMOS Visualization Package") + + + var acknGroup = visPackSvg.append("g").attr("class","acknGroup").classed("acknGroup",true) + var acknRect = acknGroup.append("rect").classed("ackn",true) + .attr("height", 30) + .attr("transform", "translate(" + + String(offset_tmp) + "," + String(2) + ")") + acknGroup.append("text") + .attr("transform", "translate(" + + String(offset_tmp+padding/2) + "," + String(20) + ")") + .attr("text-anchor", "front") + .attr("font-family","Arial") + .attr("font-size","12pt") + .attr("fill","white") + .text("Acknowledgements") + acknRect = acknRect.attr("width", function(d) {return this.parentNode.getBBox().width+padding;}) + acknRect = acknRect.classed("VisPackMenu",true) + acknGroup = acknGroup.on("mouseover", function(){d3.select(this).style("cursor", "pointer")}) + .on("click",function(){window.open("../supportFiles/include/acknowledgements.html", '_blank');}) + + var acknGroup2 = visPackSvg.append("g").attr("class","acknGroup2") + .attr("transform", "translate(" + + String(offset_tmp) + "," + String(40+padding) + ")") + acknGroup2.append("text") + .classed("acknText",true) + .attr("dy", "0em") + .text("Copyright:") + acknGroup2.append("text") + .classed("acknText",true) + .attr("dy", "1.5em") + .text("B. Aigner") + var imgs = visPackSvg.selectAll("img").data([0]); + imgs.enter() + .append("svg:image") + .attr("xlink:href", "file:../supportFiles/include/RWTH_Logo.png") + .attr("x", String(offset_tmp+85)) + .attr("y", "3em") + .attr("width", "60") + .attr("height", "40"); + acknGroup2.append("text") + .classed("acknText",true) + .attr("dy", "3.2em") + .text("I. van Gent") + var imgs = visPackSvg.selectAll("img").data([0]); + imgs.enter() + .append("svg:image") + .attr("xlink:href", "file:../supportFiles/include/TUDelft_Logo.png") + .attr("x", String(offset_tmp+85)) + .attr("y", "4.7em") + .attr("width", "60") + .attr("height", "40"); + + + var ul = d3.select("body").append("div").attr("class","newDiv").append("ul") + function makeViewButtons(graphs_tmp,aName, visFile) + { + var dropdown1 = ul.append("li").on("mouseover", function(){d3.select(this).style("cursor", "default")}) + dropdown1.append("a").text(aName) + dropdown1.append("img").attr("src","../supportFiles/include/AGILE_Icon.png") + .attr("align","left") + .style("margin-left","6px") + .style("margin-right","0px") + .style("margin-top","6px") + .style("margin-bottom","6px") + .attr("height","42") + .attr("width","42") + var links = dropdown1.append("ul"); + for (var i=0; i < graphs_tmp.length; i++) + { + makeDropDown(graphs_tmp[i],visFile,links,aName) + } + } + function makeDropDown(theData,file,theLinks,aName) + { + var linkLi = theLinks.append("li"); + var link = linkLi.append("a").text(theData.description) + if (theData.id == currentID && currentView == aName) + { + link + .on("mouseover", function(){ + d3.select(this).style("cursor", "default")}) + linkLi.style("background","#888") + } + else + { + link + .on("mouseover", function(){d3.select(this).style("cursor", "pointer")}) + .on("click", function(){ + window.location.replace("../supportFiles/"+file, '_blank'); + window.localStorage.setItem("graphID", theData.id);}) + } + } + makeViewButtons(theGraphs,"XDSM","xdsm.html"); + makeViewButtons(theGraphs,"Edge Bundles","edgeBundles.html"); + makeViewButtons(theGraphs,"Sankey Diagram","sankeyDiagram.html"); +} + +function tabulate(aTable,data,columns) { + var thead = aTable.append('thead'); + var tbody = aTable.append('tbody'); + + // create a row for each object in the data + var rows = tbody.selectAll('tr') + .data(data) + .enter() + .append('tr'); + + // create a cell in each row for each column + var cells = rows.selectAll('td') + .data(function (row) { + return columns.map(function (column) { + return {column: column, value: row[column]}; + }); + }) + .enter() + .append('td') + .html(function (d) { return d.value; }); + + return aTable; +} + +//aigner: Move to front function +d3.selection.prototype.moveToFront = function() { + return this.each(function(){ + this.parentNode.appendChild(this); + }); +}; +//aigner: Move to back function +d3.selection.prototype.moveToBack = function() { + return this.each(function() { + var firstChild = this.parentNode.firstChild; + if (firstChild) { + this.parentNode.insertBefore(this, firstChild); + } + }); +}; + +//get the current graph ID from the KADMOS visualiazation package's starting page +var graphID = "01"; +if (window.localStorage.getItem("graphID")) +{ + graphID=window.localStorage.getItem("graphID"); +} +var jsonFile = "json/circleLayout_"+graphID+".json"; +var schemaFile = "json/schema_"+graphID+".json" +//Get graph info from graphs.json file +var graphs; +var varCategories; +d3.json("json/graphs.json", function(error, aGraphInfo) +{ + if (error) {throw error;} + graphs = aGraphInfo.graphs; + varCategories = aGraphInfo.categories; +}) + +var diameter = 1500, + radius = diameter / 2, + innerRadius = radius - 250; + +var cluster = d3.layout.cluster() + .size([360, innerRadius]) + .sort(null) + .value(function(d) { return d.size; }); + +var bundle = d3.layout.bundle(); + +var line = d3.svg.line.radial() + .interpolate("bundle") + .tension(0.5) + .radius(function(d) { return d.y; }) + .angle(function(d) { return d.x / 180 * Math.PI; }); + +var svg = d3.select("body").append("div").append("svg") + .attr("class","circleSvg") + .attr("width", 10000) + .attr("height", 10000) + .append("g") + .attr("transform", "translate(" + radius*1.2 + "," + radius*1.2+ ")"); + +var width = diameter*1.5; +var imgWidth = width; +var imgs = svg.selectAll("image").data([0]); +imgs.enter() +.append("svg:image") +.attr("xlink:href", "../include/AGILE_Background.png") +.attr("x", -width/2) +.attr("y", -100) +.attr("width", imgWidth) +.attr("height", imgWidth/4.8) +.attr("opacity", 1) + +var link = svg.append("g").selectAll(".link"), + invisibleLink = svg.append("g").selectAll(".invisibleLink"), + node = svg.append("g").selectAll(".node"); + +d3.json(jsonFile, function(error, classes) { + d3.json (schemaFile, function(schema) + { + if (error) throw error; + + makeKadmosMenu(graphs,"Edge Bundles",graphID); + + //aigner: Tree option menu to select which kind of tree view the user wants to see + //#####################################################################// + function showFullTree(categoryName) + { + var theSchema; + $.ajax({ + dataType: "json", + url: "json/"+categoryName+".json", + async: false, + success: function(data){theSchema = JSON.parse(JSON.stringify(data))} + }); + var name_tmp = "Full tree view"; + var emptyArray=""; + var allLinks = d3.selectAll(".link"); + createTreeLayout(name_tmp,theSchema,emptyArray,allLinks); + } + + var childrenItems = []; + for (var j=0; j< varCategories.length; j++) + { + childrenItems.push({title: 'according to ' + varCategories[j].description, + identifier: varCategories[j].name+"_"+graphID, + onMouseClick: function(elm, d, i) {showFullTree(d.identifier)}, + onMouseOver: function(elm,d,i){}}) + } + var treeOptionMenu = [ + { + title: 'Show variable tree...', + onMouseDown: function(elm, d, i) { + }, + onMouseUp: function(elm, d, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: childrenItems + } + ] + //#####################################################################// + //aigner: treeLayout in the bottom + //################################################################################################// + //aigner: tree layout is done + var emptyArray; + var expandSymbolDiv = d3.select("body").append("div").attr("class","expandSymbolDiv"); + var expandSymbolSvg = expandSymbolDiv.append("svg").attr("width",400).attr("height",100); + var expandSymbol = expandSymbolSvg.append("g") + .attr("class", "newExpandSymbol") + .attr("transform", "translate(38,12)"); + var expandRect = expandSymbol.append("rect") + .attr("x",-28) + .attr("height", 50) + .attr("fill", "#666666") + .attr("stroke", "none") + .attr("stroke-width", 2) + .attr("fill-opacity", 1) + var expCircle = expandSymbol.append("circle") + .attr("cx", -10) + .attr("cy", 25); + var expLine1 = expandSymbol.append("line"); + var expLine2 = expandSymbol.append("line"); + drawExpandSymbol(expCircle,expLine1,expLine2); + expCircle = expCircle.attr("fill", "white"); + expandSymbol.append("text") + .attr("transform", "translate(15,35)") + .attr("font-family","Arial") + .attr("font-size","24pt") + .attr("fill","white") + .text("Show full variable tree") + expandRect.attr("width", function(d) {return this.parentNode.getBBox().width+40}) + expandSymbol + .on("mouseover", function(){ + d3.select(this).style("cursor", "pointer") + expCircle.style("fill", "green").style("fill-opacity", .8); + expandRect.style("fill", "#4677f8"); + showRightClickOption(); + }) + .on("mouseout", function(){ + expCircle.style("fill", "green").style("fill-opacity", .6); + expandRect.style("fill", "#666666"); + hideRightClickOption(); + }) + .on('contextmenu', d3.contextMenu(treeOptionMenu)) + //################################################################################################// + + + //aigner: legend + //################################################################################################// + // var legendDiv = d3.select("body").append("div").attr("class","legendDiv"); + // var legendSVG = legendDiv.append("svg").attr("width",1000).attr("height",200); + // var legend = legendSVG.append("g") + // .attr("class", "legend") + // .attr("transform", "translate(38,12)"); + // var legendFrame = legend.append("rect") + // .attr("x",-28) + // .attr("height", 150) + // .attr("width", 400) + // .attr("fill", "none") + // .attr("stroke", "#8888") + // .attr("stroke-width", 3) + // legend.append("text") + // .attr("transform", "translate(-20,24)") + // .attr("font-family","Arial") + // .attr("font-size","16pt") + // .attr("font-weight",700) + // .attr("fill","black") + // .text("Legend") + // legend.append("line") + // .attr("x1", -20) + // .attr("y1", 50) + // .attr("x2", 20) + // .attr("y2", 50) + // .style("stroke", "#CC0000") + // .style("stroke-width", 5); + // legend.append("line") + // .attr("x1", -20) + // .attr("y1", 90) + // .attr("x2", 20) + // .attr("y2", 90) + // .style("stroke", "#99CC00") + // .style("stroke-width", 5); + // legend.append("text") + // .attr("transform", "translate(30,56)") + // .attr("font-family","Arial") + // .attr("font-size","12pt") + // .attr("fill","black") + // .text("Input") + // legend.append("text") + // .attr("transform", "translate(30,96)") + // .attr("font-family","Arial") + // .attr("font-size","12pt") + // .attr("fill","black") + // .text("Output") + + //################################################################################################// + + + d3.select(".legendDiv").moveToBack() + d3.select(".expandSymbolDiv").moveToBack() + d3.select(".newDiv").moveToBack() + d3.select(".vispackDiv").moveToBack() + + var nodes = cluster.nodes(packageHierarchy(classes)); + var links = packageImports(nodes); + + links.forEach(function(d) + { + d.pipeData_in = d.source.pipeline_data[d.target.name]; + d.pipeData_out = d.target.pipeline_data[d.source.name]; + d.pipeDataName_in = ""; + d.pipeDataName_out = ""; + if (d.pipeData_in) + { + for (var i=0; i<d.pipeData_in.length; i++) + { + d.pipeDataName_in += "," + d.pipeData_in[i]; + } + } + if (d.pipeData_out) + { + for (var i=0; i<d.pipeData_out.length; i++) + { + d.pipeDataName_out += "," + d.pipeData_out[i]; + } + + } + }) + + link = link + .data(bundle(links)) + .enter().append("path") + .each(function(d) { + d.source = d[0]; + d.target = d[d.length - 1];}) + .attr("class", "link") + .attr("d", line) + + + + invisibleLink = invisibleLink + .data(bundle(links)) + .enter().append("path") + .each(function(d) { + d.source = d[0]; + d.target = d[d.length - 1]; + d.createNew = true;}) + .attr("class", "invisibleLink") + .attr("d", line) + + + function showLinkTree(aLink,aVarCategory) + { + var theSchema; + $.ajax({ + dataType: "json", + url: "json/"+aVarCategory+".json", + async: false, + success: function(data){theSchema = JSON.parse(JSON.stringify(data))} + }); + var name_tmp = "Variable flow: " + aLink.__data__.source.name + " → " + aLink.__data__.target.name + createTreeLayout(name_tmp,theSchema,aLink.__data__,link); + } + + function showEdgeTable(aLink) + { + aLink.pipeData_in = aLink.source.pipeline_data[aLink.target.name]; + aLink.pipeData_out = aLink.target.pipeline_data[aLink.source.name]; + aLink.pipeDataName_in = ""; + aLink.pipeDataName_out = ""; + aLink.name = ""; + if (aLink.pipeData_in) + { + for (var i=0; i<aLink.pipeData_in.length; i++) + { + if (i==0){aLink.pipeDataName_in += aLink.pipeData_in[i];} + else{aLink.pipeDataName_in += "," + aLink.pipeData_in[i];} + + } + aLink.name += aLink.pipeDataName_in + } + if (aLink.pipeData_out) + { + for (var i=0; i<aLink.pipeData_out.length; i++) + { + if (i==0){aLink.pipeDataName_out += aLink.pipeData_out[i];} + else{aLink.pipeDataName_out += "," + aLink.pipeData_out[i];} + } + aLink.name += aLink.pipeDataName_out + } + + + var edgeTableDiv = d3.select("body").append("div").attr("class","edgeTableDiv") + .style('left', (d3.event.pageX - 2) + 'px') + .style('top', (d3.event.pageY - 2) + 'px') + .style("position", "absolute") + var edgeTableGroup = edgeTableDiv.append("g").attr("class","edgeTableGroup") + + //Drag Function for edge table + var xPos_init = d3.event.x - 2; + var yPos_init = d3.event.y - 2; + var xOffset_tmp; + var yOffset_tmp; + var drag = d3.behavior.drag() + .on("dragstart", dragstarted) + .on("drag", dragged) + .on("dragend", dragended); + function dragstarted() { + xOffset_tmp = xPos_init-d3.event.sourceEvent.clientX; + yOffset_tmp = yPos_init-d3.event.sourceEvent.clientY; + } + function dragged() { + d3.select(this) + .style("left",(d3.event.x+xOffset_tmp) + "px") + .style("top",(d3.event.y+yOffset_tmp) + "px") + } + function dragended() { + xPos_init = d3.event.sourceEvent.clientX+xOffset_tmp; + yPos_init = d3.event.sourceEvent.clientY+yOffset_tmp; + } + edgeTableDiv.call(drag); + + var headLine = "Edge Information (" + aLink.source.key + " - " + aLink.target.key + ")"; + + var tabRemoveSVG = edgeTableGroup.append("svg") + .attr("width",String(headLine.length*12+"pt")) + .attr("height",26) + tabRemoveSVG.append("rect") + .attr("width", "100%") + .attr("height", "100%") + .attr("fill", "white"); + var tabRemoveSymbol = tabRemoveSVG.append("g"); + tabRemoveSymbol = tabRemoveSymbol + .attr("class", "tabRemoveSymbol") + .attr("transform", "translate(26,0)") + var circle = tabRemoveSymbol.append("circle") + .classed("remCircle",true) + var minus = tabRemoveSymbol.append("line").classed("remMinus",true) + var cx = -20; + var cy = 12; + circle = circle + .attr("cx", cx+5) + .attr("cy", cy) + .attr("r", 10) + minus = minus + .attr("x1", cx) + .attr("y1", cy) + .attr("x2", cx+10) + .attr("y2", cy) + + tabRemoveSVG.append("text").attr("class","tabRemoveText") + .attr("transform", "translate(26,20)") + .attr("fill", "black") + .style("font-family", "Arial") + .style("font-size", "16pt") + .style("font-weight", "bold") + .text(headLine); + + tabRemoveSymbol + .on("mouseover", function(){ + d3.select(this).style("cursor", "pointer") + circle.style("fill", "red").style("fill-opacity", .8); + }) + .on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)}) + tabRemoveSymbol.on("click", function(d) + { + edgeTableDiv.remove(); + }) + + var anEdgeNameSplit = aLink.name.split(',') + var numberOfconnections = anEdgeNameSplit.length; + var theLeafNodes = []; + var dimension=0; + var nullDim=false; + var undefinedLeafs; + var treeData; + $.ajax({ + dataType: "json", + url: "json/"+varCategories[0].name+"_"+graphID+".json", + async: false, + success: function(data){treeData = JSON.parse(JSON.stringify(data))} + }); + var pipeData = aLink.name; + getPrunedLeafNodes("/"+treeData.name+"/", treeData.children, pipeData, theLeafNodes) + var undefLeafsNumber=0; + var defLeafsNumber=0; + for (var k=0;k<theLeafNodes.length;k++) + { + if (theLeafNodes[k].dimension!=null){dimension = dimension+theLeafNodes[k].dimension} + else{nullDim=true} + if (theLeafNodes[k].value.includes("could not be found")||theLeafNodes[k].value.includes("unknown")) + { + if (undefLeafsNumber==0){undefinedLeafs += theLeafNodes[k].xPath;} + else {undefinedLeafs += "," + theLeafNodes[k].xPath;} + undefLeafsNumber ++; + } + else + { + defLeafsNumber++; + } + } + //Render data for table + var data = []; + data.push({ "name" : "Total number of connections", "value" : numberOfconnections }) + data.push({ "name" : "Number of referenced connections", "value" : defLeafsNumber }) + data.push({ "name" : "Dimension of referenced connections", "value" : String(dimension) }) + if (undefinedLeafs) + { + data.push({ "name" : "Number of unreferenced connections", "value" : undefLeafsNumber}) + } + var table = edgeTableGroup.append('table'); + tabulate(table,data,['name', 'value']); // 2 column table + if (undefinedLeafs) + { + var undefLeafTreeSVG = edgeTableGroup.append("svg") + .attr("transform", "translate(0,20)") + .attr("width",String(headLine.length*9.5+"pt")) + .attr("height",50) + undefLeafTreeSVG.append("rect") + .attr("width", "100%") + .attr("height", "100%") + .attr("fill", "white"); + var expandSymbol = undefLeafTreeSVG.append("g") + .attr("class", "newExpandSymbol") + .attr("transform", "translate(38,12)"); + var expandRect = expandSymbol.append("rect") + .attr("x",-28) + .attr("height", 50) + .attr("fill", "#666666") + .attr("stroke", "none") + .attr("stroke-width", 2) + .attr("fill-opacity", 1) + var expCircle = expandSymbol.append("circle") + .attr("cx", -26) + .attr("cy", 0); + var expLine1 = expandSymbol.append("line"); + var expLine2 = expandSymbol.append("line"); + drawExpandSymbol(expCircle,expLine1,expLine2); + expCircle = expCircle.attr("fill", "white"); + expandSymbol + .on("mouseover", function(){ + d3.select(this).style("cursor", "pointer") + expCircle.style("fill", "green").style("fill-opacity", .8); + }) + .on("mouseout", function(){ + expCircle.style("fill", "green").style("fill-opacity", .6); + }) + undefLeafTreeSVG.append("text").attr("class","tabRemoveText") + .attr("transform", "translate(26,20)") + .attr("fill", "black") + .style("font-family", "Arial") + .style("font-size", "16pt") + .style("font-weight", "bold") + .text("Show unreferenced connections as tree"); + expandSymbol.on("mousedown", function(){ + var name_tmp = "Unref. connections: " + aLink.source.name + " → " + aLink.target.name + createTreeLayout(name_tmp,treeData,aLink,link); + }) + } + + } + + //linkMenu --> functions for right click options + var linkChildrenItems = []; + for (var j=0; j< varCategories.length; j++) + { + linkChildrenItems.push({title: 'according to ' + varCategories[j].description, + identifier: varCategories[j].name+"_"+graphID, + onMouseClick: function(elm, data, i) {showLinkTree(elm,data.identifier)}, + onMouseOver: function(elm,data,i){}}); + } + var linkMenu = [ + { + title: 'Show edge info', + onMouseDown: function(elm, k, i) { + showEdgeTable(k) + }, + onMouseUp: function(elm, k, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: [] + }, + { + title: 'Show variable tree...', + onMouseDown: function(elm, k, i) { + }, + onMouseUp: function(elm, k, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: linkChildrenItems + } + ] + invisibleLink + .on("mouseover", function(){d3.select(this).style("cursor", "pointer")}) + .on('contextmenu', d3.contextMenu(linkMenu)); + + //aigner: CAUTION, HACK --> delete the obsolete object that contains duplicate information + nodes.forEach(function(aNode,i) + { + if (aNode.children) + { + var index = nodes.indexOf(aNode); + if (index > -1) + { + nodes.splice(index, 1); + } + } + }); + + //aigner: Create the nodes in a circular view + node = node + .data(nodes) + .enter().append("text") + .attr("class", "node") + .attr("dy", ".31em") + .attr("transform", function(d) { return "rotate(" + (d.x - 90) + ")translate(" + (d.y + 8) + ",0)" + (d.x < 180 ? "" : "rotate(180)"); }) + .style("text-anchor", function(d) { return d.x < 180 ? "start" : "end"; }) + .style("font-family","Arial") + .style("font-size","16pt") + .text(function(d) { return d.name; }) + .on("mouseover", nodeMouseovered) + .on("mouseout", nodeMouseouted); + + //aigner: Right click options for tools + //############################################################################################################################## + //aigner: assign additional node information to nodes coming from xdsm information + var theXDSM; + $.ajax({ + dataType: "json", + url: "json/xdsm_"+graphID+".json", + async: false, + success: function(data){theXDSM = JSON.parse(JSON.stringify(data))} + }); + nodes.forEach(function(aNode,i) + { + var xdsmNodes = theXDSM.nodes; + for (var i=0; i< xdsmNodes.length; i++) + { + var xdsmNode = xdsmNodes[i]; + if (xdsmNode.name == aNode.name) + { + aNode.id = xdsmNode.id; + aNode.metadata = xdsmNode.metadata; + aNode.type = xdsmNode.type; + } + } + }); + + //aigner: Table for competence/tool information + //############################################################ + function showToolTable(aTool) + { + var toolTableDiv = d3.select("body").append("div").attr("class","toolTableDiv") + .style('left', (d3.event.x - 2) + 'px') + .style('top', (d3.event.y - 2) + 'px') + .style("position", "absolute") + var toolTableGroup = toolTableDiv.append("g").attr("class","toolTableGroup") + + //Drag Function for variable table + var xPos_init = d3.event.x - 2; + var yPos_init = d3.event.y - 2; + var xOffset_tmp; + var yOffset_tmp; + var drag = d3.behavior.drag() + .on("dragstart", dragstarted) + .on("drag", dragged) + .on("dragend", dragended); + function dragstarted() { + xOffset_tmp = xPos_init-d3.event.sourceEvent.clientX; + yOffset_tmp = yPos_init-d3.event.sourceEvent.clientY; + } + function dragged() { + d3.select(this) + .style("left",(d3.event.x+xOffset_tmp) + "px") + .style("top",(d3.event.y+yOffset_tmp) + "px") + } + function dragended() { + xPos_init = d3.event.sourceEvent.clientX+xOffset_tmp; + yPos_init = d3.event.sourceEvent.clientY+yOffset_tmp; + } + toolTableDiv.call(drag); + + var aToolNameSplit = aTool.name.split(': ') + var headLine; + if (aToolNameSplit.length>1){headLine = "Competence Information: (" + aToolNameSplit[1] + ")";} + else {headLine = "Competence Information: (" + aToolNameSplit[0] + ")";} + + var tabRemoveSVG = toolTableGroup.append("svg") + .attr("width",800) + .attr("height",26) + var tabRemoveRect = tabRemoveSVG.append("rect") + .attr("width", "100%") + .attr("height", "100%") + .attr("fill", "white"); + var tabRemoveSymbol = tabRemoveSVG.append("g"); + tabRemoveSymbol = tabRemoveSymbol + .attr("class", "tabRemoveSymbol") + .attr("transform", "translate(26,0)") + var circle = tabRemoveSymbol.append("circle") + .classed("remCircle",true) + var minus = tabRemoveSymbol.append("line").classed("remMinus",true) + var cx = -20; + var cy = 12; + circle = circle + .attr("cx", cx+5) + .attr("cy", cy) + .attr("r", 10) + minus = minus + .attr("x1", cx) + .attr("y1", cy) + .attr("x2", cx+10) + .attr("y2", cy) + + tabRemoveSVG.append("text").attr("class","tabRemoveText") + .attr("transform", "translate(26,20)") + .attr("fill", "black") + .style("font-family", "Arial") + .style("font-size", "16pt") + .style("font-weight", "bold") + .text(headLine); + + tabRemoveSymbol + .on("mouseover", function(){ + d3.select(this).style("cursor", "pointer") + circle.style("fill", "red").style("fill-opacity", .8); + }) + .on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)}) + tabRemoveSymbol.on("click", function(d) + { + toolTableDiv.remove(); + }) + + + var data = []; + // render the table(s) + if (aTool.metadata.length==0) + { + data.push({ "name" : "NO TOOL METADATA AVAILABLE", "value" : "..." }) + } + for (var j=0; j < aTool.metadata.length;j++) + { + var metaData = aTool.metadata[j] + for(var key in metaData){ + data.push({ "name" : key, "value" : metaData[key] }) + } + + } + var table = toolTableGroup.append('table'); + tabulate(table,data,['name', 'value']); // 2 column table + } + //############################################################ + + //aigner: Creation of input/output tree + //############################################################ + function showIOTree(categoryName, theNode, io) + { + var links = d3.selectAll(".link")[0]; + var array={name_in:"",name_out:"",name:""}; + var name_tmp = ""; + + links.forEach(function(d) + { + var theLink = d.__data__; + + + var pipeData_in = theLink.source.pipeline_data[theLink.target.name]; + var pipeData_out = theLink.target.pipeline_data[theLink.source.name]; + if (!pipeData_in){pipeData_in = [];} + if (!pipeData_out){pipeData_out = [];} + theLink.pipeData_in = theLink.source.pipeline_data[theLink.target.name]; + theLink.pipeData_out = theLink.target.pipeline_data[theLink.source.name]; + theLink.name_in = ""; + theLink.name_out = ""; + theLink.name = ""; + if (theLink.pipeData_in) + { + for (var i=0; i<theLink.pipeData_in.length; i++) + { + if (i==0){theLink.name_in += theLink.pipeData_in[i];} + else{theLink.name_in += "," + theLink.pipeData_in[i];} + + } + theLink.name += theLink.name_in + } + if (theLink.pipeData_out) + { + for (var i=0; i<theLink.pipeData_out.length; i++) + { + if (i==0){theLink.name_out += theLink.pipeData_out[i];} + else{theLink.name_out += "," + theLink.pipeData_out[i];} + } + theLink.name += theLink.name_out + } + + if (io=="in") + { + if (theLink.target == theNode) + { + if (array.name_in == ""){array.name_in +=theLink.name_out;} + else{array.name_in += "," + theLink.name_out;} + array.name_out = ""; + array.name = array.name_in; + } + if (theLink.source == theNode) + { + if (array.name_in == ""){array.name_in +=theLink.name_in;} + else{array.name_in += "," + theLink.name_in;} + array.name_out = ""; + array.name = array.name_in; + } + name_tmp = "Input tree view:" + theNode.id; + } + else if (io=="out") + { + if (theLink.source == theNode) + { + if (array.name_out == ""){array.name_out +=theLink.name_out;} + else{array.name_out += "," + theLink.name_out;} + array.name_in = ""; + array.name = array.name_out; + } + if (theLink.target == theNode) + { + if (array.name_out == ""){array.name_out +=theLink.name_in;} + else{array.name_out += "," + theLink.name_in;} + array.name_in = ""; + array.name = array.name_out; + } + name_tmp = "Output tree view:" + theNode.id; + } + }) + + + + + var theSchema; + $.ajax({ + dataType: "json", + url: "json/"+categoryName+".json", + async: false, + success: function(data){theSchema = JSON.parse(JSON.stringify(data))} + }); + createTreeLayout(name_tmp,theSchema,array,link) + } + //############################################################ + + var inputChildrenitems = []; + var outputChildrenitems = []; + var inputChildrenitems = []; + var outputChildrenitems = []; + for (var j=0; j< varCategories.length; j++) + { + inputChildrenitems.push({title: 'according to ' + varCategories[j].description, + identifier: varCategories[j].name+"_"+graphID, + onMouseClick: function(elm, data, i) {showIOTree(data.identifier,elm.__data__,"in")}, + onMouseOver: function(elm,data,i){}}); + outputChildrenitems.push({title: 'according to ' + varCategories[j].description, + identifier: varCategories[j].name+"_"+graphID, + onMouseClick: function(elm, data, i) {showIOTree(data.identifier,elm.__data__,"out")}, + onMouseOver: function(elm,data,i){}}); + } + //menu --> functions for right click options + var toolMenu = [ + { + title: 'Show competence info', + onMouseDown: function(elm, k, i) { + showToolTable(k); + }, + onMouseUp: function(elm, k, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: [] + }, + { + title: 'Show input variable tree...', + onMouseDown: function(elm, k, i) { + }, + onMouseUp: function(elm, k, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: inputChildrenitems + }, + { + title: 'Show output variable tree...', + onMouseDown: function(elm, k, i) { + }, + onMouseUp: function(elm, k, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: outputChildrenitems + } + ] + + node.on('contextmenu', d3.contextMenu(toolMenu)); + //############################################################################################################################## + }) +}); + +function showRightClickOption() +{ + var optionGroupDiv = d3.select("body").append("div").attr("class","optionDiv") + .style("left",(d3.event.pageX) + "px") + .style("top",(d3.event.pageY - 28) + "px") + .style("position", "absolute"); + var optionGroupSvg = optionGroupDiv.append("svg").attr("class","optionGroupSvg"); + var optionGroup = optionGroupSvg.append("g").attr("class","optionGroup"); + var optionGroupRect = optionGroup.append("rect") + .transition().delay(400) + .attr("height", 26) + .attr("fill", "#f2f2f2") + .style("border-radius", "4px") + .style("border", "1px solid #d4d4d4") + .attr("fill-opacity", 1.) + .attr("width", 180) + .attr("stroke", "black") + .attr("stroke-width", 1) + var optionText = optionGroup.append("text") + .transition().delay(400) + .attr("transform", "translate(10,18)") + .attr("font-family","Arial") + .attr("font-size","12pt") + .attr("fill","black") + .attr("fill-opacity",1.) + .text("Click right for options") +} +function hideRightClickOption() +{ + d3.selectAll(".optionDiv").remove() +} + +function nodeMouseovered(d) { + showRightClickOption(); + d3.select(this).style("cursor", "pointer") + node + .each(function(n) { + n.target = n.source = false; }); + + link + .classed("link--target", function(l) { if (l.target === d) return l.source.source = true; }) + .classed("link--source", function(l) { if (l.source === d) return l.target.target = true; }) + .filter(function(l) { return l.target === d || l.source === d; }) + .each(function() { this.parentNode.appendChild(this); }); + + node + .classed("node--target", function(n) { return n.target; }) + .classed("node--source", function(n) { return n.source; }) +} + +function nodeMouseouted(d) { + hideRightClickOption(); + link + .classed("link--target", false) + .classed("link--source", false); + + node + .classed("node--target", false) + .classed("node--source", false); +} + +d3.select(self.frameElement).style("height", diameter + "px"); + +// Lazily construct the package hierarchy from class names. +function packageHierarchy(classes) { + var map = {}; + + function find(name, data) { + var node = map[name], i; + if (!node) { + node = map[name] = data || {name: name, children: []}; + if (name.length) { + node.parent = find(name.substring(0, i = name.lastIndexOf("/"))); + node.parent.children.push(node); + node.key = name.substring(i + 1); + } + } + return node; + } + + classes.forEach(function(d) { + find(d.name, d); + }); + + return map[""]; +} + +// Return a list of imports for the given array of nodes. +function packageImports(nodes) { + var map = {}, + map2 = {}, + input = []; + + // Compute a map from name to node. + nodes.forEach(function(d) { + map[d.name] = d; + map2[d.pipeline_data] = d; + }); + + // For each import, construct a link from the source to target node. + nodes.forEach(function(d) + { + if(d.input) + { + d.input.forEach(function(i) + { + if (map[i]) + { + input.push({source: map[d.name], + target: map[i], + pipeline_data: map2[d.pipeline_data]}); + } + }) + } + + }); + return input; +} + +function include(arr,obj) { + return (arr.indexOf(obj) != -1); +} + +function prune_schema(parentXPath, objArray, xPathList_in, xPathList_out) +{ + var firstElement_in = "/"+xPathList_in.split("/")[1]+"/"; + var firstElement_out = "/"+xPathList_out.split("/")[1]+"/"; + for (var i = 0; i < objArray.length; ++i) + { + var obj = objArray[i]; + obj.pipeLineIn = false; + obj.pipeLineOut = false; + var objXPath; + + //aigner: If object has children append a "/" as xPath separator + //else append comma as indicator for last element in the xPath + if (obj.children){objXPath = parentXPath+objArray[i].name+"/";} + else{objXPath = parentXPath+objArray[i].name;} + var objXPathFromFirst_in = objXPath.split(firstElement_in); + var objXPathFromFirst_out = objXPath.split(firstElement_out); + + // console.log("Current node ->") + // console.log(firstElement_in+objXPathFromFirst_in[1]) + // console.log(firstElement_out+objXPathFromFirst_out[1]) + // console.log(xPathList_out) + + var delete_it = true; + if (xPathList_in!="") + { + if(objXPathFromFirst_in[1]==undefined) + { + delete_it = false; + } + else + { + if (include(xPathList_in, firstElement_in+objXPathFromFirst_in[1])) + { + obj.pipeLineIn = true; + delete_it = false; + } + } + } + if (xPathList_out!="") + { + if(objXPathFromFirst_out[1]==undefined) + { + delete_it = false; + } + else + { + if (include(xPathList_out, firstElement_out+objXPathFromFirst_out[1])) + { + obj.pipeLineOut = true; + delete_it = false; + } + } + } + + if (delete_it==true) + { + // console.log("delete ->") + // console.log( objXPathFromFirst_in[1]) + // console.log(xPathList) + + objArray.splice(i, 1); + i--; + } + else + { + // console.log("do not delete ->") + // console.log(objXPath); + if (obj.children) + { + if (obj.children.length==0) + { + objArray.splice(i, 1); + i--; + prune_schema(parentXPath, objArray, xPathList_in, xPathList_out) + } + else{prune_schema(objXPath, obj.children, xPathList_in, xPathList_out);} + + } + } + } +} +function getPrunedLeafNodes(parentXPath, objArray, xPathList, leafNodes) +{ + var firstElement = "/"+xPathList.split("/")[1]+"/"; + for (var i = 0; i < objArray.length; ++i) + { + var obj = objArray[i]; + var objXPath; + + //aigner: If object has children append a "/" as xPath separator + //else append comma as indicator for last element in the xPath + if (obj.children){objXPath = parentXPath+objArray[i].name+"/";} + else{objXPath = parentXPath+objArray[i].name;} + var objXPathFromFirst = objXPath.split(firstElement); + + // console.log("Current node ->") + // console.log(firstElement+objXPathFromFirst[1]) + // console.log(xPathList) + + var delete_it = true; + if(objXPathFromFirst[1]==undefined) + { + delete_it = false; + } + else + { + if (include(xPathList, firstElement+objXPathFromFirst[1])) + { + delete_it = false; + } + } + if (delete_it==true) + { + // console.log("delete ->") + // console.log( objXPathFromFirst[1]) + // console.log(xPathList) + + objArray.splice(i, 1); + i--; + } + else + { + // console.log("do not delete ->") + // console.log(objXPath); + if (obj.children) + { + if (obj.children.length==0) + { + objArray.splice(i, 1); + i--; + getPrunedLeafNodes(parentXPath, objArray, xPathList, leafNodes) + } + else{getPrunedLeafNodes(objXPath, obj.children, xPathList, leafNodes);} + } + else + { + obj.xPath = objXPath; + leafNodes.push(obj); + }; + } + } +} +function clean_tree(objArray) +{ + for (var i = 0; i < objArray.length; ++i) + { + var obj = objArray[i]; + if (obj.children) + { + if (obj.children.length==0) + { + objArray.splice(i, 1); + i--; + } + clean_tree(obj.children); + } + } +} +function countElements(node, counter) +{ + counter ++; + if (node.children) + { + if (node.children.length !== 0) + { + node.children.forEach(function(n) + { + counter = countElements(n, counter); + }); + } + } + return counter; +} +//createTreeLayout(theName,schema,theLinks,theAllLinks) +function createTreeLayout(theName, schema,aLink,theAllLinks) +{ + var theLink = aLink; + if (aLink.source && aLink.target) + { + var pipeData_in = theLink.source.pipeline_data[theLink.target.name]; + var pipeData_out = theLink.target.pipeline_data[theLink.source.name]; + if (!pipeData_in){pipeData_in = [];} + if (!pipeData_out){pipeData_out = [];} + theLink.pipeData_in = theLink.source.pipeline_data[theLink.target.name]; + theLink.pipeData_out = theLink.target.pipeline_data[theLink.source.name]; + theLink.name_in = ""; + theLink.name_out = ""; + theLink.name = ""; + if (theLink.pipeData_in) + { + for (var i=0; i<theLink.pipeData_in.length; i++) + { + if (i==0){theLink.name_in += theLink.pipeData_in[i];} + else{theLink.name_in += "," + theLink.pipeData_in[i];} + + } + theLink.name += theLink.name_in + } + if (theLink.pipeData_out) + { + for (var i=0; i<theLink.pipeData_out.length; i++) + { + if (i==0){theLink.name_out += theLink.pipeData_out[i];} + else{theLink.name_out += "," + theLink.pipeData_out[i];} + } + theLink.name += theLink.name_out + } + } + + + + var treeData = (JSON.parse(JSON.stringify(schema))); + if (theLink) + { + prune_schema("/"+treeData.name+"/", treeData.children, theLink.name_in, theLink.name_out); + //aigner: count all descendants of a node + var firstEl = theLink.name.split("/")[1]; + if(firstEl != treeData.name) + { + var cleanOperations = countElements(treeData,0) + for (var i=0; i<cleanOperations; i++){clean_tree(treeData.children);} + } + } + + var width= 1000; + var height= 500; + var xOffset = 10; + var xOffset2 = 100; + var canvas = d3.select(".circleSvg"); + // Calculate total nodes, max label length + var totalNodes = 0; + var maxLabelLength = 0; + // variables for drag/drop + var selectedNode = null; + var draggingNode = null; + // Misc. variables + var i = 0; + var duration = 500; + var root; + + + // size of the diagram + var viewerWidth = width/3; + var viewerHeight = height-50; + + var tree = d3.layout.tree() + .size([viewerHeight, viewerWidth]) + + // define a d3 diagonal projection for use by the node paths later on. + var diagonal = d3.svg.diagonal() + .projection(function(d) { + return [d.y+xOffset, d.x]; + }); + + // A recursive helper function for performing some setup by walking through all nodes + + function visit(parent, visitFn, childrenFn) { + if (!parent) return; + + visitFn(parent); + + var children = childrenFn(parent); + if (children) { + var count = children.length; + for (var i = 0; i < count; i++) { + visit(children[i], visitFn, childrenFn); + } + } + } + + // Call visit function to establish maxLabelLength + visit(treeData, function(d) { + totalNodes++; + maxLabelLength = Math.max(d.name.length, maxLabelLength); + }, function(d) { + return d.children && d.children.length > 0 ? d.children : null; + }); + + function getMaxLength(data) + { + var maxLen=0;; + for (var i = 0; i < data.length; i++) + { + maxLen = Math.max(data[i].name.length, maxLen); + } + for (var i = 0; i < data.length; i++) + { + data[i].labelLength = maxLen; + if (data[i].children) + {getMaxLength(data[i].children);} + if (data[i]._children) + {getMaxLength(data[i]._children);} + } + + } + if(treeData._children) + {getMaxLength(treeData._children);} + if(treeData.children) + {getMaxLength(treeData.children);} + treeData.labelLength = treeData.name.length; + + // sort the tree according to the node names + function sortTree() { + tree.sort(function(a, b) { + return b.name.toLowerCase() < a.name.toLowerCase() ? 1 : -1; + }); + } + // Sort the tree initially incase the JSON isn't in a sorted order. + //sortTree() + + + // Collapse the node and all it's children + function collapse(d) { + if(d.children) { + d._children = d.children + d._children.forEach(collapse) + d.children = null + } + } + // Collapse the node and all it's children + function expand(d) { + if(d._children) { + d.children = d._children + d.children.forEach(expand) + d._children = null + } + } + // Toggle children on click. + function click(d) + { + if (d.children) { + d._children = d.children; + d.children = null; + } else + { + d.children = d._children; + d._children = null; + } + update(d,theAllLinks); + } + // Collapse/expand entire tree on double-click + function dblclick(d) + { + if(d.children) + { + collapse(d); + } + else if(d._children) + { + expand(d); + } + update(d,theAllLinks); + } + + + + //aigner: Here the tree layout is created + var treeLayoutdiv = d3.select("body").append("div").attr("class","treeDiv_"+theName) + .style("left",(d3.event.pageX) + "px") + .style("top",(d3.event.pageY - 28) + "px") + .style("position", "absolute") + .on("mousedown", function(d) { + d3.select(this).moveToFront(); + }) + + var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG") + var treeGroup = treeLayoutSVG.append("g").attr("class","treeGroup").style("position","absolute") + .attr("transform", "translate(50,0)"); + var margin = {top: 20, right: 90, bottom: 20, left: 90}, + width = 960 - margin.left - margin.right, + height = 500 - margin.top - margin.bottom; + + // append the svg object to the body of the page + // appends a 'group' element to 'svg' + // moves the 'group' element to the top left margin + var offset_tmp = 60; + treeLayoutSVG = treeLayoutSVG.attr("width", width + 1.2*margin.right + margin.left+offset_tmp) + .attr("height", height + margin.top + margin.bottom+offset_tmp); + treeLayoutdiv = treeLayoutdiv.attr("width", width + 1.2*margin.right + margin.left+offset_tmp) + .attr("height", height + margin.top + margin.bottom+offset_tmp); + treeGroup = treeGroup + .attr("width", width + margin.right + margin.left) + .attr("height", height + margin.top + margin.bottom); + + + //Drag Function for treeLayout + var xPos_init = d3.event.x - 2; + var yPos_init = d3.event.y - 2; + var xOffset_tmp; + var yOffset_tmp; + var drag = d3.behavior.drag() + .on("dragstart", dragstarted) + .on("drag", dragged) + .on("dragend", dragended); + function dragstarted() { + xOffset_tmp = xPos_init-d3.event.sourceEvent.clientX; + yOffset_tmp = yPos_init-d3.event.sourceEvent.clientY; + } + function dragged() { + d3.select(this) + .style("left",(d3.event.x+xOffset_tmp) + "px") + .style("top",(d3.event.y+yOffset_tmp) + "px") + } + function dragended() { + xPos_init = d3.event.sourceEvent.clientX+xOffset_tmp; + yPos_init = d3.event.sourceEvent.clientY+yOffset_tmp; + } + treeLayoutdiv.call(drag); + + var frame = treeGroup.append("rect") + .attr("class","treeFrame") + .attr("stroke-width", 1) + .attr("stroke", "white") + .attr("fill-opacity", .8); + + var removeSymbol = treeGroup.append("g").attr("class", "remove"+d3.event.pageX+"_"+d3.event.pageX) + + + var r=8; + var cx=r+2; + var cy=r+2; + var circle = removeSymbol.append("circle") + .attr("cx", cx) + .attr("cy", cy) + .attr("r", r) + .style("stroke", "black") + .style("stroke-width", 1.5) + .style("fill", "red") + .style("fill-opacity", .6) + var minus = removeSymbol.append("line") + .attr("x1", cx+r/2) + .attr("y1", cy) + .attr("x2", cx-r/2) + .attr("y2", cy) + .style("stroke", "black") + .style("stroke-width", 1.5); + + removeSymbol + .on("mouseover", function(){circle.style("fill", "red").style("fill-opacity", .8);}) + .on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)}) + .on("mousedown",function() + { + circle.style("fill", "darkred").style("fill-opacity",1); + }) + .on("mouseup",function() + { + treeLayoutdiv.remove(); + }) + + + // Define the root + root = treeData; + root.x0 = 0; + root.y0 = 0; + + // Append a group which holds all nodes and which the zoom Listener can act upon. + var svgGroup_xOff = root.name.length*10+50 + var svgGroup = treeGroup.append("g") + .attr("class","tree_"+theName) + .attr("transform", "translate("+ svgGroup_xOff + "," + String(margin.top+10) + ")"); + + collapse(root); + update(root,theAllLinks); + + var frametext = treeGroup.append("text") + .attr("class", "frametext") + .attr("x",30) + .attr("y",15) + .attr("text-anchor","start") + .attr("font-family","Arial") + .attr("font-size","18px") + .attr("font-weight","bold") + .text(theName) + + function update(source,allLinks) { + // Compute the new height, function counts total children of root node and sets tree height accordingly. + // This prevents the layout looking squashed when new nodes are made visible or looking sparse when nodes are removed + // This makes the layout more consistent. + var levelWidth = [1]; + var levelLength = [1]; + var childCount = function(level, n) { + + if (n.children && n.children.length > 0) { + if (levelWidth.length <= level + 1) levelWidth.push(0); + + levelWidth[level + 1] += n.children.length; + n.children.forEach(function(d) { + childCount(level + 1, d); + }); + } + }; + childCount(0, root); + + var newHeight = d3.max(levelWidth) * 60; // 20 pixels per line + var newWidth = viewerWidth+300; + + //BENNI: fill in viewerHeight instead of newHeight for other expanding/collapsing beaviour + tree = tree.size([newHeight, newWidth]); + + frame = frame.attr("width",newWidth) + .attr("height",newHeight+60) + .attr("fill","white"); + + + + // Compute the new tree layout. + var nodes = tree.nodes(root), + links = tree.links(nodes); + + + //aigner: count all descendants of a node + function countDescendants(node, counter) + { + if (node._children) + { + node._children.forEach(function(n) + { + counter = countDescendants(n, counter); + }); + } + else if (node.children) + { + node.children.forEach(function(n) + { + counter = countDescendants(n, counter); + }); + } + else + { + counter ++; + } + return counter; + } + + + var depths = []; + var labelLength = []; + nodes.forEach(function(d) + { + //aigner: If node is collapsed show number of ancestors + if (d._children) + { + d._childrenNum = countDescendants(d, 0); + d.text = d.name + " (" + d._childrenNum + ")"; + } + else + { + d.text = d.name + } + + //aigner: Find maximum labelLength for each level + if (!depths.includes(d.depth)) + { + depths.push(d.depth); + labelLength.push(d.text.length); + } + else + { + if (d.depth!=0){labelLength[depths.indexOf(d.depth)] = Math.max(d.text.length, labelLength[depths.indexOf(d.depth)]);} + } + }); + // Set widths between levels based on labelLength of each level. + var newWidth=0; + var depth_tmp = 0; + nodes.forEach(function(d) + { + if (d.parent) + { + d.y = d.parent.y+(labelLength[depths.indexOf(d.depth)])*10+50; + } + else{d.y=0} + + + if (newWidth<d.y) + {newWidth=d.y;} + + // console.log("##############") + // console.log(d.name) + // console.log("x = " + d.x) + // console.log("y = " + d.y) + // console.log("depth = " + depths.indexOf(d.depth)) + // console.log("##############") + }); + + + // console.log(depths) + // console.log(labelLength) + + //aigner: Adjust height and width of the frame + treeLayoutdiv = treeLayoutdiv.attr("height", newHeight + margin.top + margin.bottom+offset_tmp) + treeLayoutdiv = treeLayoutdiv.attr("width", newWidth + margin.top + margin.bottom +300+maxLabelLength*25+offset_tmp) + treeLayoutSVG = treeLayoutSVG.attr("height", newHeight + margin.top + margin.bottom+offset_tmp) + treeLayoutSVG = treeLayoutSVG.attr("width", newWidth + margin.top + margin.bottom +300+maxLabelLength*25+offset_tmp) + frame = frame.attr("height", newHeight + margin.top + margin.bottom) + frame = frame.attr("width", newWidth + margin.top + margin.bottom+300+maxLabelLength*15) + + + // Update the nodes… + var treeNode = svgGroup.selectAll("g.treeNode") + .data(nodes, function(d) { + return d.id || (d.id = ++i); + }); + + var dblclick_timer = false; + // Enter any new nodes at the parent's previous position. + var nodeEnter = treeNode.enter().append('g') + .attr('class', 'treeNode') + .attr("transform", function(d) { + return "translate(" + source.y0 + "," + source.x0 + ")"; + }) + .on("click", function(d) { + // if double click timer is active, this click is the double click + if ( dblclick_timer ) + { + clearTimeout(dblclick_timer) + dblclick_timer = false + // double click code code comes here + //console.log("DOUBLE CLICK") + dblclick(d); + } + // otherwise, what to do after single click (double click has timed out) + else dblclick_timer = setTimeout( function(){ + dblclick_timer = false + // single click code code comes here + //console.log("SINGLE CLICK") + click(d); + }, 250) + }) + + + nodeEnter.append("circle") + .attr('class', 'nodeCircle') + .attr("r", 0) + .style("fill", function(d) { + return d._children ? "lightsteelblue" : "#fff"; + }) + .style("stroke", function(d) { + if(d.pipeLineIn && !d.pipeLineOut){ + //console.log(d); + return '#CC0000'} + else if(!d.pipeLineIn && d.pipeLineOut){ + //console.log(d); + return '#99CC00'} + }) + .attr("cx", function(d) {return xOffset}); + + nodeEnter.append("text") + .attr("x", function(d) + { + return d.children || d._children ? -10+xOffset : 10+xOffset; + }) + .attr("dy", ".35em") + .attr('class', 'nodeText') + .attr("text-anchor", function(d) { + return d.children || d._children ? "end" : "start"; + }) + .text(function(d) { + return d.text; + }) + .style("fill-opacity", 0) + + + // Update the text to reflect whether node has children or not. + treeNode.select('text') + .attr("x", function(d) { + return d.children || d._children ? -10+xOffset : 10+xOffset; + }) + .attr("text-anchor", function(d) { + return d.children || d._children ? "end" : "start"; + }) + .text(function(d) { + return d.text; + }); + + // Change the circle fill depending on whether it has children and is collapsed + treeNode.select("circle.nodeCircle") + .attr("r", 4.5) + .style("fill", function(d) { + return d._children ? "lightsteelblue" : "#fff"; + }); + + + function showVariableTable(aVariable) + { + var varTableDiv = d3.select("body").append("div").attr("class","varTableDiv_"+theName+"_"+aVariable.name) + .style('left', (d3.event.pageX - 2) + 'px') + .style('top', (d3.event.pageY - 2) + 'px') + .style("position", "absolute") + .on("mousedown", function(d) { + d3.select(this).moveToFront(); + }) + var varTableGroup = varTableDiv.append("g").attr("class","varTableGroup") + + //Drag Function for node table + var xPos_init = d3.event.x - 2; + var yPos_init = d3.event.y - 2; + var xOffset_tmp; + var yOffset_tmp; + var drag = d3.behavior.drag() + .on("dragstart", dragstarted) + .on("drag", dragged) + .on("dragend", dragended); + function dragstarted() { + xOffset_tmp = xPos_init-d3.event.sourceEvent.clientX; + yOffset_tmp = yPos_init-d3.event.sourceEvent.clientY; + } + function dragged() { + d3.select(this) + .style("left",(d3.event.x+xOffset_tmp) + "px") + .style("top",(d3.event.y+yOffset_tmp) + "px") + } + function dragended() { + xPos_init = d3.event.sourceEvent.clientX+xOffset_tmp; + yPos_init = d3.event.sourceEvent.clientY+yOffset_tmp; + } + varTableDiv.call(drag); + + var headLine = "Node Information (" + theName + ")"; + var tabRemoveSVG = varTableGroup.append("svg") + .attr("width",String(headLine.length*9.5+"pt")) + .attr("height",26) + tabRemoveSVG.append("rect") + .attr("width", "100%") + .attr("height", "100%") + .attr("fill", "white"); + var tabRemoveSymbol = tabRemoveSVG.append("g"); + tabRemoveSymbol = tabRemoveSymbol + .attr("class", "tabRemoveSymbol") + .attr("transform", "translate(26,0)") + var circle = tabRemoveSymbol.append("circle") + .classed("remCircle",true) + var minus = tabRemoveSymbol.append("line").classed("remMinus",true) + var cx = -20; + var cy = 12; + circle = circle + .attr("cx", cx+5) + .attr("cy", cy) + .attr("r", 10) + minus = minus + .attr("x1", cx) + .attr("y1", cy) + .attr("x2", cx+10) + .attr("y2", cy) + + + tabRemoveSVG.append("text").attr("class","tabRemoveText") + .attr("transform", "translate(26,20)") + .attr("fill", "black") + .style("font-family", "Arial") + .style("font-size", "16pt") + .style("font-weight", "bold") + .text(headLine); + + + tabRemoveSymbol + .on("mouseover", function(){ + d3.select(this).style("cursor", "pointer") + circle.style("fill", "red").style("fill-opacity", .8); + }) + .on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)}) + tabRemoveSymbol.on("click", function(d) + { + varTableDiv.remove(); + }) + + var data = []; + // render the table(s) + data.push({ "name" : "Name", "value" : "\""+aVariable.name+"\"" }) + + function getNodeXPath(strWrapper,aNode) + { + strWrapper.val = "/"+aNode.name+strWrapper.val; + if (!aNode.parent) + { + return strWrapper; + } + else + { + + return getNodeXPath(strWrapper, aNode.parent); + } + } + var xPath_tmp = getNodeXPath({ val : '' }, aVariable).val; + data.push({ "name" : "xPath", "value" : xPath_tmp }) + if (aVariable.type){data.push({ "name" : "Type", "value" : aVariable.type })} + if (aVariable.level){data.push({ "name" : "Level", "value" : aVariable.level })} + if (aVariable.children || aVariable._children) + { + var childrenNum=0; + if (aVariable.children){childrenNum=childrenNum+aVariable.children.length} + if (aVariable._children){childrenNum=childrenNum+aVariable._children.length} + data.push({ "name" : "Number of children", "value" : childrenNum }) + } + if (aVariable.dimension){data.push({ "name" : "Dimension", "value" : aVariable.dimension })} + else if(aVariable.dimension===null){data.push({ "name" : "Dimension", "value" : "undefined" })} + if (aVariable.value){data.push({ "name" : "Value(s)", "value" : aVariable.value })} + var table = varTableGroup.append('table'); + tabulate(table,data,['name', 'value']); // 2 column table + } + + //Highlight function, that shows usage of a node in the XDSM + function highlight(data,aText) + { + aText = "/"+data.name+aText; + if (data.parent){highlight(data.parent,aText)} + else + { + allLinks[0].forEach(function(aLink) + { + + aLink.__data__.pipeData_in = aLink.__data__.source.pipeline_data[aLink.__data__.target.name]; + aLink.__data__.pipeData_out = aLink.__data__.target.pipeline_data[aLink.__data__.source.name]; + aLink.__data__.pipeDataName_in = ""; + aLink.__data__.pipeDataName_out = ""; + aLink.__data__.name = ""; + if (aLink.__data__.pipeData_in) + { + for (var i=0; i<aLink.__data__.pipeData_in.length; i++) + { + if (i==0){aLink.__data__.pipeDataName_in += aLink.__data__.pipeData_in[i];} + else{aLink.__data__.pipeDataName_in += "," + aLink.__data__.pipeData_in[i];} + + } + aLink.__data__.name += aLink.__data__.pipeDataName_in + } + if (aLink.__data__.pipeData_out) + { + for (var i=0; i<aLink.__data__.pipeData_out.length; i++) + { + if (i==0){aLink.__data__.pipeDataName_out += aLink.__data__.pipeData_out[i];} + else{aLink.__data__.pipeDataName_out += "," + aLink.__data__.pipeData_out[i];} + } + aLink.__data__.name += aLink.__data__.pipeDataName_out + } + }) + + //var allLinks_tmp = allLinks[0]; + allLinks[0].forEach(function(p) { + var firstElement_tmp = p.__data__.name.split("/")[1] + var text_fromFirst = "/"+firstElement_tmp+aText.split(firstElement_tmp)[1] + if (include(p.__data__.name,text_fromFirst)) + { + d3.select(p) + .style("stroke-opacity", 1.0) + .style("stroke-width", 4.0) + } + else + { + d3.select(p).style("stroke-opacity", 0); + } + }); + } + } + + //Function writeTreeToXML goes through tree nodes and puts the into an xml document + function writeTreeToXML(aNode,anXMLDoc,anXPath) + { + //Variable "children" + //--> One children variable, no matter whether a node has "_children" (collapsed) or "children" (expanded) + var children; + if (aNode._children){children = aNode._children;} + else if (aNode.children){children = aNode.children;} + + //Get current xml element with its xPath + var element = anXMLDoc.evaluate(anXPath,anXMLDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue; + if (element != null) {element.value = '...';} + + //If a node has children (collapsed or expanded), loop through them + if (children) + { + for (var i=0; i < children.length;i++) + { + //Name of the new XML element --> childName + var child = children[i]; + var childName = child.name.split(/[\[\]]+/);//Split childName at "[]" which is the uID + var cleanChildName = childName[0].split(/[\+\*\^\-\ \#]+/);//Split childName all special characters + var newNode = anXMLDoc.createElement(String(cleanChildName[0])); + + //The children are appended to the xPath --> newXPath + var newXPath = anXPath+"/"+cleanChildName[0]; + + //If childName contains a uID, make the uID an attribute + if (childName[1]) + { + if (parseInt(childName[1])) + { + var dummyID = childName[1]; + newNode.setAttribute("dummyID", dummyID) + newXPath = newXPath+"[@dummyID='"+dummyID+"']"; + } + else + { + var uID = childName[1]; + newNode.setAttribute("uID", uID) + newXPath = newXPath+"[@uID='"+uID+"']"; + } + } + if (cleanChildName.length>1) {newNode.setAttribute("elementName", childName[0])}; + + //Append the newNode to the xml structure + element.appendChild(newNode); + + + + ////aigner: Sorting of XML elements according to "uID" + // var items = element.children; + // var itemsArr = []; + // for (var j in items) { + // if (items[j].nodeType == 1) { // get rid of the whitespace text nodes + // itemsArr.push(items[j]); + // } + // } + // itemsArr.sort(function(a,b){ + // if (a.getAttribute("uID") < b.getAttribute("uID")) + // return -1; + // if (a.getAttribute("uID") > b.getAttribute("uID")) + // return 1; + // return 0; + // }); + + // for (j = 0; j < itemsArr.length; ++j) { + // element.appendChild(itemsArr[j]); + // } + + //call function writeTreeToXML recursively for all children + writeTreeToXML(child,anXMLDoc,newXPath) + } + } + else + { + if (aNode.value){element.innerHTML = String(aNode.value);} + else{element.innerHTML = " ";} + } + //return the xml document + return anXMLDoc; + } + + function removeAttributeInAllElements(aDocument,attribute) + { + var matchingElements = []; + var allElements = aDocument.getElementsByTagName('*'); + for (var i = 0, n = allElements.length; i < n; i++) + { + if (allElements[i].getAttribute(attribute) !== null) + { + allElements[i].removeAttribute(attribute); + } + } + return matchingElements; + } + + function putAncestorsInXMLString(strWrapper, aNode) + { + //Name of the new XML element + var nodeName = aNode.name.split(/[\[\]]+/);//Split name at "[]" which is the uID + var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters + //If nodeName contains a uID, make the uID an attribute + if (nodeName[1]) + { + var uID = nodeName[1]; + strWrapper.val = "<"+cleanNodeName[0]+" uID='"+ uID +"'>"+strWrapper.val+"</"+cleanNodeName[0]+">";; + } + else + { + strWrapper.val = "<"+cleanNodeName[0]+">"+strWrapper.val+"</"+cleanNodeName[0]+">";; + } + var aParent = aNode.parent; + if (aParent) + { + return putAncestorsInXMLString(strWrapper, aParent); + } + else + { + return strWrapper; + } + } + + function putAncestorsInXPath(strWrapper, aNode) + { + //Name of the new XML element + var nodeName = aNode.name.split(/[\[\]]+/);//Split name at "[]" which is the uID + var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters + //If nodeName contains a uID, make the uID an attribute + if (nodeName[1]) + { + var uID = nodeName[1]; + strWrapper.val = "/"+cleanNodeName[0]+"[@uID='"+uID+"']"+strWrapper.val; + } + else + { + strWrapper.val = "/"+cleanNodeName[0]+strWrapper.val; + } + var aParent = aNode.parent; + if (aParent) + { + return putAncestorsInXPath(strWrapper, aParent); + } + else + { + return strWrapper; + } + } + + // Function to download data to a file + function download(filename, text) { + var element = document.createElement('a'); + element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text)); + element.setAttribute('download', filename); + + element.style.display = 'none'; + document.body.appendChild(element); + + element.click(); + + document.body.removeChild(element); + } + + //menu --> functions for right click options + var nodeMenu = [ + { + title: 'Show node information', + onMouseDown: function(elm, d, i) { + showVariableTable(d); + }, + onMouseUp: function(elm, d, i) {}, + onMouseOver: function(elm, d, i) {}, + childrenItems: [] + }, + { + title: 'Show usage of node in diagram', + onMouseDown: function(elm, d, i) { + d3.selectAll(".treeFrame").attr("fill-opacity", .5); + d3.selectAll(".nodeText").style("fill-opacity", 0.5); + var theText=""; + highlight(d,theText); + }, + onMouseUp: function(elm, d, i) { + d3.selectAll(".link") + .style("stroke-opacity",.4) + .style("stroke-width", 2) + d3.selectAll(".treeFrame").attr("fill-opacity", .8); + d3.selectAll(".nodeText").style("fill-opacity", 1); + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: [] + }, + { + title: 'Copy x-path to clipboard', + onMouseDown: function(elm, d, i) { + function copyToClipboard(text) + { + window.prompt("Copy to clipboard: Ctrl+C, Enter", text); + } + function copyXPathToClipboard(data,aText) + { + aText = "/"+data.name+aText; + if (data.parent){copyXPathToClipboard(data.parent,aText)} + else{copyToClipboard(aText);} + } + var copyText=""; + copyXPathToClipboard(d,copyText); + d3.select('.d3-context-menu').style('display', 'none'); + }, + onMouseUp: function(elm, d, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: [] + }, + { + title: 'Download full tree as XML-file', + onMouseDown: function(elm, d, i) { + //Begin xml structure with the first element + var xmlString = "<"+nodes[0].name+">"+"</"+nodes[0].name+">"; + //Create a new xml document + var parser = new DOMParser(); + var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml" + //Get initial xPath of the tree and pass it to the function "writeTreeToXML" + var initialXPath = "/"+nodes[0].name; + writeTreeToXML(nodes[0],xmlDocument,initialXPath); + //remove all attributes dummyID + removeAttributeInAllElements(xmlDocument,'dummyID'); + //Make the xml document a string + var serializer = new XMLSerializer(); + var xmlString = serializer.serializeToString(xmlDocument); + xmlString = vkbeautify.xml(xmlString); + //Download a document with the xml-schema + download(theName+'_full.xml',xmlString); + }, + onMouseUp: function(elm, d, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: [] + }, + { + title: 'Download tree as XML-file from current node', + onMouseDown: function(elm, d, i) { + var xmlString = putAncestorsInXMLString({ val : '' }, d).val; + var initialXPath = putAncestorsInXPath({ val : '' }, d).val; + //Create a new xml document + var parser = new DOMParser(); + var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml" + //Get initial xPath of the tree and pass it to the function "writeCurrentTreeToXML" + writeTreeToXML(d,xmlDocument,initialXPath); + //remove all attributes dummyID + removeAttributeInAllElements(xmlDocument,'dummyID'); + //Make the xml document a string + var serializer = new XMLSerializer(); + xmlString = serializer.serializeToString(xmlDocument); + xmlString = vkbeautify.xml(xmlString); + //Download a document with the xml-schema + download(theName+"_"+d.name+'.xml',xmlString); + }, + onMouseUp: function(elm, d, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: [] + } + ] + + + nodeEnter = nodeEnter.on('contextmenu', d3.contextMenu(nodeMenu)); + + // UPDATE + // Transition nodes to their new position. + var nodeUpdate = treeNode.transition() + .duration(duration) + .attr("transform", function(d) { + return "translate(" + d.y + "," + d.x + ")"; + }); + + // Fade the text in + nodeUpdate.select("text") + .style("fill-opacity", 1); + + //New object for invisible nodes + var exitNodes = []; + + // Remove any exiting nodes + var nodeExit = treeNode.exit().transition() + .duration(duration) + .attr("transform", function(d) { + return "translate(" + source.y + "," + source.x + ")"; + }) + .remove(); + + function translation(d) + { + + var closestAncestor; + closestAncestor = findClosestAncestor(nodes,d); + exitNodes.push(d); + exitNodes[exitNodes.length-1].x = closestAncestor.x; + exitNodes[exitNodes.length-1].y = closestAncestor.y; + return "translate(" + closestAncestor.y + "," + closestAncestor.x + ")"; + } + + function findClosestAncestor(allNodes, element) + { + var level = 0; + var closestAncestor; + for (var i=0;i<allNodes.length;i++) + { + if (!allNodes[i].level){allNodes[i].level=0}; + if (isDescendant(allNodes[i],element) && allNodes[i].level >= level) + { + level = allNodes[i].level; + closestAncestor = allNodes[i]; + } + } + return closestAncestor; + } + + function isDescendant(parent, child) + { + var node = child.parent; + while (node != null) + { + if (node == parent) + { + return true; + } + node = node.parent; + } + return false; + } + + + // Update the links… + var link = svgGroup.selectAll("path.treeLink") + .data(links, function(d) { + return d.target.id; + }); + + // Enter any new links at the parent's previous position. + link.enter().insert("path", "g") + .attr("class", "treeLink") + .attr("d", function(d) { + var o = { + x: source.x0, + y: source.y0 + }; + return diagonal({ + source: o, + target: o + }); + }); + + // Transition links to their new position. + link.transition() + .duration(duration) + .attr("d", diagonal); + + // Transition exiting nodes to the parent's new position. + link.exit().transition() + .duration(duration) + .attr("d", function(d) { + var o = { + x: source.x, + y: source.y + }; + return diagonal({ + source: o, + target: o + }); + }) + .remove(); + + // Stash the old positions for transition. + nodes.forEach(function(d) { + d.x0 = d.x; + d.y0 = d.y; + }); + } +} + +},{"d3":1}]},{},[2]); diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/AGILE_Background.png b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/AGILE_Background.png new file mode 100644 index 0000000000000000000000000000000000000000..4381f3b3e83b33388fe7ab81c94d16d7f3765923 GIT binary patch literal 21140 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 literal 0 HcmV?d00001 diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/AGILE_Icon.png b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/AGILE_Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..774dbf9c876d6d90d13764e55742a64e7839a49e GIT binary patch literal 24690 zcmb??^<PupAOGFx?s_9qQVLSiHIz<~Py_@?QA#NRVM9t91VjWJ5+dD0LWV&|qaxsh zA>oi3(i@BK_4EA`zTY2qwmt5>=e+LgyyE$alX}(0l#Tg6W&i-#%*~9h0RR;I2?ZGG z!LNgd--zHBB=nl;Whksab^!dt6k_Ha3IGD!|2_~u<QMP}Kq$=kMworDZ&>8*2R?wc zzt@A{Q1G9at*@`Ymk)ef?LGjw@0lAJIz0TbUCQv*&9P-j?H$bQG9wd&`?5KsSmHC_ zOAqanS4@nF<qrN53SoAJT%3kc2r<Sdo-{^wyoSa`cCdaE`xb;nN9cozxVEPqZ}Z0e zj~Cm1Z|%8YkE!2dZ6DyZVr&VM^+nFXTE{;_vHxBK@gP10`~qPA2JlV(H`4xZ<ow?V z```Hg@dD%jCKUVMi1^?5KaK*x|LX<BQR0$9aMZo0=V$<6E&glFmgv71fti0cn1nz9 z3+7Z>dS+=BU*_+0Kt6PnCHbMS65zrJ0i;4nao94ay4c`fACe6CNH=!HfU@Qrl`AuM z5ACMOR}%JRct8fM-KWry^e?l%_v7YIckGrjT8eBPpMpRT0Ai05q2)<S+02Z0aRgvm zOHuuFsRqnqEdQP|Co3wNEa~G(_dZ>bcd99;zQDTY1zO&PfQzgvx+p)gJF56Ph#2rJ zNC)0JHaMZhFtTO<Es!rsbicydZ?6gGuj{q+ft+vMwo|+cZ~|A$*4=qybCf6?RhdBg zz<K<G1xRay5kJVrG$C@z2Q(XP)5EGELfZ|gTXMo7cQ3n$(E_~R35t$&GeLo6BzgY2 zL`xC6x2XOO@qg1be?!XvF{k@|Mjeor8}-~x4u(r>=C&?krV#LI&N|%r{T2TtKkyPK z=LxD`WP^?qTxw64tax>V9pce)BUnC==WfT3z}Czu2rbBs5^lh5xu$$+GTK<?aMH77 zvE6}x$)Hul;vb27coKtC-OPo8r#$4g8};26au60(d&2Y5hJY9#hE)Sx&glihji?}% zzpgn0oyaTydrFv`{buHFr0kkB5v0Vru!nC9KRJrJNDEH+;5SJRqWKev<N7xv%Bfai zcW{cGkqIP)WJJA?wnzDS;nD<hz_a6B{&>hxN~jhyc<GEWb(u72U!!~N-&)r#XJ~ZA zFkd)9F&u^%IcsoM#hP4DP9N|*^p%6|8qC{B|JzNWY|27ZsSy=<-NNbsd^KYGWq!MW zk(E~KWKe}*s0wOSd7EO?T7!u?J17aWcIj_cy2W<6TR}$WOs^X_|2#Sll*HNk#t)1P zr&&QSD@=>}V0fY6)bkk>+xCFd(61j{tK*jh9-Bgd*AH)m?J`Xt!UZ`qjE{_<8H%Io zg53Y^O`}}D76>nxvr8tCB<CZz$9MxIp3?zJ9|PVG?)XigW)DozRtB-?a{ilHNCNPr zy?99pN<5xeA<*Qcj$zMV6!v(?8-fhr5d$|lCvzQs53YZl{B$sk;u#S1EU=P_N%)Bi zSzrJFopT$tw+Mu*bwEGf@1gLg@b{d+lmZTaG<75}N~q4KHeDpIXHLKt=>WG(3d2e4 z<p!so(eo@zs_dINbReU5&Qp4fW!z_QVag?NrSm}_#M<6NhP|bCMMn5Por5?AvotOd zt^lxO-ngjSWb9uH=hQd5Y6HY-E;3EdXAh6W_4OGi+I~@;oiYO&1V~Vl!Tj4@{5xGZ zpyJO%PmEQap2s?i(3t^yQuBlB{j}glJi?)$Es58)!R-!$N7R{6958w|!qZs<^0|I@ z`VF1~_j&fAi!cBoUOTf<r94Ttx7bN$*?uj_2EcsVfV%Vv%BOz)#Qv3A?`v~FiD<Ul zEj2oRsd07p>Q<=rm#;@Dk7;t;gt=4_83y&wS~YzATEqx4x-{BOF9}}pNgV54KrAGi z&#Q|Q8N{yBdIW$hnd!Gl6nnqG|CTEP3I&!;sEynB@B|6uZjV5vIU^t@fbtXwSAApb zvQ+IYoYnv`PP0Bv%^>;fxkJTMa%)440SzFwV)9PLMboTgPloMY(ofdMZl9sx+n!0% z*Ox6Z3~y2uG$o?5_Zh^H&Iq=j<MB?03223osK@k-z<RwzuxpJ&oPW*)3;A8Al%7Cb z*)XuG5u!P;J3Q5Jd>K@~vQTE-F=Uf-6~#R#FiTntK>VcR__ZFA#!19G^U;n_u0*<~ zl0nKQjHo(k*T@U!iILut)|UaG3niW+$j6ZatOW!x(gFv_cRf*5_m(tDtj?r7SqK2M z)OIa>xq>eZLlgg#5NPf#l?TAvZ0~beEqoL)_MgG))8IH@;t8pN#*@f43CLy5#;1X_ zN3>8Ny1H3B5ch);cej9e90<2pgFpaYnKI7mM=gfxb`0`8SN>66n6^>ydrX@vTHc3T z9k6fb1f<=&Zqzx;$-S%Ev_IX%*)($(TM$^z9ssV}o<-5%mm;R${)H9zfR!dPlueym zy5!grd_VK#)gkl@xRsXL)DR~P*E4%FZ258~8`R0x?Iphaby0*T4?>x{2#%@cFS}Nw zD~<^ZTmfgi<TSNy97PFqJi!eneVBmA7G%y(X76M=ag+rX&OOf_QGX&v0|j1~Qdbg7 zv4MQ#bWeT$IW1ZM0a~0$+kPDDy^LG=f%c65=DKRp^c=4iLWy3a7WL8q7Uodb(rJ6; zZ0I%ht@Kp1LQVxJk`F@<47#q>kiM7gDprzq!i5;h;lPMch(p~Bi^A`WlLc#upKXgc zfD_T$_BY-}h^?HuL~`fa8rK2JzD4-e&XuM#FhhOdS5YnApeyn)H+FT;U#WU-taX#? zUdN9Hra(B5ug@YDu|(U#LhX=cJUIQ|ja8-|{jKz;`^tGA4B!}Sz#;_50b1xP99%pO zDop3$ikR+yHk9>I3v{BxdkJ)*UP>WAv*8GRm$0cj>O3Q_a99%Y%o#cuNG*A^FGF^a zhJGt1_u8q%$AbG50O3LN^P&xbzV5$s^Hga}L@x~^Y`*CDvxQu3Zo!0)P?ijl0jS(Y z%q9QvlziDSY(&(q3?4@Dq8Oo9oswLx@GeItGap;eo0NwDi0F7&$4zpxp^FEj8AS?X zNP7-s$9W82vRo&87<FNU9=OAupCQn5@aBCkXf8_-){lXFW{Crrle>@VoPW+r$1w|} zfj99!e^UBf5w!w0G5+lNqE=KwDIUl-`TX-1=utH?C{!^_w5%XdW`32MIj?XJx8JgD zf5$Q+FkUr^0bEdN>q@M};(4NhV*3vm000eJ`Oh=wJ+ItSZMU1v15ISUVT<%hsA66! zoT3}7l12yI`Dl|QkLXd@z4lRl&E2Q?qYeV#)gv01Ccfi#uK7TCajJ9ru^s|!Uk3g7 z#VQ;tGgKfKakC-9_HrRNZCU>`y7-vdu1`%Xa^gwqzJjv5SpxyeL}Jz=T7+eUd?A#) z6D=uln_$1nsdqbw{xm+!(^Rw%hTaDX9Eh_hP2pEQJtOt^2RVMrmCCaa2a?h$I6~;f zy7CvJKEfsk9KgDa(DQrY0e=E#tNzWCTS9#TE+0Ae4G!9buXNS^(i{NrE{ybw-^2g@ zh=!0i<g&|>YHJ`A^vb+Rz?to#TQ7{Ltyz|E5J#^wFwGeSjHT1l#k0inFYW8X8DU%{ zR9>#%$j#8k;c05Ncd^;OMax8lWh1s+KR)g+^v2lcaRQLxie*<1Q0r!OCEx&zp$&K? z7NP(zeQVDD574=w)|&k|5xsI&X2pT$TS@sd^Jt|57jI#<d-On<_Vd3HYf1?i=pkND zB!(U`?6qoObY?I7pFgOf7W!aZRU<&+Lijx%y_M;I!{6UQ*GL1>ziMr_C=&B5;yjW1 zBq#g5{~$X6h_nWZw`tif_;ANwE}KK8H{at#=o(YAq_F<aiEt}aM=AvZaBaJY0g@lC zwhh0xmSrSW1YkU|Vn9?XB|FpYr0}L`e+~plRu2j_2>!GoyJRx|Y;eL5Xss2D7ip6G zKx{TV5WP6{))K{c;0FK*GiO9+@`9Uc5Dd7Snb#w;<gs;zR_tq<xW!-bx^HOYF*@7# zHvo9>ZdvVznp$N+&&?6C0_;J5kEoaXB!&)_`#_YbYkyup*}bo64a#MI4(*xOCMPD7 zwCDO1IAK65H-W)eaC7kb%_@oy{5uyrXkcIhO#L@f$IzZW$L9-16n%<Q7ZLz(W3J0~ zWBM&c&8P2b_o%Kf4FEA3RPamDg?lsn5AQDrYfJ4jL586$FPA5)J&{RtkN=hh-1{>L zs>17uD_ZXNN067A;oV368X!zUSTUj*f2ICm)GObmYWxj^Yl5qqv;xI-Ex2hGs86h& z61xr~WF58C<N~@gA8_x7LbCqJ0<iv6fwgF=tpO^I{_Vve4lF#O92(V+*57E_QXEFf z)C&MPhB2CU(EOO*hSs-4Qgv%XBaI3GY4+~bVZNm-AJ-+#sQvFQ@nS)h@|4q8dee`~ z9g=@tGB#>X<pfl51~zj$4fJwN#x>OcVb(<(P$-8z_?H^uMCBv?S|&RqaNaIR(6#kj z4ZmyNzBhd&5XT+}Z*~P>g9#O-BszVk!dGs^CoxdQEHOZtPPej4I(>H`n2&sl?%)Qa zl^ljA_LO`_!?MXsTZyrWzzt(6%YP14gR-Phy{2C%gE<92Y(L^!!1sf>!gBuyc6Bp- z1qbbP4|oB{`oja!FD}76uTI+xf4Sc|?UB5_2yO)Y+!F7o*OyON{wEEIz^4Zk5O$nT zST~T()G@{I$I}C=Ie`2H^{rE<4xqqdt<!umF#exI5D{44Hk!MoAy4XIHemsVTgHF7 z2mCPb6s3DZ-9K|Eq^Xhwgvk>{x2t!HjHoZi8<X}KfYk!vt=j^>Ai3LP-u+o1e*_P7 zN?H7fc4;Xr{+5w=#JMG_e?kO#{KooIC3)gJi&)}H9q7@NUMX-wr{dS)RiHI`?)VFd z-VVMrAqwa`<yh8pfhPrTZPo0Q{K$-Cg{)`qvR^e?f`0s95Q)LYGb#f2OL@9|Orf7% zTk~=6nvJpEJ)geuST=|y5jb!O(crxuJuPvF|9ZWXelI>ATDCvM{@&-ulxnd&LU;2x z>2E(*U=8Kn5RaK5Ks-ZE2iTbRDVgPPaBdUO_bzM0t1*ugF25I4VtW0IFNUa>Q1Q+9 zTt616!Usa@^$T956*q5`n^Je~-WI$7+&{RfRX$yQ56SNr)<e?eidF5X>5<mcc=KY; zVIjBw6alo4I+?x^=jRVNoNaB$D1&m&K*mG7yo~V_DTCmFedW%&D+6-afE%1A*XL2c zL|{PlJ=v`5mmM<YD}xNOK>YDW`(27A5=j`|ec?+?W;c<71eFkxtedq#d4ZaEKIl{< zqH$+3+sfny5kq-)h>TBj1hmUWiCNLpO{zwdFOP{w8DIZ8O}JBvl^_4ros{+7Dxpt` zQHIvfddFz2vO}kyg;<1zB;8IMVZt>s$^dp}#`iA%xITl+nnM1xIZ&i7=s%7nPjc?F z!}xC7JU!lfGs9IE%;E|WW`W$1D#N5TlcanPklZJe-J!}Etbj-)r8uQFv?|7c$u3qe z){-Qp(%K}&zHxIt(p0139g^VW48XTS_2c<z%WAF?m7h9=)-7~=5SGXR4%}1hC)Qxo zO)~b;*ZrRbf>E&I0oR81x?j6|zhFyeq_DTkmEw-Pl<+7dC!(9SUnuhv%6N^$d0#9C z2s>AMMoQD=V5_QZ$Pj0Q)kj_`;%X|VI`7=EDft?C1qF~Zd_y}O8oo~l-EdS1k#q+A zn4Y1ldE#odQxaU_3CE~<SFSP?Xcx66B4>Hu5g+d~+8LlrPQ+alCdj5E_>;=n>CF)S z={DfXs+N1ubGneB9-Y57;(&j=?iD6;h1dJXn;{u2fJi6>!*ceEAG#(0GvqD2dKd`f zNx5{LvH&NcyJ#PuJtQY(jIzSd+<h>A6ATnCct0Kqib<siuq-8m8d>;{7=(MU(-T_Y zPGe_HJGG_U9d0WSM_0<T5O*0Rmw8~VMg9AVez+-bYWn18)?j6YwG}YDc;>xMEtgOt zkk9(zfI0~~x%>-R3`0q6@gVfI*hCJq&D~Y&4y-o+-aag`5s}zEd)VU|vm?$4w8{66 z+%~gcm51G7h*diC{@FZxq4O?u6KkCKD;vau-{#Sh!jj7Jz=5?Nc~Uj@yoUK^<97{r zpG6xCHUl(_m|Y#xot*};jff&3YBA;po#!IIJ1s=EvtL1qetA^6^dCkr@)8Mr2ttGi zN>C+!<*)>9f&F=ZQRhFQs95t1QeUXODWdTu;+ZnWBf$Uq!y@VXEq5W_G1}f<qyJ?T zxGiNd(HZb7$hO*;3yT7<(AGx9^#{1U)Zm$h>Q0c&eB-Tw=ZQ!K>TkzViD&&w!se3? zgTmDMtl9CN7Y;9$3(#)Za4^EOSS>;*b!n`+Ii6(Y3ixs7YfduFRP`HpEpn{zQaWcr zpI+e!3SAlX3z@DRe2q#8#|sAi7MbJLqw3QW2(m5z@WvEh_KvetkE^et&Jb+)0KZT- zRwE4%e~~&le_}QsX;zI^r(mbccY_;)sE)b6eAe&HwgUGY&lkA=Lq({eaG%VJUa0DP z6XT=KIt<10CHeY0<t{svvLG+;W7gg;V+}`mW!hVC<thk-d|ayR9ICha(<niRFot+Z zhzwy8(HCJ#pQXw^Wh3v!Ulx{&Ry^q%Q97iy24D)+254cyVGcg)gI)5a>yy+U_i1aW z+j<RK2&%Bmx6!l1l-W;M=r933`?$T}qaGwTp*`ns)D2X}sBiV?^IJd0FTDM%mM?Kb zv@lR<kQVVh8B5i*KluI32}fo-*!G<td=2*#VNkWEjH}AE_N_;ryz(f1)#fGx+4scq z<UB29u{7<r<aVZwzqxq*crc5SAbx*{RTTt7cQAxWrsGeY_fBTuE8R4xdzHZ>>~9JC zg)^VOD>#@k-h%<%g-m<+&wO`od4)S{;+f_et&X|_rm4y;^WGcBqSb61K-ukf4Wp3! z?t!N5Hg~@FZW5R&r!0)f=NhNByV@f1h962>GZBFI2jAco9qsy!jz+n!J&Ji^4MiuT zm*pq&NraioutXZ*;nyf?+AsRP#f|C_RM+R&O#)WqjroDW$n{vX+{dz;K=6BlpCrqY z7=9&zK0?Pk-gW$QoX=-yzWI|04PJ@JppM|8Yv#a#v7)iT;*R7_r6RHB%*p4>l86nw zNLey`rc`YB$=n!Su<AEG$aHp)@maJ2hS{eX>%u)0Q(iy*o?=HEhwESv*^{drSk z-u={QUpbm4bQT2K7bO?`=cZXPe2Vtb;a?bk);p}DB_2EKwYq}g+2k@~giVyQM!uA^ zfLF~3JvC_h5f3^E4X!<pF;nJ=YdG@E;(v$VwqLNd1=h$frEFGF?1`t31MrUl?}@Bz zr(={+F!tzESVB4GuZm#tyVWYnEJEwzw8i7UK-tif3s>~r!d62^emR}K3D(A__vTL2 zpik8aGVnVG8jcF_#js8}?GiZ`{j2kPg$-E`j8Xc}+U*>eA;XRR^|JMU&(g#*4X)=_ z`aP#jf&)18D&bW97bTNo^dL?5Ek-RefRC)>W;Mxor}ASf*#R{p2F$Z=IJlGzaCV}# ziWFM)6uaMRY4=Xet(=Q}_Di$G0I)P6-;!Z>;(FL%kmzcBC(sA8YOr8#oW&wcnots; zG=7TY0+H()iLBrAFE~!4J@HDpZ``qIoJFaYGfcg8BJ=ox>9S1DZB1Z;nz<g6VOdq{ z_4Y3OK$)+`_MZ3iaJHQF-^Vw7AbgM$i+3JS?-bg^tj6aky~7v|+4@F)Wnv^wokAMi zurSxS`B1bRj@WmX*l>3_v$0LKCd__DY5B!^Uclk0$9XO@!go$#Y_=D-PHCh3j_)n= zYxQgn{~poqPXxSOU??X!^tys%A7^U2xY!2%es53uE!{;qT$9LK89uN7{uH;;Tu7Om z+QL`g1Z-j1ZAiKtvQoG$Ozm~-@#eYMS0LE$d93`}@x85#J+;rx+be@!Yy<99iU0d~ zxr=08%^G(1)~OCAl`_EYx|k(mM&5ZhwdP72btRE;@w?oEd3vo!`hSWpIX{;V=3<-b z@#4rZt74rT@&HPx!U++LGjhi^>t*_bp=fkbqZ~s^)eCWSv&e&ApGnf|p+RQ-XKa6z z=OXeO(C7XJ#v6-6jMFJH$!+54V2<-qXMdU?D`MZ)muY9)d&Gd;;~k^o|D~dd3g;GC z{1J3y*zvbpF5Z3$M;b2eZQJ~EPT7;cKQm_$WwvK0csr!0x5S>c1pXxGCvB^j5`S3+ z{SD*WG<5ilNi(c^X47dYu3bpz>@_?JEe)3p10Ges%!3q7K*x4J7F)FfeHGpTcCCOh zXCf!LNlI~J{`rKvFfUhP@Ht*e`~w|o%g$@{>C{<IE)aE7jZkYY#?(D*Mj`cx;YZ7{ z1kG*~BkW?EZS@7M)SH~^#|dc?GF|-80-~tINKBIBhC51t$NdQ{%(+bREFtP{_ni9U zeU5o`Q>DePV@v0uA<@Bi5n;*V-}Yg^gF-q%Nj(1jb7w%|LR{Zin(;7{cR(qyjv@1t z4NceObF6f-E&JFH$0jnl;TOFzeP=0g>FaQ}>2cGT6~=4lR_-i@2ekn)$G_*QY4n$_ z7~f%$zkGns5PT9WWJ0z5jMAPE%^w&(&!A(aWH2_T^hHA>JGL-Fzq<Rd?Rz?!hY`_p z@sY-2l)gEl{{1q;PKI2bT-5!*_)XBVPLkN!{bE}rxzH0}ic%_!!t+Sjp*<g-V758p zOMDHDUs%PGyE-Fa<NGHa0jkrRu6{M@o9V0vSJZ>e9>lqLG%_J{No$THirSl&{GDWl zgj_&M>9zJ6I^Oo9DX0kdM|SGNEhJ;V`t`@YyKsvSpy>Kv^Jd)R;za3?YOXi~v-~F$ zx(ta?@OfNSt*TdF!0b_{=(K@s{JyB5_fO;R%TM6`>!ff9wkFVoinn*}zo|&Qbq7Ma z*j)<e7HfJCKEp4#&wR2J={ofJ4kLn`e#_Q6KJDcW7tLSm`D70<m{19NtAe&VkstkB zj!I9vG}Njvlf3W#k=hws3vj@*`TLi>A*<nMrSOOF+}JCQT*E8-=XIj8D8cGhhi@?y zl+iRSm+j65cWGUHIfZ^6rT0R}@z8m4r;cr^lchU~o)huG8#0)D0W{$=v)T1fNVC_& zo|@t^D_>aM<oj@R*&REyJ|63ufzxvfp=e_w>gqOvxXCH<1Hbq1FLyR^0pFmE5LqLB zkH)pY_{Jl#?7ckG2#w2UNylEoGCpTqG1$9;^jELqL`!Of|7>3T5-lyLk)971i4Ar9 zsfu|*N=cu7_u9Y^R!bM+xB80noCo45N1MxS@_>EYgX7)@!&_Nug2W0q{=N}?+0q1D zOZl0=;MvMAzURVktH#<Rqd4FWQ+_KiUu-M$6v;YC_iK62@ZU&RKvSZZxuW*?qGDd< zT__mgA>Sr%_l`Lv;ogS5;6?Nbn^oC={qSx>`LI@m=7qMU$kic2%6bqTVJz~nus)F; z5Escl*M7{O1w3@t!iceOs+d#rw-LH@8C}su<!=Op`>Z-ug;;qNHfC{Tom3mWpJMwy z8>DxtalxSR;6zC3+@^8ZT#EH3q{-o0ZJ7e=O?aUAyg(>z**=)pGN7c)O{0khXxSSt z)<t=zWZC)8;D)v?evuj7r$iHfV*-XQed+v!?Ug$X6IVd5b3)z_So<?M5tscS>`KoC z?Ctyh)c@42F43gMdy4gO>sZ(+{>^R;L>L0b%E>jkeTB8!FD$-PRUM2w-ot-O77;v; zB$s<I5WU7`uyLjQ{U5j&uPQG8fTHi^=&{>NiCR8*U<<p&*iRYM&?^<45c5B!p-W5j zC79`?7MX7*^u<d59k2(pukq(uP9CI`!xx|rd1=e$_7w3CO^u@~d>{@^e_rSgJDk1s z^KJj4{7&>yB#YHO?+jo#_wQF6Ip+HL0&Jy-2YopeJBqr+gA>hC7<>{G*Jw}g$^~dx zhcT>HH9I533~1bb|Es#B42{Qw`FBA6Du)_z+pCpb>OUYVJ39ZD@Gq5{5-W<YEAr*R z#GB3C*C5{7S}<Q}2pIVqzgvM%l7fgQv^OFNoIPS8xdDWo7rD;Q8tQeZhXW7wg1`*L z!Mag7Jm)ySy6{(l5xlRge4(+5By2=AuqFk<-<xSD{mlEe+jKKU|H>Um7+q3=7*I8x z%EJbRB3Mf4$;7jIVxARR({94{zvd2)jGr@Em=%&?7F($eAy`6%4AVaUIc@*=-lUTW zCRT=kxB1gP&2DnjjN1A6q~JV@lJg=tyB@Ue3L$ItBiH%e9n9Qz>VHtm`6xAQ@W||g zt6<&EE3u;0cjEThGeIL6H3sBq4dhvo*>gmWi2em4p@&_ED#gqx4y=vP4&TF0im@~s z*=f<1MJnDAQs#8e66vaB&Q-trkMXJd?mygI*JPghEcc@0`?^L>8!#c1kE^Gy{Nh9o z<VVLOBs)abnqO>q=D`U1Q@{oH)gCY%7VLwOPk-;@<USR@Azi)x2ky+G1QlzdAE)X{ z&MaRaf3eRo=u|>XaY&;!SVQ9jwP%hBiSpfayGmhb2W{1>pTA?-9$7tS3vuLMlTV+3 ztG$0mKMhxca*U{#u8XeD5%7Y8rGr^_wK>BLiVoVzYUz}r<R~f^6QW1fmuI!cRj5rY zW;x%$H;0a~_4n_&tx`3Eya9pGtlO*j?+|CJabU{KHouXTr$l~_^fawimFKX!oVweU z<<Cbr#YZ$tu+6Z;UtTR+%c8vICKsx+H1~DOh!O1&NMD`7Q5R{F_4ixDgBvLHdcC}} zE*|a-vi$Zp13QW5bu&roMPZbi*iXP>=}FppC1DE5r>%xZ7a1O*d_A7Aswi=2VuP20 z+gU{ms^nqcuc;uvF#kvJ>6Mt9r*0d{(hXnvwhWJuj72wy1SFSIg;kGzFx9z#+j>7Z zhD-c(!{Zb7a{TA7b8DSEi^oozPTccNqV<*|V%@4$ysEtt10J1OW6-j6?&e3+kPf=f zp&G+(U>hx7SQ*>L_gjTq-d6j7o8ERVk{^Tqj#e``YM;;7MdtB!jWV;ie1EeYJk7GJ zI_>8p$43Lxt9}#aov3=oIq>g2F3=IEbp})hZ|JadS3hbqKES&Ge<*TYaZz2N+ikN# zCrGiF#*?sO`4eP4C*q11cDBURqk0|90dum?r{Ekv!D4TX-v3^T{;omT5)E3t116T; zNJbOSKcd4}mJB(8Rv-@hMIh<LH)N`fYw>~ir|#b=t-DKp!yg~cExk{%7>n^PW`zLG z8Wt2>19^;e$L_wj>8AeakIVxFK?8v#q0BpM$W6L=b(2M~w1ynuaPt;}M<0-SgHB&H z8iWz{`~>yGBDFq}<STChcMLO9n6nPD&TH6#;kN59ESGf&8bvd7LR~z^x$8eSHgSi+ z?X%J3u5q-q>2%*o$Ux9jM38WoGv(1#?Jk~vKKa#wSbFXg?Yt7PRw9$_4OOkVYLQqT znq#&3L5(jOhq2cS;d}W5kqxuZ=Q&J9)MynunT_v1p3}}Z@oaD{f8YiNP|2qw9(DQH zP^M0DJgcb~1$Q`bfAQrr>=`X;S+JtCUfv{qyV<*2^ZlA8s(pQ#4|3EgWj|?kbAl^S z{V!z7gE*%#VIHph&|RB?y>uJE)hMYffmItGyNE9QFR_4dp2|=BJxpG5%FQHc6n{n& z>;n?&wlgqm`?1<{60PxKYsE))$FvS!BjvLN*|I8Nw$M#EqBZ+?;9*NCe86C72*h`Z ztqH9Eorzq;n-D2#njcEEsX4c(9Rb3qG>Q)!`#gI(zW6SL1k<o@66*nb6zWj@weh;z ztu5nSZo@Xk2Ch`8?8c!)2|ZW8d>g}Q!|$w_vq_&DrObRjmYck9$t;rj$%Z$ujXfrR zYd|_COulgeaE1U(lE6!tGg@6OdahmcMQHYSPrDk^y2%0h1)6KDa(5DmlTR;CkT)h% zaO1}M=)8!lT2jEPZpvw^^<86N742-;L3Yg4_i{9L-Sp&vsd97vfM!A+XZhcz5F*ul z9fQ8i66iV9WV?kGdJWRpRn|$_-;6Y~<*3>wW8n&C7G%@R`6#7z2kpKGS~TYO8wyss zb05%kjX>+=Tlez*p;&4;kAdwA*JlMT(42#k@SvyieThSrcx)$`EfD|(h1bU+xjRPo zn;G`!!Ext<`i`61?DNT;T;xfI+2)IvNF~3t4DwGRJQzVqgl2Jf5enJmB}b}UhGr$l zx}<;+LN@2e$ULyjaij0vDdr50qt(N#m)(j-hA`7!&;Ooq8g<sC^8rPlNDT|nnHn1& z(K+ds^rVD>yi<iLUHaMUA7+c#cTue$uBrMPQ`pqkp=n!lA0s;ad>^Zo(VHb?EvQ4) zSg5aV6JcYmy+@5*Bnru5#6&xY(}`nZcaXGOZ=@gG<fV<XK#B98>pxF)7cZ&0VI=u^ znHRe!tGWK{*HpOT=Vj&2Njl@nm=S}9U`oXJ%>NA_p5ED*n45NB`PVCwC8Y_x6W^t1 zYNej(-?&)NVBJ??cMy7Q3q$$#F?1$>=+%-KjUDw|;m&uzCv*?~6?*@SA6U~tO$R2R zsN15h+XFju3{#`>{VybRCc$7-*X}Hr4vWX%rPp;@*l8IG0ag1-R-@Tu?{{urWc6B` ztfkgB25;d7P*~DPod#Pb2S{RX(+G<F2yzfVg{-)H%hUb(wu)oQfOKt3DHWEAxY#fh zqD`9mV0nLkC^CK_;i4e(HVG?olf=A3ax31x1(GxWn5CPGFiRK<`XQl!C{v^aXklyp zRK%wuN35(cg|6NJi3T$v%v4u2qOn9W6p&1OuW#|NqkqC(XID}EYiFg*Av$RUdU5MF z?r8SiMLGx&`|a=g*9-OoTe!gk|7i(v0_h{zH{`~~YRc-1|B>_E*dw0rsgynCLTc-+ zrn>R;2aCurojHN0=>f&<DlaC^zO@^oU>&-xZ;}>hrYD^YZ?^#nM#({{2lwDMk6b){ zGr`j2#<OFQQFj-q&~o^c6pk7J=YRPr|Cm)1UK-d_X?!4R0>|Ie!lRQ)Llh9A7Tsa{ z|H)?T1mAw-vNTRCFCXIp2xFtC!Y5V}7OTN}PftSi^8fpkMSE?6dKDR)_8*sbD)6LF z@5M=OmBKaZXf1}qA8{Ib%KGVkONJbX2>N|G8lN=m*W4@?@uYp*QchL9+&x)#^Gk=g zh|vK@Mg^q>?8G^m=}y|f2fqq#%)~$8pN5M8Lw@msHIq9kPw}v4h74x?8xpqgX66TE zDHlmqOCW!*sVe#9jRVVW4CVPIn|vwtheV|N^xlo+VeBSG&pZ#zP=dVfGv;sRSe0rA zJTJiDGz(si)>d2c2$nG0ov<>@-xLW8xLd$?<csI+Lb(P?VU!*aSjx0=&PTkD@7_t) z%FF<}xk`|9I3$tOSa!Ep`aEzjb9T7T^?4xIJXS$MsN5c%6F4x&1sr-r9KJhoQq7~< zp8e!e4(CkY2JN}h`@gj()l+tG$ym#12@=G*oGS8d>)@u7J{tYaM`(*~-GkrbW%qoW zZ&^ZNxC+bEXVqM;Jwtr@IB}+EShckwS%oIy4V>@#!OGW=s{0hV*wE?yAGnv8y`S(J zB@I2vX|(!F4QV~xn>p60RQY}-#p~wY+-1QFKhN>diVY;%?1r8+>{#p9=2<Z!!p?2N z7cWZ;;Rl^|<#pg_o50t>cPT@Zg%`)z$Ng`~TZ#Ozsb5yG*0*dY!7V<w$UBPC6jVQD z<bL(p{<OPB%a>`YBEI%YbCVN>C*W~a*9d`E`&6{xfgz7D*uB6?%5}$mit69`Yi*Yo zuS@|FoPfq2C7~rD(LrJ2y_*aG*;`XoIoTr~wJdPKru=<uqQ69cEWNzx^u1LZj%E*7 z)dU0D;~^9cS?NWiTc~h}!FotPXTabkgC2tjelgm)V`k}t>o0ZQ$DzQMFrJT(EI-Hx zbH;y;DS9EUa@5sMBUiT%Hng}~M4RB)1Gve-V$_{T=LZxy=u*JfyP16qfJn0lsO<eU zu#@&iE`XZEklNBKhkE7UPV|{qA0i~!s6M3b+xQ6n!LY=JN<PxK_mnuBboF{7yjU4p zmYytg8Gz9WbDQlx520on^TWb+ZqI+;;9y!0{^8~R{(^F*&%fe#K!W*7yp1*-Nr5AW zf8Z133l-L|Fzm%^#P1ovmS7KGEgEagy1&qxDfJM@&4w<%+UZYyMtAj4tMKqb!gTgG zDs7X49avEi2*1Ml`s0$J%$Ep@ESc`~z%T|&XRu7*8Fv$<hA|^&v+q;dtbm`^nM|fB zV)_t4@z#j&0Jp1w@n8?2rTbd9f%`$FL%OvC-Lvr3uJ8#rV4WrYP^C9svq`6*w?O3| zRg1G`*lUx!Idc(ZSFpG-rAw@*5D8JbfB-v=iY#bf&WU#E;z)#h>A%(qd$PFa`R2(> z^^7qLB4L!%^kv=T{ieF$pq=-X>gCiLuq<=kIgApn|MfO4Xa7{+BeCH!L&GIufw05x z21ind_{Ph<x~ORf_lZ)4i2*_adle~#+2)w8s>+ryJKd@ABVhAS@lGs%$xQ#e@0yO| zj2{My<6s3l&rYM%z@h@5?T-a1w_h(2D6+SE-`vrjDb*VW@RNhYg^>{^!caiFf28{D zzE*hL_YR$nHVeQz)~Pw{pXRk9g4>?QeP<G07C5}ppGHe7qBZwetPUG%5^Nq6TtS`o zgau~>>N;Lp-f@Z3Nn_DoB6V^_b)(}$`w5DRNbBey6nb^#fR75lk&zoQ1c<@~Pg8_4 zL@-bOEJj%8#;x@=(rjzsH(@ROw!n*~+A0OXasR^%EnxdKiH7I6@XivccoS0ug407? zTx}G!=+Uzp{(k&9y;&g7n3n&XM-DdfaQ{+0GgOgf0xg1^7sjE}u2;^1VU8>ZlW+eI zLxXb4^kbIxHZbz)>m%%s2n8BZM~C636?60rd9<*MWwlg;?@RnJ5C4>>1IM(FKJ*7~ z{BjG$92UR3eMx4<zVU`d@kzQ)2&F800^ZH}U9nn7rLJ*0<TN+4Jo#Iwo?KlZ+&Uoj zf>R|O=M6u|<%OTom!W5;6Lp@BDYoACJnnmTsjIgx5L(vPzxA)kzoMv=l`pbhv5y_c zdZg?J+hT)2V{-n5vpMB+UduL&78(*#QNadCV5)MobQIM68)uJx_(99^<DOXDzR^y8 zmwzCU1PLKoIHj;;2?!C>pI(?a1$mU-y8XipyHTa$CEUs$Yd~I{9eRnl=mUX5o_j_m z?qvUQ3YI$F2K(%!_4X;&X@VY`Wf~)E@LTUcXWjif`mO4cP*{#3R=@O;?0*(Mj;NV7 zo(D!DKZ|4)5MnH*5C$Q>X$G=xM}cDCz|BE|a)Of{HG34LTmzr7#G!MWH}U=}+55pD zfVmOe21@j+y+`P$5sgt|fTw+&G{!rCdENKfmr?AO5hRF*x+kiwi*vC~IDUpfCt`k! zz9lsl*pRayAx!QI%$|!%wdvUwEa)p;l+`vfrtZ%K!n;x_3*5^OOfR#D4cqX02&@=J z?|7DTWv-&<8A|2RtEVkOa6up0Qx2bEiw)6s&oA-TEH?aIQ3|%X{`4hYPjq*zA9=fG zht$3C=_Tcf;!<6!ZUPH)dsWRB#4ha41{Cws5~mkKe@FmwG%+_zpNRiX(Jgnbh2}33 zHs8S2?8+xEJ-O@La5!Fi<?N61hhRFsjn8~i1Y*YTKJw+rgBS3`DCG`y5-Q~CMh||j z-QwB&6H~Dcmn00q)jZ^WjrQD6{do1-lvwQRQfijCM5Y3g?i`SQrpqAZ%$M_IMe4Zr zUhvEGz&8>+2=cUePKW&K;kBBY(OS>V_oQfAs<nyJ(W^cc&4>fh+77BbhCTBdFMtyr zu32h!NEe+zgGKnq0X>(jn9i?&4R%Cb{mpNF3sdk}!*!lvPRMhQZ~SlYA8+V193Qf7 z+jJM4KVsmK45fPv*^o=S#y`7!EPj)uT^?L`X|%n@uP?oOTk(2A{xwzO#qaBHXb=}g z>9+phLX327S<ZZXB>(609>>E3;0+bm`oW@4r1-GTVbv=YKP`30@n0ormZzxK`ZK#D zC3dzmg~#AbrSS$_F6uXS>~#OxB!y?*NxX-#^*P<HGiq|^yQ=XMq%8=vPFVjuMt)>1 zLBEuYQ=bsMbf2<+O)~aAIERM70CLgy0A5bQQAbZz1-L_dz!qab?4v29&3NeLHSPb# z=}*=+wx2O+zp|&+{X?_Wyr~Zs6)>%wK-rnNVIzg@(y38HUo*n7GxkF-{5q3vH`ty0 zp!Gz0!gcXgjz!e1^BA)L*5QZzOHb)1v`xg8f=o(}2XVU=cxI~p-Cgm^GZmXkb36mI zhV;B#rCZ6@-|WYgQz)Co#Rbi9ooTf0DT@~daseu~`AzKloKVg$u-q-tX^`oU4_nCJ z;uuDiNCT4O(s{7u*pV`6$OzkDyc?S8fHxmyse>~scE{Q;*DbjiQHw{=QQxVju8U>Q zTis&7R2Dm9KW8rH)N`|RgYhJM83$eGP_}d=-#i0(JHLFzZt7Y!=`f1gSBvXS-p6;o zOky2TO+~v`6utcXpS;np-?}<fZPbM^!)iKC?+L;MY|LZZahGvgO^etpDT!t}Hj3d8 z69QdzPoK8z=Y;!F%i~a^vy_5JT%MZDdc-WzUJ+Bic;!vcoGs<_dPml8Qcq8sUn7Lx zIh%4_KqU6l)KM4L((Ut0h<2_U&auzec>pq7(5NBQqIeH^w%kThfbVCd>A?k8+P(D3 z&*cB2Cmt(~jO#({Y5T3yUDZncp<<StB4neR5t18;n_Kf<sq#jpPnLi>j@4N$PQ*2B zs+I%;$7^%(I#rN3_-MpKFq!Lpdr{N{*H9P?afLtul{4gEzMkLGGkl?e%Zh^*2V!Lo z{2smkLAlBNFwv?p1a1EB-h0hUH<0CSAN*U0O<Nn#oZ!#uy=*wN&C?aI+B3Lwg-Ojs ztY-pl)cRHi`+#xE#Q*ZoVcD(9ARzq~=dk9|7ftH@y+(tYl(8u+)-IMg3BDr_A2OLn zM~l*s!@H8iZp%4GySHsI01Jq{mQ$u%sWmZwta@Hhj=ww6dc09#on}I8!3(!bD>s=- z_uLI!<6f2W)$Na5?2fteWtI77r3|Jsfz)Hbmk)sHU_Jz^F*Q&AZjgg;vv3#MS1<OV zCC^H8U$D4}7IO{**p6<}KbOvT7~}lnU$0uRbX<MbhMm|~wC#(ZO|LSh<|Nw5GpY|; z(HAklDKTH5jIAbsjdkXyZ0ls42FXgH9L167?tAss`jdXH=A+A1qy??nKeYqdE~Mp+ z9E`vv%UBsb=RQJ9Om@%7nU~ggAhh#V<R+O<r?{5X$h)hQN|WxX^^eK&{k+&(fu5`4 zC2o|fs2NRWS)&oSROHu!G%GE9_SOk$z<lMuKiMjm?LU4Rknr(xfK;|Q+qX!H-D`f+ zWj;<ue$8O){CMMcHT?b<hr*^+7G!TUggohzIRCw+=;8#G?eQA(h2sEza@}!gbU^Hm z3goTYFMe2#2u2XP;dc4h-W$r9wrTK7`cZU@QdtwNhjWEax&V0xbg!24zIlD4J|pn5 zCD=_;fXK_pXsp>ay*{>#Dfw{nomb`X0wyhYA$=&*)M5RbCu_2~qlyomGr=<MspwO6 zliQu6uC6Ximi`qyzdkA+Fh42?xN>#LwTk3sH_vd`r6LCxhAv?!z8YTyV*fnptr$)F zP1@uvUzxJaX<3K&-Gyf@I?HT+Lj^o6-tuWiyI?l9J_xl(KBXJB9)Tw#dykSimr3I# zZi3NY!QK{|yNht~uhh7AZH}unh=R=g*cZb%GCf803<Cv*n!)@<zPqiYIxwXhuq*XJ z58`eK9!p`uJuLF>n3x})>`AQsKG*s_y6s~gIdY=^k~x_{@{(QH#)O16_1peQb^r#% z+{s_4)Axd|p-=U;=_lWjC1li2670}s6;OH)#i=yTi)*XzIqq9{vS`-5$~xnWH+!A6 z^MZFj;<V@_ibwdV9<7i$x#vZ(%)5-6v=d+h-lLwlw$7T2&$nL`8*@}-%g-7Xwf!O$ zs20iMe_JfTv-Uef!#298VzM!M<f|rk9A{!&hmZ5`LMjUc!}Rtdliu*FX`DZ#J`T`1 z9&|ri(_H}wSDFUYrEANNd!tn|;>pg>s8I=1S8jQyJPkL+*)N2;2#HfC_<6~(axwSQ z14i?-Xx-Wi6G-|)*b#q6UAS{_tdIMI>Q6n$>>q<O^HXFyRKqYdOru~8{t}0=d_wG5 zU+rz}u_?;Ulvt>gA!3av3)r+Rl0EGbsnXo=9AHvIRn`{?eoAa|IFGi7&g%Oi-4~li z>x2CvAnNSq8xs4aa!BY?Cdo(if~N7}kikctAwuNjX9CM3Uyb{eU+>tC1!$yv#DP|u zenLV}HPx6ME9`>5hK@9JZ@m>udF*-PVpgC-{`=4@zl&*sGM_ARs#6TFwlIm-bzPLb z{3vMoYlea}W!v|DL*%oU*2~r6(qZ5U7h~#IBU4e0-RxJpcuXqt80$iv6HQjt%ZTY1 zh7K2!8UrporE5+lf=cswpV|^F(0&p={h1&tYVkk3ol21*^r$^m;RMh<u-h_OEQXyD zaI75PyWb{!l&<JrLhNBW*_sUwb6fSw{jDiM?l<J6*D=~X3-6Fmh;3aV<&|xX-=vUq zbWyAm?r?+D?z6dp(uUCW^6fA+4R~flWUc*<^nCL1jLgw-iC0PX7})ynX0Y}`i8Rr6 z-FRa#^=hnZ=7H22HkLu4@hCw1jOCxTAE31VN-ZAYj&nm5hy!K9&i3=BPqurd6$-gl z^=KCwVR0DBa16Y}<m3z9!EtcrIrEOtq;W%#CiI<5D8+4pS2Ei4=G2Xa$RPc9?_$7~ z<gZNAxt5;7uQK#1IN97}FoG(HWy0zX-od!JK)9UyLua%>jLccYqa0x`ZbZKLBWKjO z-QI-qENqn&yJx-?`FSHRG?d0T8TB-V5WKj<@HqdsNUdMkMbpGG%V{bt)61Pk+#4PF z%~v?ANTfBssXj7|5Ww4`pcH;s(}RyWSJRhO;>^ZfQd>f=5I286Ai8(kq@f%>U&z03 z;uIj6?+9Xo*fSiDFZ$SKD~C|T86!HGUw&sQ$9!f8iT_LUoCSl&=-7V>e5~|&^8O++ zYUumbd3)`Xi!(>ppRK!N{<{enYLrveNMdK}PzD;Q;SRG*FtBoEzQBLSj&uDcXQ2$s zl-~z+Rad*z{mDu%mJy2HytKyC&?@*!?9FC}m7)T@kiu)zP{#TI{}2j|F<$>CA}8Y7 z#1#zIGJZWmVt2dUUTb1fRzr?4KU~EbvDo5B-H+cpgJhq~+oz0as~z8B4_y6rtvk}` z$Bq0g=PrbY9u(>!WR+SUcs9r=vxwl-(1^sZE@+m<34WCFB>0Y{<a%CdWb+IkABKI+ zr>aQ6MDxjfRFWos^0j^4Lm%qpWmAvNw;PdxdTp<~C(pN=#a%(kaRMICiIJ2Y)Fq)z zv6WZblbHZ=#*WJQ>(^G9pxwb^nDSGkdGug;`AMeaCpn3F_iG=FMhrf(TOaxPU|yH5 z8>rQGIV9SI1DZO`m*!y}ckGW_#~!9<xc~T*5t+{*DSB{|#)<dr+jL(IQ_W4J9o@BO z@@K`1Kk+&_nTq_V3jFWY0(Zf*+~0j|Q5;A8)?H7B(2CVlf!2m8f1&K~i><G1CtW(| zx+$Z#y&=!62t9t{lWVe3PVn~x+=rs1vsmOPDySkXVq<ta#wV_6r0)z4$s_{wOArn0 zd^SCeslSeU<Ui(?W>G4@%n8Eg`k&u(9P8opS*d>!59G_dei~^;sZ*IJ)AlJ=I;|Rf zo$8?!3f#cL`s@V}$W=Oo4HY}H{+1TO&hWM_eT*!QT9hje3I4*f6!EQd;E~yA-32Z$ z{d1)fLheq`9C_z8^fRMm_vuMS95Tv}{|BW{5|e21p#I?A-KuL*m#G+T9zf&Mh6u=X zF4xqiuGXx)tmWCK14A*GLFOPY(^m}ZjF(!ua*nUPYtC>+<nLqE$Go0c_uVLUjDV-l zErKDWPw_E!xvT3!9rpWr7i7xNr6=?JgHBmek8;irL45^&7v?1HD{gCD5SK5VlH>9` z5VLPmN_+dd?s|Pjc-af0SyuVvWZ#j-a_YEe_Tt3XP#)pX>&svvj26n(_T$R8?M|n_ zov&U*RThSh4&*KGf#>?ypUJ~oy;t#fFH++7Crf!)Ru6^dQ2}eD*aNsFsA|=IxF!z~ zyYDLo9(hCoAsvZ`achfetSF|?x%stWd6|I5$zx^K8q3Kor`C3=Kkw<<mw5kWVvG9W zA2GP3@1N{QUdUTc9EZed%ilhoA@6VRn*56ePj8HF{IV`oJaVvtma&xwXa48nP?6(V zB~#eN-OI>6mfhmkmHCbO5YEMzQ1UGQc!j+G3g9$qX<N>jv?t!ZKfj>QUld?z8XiDQ zA5>xN3*IA34MTfP`!?@sQc2p1igl))=9RX`3c;1sn2ai&TO|zOp$?k44#&WP0oP&- zPsQerLW#rM$hh`LpYg&uh#dY$H&Bl0V9IMUG)9eD+R_J>Z2I2Z@y=T};QiL<a)d(D z)ArBU1o+*SH}tQd3VRXj^L2X=K^HEdeYSfe93v-9tt%dKhunWJL0MvTD!>!UsC|4t z{q;-HTkufr>4_czXUfBz;Jdod9wr;)2PR8f0%1x-q#t<BlxaTs2G`AdLuy|f|ID5) zi^P@vsvoqz_oH0a8L=zkI-N&(S?{WKv0-agO$TQm-PS|u!Fm1ns+Su;UM#)QZY4UL zxGyTTcep)=QlCo%!CLXBPO_BAe0`8nQ*kY-e_f7Gxph`XuaoZgci0<Tr=j3Mg6eS9 z3iIl>!@o^4=MF_PrWlnkyB|@L18g_6(k{9d9E^QH00<jy#PLvLmpOUStC)_qOB$#_ z_3!_ui?Gq3%aI84JD<Xf0214%A3gJAoGw*YDROA_7#~mvPn{HA_U^y*6B?ePBSt}{ z#0@&qkV^jC<WUOEyi<Dy#hM8=@}^<q^o*AugkOjWtKH%H(j2zjCfJI6rh=$1;R2BF zol&3w@WKbjPlG%(^Ip0Dpl8b)su!5a?YJ?44To;e7vM3*DG_ge(L^L4JKT%lOVt(O zKJ98*)`H`QIsSp%5h`6T?sYWT^ULZEEkJxYwqX)zu<bMExjs4Gs<6POwewn1SSFV+ z>m{ri?zA2xJ+_@BeqK$@S>SbIZAk6MHhlBXJscqc%xea3xcq!`_;7!p)q8|Z0K*R^ z_U^c+oa$&<H4+a?VQzW9f=t^&<>`xMxkJni6T{M#p0&nboq@gPEN6`Dz-_57;;%-b zsntG(j)lP6m0Y#`N9_zM0^}ay0QU|FpmpNzGdB5i5VMws3v6dmJ3TM$6IHMHozM=M z8%4RS+xz&$q}Ib#{2ySD5`&>LiKeaE!QXMlmBW6VGT^b&6w>rLcw40-1}VJN;iN&f z<DY2vJB^F2dkl-z`@60yocZm^8XsLT%Mo{pyv^^59jnh=G+fQ@-4UvhFK1{c+fN8Z z(gqsD*vU!?#uwc)kBjP_!2kQeUuWWvt@5zf@%tV7dYiG>1HTxH-I6BRmtQ^+QW(9v zLXy;LsK2}AAH=D#vxfD*q+if6q)X=ygqucSIDDjD=&7RK+yA-mr^`MX!`~l!M4#pT z+@sg4?QuBmCX4Um#t-ij{)}IXJ<qJw8sFmat_W~-O$<0YY_x$LzaI6ipCbw4gtdBf zR9n1<377eOJQFMGy_F(*Eu~Q*giis8;`cZ{qx_gKy7+B6LC7=lY-$68RwSjn4L2vT zuC(5Gv3p@AMTq`YP~*^9XR)TDC*EXzg9xJ3;bYs0ePx(re8g_$5}PN`8n2!))ul;A zWxlD4nHK<ecPS=<Gb;N1d4Nw3E%A9c?1y}n$6#&S<a0W~?xZ{Faz;5^lI=w*mn$hQ z>rKewz7CCY@U(UHy1Vxsp_wDUUy(2K1M})nO6!H*FU*Wv@(0FerLtYPDGjVnFm|EP z*<9q#rk+-^>?=CX11#=LC8pYo2LY<B&;M!VECZVS!v246Y&Z!SAt3?-1Sc&>2qL3X z3F(#)loSyJg$)p-)FEjQf`p{BG@>Y>GzyLu1nF+J=kWW#{J(sj`^8@Du2c6p*SW6i z`%%ADehYPiJ-zktMwLGi32_jQg4DPv*QhfT;RXeR%X+V3Z%}7MZ7^8OCJq=>&b`Nv zpRC9s)1e8nO$qcS(ziAfVpjxgd3D8+3DFRuhG$vI$O-mp!D9~k$drma+Pr+;0{J?a zE49*Is-U;$A3e8yA=^DD4$+2__W@h?6cJpEtI)q1Bv7R9XS#86cBkLvZ`O4A(e0E7 z6;4@g=?O}<2Wm-(x-HTr2-2>aI%jn8(e_x|9T~Rwf+k3Ie_i;=GvYA_4%1Mq@2(VE zY>Hbrx$+7GW}JCq`PA8f<)pbmH-^go?90OU%e+qz1G0H|?Zd72z&yV?H*|_jV_V>` zAuOdEU3P}P{hn1VPzSbxbg8eE9WpU_a3{hccXXYX9&|{z^#ikz!B9J+;ej9Q*;5iE zeJ|WkENm+Dn7Mq_Ed{w-XwPyE^0intL-XI)bYFk13P<O^A06m10V-q$`6@5@-I&wH zfpG8Oq?t<_;(C?HpAJnD>8!uGKErEWGpP51{O^liK!&t4Ax(;r-sb{oeh<7S?xzb$ zZf2Nlij#uMfChDQCT#00vQYHg1Y2p=TMW8U+!t;E^*Gn?6c%>~(h@~_;kz80%$pkN zhmo7*beR-`+$kE9@jn#5TQir$zphe6n^;sJxs%9rkT0*p%Nflv6?nq4TH%u3Ydtw) z;f|GC>cM1p^wE<&$>Jq1wV&W7gngm2RfhP8c^H<;so7gJ(xYO1`tWG8D+|<%P5zRa z`@S^DMnV|@g|AEivG+>0+K!1w2(9B84t=<o5gc(68hvq)h}=n1q$S>gjnD$+wlcym zdUQK^ohvzaiyhvBSCup1UKE|Y$;pCf#FD<UpCN{z{-R<UXRe^3akw091HxmzYaL__ zJT&cXO75=Q;7bpPiI6eKGRks+9bWDNBMz556MP}Al~n)8R7VF=3ET=f4&_CRVb`rI zBgqZ1X)lxKl>8CRys_S~hbjdfL(6HoY&0~S?Tb_W<JoV}d6rO9+%BK?CSwJrtN$Dy z#YE38Zk^5ZYU}Qm_FLR`^E&g{mU<}PooCMlXrWrs1C`(sF$EaWW%cqKCD%-0D&r3i z-roE$H{ZYg-ReWiuZphT^=1lNKYLE_%0Ey%>b8|YzGVG7Pt2KSOK1y$OJ>QbYvji( zeDos!=G{_GD<!N~*-JB3xfX`SC>u2UP->lwk2D=a8(}eBXni;Ed!Aqz0y8(MTgDa5 z9m*;%skf^Bd5!`S6jM4~k{lzd8&*zM-Jz|2B?7e(?s5wI1mN{*x+P%VjHA}R=u3SJ zCHxx$>`QaKO}i2Le+Ol!hta1{E}3x_ws}{BFRy*(g67H=yV>fQ`kS3&p~tTWN3>Q) zD$GNQ8K={~Y@W1SIegdE9+22x-?YfVn%Fy^MyPY*jD^8R6CPF<6qM28>Cp3BkN!GZ zY%*MmBI{pM_!r4>!Joz7)i#SV!VFPbx{XdBly(P>#C?VZ1W#s2#C83QK4jg;;wqtF z=25C^z7DV2I&PHSSJ~tAC)pLxewp6RK7Xh0Mx|xY7oiz`{KCy)(`HnNXS`iptA6fN zBjuC0o(4CtN=IFNBvf_vo#z2bY^S>fb2~k3z#?d~3ddN%;24Rc=1Ut?6HC9~!-`Y4 z%JduD=vC;!U`A9%w_OZbf{WTFCa!2wj!g}b<~+-yZ2_unHm$GyWkt_<;T)Kz6}Esw zFTM5G;dA3`liVE#C+<hC+Lu!Nzji&oAh{pvzQFQ{%oYXnTozv~tzG*Un8`?l{gKs} zUOy;(YDbMCxWPtJ{Tb$m$f_o~AJs|Y0ld49A>VN{aJ?A>TueUW1PfK(x0=#a0xq6p zkkb8a`Qb7j3?)i<-Y!EQM0EjPUwG#r26(l6b~nEKA_ySa>Frpk*|nPG*E7?kwUDBc zWmlKftT1y`jAze9{L2}duGU3hDj<1&B~}|MOKNMyB;}smy6@X1nk~E#2b#LNlXjnQ zlXb$bjO&RZsNtvAQCG;7t`^WBe7A^?!?uTUs_yz?%%sr<*(=#Y&oGnHf+hfOZ03Y5 z6%*Ph{yFg#f`hk-jYX6;qw$*yFNFJSGW9L#{^_H-s-~hCLA<(i#0Fgi)xS*Q^9&+} z%16nBFVl`S9Kv!HM?MPzle}?8wbkN<4;MHocZVYa_k_P!uBxAY<~$ufinh&E23qiF zE>;aWTqBB*eB_v5{r45%mB6l~_&<H~kb~zRP$)7}MjnN{BzrN43`mJ$RL{=s43BxI zfM67hvx+ii?&_Y6SOxNLD&k%7pRuH!*w}-k2XRr9)`XRT6~)H9;atA*FT8+0pdt*P zIFYzmf;@d3UHhBgICq7aVBoUx5lEqbWhbpn9GaONlT>=~WgpYrjTo~iDohY16U@`K z`Ako>;VRkdie;kD-@<L45zp=&>5Y{`$|civhp~%i5Wki@&-xN?hgCJ{pys26{GBDD zznPzmwL2dV7FZ07Gq0+-o{12iW<G8q-Vf6`-|sm_iI?9v)1P)AU)HN$HS3Iib<zRX zcoTD}R&>>a2=)BXYHv@oSGFyO-qS1=fDGE?Sw_#p+N#R9EWBn~^#;Dq`#r_T33`zh z+C2J*C)Y%I0*MuGBaG-58w=@Azl7SzJj2(Y0CK}VKDng4takh8v-0z3k$cV#&&|Lv z+-wz4U`bUBb?<CQZc<%OK^oL<`nwzklw|vn#bO>l0n6(fN>*8s1@(bVj;pI~z^85w zi8gPRiCg93ssr#^ksZeYMsx0y&45}H?Qdzz_gcjBAm-}OwWDRnORx}#<r_B50|)sc z|JAj_33O@(3I`8`eN^G_I8eT(BoBc|-`gh_>F`wP+Vsi9nYtJ7(d`p3bE6c~_?<)k z0^=7vZIYEDEeJ_nD58M>gC(~X0VLX~8-<pe8_2HnOlaUZ<?xCtc#0&_!`Uf8GhbLk zlm@Q<<v|Et+fh#NyW3)A(0s>INiG)^_UZTK2{&BfGmp{5*qhETDkaN0dL4{C`wcam zO!tiYq%;H3G^c8LcWlYmJE>q=m5?nJ;C9qU6b|;SFPBJt|5<xrT_tj3(@qFZbV%y; zdePTph1i>VH!FA{mVGX1q>lf?iL&c(qYK0Fprc+4;-Kx)j{`c@M~Q}Cb%b5lTS{c? zlRps~l6E`wI=+Z03(_wf2FCe)MG+d2-gYS5zsUKH_9>1-!Ek(|n7c{Qc{E{)v*p^c zL`)l3WP0$*{ZA*>33J0o$+B%lwDhUl6BOZfZYjq~3F4V+dshCR(4|W$J1b60yJgfa z*{m`Flet2Uj(7E&A0=@4#vvZ-mie8oc_dw60iAxSn7W%Jl1b@Pqqu3?Z*ztX;6FAm zEtEYKDu_)?g$hMNy_-x}aX(c<O*%Sclx3#JmcXaeH{>&J2cIZ`aYHa{z4g4`pf1Q` zM{m{yP#(_FaUe3T#7dz?--enw<fz>UeUvZrg&pe2)^c-<stA7Bng!i=_j~xNo}faS zDiWbKec#fwprhZ|!A*bp=Y@#Bx~24Q<?s1443&3$msh^!gjfFg4CV?GDcbPoFYuC% zB!7Oatr;vUQs;gX#YQ`>@aU6aMS^R`hnf&(U1c~f`RVdJU$RnLpCLh~yH;y82s9qa zPCVwJbX&^TvQM+TX25c_4Q5Zg!%HZm+^9-DPHQ=bIg32YU5BoEj%cogy27CZ73%Xb zM?piFEuLsyo&*o|>HKK~CJ~t;sIr@4!rE*nuY5e|jyz|np@b%PyT)HUz(FI1!_@T! zMrsrnc7&aBF`1tfCkKEPipp0^Mw#sm(GL)er{)|GIbO7f_w;I3R1>xj-sLLNhFV(> zTWOAMZ2&9E1Zk`191aaUjrf{x_`a6}7g!Het4ai)jHjy8+IlRSkl*(-WKQF4D#ak6 zTb5mo5@K8{U$S(Uj3(T&ARG-46Xq-+LqZHwu>x}Re3M&1E~zrKIl*>>g%7`(`9aOz zEnt=+QBg@T>;9_>H8a6)4m@K*jQzk2q240E)a3H*+1K9}e_oe$vI#8}^W9weO<ukj zNoE_i7~igzSx3NJHMLycli;Gi;a-NbM(-4qt5MCn_6c=yNbsR>pM+sOi2^G-#DOd1 zl=bQDe&Tr)jszFFzW2v;ae$4xOBJU~t<`)ubbDB)+~HpDla`Jlq5MBWfs^TrO4=W9 zz~Mc*ys5?@CdNfV3$ZR1zXO@|NSmYsUSRwc02O2zprFamsjN+Rj;r3}ux`-tM#ARY zUd^+AzLcn2lNOl~N=GDksGp_S2eD-2SK3$&VJQ}JOv32tpf1xJW?5|H%aWa=!f3+S znHGaQNu$UAt`-<4Hc{U@(?U~wE!c+9b`e{o-r<KuWIPxah%0zapLHzx&pD>e;LD)p zGy>l0qNyRV;CL2eca!DVU^BHK$cqxfdP7=<`$mr<U4*Ry@5<*<fmhsuQPW;^Yqq?< ze@}M|)<*brRegGGD}`F2$gB~$nu!K*D;ia7^63$`H`h|5>69UP-g>tv`=g6hyaPKK z_dJo3m>owGEBgUQ!a$*)h7()7o+-a3Wq-#f{v0AB3;w8TayU`JM~)pv%|Se9I9f_9 zZTBJu{R;i4P-chatI1cJ);H%mAJ8Y?Me#7Apb3rq|6W>4Tck!=T3hTn4u7>rC?`MN zk@&<$-@X!a{nw#O^8+@5S}kLJ#QGmeErr!nfJKq{HjEBYle1kO^%zI3^`WkG>2l0w zQ4`pq^jh6SP2ZZ|9dO9cud{ZQTc?6W#v#2o3cO@7Fkaf#3ioml;iobjQ7@gg9j}?} zuSOFb<S4N9t4$8xk61zlf8CT|9u9%Nu*?_5w`S=$@*p1zhbaNBn-gx?Y?UqFcO)g3 z@1vVDXJ|c}%B@p77Xsp|lq_5vgn1#53-!5GE2wW(uhT}SLP3STHWi7!{KzY|s@a%! z;skT?H?hzSyX#}K3`Y-(zMM)p9NK;lOonM29OUqVP^mr<>_$YI&-G{eM^s=n7<~<w zlNl`zJ#*Vj`06N$OSsIBhs+SK&nyQ*dw+-f@dyqQ$$EPOBw`hdu4+*@<Ve8qJxEnZ z{dui@@A{RE5lsrG4q;Q6>&q8!a=z!ZZq!POj@-c$NbOk!0Fg!aD#Cys{D-C;a|CVe z8zlR(aFK#W@D17OYc0fCPCgzpzx|ZF_R?Mo)A;t2?>MON<+8PNy-1%m+bT$)ow-Vc zz)0(6JT@rL7DUOkaVd`oY!4W79nlW&s!f4#%QF?IFg&ObH6coEL68{#J;>z_BOyo6 zHF~n`S%I`j-2D8{I;LV+*F9W?o@@NG%WL}Tl;w{3muL+XPF4#iM>8~{FD}J<%-5RA zxkQB3*eN@$m0o9p_JWenlh4>YDI`nYeW%~9`6DuaJV@u&V+ci%Uf{w;Ebvpi*z#W6 zmmS`IycO!%0qlpM{ntpXYmHZKNT9;fglBom-WGHy)Q@BKOZMI4IN7C<fYZ_j->{MW zNlZvs6*qq07i9^9&4u>zELa&I=)qY^?{6UeX7>I*LsMJG0jZefjj}Q&HAXlwTd#S| zlxE^rDPYsVm_B5CjW3A9yo<sY`1)(;2qPEgq)aV(?o<YryLa+|k6eVKC5nlD^kyDH z>6?8hom%i`HCFK@H?S4B4`h<{ej*sQkZytm$6(%4H&@7V>>D5vZhO45tbb|X1k-9< zg$ld}S!1VP89W&1Hqan4jwKnPe~&agG&`{#{q{$l++;Bdh0_>bMKSg)Yz725$t?c1 zuL`9P`>z$^!`!PDP)3x|i?u(9v#)Q@mXxQBU-}++Rfr@%q=3RDajYecT?7eB(MHxh zeCO%T&t;A%xU4pewKd37{F7V13+{K@G~avNin+8^r>~-cfnJ)?-R<C!`40a`YrGwL zI*d;3F_@5&N%v9ng4O4pUK8kMqgRXg{g!VQ;56H2WSy)&k$@Hlz<(mVBgFfp{zYy1 zGZj9D9ghoJa+l{U7IUAB*Y1<*+A6xz|6P;px!qnvJxk_oyL;bc<!hrdw5|q!w%J=_ z;x-YrMJEY;jhoz+;LPCIyJqvZjLYYBfq(r=`M<HjjIYGeGxEMDT(S8&R+_EOq4|Xk z=V0vzCnD@bsWQlty(Yz!G5yoI<STD=%}Mtp!|<-&0<vQ75cM9QCK+06uLl(f$~v~! z5+1^F8mQH?ah<auvfss*O}i1`S@WReQ_d0x{0xYmEpi|*)o57b*9-$ewHqZ7zIRlz zMdtWmtCDhNaRgbDm|u4)O9T{uQTR%RyBFuKKTqjuno6Z~J6X{KEK8e|W7<;xMlTKg zK5H}Q;6-*5A|um>81{9|K1pGpz-sq?iRGHW<R`!0D@LFG{_!{Q&j&{|VMO@3?hj6( zXQZ8i+-AtP{cfS4oZhMhFO^wmaHPGY<g0=?e8f;vZV?UTFx(}J2>20<sOAn0Gv}X= z=D$~Bt`E@A;bgT5$*rZKy>jG{`X*xQSs|GjzA%j7S>^^Tsj&@($j~}Bp~yE>(kg~B zrp$7D+RIYQAQ`?(Qr?leJ!)NFje}%Plh*Y=w=`K{qR@m)Mgrq}6)t9y1OLLK*3=2A z<uY{Wxi@>5d~)e~Toxrf*#8%eSM0_Uh$Rm3@n_zwBO4+jJzN`aS#^^LK{&6a#A?om z=HCy@WEMUjTPZhBcPKa)gf>&!s@xj7VGtymNm&DtUQxfzl{$4n2e9W*?}8Wdu9M#Z z`^T(b3{2BdPv;zk1r!P2=Ewet29ZG*U5P`Gx7v^)%B3UYm*K5|8pdbvGABY#UHmW} zH<R|5_ALeyFf7hiU*(C^hAO52@$(zgxc^fh7<6VRm$=Wv^!JEUol-1z$7KwL$k4MO zgc-YC8>qrn$Ec+1AHOof<M&vH%pNpzV@ME%d(ZM?377^ls!2<pgTD#>5CFFwJ!h%g z6jiO;EOht!4Axkk6O4z|RwJx=G;pu`{}dDGp&rb>lA8Nh{L}gPk!+=0rXz4sfj6*h znf~aI6b<Ac-0xG79_F@-y;-J}+GR>}WWi&M+^y`_$EJx}p6__F$AyGb5RpbhOwUG$ zRf_$tl+Gy(JAl90uBkCTGsu!~%pDz(e!Zf(20<Ov9@whMorrI7cK5fahcGDI%S17j zu~^e;q(;-7ewVYRs(TOyr48iLqfQT4{>`V|as;{mSbGMJp&#~g=ptE&P_gv#eAT20 z*EzK+MIN(J1HJR%5D~d5a=1Y)a^<XaJ%(g@Oa$aQdQRhk*O1og?x>2W3WDGUe$I5~ z>~pYfc686+ExSKRVN5TOP)0&8<#r=i_qh%1!dzfF6%NuVA$qbQFL$nrEK3icQsIDM zoi~*#0myLDLs=kc!|a$a!Z}OX1~gBAXOvhYB2%VHS}%cs^O9zn=!uh1hIMb#&`W)G z1gEsK*Y*Se6ya!FS=2B07+kcGna~3a-|T2|HPa|19>5jvm(dS?It3y=`xb;X(0yVB zA~-NhWV<h@!Xa$qMzXZ|*>yGtd5SS{?S(sM07+w>2S5_Bw=pnM<W#+@2^vd1c?RIb zvQZM-W*&IfaQv)+JCMUQ+~|8dl_0Lq)~6<d^7Z%W?oEe528DBWz7JaghVD6Vq{=Lo zeqrF^-+uxTwzZmZO?7K;^Z_I^^5$-tyYA-!7}nkXZjMP%oZXZ4L*QLva32+3)Q&)g zfSLBQ{Q|_&w^x!2wzk|yy0|rIv+j4t=uyI$GYkOr_TPd}gHkkTXbDA!_iVcu@9yXi z`<+Vx7X;setA+e6DBrhqpE<31m%E#Xpn_z&ceuMU#E(}sTsvJxzu^~)0|3zdjC$Vt zvKlP&8p1P0|Lu*Xh7_Q16ec3(=;QFh1A)vVR4--4iG(-+z{^y}RZ@(@(cnB5K<MN@ zzokD3VUnx<pru!o0;vsua@=Nu12-*RB$!aA(GN7&=7;0XBzjf`oLDNpjr%&AO>pzX zqS9HzvE&}G--ZlR4kJL;GqB&@imu8G3*HHXLv1D#-ghwD)HZ5jo!%1Lpomi!_nC`~ z0)mySIawf_Cp_Ys`jhku8ur5nlisE5$K+i;G{FS9b0%k#8-yNZL?8lKT*3y=_2!49 zddI8zw_FFq<I$~^TLBajh8b-c*rm_O4&ib<z9^{S?PMw#f%92H=J-wJ2g>BYYXwzl zN}YgE#7)pszz4maOD@dBm#Q~;Z)xvK0j6YR=V~=G@==#Tdr6|lIh|9uzaC#EZ!>{R zpH(+loDu?JcY%MofFB@0a}VKvl_99j*ZxD!1TWa_&awE&(iYPJRx{)XCmQ+1?2Rd* zI=T!YXt?ZzCtJgn&qDh<8)SxNZX85V{KGICbpA`)dg6YA<}qdl!(3(0d|$-%qUgX= zHtq;f(9z4zFpa@Gl?unEV#x#fLLP$NWlA<6zoLDm9VF16^ha3*s(tA&&;b4kcm}0f zSxZHN4A#L_j0G+!M}#yrMkW{_0@oYzdEK$?omvw?1NY|aAs~%w(~`lltltAeu|$Ae zB@Q6MR3U4@)J-Py6qmB1e5p9l?zPj04U8!Q`+E;d@)A=J%_ZVARV?n9lqK?2sQK&y zZI^pS*2T7_1!{SYS%&`rz-b6;GzpzIZuj3<bDfwy<_rIQpthPaHx;8jo!v#Y$+^jK zj30Fpr~QzbKFU*xA+|a=yII5@BpwM2Z?}LM7Ux$EX+~v|b%j0kJ_FvKe5T96$nsa( zU*(rUp~~Ws?7Y!|4<l(DI8OjV_DHr7W%(-6V#pFyO72CgY)Heq(<!YErGe$fljAC$ zh;YDXc7jnyx7fy;I<dyI-tm85)%4BzbtG8Mj?esLJqr3Q>{IzYA{JnnJ%IxO<dvT5 z1sy$&rJc}jzC2IIz|`ze`rDG%%^bwAuBYsP%GO+=VdsxNyiwF6!WuK^{@#A_^e2T# zGB1Q_vLFNnop~+-pxJk7f#-8{MkUOf3`|TVCbSsMnPZq|LGA>&D?3^K0IyM13AWo1 z@m?gKml(}azNt4TVxMm1(Phq3!T=})3qP#{@Fm-(nfih=G{QqjJZb#go8#gs?K7OS zKRw8b`hR$A02<M(3Og=C20NfO3Q4XuR<r<AwU4+5EfB!{a^id+b^<_WTif8Vr=9Uo z{5OZv7NcH@k`oE``Xu;YfT}Js)2w3Z_?}{8()c%L&ccN!ptD$nX+I=j_eHnpj!EFZ zz&+(<MIfUdpuqLvKiR_Z%A64BitDp0zfQijjciduLD;EIQyMWEd?1x7Xgi$>HOfk| z$7P<gbYDz?clvHQM0L~{(e#%Y-t3Ur{qM;@Q=N!A10NpT$itDs6Z@&9wSWe~o_MpY zi}r4C*S)(9+I*%HE@B3HfREduw4?elq8>}qcz0agM_b20&WE2=9q5Aj9sr#9Bduvl z-rUjM(6{d>$LA3fMQIQnbD^lY{s%EAgT-8F?LGdu4HHrj5cB~C#+42VfZM_HihQFq z!3%){ef$G(+y5QFgaHS*799WQC*c1*_J0ee|L-CH|D*C^C?_^Ij$WSlWr#h#L|gs3 KTCs|K=>GsL;=2U^ literal 0 HcmV?d00001 diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/KADMOS_VisualizationPack_Icon.png b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/KADMOS_VisualizationPack_Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ccdb4d4b1093ba56c9c7c98a3d0b53c8deb62d2e GIT binary patch literal 14199 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 literal 0 HcmV?d00001 diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/KADMOS_VisualizationPack_Logo.png b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/KADMOS_VisualizationPack_Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bcdcf3bcf354009f9218a0672f78de8eb0ee7cb4 GIT binary patch literal 87879 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 F{1;T8$1DH< literal 0 HcmV?d00001 diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/RWTH_Logo.png b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/RWTH_Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b285d62e0eb235a6f9878f4b2c06a729ea70310c GIT binary patch literal 52099 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%0DQ>PC& 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 SW6LP`XKG||sQ94k-~R`8^em|W literal 0 HcmV?d00001 diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/TUDelft_Logo.png b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/TUDelft_Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bbda3b1d0405be7505d74add6d306b0df8a50baf GIT binary patch literal 4545 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 literal 0 HcmV?d00001 diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/acknowledgements.html b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/acknowledgements.html new file mode 100644 index 000000000..e806856da --- /dev/null +++ b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/acknowledgements.html @@ -0,0 +1,54 @@ +<!DOCTYPE html> +<html lang="en"> +<head> +<meta charset="utf-8"> +<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"> +<meta name="format-detection" content="telephone=no"> +<meta name="apple-mobile-web-app-capable" content="yes"> +<meta name="apple-mobile-web-app-status-bar-style" content="default"> +<title>Acknowledgements</title> +<style type="text/css" media="screen"> +body { +color:#888; +margin:20px 10px; +font-family:Arial; +font-size:12px; +} +a:link {color:#666;} +a:visited {color:#666;} + +</style> +</head> +<body style="overflow-x:hidden; overflow-y:auto"> +<div style="-webkit-overflow-scrolling: touch; -webkit-text-size-adjust: none"> +<div> +Created by Benedikt Aigner and Imco van Gent for the +<a href="http://www.agile-project.eu/">AGILE Project</a> + in 2016. This project has received funding from the European Union's Horizon 2020 research and innovation framework programme under grant agreement No 636202 +<br> +<br> +<br> +The KADMOS Visualization Package was created using the following open source packages: +<br> +<br> +<a href="https://d3js.org/">D3.js</a> + package © 2015 by Mike Bostock released under the +<a href="https://opensource.org/licenses/BSD-3-Clause">BSD license</a> +<br> +<br> +<a href="https://github.com/OneraHub/XDSMjs">XDSM.js</a> +package © 2016 by Rémi Lafage released under the +<a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> +<br> +<br> +<a href="https://github.com/Neilos/bihisankey">BiHiSankey.js</a> +package © 2015 by Neil Atkinson released under the +<a href="https://opensource.org/licenses/MIT">MIT License</a> +<br> +<br> +<br> +<font size="-2">Rev. 05/11/2017</font> +</div> +</div> +</body> +</html> \ No newline at end of file diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/json/empty_file b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/json/empty_file new file mode 100644 index 000000000..dde26fae6 --- /dev/null +++ b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/json/empty_file @@ -0,0 +1 @@ +file added to ensure presence of json folder on the repository \ No newline at end of file diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/sankeyDiagram.html b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/sankeyDiagram.html new file mode 100644 index 000000000..bd30e9c7d --- /dev/null +++ b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/sankeyDiagram.html @@ -0,0 +1,230 @@ +<!doctype html> +<html> +<style> + +.node rect { + cursor: move; + shape-rendering: crispEdges; +} + +.node text { + pointer-events: none; + text-shadow: 1px 1px 2px #fff; + font-size: 0.8em; + font-family: sans-serif; +} + +#tooltip { + position: absolute; + pointer-events: none; + font-size: 0.7em; + font-family: sans-serif; + padding: 3px; + width: auto; + height: auto; + background-color: #F2F2F2; + -webkit-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.4); + -mox-box-shadow: 0px 0px 0px 5px rgba(0, 0, 0, 0.4); + box-shadow: 0px 0px 5px rbga(0, 0, 0, 0.4); + pointer-events: none; +} + +.value { + white-space: pre-line; + margin: 0; +} + + +div.treeDiv { +position: absolute; +} + +div.contextDiv { +position: absolute; +} + +sub, sup { +/* Specified in % so that the sup/sup is the right size relative to the surrounding text */ +font-size: 75%; +/* Zero out the line-height so that it doesn't interfere with the positioning that follows */ +line-height: 0; +/* Where the magic happens: makes all browsers position the sup/sup properly, relative to the surrounding text */ +position: relative; +/* Note that if you're using Eric Meyer's reset.css, this is already set and you can remove this rule */ +vertical-align: baseline; +} + +sup { +/* Move the superscripted text up */ +top: -0.5em; +} + +sub { +/* Move the subscripted text down, but only half as far down as the superscript moved up */ +bottom: -0.5em; +} + +/* Aigner: New styles for tree layout */ +.treeNode { +cursor: pointer; +} + +.overlay{ + background-color:#FFF; +} + +.treeNode circle { +fill: #fff; +stroke: #3399FF; +stroke-width: 1.5px; +} + +.treeNode text { +font-size:16px; +font-family:Arial; +} + +.treeLink { +fill: none; +stroke: #ccc; +stroke-width: 1.5px; +} + +.d3-context-menu { + position: absolute; + display: none; + background-color: #f2f2f2; + border-radius: 4px; + font-family: Arial; + font-size: 16pt; + width: 350px; + border: 1px solid #d4d4d4; + z-index:1200; +} +.d3-context-menu ul { + list-style-type: none; + margin: 4px 0px; + padding: 0px; + cursor: default; +} +.d3-context-menu ul li { + padding: 4px 16px; +} +.d3-context-menu ul li:hover { + background-color: #3399FF; +} +.d3-context-menu ul li > ul { + position: absolute; + background-color: #f2f2f2; + top: 0; + min-width: 350px; + left: 350px; + z-index: -1; +} + +.d3-context-menu ul li > ul li:hover +{ + background-color: #3399FF; + color: #fefefe; +} + +.ackn { +fill: #666666; +stroke: #666666; +stroke-width: 2.0; +} + +.acknGroup:hover .ackn{ +fill: #3399FF; +stroke: #3399FF; +} + +.newDiv { + position:relative; + top: -100px; + left: 220px; + background-color: none; +} +.newDiv a { + text-decoration: none; + color: white; + font-family: Arial; + font-size: 20pt; + padding-top: 12px; + padding-right: 12px; + padding-bottom: 12px; + padding-left: 6px; + display:inline-block; +} +.newDiv ul { + display: inline-block;; + margin: 0; + padding: 0; + background-color: #666666; +} +.newDiv ul li {display: inline-block;} +.newDiv ul li:hover {background: #888;} +.newDiv ul li:hover ul {display: block;} +.newDiv ul li ul { + position: absolute; + min-width: 200px; + display: none; +} +.newDiv ul li ul li { + background: #555; + display: block; +} +.newDiv ul li ul li a { + display:block !important +} +.newDiv ul li ul li:hover {background: #3399FF;} + +table { + width: 800px; + table-layout:fixed; +} + +table, th, td { + font-family: Arial; + font-size: 16pt; + background-color: white; + border: 2pt solid darkgrey; + border-collapse: collapse; + text-align: left; + word-wrap:break-word; +} +} +th, td { + padding-top: 6px; + padding-right: 20px; + padding-bottom: 6px; + padding-left: 20px; + min-width: 100px; + max-width: 400px; +} + +.remCircle { + stroke: black; + stroke-width: 2; + fill: red; + fill-opacity: .6 +} +.remMinus { + stroke: black; + stroke-width: 2; +} + +.acknText { +font-family: Arial; +font-size: 12pt; +fill: #666666; +} +</style> + <head> + <meta charset="utf-8"> + <title>KADMOS Sankey Diagram</title> + </head> + <body> + <script src="sankeyDiagram.js"></script> + </body> +</html> \ No newline at end of file diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/sankeyDiagram.js b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/sankeyDiagram.js new file mode 100644 index 000000000..624a910bc --- /dev/null +++ b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/sankeyDiagram.js @@ -0,0 +1,3528 @@ +(function() { +/*! jQuery v3.2.0 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.0",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c<b?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=Array.isArray(d)))?(e?(e=!1,f=c&&Array.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;f<g;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e);return!1}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}return!1}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;d<e;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,N,e),g(f,c,O,e)):(f++,j.call(a,g(f,c,N,e),g(f,c,O,e),g(f,c,N,c.notifyWith))):(d!==N&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S), +a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},U=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function V(){this.expando=r.expando+V.uid++}V.uid=1,V.prototype={cache:function(a){var b=a[this.expando];return b||(b={},U(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){Array.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(L)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var W=new V,X=new V,Y=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function $(a){return"true"===a||"false"!==a&&("null"===a?null:a===+a+""?+a:Y.test(a)?JSON.parse(a):a)}function _(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Z,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c=$(c)}catch(e){}X.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return X.hasData(a)||W.hasData(a)},data:function(a,b,c){return X.access(a,b,c)},removeData:function(a,b){X.remove(a,b)},_data:function(a,b,c){return W.access(a,b,c)},_removeData:function(a,b){W.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=X.get(f),1===f.nodeType&&!W.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),_(f,d,e[d])));W.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){X.set(this,a)}):T(this,function(b){var c;if(f&&void 0===b){if(c=X.get(f,a),void 0!==c)return c;if(c=_(f,a),void 0!==c)return c}else this.each(function(){X.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=W.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var aa=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ba=new RegExp("^(?:([+-])=|)("+aa+")([a-z%]*)$","i"),ca=["Top","Right","Bottom","Left"],da=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ea=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function fa(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&ba.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var ga={};function ha(a){var b,c=a.ownerDocument,d=a.nodeName,e=ga[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ga[d]=e,e)}function ia(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=W.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&da(d)&&(e[f]=ha(d))):"none"!==c&&(e[f]="none",W.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ia(this,!0)},hide:function(){return ia(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){da(this)?r(this).show():r(this).hide()})}});var ja=/^(?:checkbox|radio)$/i,ka=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c<d;c++)W.set(a[c],"globalEval",!b||W.get(b[c],"globalEval"))}var pa=/<|&#?\w+;/;function qa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(pa.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ka.exec(f)||["",""])[1].toLowerCase(),i=ma[h]||ma._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g,h=[],i=b.delegateCount,j=a.target;if(i&&j.nodeType&&!("click"===a.type&&a.button>=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c<i;c++)d=b[c],e=d.selector+" ",void 0===g[e]&&(g[e]=d.needsContext?r(e,this).index(j)>-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i<b.length&&h.push({elem:j,handlers:b.slice(i)}),h},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==xa()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===xa()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if(ja.test(this.type)&&this.click&&B(this,"input"))return this.click(),!1},_default:function(a){return B(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?va:wa,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:wa,isPropagationStopped:wa,isImmediatePropagationStopped:wa,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=va,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=va,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=va,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&sa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ta.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return ya(this,a,b,c,d)},one:function(a,b,c,d){return ya(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=wa),this.each(function(){r.event.remove(this,a,c,b)})}});var za=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/<script|<style|<link/i,Ba=/checked\s*(?:[^=]|=\s*.checked.)/i,Ca=/^true\/(.*)/,Da=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}X.hasData(a)&&(h=X.access(a),i=r.extend({},h),X.set(b,i))}}function Ia(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ja.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ja(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,na(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ga),l=0;l<i;l++)j=h[l],la.test(j.type||"")&&!W.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Da,""),k))}return a}function Ka(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(na(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&oa(na(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(za,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d<e;d++)Ia(f[d],g[d]);if(b)if(c)for(f=f||na(a),g=g||na(h),d=0,e=f.length;d<e;d++)Ha(f[d],g[d]);else Ha(a,h);return g=na(h,"script"),g.length>0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(na(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ja(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(na(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var La=/^margin/,Ma=new RegExp("^("+aa+")(?!px)[a-z%]+$","i"),Na=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",ra.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,ra.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Oa(a,b,c){var d,e,f,g,h=a.style;return c=c||Na(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ma.test(g)&&La.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function Pa(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Qa=/^(none|table(?!-c[ea]).+)/,Ra=/^--/,Sa={position:"absolute",visibility:"hidden",display:"block"},Ta={letterSpacing:"0",fontWeight:"400"},Ua=["Webkit","Moz","ms"],Va=d.createElement("div").style;function Wa(a){if(a in Va)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ua.length;while(c--)if(a=Ua[c]+b,a in Va)return a}function Xa(a){var b=r.cssProps[a];return b||(b=r.cssProps[a]=Wa(a)||a),b}function Ya(a,b,c){var d=ba.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Za(a,b,c,d,e){var f,g=0;for(f=c===(d?"border":"content")?4:"width"===b?1:0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+ca[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+ca[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+ca[f]+"Width",!0,e))):(g+=r.css(a,"padding"+ca[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+ca[f]+"Width",!0,e)));return g}function $a(a,b,c){var d,e=Na(a),f=Oa(a,b,e),g="border-box"===r.css(a,"boxSizing",!1,e);return Ma.test(f)?f:(d=g&&(o.boxSizingReliable()||f===a.style[b]),f=parseFloat(f)||0,f+Za(a,b,c||(g?"border":"content"),d,e)+"px")}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Oa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=Ra.test(b),j=a.style;return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:j[b]:(f=typeof c,"string"===f&&(e=ba.exec(c))&&e[1]&&(c=fa(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(j[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i?j.setProperty(b,c):j[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b),i=Ra.test(b);return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Oa(a,b,d)),"normal"===e&&b in Ta&&(e=Ta[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Qa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?$a(a,b,d):ea(a,Sa,function(){return $a(a,b,d)})},set:function(a,c,d){var e,f=d&&Na(a),g=d&&Za(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=ba.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ya(a,c,g)}}}),r.cssHooks.marginLeft=Pa(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Oa(a,"marginLeft"))||a.getBoundingClientRect().left-ea(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+ca[d]+b]=f[d]||f[d-2]||f[0];return e}},La.test(a)||(r.cssHooks[a+b].set=Ya)}),r.fn.extend({css:function(a,b){return T(this,function(a,b,c){var d,e,f={},g=0;if(Array.isArray(b)){for(d=Na(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&da(a),q=W.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],cb.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=W.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ia([a],!0),j=a.style.display||j,k=r.css(a,"display"),ia([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=W.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ia([a],!0),m.done(function(){p||ia([a]),W.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=hb(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],Array.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=kb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=ab||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;g<i;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),f<1&&i?c:(i||h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:ab||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;c<d;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);f<g;f++)if(d=kb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,hb,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j}r.Animation=r.extend(kb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return fa(c.elem,a,ba.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(L);for(var c,d=0,e=a.length;d<e;d++)c=a[d],kb.tweeners[c]=kb.tweeners[c]||[],kb.tweeners[c].unshift(b)},prefilters:[ib],prefilter:function(a,b){b?kb.prefilters.unshift(a):kb.prefilters.push(a)}}),r.speed=function(a,b,c){var d=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off?d.duration=0:"number"!=typeof d.duration&&(d.duration in r.fx.speeds?d.duration=r.fx.speeds[d.duration]:d.duration=r.fx.speeds._default),null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){r.isFunction(d.old)&&d.old.call(this),d.queue&&r.dequeue(this,d.queue)},d},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(da).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=kb(this,r.extend({},a),f);(e||W.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=r.timers,g=W.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&db.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=W.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;b<g;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),r.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(ab=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),ab=void 0},r.fx.timer=function(a){r.timers.push(a),r.fx.start()},r.fx.interval=13,r.fx.start=function(){bb||(bb=!0,eb())},r.fx.stop=function(){bb=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var lb,mb=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return T(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d)); +},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d<i;d++)if(c=e[d],(c.selected||d===f)&&!c.disabled&&(!c.parentNode.disabled||!B(c.parentNode,"optgroup"))){if(b=r(c).val(),g)return b;h.push(b)}return h},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Tb=[],Ub=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Tb.pop()||r.expando+"_"+ub++;return this[a]=!0,a}}),r.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Ub.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ub.test(b.data)&&"data");if(h||"jsonp"===b.dataTypes[0])return e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Ub,"$1"+e):b.jsonp!==!1&&(b.url+=(vb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||r.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Tb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),"script"}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=C.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=qa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=pb(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&r.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?r("<div>").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length},r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),b=f.ownerDocument,c=b.documentElement,e=b.defaultView,{top:d.top+e.pageYOffset-c.clientTop,left:d.left+e.pageXOffset-c.clientLeft}):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),B(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||ra})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return T(this,function(a,d,e){var f;return r.isWindow(a)?f=a:9===a.nodeType&&(f=a.defaultView),void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Pa(o.pixelPosition,function(a,c){if(c)return c=Oa(a,b),Ma.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return T(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)},holdReady:function(a){a?r.readyWait++:r.ready(!0)}}),r.isArray=Array.isArray,r.parseJSON=JSON.parse,r.nodeName=B,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var Vb=a.jQuery,Wb=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Wb),b&&a.jQuery===r&&(a.jQuery=Vb),r},b||(a.jQuery=a.$=r),r}); + +function createShiftArr(step) { + + var space = ' '; + + if ( isNaN(parseInt(step)) ) { // argument is string + space = step; + } else { // argument is integer + switch(step) { + case 1: space = ' '; break; + case 2: space = ' '; break; + case 3: space = ' '; break; + case 4: space = ' '; break; + case 5: space = ' '; break; + case 6: space = ' '; break; + case 7: space = ' '; break; + case 8: space = ' '; break; + case 9: space = ' '; break; + case 10: space = ' '; break; + case 11: space = ' '; break; + case 12: space = ' '; break; + } + } + + var shift = ['\n']; // array of shifts + for(ix=0;ix<100;ix++){ + shift.push(shift[ix]+space); + } + return shift; +} + +function vkbeautify(){ + this.step = ' '; // 4 spaces + this.shift = createShiftArr(this.step); +}; + +vkbeautify.prototype.xml = function(text,step) { + + var ar = text.replace(/>\s{0,}</g,"><") + .replace(/</g,"~::~<") + .replace(/\s*xmlns\:/g,"~::~xmlns:") + .replace(/\s*xmlns\=/g,"~::~xmlns=") + .split('~::~'), + len = ar.length, + inComment = false, + deep = 0, + str = '', + ix = 0, + shift = step ? createShiftArr(step) : this.shift; + + for(ix=0;ix<len;ix++) { + // start comment or <![CDATA[...]]> or <!DOCTYPE // + if(ar[ix].search(/<!/) > -1) { + str += shift[deep]+ar[ix]; + inComment = true; + // end comment or <![CDATA[...]]> // + if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1 || ar[ix].search(/!DOCTYPE/) > -1 ) { + inComment = false; + } + } else + // end comment or <![CDATA[...]]> // + if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1) { + str += ar[ix]; + inComment = false; + } else + // <elm></elm> // + if( /^<\w/.exec(ar[ix-1]) && /^<\/\w/.exec(ar[ix]) && + /^<[\w:\-\.\,]+/.exec(ar[ix-1]) == /^<\/[\w:\-\.\,]+/.exec(ar[ix])[0].replace('/','')) { + str += ar[ix]; + if(!inComment) deep--; + } else + // <elm> // + if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) == -1 && ar[ix].search(/\/>/) == -1 ) { + str = !inComment ? str += shift[deep++]+ar[ix] : str += ar[ix]; + } else + // <elm>...</elm> // + if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) > -1) { + str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix]; + } else + // </elm> // + if(ar[ix].search(/<\//) > -1) { + str = !inComment ? str += shift[--deep]+ar[ix] : str += ar[ix]; + } else + // <elm/> // + if(ar[ix].search(/\/>/) > -1 ) { + str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix]; + } else + // <? xml ... ?> // + if(ar[ix].search(/<\?/) > -1) { + str += shift[deep]+ar[ix]; + } else + // xmlns // + if( ar[ix].search(/xmlns\:/) > -1 || ar[ix].search(/xmlns\=/) > -1) { + str += shift[deep]+ar[ix]; + } + + else { + str += ar[ix]; + } + } + + return (str[0] == '\n') ? str.slice(1) : str; +} + +vkbeautify.prototype.json = function(text,step) { + + var step = step ? step : this.step; + + if (typeof JSON === 'undefined' ) return text; + + if ( typeof text === "string" ) return JSON.stringify(JSON.parse(text), null, step); + if ( typeof text === "object" ) return JSON.stringify(text, null, step); + + return text; // text is not string nor object +} + +vkbeautify.prototype.css = function(text, step) { + + var ar = text.replace(/\s{1,}/g,' ') + .replace(/\{/g,"{~::~") + .replace(/\}/g,"~::~}~::~") + .replace(/\;/g,";~::~") + .replace(/\/\*/g,"~::~/*") + .replace(/\*\//g,"*/~::~") + .replace(/~::~\s{0,}~::~/g,"~::~") + .split('~::~'), + len = ar.length, + deep = 0, + str = '', + ix = 0, + shift = step ? createShiftArr(step) : this.shift; + + for(ix=0;ix<len;ix++) { + + if( /\{/.exec(ar[ix])) { + str += shift[deep++]+ar[ix]; + } else + if( /\}/.exec(ar[ix])) { + str += shift[--deep]+ar[ix]; + } else + if( /\*\\/.exec(ar[ix])) { + str += shift[deep]+ar[ix]; + } + else { + str += shift[deep]+ar[ix]; + } + } + return str.replace(/^\n{1,}/,''); +} + +//---------------------------------------------------------------------------- + +function isSubquery(str, parenthesisLevel) { + return parenthesisLevel - (str.replace(/\(/g,'').length - str.replace(/\)/g,'').length ) +} + +function split_sql(str, tab) { + + return str.replace(/\s{1,}/g," ") + + .replace(/ AND /ig,"~::~"+tab+tab+"AND ") + .replace(/ BETWEEN /ig,"~::~"+tab+"BETWEEN ") + .replace(/ CASE /ig,"~::~"+tab+"CASE ") + .replace(/ ELSE /ig,"~::~"+tab+"ELSE ") + .replace(/ END /ig,"~::~"+tab+"END ") + .replace(/ FROM /ig,"~::~FROM ") + .replace(/ GROUP\s{1,}BY/ig,"~::~GROUP BY ") + .replace(/ HAVING /ig,"~::~HAVING ") + //.replace(/ SET /ig," SET~::~") + .replace(/ IN /ig," IN ") + + .replace(/ JOIN /ig,"~::~JOIN ") + .replace(/ CROSS~::~{1,}JOIN /ig,"~::~CROSS JOIN ") + .replace(/ INNER~::~{1,}JOIN /ig,"~::~INNER JOIN ") + .replace(/ LEFT~::~{1,}JOIN /ig,"~::~LEFT JOIN ") + .replace(/ RIGHT~::~{1,}JOIN /ig,"~::~RIGHT JOIN ") + + .replace(/ ON /ig,"~::~"+tab+"ON ") + .replace(/ OR /ig,"~::~"+tab+tab+"OR ") + .replace(/ ORDER\s{1,}BY/ig,"~::~ORDER BY ") + .replace(/ OVER /ig,"~::~"+tab+"OVER ") + + .replace(/\(\s{0,}SELECT /ig,"~::~(SELECT ") + .replace(/\)\s{0,}SELECT /ig,")~::~SELECT ") + + .replace(/ THEN /ig," THEN~::~"+tab+"") + .replace(/ UNION /ig,"~::~UNION~::~") + .replace(/ USING /ig,"~::~USING ") + .replace(/ WHEN /ig,"~::~"+tab+"WHEN ") + .replace(/ WHERE /ig,"~::~WHERE ") + .replace(/ WITH /ig,"~::~WITH ") + + //.replace(/\,\s{0,}\(/ig,",~::~( ") + //.replace(/\,/ig,",~::~"+tab+tab+"") + + .replace(/ ALL /ig," ALL ") + .replace(/ AS /ig," AS ") + .replace(/ ASC /ig," ASC ") + .replace(/ DESC /ig," DESC ") + .replace(/ DISTINCT /ig," DISTINCT ") + .replace(/ EXISTS /ig," EXISTS ") + .replace(/ NOT /ig," NOT ") + .replace(/ NULL /ig," NULL ") + .replace(/ LIKE /ig," LIKE ") + .replace(/\s{0,}SELECT /ig,"SELECT ") + .replace(/\s{0,}UPDATE /ig,"UPDATE ") + .replace(/ SET /ig," SET ") + + .replace(/~::~{1,}/g,"~::~") + .split('~::~'); +} + +vkbeautify.prototype.sql = function(text,step) { + + var ar_by_quote = text.replace(/\s{1,}/g," ") + .replace(/\'/ig,"~::~\'") + .split('~::~'), + len = ar_by_quote.length, + ar = [], + deep = 0, + tab = this.step,//+this.step, + inComment = true, + inQuote = false, + parenthesisLevel = 0, + str = '', + ix = 0, + shift = step ? createShiftArr(step) : this.shift;; + + for(ix=0;ix<len;ix++) { + if(ix%2) { + ar = ar.concat(ar_by_quote[ix]); + } else { + ar = ar.concat(split_sql(ar_by_quote[ix], tab) ); + } + } + + len = ar.length; + for(ix=0;ix<len;ix++) { + + parenthesisLevel = isSubquery(ar[ix], parenthesisLevel); + + if( /\s{0,}\s{0,}SELECT\s{0,}/.exec(ar[ix])) { + ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"") + } + + if( /\s{0,}\s{0,}SET\s{0,}/.exec(ar[ix])) { + ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"") + } + + if( /\s{0,}\(\s{0,}SELECT\s{0,}/.exec(ar[ix])) { + deep++; + str += shift[deep]+ar[ix]; + } else + if( /\'/.exec(ar[ix]) ) { + if(parenthesisLevel<1 && deep) { + deep--; + } + str += ar[ix]; + } + else { + str += shift[deep]+ar[ix]; + if(parenthesisLevel<1 && deep) { + deep--; + } + } + var junk = 0; + } + + str = str.replace(/^\n{1,}/,'').replace(/\n{1,}/g,"\n"); + return str; +} + + +vkbeautify.prototype.xmlmin = function(text, preserveComments) { + + var str = preserveComments ? text + : text.replace(/\<![ \r\n\t]*(--([^\-]|[\r\n]|-[^\-])*--[ \r\n\t]*)\>/g,"") + .replace(/[ \r\n\t]{1,}xmlns/g, ' xmlns'); + return str.replace(/>\s{0,}</g,"><"); +} + +vkbeautify.prototype.jsonmin = function(text) { + + if (typeof JSON === 'undefined' ) return text; + + return JSON.stringify(JSON.parse(text), null, 0); + +} + +vkbeautify.prototype.cssmin = function(text, preserveComments) { + + var str = preserveComments ? text + : text.replace(/\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\//g,"") ; + + return str.replace(/\s{1,}/g,' ') + .replace(/\{\s{1,}/g,"{") + .replace(/\}\s{1,}/g,"}") + .replace(/\;\s{1,}/g,";") + .replace(/\/\*\s{1,}/g,"/*") + .replace(/\*\/\s{1,}/g,"*/"); +} + +vkbeautify.prototype.sqlmin = function(text) { + return text.replace(/\s{1,}/g," ").replace(/\s{1,}\(/,"(").replace(/\s{1,}\)/,")"); +} + +window.vkbeautify = new vkbeautify(); + +})(); + + +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ +!function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===bo||n[0]===_o?_o+n:n}function s(n){return(n+="")[0]===_o?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=wo.length;r>e;++e){var i=wo[e]+t;if(i in n)return i}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,i=-1,u=r.length;++i<u;)(t=r[i].on)&&t.apply(this,arguments);return n}var e=[],r=new c;return t.on=function(t,i){var u,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,u=e.indexOf(o)).concat(e.slice(u+1)),r.remove(t)),i&&e.push(r.set(t,{on:i})),n)},t}function S(){ao.event.preventDefault()}function k(){for(var n,t=ao.event;n=t.sourceEvent;)t=n;return t}function N(n){for(var t=new _,e=0,r=arguments.length;++e<r;)t[arguments[e]]=w(t);return t.of=function(e,r){return function(i){try{var u=i.sourceEvent=ao.event;i.target=n,ao.event=i,t[i.type].apply(e,r)}finally{ao.event=u}}},t}function E(n){return ko(n,Co),n}function A(n){return"function"==typeof n?n:function(){return No(n,this)}}function C(n){return"function"==typeof n?n:function(){return Eo(n,this)}}function z(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function i(){this.setAttribute(n,t)}function u(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=ao.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?u:i}function L(n){return n.trim().replace(/\s+/g," ")}function q(n){return new RegExp("(?:^|\\s+)"+ao.requote(n)+"(?:\\s+|$)","g")}function T(n){return(n+"").trim().split(/^|\s+/)}function R(n,t){function e(){for(var e=-1;++e<i;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<i;)n[e](this,r)}n=T(n).map(D);var i=n.length;return"function"==typeof t?r:e}function D(n){var t=q(n);return function(e,r){if(i=e.classList)return r?i.add(n):i.remove(n);var i=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(i)||e.setAttribute("class",L(i+" "+n))):e.setAttribute("class",L(i.replace(t," ")))}}function P(n,t,e){function r(){this.style.removeProperty(n)}function i(){this.style.setProperty(n,t,e)}function u(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?u:i}function U(n,t){function e(){delete this[n]}function r(){this[n]=t}function i(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?i:r}function j(n){function t(){var t=this.ownerDocument,e=this.namespaceURI;return e===zo&&t.documentElement.namespaceURI===zo?t.createElement(n):t.createElementNS(e,n)}function e(){return this.ownerDocument.createElementNS(n.space,n.local)}return"function"==typeof n?n:(n=ao.ns.qualify(n)).local?e:t}function F(){var n=this.parentNode;n&&n.removeChild(this)}function H(n){return{__data__:n}}function O(n){return function(){return Ao(this,n)}}function I(n){return arguments.length||(n=e),function(t,e){return t&&e?n(t.__data__,e.__data__):!t-!e}}function Y(n,t){for(var e=0,r=n.length;r>e;e++)for(var i,u=n[e],o=0,a=u.length;a>o;o++)(i=u[o])&&t(i,o,e);return n}function Z(n){return ko(n,qo),n}function V(n){var t,e;return function(r,i,u){var o,a=n[u].update,l=a.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(o=a[t])&&++t<l;);return o}}function X(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function i(){var i=l(t,co(arguments));r.call(this),this.addEventListener(n,this[o]=i,i.$=e),i._=t}function u(){var t,e=new RegExp("^__on([^.]+)"+ao.requote(n)+"$");for(var r in this)if(t=r.match(e)){var i=this[r];this.removeEventListener(t[1],i,i.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),l=$;a>0&&(n=n.slice(0,a));var c=To.get(n);return c&&(n=c,l=B),a?t?i:r:t?b:u}function $(n,t){return function(e){var r=ao.event;ao.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ao.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Do,i="click"+r,u=ao.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ro&&(Ro="onselectstart"in e?!1:x(e.style,"userSelect")),Ro){var o=n(e).style,a=o[Ro];o[Ro]="none"}return function(n){if(u.on(r,null),Ro&&(o[Ro]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(0>Po){var u=t(n);if(u.scrollX||u.scrollY){r=ao.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Po=!(o.f||o.e),r.remove()}}return Po?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ao.event.changedTouches[0].identifier}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:-1>n?Fo:Math.acos(n)}function tn(n){return n>1?Io:-1>n?-Io:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):_n(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(o-u)*n/60:180>n?o:240>n?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=ao.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Yo)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=vn(i)*na,r=vn(r)*ta,u=vn(u)*ea,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Zo,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function vn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function dn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):_n(""+n,mn,cn):new mn(n,t,e)}function Mn(n){return new mn(n>>16,n>>8&255,255&n)}function xn(n){return Mn(n)+""}function bn(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _n(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=ua.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o=o>>4|o,a=240&u,a=a>>4|a,l=15&u,l=l<<4|l):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=.5>l?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=NaN,i=l>0&&1>l?0:r),new ln(r,i,l)}function Sn(n,t,e){n=kn(n),t=kn(t),e=kn(e);var r=dn((.4124564*n+.3575761*t+.1804375*e)/na),i=dn((.2126729*n+.7151522*t+.072175*e)/ta),u=dn((.0193339*n+.119192*t+.9503041*e)/ea);return hn(116*i-16,500*(r-i),200*(i-u))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&300>t||304===t){try{n=e.call(u,l)}catch(r){return void o.error.call(u,r)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=ao.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=ao.event;ao.event=n;try{o.progress.call(u,l)}finally{ao.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(co(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},ao.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var i=e+t,u={c:n,t:i,n:null};return aa?aa.n=u:oa=u,aa=u,la||(ca=clearTimeout(ca),la=1,fa(Tn)),u}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(ca),ca=setTimeout(Tn,t)),la=0):(la=1,fa(Tn))}function Rn(){for(var n=Date.now(),t=oa;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=oa,e=1/0;t;)t.c?(t.t<e&&(e=t.t),t=(n=t).n):t=n?n.n=t.n:oa=t.n;return aa=n,e}function Pn(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Un(n,t){var e=Math.pow(10,3*xo(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function jn(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ha.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,v="",d="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,d="%",p="f";break;case"p":g=100,d="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(v="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(v=i[0],d=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=pa.get(p)||Fn;var M=c&&s;return function(n){var e=d;if(y&&n%1)return"";var i=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>g){var l=ao.formatPrefix(n,h);n=l.scale(n),e=l.symbol+d}else n*=g;n=p(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=m?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!c&&s&&(x=u(x,1/0));var S=v.length+x.length+b.length+(M?0:i.length),k=f>S?new Array(S=f-S+1).join(r):"";return M&&(x=u(k+x,k.length?f-b.length:1/0)),i+=v,n=x+b,("<"===o?i+n+k:">"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(M?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new va(e-1)),1),e}function u(n,e){return t(n=new va(+n),e),n}function o(n,r,u){var o=i(n),a=[];if(u>1)for(;r>o;)e(o)%u||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{va=Hn;var r=new Hn;return r._=n,o(r,t,e)}finally{va=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=o;var l=n.utc=In(n);return l.floor=l,l.round=In(r),l.ceil=In(i),l.offset=In(u),l.range=a,n}function In(n){return function(t,e){try{va=Hn;var r=new Hn;return r._=t,n(r,e)._}finally{va=Date}}}function Yn(n){function t(n){function t(t){for(var e,i,u,o=[],a=-1,l=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.slice(l,a)),null!=(i=ya[e=n.charAt(++a)])&&(e=n.charAt(++a)),(u=A[e])&&(e=u(t,null==i?"e"===e?" ":"0":i)),o.push(e),l=a+1);return o.push(n.slice(l,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},i=e(r,n,t,0);if(i!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var u=null!=r.Z&&va!==Hn,o=new(u?Hn:va);return"j"in r?o.setFullYear(r.y,0,r.j):"W"in r||"U"in r?("w"in r||(r.w="W"in r?1:0),o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+(r.Z/100|0),r.M+r.Z%100,r.S,r.L),u?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var i,u,o,a=0,l=t.length,c=e.length;l>a;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(o=t.charAt(a++),u=C[o in ya?t.charAt(a++):o],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,v=n.days,d=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{va=Hn;var t=new va;return t._=n,r(t)}finally{va=Date}}var r=t(n);return e.parse=function(n){try{va=Hn;var t=r.parse(n);return t&&t._}finally{va=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var M=ao.map(),x=Vn(v),b=Xn(v),_=Vn(d),w=Xn(d),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){M.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ga.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ga.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ga.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=0>n?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Vn(n){return new RegExp("^(?:"+n.map(ao.requote).join("|")+")","i")}function Xn(n){for(var t=new c,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function $n(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Bn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.U=+r[0],e+r[0].length):-1}function Wn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.W=+r[0],e+r[0].length):-1}function Jn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Gn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.y=Qn(+r[0]),e+r[0].length):-1}function Kn(n,t,e){return/^[+-]\d{4}$/.test(t=t.slice(e,e+5))?(n.Z=-t,e+5):-1}function Qn(n){return n+(n>68?1900:2e3)}function nt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=xo(t)/60|0,i=xo(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){Ma.lastIndex=0;var r=Ma.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ft(){}function st(n,t,e){var r=e.s=n+t,i=r-n,u=r-i;e.t=n-u+(t-i)}function ht(n,t){n&&wa.hasOwnProperty(n.type)&&wa[n.type](n,t)}function pt(n,t,e){var r,i=-1,u=n.length-e;for(t.lineStart();++i<u;)r=n[i],t.point(r[0],r[1],r[2]);t.lineEnd()}function gt(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)pt(n[e],t,1);t.polygonEnd()}function vt(){function n(n,t){n*=Yo,t=t*Yo/2+Fo/4;var e=n-r,o=e>=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);ka.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;Na.point=function(o,a){Na.point=n,r=(t=o)*Yo,i=Math.cos(a=(e=a)*Yo/2+Fo/4),u=Math.sin(a)},Na.lineEnd=function(){n(t,e)}}function dt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function bt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function _t(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return xo(n[0]-t[0])<Uo&&xo(n[1]-t[1])<Uo}function St(n,t){n*=Yo;var e=Math.cos(t*=Yo);kt(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function kt(n,t,e){++Ea,Ca+=(n-Ca)/Ea,za+=(t-za)/Ea,La+=(e-La)/Ea}function Nt(){function n(n,i){n*=Yo;var u=Math.cos(i*=Yo),o=u*Math.cos(n),a=u*Math.sin(n),l=Math.sin(i),c=Math.atan2(Math.sqrt((c=e*l-r*a)*c+(c=r*o-t*l)*c+(c=t*a-e*o)*c),t*o+e*a+r*l);Aa+=c,qa+=c*(t+(t=o)),Ta+=c*(e+(e=a)),Ra+=c*(r+(r=l)),kt(t,e,r)}var t,e,r;ja.point=function(i,u){i*=Yo;var o=Math.cos(u*=Yo);t=o*Math.cos(i),e=o*Math.sin(i),r=Math.sin(u),ja.point=n,kt(t,e,r)}}function Et(){ja.point=St}function At(){function n(n,t){n*=Yo;var e=Math.cos(t*=Yo),o=e*Math.cos(n),a=e*Math.sin(n),l=Math.sin(t),c=i*l-u*a,f=u*o-r*l,s=r*a-i*o,h=Math.sqrt(c*c+f*f+s*s),p=r*o+i*a+u*l,g=h&&-nn(p)/h,v=Math.atan2(h,p);Da+=g*c,Pa+=g*f,Ua+=g*s,Aa+=v,qa+=v*(r+(r=o)),Ta+=v*(i+(i=a)),Ra+=v*(u+(u=l)),kt(r,i,u)}var t,e,r,i,u;ja.point=function(o,a){t=o,e=a,ja.point=n,o*=Yo;var l=Math.cos(a*=Yo);r=l*Math.cos(o),i=l*Math.sin(o),u=Math.sin(a),kt(r,i,u)},ja.lineEnd=function(){n(t,e),ja.lineEnd=Et,ja.point=St}}function Ct(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function zt(){return!0}function Lt(n,t,e,r,i){var u=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(wt(e,r)){i.lineStart();for(var a=0;t>a;++a)i.point((e=n[a])[0],e[1]);return void i.lineEnd()}var l=new Tt(e,n,null,!0),c=new Tt(e,null,l,!1);l.o=c,u.push(l),o.push(c),l=new Tt(r,n,null,!1),c=new Tt(r,null,l,!0),l.o=c,u.push(l),o.push(c)}}),o.sort(t),qt(u),qt(o),u.length){for(var a=0,l=e,c=o.length;c>a;++a)o[a].e=l=!l;for(var f,s,h=u[0];;){for(var p=h,g=!0;p.v;)if((p=p.n)===h)return;f=p.z,i.lineStart();do{if(p.v=p.o.v=!0,p.e){if(g)for(var a=0,c=f.length;c>a;++a)i.point((s=f[a])[0],s[1]);else r(p.x,p.n.x,1,i);p=p.n}else{if(g){f=p.p.z;for(var a=f.length-1;a>=0;--a)i.point((s=f[a])[0],s[1])}else r(p.x,p.p.x,-1,i);p=p.p}p=p.o,f=p.z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r<t;)i.n=e=n[r],e.p=i,i=e;i.n=e=n[0],e.p=i}}function Tt(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Rt(n,t,e,r){return function(i,u){function o(t,e){var r=i(t,e);n(t=r[0],e=r[1])&&u.point(t,e)}function a(n,t){var e=i(n,t);d.point(e[0],e[1])}function l(){m.point=a,d.lineStart()}function c(){m.point=o,d.lineEnd()}function f(n,t){v.push([n,t]);var e=i(n,t);x.point(e[0],e[1])}function s(){x.lineStart(),v=[]}function h(){f(v[0][0],v[0][1]),x.lineEnd();var n,t=x.clean(),e=M.buffer(),r=e.length;if(v.pop(),g.push(v),v=null,r)if(1&t){n=e[0];var i,r=n.length-1,o=-1;if(r>0){for(b||(u.polygonStart(),b=!0),u.lineStart();++o<r;)u.point((i=n[o])[0],i[1]);u.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,v,d=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=ao.merge(p);var n=Ot(y,g);p.length?(b||(u.polygonStart(),b=!0),Lt(p,Ut,n,e,u)):n&&(b||(u.polygonStart(),b=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),b&&(u.polygonEnd(),b=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},M=Pt(),x=t(M),b=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ut(n,t){return((n=n.x)[0]<0?n[1]-Io-Uo:Io-n[1])-((t=t.x)[0]<0?t[1]-Io-Uo:Io-t[1])}function jt(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Fo:-Fo,l=xo(u-e);xo(l-Fo)<Uo?(n.point(e,r=(r+o)/2>0?Io:-Io),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Fo&&(xo(e-i)<Uo&&(e-=i*Uo),xo(u-a)<Uo&&(u-=a*Uo),r=Ft(e,r,u,o),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=u,r=o),i=a},lineEnd:function(){n.lineEnd(),e=r=NaN},clean:function(){return 2-t}}}function Ft(n,t,e,r){var i,u,o=Math.sin(n-e);return xo(o)>Uo?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Io,r.point(-Fo,i),r.point(0,i),r.point(Fo,i),r.point(Fo,0),r.point(Fo,-i),r.point(0,-i),r.point(-Fo,-i),r.point(-Fo,0),r.point(-Fo,i);else if(xo(n[0]-t[0])>Uo){var u=n[0]<t[0]?Fo:-Fo;i=e*u/2,r.point(-u,i),r.point(0,i),r.point(u,i)}else r.point(t[0],t[1])}function Ot(n,t){var e=n[0],r=n[1],i=[Math.sin(e),-Math.cos(e),0],u=0,o=0;ka.reset();for(var a=0,l=t.length;l>a;++a){var c=t[a],f=c.length;if(f)for(var s=c[0],h=s[0],p=s[1]/2+Fo/4,g=Math.sin(p),v=Math.cos(p),d=1;;){d===f&&(d=0),n=c[d];var y=n[0],m=n[1]/2+Fo/4,M=Math.sin(m),x=Math.cos(m),b=y-h,_=b>=0?1:-1,w=_*b,S=w>Fo,k=g*M;if(ka.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),u+=S?b+_*Ho:b,S^h>=e^y>=e){var N=mt(dt(s),dt(n));bt(N);var E=mt(i,N);bt(E);var A=(S^b>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=y,g=M,v=x,s=n}}return(-Uo>u||Uo>u&&-Uo>ka)^1&o}function It(n){function t(n,t){return Math.cos(n)*Math.cos(t)>u}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],v=t(s,h),d=o?v?0:i(s,h):v?i(s+(0>s?Fo:-Fo),h):0;if(!e&&(c=l=v)&&n.lineStart(),v!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Uo,g[1]+=Uo,v=t(g[0],g[1]))),v!==l)f=0,v?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^v){var y;d&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!v||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=v,u=d},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=dt(n),i=dt(t),o=[1,0,0],a=mt(r,i),l=yt(a,a),c=a[0],f=l-c*c;if(!f)return!e&&n;var s=u*l/f,h=-u*c/f,p=mt(o,a),g=xt(o,s),v=xt(a,h);Mt(g,v);var d=p,y=yt(g,d),m=yt(d,d),M=y*y-m*(yt(g,g)-1);if(!(0>M)){var x=Math.sqrt(M),b=xt(d,(-y-x)/m);if(Mt(b,g),b=_t(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],N=t[1];w>S&&(_=w,w=S,S=_);var E=S-w,A=xo(E-Fo)<Uo,C=A||Uo>E;if(!A&&k>N&&(_=k,k=N,N=_),C?A?k+N>0^b[1]<(xo(b[0]-w)<Uo?k:N):k<=b[1]&&b[1]<=N:E>Fo^(w<=b[0]&&b[0]<=S)){var z=xt(d,(-y+x)/m);return Mt(z,g),[b,_t(z)]}}}function i(t,e){var r=o?n:Fo-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=xo(u)>Uo,l=ve(n,6*Yo);return Rt(t,e,l,o?[0,-n]:[-Fo,n-Fo])}function Yt(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=a.x,s=a.y,h=0,p=1,g=f-l,v=s-c;if(u=n-l,g||!(u>0)){if(u/=g,0>g){if(h>u)return;p>u&&(p=u)}else if(g>0){if(u>p)return;u>h&&(h=u)}if(u=e-l,g||!(0>u)){if(u/=g,0>g){if(u>p)return;u>h&&(h=u)}else if(g>0){if(h>u)return;p>u&&(p=u)}if(u=t-c,v||!(u>0)){if(u/=v,0>v){if(h>u)return;p>u&&(p=u)}else if(v>0){if(u>p)return;u>h&&(h=u)}if(u=r-c,v||!(0>u)){if(u/=v,0>v){if(u>p)return;u>h&&(h=u)}else if(v>0){if(h>u)return;p>u&&(p=u)}return h>0&&(i.a={x:l+h*g,y:c+h*v}),1>p&&(i.b={x:l+p*g,y:c+p*v}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return xo(r[0]-n)<Uo?i>0?0:3:xo(r[0]-e)<Uo?i>0?2:1:xo(r[1]-t)<Uo?i>0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=d.length,r=n[1],i=0;e>i;++i)for(var u,o=1,a=d[i],l=a.length,c=a[0];l>o;++o)u=a[o],c[1]<=r?u[1]>r&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0){do c.point(0===f||3===f?n:e,f>1?r:t);while((f=(f+l+4)%4)!==s)}else c.point(a[0],a[1])}function f(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,d&&d.push(y=[]),S=!0,w=!1,b=_=NaN}function p(){v&&(g(m,M),x&&w&&E.rejoin(),v.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){n=Math.max(-Ha,Math.min(Ha,n)),t=Math.max(-Ha,Math.min(Ha,t));var e=f(n,t);if(d&&y.push([n,t]),S)m=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,y,m,M,x,b,_,w,S,k,N=a,E=Pt(),A=Yt(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,v=[],d=[],k=!0},polygonEnd:function(){a=N,v=ao.merge(v);var t=l([n,r]),e=k&&t,i=v.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(v,u,t,c,a),a.polygonEnd()),v=d=y=null}};return C}}function Vt(n){var t=0,e=Fo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Fo/180,e=n[1]*Fo/180):[t/Fo*180,e/Fo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){Ia+=i*n-r*t,r=n,i=t}var t,e,r,i;$a.point=function(u,o){$a.point=n,t=r=u,e=i=o},$a.lineEnd=function(){n(t,e)}}function Bt(n,t){Ya>n&&(Ya=n),n>Va&&(Va=n),Za>t&&(Za=t),t>Xa&&(Xa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){Ca+=n,za+=t,++La}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);qa+=o*(t+n)/2,Ta+=o*(e+r)/2,Ra+=o,Gt(t=n,e=r)}var t,e;Wa.point=function(r,i){Wa.point=n,Gt(t=r,e=i)}}function Qt(){Wa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);qa+=o*(r+n)/2,Ta+=o*(i+t)/2,Ra+=o,o=i*n-r*t,Da+=o*(r+n),Pa+=o*(i+t),Ua+=3*o,Gt(r=n,i=t)}var t,e,r,i;Wa.point=function(u,o){Wa.point=n,Gt(t=r=u,e=i=o)},Wa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Ho)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=NaN,S.point=u,t.lineStart()}function u(e,r){var u=dt([e,r]),o=n(e,r);i(M,x,m,b,_,w,M=o[0],x=o[1],m=e,b=u[0],_=u[1],w=u[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function l(){ +r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=M,g=x,v=b,d=_,y=w,S.point=u}function f(){i(M,x,m,b,_,w,p,g,s,v,d,y,a,t),S.lineEnd=o,o()}var s,h,p,g,v,d,y,m,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,v,d,y){var m=f-t,M=s-e,x=m*m+M*M;if(x>4*u&&d--){var b=a+p,_=l+g,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=xo(xo(w)-1)<Uo||xo(r-h)<Uo?(r+h)/2:Math.atan2(_,b),E=n(N,k),A=E[0],C=E[1],z=A-t,L=C-e,q=M*z-m*L;(q*q/x>u||xo((m*z+M*L)/x-.5)>.3||o>a*p+l*g+c*v)&&(i(t,e,r,a,l,c,A,C,N,b/=S,_/=S,w,d,y),y.point(A,C),i(A,C,N,b,_,w,f,s,h,p,g,v,d,y))}}var u=.5,o=Math.cos(30*Yo),a=16;return t.precision=function(n){return arguments.length?(a=(u=n*n)>0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Zo,e*Zo])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Yo,n[1]*Yo),[n[0]*h+l,c-n[1]*h]}function e(n){return n=a.invert((n[0]-l)/h,(c-n[1])/h),n&&[n[0]*Zo,n[1]*Zo]}function r(){a=Ct(o=se(y,M,x),u);var n=u(v,d);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,v=0,d=0,y=0,M=0,x=0,b=Fa,_=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(b(o,s(_(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Fa):It((w=+n)*Yo),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(v=n[0]%360*Yo,d=n[1]%360*Yo,r()):[v*Zo,d*Zo]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Yo,M=n[1]%360*Yo,x=n.length>2?n[2]%360*Yo:0,r()):[y*Zo,M*Zo,x*Zo]},ao.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Yo,e*Yo)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Fo?n-Ho:-Fo>n?n+Ho:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Fo?t-Ho:-Fo>t?t+Ho:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function ve(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=de(e,i),u=de(e,u),(o>0?u>i:i>u)&&(i+=o*Ho)):(i=n+o*Ho,u=n-.5*l);for(var c,f=i;o>0?f>u:u>f;f-=l)a.point((c=_t([e,-r*Math.cos(f),-r*Math.sin(f)]))[0],c[1])}}function de(n,t){var e=dt(t);e[0]-=n,bt(e);var r=nn(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Uo)%(2*Math.PI)}function ye(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function me(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function Me(n){return n.source}function xe(n){return n.target}function be(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),o=Math.cos(r),a=Math.sin(r),l=i*Math.cos(n),c=i*Math.sin(n),f=o*Math.cos(e),s=o*Math.sin(e),h=2*Math.asin(Math.sqrt(on(r-t)+i*o*on(e-n))),p=1/Math.sin(h),g=h?function(n){var t=Math.sin(n*=h)*p,e=Math.sin(h-n)*p,r=e*l+t*f,i=e*c+t*s,o=e*u+t*a;return[Math.atan2(i,r)*Zo,Math.atan2(o,Math.sqrt(r*r+i*i))*Zo]}:function(){return[n*Zo,t*Zo]};return g.distance=h,g}function _e(){function n(n,i){var u=Math.sin(i*=Yo),o=Math.cos(i),a=xo((n*=Yo)-t),l=Math.cos(a);Ja+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*u-e*o*l)*a),e*u+r*o*l),t=n,e=u,r=o}var t,e,r;Ga.point=function(i,u){t=i*Yo,e=Math.sin(u*=Yo),r=Math.cos(u),Ga.point=n},Ga.lineEnd=function(){Ga.point=Ga.lineEnd=b}}function we(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),o=Math.cos(i);return[Math.atan2(n*u,r*o),Math.asin(r&&e*u/r)]},e}function Se(n,t){function e(n,t){o>0?-Io+Uo>t&&(t=-Io+Uo):t>Io-Uo&&(t=Io-Uo);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Fo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Io]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return xo(i)<Uo?ce:(e.invert=function(n,t){var e=u-t;return[Math.atan2(n,e)/i,u-K(i)*Math.sqrt(n*n+e*e)]},e)}function Ne(n,t){return[n,Math.log(Math.tan(Fo/4+t/2))]}function Ee(n){var t,e=oe(n),r=e.scale,i=e.translate,u=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=i.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=u.apply(e,arguments);if(o===e){if(t=null==n){var a=Fo*r(),l=i();u([[l[0]-a,l[1]-a],[l[0]+a,l[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function Ae(n,t){return[Math.log(Math.tan(Fo/4+t/2)),-n]}function Ce(n){return n[0]}function ze(n){return n[1]}function Le(n){for(var t=n.length,e=[0,1],r=2,i=2;t>i;i++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function Ue(n){var t=cl.pop()||new Pe;return t.site=n,t}function je(n){Be(n),ol.remove(n),cl.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];je(n);for(var l=u;l.circle&&xo(e-l.circle.x)<Uo&&xo(r-l.circle.cy)<Uo;)u=l.P,a.unshift(l),je(l),l=u;a.unshift(l),Be(l);for(var c=o;c.circle&&xo(e-c.circle.x)<Uo&&xo(r-c.circle.cy)<Uo;)o=c.N,a.push(c),je(c),c=o;a.push(c),Be(c);var f,s=a.length;for(f=1;s>f;++f)c=a[f],l=a[f-1],nr(c.edge,l.site,c.site,i);l=a[0],c=a[s-1],c.edge=Ke(l.site,c.site,null,i),$e(l),$e(c)}function He(n){for(var t,e,r,i,u=n.x,o=n.y,a=ol._;a;)if(r=Oe(a,o)-u,r>Uo)a=a.L;else{if(i=u-Ie(a,o),!(i>Uo)){r>-Uo?(t=a.P,e=a):i>-Uo?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=Ue(n);if(ol.insert(t,l),t||e){if(t===e)return Be(t),e=Ue(t.site),ol.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(!e)return void(l.edge=Ke(t.site,l.site));Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,v=g.x-f,d=g.y-s,y=2*(h*d-p*v),m=h*h+p*p,M=v*v+d*d,x={x:(d*m-p*M)/y+f,y:(h*M-v*m)/y+s};nr(e.edge,c,g,x),l.edge=Ke(c,n,null,x),e.edge=Ke(n,g,null,x),$e(t),$e(e)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-(1/0);e=o.site;var a=e.x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ie(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ye(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],v=ul,d=v.length;d--;)if(u=v[d],u&&u.prepare())for(a=u.edges,l=a.length,o=0;l>o;)f=a[o].end(),r=f.x,i=f.y,c=a[++o%l].start(),t=c.x,e=c.y,(xo(r-t)>Uo||xo(i-e)>Uo)&&(a.splice(o,0,new tr(Qe(u.site,f,xo(r-s)<Uo&&g-i>Uo?{x:s,y:xo(t-s)<Uo?e:g}:xo(i-g)<Uo&&h-r>Uo?{x:xo(e-g)<Uo?t:h,y:g}:xo(r-h)<Uo&&i-p>Uo?{x:h,y:xo(t-h)<Uo?e:p}:xo(i-p)<Uo&&r-s>Uo?{x:xo(e-p)<Uo?t:s,y:p}:null),u.site,null)),++l)}function Ve(n,t){return t.angle-n.angle}function Xe(){rr(this),this.x=this.y=this.arc=this.site=this.cy=null}function $e(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,i=n.site,u=e.site;if(r!==u){var o=i.x,a=i.y,l=r.x-o,c=r.y-a,f=u.x-o,s=u.y-a,h=2*(l*s-c*f);if(!(h>=-jo)){var p=l*l+c*c,g=f*f+s*s,v=(s*p-c*g)/h,d=(l*g-f*p)/h,s=d+a,y=fl.pop()||new Xe;y.arc=n,y.site=i,y.x=v+o,y.y=s+Math.sqrt(v*v+d*d),y.cy=s,n.circle=y;for(var m=null,M=ll._;M;)if(y.y<M.y||y.y===M.y&&y.x<=M.x){if(!M.L){m=M.P;break}M=M.L}else{if(!M.R){m=M;break}M=M.R}ll.insert(m,y),m||(al=y)}}}}function Be(n){var t=n.circle;t&&(t.P||(al=t.N),ll.remove(t),fl.push(t),rr(t),n.circle=null)}function We(n){for(var t,e=il,r=Yt(n[0][0],n[0][1],n[1][0],n[1][1]),i=e.length;i--;)t=e[i],(!Je(t,n)||!r(t)||xo(t.a.x-t.b.x)<Uo&&xo(t.a.y-t.b.y)<Uo)&&(t.a=t.b=null,e.splice(i,1))}function Je(n,t){var e=n.b;if(e)return!0;var r,i,u=n.a,o=t[0][0],a=t[1][0],l=t[0][1],c=t[1][1],f=n.l,s=n.r,h=f.x,p=f.y,g=s.x,v=s.y,d=(h+g)/2,y=(p+v)/2;if(v===p){if(o>d||d>=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:d,y:l};e={x:d,y:c}}else{if(u){if(u.y<l)return}else u={x:d,y:c};e={x:d,y:l}}}else if(r=(h-g)/(v-p),i=y-r*d,-1>r||r>1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.y<l)return}else u={x:(c-i)/r,y:c};e={x:(l-i)/r,y:l}}else if(v>p){if(u){if(u.x>=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.x<o)return}else u={x:a,y:r*a+i};e={x:o,y:r*o+i}}return n.a=u,n.b=e,!0}function Ge(n,t){this.l=n,this.r=t,this.a=this.b=null}function Ke(n,t,e,r){var i=new Ge(n,t);return il.push(i),e&&nr(i,n,t,e),r&&nr(i,t,n,r),ul[n.i].edges.push(new tr(i,n,t)),ul[t.i].edges.push(new tr(i,t,n)),i}function Qe(n,t,e){var r=new Ge(n,null);return r.a=t,r.b=e,il.push(r),r}function nr(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function tr(n,t,e){var r=n.a,i=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(i.x-r.x,r.y-i.y):Math.atan2(r.x-i.x,i.y-r.y)}function er(){this._=null}function rr(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function ir(n,t){var e=t,r=t.R,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function ur(n,t){var e=t,r=t.L,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function or(n){for(;n.L;)n=n.L;return n}function ar(n,t){var e,r,i,u=n.sort(lr).pop();for(il=[],ul=new Array(n.length),ol=new er,ll=new er;;)if(i=al,u&&(!i||u.y<i.y||u.y===i.y&&u.x<i.x))u.x===e&&u.y===r||(ul[u.i]=new Ye(u),He(u),e=u.x,r=u.y),u=n.pop();else{if(!i)break;Fe(i.arc)}t&&(We(t),Ze(t));var o={cells:ul,edges:il};return ol=ll=il=ul=null,o}function lr(n,t){return t.y-n.y||t.x-n.x}function cr(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function fr(n){return n.x}function sr(n){return n.y}function hr(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function pr(n,t,e,r,i,u){if(!n(t,e,r,i,u)){var o=.5*(e+i),a=.5*(r+u),l=t.nodes;l[0]&&pr(n,l[0],e,r,o,a),l[1]&&pr(n,l[1],o,r,i,a),l[2]&&pr(n,l[2],e,a,o,u),l[3]&&pr(n,l[3],o,a,i,u)}}function gr(n,t,e,r,i,u,o){var a,l=1/0;return function c(n,f,s,h,p){if(!(f>u||s>o||r>h||i>p)){if(g=n.point){var g,v=t-n.x,d=e-n.y,y=v*v+d*d;if(l>y){var m=Math.sqrt(l=y);r=t-m,i=e-m,u=t+m,o=e+m,a=g}}for(var M=n.nodes,x=.5*(f+h),b=.5*(s+p),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:c(n,f,s,x,b);break;case 1:c(n,x,s,h,b);break;case 2:c(n,f,b,x,p);break;case 3:c(n,x,b,h,p)}}}(n,r,i,u,o),a}function vr(n,t){n=ao.rgb(n),t=ao.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,o=t.g-r,a=t.b-i;return function(n){return"#"+bn(Math.round(e+u*n))+bn(Math.round(r+o*n))+bn(Math.round(i+a*n))}}function dr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=Mr(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function yr(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function mr(n,t){var e,r,i,u=hl.lastIndex=pl.lastIndex=0,o=-1,a=[],l=[];for(n+="",t+="";(e=hl.exec(n))&&(r=pl.exec(t));)(i=r.index)>u&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:yr(e,r)})),u=pl.lastIndex;return u<t.length&&(i=t.slice(u),a[o]?a[o]+=i:a[++o]=i),a.length<2?l[0]?(t=l[0].x,function(n){return t(n)+""}):function(){return t}:(t=l.length,function(n){for(var e,r=0;t>r;++r)a[(e=l[r]).i]=e.x(n);return a.join("")})}function Mr(n,t){for(var e,r=ao.interpolators.length;--r>=0&&!(e=ao.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(Mr(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;o>e;++e)i[e]=t[e];return function(n){for(e=0;a>e;++e)i[e]=r[e](n);return i}}function br(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function wr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function Sr(n){return n*n}function kr(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Er(n){return function(t){return Math.pow(t,n)}}function Ar(n){return 1-Math.cos(n*Io)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Lr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ho*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ho/t)}}function qr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Tr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=ao.hcl(n),t=ao.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=ao.hsl(n),t=ao.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){n=ao.lab(n),t=ao.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Hr(t),i=Fr(t,e),u=Hr(Or(e,t,-i))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,i*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Zo,this.translate=[n.e,n.f],this.scale=[r,u],this.skew=u?Math.atan2(i,u)*Zo:0}function Fr(n,t){return n[0]*t[0]+n[1]*t[1]}function Hr(n){var t=Math.sqrt(Fr(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Or(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Ir(n){return n.length?n.pop()+",":""}function Yr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push("translate(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else(t[0]||t[1])&&e.push("translate("+t+")")}function Zr(n,t,e,r){n!==t?(n-t>180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+"rotate(",null,")")-2,x:yr(n,t)})):t&&e.push(Ir(e)+"rotate("+t+")")}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+"skewX(",null,")")-2,x:yr(n,t)}):t&&e.push(Ir(e)+"skewX("+t+")")}function Xr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Ir(e)+"scale(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Ir(e)+"scale("+t+")")}function $r(n,t){var e=[],r=[];return n=ao.transform(n),t=ao.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i<u;)e[(t=r[i]).i]=t.x(n);return e.join("")}}function Br(n,t){return t=(t-=n=+n)||1/t,function(e){return(e-n)/t}}function Wr(n,t){return t=(t-=n=+n)||1/t,function(e){return Math.max(0,Math.min(1,(e-n)/t))}}function Jr(n){for(var t=n.source,e=n.target,r=Kr(t,e),i=[t];t!==r;)t=t.parent,i.push(t);for(var u=i.length;e!==r;)i.splice(u,0,e),e=e.parent;return i}function Gr(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Kr(n,t){if(n===t)return n;for(var e=Gr(n),r=Gr(t),i=e.pop(),u=r.pop(),o=null;i===u;)o=i,i=e.pop(),u=r.pop();return o}function Qr(n){n.fixed|=2}function ni(n){n.fixed&=-7}function ti(n){n.fixed|=4,n.px=n.x,n.py=n.y}function ei(n){n.fixed&=-5}function ri(n,t,e){var r=0,i=0;if(n.charge=0,!n.leaf)for(var u,o=n.nodes,a=o.length,l=-1;++l<a;)u=o[l],null!=u&&(ri(u,t,e),n.charge+=u.charge,r+=u.charge*u.cx,i+=u.charge*u.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var c=t*e[n.point.index];n.charge+=n.pointCharge=c,r+=c*n.point.x,i+=c*n.point.y}n.cx=r/n.charge,n.cy=i/n.charge}function ii(n,t){return ao.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=fi,n}function ui(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(i=n.children)&&(r=i.length))for(var r,i;--r>=0;)e.push(i[r])}function oi(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++o<i;)e.push(u[o]);for(;null!=(n=r.pop());)t(n)}function ai(n){return n.children}function li(n){return n.value}function ci(n,t){return t.value-n.value}function fi(n){return ao.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function si(n){return n.x}function hi(n){return n.y}function pi(n,t,e){n.y0=t,n.y=e}function gi(n){return ao.range(n.length)}function vi(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function di(n){for(var t,e=1,r=0,i=n[0][1],u=n.length;u>e;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function yi(n){return n.reduce(mi,0)}function mi(n,t){return n+t[1]}function Mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function bi(n){return[ao.min(n),ao.max(n)]}function _i(n,t){return n.value-t.value}function wi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Si(n,t){n._pack_next=t,t._pack_prev=n}function ki(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ni(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-(1/0),h=1/0,p=-(1/0);if(e.forEach(Ei),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(u=e[2],zi(r,i,u),t(u),wi(r,u),r._pack_prev=u,wi(u,i),i=r._pack_next,o=3;c>o;o++){zi(r,i,u=e[o]);var g=0,v=1,d=1;for(a=i._pack_next;a!==i;a=a._pack_next,v++)if(ki(a,u)){g=1;break}if(1==g)for(l=r._pack_prev;l!==a._pack_prev&&!ki(l,u);l=l._pack_prev,d++);g?(d>v||v==d&&i.r<r.r?Si(r,i=a):Si(r=l,i),o--):(wi(r,u),i=u,t(u))}var y=(f+s)/2,m=(h+p)/2,M=0;for(o=0;c>o;o++)u=e[o],u.x-=y,u.y-=m,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(Ai)}}function Ei(n){n._pack_next=n._pack_prev=n}function Ai(n){delete n._pack_next,delete n._pack_prev}function Ci(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,o=i.length;++u<o;)Ci(i[u],t,e,r)}function zi(n,t,e){var r=n.r+e.r,i=t.x-n.x,u=t.y-n.y;if(r&&(i||u)){var o=t.r+e.r,a=i*i+u*u;o*=o,r*=r;var l=.5+(r-o)/(2*a),c=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+l*i+c*u,e.y=n.y+l*u-c*i}else e.x=n.x+r,e.y=n.y}function Li(n,t){return n.parent==t.parent?1:2}function qi(n){var t=n.children;return t.length?t[0]:n.t}function Ti(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function Ri(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function Di(n){for(var t,e=0,r=0,i=n.children,u=i.length;--u>=0;)t=i[u],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Pi(n,t,e){return n.a.parent===t.parent?n.a:e}function Ui(n){return 1+ao.max(n,function(n){return n.y})}function ji(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Fi(n){var t=n.children;return t&&t.length?Fi(t[0]):n}function Hi(n){var t,e=n.children;return e&&(t=e.length)?Hi(e[t-1]):n}function Oi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ii(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Yi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Zi(n){return n.rangeExtent?n.rangeExtent():Yi(n.range())}function Vi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Xi(n,t){var e,r=0,i=n.length-1,u=n[r],o=n[i];return u>o&&(e=r,r=i,i=e,e=u,u=o,o=e),n[r]=t.floor(u),n[i]=t.ceil(o),n}function $i(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:Sl}function Bi(n,t,e,r){var i=[],u=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)i.push(e(n[o-1],n[o])),u.push(r(t[o-1],t[o]));return function(t){var e=ao.bisect(n,t,1,a)-1;return u[e](i[e](t))}}function Wi(n,t,e,r){function i(){var i=Math.min(n.length,t.length)>2?Bi:Vi,l=r?Wr:Br;return o=i(n,t,l,e),a=i(t,n,l,Mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Ur)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return ao.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Xi(n,$i(Ki(n,t)[2])),Xi(n,$i(Ki(n,t)[2])),n}function Ki(n,t){null==t&&(t=10);var e=Yi(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ao.range.apply(ao,Ki(n,t))}function nu(n,t,e){var r=Ki(n,t);if(e){var i=ha.exec(e);if(i.shift(),"s"===i[8]){var u=ao.formatPrefix(Math.max(xo(r[0]),xo(r[1])));return i[7]||(i[7]="."+tu(u.scale(r[2]))),i[8]="f",e=ao.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+eu(i[8],r)),e=i.join("")}else e=",."+tu(r[2])+"f";return ao.format(e)}function tu(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function eu(n,t){var e=tu(t[2]);return n in kl?Math.abs(e-tu(Math.max(xo(t[0]),xo(t[1]))))+ +("e"!==n):e-2*("%"===n)}function ru(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Xi(r.map(i),e?Math:El);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=Yi(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;f>c;c++)for(var h=1;s>h;h++)o.push(u(c)*h);o.push(u(c))}else for(o.push(u(c));c++<f;)for(var h=s-1;h>0;h--)o.push(u(c)*h);for(c=0;o[c]<a;c++);for(f=o.length;o[f-1]>l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return Nl;arguments.length<2?e=Nl:"function"!=typeof e&&(e=ao.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return t-.5>o*t&&(o*=t),r>=o?e(n):""}},o.copy=function(){return ru(n.copy(),t,e,r)},Ji(o,n)}function iu(n,t,e){function r(t){return n(i(t))}var i=uu(t),u=uu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return Qi(e,n)},r.tickFormat=function(n,t){return nu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(o){return arguments.length?(i=uu(t=o),u=uu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return iu(n.copy(),t,e)},Ji(r,n)}function uu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function ou(n,t){function e(e){return u[((i.get(e)||("range"===t.t?i.set(e,n.push(e)):NaN))-1)%u.length]}function r(t,e){return ao.range(n.length).map(function(n){return t+e*n})}var i,u,o;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new c;for(var u,o=-1,a=r.length;++o<a;)i.has(u=r[o])||i.set(u,n.push(u));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(u=n,o=0,t={t:"range",a:arguments},e):u},e.rangePoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=(l+c)/2,0):(c-l)/(n.length-1+a);return u=r(l+f*a/2,f),o=0,t={t:"rangePoints",a:arguments},e},e.rangeRoundPoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=c=Math.round((l+c)/2),0):(c-l)/(n.length-1+a)|0;return u=r(l+Math.round(f*a/2+(c-l-(n.length-1+a)*f)/2),f),o=0,t={t:"rangeRoundPoints",a:arguments},e},e.rangeBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=(s-f)/(n.length-a+2*l);return u=r(f+h*l,h),c&&u.reverse(),o=h*(1-a),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=Math.floor((s-f)/(n.length-a+2*l));return u=r(f+Math.round((s-f-(n.length-a)*h)/2),h),c&&u.reverse(),o=Math.round(h*(1-a)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return Yi(t.a[0])},e.copy=function(){return ou(n,t)},e.domain(n)}function au(n,t){function u(){var e=0,r=t.length;for(a=[];++e<r;)a[e-1]=ao.quantile(n,e/r);return o}function o(n){return isNaN(n=+n)?void 0:t[ao.bisect(a,n)]}var a;return o.domain=function(t){return arguments.length?(n=t.map(r).filter(i).sort(e),u()):n},o.range=function(n){return arguments.length?(t=n,u()):t},o.quantiles=function(){return a},o.invertExtent=function(e){return e=t.indexOf(e),0>e?[NaN,NaN]:[e>0?a[e-1]:n[0],e<a.length?a[e]:n[n.length-1]]},o.copy=function(){return au(n,t)},u()}function lu(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(u*(t-n))))]}function i(){return u=e.length/(t-n),o=e.length-1,r}var u,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],i()):[n,t]},r.range=function(n){return arguments.length?(e=n,i()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?NaN:t/u+n,[t,t+1/u]},r.copy=function(){return lu(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[ao.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function fu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Qi(n,t)},t.tickFormat=function(t,e){return nu(n,t,e)},t.copy=function(){return fu(n)},t}function su(){return 0}function hu(n){return n.innerRadius}function pu(n){return n.outerRadius}function gu(n){return n.startAngle}function vu(n){return n.endAngle}function du(n){return n&&n.padAngle}function yu(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function mu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,v=(s+p)/2,d=h-f,y=p-s,m=d*d+y*y,M=e-r,x=f*p-h*s,b=(0>y?-1:1)*Math.sqrt(Math.max(0,M*M*m-x*x)),_=(x*y-d*b)/m,w=(-x*d-y*b)/m,S=(x*y+d*b)/m,k=(-x*d+y*b)/m,N=_-g,E=w-v,A=S-g,C=k-v;return N*N+E*E>A*A+C*C&&(_=S,w=k),[[_-l,w-c],[_*e/M,w*e/M]]}function Mu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s<h;)i.call(this,l=t[s],s)?f.push([+p.call(this,l,s),+g.call(this,l,s)]):f.length&&(o(),f=[]);return f.length&&o(),c.length?c.join(""):null}var e=Ce,r=ze,i=zt,u=xu,o=u.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(i=n,t):i},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?u=n:(u=Tl.get(n)||xu).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function xu(n){return n.length>1?n.join("L"):n+"Z"}function bu(n){return n.join("L")+"Z"}function _u(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&i.push("H",r[0]),i.join("")}function wu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("V",(r=n[t])[1],"H",r[0]);return i.join("")}function Su(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r=n[t])[0],"V",r[1]);return i.join("")}function ku(n,t){return n.length<4?xu(n):n[1]+Au(n.slice(1,-1),Cu(n,t))}function Nu(n,t){return n.length<3?bu(n):n[0]+Au((n.push(n[0]),n),Cu([n[n.length-2]].concat(n,[n[1]]),t))}function Eu(n,t){return n.length<3?xu(n):n[0]+Au(n,Cu(n,t))}function Au(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return xu(n);var e=n.length!=t.length,r="",i=n[0],u=n[1],o=t[0],a=o,l=1;if(e&&(r+="Q"+(u[0]-2*o[0]/3)+","+(u[1]-2*o[1]/3)+","+u[0]+","+u[1],i=n[1],l=2),t.length>1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c<t.length;c++,l++)u=n[l],a=t[c],r+="S"+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1]}if(e){var f=n[l];r+="Q"+(u[0]+2*a[0]/3)+","+(u[1]+2*a[1]/3)+","+f[0]+","+f[1]}return r}function Cu(n,t){for(var e,r=[],i=(1-t)/2,u=n[0],o=n[1],a=1,l=n.length;++a<l;)e=u,u=o,o=n[a],r.push([i*(o[0]-e[0]),i*(o[1]-e[1])]);return r}function zu(n){if(n.length<3)return xu(n);var t=1,e=n.length,r=n[0],i=r[0],u=r[1],o=[i,i,i,(r=n[1])[0]],a=[u,u,u,r[1]],l=[i,",",u,"L",Ru(Pl,o),",",Ru(Pl,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),Du(l,o,a);return n.pop(),l.push("L",r),l.join("")}function Lu(n){if(n.length<4)return xu(n);for(var t,e=[],r=-1,i=n.length,u=[0],o=[0];++r<3;)t=n[r],u.push(t[0]),o.push(t[1]);for(e.push(Ru(Pl,u)+","+Ru(Pl,o)),--r;++r<i;)t=n[r],u.shift(),u.push(t[0]),o.shift(),o.push(t[1]),Du(e,u,o);return e.join("")}function qu(n){for(var t,e,r=-1,i=n.length,u=i+4,o=[],a=[];++r<4;)e=n[r%i],o.push(e[0]),a.push(e[1]);for(t=[Ru(Pl,o),",",Ru(Pl,a)],--r;++r<u;)e=n[r%i],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),Du(t,o,a);return t.join("")}function Tu(n,t){var e=n.length-1;if(e)for(var r,i,u=n[0][0],o=n[0][1],a=n[e][0]-u,l=n[e][1]-o,c=-1;++c<=e;)r=n[c],i=c/e,r[0]=t*r[0]+(1-t)*(u+i*a),r[1]=t*r[1]+(1-t)*(o+i*l);return zu(n)}function Ru(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function Du(n,t,e){n.push("C",Ru(Rl,t),",",Ru(Rl,e),",",Ru(Dl,t),",",Ru(Dl,e),",",Ru(Pl,t),",",Ru(Pl,e))}function Pu(n,t){return(t[1]-n[1])/(t[0]-n[0])}function Uu(n){for(var t=0,e=n.length-1,r=[],i=n[0],u=n[1],o=r[0]=Pu(i,u);++t<e;)r[t]=(o+(o=Pu(i=u,u=n[t+1])))/2;return r[t]=o,r}function ju(n){for(var t,e,r,i,u=[],o=Uu(n),a=-1,l=n.length-1;++a<l;)t=Pu(n[a],n[a+1]),xo(t)<Uo?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,i=e*e+r*r,i>9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r));for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Fu(n){return n.length<3?xu(n):n[0]+Au(n,ju(n))}function Hu(n){for(var t,e,r,i=-1,u=n.length;++i<u;)t=n[i],e=t[0],r=t[1]-Io,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Ou(n){function t(t){function l(){v.push("M",a(n(y),s),f,c(n(d.reverse()),s),"Z")}for(var h,p,g,v=[],d=[],y=[],m=-1,M=t.length,x=En(e),b=En(i),_=e===r?function(){ +return p}:En(r),w=i===u?function(){return g}:En(u);++m<M;)o.call(this,h=t[m],m)?(d.push([p=+x.call(this,h,m),g=+b.call(this,h,m)]),y.push([+_.call(this,h,m),+w.call(this,h,m)])):d.length&&(l(),d=[],y=[]);return d.length&&l(),v.length?v.join(""):null}var e=Ce,r=Ce,i=0,u=ze,o=zt,a=xu,l=a.key,c=a,f="L",s=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(i=u=n,t):u},t.y0=function(n){return arguments.length?(i=n,t):i},t.y1=function(n){return arguments.length?(u=n,t):u},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(l="function"==typeof n?a=n:(a=Tl.get(n)||xu).key,c=a.reverse||a,f=a.closed?"M":"L",t):l},t.tension=function(n){return arguments.length?(s=n,t):s},t}function Iu(n){return n.radius}function Yu(n){return[n.x,n.y]}function Zu(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]-Io;return[e*Math.cos(r),e*Math.sin(r)]}}function Vu(){return 64}function Xu(){return"circle"}function $u(n){var t=Math.sqrt(n/Fo);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Bu(n){return function(){var t,e,r;(t=this[n])&&(r=t[e=t.active])&&(r.timer.c=null,r.timer.t=NaN,--t.count?delete t[e]:delete this[n],t.active+=.5,r.event&&r.event.interrupt.call(this,this.__data__,r.index))}}function Wu(n,t,e){return ko(n,Yl),n.namespace=t,n.id=e,n}function Ju(n,t,e,r){var i=n.id,u=n.namespace;return Y(n,"function"==typeof e?function(n,o,a){n[u][i].tween.set(t,r(e.call(n,n.__data__,o,a)))}:(e=r(e),function(n){n[u][i].tween.set(t,e)}))}function Gu(n){return null==n&&(n=""),function(){this.textContent=n}}function Ku(n){return null==n?"__transition__":"__transition_"+n+"__"}function Qu(n,t,e,r,i){function u(n){var t=v.delay;return f.t=t+l,n>=t?o(n-t):void(f.c=o)}function o(e){var i=g.active,u=g[i];u&&(u.timer.c=null,u.timer.t=NaN,--g.count,delete g[i],u.event&&u.event.interrupt.call(n,n.__data__,u.index));for(var o in g)if(r>+o){var c=g[o];c.timer.c=null,c.timer.t=NaN,--g.count,delete g[o]}f.c=a,qn(function(){return f.c&&a(e||1)&&(f.c=null,f.t=NaN),1},0,l),g.active=r,v.event&&v.event.start.call(n,n.__data__,t),p=[],v.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&p.push(r)}),h=v.ease,s=v.duration}function a(i){for(var u=i/s,o=h(u),a=p.length;a>0;)p[--a].call(n,o);return u>=1?(v.event&&v.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1):void 0}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),v=g[r];v||(l=i.time,f=qn(u,0,l),v=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function no(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function to(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function eo(n){return n.toISOString()}function ro(n,t,e){function r(t){return n(t)}function i(n,e){var r=n[1]-n[0],i=r/e,u=ao.bisect(Kl,i);return u==Kl.length?[t.year,Ki(n.map(function(n){return n/31536e6}),e)[2]]:u?t[i/Kl[u-1]<Kl[u]/i?u-1:u]:[tc,Ki(n,e)[2]]}return r.invert=function(t){return io(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(io)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,io(+e+1),t).length}var u=r.domain(),o=Yi(u),a=null==n?i(o,10):"number"==typeof n&&i(o,n);return a&&(n=a[0],t=a[1]),r.domain(Xi(u,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yi(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],io(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ro(n.copy(),t,e)},Ji(r,n)}function io(n){return new Date(n)}function uo(n){return JSON.parse(n.responseText)}function oo(n){var t=fo.createRange();return t.selectNode(fo.body),t.createContextualFragment(n.responseText)}var ao={version:"3.5.17"},lo=[].slice,co=function(n){return lo.call(n)},fo=this.document;if(fo)try{co(fo.documentElement.childNodes)[0].nodeType}catch(so){co=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(ho){var po=this.Element.prototype,go=po.setAttribute,vo=po.setAttributeNS,yo=this.CSSStyleDeclaration.prototype,mo=yo.setProperty;po.setAttribute=function(n,t){go.call(this,n,t+"")},po.setAttributeNS=function(n,t,e){vo.call(this,n,t,e+"")},yo.setProperty=function(n,t,e){mo.call(this,n,t+"",e)}}ao.ascending=e,ao.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:NaN},ao.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&e>r&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&e>r&&(e=r)}return e},ao.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&r>e&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&r>e&&(e=r)}return e},ao.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u<o;)if(null!=(r=n[u])&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=n[u])&&(e>r&&(e=r),r>i&&(i=r))}else{for(;++u<o;)if(null!=(r=t.call(n,n[u],u))&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=t.call(n,n[u],u))&&(e>r&&(e=r),r>i&&(i=r))}return[e,i]},ao.sum=function(n,t){var e,r=0,u=n.length,o=-1;if(1===arguments.length)for(;++o<u;)i(e=+n[o])&&(r+=e);else for(;++o<u;)i(e=+t.call(n,n[o],o))&&(r+=e);return r},ao.mean=function(n,t){var e,u=0,o=n.length,a=-1,l=o;if(1===arguments.length)for(;++a<o;)i(e=r(n[a]))?u+=e:--l;else for(;++a<o;)i(e=r(t.call(n,n[a],a)))?u+=e:--l;return l?u/l:void 0},ao.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),i=+n[r-1],u=e-r;return u?i+u*(n[r]-i):i},ao.median=function(n,t){var u,o=[],a=n.length,l=-1;if(1===arguments.length)for(;++l<a;)i(u=r(n[l]))&&o.push(u);else for(;++l<a;)i(u=r(t.call(n,n[l],l)))&&o.push(u);return o.length?ao.quantile(o.sort(e),.5):void 0},ao.variance=function(n,t){var e,u,o=n.length,a=0,l=0,c=-1,f=0;if(1===arguments.length)for(;++c<o;)i(e=r(n[c]))&&(u=e-a,a+=u/++f,l+=u*(e-a));else for(;++c<o;)i(e=r(t.call(n,n[c],c)))&&(u=e-a,a+=u/++f,l+=u*(e-a));return f>1?l/(f-1):void 0},ao.deviation=function(){var n=ao.variance.apply(this,arguments);return n?Math.sqrt(n):n};var Mo=u(e);ao.bisectLeft=Mo.left,ao.bisect=ao.bisectRight=Mo.right,ao.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},ao.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,2>u&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},ao.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ao.pairs=function(n){for(var t,e=0,r=n.length-1,i=n[0],u=new Array(0>r?0:r);r>e;)u[e]=[t=i,i=n[++e]];return u},ao.transpose=function(n){if(!(i=n.length))return[];for(var t=-1,e=ao.min(n,o),r=new Array(e);++t<e;)for(var i,u=-1,a=r[t]=new Array(i);++u<i;)a[u]=n[u][t];return r},ao.zip=function(){return ao.transpose(arguments)},ao.keys=function(n){var t=[];for(var e in n)t.push(e);return t},ao.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},ao.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},ao.merge=function(n){for(var t,e,r,i=n.length,u=-1,o=0;++u<i;)o+=n[u].length;for(e=new Array(o);--i>=0;)for(r=n[i],t=r.length;--t>=0;)e[--o]=r[t];return e};var xo=Math.abs;ao.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,i=[],u=a(xo(e)),o=-1;if(n*=u,t*=u,e*=u,0>e)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)<t;)i.push(r/u);return i},ao.map=function(n,t){var e=new c;if(n instanceof c)n.forEach(function(n,t){e.set(n,t)});else if(Array.isArray(n)){var r,i=-1,u=n.length;if(1===arguments.length)for(;++i<u;)e.set(i,n[i]);else for(;++i<u;)e.set(t.call(n,r=n[i],i),r)}else for(var o in n)e.set(o,n[o]);return e};var bo="__proto__",_o="\x00";l(c,{has:h,get:function(n){return this._[f(n)]},set:function(n,t){return this._[f(n)]=t},remove:p,keys:g,values:function(){var n=[];for(var t in this._)n.push(this._[t]);return n},entries:function(){var n=[];for(var t in this._)n.push({key:s(t),value:this._[t]});return n},size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t),this._[t])}}),ao.nest=function(){function n(t,o,a){if(a>=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,v=u[a++],d=new c;++p<g;)(h=d.get(l=v(f=o[p])))?h.push(f):d.set(l,[f]);return t?(f=t(),s=function(e,r){f.set(e,n(t,r,a))}):(f={},s=function(e,r){f[e]=n(t,r,a)}),d.forEach(s),f}function t(n,e){if(e>=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(ao.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},ao.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},l(y,{has:h,add:function(n){return this._[f(n+="")]=!0,n},remove:p,values:g,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t))}}),ao.behavior={},ao.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r<i;)n[e=arguments[r]]=M(n,t,t[e]);return n};var wo=["webkit","ms","moz","Moz","o","O"];ao.dispatch=function(){for(var n=new _,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=w(n);return n},_.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ao.event=null,ao.requote=function(n){return n.replace(So,"\\$&")};var So=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ko={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},No=function(n,t){return t.querySelector(n)},Eo=function(n,t){return t.querySelectorAll(n)},Ao=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(Ao=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(No=function(n,t){return Sizzle(n,t)[0]||null},Eo=Sizzle,Ao=Sizzle.matchesSelector),ao.selection=function(){return ao.select(fo.documentElement)};var Co=ao.selection.prototype=[];Co.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o<a;){u.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var l=-1,c=r.length;++l<c;)(i=r[l])?(t.push(e=n.call(i,i.__data__,l,o)),e&&"__data__"in i&&(e.__data__=i.__data__)):t.push(null)}return E(u)},Co.selectAll=function(n){var t,e,r=[];n=C(n);for(var i=-1,u=this.length;++i<u;)for(var o=this[i],a=-1,l=o.length;++a<l;)(e=o[a])&&(r.push(t=co(n.call(e,e.__data__,a,i))),t.parentNode=e);return E(r)};var zo="http://www.w3.org/1999/xhtml",Lo={svg:"http://www.w3.org/2000/svg",xhtml:zo,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};ao.ns={prefix:Lo,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),Lo.hasOwnProperty(e)?{space:Lo[e],local:n}:n}},Co.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ao.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},Co.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++i<r;)if(!t.contains(n[i]))return!1}else for(t=e.getAttribute("class");++i<r;)if(!q(n[i]).test(t))return!1;return!0}for(t in n)this.each(R(t,n[t]));return this}return this.each(R(n,t))},Co.style=function(n,e,r){var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(e="");for(r in n)this.each(P(r,n[r],e));return this}if(2>i){var u=this.node();return t(u).getComputedStyle(u,null).getPropertyValue(n)}r=""}return this.each(P(n,e,r))},Co.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(U(t,n[t]));return this}return this.each(U(n,t))},Co.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Co.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Co.append=function(n){return n=j(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Co.insert=function(n,t){return n=j(n),t=A(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},Co.remove=function(){return this.each(F)},Co.data=function(n,t){function e(n,e){var r,i,u,o=n.length,s=e.length,h=Math.min(o,s),p=new Array(s),g=new Array(s),v=new Array(o);if(t){var d,y=new c,m=new Array(o);for(r=-1;++r<o;)(i=n[r])&&(y.has(d=t.call(i,i.__data__,r))?v[r]=i:y.set(d,i),m[r]=d);for(r=-1;++r<s;)(i=y.get(d=t.call(e,u=e[r],r)))?i!==!0&&(p[r]=i,i.__data__=u):g[r]=H(u),y.set(d,!0);for(r=-1;++r<o;)r in m&&y.get(m[r])!==!0&&(v[r]=n[r])}else{for(r=-1;++r<h;)i=n[r],u=e[r],i?(i.__data__=u,p[r]=i):g[r]=H(u);for(;s>r;++r)g[r]=H(e[r]);for(;o>r;++r)v[r]=n[r]}g.update=p,g.parentNode=p.parentNode=v.parentNode=n.parentNode,a.push(g),l.push(p),f.push(v)}var r,i,u=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++u<o;)(i=r[u])&&(n[u]=i.__data__);return n}var a=Z([]),l=E([]),f=E([]);if("function"==typeof n)for(;++u<o;)e(r=this[u],n.call(r,r.parentNode.__data__,u));else for(;++u<o;)e(r=this[u],n);return l.enter=function(){return a},l.exit=function(){return f},l},Co.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},Co.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return E(i)},Co.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],i=r.length-1,u=r[i];--i>=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Co.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},Co.each=function(n){return Y(this,function(t,e,r){n.call(t,t.__data__,e,r)})},Co.call=function(n){var t=co(arguments);return n.apply(t[0]=this,t),this},Co.empty=function(){return!this.node()},Co.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Co.size=function(){var n=0;return Y(this,function(){++n}),n};var qo=[];ao.selection.enter=Z,ao.selection.enter.prototype=qo,qo.append=Co.append,qo.empty=Co.empty,qo.node=Co.node,qo.call=Co.call,qo.size=Co.size,qo.select=function(n){for(var t,e,r,i,u,o=[],a=-1,l=this.length;++a<l;){r=(i=this[a]).update,o.push(t=[]),t.parentNode=i.parentNode;for(var c=-1,f=i.length;++c<f;)(u=i[c])?(t.push(r[c]=e=n.call(i.parentNode,u.__data__,c,a)),e.__data__=u.__data__):t.push(null)}return E(o)},qo.insert=function(n,t){return arguments.length<2&&(t=V(this)),Co.insert.call(this,n,t)},ao.select=function(t){var e;return"string"==typeof t?(e=[No(t,fo)],e.parentNode=fo.documentElement):(e=[t],e.parentNode=n(t)),E([e])},ao.selectAll=function(n){var t;return"string"==typeof n?(t=co(Eo(n,fo)),t.parentNode=fo.documentElement):(t=co(n),t.parentNode=null),E([t])},Co.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(X(n,t,e))};var To=ao.map({mouseenter:"mouseover",mouseleave:"mouseout"});fo&&To.forEach(function(n){"on"+n in fo&&To.remove(n)});var Ro,Do=0;ao.mouse=function(n){return J(n,k())};var Po=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;ao.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,i=0,u=t.length;u>i;++i)if((r=t[i]).identifier===e)return J(n,r)},ao.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",o)}function e(n,t,e,u,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],g|=n|e,M=r,p({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:n,dy:e}))}function l(){t(h,v)&&(y.on(u+d,null).on(o+d,null),m(g),p({type:"dragend"}))}var c,f=this,s=ao.event.target.correspondingElement||ao.event.target,h=f.parentNode,p=r.of(f,arguments),g=0,v=n(),d=".drag"+(null==v?"":"-"+v),y=ao.select(e(s)).on(u+d,a).on(o+d,l),m=W(s),M=t(h,v);i?(c=i.apply(f,arguments),c=[c.x-M[0],c.y-M[1]]):c=[0,0],p({type:"dragstart"})}}var r=N(n,"drag","dragstart","dragend"),i=null,u=e(b,ao.mouse,t,"mousemove","mouseup"),o=e(G,ao.touch,m,"touchmove","touchend");return n.origin=function(t){return arguments.length?(i=t,n):i},ao.rebind(n,r,"on")},ao.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?co(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Uo=1e-6,jo=Uo*Uo,Fo=Math.PI,Ho=2*Fo,Oo=Ho-Uo,Io=Fo/2,Yo=Fo/180,Zo=180/Fo,Vo=Math.SQRT2,Xo=2,$o=4;ao.interpolateZoom=function(n,t){var e,r,i=n[0],u=n[1],o=n[2],a=t[0],l=t[1],c=t[2],f=a-i,s=l-u,h=f*f+s*s;if(jo>h)r=Math.log(c/o)/Vo,e=function(n){return[i+n*f,u+n*s,o*Math.exp(Vo*n*r)]};else{var p=Math.sqrt(h),g=(c*c-o*o+$o*h)/(2*o*Xo*p),v=(c*c-o*o-$o*h)/(2*c*Xo*p),d=Math.log(Math.sqrt(g*g+1)-g),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-d)/Vo,e=function(n){var t=n*r,e=rn(d),a=o/(Xo*p)*(e*un(Vo*t+d)-en(d));return[i+a*f,u+a*s,o*e/rn(Vo*t+d)]}}return e.duration=1e3*r,e},ao.behavior.zoom=function(){function n(n){n.on(L,s).on(Wo+".zoom",p).on("dblclick.zoom",g).on(R,h)}function e(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function r(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function i(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=r(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function o(t,e,r,o){t.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,o)),u(d=e,r),t=ao.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),d=null)}function s(){function n(){a=1,u(ao.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=ao.select(t(i)).on(q,n).on(T,r),h=e(ao.mouse(i)),p=W(i);Il.call(i),l(o)}function h(){function n(){var n=ao.touches(g);return p=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ao.event.target;ao.select(t).on(x,r).on(b,a),_.push(t);for(var e=ao.event.changedTouches,i=0,u=e.length;u>i;++i)d[e[i].identifier]=null;var l=n(),c=Date.now();if(1===l.length){if(500>c-M){var f=l[0];o(g,f,d[f.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=c}else if(l.length>1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=ao.touches(g);Il.call(g);for(var a=0,l=o.length;l>a;++a,r=null)if(e=o[a],r=d[e.identifier]){if(t)break;n=e,t=r}if(r){var f=(f=e[0]-n[0])*f+(f=e[1]-n[1])*f,s=y&&Math.sqrt(f/y);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+r[0])/2,(t[1]+r[1])/2],i(s*p)}M=null,u(n,t),c(v)}function a(){if(ao.event.touches.length){for(var t=ao.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var i in d)return void n()}ao.selectAll(_).on(m,null),w.on(L,s).on(R,h),N(),f(v)}var p,g=this,v=D.of(g,arguments),d={},y=0,m=".zoom-"+ao.event.changedTouches[0].identifier,x="touchmove"+m,b="touchend"+m,_=[],w=ao.select(g),N=W(g);t(),l(v),w.on(L,null).on(R,t)}function p(){var n=D.of(this,arguments);m?clearTimeout(m):(Il.call(this),v=e(d=y||ao.mouse(this)),l(n)),m=setTimeout(function(){m=null,f(n)},50),S(),i(Math.pow(2,.002*Bo())*k.k),u(d,v),c(n)}function g(){var n=ao.mouse(this),t=Math.log(k.k)/Math.LN2;o(this,n,e(n),ao.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,y,m,M,x,b,_,w,k={x:0,y:0,k:1},E=[960,500],A=Jo,C=250,z=0,L="mousedown.zoom",q="mousemove.zoom",T="mouseup.zoom",R="touchstart.zoom",D=N(n,"zoomstart","zoom","zoomend");return Wo||(Wo="onwheel"in fo?(Bo=function(){return-ao.event.deltaY*(ao.event.deltaMode?120:1)},"wheel"):"onmousewheel"in fo?(Bo=function(){return ao.event.wheelDelta},"mousewheel"):(Bo=function(){return-ao.event.detail},"MozMousePixelScroll")),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Hl?ao.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},l(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],i=d?d[0]:e/2,u=d?d[1]:r/2,o=ao.interpolateZoom([(i-k.x)/k.k,(u-k.y)/k.k,e/k.k],[(i-t.x)/t.k,(u-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:i-r[0]*a,y:u-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){f(n)}).each("end.zoom",function(){f(n)}):(this.__chart__=k,l(n),c(n),f(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},a(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:null},i(+t),a(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Jo:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(y=t&&[+t[0],+t[1]],n):y},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},ao.rebind(n,D,"on")};var Bo,Wo,Jo=[0,1/0];ao.color=an,an.prototype.toString=function(){return this.rgb()+""},ao.hsl=ln;var Go=ln.prototype=new an;Go.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,this.l/n)},Go.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,n*this.l)},Go.rgb=function(){return cn(this.h,this.s,this.l)},ao.hcl=fn;var Ko=fn.prototype=new an;Ko.brighter=function(n){return new fn(this.h,this.c,Math.min(100,this.l+Qo*(arguments.length?n:1)))},Ko.darker=function(n){return new fn(this.h,this.c,Math.max(0,this.l-Qo*(arguments.length?n:1)))},Ko.rgb=function(){return sn(this.h,this.c,this.l).rgb()},ao.lab=hn;var Qo=18,na=.95047,ta=1,ea=1.08883,ra=hn.prototype=new an;ra.brighter=function(n){return new hn(Math.min(100,this.l+Qo*(arguments.length?n:1)),this.a,this.b)},ra.darker=function(n){return new hn(Math.max(0,this.l-Qo*(arguments.length?n:1)),this.a,this.b)},ra.rgb=function(){return pn(this.l,this.a,this.b)},ao.rgb=mn;var ia=mn.prototype=new an;ia.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),new mn(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mn(i,i,i)},ia.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mn(n*this.r,n*this.g,n*this.b)},ia.hsl=function(){return wn(this.r,this.g,this.b)},ia.toString=function(){return"#"+bn(this.r)+bn(this.g)+bn(this.b)};var ua=ao.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ua.forEach(function(n,t){ua.set(n,Mn(t))}),ao.functor=En,ao.xhr=An(m),ao.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var o=Cn(n,t,null==e?r:i(e),u);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:i(n)):e},o}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function u(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(f>=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++<c;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}f=e+2;var r=n.charCodeAt(e+1);return 13===r?(i=!0,10===n.charCodeAt(e+2)&&++f):10===r&&(i=!0),n.slice(t+1,e).replace(/""/g,'"')}for(;c>f;){var r=n.charCodeAt(f++),a=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(f)&&(++f,++a);else if(r!==l)continue;return n.slice(t,f-a)}return n.slice(t)}for(var r,i,u={},o={},a=[],c=n.length,f=0,s=0;(r=e())!==o;){for(var h=[];r!==u&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,s++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new y,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(u).join("\n")},e},ao.csv=ao.dsv(",","text/csv"),ao.tsv=ao.dsv(" ","text/tab-separated-values");var oa,aa,la,ca,fa=this[x(this,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ao.timer=function(){qn.apply(this,arguments)},ao.timer.flush=function(){Rn(),Dn()},ao.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var sa=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Un);ao.formatPrefix=function(n,t){var e=0;return(n=+n)&&(0>n&&(n*=-1),t&&(n=ao.round(n,Pn(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),sa[8+e/3]};var ha=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,pa=ao.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ao.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ga=ao.time={},va=Date;Hn.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){da.setUTCDate.apply(this._,arguments)},setDay:function(){da.setUTCDay.apply(this._,arguments)},setFullYear:function(){da.setUTCFullYear.apply(this._,arguments)},setHours:function(){da.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){da.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){da.setUTCMinutes.apply(this._,arguments)},setMonth:function(){da.setUTCMonth.apply(this._,arguments)},setSeconds:function(){da.setUTCSeconds.apply(this._,arguments)},setTime:function(){da.setTime.apply(this._,arguments)}};var da=Date.prototype;ga.year=On(function(n){return n=ga.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ga.years=ga.year.range,ga.years.utc=ga.year.utc.range,ga.day=On(function(n){var t=new va(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ga.days=ga.day.range,ga.days.utc=ga.day.utc.range,ga.dayOfYear=function(n){var t=ga.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ga[n]=On(function(n){return(n=ga.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ga[n+"s"]=e.range,ga[n+"s"].utc=e.utc.range,ga[n+"OfYear"]=function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)}}),ga.week=ga.sunday,ga.weeks=ga.sunday.range,ga.weeks.utc=ga.sunday.utc.range,ga.weekOfYear=ga.sundayOfYear;var ya={"-":"",_:" ",0:"0"},ma=/^\s*\d+/,Ma=/^%/;ao.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xa=ao.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], +shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ao.format=xa.numberFormat,ao.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,ba),st(ba.s,this.s,this),this.s?this.t+=ba.t:this.s=ba.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ba=new ft;ao.geo.stream=function(n,t){n&&_a.hasOwnProperty(n.type)?_a[n.type](n,t):ht(n,t)};var _a={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++r<i;)ht(e[r].geometry,t)}},wa={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){pt(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)pt(e[r],t,0)},Polygon:function(n,t){gt(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)gt(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,i=e.length;++r<i;)ht(e[r],t)}};ao.geo.area=function(n){return Sa=0,ao.geo.stream(n,Na),Sa};var Sa,ka=new ft,Na={sphere:function(){Sa+=4*Fo},point:b,lineStart:b,lineEnd:b,polygonStart:function(){ka.reset(),Na.lineStart=vt},polygonEnd:function(){var n=2*ka;Sa+=0>n?4*Fo+n:n,Na.lineStart=Na.lineEnd=Na.point=b}};ao.geo.bounds=function(){function n(n,t){M.push(x=[f=n,h=n]),s>t&&(s=t),t>p&&(p=t)}function t(t,e){var r=dt([t*Yo,e*Yo]);if(y){var i=mt(y,r),u=[i[1],-i[0],0],o=mt(u,i);bt(o),o=_t(o);var l=t-g,c=l>0?1:-1,v=o[0]*Zo*c,d=xo(l)>180;if(d^(v>c*g&&c*t>v)){var m=o[1]*Zo;m>p&&(p=m)}else if(v=(v+360)%360-180,d^(v>c*g&&c*t>v)){var m=-o[1]*Zo;s>m&&(s=m)}else s>e&&(s=e),e>p&&(p=e);d?g>t?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(f>t&&(f=t),t>h&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){b.point=t}function r(){x[0]=f,x[1]=h,b.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=xo(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Na.point(n,e),t(n,e)}function u(){Na.lineStart()}function o(){i(v,d),Na.lineEnd(),xo(m)>Uo&&(f=-(h=180)),x[0]=f,x[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var f,s,h,p,g,v,d,y,m,M,x,b={point:n,lineStart:e,lineEnd:r,polygonStart:function(){b.point=i,b.lineStart=u,b.lineEnd=o,m=0,Na.polygonStart()},polygonEnd:function(){Na.polygonEnd(),b.point=n,b.lineStart=e,b.lineEnd=r,0>ka?(f=-(h=180),s=-(p=90)):m>Uo?p=90:-Uo>m&&(s=-90),x[0]=f,x[1]=h}};return function(n){p=h=-(f=s=1/0),M=[],ao.geo.stream(n,b);var t=M.length;if(t){M.sort(l);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],c(e[0],i)||c(e[1],i)?(a(i[0],e[1])>a(i[0],i[1])&&(i[1]=e[1]),a(e[0],i[1])>a(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var o,e,g=-(1/0),t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(o=a(i[1],e[0]))>g&&(g=o,f=e[0],h=i[1])}return M=x=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),ao.geo.centroid=function(n){Ea=Aa=Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,ja);var t=Da,e=Pa,r=Ua,i=t*t+e*e+r*r;return jo>i&&(t=qa,e=Ta,r=Ra,Uo>Aa&&(t=Ca,e=za,r=La),i=t*t+e*e+r*r,jo>i)?[NaN,NaN]:[Math.atan2(e,t)*Zo,tn(r/Math.sqrt(i))*Zo]};var Ea,Aa,Ca,za,La,qa,Ta,Ra,Da,Pa,Ua,ja={sphere:b,point:St,lineStart:Nt,lineEnd:Et,polygonStart:function(){ja.lineStart=At},polygonEnd:function(){ja.lineStart=Nt}},Fa=Rt(zt,jt,Ht,[-Fo,-Fo/2]),Ha=1e9;ao.geo.clipExtent=function(){var n,t,e,r,i,u,o={stream:function(n){return i&&(i.valid=!1),i=u(n),i.valid=!0,i},extent:function(a){return arguments.length?(u=Zt(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),i&&(i.valid=!1,i=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ao.geo.conicEqualArea=function(){return Vt(Xt)}).raw=Xt,ao.geo.albers=function(){return ao.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ao.geo.albersUsa=function(){function n(n){var u=n[0],o=n[1];return t=null,e(u,o),t||(r(u,o),t)||i(u,o),t}var t,e,r,i,u=ao.geo.albers(),o=ao.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ao.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?o:i>=.166&&.234>i&&r>=-.214&&-.115>r?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Uo,s+.12*c+Uo],[f-.214*c-Uo,s+.234*c-Uo]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Uo,s+.166*c+Uo],[f-.115*c-Uo,s+.234*c-Uo]]).stream(l).point,n},n.scale(1070)};var Oa,Ia,Ya,Za,Va,Xa,$a={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Ia=0,$a.lineStart=$t},polygonEnd:function(){$a.lineStart=$a.lineEnd=$a.point=b,Oa+=xo(Ia/2)}},Ba={point:Bt,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Wa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Wa.lineStart=ne},polygonEnd:function(){Wa.point=Gt,Wa.lineStart=Kt,Wa.lineEnd=Qt}};ao.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),ao.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return Oa=0,ao.geo.stream(n,i($a)),Oa},n.centroid=function(n){return Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,i(Wa)),Ua?[Da/Ua,Pa/Ua]:Ra?[qa/Ra,Ta/Ra]:La?[Ca/La,za/La]:[NaN,NaN]},n.bounds=function(n){return Va=Xa=-(Ya=Za=1/0),ao.geo.stream(n,i(Ba)),[[Ya,Za],[Va,Xa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(ao.geo.albersUsa()).context(null)},ao.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ao.geo.projection=oe,ao.geo.projectionMutator=ae,(ao.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,ao.geo.rotation=function(n){function t(t){return t=n(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t}return n=se(n[0]%360*Yo,n[1]*Yo,n.length>2?n[2]*Yo:0),t.invert=function(t){return t=n.invert(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t},t},fe.invert=ce,ao.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Yo,-n[1]*Yo,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Zo,n[1]*=Zo}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=ve((t=+r)*Yo,i*Yo),n):t},n.precision=function(r){return arguments.length?(e=ve(t*Yo,(i=+r)*Yo),n):i},n.angle(90)},ao.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Yo,i=n[1]*Yo,u=t[1]*Yo,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},ao.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ao.range(Math.ceil(u/d)*d,i,d).map(h).concat(ao.range(Math.ceil(c/y)*y,l,y).map(p)).concat(ao.range(Math.ceil(r/g)*g,e,g).filter(function(n){return xo(n%d)>Uo}).map(f)).concat(ao.range(Math.ceil(a/v)*v,o,v).filter(function(n){return xo(n%y)>Uo}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,v=g,d=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],y=+t[1],n):[d,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],n):[g,v]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Uo],[180,90-Uo]]).minorExtent([[-180,-80-Uo],[180,80+Uo]])},ao.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Me,i=xe;return n.distance=function(){return ao.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ao.geo.interpolate=function(n,t){return be(n[0]*Yo,n[1]*Yo,t[0]*Yo,t[1]*Yo)},ao.geo.length=function(n){return Ja=0,ao.geo.stream(n,Ga),Ja};var Ja,Ga={sphere:b,point:b,lineStart:_e,lineEnd:b,polygonStart:b,polygonEnd:b},Ka=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ao.geo.azimuthalEqualArea=function(){return oe(Ka)}).raw=Ka;var Qa=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(ao.geo.azimuthalEquidistant=function(){return oe(Qa)}).raw=Qa,(ao.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(ao.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var nl=we(function(n){return 1/n},Math.atan);(ao.geo.gnomonic=function(){return oe(nl)}).raw=nl,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Io]},(ao.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var tl=we(function(){return 1},Math.asin);(ao.geo.orthographic=function(){return oe(tl)}).raw=tl;var el=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ao.geo.stereographic=function(){return oe(el)}).raw=el,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Io]},(ao.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,ao.geom={},ao.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;o>t;t++)a.push([+i.call(this,n[t],t),+u.call(this,n[t],t),t]);for(a.sort(qe),t=0;o>t;t++)l.push([a[t][0],-a[t][1]]);var c=Le(a),f=Le(l),s=f[0]===c[0],h=f[f.length-1]===c[c.length-1],p=[];for(t=c.length-1;t>=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t<f.length-h;++t)p.push(n[a[f[t]][2]]);return p}var e=Ce,r=ze;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},ao.geom.polygon=function(n){return ko(n,rl),n};var rl=ao.geom.polygon.prototype=[];rl.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],i=0;++t<e;)n=r,r=this[t],i+=n[1]*r[0]-n[0]*r[1];return.5*i},rl.centroid=function(n){var t,e,r=-1,i=this.length,u=0,o=0,a=this[i-1];for(arguments.length||(n=-1/(6*this.area()));++r<i;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],u+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[u*n,o*n]},rl.clip=function(n){for(var t,e,r,i,u,o,a=De(n),l=-1,c=this.length-De(this),f=this[c-1];++l<c;){for(t=n.slice(),n.length=0,i=this[l],u=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Te(o,f,i)?(Te(u,f,i)||n.push(Re(u,o,f,i)),n.push(o)):Te(u,f,i)&&n.push(Re(u,o,f,i)),u=o;a&&n.push(n[0]),f=i}return n};var il,ul,ol,al,ll,cl=[],fl=[];Ye.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Ve),t.length},tr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},er.prototype={insert:function(n,t){var e,r,i;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=or(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(i=r.R,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.R&&(ir(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ur(this,r))):(i=r.L,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.L&&(ur(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ir(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,i=n.U,u=n.L,o=n.R;if(e=u?o?or(o):u:o,i?i.L===n?i.L=e:i.R=e:this._=e,u&&o?(r=e.C,e.C=n.C,e.L=u,u.U=e,e!==o?(i=e.U,e.U=n.U,n=e.R,i.L=n,e.R=o,o.U=e):(e.U=i,i=e,n=e.R)):(r=n.C,n=e),n&&(n.U=i),!r){if(n&&n.C)return void(n.C=!1);do{if(n===this._)break;if(n===i.L){if(t=i.R,t.C&&(t.C=!1,i.C=!0,ir(this,i),t=i.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,ur(this,t),t=i.R),t.C=i.C,i.C=t.R.C=!1,ir(this,i),n=this._;break}}else if(t=i.L,t.C&&(t.C=!1,i.C=!0,ur(this,i),t=i.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,ir(this,t),t=i.L),t.C=i.C,i.C=t.L.C=!1,ur(this,i),n=this._;break}t.C=!0,n=i,i=i.U}while(!n.C);n&&(n.C=!1)}}},ao.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],i=a[0][1],u=a[1][0],o=a[1][1];return ar(e(n),a).cells.forEach(function(e,a){var l=e.edges,c=e.site,f=t[a]=l.length?l.map(function(n){var t=n.start();return[t.x,t.y]}):c.x>=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[];f.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Uo)*Uo,y:Math.round(o(n,t)/Uo)*Uo,i:t}})}var r=Ce,i=ze,u=r,o=i,a=sl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u,o=e.site,a=e.edges.sort(Ve),l=-1,c=a.length,f=a[c-1].edge,s=f.l===o?f.r:f.l;++l<c;)i=f,u=s,f=a[l].edge,s=f.l===o?f.r:f.l,r<u.i&&r<s.i&&cr(o,u,s)<0&&t.push([n[r],n[u.i],n[s.i]])}),t},t.x=function(n){return arguments.length?(u=En(r=n),t):r},t.y=function(n){return arguments.length?(o=En(i=n),t):i},t.clipExtent=function(n){return arguments.length?(a=null==n?sl:n,t):a===sl?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===sl?null:a&&a[1]},t)};var sl=[[-1e6,-1e6],[1e6,1e6]];ao.geom.delaunay=function(n){return ao.geom.voronoi().triangles(n)},ao.geom.quadtree=function(n,t,e,r,i){function u(n){function u(n,t,e,r,i,u,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var l=n.x,f=n.y;if(null!=l)if(xo(l-e)+xo(f-r)<.01)c(n,t,e,r,i,u,o,a);else{var s=n.point;n.x=n.y=n.point=null,c(n,s,l,f,i,u,o,a),c(n,t,e,r,i,u,o,a)}else n.x=e,n.y=r,n.point=t}else c(n,t,e,r,i,u,o,a)}function c(n,t,e,r,i,o,a,l){var c=.5*(i+a),f=.5*(o+l),s=e>=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]=hr()),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,v,d,y,m,M=En(a),x=En(l);if(null!=t)v=t,d=e,y=r,m=i;else if(y=m=-(v=d=1/0),s=[],h=[],g=n.length,o)for(p=0;g>p;++p)f=n[p],f.x<v&&(v=f.x),f.y<d&&(d=f.y),f.x>y&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;g>p;++p){var b=+M(f=n[p],p),_=+x(f,p);v>b&&(v=b),d>_&&(d=_),b>y&&(y=b),_>m&&(m=_),s.push(b),h.push(_)}var w=y-v,S=m-d;w>S?m=d+w:y=v+S;var k=hr();if(k.add=function(n){u(k,n,+M(n,++p),+x(n,p),v,d,y,m)},k.visit=function(n){pr(n,k,v,d,y,m)},k.find=function(n){return gr(k,n[0],n[1],v,d,y,m)},p=-1,null==t){for(;++p<g;)u(k,n[p],s[p],h[p],v,d,y,m);--p}else n.forEach(k.add);return s=h=n=f=null,k}var o,a=Ce,l=ze;return(o=arguments.length)?(a=fr,l=sr,3===o&&(i=e,r=t,e=t=0),u(n)):(u.x=function(n){return arguments.length?(a=n,u):a},u.y=function(n){return arguments.length?(l=n,u):l},u.extent=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],i=+n[1][1]),u):null==t?null:[[t,e],[r,i]]},u.size=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=e=0,r=+n[0],i=+n[1]),u):null==t?null:[r-t,i-e]},u)},ao.interpolateRgb=vr,ao.interpolateObject=dr,ao.interpolateNumber=yr,ao.interpolateString=mr;var hl=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,pl=new RegExp(hl.source,"g");ao.interpolate=Mr,ao.interpolators=[function(n,t){var e=typeof t;return("string"===e?ua.has(t.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(t)?vr:mr:t instanceof an?vr:Array.isArray(t)?xr:"object"===e&&isNaN(t)?dr:yr)(n,t)}],ao.interpolateArray=xr;var gl=function(){return m},vl=ao.map({linear:gl,poly:Er,quad:function(){return Sr},cubic:function(){return kr},sin:function(){return Ar},exp:function(){return Cr},circle:function(){return zr},elastic:Lr,back:qr,bounce:function(){return Tr}}),dl=ao.map({"in":m,out:_r,"in-out":wr,"out-in":function(n){return wr(_r(n))}});ao.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=vl.get(e)||gl,r=dl.get(r)||m,br(r(e.apply(null,lo.call(arguments,1))))},ao.interpolateHcl=Rr,ao.interpolateHsl=Dr,ao.interpolateLab=Pr,ao.interpolateRound=Ur,ao.transform=function(n){var t=fo.createElementNS(ao.ns.prefix.svg,"g");return(ao.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:yl)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var yl={a:1,b:0,c:0,d:1,e:0,f:0};ao.interpolateTransform=$r,ao.layout={},ao.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Jr(n[e]));return t}},ao.layout.chord=function(){function n(){var n,c,s,h,p,g={},v=[],d=ao.range(u),y=[];for(e=[],r=[],n=0,h=-1;++h<u;){for(c=0,p=-1;++p<u;)c+=i[h][p];v.push(c),y.push(ao.range(u)),n+=c}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&y.forEach(function(n,t){n.sort(function(n,e){return a(i[t][n],i[t][e])})}),n=(Ho-f*u)/n,c=0,h=-1;++h<u;){for(s=c,p=-1;++p<u;){var m=d[h],M=y[m][p],x=i[m][M],b=c,_=c+=x*n;g[m+"-"+M]={index:m,subindex:M,startAngle:b,endAngle:_,value:x}}r[m]={index:m,startAngle:s,endAngle:c,value:v[m]},c+=f}for(h=-1;++h<u;)for(p=h-1;++p<u;){var w=g[h+"-"+p],S=g[p+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}l&&t()}function t(){e.sort(function(n,t){return l((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,i,u,o,a,l,c={},f=0;return c.matrix=function(n){return arguments.length?(u=(i=n)&&i.length,e=r=null,c):i},c.padding=function(n){return arguments.length?(f=n,e=r=null,c):f},c.sortGroups=function(n){return arguments.length?(o=n,e=r=null,c):o},c.sortSubgroups=function(n){return arguments.length?(a=n,e=null,c):a},c.sortChords=function(n){return arguments.length?(l=n,e&&t(),c):l},c.chords=function(){return e||n(),e},c.groups=function(){return r||n(),r},c},ao.layout.force=function(){function n(n){return function(t,e,r,i){if(t.point!==n){var u=t.cx-n.x,o=t.cy-n.y,a=i-e,l=u*u+o*o;if(l>a*a/y){if(v>l){var c=t.charge/l;n.px-=u*c,n.py-=o*c}return!0}if(t.point&&l&&v>l){var c=t.pointCharge/l;n.px-=u*c,n.py-=o*c}}return!t.charge}}function t(n){n.px=ao.event.x,n.py=ao.event.y,l.resume()}var e,r,i,u,o,a,l={},c=ao.dispatch("start","tick","end"),f=[1,1],s=.9,h=ml,p=Ml,g=-30,v=xl,d=.1,y=.64,M=[],x=[];return l.tick=function(){if((i*=.99)<.005)return e=null,c.end({type:"end",alpha:i=0}),!0;var t,r,l,h,p,v,y,m,b,_=M.length,w=x.length;for(r=0;w>r;++r)l=x[r],h=l.source,p=l.target,m=p.x-h.x,b=p.y-h.y,(v=m*m+b*b)&&(v=i*o[r]*((v=Math.sqrt(v))-u[r])/v,m*=v,b*=v,p.x-=m*(y=h.weight+p.weight?h.weight/(h.weight+p.weight):.5),p.y-=b*y,h.x+=m*(y=1-y),h.y+=b*y);if((y=i*d)&&(m=f[0]/2,b=f[1]/2,r=-1,y))for(;++r<_;)l=M[r],l.x+=(m-l.x)*y,l.y+=(b-l.y)*y;if(g)for(ri(t=ao.geom.quadtree(M),i,a),r=-1;++r<_;)(l=M[r]).fixed||t.visit(n(l));for(r=-1;++r<_;)l=M[r],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*s,l.y-=(l.py-(l.py=l.y))*s);c.tick({type:"tick",alpha:i})},l.nodes=function(n){return arguments.length?(M=n,l):M},l.links=function(n){return arguments.length?(x=n,l):x},l.size=function(n){return arguments.length?(f=n,l):f},l.linkDistance=function(n){return arguments.length?(h="function"==typeof n?n:+n,l):h},l.distance=l.linkDistance,l.linkStrength=function(n){return arguments.length?(p="function"==typeof n?n:+n,l):p},l.friction=function(n){return arguments.length?(s=+n,l):s},l.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,l):g},l.chargeDistance=function(n){return arguments.length?(v=n*n,l):Math.sqrt(v)},l.gravity=function(n){return arguments.length?(d=+n,l):d},l.theta=function(n){return arguments.length?(y=n*n,l):Math.sqrt(y)},l.alpha=function(n){return arguments.length?(n=+n,i?n>0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;i>l;++l)e[l]=[];for(l=0;c>l;++l){var u=x[l];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var o,a=e[t],l=-1,f=a.length;++l<f;)if(!isNaN(o=a[l][n]))return o;return Math.random()*r}var t,e,r,i=M.length,c=x.length,s=f[0],v=f[1];for(t=0;i>t;++t)(r=M[t]).index=t,r.weight=0;for(t=0;c>t;++t)r=x[t],"number"==typeof r.source&&(r.source=M[r.source]),"number"==typeof r.target&&(r.target=M[r.target]),++r.source.weight,++r.target.weight;for(t=0;i>t;++t)r=M[t],isNaN(r.x)&&(r.x=n("x",s)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof h)for(t=0;c>t;++t)u[t]=+h.call(this,x[t],t);else for(t=0;c>t;++t)u[t]=h;if(o=[],"function"==typeof p)for(t=0;c>t;++t)o[t]=+p.call(this,x[t],t);else for(t=0;c>t;++t)o[t]=p;if(a=[],"function"==typeof g)for(t=0;i>t;++t)a[t]=+g.call(this,M[t],t);else for(t=0;i>t;++t)a[t]=g;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){return r||(r=ao.behavior.drag().origin(m).on("dragstart.force",Qr).on("drag.force",t).on("dragend.force",ni)),arguments.length?void this.on("mouseover.force",ti).on("mouseout.force",ei).call(r):r},ao.rebind(l,c,"on")};var ml=20,Ml=1,xl=1/0;ao.layout.hierarchy=function(){function n(i){var u,o=[i],a=[];for(i.depth=0;null!=(u=o.pop());)if(a.push(u),(c=e.call(n,u,u.depth))&&(l=c.length)){for(var l,c,f;--l>=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return oi(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=ci,e=ai,r=li;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ui(t,function(n){n.children&&(n.value=0)}),oi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ao.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++c<o;)n(a=u[c],e,l=a.value*r,i),e+=l}}function t(n){var e=n.children,r=0;if(e&&(i=e.length))for(var i,u=-1;++u<i;)r=Math.max(r,t(e[u]));return 1+r}function e(e,u){var o=r.call(this,e,u);return n(o[0],0,i[0],i[1]/t(o[0])),o}var r=ao.layout.hierarchy(),i=[1,1];return e.size=function(n){return arguments.length?(i=n,e):i},ii(e,r)},ao.layout.pie=function(){function n(o){var a,l=o.length,c=o.map(function(e,r){return+t.call(n,e,r)}),f=+("function"==typeof r?r.apply(this,arguments):r),s=("function"==typeof i?i.apply(this,arguments):i)-f,h=Math.min(Math.abs(s)/l,+("function"==typeof u?u.apply(this,arguments):u)),p=h*(0>s?-1:1),g=ao.sum(c),v=g?(s-l*p)/g:0,d=ao.range(l),y=[];return null!=e&&d.sort(e===bl?function(n,t){return c[t]-c[n]}:function(n,t){return e(o[n],o[t])}),d.forEach(function(n){y[n]={data:o[n],value:a=c[n],startAngle:f,endAngle:f+=a*v+p,padAngle:h}}),y}var t=Number,e=bl,r=0,i=Ho,u=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n.padAngle=function(t){return arguments.length?(u=t,n):u},n};var bl={};ao.layout.stack=function(){function n(a,l){if(!(h=a.length))return a;var c=a.map(function(e,r){return t.call(n,e,r)}),f=c.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),o.call(n,t,e)]})}),s=e.call(n,f,l);c=ao.permute(c,s),f=ao.permute(f,s);var h,p,g,v,d=r.call(n,f,l),y=c[0].length;for(g=0;y>g;++g)for(i.call(n,c[0][g],v=d[g],f[0][g][1]),p=1;h>p;++p)i.call(n,c[p][g],v+=f[p-1][g][1],f[p][g][1]);return a}var t=m,e=gi,r=vi,i=pi,u=si,o=hi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:_l.get(t)||gi,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:wl.get(t)||vi,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(i=t,n):i},n};var _l=ao.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(di),u=n.map(yi),o=ao.range(r).sort(function(n,t){return i[n]-i[t]}),a=0,l=0,c=[],f=[];for(t=0;r>t;++t)e=o[t],l>a?(a+=u[e],c.push(e)):(l+=u[e],f.push(e));return f.reverse().concat(c)},reverse:function(n){return ao.range(n.length).reverse()},"default":gi}),wl=ao.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,o=[],a=0,l=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;u>e;++e)l[e]=(a-o[e])/2;return l},wiggle:function(n){var t,e,r,i,u,o,a,l,c,f=n.length,s=n[0],h=s.length,p=[];for(p[0]=l=c=0,e=1;h>e;++e){for(t=0,i=0;f>t;++t)i+=n[t][e][1];for(t=0,u=0,a=s[e][0]-s[e-1][0];f>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;u+=o*n[t][e][1]}p[e]=l-=i?u/i*a:0,c>l&&(c=l)}for(e=0;h>e;++e)p[e]-=c;return p},expand:function(n){var t,e,r,i=n.length,u=n[0].length,o=1/i,a=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=o}for(e=0;u>e;++e)a[e]=0;return a},zero:vi});ao.layout.histogram=function(){function n(n,u){for(var o,a,l=[],c=n.map(e,this),f=r.call(this,c,u),s=i.call(this,f,c,u),u=-1,h=c.length,p=s.length-1,g=t?1:1/h;++u<p;)o=l[u]=[],o.dx=s[u+1]-(o.x=s[u]),o.y=0;if(p>0)for(u=-1;++u<h;)a=c[u],a>=f[0]&&a<=f[1]&&(o=l[ao.bisect(s,a,1,p)-1],o.y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=bi,i=Mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ao.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,oi(a,function(n){n.r=+f(n.value)}),oi(a,Ni),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;oi(a,function(n){n.r+=s}),oi(a,Ni),oi(a,function(n){n.r-=s})}return Ci(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=ao.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ii(n,e)},ao.layout.tree=function(){function n(n,i){var f=o.call(this,n,i),s=f[0],h=t(s);if(oi(h,e),h.parent.m=-h.z,ui(h,r),c)ui(s,u);else{var p=s,g=s,v=s;ui(s,function(n){n.x<p.x&&(p=n),n.x>g.x&&(g=n),n.depth>v.depth&&(v=n)});var d=a(p,g)/2-p.x,y=l[0]/(g.x+a(g,p)/2+d),m=l[1]/(v.depth||1);ui(s,function(n){n.x=(n.x+d)*y,n.y=n.depth*m})}return f}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var i,u=t.children,o=0,a=u.length;a>o;++o)r.push((u[o]=i={_:u[o],parent:t,children:(i=u[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Di(n);var u=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-u):n.z=u}else r&&(n.z=r.z+a(n._,r._));n.parent.A=i(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function i(n,t,e){if(t){for(var r,i=n,u=n,o=t,l=i.parent.children[0],c=i.m,f=u.m,s=o.m,h=l.m;o=Ti(o),i=qi(i),o&&i;)l=qi(l),u=Ti(u),u.a=n,r=o.z+s-i.z-c+a(o._,i._),r>0&&(Ri(Pi(o,n,e),n,r),c+=r,f+=r),s+=o.m,c+=i.m,h+=l.m,f+=u.m;o&&!Ti(u)&&(u.t=o,u.m+=s-f),i&&!qi(l)&&(l.t=i,l.m+=c-h,e=n)}return e}function u(n){n.x*=l[0],n.y=n.depth*l[1]}var o=ao.layout.hierarchy().sort(null).value(null),a=Li,l=[1,1],c=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(c=null==(l=t)?u:null,n):c?null:l},n.nodeSize=function(t){return arguments.length?(c=null==(l=t)?null:u,n):c?l:null},ii(n,o)},ao.layout.cluster=function(){function n(n,u){var o,a=t.call(this,n,u),l=a[0],c=0;oi(l,function(n){var t=n.children;t&&t.length?(n.x=ji(t),n.y=Ui(t)):(n.x=o?c+=e(n,o):0,n.y=0,o=n)});var f=Fi(l),s=Hi(l),h=f.x-e(f,s)/2,p=s.x+e(s,f)/2;return oi(l,i?function(n){n.x=(n.x-l.x)*r[0],n.y=(l.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(p-h)*r[0],n.y=(1-(l.y?n.y/l.y:1))*r[1]}),a}var t=ao.layout.hierarchy().sort(null).value(null),e=Li,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ii(n,t)},ao.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++i<u;)r=(e=n[i]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var o,a,l,c=s(e),f=[],h=u.slice(),g=1/0,v="slice"===p?c.dx:"dice"===p?c.dy:"slice-dice"===p?1&e.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(n(h,c.dx*c.dy/e.value),f.area=0;(l=h.length)>0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,v))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,v,c,!1),v=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,v,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(u>e&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0; +if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++u<o;)i=n[u],i.x=a,i.y=c,i.dy=f,a+=i.dx=Math.min(e.x+e.dx-a,f?l(i.area/f):0);i.z=!0,i.dx+=e.x+e.dx-a,e.y+=f,e.dy-=f}else{for((r||f>e.dx)&&(f=e.dx);++u<o;)i=n[u],i.x=a,i.y=c,i.dx=f,c+=i.dy=Math.min(e.y+e.dy-c,f?l(i.area/f):0);i.z=!1,i.dy+=e.y+e.dy-c,e.x+=f,e.dx-=f}}function u(r){var i=o||a(r),u=i[0];return u.x=u.y=0,u.value?(u.dx=c[0],u.dy=c[1]):u.dx=u.dy=0,o&&a.revalue(u),n([u],u.dx*u.dy/u.value),(o?e:t)(u),h&&(o=i),i}var o,a=ao.layout.hierarchy(),l=Math.round,c=[1,1],f=null,s=Oi,h=!1,p="squarify",g=.5*(1+Math.sqrt(5));return u.size=function(n){return arguments.length?(c=n,u):c},u.padding=function(n){function t(t){var e=n.call(u,t,t.depth);return null==e?Oi(t):Ii(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return Ii(t,n)}if(!arguments.length)return f;var r;return s=null==(f=n)?Oi:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,u},u.round=function(n){return arguments.length?(l=n?Math.round:Number,u):l!=Number},u.sticky=function(n){return arguments.length?(h=n,o=null,u):h},u.ratio=function(n){return arguments.length?(g=n,u):g},u.mode=function(n){return arguments.length?(p=n+"",u):p},ii(u,a)},ao.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ao.random.normal.apply(ao,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ao.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ao.scale={};var Sl={floor:m,ceil:m};ao.scale.linear=function(){return Wi([0,1],[0,1],Mr,!1)};var kl={s:1,g:1,p:1,r:1,e:1};ao.scale.log=function(){return ru(ao.scale.linear().domain([0,1]),10,!0,[1,10])};var Nl=ao.format(".0e"),El={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ao.scale.pow=function(){return iu(ao.scale.linear(),1,[0,1])},ao.scale.sqrt=function(){return ao.scale.pow().exponent(.5)},ao.scale.ordinal=function(){return ou([],{t:"range",a:[[]]})},ao.scale.category10=function(){return ao.scale.ordinal().range(Al)},ao.scale.category20=function(){return ao.scale.ordinal().range(Cl)},ao.scale.category20b=function(){return ao.scale.ordinal().range(zl)},ao.scale.category20c=function(){return ao.scale.ordinal().range(Ll)};var Al=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(xn),Cl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(xn),zl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(xn),Ll=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(xn);ao.scale.quantile=function(){return au([],[])},ao.scale.quantize=function(){return lu(0,1,[0,1])},ao.scale.threshold=function(){return cu([.5],[0,1])},ao.scale.identity=function(){return fu([0,1])},ao.svg={},ao.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),f=o.apply(this,arguments)-Io,s=a.apply(this,arguments)-Io,h=Math.abs(s-f),p=f>s?0:1;if(n>c&&(g=c,c=n,n=g),h>=Oo)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,v,d,y,m,M,x,b,_,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(d=u===ql?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(d/c*Math.sin(y))),n&&(N=tn(d/n*Math.sin(y)))),c){m=c*Math.cos(f+E),M=c*Math.sin(f+E),x=c*Math.cos(s-E),b=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Fo?0:1;if(E&&yu(m,M,x,b)===p^C){var z=(f+s)/2;m=c*Math.cos(z),M=c*Math.sin(z),x=b=null}}else m=M=0;if(n){_=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Fo?0:1;if(N&&yu(_,w,S,k)===1-p^L){var q=(f+s)/2;_=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else _=w=0;if(h>Uo&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){v=c>n^p?0:1;var T=g,R=g;if(Fo>h){var D=null==S?[_,w]:null==x?[m,M]:Re([m,M],[S,k],[x,b],[_,w]),P=m-D[0],U=M-D[1],j=x-D[0],F=b-D[1],H=1/Math.sin(Math.acos((P*j+U*F)/(Math.sqrt(P*P+U*U)*Math.sqrt(j*j+F*F)))/2),O=Math.sqrt(D[0]*D[0]+D[1]*D[1]);R=Math.min(g,(n-O)/(H-1)),T=Math.min(g,(c-O)/(H+1))}if(null!=x){var I=mu(null==S?[_,w]:[S,k],[m,M],c,T,p),Y=mu([x,b],[_,w],c,T,p);g===T?A.push("M",I[0],"A",T,",",T," 0 0,",v," ",I[1],"A",c,",",c," 0 ",1-p^yu(I[1][0],I[1][1],Y[1][0],Y[1][1]),",",p," ",Y[1],"A",T,",",T," 0 0,",v," ",Y[0]):A.push("M",I[0],"A",T,",",T," 0 1,",v," ",Y[0])}else A.push("M",m,",",M);if(null!=S){var Z=mu([m,M],[S,k],n,-R,p),V=mu([_,w],null==x?[m,M]:[x,b],n,-R,p);g===R?A.push("L",V[0],"A",R,",",R," 0 0,",v," ",V[1],"A",n,",",n," 0 ",p^yu(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-p," ",Z[1],"A",R,",",R," 0 0,",v," ",Z[0]):A.push("L",V[0],"A",R,",",R," 0 0,",v," ",Z[0])}else A.push("L",_,",",w)}else A.push("M",m,",",M),null!=x&&A.push("A",c,",",c," 0 ",C,",",p," ",x,",",b),A.push("L",_,",",w),null!=S&&A.push("A",n,",",n," 0 ",L,",",1-p," ",S,",",k);return A.push("Z"),A.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=hu,r=pu,i=su,u=ql,o=gu,a=vu,l=du;return n.innerRadius=function(t){return arguments.length?(e=En(t),n):e},n.outerRadius=function(t){return arguments.length?(r=En(t),n):r},n.cornerRadius=function(t){return arguments.length?(i=En(t),n):i},n.padRadius=function(t){return arguments.length?(u=t==ql?ql:En(t),n):u},n.startAngle=function(t){return arguments.length?(o=En(t),n):o},n.endAngle=function(t){return arguments.length?(a=En(t),n):a},n.padAngle=function(t){return arguments.length?(l=En(t),n):l},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-Io;return[Math.cos(t)*n,Math.sin(t)*n]},n};var ql="auto";ao.svg.line=function(){return Mu(m)};var Tl=ao.map({linear:xu,"linear-closed":bu,step:_u,"step-before":wu,"step-after":Su,basis:zu,"basis-open":Lu,"basis-closed":qu,bundle:Tu,cardinal:Eu,"cardinal-open":ku,"cardinal-closed":Nu,monotone:Fu});Tl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Rl=[0,2/3,1/3,0],Dl=[0,1/3,2/3,0],Pl=[0,1/6,2/3,1/6];ao.svg.line.radial=function(){var n=Mu(Hu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},wu.reverse=Su,Su.reverse=wu,ao.svg.area=function(){return Ou(m)},ao.svg.area.radial=function(){var n=Ou(Hu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ao.svg.chord=function(){function n(n,a){var l=t(this,u,n,a),c=t(this,o,n,a);return"M"+l.p0+r(l.r,l.p1,l.a1-l.a0)+(e(l,c)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,l.r,l.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=a.call(n,i,r),o=l.call(n,i,r)-Io,f=c.call(n,i,r)-Io;return{r:u,a0:o,a1:f,p0:[u*Math.cos(o),u*Math.sin(o)],p1:[u*Math.cos(f),u*Math.sin(f)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Fo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Me,o=xe,a=Iu,l=gu,c=vu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},ao.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=Me,e=xe,r=Yu;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ao.svg.diagonal.radial=function(){var n=ao.svg.diagonal(),t=Yu,e=n.projection;return n.projection=function(n){return arguments.length?e(Zu(t=n)):t},n},ao.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$u)(e.call(this,n,r))}var t=Xu,e=Vu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=ao.map({circle:$u,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ao.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Yo);Co.transition=function(n){for(var t,e,r=Hl||++Zl,i=Ku(n),u=[],o=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},a=-1,l=this.length;++a<l;){u.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(e=c[f])&&Qu(e,f,i,r,o),t.push(e)}return Wu(u,i,r)},Co.interrupt=function(n){return this.each(null==n?Il:Bu(Ku(n)))};var Hl,Ol,Il=Bu(Ku()),Yl=[],Zl=0;Yl.call=Co.call,Yl.empty=Co.empty,Yl.node=Co.node,Yl.size=Co.size,ao.transition=function(n,t){return n&&n.transition?Hl?n.transition(t):n:ao.selection().transition(n)},ao.transition.prototype=Yl,Yl.select=function(n){var t,e,r,i=this.id,u=this.namespace,o=[];n=A(n);for(var a=-1,l=this.length;++a<l;){o.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(r=c[f])&&(e=n.call(r,r.__data__,f,a))?("__data__"in r&&(e.__data__=r.__data__),Qu(e,f,u,i,r[u][i]),t.push(e)):t.push(null)}return Wu(o,u,i)},Yl.selectAll=function(n){var t,e,r,i,u,o=this.id,a=this.namespace,l=[];n=C(n);for(var c=-1,f=this.length;++c<f;)for(var s=this[c],h=-1,p=s.length;++h<p;)if(r=s[h]){u=r[a][o],e=n.call(r,r.__data__,h,c),l.push(t=[]);for(var g=-1,v=e.length;++g<v;)(i=e[g])&&Qu(i,g,a,o,u),t.push(i)}return Wu(l,a,o)},Yl.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]);for(var e=this[u],a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return Wu(i,this.namespace,this.id)},Yl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):Y(this,null==t?function(t){t[r][e].tween.remove(n)}:function(i){i[r][e].tween.set(n,t)})},Yl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?$r:Mr,a=ao.ns.qualify(n);return Ju(this,"attr."+n,t,a.local?u:i)},Yl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=ao.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},Yl.style=function(n,e,r){function i(){this.style.removeProperty(n)}function u(e){return null==e?i:(e+="",function(){var i,u=t(this).getComputedStyle(this,null).getPropertyValue(n);return u!==e&&(i=Mr(u,e),function(t){this.style.setProperty(n,i(t),r)})})}var o=arguments.length;if(3>o){if("string"!=typeof n){2>o&&(e="");for(r in n)this.style(r,n[r],e);return this}r=""}return Ju(this,"style."+n,e,u)},Yl.styleTween=function(n,e,r){function i(i,u){var o=e.call(this,i,u,t(this).getComputedStyle(this,null).getPropertyValue(n));return o&&function(t){this.style.setProperty(n,o(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+n,i)},Yl.text=function(n){return Ju(this,"text",n,Gu)},Yl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Yl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ao.ease.apply(ao,arguments)),Y(this,function(r){r[e][t].ease=n}))},Yl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:Y(this,"function"==typeof n?function(r,i,u){r[e][t].delay=+n.call(r,r.__data__,i,u)}:(n=+n,function(r){r[e][t].delay=n}))},Yl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:Y(this,"function"==typeof n?function(r,i,u){r[e][t].duration=Math.max(1,n.call(r,r.__data__,i,u))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Yl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var i=Ol,u=Hl;try{Hl=e,Y(this,function(t,i,u){Ol=t[r][e],n.call(t,t.__data__,i,u)})}finally{Ol=i,Hl=u}}else Y(this,function(i){var u=i[r][e];(u.event||(u.event=ao.dispatch("start","end","interrupt"))).on(n,t)});return this},Yl.transition=function(){for(var n,t,e,r,i=this.id,u=++Zl,o=this.namespace,a=[],l=0,c=this.length;c>l;l++){a.push(n=[]);for(var t=this[l],f=0,s=t.length;s>f;f++)(e=t[f])&&(r=e[o][i],Qu(e,f,o,u,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Wu(a,o,u)},ao.svg.axis=function(){function n(n){n.each(function(){var n,c=ao.select(this),f=this.__chart__||e,s=this.__chart__=e.copy(),h=null==l?s.ticks?s.ticks.apply(s,a):s.domain():l,p=null==t?s.tickFormat?s.tickFormat.apply(s,a):m:t,g=c.selectAll(".tick").data(h,s),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",Uo),d=ao.transition(g.exit()).style("opacity",Uo).remove(),y=ao.transition(g.order()).style("opacity",1),M=Math.max(i,0)+o,x=Zi(s),b=c.selectAll(".domain").data([0]),_=(b.enter().append("path").attr("class","domain"),ao.transition(b));v.append("line"),v.append("text");var w,S,k,N,E=v.select("line"),A=y.select("line"),C=g.select("text").text(p),z=v.select("text"),L=y.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=no,w="x",k="y",S="x2",N="y2",C.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+q*u+"V0H"+x[1]+"V"+q*u)):(n=to,w="y",k="x",S="y2",N="x2",C.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),_.attr("d","M"+q*u+","+x[0]+"H0V"+x[1]+"H"+q*u)),E.attr(N,q*i),z.attr(k,q*M),A.attr(S,0).attr(N,q*i),L.attr(w,0).attr(k,q*M),s.rangeBand){var T=s,R=T.rangeBand()/2;f=s=function(n){return T(n)+R}}else f.rangeBand?f=s:d.call(n,s,f);v.call(n,f,s),y.call(n,s,s)})}var t,e=ao.scale.linear(),r=Vl,i=6,u=6,o=3,a=[10],l=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xl?t+"":Vl,n):r},n.ticks=function(){return arguments.length?(a=co(arguments),n):a},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(i=+t,u=+arguments[e-1],n):i},n.innerTickSize=function(t){return arguments.length?(i=+t,n):i},n.outerTickSize=function(t){return arguments.length?(u=+t,n):u},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Vl="bottom",Xl={top:1,right:1,bottom:1,left:1};ao.svg.brush=function(){function n(t){t.each(function(){var t=ao.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=t.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=t.selectAll(".resize").data(v,m);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return $l[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,s=ao.transition(t),h=ao.transition(o);c&&(l=Zi(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),r(s)),f&&(l=Zi(f),h.attr("y",l[0]).attr("height",l[1]-l[0]),i(s)),e(s)})}function e(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+h[+/^s/.test(n)]+")"})}function r(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==ao.event.keyCode&&(C||(M=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function v(){32==ao.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function d(){var n=ao.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ao.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0]<M[0])],L[1]=h[+(n[1]<M[1])]):M=null),E&&y(n,c,0)&&(r(k),t=!0),A&&y(n,f,1)&&(i(k),t=!0),t&&(e(k),w({type:"brush",mode:C?"move":"resize"}))}function y(n,t,e){var r,i,u=Zi(t),l=u[0],c=u[1],f=L[e],v=e?h:s,d=v[1]-v[0];return C&&(l-=f,c-=d+f),r=(e?g:p)?Math.max(l,Math.min(c,n[e])):n[e],C?i=(r+=f)+d:(M&&(f=Math.max(l,Math.min(c,2*M[e]-r))),r>f?(i=r,r=f):i=f),v[0]!=r||v[1]!=i?(e?a=null:o=null,v[0]=r,v[1]=i,!0):void 0}function m(){d(),k.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ao.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),z(),w({type:"brushend"})}var M,x,b=this,_=ao.select(ao.event.target),w=l.of(b,arguments),k=ao.select(b),N=_.datum(),E=!/^(n|s)$/.test(N)&&c,A=!/^(e|w)$/.test(N)&&f,C=_.classed("extent"),z=W(b),L=ao.mouse(b),q=ao.select(t(b)).on("keydown.brush",u).on("keyup.brush",v);if(ao.event.changedTouches?q.on("touchmove.brush",d).on("touchend.brush",m):q.on("mousemove.brush",d).on("mouseup.brush",m),k.interrupt().selectAll("*").interrupt(),C)L[0]=s[0]-L[0],L[1]=h[0]-L[1];else if(N){var T=+/w$/.test(N),R=+/^n/.test(N);x=[s[1-T]-L[0],h[1-R]-L[1]],L[0]=s[T],L[1]=h[R]}else ao.event.altKey&&(M=L.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),ao.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),d()}var o,a,l=N(n,"brushstart","brush","brushend"),c=null,f=null,s=[0,0],h=[0,0],p=!0,g=!0,v=Bl[0];return n.event=function(n){n.each(function(){var n=l.of(this,arguments),t={x:s,y:h,i:o,j:a},e=this.__chart__||t;this.__chart__=t,Hl?ao.select(this).transition().each("start.brush",function(){o=e.i,a=e.j,s=e.x,h=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=xr(s,t.x),r=xr(h,t.y);return o=a=null,function(i){s=t.x=e(i),h=t.y=r(i),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=t.i,a=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,v=Bl[!c<<1|!f],n):c},n.y=function(t){return arguments.length?(f=t,v=Bl[!c<<1|!f],n):f},n.clamp=function(t){return arguments.length?(c&&f?(p=!!t[0],g=!!t[1]):c?p=!!t:f&&(g=!!t),n):c&&f?[p,g]:c?p:f?g:null},n.extent=function(t){var e,r,i,u,l;return arguments.length?(c&&(e=t[0],r=t[1],f&&(e=e[0],r=r[0]),o=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(l=e,e=r,r=l),e==s[0]&&r==s[1]||(s=[e,r])),f&&(i=t[0],u=t[1],c&&(i=i[1],u=u[1]),a=[i,u],f.invert&&(i=f(i),u=f(u)),i>u&&(l=i,i=u,u=l),i==h[0]&&u==h[1]||(h=[i,u])),n):(c&&(o?(e=o[0],r=o[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(l=e,e=r,r=l))),f&&(a?(i=a[0],u=a[1]):(i=h[0],u=h[1],f.invert&&(i=f.invert(i),u=f.invert(u)),i>u&&(l=i,i=u,u=l))),c&&f?[[e,i],[r,u]]:c?[e,r]:f&&[i,u])},n.clear=function(){return n.empty()||(s=[0,0],h=[0,0],o=a=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!f&&h[0]==h[1]},ao.rebind(n,l,"on")};var $l={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Bl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Wl=ga.format=xa.timeFormat,Jl=Wl.utc,Gl=Jl("%Y-%m-%dT%H:%M:%S.%LZ");Wl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?eo:Gl,eo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},eo.toString=Gl.toString,ga.second=On(function(n){return new va(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ga.seconds=ga.second.range,ga.seconds.utc=ga.second.utc.range,ga.minute=On(function(n){return new va(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ga.minutes=ga.minute.range,ga.minutes.utc=ga.minute.utc.range,ga.hour=On(function(n){var t=n.getTimezoneOffset()/60;return new va(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ga.hours=ga.hour.range,ga.hours.utc=ga.hour.utc.range,ga.month=On(function(n){return n=ga.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ga.months=ga.month.range,ga.months.utc=ga.month.utc.range;var Kl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ql=[[ga.second,1],[ga.second,5],[ga.second,15],[ga.second,30],[ga.minute,1],[ga.minute,5],[ga.minute,15],[ga.minute,30],[ga.hour,1],[ga.hour,3],[ga.hour,6],[ga.hour,12],[ga.day,1],[ga.day,2],[ga.week,1],[ga.month,1],[ga.month,3],[ga.year,1]],nc=Wl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",zt]]),tc={range:function(n,t,e){return ao.range(Math.ceil(n/e)*e,+t,e).map(io)},floor:m,ceil:m};Ql.year=ga.year,ga.scale=function(){return ro(ao.scale.linear(),Ql,nc)};var ec=Ql.map(function(n){return[n[0].utc,n[1]]}),rc=Jl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",zt]]);ec.year=ga.year.utc,ga.scale.utc=function(){return ro(ao.scale.linear(),ec,rc)},ao.text=An(function(n){return n.responseText}),ao.json=function(n,t){return Cn(n,"application/json",uo,t)},ao.html=function(n,t){return Cn(n,"text/html",oo,t)},ao.xml=An(function(n){return n.responseXML}),"function"==typeof define&&define.amd?(this.d3=ao,define(ao)):"object"==typeof module&&module.exports?module.exports=ao:this.d3=ao}();},{}], +2:[function(require,module,exports){ +"use strict"; + +var d3 = require('d3'); + + +//aigner: functions for drawing expand- and collapse-symbols +function drawExpandSymbol(aCircle, line1, line2) +{ + aCircle = aCircle + .attr("r", 10) + .style("stroke", "black") + .style("stroke-width", 2) + .style("fill", "green") + .style("fill-opacity", .6) + line1 = line1 + .attr("x1", parseFloat(aCircle.attr("cx"))-5) + .attr("y1", parseFloat(aCircle.attr("cy"))) + .attr("x2", parseFloat(aCircle.attr("cx"))+5) + .attr("y2", parseFloat(aCircle.attr("cy"))) + .style("stroke", "black") + .style("stroke-width", 2); + line2 = line2 + .attr("x1", parseFloat(aCircle.attr("cx"))) + .attr("y1", parseFloat(aCircle.attr("cy"))-5) + .attr("x2", parseFloat(aCircle.attr("cx"))) + .attr("y2", parseFloat(aCircle.attr("cy"))+5) + .style("stroke", "black") + .style("stroke-width", 2); +} +function drawRemoveSymbol(anXdsm, aCircle, aMinus) +{ + var xOffset=150; + var yOffset=12; + aCircle = aCircle + .attr("cx", anXdsm.svg.attr("width")-xOffset) + .attr("cy", yOffset) + .attr("r", 10) + .classed("remCircle",true) + aMinus = aMinus + .attr("x1", anXdsm.svg.attr("width")-xOffset+5) + .attr("y1", yOffset) + .attr("x2", anXdsm.svg.attr("width")-xOffset-5) + .attr("y2", yOffset) + .classed("remMinus",true) +} +d3.contextMenu = function (menu, openCallback) { + + // create the div element that will hold the context menu + d3.selectAll('.d3-context-menu').data([1]) + .enter() + .append('div') + .attr('class', 'd3-context-menu'); + + // close menu + d3.select('body').on('click.d3-context-menu', function() { + d3.select('.d3-context-menu').style('display', 'none'); + }); + + // this gets executed when a contextmenu event occurs + return function(data, index) { + var elm = this; + + d3.selectAll('.d3-context-menu').html(''); + var list = d3.selectAll('.d3-context-menu').append('ul'); + list.selectAll('li').data(menu).enter() + .append('li') + .html(function(d) { + return d.title; + }) + .on('mousedown', function(d, i) { + d.onMouseDown(elm, data, index); + }) + .on('mouseup', function(d, i) { + d.onMouseUp(elm, data, index); + d3.select('.d3-context-menu').style('display', 'none'); + }) + .on('mouseenter',function(d,i){ + d.onMouseOver(elm,data,index); + if(d.childrenItems.length>0 ) + { + d3.select(this).selectAll("ul").remove(); + d3.select(this) + .append("ul") + .selectAll("li") + .data(d.childrenItems) + .enter().append("li") + .text(function(d) { return d.title; }) + .on("mouseenter", function(d,i){ + d.onMouseOver(elm,data,index); + }) + .on('click', function(d, i) { + d.onMouseClick(elm, d, index); + }) + .on('mouseleave',function(d,i){ + + }); + } + else + return false; + }) + .on('mouseleave',function(d,i){ + d3.select(this).selectAll("ul").style('display', 'none') + }); + + + + // the openCallback allows an action to fire before the menu is displayed + // an example usage would be closing a tooltip + if (openCallback) openCallback(data, index); + + // display context menu + d3.select('.d3-context-menu') + .style('left', (d3.event.pageX - 2) + 'px') + .style('top', (d3.event.pageY - 2) + 'px') + .style('display', 'block'); + + d3.event.preventDefault(); + }; +}; + +//aigner: Include function +function include(arr,obj) { + return (arr.indexOf(obj) != -1); +} + +function makeKadmosMenu(theGraphs,currentView,currentID) +{ + var imageWidth = 200; + var imageHeight = 150; + var padding = 10; + var rectHeight = 70; + var imgSize = 40; + var visPackDiv = d3.select("body").append("div").attr("class","vispackDiv"); + var visPackSvg = visPackDiv.append("svg") + .attr("class","visPackSvg") + .attr("width",imageWidth*5+40) + .attr("height",imageHeight+40) + .attr("transform", "translate(" + + String(10) + "," + String(10) + ")") + + + var defs = visPackSvg.append("defs"); + var filter = defs.append("filter") + .attr("id", "drop-shadow") + .attr("height", "130%") + filter.append("feColorMatrix") + .attr("values", "0.2 0 0 0 0 0 0.2 0 0 0 0 0 0.2 0 0 0 0 0 1 0") + .attr("result", "matrixOut") + filter.append("feGaussianBlur") + .attr("in", "matrixOut") + .attr("stdDeviation", 5) + .attr("result", "blur") + filter.append("feOffset") + .attr("in", "blur") + .attr("dx", 5) + .attr("dy", 5) + .attr("result", "offsetBlur") + var feMerge = filter.append("feMerge"); + feMerge.append("feMergeNode") + .attr("in", "offsetBlur") + feMerge.append("feMergeNode") + .attr("in", "SourceGraphic"); + + var visPackFrame = visPackSvg.append("rect") + .attr("width",imageWidth*5+12) + .attr("height",imageHeight) + .attr("fill", "white") + .style("filter", "url(#drop-shadow)") + + var imgs = visPackSvg.selectAll("image").data([0]); + imgs.enter() + .append("svg:image") + .attr("x",5) + .attr("xlink:href", "file:../supportFiles/include/KADMOS_VisualizationPack_Icon.png") + .attr("width", imageWidth) + .attr("height", imageHeight) + .attr("position", "relative") + + var offset_tmp = 860; + visPackSvg.append("text") + .attr("transform", "translate(" + + String(210) + "," + String(35) + ")") + .attr("font-family","Arial") + .attr("font-size","32pt") + .attr("fill","#666666") + .text("KADMOS Visualization Package") + + + var acknGroup = visPackSvg.append("g").attr("class","acknGroup").classed("acknGroup",true) + var acknRect = acknGroup.append("rect").classed("ackn",true) + .attr("height", 30) + .attr("transform", "translate(" + + String(offset_tmp) + "," + String(2) + ")") + acknGroup.append("text") + .attr("transform", "translate(" + + String(offset_tmp+padding/2) + "," + String(20) + ")") + .attr("text-anchor", "front") + .attr("font-family","Arial") + .attr("font-size","12pt") + .attr("fill","white") + .text("Acknowledgements") + acknRect = acknRect.attr("width", function(d) {return this.parentNode.getBBox().width+padding;}) + acknRect = acknRect.classed("VisPackMenu",true) + acknGroup = acknGroup.on("mouseover", function(){d3.select(this).style("cursor", "pointer")}) + .on("click",function(){window.open("../supportFiles/include/acknowledgements.html", '_blank');}) + + var acknGroup2 = visPackSvg.append("g").attr("class","acknGroup2") + .attr("transform", "translate(" + + String(offset_tmp) + "," + String(40+padding) + ")") + acknGroup2.append("text") + .classed("acknText",true) + .attr("dy", "0em") + .text("Copyright:") + acknGroup2.append("text") + .classed("acknText",true) + .attr("dy", "1.5em") + .text("B. Aigner") + var imgs = visPackSvg.selectAll("img").data([0]); + imgs.enter() + .append("svg:image") + .attr("xlink:href", "file:../supportFiles/include/RWTH_Logo.png") + .attr("x", String(offset_tmp+85)) + .attr("y", "3em") + .attr("width", "60") + .attr("height", "40"); + acknGroup2.append("text") + .classed("acknText",true) + .attr("dy", "3.2em") + .text("I. van Gent") + var imgs = visPackSvg.selectAll("img").data([0]); + imgs.enter() + .append("svg:image") + .attr("xlink:href", "file:../supportFiles/include/TUDelft_Logo.png") + .attr("x", String(offset_tmp+85)) + .attr("y", "4.7em") + .attr("width", "60") + .attr("height", "40"); + + + var ul = d3.select("body").append("div").attr("class","newDiv").append("ul") + function makeViewButtons(graphs_tmp,aName, visFile) + { + var dropdown1 = ul.append("li").on("mouseover", function(){d3.select(this).style("cursor", "default")}) + dropdown1.append("a").text(aName) + dropdown1.append("img").attr("src","../supportFiles/include/AGILE_Icon.png") + .attr("align","left") + .style("margin-left","6px") + .style("margin-right","0px") + .style("margin-top","6px") + .style("margin-bottom","6px") + .attr("height","42") + .attr("width","42") + var links = dropdown1.append("ul"); + for (var i=0; i < graphs_tmp.length; i++) + { + makeDropDown(graphs_tmp[i],visFile,links,aName) + } + } + function makeDropDown(theData,file,theLinks,aName) + { + var linkLi = theLinks.append("li"); + var link = linkLi.append("a").text(theData.description) + if (theData.id == currentID && currentView == aName) + { + link + .on("mouseover", function(){ + d3.select(this).style("cursor", "default")}) + linkLi.style("background","#888") + } + else + { + link + .on("mouseover", function(){d3.select(this).style("cursor", "pointer")}) + .on("click", function(){ + window.location.replace("../supportFiles/"+file, '_blank'); + window.localStorage.setItem("graphID", theData.id);}) + } + + + } + makeViewButtons(theGraphs,"XDSM","xdsm.html"); + makeViewButtons(theGraphs,"Edge Bundles","edgeBundles.html"); + makeViewButtons(theGraphs,"Sankey Diagram","sankeyDiagram.html"); +} +//#####################################################################// + +function showRightClickOption() +{ + var optionGroupDiv = d3.select("body").append("div").attr("class","optionDiv") + .style("left",(d3.event.pageX) + "px") + .style("top",(d3.event.pageY - 28) + "px") + .style("position", "absolute"); + var optionGroupSvg = optionGroupDiv.append("svg").attr("class","optionGroupSvg"); + var optionGroup = optionGroupSvg.append("g").attr("class","optionGroup"); + var optionGroupRect = optionGroup.append("rect") + .transition().delay(400) + .attr("height", 26) + .attr("fill", "#f2f2f2") + .style("border-radius", "4px") + .style("border", "1px solid #d4d4d4") + .attr("fill-opacity", 1.) + .attr("width", 130) + .attr("stroke", "black") + .attr("stroke-width", 1) + var optionText = optionGroup.append("text") + .transition().delay(400) + .attr("transform", "translate(10,18)") + .attr("font-family","Arial") + .attr("font-size","8pt") + .attr("fill","black") + .attr("fill-opacity",1.) + .text("Click right for options") +} +function hideRightClickOption() +{ + d3.selectAll(".optionDiv").remove() +} + +//aigner: Function creates a table +function tabulate(aTable,data,columns) { + var thead = aTable.append('thead'); + var tbody = aTable.append('tbody'); + + // create a row for each object in the data + var rows = tbody.selectAll('tr') + .data(data) + .enter() + .append('tr'); + + // create a cell in each row for each column + var cells = rows.selectAll('td') + .data(function (row) { + return columns.map(function (column) { + return {column: column, value: row[column]}; + }); + }) + .enter() + .append('td') + .html(function (d) { return d.value; }); + + return aTable; +} + +//aigner: Move to front function +d3.selection.prototype.moveToFront = function() { + return this.each(function(){ + this.parentNode.appendChild(this); + }); +}; +//aigner: Move to back function +d3.selection.prototype.moveToBack = function() { + return this.each(function() { + var firstChild = this.parentNode.firstChild; + if (firstChild) { + this.parentNode.insertBefore(this, firstChild); + } + }); +}; + +//get the current graph ID from the KADMOS visualiazation package's starting page +var graphID = "01"; +if (window.localStorage.getItem("graphID")) +{ + graphID=window.localStorage.getItem("graphID"); +} +var jsonFile = "json/xdsm_"+graphID+".json"; + +//Get graph info from graphs.json file +var graphs; +var currentGraph; +var varCategories; +d3.json("json/graphs.json", function(error, aGraphInfo) +{ + if (error) {throw error;} + graphs = aGraphInfo.graphs; + for (var i=0;i<graphs.length;i++) + { + if (graphs[i].id==graphID) + { + currentGraph = graphs[i] + } + } + + varCategories = aGraphInfo.categories; +}) + + +//aigner: biHisankey functions (Source: http://bl.ocks.org/Neilos/584b9a5d44d5fe00f779) +d3.biHiSankey = function () { + "use strict"; + + var biHiSankey = {}, + nodeWidth = 24, + nodeSpacing = 8, + linkSpacing = 5, + arrowheadScaleFactor = 0, // Specifies the proportion of a link's stroke width to be allowed for the marker at the end of the link. + size = [1, 1], // default to one pixel by one pixel + nodes = [], + nodeMap = {}, + parentNodes = [], + leafNodes = [], + links = [], + xScaleFactor = 1, + yScaleFactor = 1, + defaultLinkCurvature = 0.5; + + function center(node) { + return node.y + node.height / 2; + } + + function value(link) { + return link.value; + } + + function initializeNodeArrayProperties(node) { + node.sourceLinks = []; + node.rightLinks = []; + node.targetLinks = []; + node.leftLinks = []; + node.connectedNodes = []; + node.children = []; + node.ancestors = []; + } + // generates the nodeMap {"1": <node1>, "2": <node2>} + // and initializes the array properties of each node + function initializeNodeMap() { + nodes.forEach(function (node) { + nodeMap[node.id] = node; + initializeNodeArrayProperties(node); + }); + } + + function computeLeafNodes() { + leafNodes = nodes.filter(function (node) { + return !node.children.length; + }); + } + + function computeParentNodes() { + parentNodes = nodes.filter(function (node) { + return node.children.length; + }); + } + + function addAncestorsToChildren(node) { + node.children.forEach(function (child) { + child.ancestors = child.ancestors.concat(this.ancestors.concat([this])); + addAncestorsToChildren(child); + }, node); + } + + // generate hierarchical connections between parent and child nodes + function computeNodeHierarchy() { + var parent, + rootNodes = []; + + nodes.forEach(function (node) { + parent = null; + if (parent) { + node.parent = parent; + parent.children.push(node); + } else { + node.parent = null; + rootNodes.push(node); + } + }); + + computeLeafNodes(); + computeParentNodes(); + + rootNodes.forEach(function (rNode) { + addAncestorsToChildren(rNode); + }); + } + + // Populate the sourceLinks and targetLinks for each node. + function computeNodeLinks() { + var sourceNode, targetNode; + links.forEach(function (link) { + sourceNode = nodeMap[link.source] || link.source; + targetNode = nodeMap[link.target] || link.target; + link.id = link.source + '-' + link.target; + link.source = sourceNode; + link.target = targetNode; + sourceNode.sourceLinks.push(link); + targetNode.targetLinks.push(link); + }); + } + + function visible(linkCollection) { + return linkCollection.filter(function (link) { + return link.source.state === "collapsed" && link.target.state === "collapsed"; + }); + } + + // When child nodes are collapsed into their parents (or higher ancestors) + // the links between the child nodes should be represented by links + // between the containing ancestors. This function adds those extra links. + function computeAncestorLinks() { + // Leaf nodes are never parents of other nodes + // Duplicate source and target links between a leaf node and another leaf node + // and add to the leaf nodes' parents + leafNodes.forEach(function (leafNode) { + leafNode.sourceLinks.forEach(function (sourceLink) { + var ancestorTargets, + target = sourceLink.target; + if (leafNodes.indexOf(target) >= 0) { + ancestorTargets = target.ancestors.filter(function (tAncestor) { + return leafNode.ancestors.indexOf(tAncestor) < 0; + }); + ancestorTargets.forEach(function (ancestorTarget) { + var ancestorLink = { source: leafNode, + target: ancestorTarget, + value: sourceLink.value, + id: leafNode.id + "-" + ancestorTarget.id }; + + leafNode.sourceLinks.push(ancestorLink); + ancestorTarget.targetLinks.push(ancestorLink); + links.push(ancestorLink); + }); + } + }); + + leafNode.targetLinks.forEach(function (targetLink) { + var ancestorSources, source = targetLink.source; + if (leafNodes.indexOf(source) >= 0) { + ancestorSources = source.ancestors.filter(function (sAncestor) { + return leafNode.ancestors.indexOf(sAncestor) < 0; + }); + ancestorSources.forEach(function (ancestorSource) { + var ancestorLink = { source: ancestorSource, + target: leafNode, + value: targetLink.value, + id: ancestorSource.id + "-" + leafNode.id }; + ancestorSource.sourceLinks.push(ancestorLink); + leafNode.targetLinks.push(ancestorLink); + links.push(ancestorLink); + }); + } + }); + }); + + // Add links between parents (for when both parents are in collapsed state) + parentNodes.forEach(function (parentNode) { + parentNode.sourceLinks.forEach(function (sourceLink) { + var ancestorTargets, target = sourceLink.target; + if (leafNodes.indexOf(target) >= 0) { + ancestorTargets = target.ancestors.filter(function (tAncestor) { + return parentNode.ancestors.indexOf(tAncestor) < 0; + }); + ancestorTargets.forEach(function (ancestorTarget) { + var ancestorLink = { source: parentNode, + target: ancestorTarget, + value: sourceLink.value, + id: parentNode.id + "-" + ancestorTarget.id }; + + parentNode.sourceLinks.push(ancestorLink); + ancestorTarget.targetLinks.push(ancestorLink); + links.push(ancestorLink); + }); + } + }); + }); + } + + // To reduce clutter in the diagram merge links that are from the + // same source to the same target by creating a new link + // with a value equal to the sum of the values of the merged links + function mergeLinks() { + var linkGroups = d3.nest() + .key(function (link) { return link.source.id + "->" + link.target.id; }) + .entries(links) + .map(function (object) { return object.values; }); + + links = linkGroups.map(function (linkGroup) { + return linkGroup.reduce(function (previousLink, currentLink) { + return { + "source": previousLink.source, + "target": previousLink.target, + "id": d3.min([previousLink.id, currentLink.id]), + "value": previousLink.value + currentLink.value + }; + }); + }); + } + + function nodeHeight(sideLinks) { + var spacing = Math.max(sideLinks.length - 1, 0) * linkSpacing, + scaledValueSum = d3.sum(sideLinks, value) * yScaleFactor; + return scaledValueSum + spacing; + } + + // Compute the value of each node by summing the associated links. + // Compute the number of spaces between the links + // Compute the number of source links for later decrementing + function computeNodeValues() { + nodes.forEach(function (node) { + node.value = Math.max( + d3.sum(node.leftLinks, value), + d3.sum(node.rightLinks, value) + ); + node.inputs = d3.sum(visible(node.targetLinks), value); + node.outputs = d3.sum(visible(node.sourceLinks), value); + node.height = Math.max(nodeHeight(visible(node.leftLinks)), nodeHeight(visible(node.rightLinks))); + node.linkSpaceCount = Math.max(Math.max(node.leftLinks.length, node.rightLinks.length) - 1, 0); + }); + } + + function computeConnectedNodes() { + var sourceNode, targetNode; + links.forEach(function (link) { + sourceNode = link.source; + targetNode = link.target; + if (sourceNode.connectedNodes.indexOf(targetNode) < 0) { + sourceNode.connectedNodes.push(targetNode); + } + if (targetNode.connectedNodes.indexOf(sourceNode) < 0) { + targetNode.connectedNodes.push(sourceNode); + } + }); + } + + function sourceAndTargetNodesWithSameX() { + var nodeArray = []; + links.filter(function (link) { + return link.target.x === link.source.x; + }).forEach(function (link) { + if (nodeArray.indexOf(link.target) < 0) { + nodeArray.push(link.target); + } + }); + return nodeArray; + } + + function compressInXDirection() { + var connectedNodesXPositions, + nodesByXPosition = d3.nest() + .key(function (node) { return node.x; }) + .sortKeys(d3.ascending) + .entries(nodes) + .map(function (object) { return object.values; }); + + nodesByXPosition.forEach(function (xnodes) { + xnodes.forEach(function (node) { + connectedNodesXPositions = node.connectedNodes.map(function (connectedNode) { + return connectedNode.x; + }); + // keep decrementing the x value of the node + // unless it would have the same x value as one of its source or target nodes + // or node.x is already 0 + while (node.x > 0 && connectedNodesXPositions.indexOf(node.x - 1) < 0) { + node.x -= 1; + } + }); + }); + } + + function scaleNodeXPositions() { + var minX = d3.min(nodes, function (node) { return node.x; }), + maxX = d3.max(nodes, function (node) { return node.x; }) - minX; + xScaleFactor = (size[0] - nodeWidth) / maxX; + + nodes.forEach(function (node) { + node.x *= xScaleFactor; + }); + } + + function computeNodeXPositions() { + var remainingNodes = nodes, + nextNodes, + x = 0, + addToNextNodes = function (link) { + if (nextNodes.indexOf(link.target) < 0 && link.target.x === this.x) { + nextNodes.push(link.target); + } + }, + setValues = function (node) { + node.x = x; + node.width = nodeWidth; + node.sourceLinks.forEach(addToNextNodes, node); + }; + + while (remainingNodes.length) { + nextNodes = []; + remainingNodes.forEach(setValues); + if (nextNodes.length) { + remainingNodes = nextNodes; + } else { + remainingNodes = sourceAndTargetNodesWithSameX(); + } + x += 1; + } + + compressInXDirection(); + scaleNodeXPositions(); + } + + function computeLeftAndRightLinks() { + var source, target; + nodes.forEach(function (node) { + node.rightLinks = []; + node.leftLinks = []; + }); + links.forEach(function (link) { + source = link.source; + target = link.target; + if (source.x < target.x) { + source.rightLinks.push(link); + target.leftLinks.push(link); + link.direction = 1; + } else { + source.leftLinks.push(link); + target.rightLinks.push(link); + link.direction = -1; + } + }); + } + + function adjustTop(adjustment) { + nodes.forEach(function (node) { + node.y -= adjustment; + }); + } + + function computeNodeYPositions(iterations) { + var minY, + alpha, + nodesByXPosition = d3.nest() + .key(function (node) { return node.x; }) + .sortKeys(d3.ascending) + .entries(nodes) + .map(function (object) { return object.values; }); + + function calculateYScaleFactor() { + var linkSpacesCount, nodeValueSum, discretionaryY; + yScaleFactor = d3.min(nodesByXPosition, function (nodes) { + linkSpacesCount = d3.sum(nodes, function (node) { + return node.linkSpaceCount; + }); + nodeValueSum = d3.sum(nodes, function (node) { + return node.value; + }); + discretionaryY = (size[1] + - (nodes.length - 1) * nodeSpacing + - linkSpacesCount * linkSpacing); + + return discretionaryY / nodeValueSum; + }); + + // Fat links are those with lengths less than about 4 times their heights + // Fat links don't bend well + // Test that yScaleFactor is not so big that it causes "fat" links; adjust yScaleFactor accordingly + links.forEach(function (link) { + var linkLength = Math.abs(link.source.x - link.target.x), + linkHeight = link.value * yScaleFactor; + if (linkLength / linkHeight < 4) { + yScaleFactor = 0.25 * linkLength / link.value; + } + }); + } + + function initializeNodeYPosition() { + nodesByXPosition.forEach(function (nodes) { + nodes.forEach(function (node, i) { + node.y = i; + node.heightAllowance = node.value * yScaleFactor + linkSpacing * node.linkSpaceCount; + }); + }); + } + + function calculateLinkThickness() { + links.forEach(function (link) { + link.thickness = link.value * yScaleFactor; + }); + } + + function relaxLeftToRight(alpha) { + function weightedSource(link) { + return center(link.source) * link.value; + } + + nodesByXPosition.forEach(function (nodes) { + nodes.forEach(function (node) { + if (node.rightLinks.length) { + var y = d3.sum(node.rightLinks, weightedSource) / d3.sum(node.rightLinks, value); + node.y += (y - center(node)) * alpha; + } + }); + }); + } + + function relaxRightToLeft(alpha) { + function weightedTarget(link) { + return center(link.target) * link.value; + } + + nodesByXPosition.slice().reverse().forEach(function (nodes) { + nodes.forEach(function (node) { + if (node.leftLinks.length) { + var y = d3.sum(node.leftLinks, weightedTarget) / d3.sum(node.leftLinks, value); + node.y += (y - center(node)) * alpha; + } + }); + }); + } + + function resolveCollisions() { + function ascendingYPosition(a, b) { + return a.y - b.y; + } + + nodesByXPosition.forEach(function (nodes) { + var node, + dy, + y0 = 0, + n = nodes.length, + i; + + nodes.sort(ascendingYPosition); + + // Push any overlapping nodes down. + for (i = 0; i < n; ++i) { + node = nodes[i]; + dy = y0 - node.y; + if (dy > 0) { + node.y += dy; + } + y0 = node.y + node.heightAllowance + nodeSpacing; + } + + // If the bottommost node goes outside the bounds, push it back up. + dy = y0 - nodeSpacing - size[1]; + if (dy > 0) { + node.y -= dy; + y0 = node.y; + + // Push any overlapping nodes back up. + for (i = n - 2; i >= 0; --i) { + node = nodes[i]; + dy = node.y + node.heightAllowance + nodeSpacing - y0; + if (dy > 0) { + node.y -= dy; + } + y0 = node.y; + } + } + }); + } + + calculateYScaleFactor(); + initializeNodeYPosition(); + calculateLinkThickness(); + resolveCollisions(); + + for (alpha = 1; iterations > 0; --iterations) { + alpha *= 0.99; + relaxRightToLeft(alpha); + resolveCollisions(); + relaxLeftToRight(alpha); + resolveCollisions(); + } + + minY = d3.min(nodes, function (node) { return node.y; }); + adjustTop(minY); + } + + function computeLinkYPositions() { + + function ascendingLeftNodeYPosition(a, b) { + var aLeftNode = (a.direction > 0) ? a.source : a.target, + bLeftNode = (b.direction > 0) ? b.source : b.target; + return aLeftNode.y - bLeftNode.y; + } + + function ascendingRightNodeYPosition(a, b) { + var aRightNode = (a.direction > 0) ? a.target : a.source, + bRightNode = (b.direction > 0) ? b.target : b.source; + return aRightNode.y - bRightNode.y; + } + + nodes.forEach(function (node) { + node.rightLinks.sort(ascendingRightNodeYPosition); + node.leftLinks.sort(ascendingLeftNodeYPosition); + }); + + nodes.forEach(function (node) { + var rightY = 0, leftY = 0; + + node.rightLinks.forEach(function (link) { + if (link.direction > 0) { + link.sourceY = rightY; + if (link.target.state === "collapsed") { + rightY += link.thickness + linkSpacing; + } + } + else { + link.targetY = rightY; + if (link.source.state === "collapsed") { + rightY += link.thickness + linkSpacing; + } + } + }); + + node.leftLinks.forEach(function (link) { + if (link.direction < 0) { + link.sourceY = leftY; + if (link.target.state === "collapsed") { + leftY += link.thickness + linkSpacing; + } + } + else { + link.targetY = leftY; + if (link.source.state === "collapsed") { + leftY += link.thickness + linkSpacing; + } + } + }); + + }); + } + + + biHiSankey.arrowheadScaleFactor = function (_) { + if (!arguments.length) { return arrowheadScaleFactor; } + arrowheadScaleFactor = +_; + return biHiSankey; + }; + + biHiSankey.collapsedNodes = function () { + return nodes.filter(function (node) { return node.state === "collapsed"; }); + }; + + biHiSankey.connected = function (nodeA, nodeB) { + return nodeA.connectedNodes.indexOf(nodeB) >= 0; + }; + + biHiSankey.expandedNodes = function () { + return nodes.filter(function (node) { return node.state === "expanded"; }); + }; + + biHiSankey.layout = function (iterations) { + computeNodeXPositions(); + computeLeftAndRightLinks(); + computeNodeValues(); + computeNodeYPositions(iterations); + computeNodeValues(); + computeLinkYPositions(); + return biHiSankey; + }; + + biHiSankey.link = function () { + var curvature = defaultLinkCurvature; + + function leftToRightLink(link) { + var arrowHeadLength = link.thickness * arrowheadScaleFactor, + straightSectionLength = (3 * link.thickness / 4) - arrowHeadLength, + x0 = link.source.x + link.source.width, + x1 = x0 + arrowHeadLength / 2, + x4 = link.target.x - straightSectionLength - arrowHeadLength, + xi = d3.interpolateNumber(x0, x4), + x2 = xi(curvature), + x3 = xi(1 - curvature), + y0 = link.source.y + link.sourceY + link.thickness / 2, + y1 = link.target.y + link.targetY + link.thickness / 2; + return "M" + x0 + "," + y0 + + "L" + x1 + "," + y0 + + "C" + x2 + "," + y0 + + " " + x3 + "," + y1 + + " " + x4 + "," + y1 + + "L" + (x4 + straightSectionLength) + "," + y1; + } + + function rightToLeftLink(link) { + var arrowHeadLength = link.thickness * arrowheadScaleFactor, + straightSectionLength = link.thickness / 4, + x0 = link.source.x, + x1 = x0 - arrowHeadLength / 2, + x4 = link.target.x + link.target.width + straightSectionLength + arrowHeadLength, + xi = d3.interpolateNumber(x0, x4), + x2 = xi(curvature), + x3 = xi(1 - curvature), + y0 = link.source.y + link.sourceY + link.thickness / 2, + y1 = link.target.y + link.targetY + link.thickness / 2; + return "M" + x0 + "," + y0 + + "L" + x1 + "," + y0 + + "C" + x2 + "," + y0 + + " " + x3 + "," + y1 + + " " + x4 + "," + y1 + + "L" + (x4 - straightSectionLength) + "," + y1; + } + + function link(d) { + if (d.source.x < d.target.x) { + return leftToRightLink(d); + } + return rightToLeftLink(d); + } + + link.curvature = function (_) { + if (!arguments.length) { return curvature; } + curvature = +_; + return link; + }; + + return link; + }; + + biHiSankey.links = function (_) { + if (!arguments.length) { return links; } + links = _.filter(function (link) { + return link.source !== link.target; // filter out links that go nowhere + }); + return biHiSankey; + }; + + biHiSankey.linkSpacing = function (_) { + if (!arguments.length) { return linkSpacing; } + linkSpacing = +_; + return biHiSankey; + }; + + biHiSankey.nodes = function (_) { + if (!arguments.length) { return nodes; } + nodes = _; + return biHiSankey; + }; + + biHiSankey.nodeWidth = function (_) { + if (!arguments.length) { return nodeWidth; } + nodeWidth = +_; + return biHiSankey; + }; + + biHiSankey.nodeSpacing = function (_) { + if (!arguments.length) { return nodeSpacing; } + nodeSpacing = +_; + return biHiSankey; + }; + + biHiSankey.relayout = function () { + computeLeftAndRightLinks(); + computeNodeValues(); + computeLinkYPositions(); + return biHiSankey; + }; + + biHiSankey.size = function (_) { + if (!arguments.length) { return size; } + size = _; + return biHiSankey; + }; + + biHiSankey.visibleLinks = function () { + return visible(links); + }; + + biHiSankey.initializeNodes = function (callback) { + initializeNodeMap(); + computeNodeHierarchy(); + computeNodeLinks(); + computeAncestorLinks(); + mergeLinks(); + computeConnectedNodes(); + nodes.forEach(callback); + return biHiSankey; + }; + + return biHiSankey; +}; + + +'use strict'; + +var svg, tooltip, biHiSankey, path, defs, colorScale, isTransitioning; + +var OPACITY = { + NODE_DEFAULT: 0.9, + NODE_FADED: 0.1, + NODE_HIGHLIGHT: 0.8, + LINK_DEFAULT: 0.6, + LINK_FADED: 0.05, + LINK_HIGHLIGHT: 0.9 + }, + LINK_COLOR = "#b3b3b3", + INFLOW_COLOR = "#CC0000", + OUTFLOW_COLOR = "#99CC00", + NODE_WIDTH = 36, + COLLAPSER = { + RADIUS: NODE_WIDTH / 2, + SPACING: 2 + }, + OUTER_MARGIN = 10, + MARGIN = { + TOP: 2 * (COLLAPSER.RADIUS + OUTER_MARGIN), + RIGHT: OUTER_MARGIN, + BOTTOM: OUTER_MARGIN, + LEFT: OUTER_MARGIN + }, + TRANSITION_DURATION = 400, + HEIGHT = 2000 - MARGIN.TOP - MARGIN.BOTTOM, + WIDTH = 960 - MARGIN.LEFT - MARGIN.RIGHT, + LAYOUT_INTERATIONS = 32, + REFRESH_INTERVAL = 7000; + +var formatNumber = function (d) { + var numberFormat = d3.format(",.0f"); // zero decimal places + return numberFormat(d) + " connections"; +}, + +formatFlow = function (d) { + var flowFormat = d3.format(",.0f"); // zero decimal places with sign + return flowFormat(Math.abs(d)); +}, + +// Used when temporarily disabling user interractions to allow animations to complete +disableUserInterractions = function (time) { + isTransitioning = true; + setTimeout(function(){ + isTransitioning = false; + }, time); +}, + +hideTooltip = function () { + return tooltip.transition() + .duration(TRANSITION_DURATION) + .style("opacity", 0); +}, + +showTooltip = function () { + return tooltip + .style("left", d3.event.pageX + "px") + .style("top", d3.event.pageY + 15 + "px") + .transition() + .duration(TRANSITION_DURATION) + .style("opacity", 1); +}; + +colorScale = d3.scale.category10(), + +svg = d3.select("body").append("svg") + .attr("width", WIDTH + MARGIN.LEFT + MARGIN.RIGHT) + .attr("height", HEIGHT + MARGIN.TOP + MARGIN.BOTTOM) + .append("g") + .attr("transform", "translate(" + MARGIN.LEFT + "," + MARGIN.TOP + ")"); + +svg.append("g").attr("id", "links"); +svg.append("g").attr("id", "nodes"); +svg.append("g").attr("id", "collapsers"); + +tooltip = d3.select("body").append("div").attr("id", "tooltip"); + +tooltip.style("opacity", 0) + .append("p") + .attr("class", "value"); + +biHiSankey = d3.biHiSankey(); + +// Set the biHiSankey diagram properties +biHiSankey + .nodeWidth(NODE_WIDTH) + .nodeSpacing(10) + .linkSpacing(4) + .arrowheadScaleFactor(0.5) // Specifies that 0.5 of the link's stroke WIDTH should be allowed for the marker at the end of the link. + .size([WIDTH, HEIGHT]); + +path = biHiSankey.link().curvature(0.45); + +defs = svg.append("defs"); + +defs.append("marker") + .style("fill", LINK_COLOR) + .attr("id", "arrowHead") + .attr("viewBox", "0 0 6 10") + .attr("refX", "1") + .attr("refY", "5") + .attr("markerUnits", "strokeWidth") + .attr("markerWidth", "1") + .attr("markerHeight", "1") + .attr("orient", "auto") + .append("path") + .attr("d", "M 0 0 L 1 0 L 6 5 L 1 10 L 0 10 z"); + +defs.append("marker") + .style("fill", OUTFLOW_COLOR) + .attr("id", "arrowHeadInflow") + .attr("viewBox", "0 0 6 10") + .attr("refX", "1") + .attr("refY", "5") + .attr("markerUnits", "strokeWidth") + .attr("markerWidth", "1") + .attr("markerHeight", "1") + .attr("orient", "auto") + .append("path") + .attr("d", "M 0 0 L 1 0 L 6 5 L 1 10 L 0 10 z"); + +defs.append("marker") + .style("fill", INFLOW_COLOR) + .attr("id", "arrowHeadOutlow") + .attr("viewBox", "0 0 6 10") + .attr("refX", "1") + .attr("refY", "5") + .attr("markerUnits", "strokeWidth") + .attr("markerWidth", "1") + .attr("markerHeight", "1") + .attr("orient", "auto") + .append("path") + .attr("d", "M 0 0 L 1 0 L 6 5 L 1 10 L 0 10 z"); + +function update() { + var link, linkEnter, node, nodeEnter, collapser, collapserEnter; + + function dragmove(node) { + hideRightClickOption(); + node.x = Math.max(0, Math.min(WIDTH - node.width, d3.event.x)); + node.y = Math.max(0, Math.min(HEIGHT - node.height, d3.event.y)); + d3.select(this).attr("transform", "translate(" + node.x + "," + node.y + ")"); + biHiSankey.relayout(); + svg.selectAll(".node").selectAll("rect").attr("height", function (d) { return d.height; }); + link.attr("d", path); + } + + function containChildren(node) { + node.children.forEach(function (child) { + child.state = "contained"; + child.parent = this; + child._parent = null; + containChildren(child); + }, node); + } + + function expand(node) { + node.state = "expanded"; + node.children.forEach(function (child) { + child.state = "collapsed"; + child._parent = this; + child.parent = null; + containChildren(child); + }, node); + } + + function collapse(node) { + node.state = "collapsed"; + containChildren(node); + } + + function restoreLinksAndNodes() { + link + .style("stroke", LINK_COLOR) + .style("marker-end", function () { return 'url(#arrowHead)'; }) + .transition() + .duration(TRANSITION_DURATION) + .style("opacity", OPACITY.LINK_DEFAULT); + + + node + .selectAll("rect") + .style("fill", function (d) { + d.color = colorScale(d.name.replace(/ .*/, "")); + return d.color; + }) + .style("stroke", function (d) { + return d3.rgb(colorScale(d.name.replace(/ .*/, ""))).darker(0.1); + }) + .style("fill-opacity", OPACITY.NODE_DEFAULT); + + node.filter(function (n) { return n.state === "collapsed"; }) + .transition() + .duration(TRANSITION_DURATION) + .style("opacity", OPACITY.NODE_DEFAULT); + } + + function showHideChildren(node) { + disableUserInterractions(2 * TRANSITION_DURATION); + hideTooltip(); + if (node.state === "collapsed") { expand(node); } + else { collapse(node); } + + biHiSankey.relayout(); + update(); + link.attr("d", path); + restoreLinksAndNodes(); + } + + function highlightConnected(g) { + link.filter(function (d) { return d.source === g; }) + .style("marker-end", function () { return 'url(#arrowHeadInflow)'; }) + .style("stroke", OUTFLOW_COLOR) + .style("opacity", OPACITY.LINK_DEFAULT); + + link.filter(function (d) { return d.target === g; }) + .style("marker-end", function () { return 'url(#arrowHeadOutlow)'; }) + .style("stroke", INFLOW_COLOR) + .style("opacity", OPACITY.LINK_DEFAULT); + + link.forEach(function (aLink) { + aLink.moveToFront; + }); + } + + function fadeUnconnected(g) { + link.filter(function (d) { return d.source !== g && d.target !== g; }) + .style("marker-end", function () { return 'url(#arrowHead)'; }) + .transition() + .duration(TRANSITION_DURATION) + .style("opacity", OPACITY.LINK_FADED); + + node.filter(function (d) { + return (d.name === g.name) ? false : !biHiSankey.connected(d, g); + }).transition() + .duration(TRANSITION_DURATION) + .style("opacity", OPACITY.NODE_FADED); + } + + link = svg.select("#links").selectAll("path.link") + .data(biHiSankey.visibleLinks(), function (d) { return d.id; }); + + link.transition() + .duration(TRANSITION_DURATION) + .style("stroke-WIDTH", function (d) { return Math.max(1, d.thickness); }) + .attr("d", path) + .style("opacity", OPACITY.LINK_DEFAULT); + + + link.exit().remove(); + + + linkEnter = link.enter().append("path") + .attr("class", "link") + .style("fill", "none"); + + linkEnter.on('mouseenter', function (d) { + if (!isTransitioning) { + showTooltip().select(".value").text(function () { + if (d.direction > 0) { + return d.source.name + " → " + d.target.name + "\n" + formatNumber(d.value); + } + return d.target.name + " ↠" + d.source.name + "\n" + formatNumber(d.value); + }); + + d3.select(this) + .style("stroke", LINK_COLOR) + .transition() + .duration(TRANSITION_DURATION / 2) + .style("opacity", OPACITY.LINK_HIGHLIGHT); + } + }); + + linkEnter.on('mouseleave', function () { + if (!isTransitioning) { + hideTooltip(); + + d3.select(this) + .style("stroke", LINK_COLOR) + .transition() + .duration(TRANSITION_DURATION / 2) + .style("opacity", OPACITY.LINK_DEFAULT); + } + }); + + + function showLinkTree(aLink,aVarCategory) + { + var theSchema; + $.ajax({ + dataType: "json", + url: "json/"+aVarCategory+".json", + async: false, + success: function(data){theSchema = JSON.parse(JSON.stringify(data))} + }); + var name_tmp = "Variable flow: " + aLink.__data__.source.name + " → " + aLink.__data__.target.name + createTreeLayout(name_tmp,theSchema,aLink.__data__.name,link); + } + + function showEdgeTable(aLink) + { + var edgeTableDiv = d3.select("body").append("div").attr("class","edgeTableDiv") + .style('left', (d3.event.pageX - 2) + 'px') + .style('top', (d3.event.pageY - 2) + 'px') + .style("position", "absolute") + var edgeTableGroup = edgeTableDiv.append("g").attr("class","edgeTableGroup") + + //Drag Function for edge table + var xPos_init = d3.event.x - 2; + var yPos_init = d3.event.y - 2; + var xOffset_tmp; + var yOffset_tmp; + var drag = d3.behavior.drag() + .on("dragstart", dragstarted) + .on("drag", dragged) + .on("dragend", dragended); + function dragstarted() { + xOffset_tmp = xPos_init-d3.event.sourceEvent.clientX; + yOffset_tmp = yPos_init-d3.event.sourceEvent.clientY; + } + function dragged() { + d3.select(this) + .style("left",(d3.event.x+xOffset_tmp) + "px") + .style("top",(d3.event.y+yOffset_tmp) + "px") + } + function dragended() { + xPos_init = d3.event.sourceEvent.clientX+xOffset_tmp; + yPos_init = d3.event.sourceEvent.clientY+yOffset_tmp; + } + edgeTableDiv.call(drag); + + var headLine = "Edge Information (" + aLink.from + " - " + aLink.to + ")"; + + var tabRemoveSVG = edgeTableGroup.append("svg") + .attr("width",String(headLine.length*12+"pt")) + .attr("height",26) + tabRemoveSVG.append("rect") + .attr("width", "100%") + .attr("height", "100%") + .attr("fill", "white"); + var tabRemoveSymbol = tabRemoveSVG.append("g"); + tabRemoveSymbol = tabRemoveSymbol + .attr("class", "tabRemoveSymbol") + .attr("transform", "translate(26,0)") + var circle = tabRemoveSymbol.append("circle") + .classed("remCircle",true) + var minus = tabRemoveSymbol.append("line").classed("remMinus",true) + var cx = -20; + var cy = 12; + circle = circle + .attr("cx", cx+5) + .attr("cy", cy) + .attr("r", 10) + minus = minus + .attr("x1", cx) + .attr("y1", cy) + .attr("x2", cx+10) + .attr("y2", cy) + + tabRemoveSVG.append("text").attr("class","tabRemoveText") + .attr("transform", "translate(26,20)") + .attr("fill", "black") + .style("font-family", "Arial") + .style("font-size", "16pt") + .style("font-weight", "bold") + .text(headLine); + + tabRemoveSymbol + .on("mouseover", function(){ + d3.select(this).style("cursor", "pointer") + circle.style("fill", "red").style("fill-opacity", .8); + }) + .on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)}) + tabRemoveSymbol.on("click", function(d) + { + edgeTableDiv.remove(); + }) + + var anEdgeNameSplit = aLink.name.split(',') + var numberOfconnections = anEdgeNameSplit.length; + var theLeafNodes = []; + var dimension=0; + var nullDim=false; + var undefinedLeafs; + var treeData; + $.ajax({ + dataType: "json", + url: "json/"+varCategories[0].name+"_"+graphID+".json", + async: false, + success: function(data){treeData = JSON.parse(JSON.stringify(data))} + }); + var pipeData = aLink.name; + getPrunedLeafNodes("/"+treeData.name+"/", treeData.children, pipeData, theLeafNodes) + var undefLeafsNumber=0; + var defLeafsNumber=0; + for (var k=0;k<theLeafNodes.length;k++) + { + if (theLeafNodes[k].dimension!=null){dimension = dimension+theLeafNodes[k].dimension} + else{nullDim=true} + if (theLeafNodes[k].value.includes("could not be found")||theLeafNodes[k].value.includes("unknown")) + { + if (undefLeafsNumber==0){undefinedLeafs += theLeafNodes[k].xPath;} + else {undefinedLeafs += "," + theLeafNodes[k].xPath;} + undefLeafsNumber ++; + } + else + { + defLeafsNumber++; + } + } + //Render data for table + var data = []; + data.push({ "name" : "Total number of connections", "value" : numberOfconnections }) + data.push({ "name" : "Number of referenced connections", "value" : defLeafsNumber }) + data.push({ "name" : "Dimension of referenced connections", "value" : String(dimension) }) + if (undefinedLeafs) + { + data.push({ "name" : "Number of unreferenced connections", "value" : undefLeafsNumber}) + } + var table = edgeTableGroup.append('table'); + tabulate(table,data,['name', 'value']); // 2 column table + if (undefinedLeafs) + { + var undefLeafTreeSVG = edgeTableGroup.append("svg") + .attr("transform", "translate(0,20)") + .attr("width",String(headLine.length*9.5+"pt")) + .attr("height",50) + undefLeafTreeSVG.append("rect") + .attr("width", "100%") + .attr("height", "100%") + .attr("fill", "white"); + var expandSymbol = undefLeafTreeSVG.append("g") + .attr("class", "newExpandSymbol") + .attr("transform", "translate(38,12)"); + var expandRect = expandSymbol.append("rect") + .attr("x",-28) + .attr("height", 50) + .attr("fill", "#666666") + .attr("stroke", "none") + .attr("stroke-width", 2) + .attr("fill-opacity", 1) + var expCircle = expandSymbol.append("circle") + .attr("cx", -26) + .attr("cy", 0); + var expLine1 = expandSymbol.append("line"); + var expLine2 = expandSymbol.append("line"); + drawExpandSymbol(expCircle,expLine1,expLine2); + expCircle = expCircle.attr("fill", "white"); + expandSymbol + .on("mouseover", function(){ + d3.select(this).style("cursor", "pointer") + expCircle.style("fill", "green").style("fill-opacity", .8); + }) + .on("mouseout", function(){ + expCircle.style("fill", "green").style("fill-opacity", .6); + }) + undefLeafTreeSVG.append("text").attr("class","tabRemoveText") + .attr("transform", "translate(26,20)") + .attr("fill", "black") + .style("font-family", "Arial") + .style("font-size", "16pt") + .style("font-weight", "bold") + .text("Show unreferenced connections as tree"); + expandSymbol.on("mousedown", function(){ + var name_tmp = "Unref. connections: " + aLink.source.name + " → " + aLink.target.name + createTreeLayout(name_tmp,treeData,aLink.name,link); + }) + } + + } + + //linkMenu --> functions for right click options + var linkChildrenItems = []; + for (var j=0; j< varCategories.length; j++) + { + linkChildrenItems.push({title: 'according to ' + varCategories[j].description, + identifier: varCategories[j].name+"_"+graphID, + onMouseClick: function(elm, data, i) {showLinkTree(elm,data.identifier)}, + onMouseOver: function(elm,data,i){}}); + } + var linkMenu = [ + { + title: 'Show edge info', + onMouseDown: function(elm, k, i) { + showEdgeTable(k) + }, + onMouseUp: function(elm, k, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: [] + }, + { + title: 'Show variable tree...', + onMouseDown: function(elm, k, i) { + }, + onMouseUp: function(elm, k, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: linkChildrenItems + } + ] + + var thisLink = d3.select(this); + linkEnter.on('contextmenu', d3.contextMenu(linkMenu)) + + linkEnter.sort(function (a, b) { return b.thickness - a.thickness; }) + .classed("leftToRight", function (d) { + return d.direction > 0; + }) + .classed("rightToLeft", function (d) { + return d.direction < 0; + }) + .style("marker-end", function () { + return 'url(#arrowHead)'; + }) + .style("stroke", LINK_COLOR) + .style("opacity", 0) + .transition() + .delay(TRANSITION_DURATION) + .duration(TRANSITION_DURATION) + .attr("d", path) + .style("stroke-WIDTH", function (d) { return Math.max(1, d.thickness); }) + .style("opacity", OPACITY.LINK_DEFAULT); + + + node = svg.select("#nodes").selectAll(".node") + .data(biHiSankey.collapsedNodes(), function (d) { return d.id; }); + + + node.transition() + .duration(TRANSITION_DURATION) + .attr("transform", function (d) { return "translate(" + d.x + "," + d.y + ")"; }) + .style("opacity", OPACITY.NODE_DEFAULT) + .select("rect") + + .style("stroke", function(d) { + return d3.rgb(d.color).darker(2); }) + .style("stroke-WIDTH", "1px") + .attr("height", function (d) { return d.height; }) + .attr("width", biHiSankey.nodeWidth()); + + + node.exit() + .transition() + .duration(TRANSITION_DURATION) + .attr("transform", function (d) { + var collapsedAncestor, endX, endY; + collapsedAncestor = d.ancestors.filter(function (a) { + return a.state === "collapsed"; + })[0]; + endX = collapsedAncestor ? collapsedAncestor.x : d.x; + endY = collapsedAncestor ? collapsedAncestor.y : d.y; + return "translate(" + endX + "," + endY + ")"; + }) + .remove(); + + + nodeEnter = node.enter().append("g").attr("class", "node"); + + nodeEnter + .attr("transform", function (d) { + var startX = d._parent ? d._parent.x : d.x, + startY = d._parent ? d._parent.y : d.y; + return "translate(" + startX + "," + startY + ")"; + }) + .style("opacity", 1e-6) + .transition() + .duration(TRANSITION_DURATION) + .style("opacity", OPACITY.NODE_DEFAULT) + .attr("transform", function (d) { return "translate(" + d.x + "," + d.y + ")"; }); + + nodeEnter.append("text"); + nodeEnter.append("rect") + .style("fill", function(d) { + return d.color = colorScale(d.name.replace(/ .*/, "")); }) + .style("stroke", function(d) { + return d3.rgb(d.color).darker(2); }) + .style("stroke-WIDTH", "1px") + .attr("height", function (d) { return d.height; }) + .attr("width", biHiSankey.nodeWidth()); + + node.on("mouseenter", function (g) { + //showRightClickOption(); + if (!isTransitioning) { + restoreLinksAndNodes(); + highlightConnected(g); + fadeUnconnected(g); + + d3.select(this).select("rect") + .style("stroke", function (d) { + return d3.rgb(d.color).darker(0.1); + }) + .style("fill-opacity", OPACITY.LINK_DEFAULT); + + tooltip + .style("left", g.x + MARGIN.LEFT + "px") + .style("top", g.y + g.height + MARGIN.TOP + 15 + "px") + .transition() + .duration(TRANSITION_DURATION) + .style("opacity", 1).select(".value") + .text(function () { + var additionalInstructions = g.children.length ? "\n(Double click to expand)" : ""; + return g.name + "\nInputs: " + formatFlow(g.inputs) + "\nOutputs: " + formatFlow(g.outputs); + }); + } + }); + + node.on("mouseleave", function () { + if (!isTransitioning) { + hideTooltip(); + restoreLinksAndNodes(); + } + hideRightClickOption(); + }); + + node.filter(function (d) { return d.children.length; }) + .on("dblclick", showHideChildren); + + + //aigner: Right click options for tools + //############################################################################################################################## + + //aigner: Table for competence/tool information + //############################################################ + function showToolTable(aTool) + { + var toolTableDiv = d3.select("body").append("div").attr("class","toolTableDiv") + .style('left', (d3.event.x - 2) + 'px') + .style('top', (d3.event.y - 2) + 'px') + .style("position", "absolute") + var toolTableGroup = toolTableDiv.append("g").attr("class","toolTableGroup") + + //Drag Function for variable table + var xPos_init = d3.event.x - 2; + var yPos_init = d3.event.y - 2; + var xOffset_tmp; + var yOffset_tmp; + var drag = d3.behavior.drag() + .on("dragstart", dragstarted) + .on("drag", dragged) + .on("dragend", dragended); + function dragstarted() { + xOffset_tmp = xPos_init-d3.event.sourceEvent.clientX; + yOffset_tmp = yPos_init-d3.event.sourceEvent.clientY; + } + function dragged() { + d3.select(this) + .style("left",(d3.event.x+xOffset_tmp) + "px") + .style("top",(d3.event.y+yOffset_tmp) + "px") + } + function dragended() { + xPos_init = d3.event.sourceEvent.clientX+xOffset_tmp; + yPos_init = d3.event.sourceEvent.clientY+yOffset_tmp; + } + toolTableDiv.call(drag); + + var aToolNameSplit = aTool.name.split(': ') + var headLine; + if (aToolNameSplit.length>1){headLine = "Competence Information: (" + aToolNameSplit[1] + ")";} + else {headLine = "Competence Information: (" + aToolNameSplit[0] + ")";} + + var tabRemoveSVG = toolTableGroup.append("svg") + .attr("width",800) + .attr("height",26) + var tabRemoveRect = tabRemoveSVG.append("rect") + .attr("width", "100%") + .attr("height", "100%") + .attr("fill", "white"); + var tabRemoveSymbol = tabRemoveSVG.append("g"); + tabRemoveSymbol = tabRemoveSymbol + .attr("class", "tabRemoveSymbol") + .attr("transform", "translate(26,0)") + var circle = tabRemoveSymbol.append("circle") + .classed("remCircle",true) + var minus = tabRemoveSymbol.append("line").classed("remMinus",true) + var cx = -20; + var cy = 12; + circle = circle + .attr("cx", cx+5) + .attr("cy", cy) + .attr("r", 10) + minus = minus + .attr("x1", cx) + .attr("y1", cy) + .attr("x2", cx+10) + .attr("y2", cy) + + tabRemoveSVG.append("text").attr("class","tabRemoveText") + .attr("transform", "translate(26,20)") + .attr("fill", "black") + .style("font-family", "Arial") + .style("font-size", "16pt") + .style("font-weight", "bold") + .text(headLine); + + tabRemoveSymbol + .on("mouseover", function(){ + d3.select(this).style("cursor", "pointer") + circle.style("fill", "red").style("fill-opacity", .8); + }) + .on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)}) + tabRemoveSymbol.on("click", function(d) + { + toolTableDiv.remove(); + }) + + + var data = []; + // render the table(s) + if (aTool.metadata.length==0) + { + data.push({ "name" : "NO TOOL METADATA AVAILABLE", "value" : "..." }) + } + for (var j=0; j < aTool.metadata.length;j++) + { + var metaData = aTool.metadata[j] + for(var key in metaData){ + data.push({ "name" : key, "value" : metaData[key] }) + } + + } + var table = toolTableGroup.append('table'); + tabulate(table,data,['name', 'value']); // 2 column table + } + //############################################################ + + //aigner: Creation of input/output tree + //############################################################ + function showIOTree(categoryName, theNode, io) + { + var links = d3.selectAll(".link"); + var array=""; + var name_tmp = ""; + links.each(function(theLink) + { + if (io=="in") + { + if (theLink.to == theNode.id) + { + array = array + ", " + theLink.name; + } + name_tmp = "Input tree view:" + theNode.id; + } + else if (io=="out") + { + if (theLink.from == theNode.id) + { + array = array + ", " + theLink.name; + } + name_tmp = "Output tree view:" + theNode.id; + } + }) + + var theSchema; + $.ajax({ + dataType: "json", + url: "json/"+categoryName+".json", + async: false, + success: function(data){theSchema = JSON.parse(JSON.stringify(data))} + }); + createTreeLayout(name_tmp,theSchema,array,link) + } + //############################################################ + + var inputChildrenitems = []; + var outputChildrenitems = []; + var inputChildrenitems = []; + var outputChildrenitems = []; + for (var j=0; j< varCategories.length; j++) + { + inputChildrenitems.push({title: 'according to ' + varCategories[j].description, + identifier: varCategories[j].name+"_"+graphID, + onMouseClick: function(elm, data, i) {showIOTree(data.identifier,elm.__data__,"in")}, + onMouseOver: function(elm,data,i){}}); + outputChildrenitems.push({title: 'according to ' + varCategories[j].description, + identifier: varCategories[j].name+"_"+graphID, + onMouseClick: function(elm, data, i) {showIOTree(data.identifier,elm.__data__,"out")}, + onMouseOver: function(elm,data,i){}}); + } + //menu --> functions for right click options + var toolMenu = [ + { + title: 'Show competence info', + onMouseDown: function(elm, k, i) { + showToolTable(k); + }, + onMouseUp: function(elm, k, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: [] + }, + { + title: 'Show input variable tree...', + onMouseDown: function(elm, k, i) { + }, + onMouseUp: function(elm, k, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: inputChildrenitems + }, + { + title: 'Show output variable tree...', + onMouseDown: function(elm, k, i) { + }, + onMouseUp: function(elm, k, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: outputChildrenitems + } + ] + //############################################################################################################################## + + node.on('contextmenu', d3.contextMenu(toolMenu)); + + // allow nodes to be dragged to new positions + node.call(d3.behavior.drag() + .origin(function (d) + { + return d; + }) + .on("dragstart", function () { + hideRightClickOption(); + this.parentNode.appendChild(this); }) + .on("drag", dragmove)); + + // add in the text for the nodes + node.filter(function (d) { return d.value !== 0; }) + .select("text") + .attr("x", -6) + .attr("y", function (d) { return d.height / 2; }) + .attr("dy", ".35em") + .attr("text-anchor", "end") + .attr("transform", null) + .text(function (d) { return d.name; }) + .filter(function (d) { return d.x < WIDTH / 2; }) + .attr("x", 6 + biHiSankey.nodeWidth()) + .attr("text-anchor", "start"); + + + collapser = svg.select("#collapsers").selectAll(".collapser") + .data(biHiSankey.expandedNodes(), function (d) { return d.id; }); + + + collapserEnter = collapser.enter().append("g").attr("class", "collapser"); + + collapserEnter.append("circle") + .attr("r", COLLAPSER.RADIUS) + .style("fill", function (d) { + d.color = colorScale(d.name.replace(/ .*/, "")); + return d.color; + }); + + collapserEnter + .style("opacity", OPACITY.NODE_DEFAULT) + .attr("transform", function (d) { + return "translate(" + (d.x + d.width / 2) + "," + (d.y + COLLAPSER.RADIUS) + ")"; + }); + + collapserEnter.on("dblclick", showHideChildren); + + collapser.select("circle") + .attr("r", COLLAPSER.RADIUS); + + collapser.transition() + .delay(TRANSITION_DURATION) + .duration(TRANSITION_DURATION) + .attr("transform", function (d, i) { + return "translate(" + + (COLLAPSER.RADIUS + i * 2 * (COLLAPSER.RADIUS + COLLAPSER.SPACING)) + + "," + + (-COLLAPSER.RADIUS - OUTER_MARGIN) + + ")"; + }); + + collapser.on("mouseenter", function (g) { + if (!isTransitioning) { + showTooltip().select(".value") + .text(function () { + return g.name + "\n(Double click to collapse)"; + }); + + d3.select(this) + .style("opacity", OPACITY.NODE_HIGHLIGHT) + .select("circle") + + node.filter(function (d) { + return d.ancestors.indexOf(g) >= 0; + }).style("opacity", OPACITY.NODE_HIGHLIGHT) + .select("rect") + } + }); + + collapser.on("mouseleave", function (g) { + if (!isTransitioning) { + hideTooltip(); + d3.select(this) + .style("opacity", OPACITY.NODE_DEFAULT) + .select("circle") + + node.filter(function (d) { + return d.ancestors.indexOf(g) >= 0; + }).style("opacity", OPACITY.NODE_DEFAULT) + .select("rect") + } + }); + + collapser.exit().remove(); + +} + +function prune_schema(parentXPath, objArray, xPathList) +{ + var firstElement = "/"+xPathList.split("/")[1]+"/"; + for (var i = 0; i < objArray.length; ++i) + { + var obj = objArray[i]; + var objXPath; + + //aigner: If object has children append a "/" as xPath separator + //else append comma as indicator for last element in the xPath + if (obj.children){objXPath = parentXPath+objArray[i].name+"/";} + else{objXPath = parentXPath+objArray[i].name;} + var objXPathFromFirst = objXPath.split(firstElement); + + // console.log("Current node ->") + // console.log(firstElement+objXPathFromFirst[1]) + // console.log(xPathList) + + var delete_it = true; + if(objXPathFromFirst[1]==undefined) + { + delete_it = false; + } + else + { + if (include(xPathList, firstElement+objXPathFromFirst[1])) + { + delete_it = false; + } + } + if (delete_it==true) + { + // console.log("delete ->") + // console.log( objXPathFromFirst[1]) + // console.log(xPathList) + + objArray.splice(i, 1); + i--; + } + else + { + // console.log("do not delete ->") + // console.log(objXPath); + if (obj.children) + { + if (obj.children.length==0) + { + objArray.splice(i, 1); + i--; + prune_schema(parentXPath, objArray, xPathList) + } + else{prune_schema(objXPath, obj.children, xPathList);} + + } + } + } +} +function getPrunedLeafNodes(parentXPath, objArray, xPathList, leafNodes) +{ + var firstElement = "/"+xPathList.split("/")[1]+"/"; + for (var i = 0; i < objArray.length; ++i) + { + var obj = objArray[i]; + var objXPath; + + //aigner: If object has children append a "/" as xPath separator + //else append comma as indicator for last element in the xPath + if (obj.children){objXPath = parentXPath+objArray[i].name+"/";} + else{objXPath = parentXPath+objArray[i].name;} + var objXPathFromFirst = objXPath.split(firstElement); + + // console.log("Current node ->") + // console.log(firstElement+objXPathFromFirst[1]) + // console.log(xPathList) + + var delete_it = true; + if(objXPathFromFirst[1]==undefined) + { + delete_it = false; + } + else + { + if (include(xPathList, firstElement+objXPathFromFirst[1])) + { + delete_it = false; + } + } + if (delete_it==true) + { + // console.log("delete ->") + // console.log( objXPathFromFirst[1]) + // console.log(xPathList) + + objArray.splice(i, 1); + i--; + } + else + { + // console.log("do not delete ->") + // console.log(objXPath); + if (obj.children) + { + if (obj.children.length==0) + { + objArray.splice(i, 1); + i--; + getPrunedLeafNodes(parentXPath, objArray, xPathList, leafNodes) + } + else{getPrunedLeafNodes(objXPath, obj.children, xPathList, leafNodes);} + } + else + { + obj.xPath = objXPath; + leafNodes.push(obj); + }; + } + } +} +function clean_tree(objArray) +{ + for (var i = 0; i < objArray.length; ++i) + { + var obj = objArray[i]; + if (obj.children) + { + if (obj.children.length==0) + { + objArray.splice(i, 1); + i--; + } + clean_tree(obj.children); + } + } +} +function countElements(node, counter) +{ + counter ++; + if (node.children) + { + if (node.children.length !== 0) + { + node.children.forEach(function(n) + { + counter = countElements(n, counter); + }); + } + } + return counter; +} +function createTreeLayout(theName,schema,theLinks,theAllLinks) +{ + var treeData = (JSON.parse(JSON.stringify(schema))); + + if (theLinks) + { + prune_schema("/"+treeData.name+"/", treeData.children, theLinks); + //aigner: count all descendants of a node + var firstEl = theLinks.split("/")[1]; + if(firstEl != treeData.name) + { + var cleanOperations = countElements(treeData,0) + for (var i=0; i<cleanOperations; i++){clean_tree(treeData.children);} + } + } + + + var width= 1000; + var height= 500; + var xOffset = 10; + var xOffset2 = 100; + + // Calculate total nodes, max label length + var totalNodes = 0; + var maxLabelLength = 0; + // variables for drag/drop + var selectedNode = null; + var draggingNode = null; + // Misc. variables + var i = 0; + var duration = 500; + var root; + + + // size of the diagram + var viewerWidth = width/3; + var viewerHeight = height+50; + + var tree = d3.layout.tree() + .size([viewerHeight, viewerWidth]) + + // define a d3 diagonal projection for use by the node paths later on. + var diagonal = d3.svg.diagonal() + .projection(function(d) { + return [d.y+xOffset, d.x]; + }); + + // A recursive helper function for performing some setup by walking through all nodes + + function visit(parent, visitFn, childrenFn) { + if (!parent) return; + + visitFn(parent); + + var children = childrenFn(parent); + if (children) { + var count = children.length; + for (var i = 0; i < count; i++) { + visit(children[i], visitFn, childrenFn); + } + } + } + + // Call visit function to establish maxLabelLength + visit(treeData, function(d) { + totalNodes++; + maxLabelLength = Math.max(d.name.length, maxLabelLength); + }, function(d) { + return d.children && d.children.length > 0 ? d.children : null; + }); + + function getMaxLength(data) + { + var maxLen=0;; + for (var i = 0; i < data.length; i++) + { + maxLen = Math.max(data[i].name.length, maxLen); + } + for (var i = 0; i < data.length; i++) + { + data[i].labelLength = maxLen; + if (data[i].children) + {getMaxLength(data[i].children);} + if (data[i]._children) + {getMaxLength(data[i]._children);} + } + + } + if(treeData._children) + {getMaxLength(treeData._children);} + if(treeData.children) + {getMaxLength(treeData.children);} + treeData.labelLength = treeData.name.length; + + + // Collapse the node and all it's children + function collapse(d) { + if(d.children) { + d._children = d.children + d._children.forEach(collapse) + d.children = null + } + } + // Collapse the node and all it's children + function expand(d) { + if(d._children) { + d.children = d._children + d.children.forEach(expand) + d._children = null + } + } + // Toggle children on click. + function click(d) + { + if (d.children) { + d._children = d.children; + d.children = null; + } else + { + d.children = d._children; + d._children = null; + } + update(d,theAllLinks); + } + // Collapse/expand entire tree on double-click + function dblclick(d) + { + if(d.children) + { + collapse(d); + } + else if(d._children) + { + expand(d); + } + update(d,theAllLinks); + } + + + //aigner: Here the tree layout is created + var treeLayoutdiv = d3.select("body").append("div").attr("class","treeDiv_"+theName) + .style("left",(d3.event.pageX) + "px") + .style("top",(d3.event.pageY - 28) + "px") + .style("position", "absolute") + .on("mousedown", function(d) { + d3.select(this).moveToFront(); + }) + + var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG") + var treeGroup = treeLayoutSVG.append("g").attr("class","treeGroup").style("position","absolute") + .attr("transform", "translate(50,0)"); + var margin = {top: 20, right: 90, bottom: 20, left: 90}, + width = 960 - margin.left - margin.right, + height = 500 - margin.top - margin.bottom; + + // append the svg object to the body of the page + // appends a 'group' element to 'svg' + // moves the 'group' element to the top left margin + var offset_tmp = 60; + treeLayoutSVG = treeLayoutSVG.attr("width", width + 1.2*margin.right + margin.left+offset_tmp) + .attr("height", height + margin.top + margin.bottom+offset_tmp); + treeLayoutdiv = treeLayoutdiv.attr("width", width + 1.2*margin.right + margin.left+offset_tmp) + .attr("height", height + margin.top + margin.bottom+offset_tmp); + treeGroup = treeGroup + .attr("width", width + margin.right + margin.left) + .attr("height", height + margin.top + margin.bottom); + + + //Drag Function for treeLayout + var xPos_init = d3.event.x - 2; + var yPos_init = d3.event.y - 2; + var xOffset_tmp; + var yOffset_tmp; + var drag = d3.behavior.drag() + .on("dragstart", dragstarted) + .on("drag", dragged) + .on("dragend", dragended); + function dragstarted() { + xOffset_tmp = xPos_init-d3.event.sourceEvent.clientX; + yOffset_tmp = yPos_init-d3.event.sourceEvent.clientY; + } + function dragged() { + d3.select(this) + .style("left",(d3.event.x+xOffset_tmp) + "px") + .style("top",(d3.event.y+yOffset_tmp) + "px") + } + function dragended() { + xPos_init = d3.event.sourceEvent.clientX+xOffset_tmp; + yPos_init = d3.event.sourceEvent.clientY+yOffset_tmp; + } + treeLayoutdiv.call(drag); + + + var frame = treeGroup.append("rect") + .attr("class","treeFrame") + .attr("stroke-width", 1) + .attr("stroke", "white") + .attr("fill-opacity", .8); + + var removeSymbol = treeGroup.append("g").attr("class", "remove"+d3.event.pageX+"_"+d3.event.pageX) + + + var r=8; + var cx=r+2; + var cy=r+2; + var circle = removeSymbol.append("circle") + .attr("cx", cx) + .attr("cy", cy) + .attr("r", r) + .style("stroke", "black") + .style("stroke-width", 1.5) + .style("fill", "red") + .style("fill-opacity", .6) + var minus = removeSymbol.append("line") + .attr("x1", cx+r/2) + .attr("y1", cy) + .attr("x2", cx-r/2) + .attr("y2", cy) + .style("stroke", "black") + .style("stroke-width", 1.5); + + removeSymbol + .on("mouseover", function(){circle.style("fill", "red").style("fill-opacity", .8);}) + .on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)}) + .on("mousedown",function() + { + circle.style("fill", "darkred").style("fill-opacity",1); + }) + .on("mouseup",function() + { + treeLayoutdiv.remove(); + }) + + + // Define the root + root = treeData; + root.x0 = 0; + root.y0 = 0; + + // Append a group which holds all nodes and which the zoom Listener can act upon. + var svgGroup_xOff = root.name.length*10+50 + var svgGroup = treeGroup.append("g") + .attr("class","tree_"+theName) + .attr("transform", "translate("+ svgGroup_xOff + "," + String(margin.top+10) + ")"); + + collapse(root); + update(root,theAllLinks); + + var frametext = treeGroup.append("text") + .attr("class", "frametext") + .attr("x",30) + .attr("y",15) + .attr("text-anchor","start") + .attr("font-family","Arial") + .attr("font-size","18px") + .attr("font-weight","bold") + .text(theName) + + function update(source,allLinks) + { + // Compute the new height, function counts total children of root node and sets tree height accordingly. + // This prevents the layout looking squashed when new nodes are made visible or looking sparse when nodes are removed + // This makes the layout more consistent. + var levelWidth = [1]; + var levelLength = [1]; + var childCount = function(level, n) { + + if (n.children && n.children.length > 0) { + if (levelWidth.length <= level + 1) levelWidth.push(0); + + levelWidth[level + 1] += n.children.length; + n.children.forEach(function(d) { + childCount(level + 1, d); + }); + } + }; + childCount(0, root); + + var newHeight = d3.max(levelWidth) * 60; // 20 pixels per line + var newWidth = viewerWidth+300; + + //BENNI: fill in viewerHeight instead of newHeight for other expanding/collapsing beaviour + tree = tree.size([newHeight, newWidth]); + + frame = frame.attr("width",newWidth) + .attr("height",newHeight+60) + .attr("fill","white"); + + + + // Compute the new tree layout. + var nodes = tree.nodes(root), + links = tree.links(nodes); + + + //aigner: count all descendants of a node + function countDescendants(node, counter) + { + if (node._children) + { + node._children.forEach(function(n) + { + counter = countDescendants(n, counter); + }); + } + else if (node.children) + { + node.children.forEach(function(n) + { + counter = countDescendants(n, counter); + }); + } + else + { + counter ++; + } + return counter; + } + + + var depths = []; + var labelLength = []; + nodes.forEach(function(d) + { + //aigner: If node is collapsed show number of ancestors + if (d._children) + { + d._childrenNum = countDescendants(d, 0); + d.text = d.name + " (" + d._childrenNum + ")"; + } + else + { + d.text = d.name + } + + //aigner: Find maximum labelLength for each level + if (!depths.includes(d.depth)) + { + depths.push(d.depth); + labelLength.push(d.text.length); + } + else + { + if (d.depth!=0){labelLength[depths.indexOf(d.depth)] = Math.max(d.text.length, labelLength[depths.indexOf(d.depth)]);} + } + }); + // Set widths between levels based on labelLength of each level. + var newWidth=0; + var depth_tmp = 0; + nodes.forEach(function(d) + { + if (d.parent) + { + d.y = d.parent.y+(labelLength[depths.indexOf(d.depth)])*10+50; + } + else{d.y=0} + + + if (newWidth<d.y) + {newWidth=d.y;} + + // console.log("##############") + // console.log(d.name) + // console.log("x = " + d.x) + // console.log("y = " + d.y) + // console.log("depth = " + depths.indexOf(d.depth)) + // console.log("##############") + }); + + + // console.log(depths) + // console.log(labelLength) + + //aigner: Adjust height and width of the frame + treeLayoutdiv = treeLayoutdiv.attr("height", newHeight + margin.top + margin.bottom+offset_tmp) + treeLayoutdiv = treeLayoutdiv.attr("width", newWidth + margin.top + margin.bottom +300+maxLabelLength*25+offset_tmp) + treeLayoutSVG = treeLayoutSVG.attr("height", newHeight + margin.top + margin.bottom+offset_tmp) + treeLayoutSVG = treeLayoutSVG.attr("width", newWidth + margin.top + margin.bottom +300+maxLabelLength*25+offset_tmp) + frame = frame.attr("height", newHeight + margin.top + margin.bottom) + frame = frame.attr("width", newWidth + margin.top + margin.bottom+300+maxLabelLength*15) + + + + // Update the nodes… + var treeNode = svgGroup.selectAll("g.treeNode") + .data(nodes, function(d) { + return d.id || (d.id = ++i); + }); + + var dblclick_timer = false; + // Enter any new nodes at the parent's previous position. + var nodeEnter = treeNode.enter().append('g') + .attr('class', 'treeNode') + .attr("transform", function(d) { + return "translate(" + source.y0 + "," + source.x0 + ")"; + }) + .on("click", function(d) { + // if double click timer is active, this click is the double click + if ( dblclick_timer ) + { + clearTimeout(dblclick_timer) + dblclick_timer = false + // double click code code comes here + //console.log("DOUBLE CLICK") + dblclick(d); + } + // otherwise, what to do after single click (double click has timed out) + else dblclick_timer = setTimeout( function(){ + dblclick_timer = false + // single click code code comes here + //console.log("SINGLE CLICK") + click(d); + }, 250) + }) + + + + nodeEnter.append("circle") + .attr('class', 'nodeCircle') + .attr("r", 0) + .style("fill", function(d) { + return d._children ? "lightsteelblue" : "#fff"; + }) + .style("stroke", function(d) { + if(d.pipeLineIn && !d.pipeLineOut){ + //console.log(d); + return '#CC0000'} + else if(!d.pipeLineIn && d.pipeLineOut){ + //console.log(d); + return '#99CC00'} + }) + .attr("cx", function(d) {return xOffset}); + + nodeEnter.append("text") + .attr("x", function(d) + { + return d.children || d._children ? -10+xOffset : 10+xOffset; + }) + .attr("dy", ".35em") + .attr('class', 'nodeText') + .attr("text-anchor", function(d) { + return d.children || d._children ? "end" : "start"; + }) + .text(function(d) { + return d.text; + }) + .style("fill-opacity", 0) + + + // Update the text to reflect whether node has children or not. + treeNode.select('text') + .attr("x", function(d) { + return d.children || d._children ? -10+xOffset : 10+xOffset; + }) + .attr("text-anchor", function(d) { + return d.children || d._children ? "end" : "start"; + }) + .text(function(d) { + return d.text; + }); + + // Change the circle fill depending on whether it has children and is collapsed + treeNode.select("circle.nodeCircle") + .attr("r", 4.5) + .style("fill", function(d) { + return d._children ? "lightsteelblue" : "#fff"; + }); + + // UPDATE + // Transition nodes to their new position. + var nodeUpdate = treeNode.transition() + .duration(duration) + .attr("transform", function(d) { + return "translate(" + d.y + "," + d.x + ")"; + }); + + // Fade the text in + nodeUpdate.select("text") + .style("fill-opacity", 1); + + + + + function showVariableTable(aVariable) + { + var varTableDiv = d3.select("body").append("div").attr("class","varTableDiv_"+theName+"_"+aVariable.name) + .style('left', (d3.event.pageX - 2) + 'px') + .style('top', (d3.event.pageY - 2) + 'px') + .style("position", "absolute") + .on("mousedown", function(d) { + d3.select(this).moveToFront(); + }) + var varTableGroup = varTableDiv.append("g").attr("class","varTableGroup") + + //Drag Function for node table + var xPos_init = d3.event.x - 2; + var yPos_init = d3.event.y - 2; + var xOffset_tmp; + var yOffset_tmp; + var drag = d3.behavior.drag() + .on("dragstart", dragstarted) + .on("drag", dragged) + .on("dragend", dragended); + function dragstarted() { + xOffset_tmp = xPos_init-d3.event.sourceEvent.clientX; + yOffset_tmp = yPos_init-d3.event.sourceEvent.clientY; + } + function dragged() { + d3.select(this) + .style("left",(d3.event.x+xOffset_tmp) + "px") + .style("top",(d3.event.y+yOffset_tmp) + "px") + } + function dragended() { + xPos_init = d3.event.sourceEvent.clientX+xOffset_tmp; + yPos_init = d3.event.sourceEvent.clientY+yOffset_tmp; + } + varTableDiv.call(drag); + + var headLine = "Node Information (" + theName + ")"; + var tabRemoveSVG = varTableGroup.append("svg") + .attr("width",String(headLine.length*9.5+"pt")) + .attr("height",26) + tabRemoveSVG.append("rect") + .attr("width", "100%") + .attr("height", "100%") + .attr("fill", "white"); + var tabRemoveSymbol = tabRemoveSVG.append("g"); + tabRemoveSymbol = tabRemoveSymbol + .attr("class", "tabRemoveSymbol") + .attr("transform", "translate(26,0)") + var circle = tabRemoveSymbol.append("circle") + .classed("remCircle",true) + var minus = tabRemoveSymbol.append("line").classed("remMinus",true) + var cx = -20; + var cy = 12; + circle = circle + .attr("cx", cx+5) + .attr("cy", cy) + .attr("r", 10) + minus = minus + .attr("x1", cx) + .attr("y1", cy) + .attr("x2", cx+10) + .attr("y2", cy) + + + tabRemoveSVG.append("text").attr("class","tabRemoveText") + .attr("transform", "translate(26,20)") + .attr("fill", "black") + .style("font-family", "Arial") + .style("font-size", "16pt") + .style("font-weight", "bold") + .text(headLine); + + + tabRemoveSymbol + .on("mouseover", function(){ + d3.select(this).style("cursor", "pointer") + circle.style("fill", "red").style("fill-opacity", .8); + }) + .on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)}) + tabRemoveSymbol.on("click", function(d) + { + varTableDiv.remove(); + }) + + var data = []; + // render the table(s) + data.push({ "name" : "Name", "value" : "\""+aVariable.name+"\"" }) + + function getNodeXPath(strWrapper,aNode) + { + strWrapper.val = "/"+aNode.name+strWrapper.val; + if (!aNode.parent) + { + return strWrapper; + } + else + { + + return getNodeXPath(strWrapper, aNode.parent); + } + } + var xPath_tmp = getNodeXPath({ val : '' }, aVariable).val; + data.push({ "name" : "xPath", "value" : xPath_tmp }) + if (aVariable.type){data.push({ "name" : "Type", "value" : aVariable.type })} + if (aVariable.level){data.push({ "name" : "Level", "value" : aVariable.level })} + if (aVariable.children || aVariable._children) + { + var childrenNum=0; + if (aVariable.children){childrenNum=childrenNum+aVariable.children.length} + if (aVariable._children){childrenNum=childrenNum+aVariable._children.length} + data.push({ "name" : "Number of children", "value" : childrenNum }) + } + if (aVariable.dimension){data.push({ "name" : "Dimension", "value" : aVariable.dimension })} + else if(aVariable.dimension===null){data.push({ "name" : "Dimension", "value" : "undefined" })} + if (aVariable.value){data.push({ "name" : "Value(s)", "value" : aVariable.value })} + var table = varTableGroup.append('table'); + tabulate(table,data,['name', 'value']); // 2 column table + } + + //Highlight function, that shows usage of a node in the XDSM + function highlight(data,aText) + { + aText = "/"+data.name+aText; + if (data.parent){highlight(data.parent,aText)} + else + { + var allLinks_tmp = allLinks[0]; + allLinks_tmp.forEach(function(p) { + var firstElement_tmp = p.__data__.name.split("/")[1] + var text_fromFirst = "/"+firstElement_tmp+aText.split(firstElement_tmp)[1] + if (include(p.__data__.name,text_fromFirst)) + { + d3.select(p).style("opacity", .8); + } + else + { + d3.select(p).style("opacity", 0); + } + }); + } + } + + //Function writeTreeToXML goes through tree nodes and puts the into an xml document + function writeTreeToXML(aNode,anXMLDoc,anXPath) + { + //Variable "children" + //--> One children variable, no matter whether a node has "_children" (collapsed) or "children" (expanded) + var children; + if (aNode._children){children = aNode._children;} + else if (aNode.children){children = aNode.children;} + + //Get current xml element with its xPath + var element = anXMLDoc.evaluate(anXPath,anXMLDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue; + if (element != null) {element.value = '...';} + + //If a node has children (collapsed or expanded), loop through them + if (children) + { + for (var i=0; i < children.length;i++) + { + //Name of the new XML element --> childName + var child = children[i]; + var childName = child.name.split(/[\[\]]+/);//Split childName at "[]" which is the uID + var cleanChildName = childName[0].split(/[\+\*\^\-\ \#]+/);//Split childName all special characters + var newNode = anXMLDoc.createElement(String(cleanChildName[0])); + + //The children are appended to the xPath --> newXPath + var newXPath = anXPath+"/"+cleanChildName[0]; + + //If childName contains a uID, make the uID an attribute + if (childName[1]) + { + if (parseInt(childName[1])) + { + var dummyID = childName[1]; + newNode.setAttribute("dummyID", dummyID) + newXPath = newXPath+"[@dummyID='"+dummyID+"']"; + } + else + { + var uID = childName[1]; + newNode.setAttribute("uID", uID) + newXPath = newXPath+"[@uID='"+uID+"']"; + } + } + if (cleanChildName.length>1) {newNode.setAttribute("elementName", childName[0])}; + + //Append the newNode to the xml structure + element.appendChild(newNode); + + + + ////aigner: Sorting of XML elements according to "uID" + // var items = element.children; + // var itemsArr = []; + // for (var j in items) { + // if (items[j].nodeType == 1) { // get rid of the whitespace text nodes + // itemsArr.push(items[j]); + // } + // } + // itemsArr.sort(function(a,b){ + // if (a.getAttribute("uID") < b.getAttribute("uID")) + // return -1; + // if (a.getAttribute("uID") > b.getAttribute("uID")) + // return 1; + // return 0; + // }); + + // for (j = 0; j < itemsArr.length; ++j) { + // element.appendChild(itemsArr[j]); + // } + + //call function writeTreeToXML recursively for all children + writeTreeToXML(child,anXMLDoc,newXPath) + } + } + else + { + if (aNode.value){element.innerHTML = String(aNode.value);} + else{element.innerHTML = " ";} + } + //return the xml document + return anXMLDoc; + } + + function removeAttributeInAllElements(aDocument,attribute) + { + var matchingElements = []; + var allElements = aDocument.getElementsByTagName('*'); + for (var i = 0, n = allElements.length; i < n; i++) + { + if (allElements[i].getAttribute(attribute) !== null) + { + allElements[i].removeAttribute(attribute); + } + } + return matchingElements; + } + + function putAncestorsInXMLString(strWrapper, aNode) + { + //Name of the new XML element + var nodeName = aNode.name.split(/[\[\]]+/);//Split name at "[]" which is the uID + var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters + //If nodeName contains a uID, make the uID an attribute + if (nodeName[1]) + { + var uID = nodeName[1]; + strWrapper.val = "<"+cleanNodeName[0]+" uID='"+ uID +"'>"+strWrapper.val+"</"+cleanNodeName[0]+">";; + } + else + { + strWrapper.val = "<"+cleanNodeName[0]+">"+strWrapper.val+"</"+cleanNodeName[0]+">";; + } + var aParent = aNode.parent; + if (aParent) + { + return putAncestorsInXMLString(strWrapper, aParent); + } + else + { + return strWrapper; + } + } + + function putAncestorsInXPath(strWrapper, aNode) + { + //Name of the new XML element + var nodeName = aNode.name.split(/[\[\]]+/);//Split name at "[]" which is the uID + var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters + //If nodeName contains a uID, make the uID an attribute + if (nodeName[1]) + { + var uID = nodeName[1]; + strWrapper.val = "/"+cleanNodeName[0]+"[@uID='"+uID+"']"+strWrapper.val; + } + else + { + strWrapper.val = "/"+cleanNodeName[0]+strWrapper.val; + } + var aParent = aNode.parent; + if (aParent) + { + return putAncestorsInXPath(strWrapper, aParent); + } + else + { + return strWrapper; + } + } + + // Function to download data to a file + function download(filename, text) { + var element = document.createElement('a'); + element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text)); + element.setAttribute('download', filename); + + element.style.display = 'none'; + document.body.appendChild(element); + + element.click(); + + document.body.removeChild(element); + } + + //menu --> functions for right click options + var nodeMenu = [ + { + title: 'Show node information', + onMouseDown: function(elm, d, i) { + showVariableTable(d); + }, + onMouseUp: function(elm, d, i) {}, + onMouseOver: function(elm, d, i) {}, + childrenItems: [] + }, + { + title: 'Show usage of node in diagram', + onMouseDown: function(elm, d, i) { + d3.selectAll(".treeFrame").attr("fill-opacity", .5); + d3.selectAll(".nodeText").style("fill-opacity", 0.5); + var theText=""; + highlight(d,theText); + }, + onMouseUp: function(elm, d, i) { + d3.selectAll(".link").style("opacity",.6) + d3.selectAll(".treeFrame").attr("fill-opacity", .8); + d3.selectAll(".nodeText").style("fill-opacity", 1); + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: [] + }, + { + title: 'Copy x-path to clipboard', + onMouseDown: function(elm, d, i) { + function copyToClipboard(text) + { + window.prompt("Copy to clipboard: Ctrl+C, Enter", text); + } + function copyXPathToClipboard(data,aText) + { + aText = "/"+data.name+aText; + if (data.parent){copyXPathToClipboard(data.parent,aText)} + else{copyToClipboard(aText);} + } + var copyText=""; + copyXPathToClipboard(d,copyText); + d3.select('.d3-context-menu').style('display', 'none'); + }, + onMouseUp: function(elm, d, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: [] + }, + { + title: 'Download full tree as XML-file', + onMouseDown: function(elm, d, i) { + //Begin xml structure with the first element + var xmlString = "<"+nodes[0].name+">"+"</"+nodes[0].name+">"; + //Create a new xml document + var parser = new DOMParser(); + var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml" + //Get initial xPath of the tree and pass it to the function "writeTreeToXML" + var initialXPath = "/"+nodes[0].name; + writeTreeToXML(nodes[0],xmlDocument,initialXPath); + //remove all attributes dummyID + removeAttributeInAllElements(xmlDocument,'dummyID'); + //Make the xml document a string + var serializer = new XMLSerializer(); + var xmlString = serializer.serializeToString(xmlDocument); + xmlString = vkbeautify.xml(xmlString); + //Download a document with the xml-schema + download(theName+'_full.xml',xmlString); + }, + onMouseUp: function(elm, d, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: [] + }, + { + title: 'Download tree as XML-file from current node', + onMouseDown: function(elm, d, i) { + var xmlString = putAncestorsInXMLString({ val : '' }, d).val; + var initialXPath = putAncestorsInXPath({ val : '' }, d).val; + //Create a new xml document + var parser = new DOMParser(); + var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml" + //Get initial xPath of the tree and pass it to the function "writeCurrentTreeToXML" + writeTreeToXML(d,xmlDocument,initialXPath); + //remove all attributes dummyID + removeAttributeInAllElements(xmlDocument,'dummyID'); + //Make the xml document a string + var serializer = new XMLSerializer(); + xmlString = serializer.serializeToString(xmlDocument); + xmlString = vkbeautify.xml(xmlString); + //Download a document with the xml-schema + download(theName+"_"+d.name+'.xml',xmlString); + }, + onMouseUp: function(elm, d, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: [] + } + ] + + + nodeEnter = nodeEnter + .on('contextmenu', d3.contextMenu(nodeMenu)); + + + // Remove any exiting nodes + var nodeExit = treeNode.exit().transition() + .duration(duration) + .attr("transform", function(d) { + return "translate(" + source.y + "," + source.x + ")"; + }) + .remove(); + + // Update the links… + var link = svgGroup.selectAll("path.treeLink") + .data(links, function(d) { + return d.target.id; + }); + + // Enter any new links at the parent's previous position. + link.enter().insert("path", "g") + .attr("class", "treeLink") + .attr("d", function(d) { + var o = { + x: source.x0, + y: source.y0 + }; + return diagonal({ + source: o, + target: o + }); + }); + + // Transition links to their new position. + link.transition() + .duration(duration) + .attr("d", diagonal); + + // Transition exiting nodes to the parent's new position. + link.exit().transition() + .duration(duration) + .attr("d", function(d) { + var o = { + x: source.x, + y: source.y + }; + return diagonal({ + source: o, + target: o + }); + }) + .remove(); + + // Stash the old positions for transition. + nodes.forEach(function(d) { + d.x0 = d.x; + d.y0 = d.y; + }); + } +} + +d3.json(jsonFile, function(error, graph) { + var theNodes = graph.nodes + var theLinks = graph.edges + theLinks.forEach(function (link) { + link.source = link.from; + link.target = link.to; + link.value = link.name.split(",").length + }); + + + //aigner: Tree option menu to select which kind of tree view the user wants to see + //#####################################################################// + function showFullTree(categoryName) + { + var theSchema; + $.ajax({ + dataType: "json", + url: "json/"+categoryName+".json", + async: false, + success: function(data){theSchema = JSON.parse(JSON.stringify(data))} + }); + var name_tmp = "Full tree view"; + var emptyArray=""; + var allLinks = d3.selectAll(".link"); + createTreeLayout(name_tmp,theSchema,emptyArray,allLinks); + } + + var childrenItems = []; + for (var j=0; j< varCategories.length; j++) + { + childrenItems.push({title: 'according to ' + varCategories[j].description, + identifier: varCategories[j].name+"_"+graphID, + onMouseClick: function(elm, d, i) {showFullTree(d.identifier)}, + onMouseOver: function(elm,d,i){}}) + } + var treeOptionMenu = [ + { + title: 'Show variable tree...', + onMouseDown: function(elm, d, i) { + }, + onMouseUp: function(elm, d, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: childrenItems + } + ] + //#####################################################################// + + makeKadmosMenu(graphs,"Sankey Diagram",graphID); + + //aigner: treeLayout in the bottom + //################################################################################################// + //aigner: tree layout is done + var emptyArray; + var expandSymbolDiv = d3.select("body").append("div").attr("class","expandSymbolDiv"); + var expandSymbolSvg = expandSymbolDiv.append("svg").attr("width",400).attr("height",100); + var expandSymbol = expandSymbolSvg.append("g") + .attr("class", "newExpandSymbol") + .attr("transform", "translate(38,12)"); + var expandRect = expandSymbol.append("rect") + .attr("x",-28) + .attr("height", 50) + .attr("fill", "#666666") + .attr("stroke", "none") + .attr("stroke-width", 2) + .attr("fill-opacity", 1) + var expCircle = expandSymbol.append("circle") + .attr("cx", -10) + .attr("cy", 25); + var expLine1 = expandSymbol.append("line"); + var expLine2 = expandSymbol.append("line"); + drawExpandSymbol(expCircle,expLine1,expLine2); + expCircle = expCircle.attr("fill", "white"); + expandSymbol.append("text") + .attr("transform", "translate(15,35)") + .attr("font-family","Arial") + .attr("font-size","24pt") + .attr("fill","white") + .text("Show full variable tree") + expandRect.attr("width", function(d) {return this.parentNode.getBBox().width+40}) + expandSymbol + .on("mouseover", function(){ + d3.select(this).style("cursor", "pointer") + expCircle.style("fill", "green").style("fill-opacity", .8); + expandRect.style("fill", "#4677f8"); + showRightClickOption(); + }) + .on("mouseout", function(){ + expCircle.style("fill", "green").style("fill-opacity", .6); + expandRect.style("fill", "#666666"); + hideRightClickOption(); + }) + .on('contextmenu', d3.contextMenu(treeOptionMenu)) + //################################################################################################// + + d3.select(".expandSymbolDiv").moveToBack() + d3.select(".newDiv").moveToBack() + d3.select(".vispackDiv").moveToBack() + + biHiSankey + .nodes(theNodes) + .links(theLinks) + .initializeNodes(function (node) { + node.state = node.parent ? "contained" : "collapsed"; + }) + .layout(LAYOUT_INTERATIONS); + + disableUserInterractions(2 * TRANSITION_DURATION); + + update(); +}); +//#####################################################################// + +},{"d3":1}]},{},[2]); \ No newline at end of file diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/xdsm.html b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/xdsm.html new file mode 100644 index 000000000..f1e098cee --- /dev/null +++ b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/xdsm.html @@ -0,0 +1,379 @@ +<!doctype html> +<html class="js" lang=""> +<style> +/* +* XDSMjs +* Copyright 2016 Rémi Lafage +*/ + +/* Component types */ +.xdsm .user { +visibility: hidden; +} + +.xdsm .coordinator { +fill: #FFFFFF; +stroke: black; +stroke-width: 1px; +} + +.xdsm .optimization { +fill: #CCCCFF; +stroke: black; +stroke-width: 1px; +} + +.xdsm .converger { +fill: #FFE5CC; +stroke: black; +stroke-width: 1px; +} + +.xdsm .doe { +fill: #FFFCCC; +stroke: black; +stroke-width: 1px; +} + +.xdsm .rcganalysis { +fill: #E5DEB3; +stroke: black; +stroke-width: 1px; +} + +.xdsm .precouplinganalysis { +fill: #BCE4FA; +stroke: black; +stroke-width: 1px; +} + +.xdsm .preiteratoranalysis { +fill: #BCE4FA; +stroke: black; +stroke-width: 1px; +} + +.xdsm .postiteratoranalysis { +fill: #BCE4FA; +stroke: black; +stroke-width: 1px; +} + +.xdsm .coupledanalysis { +fill: #CCFFCC; +stroke: black; +stroke-width: 1px; +} + +.xdsm .postcouplinganalysis { +fill: #F2CCD9; +stroke: black; +stroke-width: 1px; +} + +.xdsm .consistencyconstraintfunction { +fill: #F2CCD9; +stroke: black; +stroke-width: 1px; +} + +.xdsm .lp_optimization { +fill: #CCCCFF; +stroke: black; +stroke-width: 1px; +} + +.xdsm .analysis { +fill: #CCFFCC; +stroke: black; +stroke-width: 1px; +} + +.xdsm .mdo { +fill: #FFCCCC; +stroke: black; +stroke-width: 1px; +} + +.xdsm .function { +fill: #F2CCD9; +stroke: black; +stroke-width: 1px; +} + +.xdsm .mda { +fill: #FFE5CC; +stroke: black; +stroke-width: 1px; +} + +.xdsm .metamodel { +fill: #FFFCCC; +stroke: black; +stroke-width: 1px; +} + +/* Title */ +.xdsm g.title text { +display: block; +font-size: 2em; +margin-top: 0.67em; +margin-bottom: 0.67em; +margin-left: 0; +margin-right: 0; +font-family:Arial; +} +.xdsm g.title rect { +fill: none; +} + + +/* Text Default */ +.xdsm text { +fill: black; +stroke: none; +font-size: 16pt; +font-family:Arial; +} +.xdsm tspan.sub { +font-size: small; +font-family:Arial; +} +.xdsm tspan.sup { +font-size: small; +font-family:Arial; +} + +/* Data */ +.xdsm .dataInter polygon { +fill: #E5E5E5; +stroke: black; +stroke-width: 1px; +} + +.xdsm .dataIO polygon { +fill: #FFFFFF; +stroke: black; +stroke-width: 1px; +} + +/* Dataflow */ +.xdsm g.dataflow { +fill: none; +stroke: grey; +stroke-width: 8px; +} + +/* Workflow */ +.xdsm g.workflow { +fill: none; +stroke: black; +stroke-width: 2px; +} + +/* Tooltip */ +div.tooltip { +position: absolute; +text-align: center; +font-size: 16pt; +padding: 10px; +background: lightsteelblue; +border: 0px; +border-radius: 8px; +pointer-events: none; +} + +div.treeDiv { +position: absolute; +} + +div.contextDiv { +position: absolute; +} + +sub, sup { +/* Specified in % so that the sup/sup is the right size relative to the surrounding text */ +font-size: 75%; +/* Zero out the line-height so that it doesn't interfere with the positioning that follows */ +line-height: 0; +/* Where the magic happens: makes all browsers position the sup/sup properly, relative to the surrounding text */ +position: relative; +/* Note that if you're using Eric Meyer's reset.css, this is already set and you can remove this rule */ +vertical-align: baseline; +} + +sup { +/* Move the superscripted text up */ +top: -0.5em; +} + +sub { +/* Move the subscripted text down, but only half as far down as the superscript moved up */ +bottom: -0.5em; +} + +/* Aigner: New styles for tree layout */ +.node { +cursor: pointer; +} + +.overlay{ +background-color:#FFF; +} + +.node circle { +fill: #fff; +stroke: #3399FF; +stroke-width: 1.5px; +} + +.node text { +font-size:16pt; +font-family:Arial; +} + +.link { +fill: none; +stroke: #ccc; +stroke-width: 1.5px; +} + +.d3-context-menu { + position: absolute; + display: none; + background-color: #f2f2f2; + border-radius: 4px; + font-family: Arial; + font-size: 16pt; + width: 350px; + border: 1px solid #d4d4d4; + z-index:1200; +} +.d3-context-menu ul { + list-style-type: none; + margin: 4px 0px; + padding: 0px; + cursor: default; +} +.d3-context-menu ul li { + padding: 4px 16px; +} +.d3-context-menu ul li:hover { + background-color: #3399FF; +} +.d3-context-menu ul li > ul { + position: absolute; + background-color: #f2f2f2; + top: 0; + min-width: 350px; + left: 350px; + z-index: -1; +} + +.d3-context-menu ul li > ul li:hover +{ + background-color: #3399FF; + color: #fefefe; +} + +.ackn { +fill: #666666; +stroke: #666666; +stroke-width: 2.0; +} + +.acknGroup:hover .ackn{ +fill: #3399FF; +stroke: #3399FF; +} + +.newDiv { + position:relative; + top: -100px; + left: 220px; + background-color: none; +} +.newDiv a { + text-decoration: none; + color: white; + font-family: Arial; + font-size: 20pt; + padding-top: 12px; + padding-right: 12px; + padding-bottom: 12px; + padding-left: 6px; + display:inline-block; +} +.newDiv ul { + display: inline-block;; + margin: 0; + padding: 0; + background-color: #666666; +} +.newDiv ul li {display: inline-block;} +.newDiv ul li:hover {background: #888;} +.newDiv ul li:hover ul {display: block;} +.newDiv ul li ul { + position: absolute; + min-width: 200px; + display: none; +} +.newDiv ul li ul li { + background: #555; + display: block; +} +.newDiv ul li ul li a { + display:block !important +} +.newDiv ul li ul li:hover {background: #3399FF;} + +table { + width: 800px; + table-layout:fixed; +} + +table, th, td { + font-family: Arial; + font-size: 16pt; + background-color: white; + border: 2pt solid darkgrey; + border-collapse: collapse; + text-align: left; + word-wrap:break-word; +} +} +th, td { + padding-top: 6px; + padding-right: 20px; + padding-bottom: 6px; + padding-left: 20px; + min-width: 100px; + max-width: 400px; +} + +.remCircle { + stroke: black; + stroke-width: 2; + fill: red; + fill-opacity: .6 +} +.remMinus { + stroke: black; + stroke-width: 2; +} + +.acknText { +font-family: Arial; +font-size: 12pt; +fill: #666666; +} + +</style> + <head> + <meta charset="utf-8"> + <title>KADMOS XDSM View</title> + </head> + <body> + <script src="xdsm.js"></script> + </body> +</html> diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/xdsm.js b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/xdsm.js new file mode 100644 index 000000000..f577b9f47 --- /dev/null +++ b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/xdsm.js @@ -0,0 +1,19906 @@ +(function() { +/*! jQuery v3.2.0 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.0",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c<b?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=Array.isArray(d)))?(e?(e=!1,f=c&&Array.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;f<g;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e);return!1}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}return!1}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;d<e;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,N,e),g(f,c,O,e)):(f++,j.call(a,g(f,c,N,e),g(f,c,O,e),g(f,c,N,c.notifyWith))):(d!==N&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S), +a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},U=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function V(){this.expando=r.expando+V.uid++}V.uid=1,V.prototype={cache:function(a){var b=a[this.expando];return b||(b={},U(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){Array.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(L)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var W=new V,X=new V,Y=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function $(a){return"true"===a||"false"!==a&&("null"===a?null:a===+a+""?+a:Y.test(a)?JSON.parse(a):a)}function _(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Z,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c=$(c)}catch(e){}X.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return X.hasData(a)||W.hasData(a)},data:function(a,b,c){return X.access(a,b,c)},removeData:function(a,b){X.remove(a,b)},_data:function(a,b,c){return W.access(a,b,c)},_removeData:function(a,b){W.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=X.get(f),1===f.nodeType&&!W.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),_(f,d,e[d])));W.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){X.set(this,a)}):T(this,function(b){var c;if(f&&void 0===b){if(c=X.get(f,a),void 0!==c)return c;if(c=_(f,a),void 0!==c)return c}else this.each(function(){X.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=W.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var aa=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ba=new RegExp("^(?:([+-])=|)("+aa+")([a-z%]*)$","i"),ca=["Top","Right","Bottom","Left"],da=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ea=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function fa(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&ba.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var ga={};function ha(a){var b,c=a.ownerDocument,d=a.nodeName,e=ga[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ga[d]=e,e)}function ia(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=W.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&da(d)&&(e[f]=ha(d))):"none"!==c&&(e[f]="none",W.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ia(this,!0)},hide:function(){return ia(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){da(this)?r(this).show():r(this).hide()})}});var ja=/^(?:checkbox|radio)$/i,ka=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c<d;c++)W.set(a[c],"globalEval",!b||W.get(b[c],"globalEval"))}var pa=/<|&#?\w+;/;function qa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(pa.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ka.exec(f)||["",""])[1].toLowerCase(),i=ma[h]||ma._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g,h=[],i=b.delegateCount,j=a.target;if(i&&j.nodeType&&!("click"===a.type&&a.button>=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c<i;c++)d=b[c],e=d.selector+" ",void 0===g[e]&&(g[e]=d.needsContext?r(e,this).index(j)>-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i<b.length&&h.push({elem:j,handlers:b.slice(i)}),h},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==xa()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===xa()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if(ja.test(this.type)&&this.click&&B(this,"input"))return this.click(),!1},_default:function(a){return B(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?va:wa,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:wa,isPropagationStopped:wa,isImmediatePropagationStopped:wa,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=va,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=va,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=va,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&sa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ta.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return ya(this,a,b,c,d)},one:function(a,b,c,d){return ya(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=wa),this.each(function(){r.event.remove(this,a,c,b)})}});var za=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/<script|<style|<link/i,Ba=/checked\s*(?:[^=]|=\s*.checked.)/i,Ca=/^true\/(.*)/,Da=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}X.hasData(a)&&(h=X.access(a),i=r.extend({},h),X.set(b,i))}}function Ia(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ja.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ja(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,na(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ga),l=0;l<i;l++)j=h[l],la.test(j.type||"")&&!W.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Da,""),k))}return a}function Ka(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(na(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&oa(na(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(za,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d<e;d++)Ia(f[d],g[d]);if(b)if(c)for(f=f||na(a),g=g||na(h),d=0,e=f.length;d<e;d++)Ha(f[d],g[d]);else Ha(a,h);return g=na(h,"script"),g.length>0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(na(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ja(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(na(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var La=/^margin/,Ma=new RegExp("^("+aa+")(?!px)[a-z%]+$","i"),Na=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",ra.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,ra.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Oa(a,b,c){var d,e,f,g,h=a.style;return c=c||Na(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ma.test(g)&&La.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function Pa(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Qa=/^(none|table(?!-c[ea]).+)/,Ra=/^--/,Sa={position:"absolute",visibility:"hidden",display:"block"},Ta={letterSpacing:"0",fontWeight:"400"},Ua=["Webkit","Moz","ms"],Va=d.createElement("div").style;function Wa(a){if(a in Va)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ua.length;while(c--)if(a=Ua[c]+b,a in Va)return a}function Xa(a){var b=r.cssProps[a];return b||(b=r.cssProps[a]=Wa(a)||a),b}function Ya(a,b,c){var d=ba.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Za(a,b,c,d,e){var f,g=0;for(f=c===(d?"border":"content")?4:"width"===b?1:0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+ca[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+ca[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+ca[f]+"Width",!0,e))):(g+=r.css(a,"padding"+ca[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+ca[f]+"Width",!0,e)));return g}function $a(a,b,c){var d,e=Na(a),f=Oa(a,b,e),g="border-box"===r.css(a,"boxSizing",!1,e);return Ma.test(f)?f:(d=g&&(o.boxSizingReliable()||f===a.style[b]),f=parseFloat(f)||0,f+Za(a,b,c||(g?"border":"content"),d,e)+"px")}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Oa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=Ra.test(b),j=a.style;return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:j[b]:(f=typeof c,"string"===f&&(e=ba.exec(c))&&e[1]&&(c=fa(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(j[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i?j.setProperty(b,c):j[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b),i=Ra.test(b);return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Oa(a,b,d)),"normal"===e&&b in Ta&&(e=Ta[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Qa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?$a(a,b,d):ea(a,Sa,function(){return $a(a,b,d)})},set:function(a,c,d){var e,f=d&&Na(a),g=d&&Za(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=ba.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ya(a,c,g)}}}),r.cssHooks.marginLeft=Pa(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Oa(a,"marginLeft"))||a.getBoundingClientRect().left-ea(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+ca[d]+b]=f[d]||f[d-2]||f[0];return e}},La.test(a)||(r.cssHooks[a+b].set=Ya)}),r.fn.extend({css:function(a,b){return T(this,function(a,b,c){var d,e,f={},g=0;if(Array.isArray(b)){for(d=Na(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&da(a),q=W.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],cb.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=W.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ia([a],!0),j=a.style.display||j,k=r.css(a,"display"),ia([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=W.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ia([a],!0),m.done(function(){p||ia([a]),W.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=hb(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],Array.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=kb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=ab||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;g<i;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),f<1&&i?c:(i||h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:ab||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;c<d;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);f<g;f++)if(d=kb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,hb,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j}r.Animation=r.extend(kb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return fa(c.elem,a,ba.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(L);for(var c,d=0,e=a.length;d<e;d++)c=a[d],kb.tweeners[c]=kb.tweeners[c]||[],kb.tweeners[c].unshift(b)},prefilters:[ib],prefilter:function(a,b){b?kb.prefilters.unshift(a):kb.prefilters.push(a)}}),r.speed=function(a,b,c){var d=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off?d.duration=0:"number"!=typeof d.duration&&(d.duration in r.fx.speeds?d.duration=r.fx.speeds[d.duration]:d.duration=r.fx.speeds._default),null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){r.isFunction(d.old)&&d.old.call(this),d.queue&&r.dequeue(this,d.queue)},d},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(da).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=kb(this,r.extend({},a),f);(e||W.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=r.timers,g=W.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&db.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=W.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;b<g;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),r.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(ab=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),ab=void 0},r.fx.timer=function(a){r.timers.push(a),r.fx.start()},r.fx.interval=13,r.fx.start=function(){bb||(bb=!0,eb())},r.fx.stop=function(){bb=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var lb,mb=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return T(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d)); +},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d<i;d++)if(c=e[d],(c.selected||d===f)&&!c.disabled&&(!c.parentNode.disabled||!B(c.parentNode,"optgroup"))){if(b=r(c).val(),g)return b;h.push(b)}return h},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Tb=[],Ub=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Tb.pop()||r.expando+"_"+ub++;return this[a]=!0,a}}),r.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Ub.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ub.test(b.data)&&"data");if(h||"jsonp"===b.dataTypes[0])return e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Ub,"$1"+e):b.jsonp!==!1&&(b.url+=(vb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||r.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Tb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),"script"}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=C.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=qa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=pb(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&r.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?r("<div>").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length},r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),b=f.ownerDocument,c=b.documentElement,e=b.defaultView,{top:d.top+e.pageYOffset-c.clientTop,left:d.left+e.pageXOffset-c.clientLeft}):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),B(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||ra})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return T(this,function(a,d,e){var f;return r.isWindow(a)?f=a:9===a.nodeType&&(f=a.defaultView),void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Pa(o.pixelPosition,function(a,c){if(c)return c=Oa(a,b),Ma.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return T(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)},holdReady:function(a){a?r.readyWait++:r.ready(!0)}}),r.isArray=Array.isArray,r.parseJSON=JSON.parse,r.nodeName=B,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var Vb=a.jQuery,Wb=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Wb),b&&a.jQuery===r&&(a.jQuery=Vb),r},b||(a.jQuery=a.$=r),r}); + +function createShiftArr(step) { + + var space = ' '; + + if ( isNaN(parseInt(step)) ) { // argument is string + space = step; + } else { // argument is integer + switch(step) { + case 1: space = ' '; break; + case 2: space = ' '; break; + case 3: space = ' '; break; + case 4: space = ' '; break; + case 5: space = ' '; break; + case 6: space = ' '; break; + case 7: space = ' '; break; + case 8: space = ' '; break; + case 9: space = ' '; break; + case 10: space = ' '; break; + case 11: space = ' '; break; + case 12: space = ' '; break; + } + } + + var shift = ['\n']; // array of shifts + for(ix=0;ix<100;ix++){ + shift.push(shift[ix]+space); + } + return shift; +} + +function vkbeautify(){ + this.step = ' '; // 4 spaces + this.shift = createShiftArr(this.step); +}; + +vkbeautify.prototype.xml = function(text,step) { + + var ar = text.replace(/>\s{0,}</g,"><") + .replace(/</g,"~::~<") + .replace(/\s*xmlns\:/g,"~::~xmlns:") + .replace(/\s*xmlns\=/g,"~::~xmlns=") + .split('~::~'), + len = ar.length, + inComment = false, + deep = 0, + str = '', + ix = 0, + shift = step ? createShiftArr(step) : this.shift; + + for(ix=0;ix<len;ix++) { + // start comment or <![CDATA[...]]> or <!DOCTYPE // + if(ar[ix].search(/<!/) > -1) { + str += shift[deep]+ar[ix]; + inComment = true; + // end comment or <![CDATA[...]]> // + if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1 || ar[ix].search(/!DOCTYPE/) > -1 ) { + inComment = false; + } + } else + // end comment or <![CDATA[...]]> // + if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1) { + str += ar[ix]; + inComment = false; + } else + // <elm></elm> // + if( /^<\w/.exec(ar[ix-1]) && /^<\/\w/.exec(ar[ix]) && + /^<[\w:\-\.\,]+/.exec(ar[ix-1]) == /^<\/[\w:\-\.\,]+/.exec(ar[ix])[0].replace('/','')) { + str += ar[ix]; + if(!inComment) deep--; + } else + // <elm> // + if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) == -1 && ar[ix].search(/\/>/) == -1 ) { + str = !inComment ? str += shift[deep++]+ar[ix] : str += ar[ix]; + } else + // <elm>...</elm> // + if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) > -1) { + str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix]; + } else + // </elm> // + if(ar[ix].search(/<\//) > -1) { + str = !inComment ? str += shift[--deep]+ar[ix] : str += ar[ix]; + } else + // <elm/> // + if(ar[ix].search(/\/>/) > -1 ) { + str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix]; + } else + // <? xml ... ?> // + if(ar[ix].search(/<\?/) > -1) { + str += shift[deep]+ar[ix]; + } else + // xmlns // + if( ar[ix].search(/xmlns\:/) > -1 || ar[ix].search(/xmlns\=/) > -1) { + str += shift[deep]+ar[ix]; + } + + else { + str += ar[ix]; + } + } + + return (str[0] == '\n') ? str.slice(1) : str; +} + +vkbeautify.prototype.json = function(text,step) { + + var step = step ? step : this.step; + + if (typeof JSON === 'undefined' ) return text; + + if ( typeof text === "string" ) return JSON.stringify(JSON.parse(text), null, step); + if ( typeof text === "object" ) return JSON.stringify(text, null, step); + + return text; // text is not string nor object +} + +vkbeautify.prototype.css = function(text, step) { + + var ar = text.replace(/\s{1,}/g,' ') + .replace(/\{/g,"{~::~") + .replace(/\}/g,"~::~}~::~") + .replace(/\;/g,";~::~") + .replace(/\/\*/g,"~::~/*") + .replace(/\*\//g,"*/~::~") + .replace(/~::~\s{0,}~::~/g,"~::~") + .split('~::~'), + len = ar.length, + deep = 0, + str = '', + ix = 0, + shift = step ? createShiftArr(step) : this.shift; + + for(ix=0;ix<len;ix++) { + + if( /\{/.exec(ar[ix])) { + str += shift[deep++]+ar[ix]; + } else + if( /\}/.exec(ar[ix])) { + str += shift[--deep]+ar[ix]; + } else + if( /\*\\/.exec(ar[ix])) { + str += shift[deep]+ar[ix]; + } + else { + str += shift[deep]+ar[ix]; + } + } + return str.replace(/^\n{1,}/,''); +} + +//---------------------------------------------------------------------------- + +function isSubquery(str, parenthesisLevel) { + return parenthesisLevel - (str.replace(/\(/g,'').length - str.replace(/\)/g,'').length ) +} + +function split_sql(str, tab) { + + return str.replace(/\s{1,}/g," ") + + .replace(/ AND /ig,"~::~"+tab+tab+"AND ") + .replace(/ BETWEEN /ig,"~::~"+tab+"BETWEEN ") + .replace(/ CASE /ig,"~::~"+tab+"CASE ") + .replace(/ ELSE /ig,"~::~"+tab+"ELSE ") + .replace(/ END /ig,"~::~"+tab+"END ") + .replace(/ FROM /ig,"~::~FROM ") + .replace(/ GROUP\s{1,}BY/ig,"~::~GROUP BY ") + .replace(/ HAVING /ig,"~::~HAVING ") + //.replace(/ SET /ig," SET~::~") + .replace(/ IN /ig," IN ") + + .replace(/ JOIN /ig,"~::~JOIN ") + .replace(/ CROSS~::~{1,}JOIN /ig,"~::~CROSS JOIN ") + .replace(/ INNER~::~{1,}JOIN /ig,"~::~INNER JOIN ") + .replace(/ LEFT~::~{1,}JOIN /ig,"~::~LEFT JOIN ") + .replace(/ RIGHT~::~{1,}JOIN /ig,"~::~RIGHT JOIN ") + + .replace(/ ON /ig,"~::~"+tab+"ON ") + .replace(/ OR /ig,"~::~"+tab+tab+"OR ") + .replace(/ ORDER\s{1,}BY/ig,"~::~ORDER BY ") + .replace(/ OVER /ig,"~::~"+tab+"OVER ") + + .replace(/\(\s{0,}SELECT /ig,"~::~(SELECT ") + .replace(/\)\s{0,}SELECT /ig,")~::~SELECT ") + + .replace(/ THEN /ig," THEN~::~"+tab+"") + .replace(/ UNION /ig,"~::~UNION~::~") + .replace(/ USING /ig,"~::~USING ") + .replace(/ WHEN /ig,"~::~"+tab+"WHEN ") + .replace(/ WHERE /ig,"~::~WHERE ") + .replace(/ WITH /ig,"~::~WITH ") + + //.replace(/\,\s{0,}\(/ig,",~::~( ") + //.replace(/\,/ig,",~::~"+tab+tab+"") + + .replace(/ ALL /ig," ALL ") + .replace(/ AS /ig," AS ") + .replace(/ ASC /ig," ASC ") + .replace(/ DESC /ig," DESC ") + .replace(/ DISTINCT /ig," DISTINCT ") + .replace(/ EXISTS /ig," EXISTS ") + .replace(/ NOT /ig," NOT ") + .replace(/ NULL /ig," NULL ") + .replace(/ LIKE /ig," LIKE ") + .replace(/\s{0,}SELECT /ig,"SELECT ") + .replace(/\s{0,}UPDATE /ig,"UPDATE ") + .replace(/ SET /ig," SET ") + + .replace(/~::~{1,}/g,"~::~") + .split('~::~'); +} + +vkbeautify.prototype.sql = function(text,step) { + + var ar_by_quote = text.replace(/\s{1,}/g," ") + .replace(/\'/ig,"~::~\'") + .split('~::~'), + len = ar_by_quote.length, + ar = [], + deep = 0, + tab = this.step,//+this.step, + inComment = true, + inQuote = false, + parenthesisLevel = 0, + str = '', + ix = 0, + shift = step ? createShiftArr(step) : this.shift;; + + for(ix=0;ix<len;ix++) { + if(ix%2) { + ar = ar.concat(ar_by_quote[ix]); + } else { + ar = ar.concat(split_sql(ar_by_quote[ix], tab) ); + } + } + + len = ar.length; + for(ix=0;ix<len;ix++) { + + parenthesisLevel = isSubquery(ar[ix], parenthesisLevel); + + if( /\s{0,}\s{0,}SELECT\s{0,}/.exec(ar[ix])) { + ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"") + } + + if( /\s{0,}\s{0,}SET\s{0,}/.exec(ar[ix])) { + ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"") + } + + if( /\s{0,}\(\s{0,}SELECT\s{0,}/.exec(ar[ix])) { + deep++; + str += shift[deep]+ar[ix]; + } else + if( /\'/.exec(ar[ix]) ) { + if(parenthesisLevel<1 && deep) { + deep--; + } + str += ar[ix]; + } + else { + str += shift[deep]+ar[ix]; + if(parenthesisLevel<1 && deep) { + deep--; + } + } + var junk = 0; + } + + str = str.replace(/^\n{1,}/,'').replace(/\n{1,}/g,"\n"); + return str; +} + + +vkbeautify.prototype.xmlmin = function(text, preserveComments) { + + var str = preserveComments ? text + : text.replace(/\<![ \r\n\t]*(--([^\-]|[\r\n]|-[^\-])*--[ \r\n\t]*)\>/g,"") + .replace(/[ \r\n\t]{1,}xmlns/g, ' xmlns'); + return str.replace(/>\s{0,}</g,"><"); +} + +vkbeautify.prototype.jsonmin = function(text) { + + if (typeof JSON === 'undefined' ) return text; + + return JSON.stringify(JSON.parse(text), null, 0); + +} + +vkbeautify.prototype.cssmin = function(text, preserveComments) { + + var str = preserveComments ? text + : text.replace(/\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\//g,"") ; + + return str.replace(/\s{1,}/g,' ') + .replace(/\{\s{1,}/g,"{") + .replace(/\}\s{1,}/g,"}") + .replace(/\;\s{1,}/g,";") + .replace(/\/\*\s{1,}/g,"/*") + .replace(/\*\/\s{1,}/g,"*/"); +} + +vkbeautify.prototype.sqlmin = function(text) { + return text.replace(/\s{1,}/g," ").replace(/\s{1,}\(/,"(").replace(/\s{1,}\)/,")"); +} + +window.vkbeautify = new vkbeautify(); + +})(); + + +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ +// https://d3js.org Version 4.3.0. Copyright 2016 Mike Bostock. +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (factory((global.d3 = global.d3 || {}))); +}(this, (function (exports) { 'use strict'; + +var version = "4.3.0"; + +var ascending = function(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; +}; + +var bisector = function(compare) { + if (compare.length === 1) compare = ascendingComparator(compare); + return { + left: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) < 0) lo = mid + 1; + else hi = mid; + } + return lo; + }, + right: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) > 0) hi = mid; + else lo = mid + 1; + } + return lo; + } + }; +}; + +function ascendingComparator(f) { + return function(d, x) { + return ascending(f(d), x); + }; +} + +var ascendingBisect = bisector(ascending); +var bisectRight = ascendingBisect.right; +var bisectLeft = ascendingBisect.left; + +var descending = function(a, b) { + return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; +}; + +var number = function(x) { + return x === null ? NaN : +x; +}; + +var variance = function(array, f) { + var n = array.length, + m = 0, + a, + d, + s = 0, + i = -1, + j = 0; + + if (f == null) { + while (++i < n) { + if (!isNaN(a = number(array[i]))) { + d = a - m; + m += d / ++j; + s += d * (a - m); + } + } + } + + else { + while (++i < n) { + if (!isNaN(a = number(f(array[i], i, array)))) { + d = a - m; + m += d / ++j; + s += d * (a - m); + } + } + } + + if (j > 1) return s / (j - 1); +}; + +var deviation = function(array, f) { + var v = variance(array, f); + return v ? Math.sqrt(v) : v; +}; + +var extent = function(array, f) { + var i = -1, + n = array.length, + a, + b, + c; + + if (f == null) { + while (++i < n) if ((b = array[i]) != null && b >= b) { a = c = b; break; } + while (++i < n) if ((b = array[i]) != null) { + if (a > b) a = b; + if (c < b) c = b; + } + } + + else { + while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = c = b; break; } + while (++i < n) if ((b = f(array[i], i, array)) != null) { + if (a > b) a = b; + if (c < b) c = b; + } + } + + return [a, c]; +}; + +var array = Array.prototype; + +var slice = array.slice; +var map = array.map; + +var constant$1 = function(x) { + return function() { + return x; + }; +}; + +var identity = function(x) { + return x; +}; + +var range = function(start, stop, step) { + start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step; + + var i = -1, + n = Math.max(0, Math.ceil((stop - start) / step)) | 0, + range = new Array(n); + + while (++i < n) { + range[i] = start + i * step; + } + + return range; +}; + +var e10 = Math.sqrt(50); +var e5 = Math.sqrt(10); +var e2 = Math.sqrt(2); + +var ticks = function(start, stop, count) { + var step = tickStep(start, stop, count); + return range( + Math.ceil(start / step) * step, + Math.floor(stop / step) * step + step / 2, // inclusive + step + ); +}; + +function tickStep(start, stop, count) { + var step0 = Math.abs(stop - start) / Math.max(0, count), + step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)), + error = step0 / step1; + if (error >= e10) step1 *= 10; + else if (error >= e5) step1 *= 5; + else if (error >= e2) step1 *= 2; + return stop < start ? -step1 : step1; +} + +var sturges = function(values) { + return Math.ceil(Math.log(values.length) / Math.LN2) + 1; +}; + +var histogram = function() { + var value = identity, + domain = extent, + threshold = sturges; + + function histogram(data) { + var i, + n = data.length, + x, + values = new Array(n); + + for (i = 0; i < n; ++i) { + values[i] = value(data[i], i, data); + } + + var xz = domain(values), + x0 = xz[0], + x1 = xz[1], + tz = threshold(values, x0, x1); + + // Convert number of thresholds into uniform thresholds. + if (!Array.isArray(tz)) tz = ticks(x0, x1, tz); + + // Remove any thresholds outside the domain. + var m = tz.length; + while (tz[0] <= x0) tz.shift(), --m; + while (tz[m - 1] >= x1) tz.pop(), --m; + + var bins = new Array(m + 1), + bin; + + // Initialize bins. + for (i = 0; i <= m; ++i) { + bin = bins[i] = []; + bin.x0 = i > 0 ? tz[i - 1] : x0; + bin.x1 = i < m ? tz[i] : x1; + } + + // Assign data to bins by value, ignoring any outside the domain. + for (i = 0; i < n; ++i) { + x = values[i]; + if (x0 <= x && x <= x1) { + bins[bisectRight(tz, x, 0, m)].push(data[i]); + } + } + + return bins; + } + + histogram.value = function(_) { + return arguments.length ? (value = typeof _ === "function" ? _ : constant$1(_), histogram) : value; + }; + + histogram.domain = function(_) { + return arguments.length ? (domain = typeof _ === "function" ? _ : constant$1([_[0], _[1]]), histogram) : domain; + }; + + histogram.thresholds = function(_) { + return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$1(slice.call(_)) : constant$1(_), histogram) : threshold; + }; + + return histogram; +}; + +var threshold = function(array, p, f) { + if (f == null) f = number; + if (!(n = array.length)) return; + if ((p = +p) <= 0 || n < 2) return +f(array[0], 0, array); + if (p >= 1) return +f(array[n - 1], n - 1, array); + var n, + h = (n - 1) * p, + i = Math.floor(h), + a = +f(array[i], i, array), + b = +f(array[i + 1], i + 1, array); + return a + (b - a) * (h - i); +}; + +var freedmanDiaconis = function(values, min, max) { + values = map.call(values, number).sort(ascending); + return Math.ceil((max - min) / (2 * (threshold(values, 0.75) - threshold(values, 0.25)) * Math.pow(values.length, -1 / 3))); +}; + +var scott = function(values, min, max) { + return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3))); +}; + +var max = function(array, f) { + var i = -1, + n = array.length, + a, + b; + + if (f == null) { + while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; } + while (++i < n) if ((b = array[i]) != null && b > a) a = b; + } + + else { + while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; } + while (++i < n) if ((b = f(array[i], i, array)) != null && b > a) a = b; + } + + return a; +}; + +var mean = function(array, f) { + var s = 0, + n = array.length, + a, + i = -1, + j = n; + + if (f == null) { + while (++i < n) if (!isNaN(a = number(array[i]))) s += a; else --j; + } + + else { + while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) s += a; else --j; + } + + if (j) return s / j; +}; + +var median = function(array, f) { + var numbers = [], + n = array.length, + a, + i = -1; + + if (f == null) { + while (++i < n) if (!isNaN(a = number(array[i]))) numbers.push(a); + } + + else { + while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) numbers.push(a); + } + + return threshold(numbers.sort(ascending), 0.5); +}; + +var merge = function(arrays) { + var n = arrays.length, + m, + i = -1, + j = 0, + merged, + array; + + while (++i < n) j += arrays[i].length; + merged = new Array(j); + + while (--n >= 0) { + array = arrays[n]; + m = array.length; + while (--m >= 0) { + merged[--j] = array[m]; + } + } + + return merged; +}; + +var min = function(array, f) { + var i = -1, + n = array.length, + a, + b; + + if (f == null) { + while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; } + while (++i < n) if ((b = array[i]) != null && a > b) a = b; + } + + else { + while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; } + while (++i < n) if ((b = f(array[i], i, array)) != null && a > b) a = b; + } + + return a; +}; + +var pairs = function(array) { + var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n); + while (i < n) pairs[i] = [p, p = array[++i]]; + return pairs; +}; + +var permute = function(array, indexes) { + var i = indexes.length, permutes = new Array(i); + while (i--) permutes[i] = array[indexes[i]]; + return permutes; +}; + +var scan = function(array, compare) { + if (!(n = array.length)) return; + var i = 0, + n, + j = 0, + xi, + xj = array[j]; + + if (!compare) compare = ascending; + + while (++i < n) if (compare(xi = array[i], xj) < 0 || compare(xj, xj) !== 0) xj = xi, j = i; + + if (compare(xj, xj) === 0) return j; +}; + +var shuffle = function(array, i0, i1) { + var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0), + t, + i; + + while (m) { + i = Math.random() * m-- | 0; + t = array[m + i0]; + array[m + i0] = array[i + i0]; + array[i + i0] = t; + } + + return array; +}; + +var sum = function(array, f) { + var s = 0, + n = array.length, + a, + i = -1; + + if (f == null) { + while (++i < n) if (a = +array[i]) s += a; // Note: zero and null are equivalent. + } + + else { + while (++i < n) if (a = +f(array[i], i, array)) s += a; + } + + return s; +}; + +var transpose = function(matrix) { + if (!(n = matrix.length)) return []; + for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) { + for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) { + row[j] = matrix[j][i]; + } + } + return transpose; +}; + +function length(d) { + return d.length; +} + +var zip = function() { + return transpose(arguments); +}; + +var prefix = "$"; + +function Map() {} + +Map.prototype = map$1.prototype = { + constructor: Map, + has: function(key) { + return (prefix + key) in this; + }, + get: function(key) { + return this[prefix + key]; + }, + set: function(key, value) { + this[prefix + key] = value; + return this; + }, + remove: function(key) { + var property = prefix + key; + return property in this && delete this[property]; + }, + clear: function() { + for (var property in this) if (property[0] === prefix) delete this[property]; + }, + keys: function() { + var keys = []; + for (var property in this) if (property[0] === prefix) keys.push(property.slice(1)); + return keys; + }, + values: function() { + var values = []; + for (var property in this) if (property[0] === prefix) values.push(this[property]); + return values; + }, + entries: function() { + var entries = []; + for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]}); + return entries; + }, + size: function() { + var size = 0; + for (var property in this) if (property[0] === prefix) ++size; + return size; + }, + empty: function() { + for (var property in this) if (property[0] === prefix) return false; + return true; + }, + each: function(f) { + for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this); + } +}; + +function map$1(object, f) { + var map = new Map; + + // Copy constructor. + if (object instanceof Map) object.each(function(value, key) { map.set(key, value); }); + + // Index array by numeric index or specified key function. + else if (Array.isArray(object)) { + var i = -1, + n = object.length, + o; + + if (f == null) while (++i < n) map.set(i, object[i]); + else while (++i < n) map.set(f(o = object[i], i, object), o); + } + + // Convert object to map. + else if (object) for (var key in object) map.set(key, object[key]); + + return map; +} + +var nest = function() { + var keys = [], + sortKeys = [], + sortValues, + rollup, + nest; + + function apply(array, depth, createResult, setResult) { + if (depth >= keys.length) return rollup != null + ? rollup(array) : (sortValues != null + ? array.sort(sortValues) + : array); + + var i = -1, + n = array.length, + key = keys[depth++], + keyValue, + value, + valuesByKey = map$1(), + values, + result = createResult(); + + while (++i < n) { + if (values = valuesByKey.get(keyValue = key(value = array[i]) + "")) { + values.push(value); + } else { + valuesByKey.set(keyValue, [value]); + } + } + + valuesByKey.each(function(values, key) { + setResult(result, key, apply(values, depth, createResult, setResult)); + }); + + return result; + } + + function entries(map, depth) { + if (++depth > keys.length) return map; + var array, sortKey = sortKeys[depth - 1]; + if (rollup != null && depth >= keys.length) array = map.entries(); + else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); }); + return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array; + } + + return nest = { + object: function(array) { return apply(array, 0, createObject, setObject); }, + map: function(array) { return apply(array, 0, createMap, setMap); }, + entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); }, + key: function(d) { keys.push(d); return nest; }, + sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; }, + sortValues: function(order) { sortValues = order; return nest; }, + rollup: function(f) { rollup = f; return nest; } + }; +}; + +function createObject() { + return {}; +} + +function setObject(object, key, value) { + object[key] = value; +} + +function createMap() { + return map$1(); +} + +function setMap(map, key, value) { + map.set(key, value); +} + +function Set() {} + +var proto = map$1.prototype; + +Set.prototype = set.prototype = { + constructor: Set, + has: proto.has, + add: function(value) { + value += ""; + this[prefix + value] = value; + return this; + }, + remove: proto.remove, + clear: proto.clear, + values: proto.keys, + size: proto.size, + empty: proto.empty, + each: proto.each +}; + +function set(object, f) { + var set = new Set; + + // Copy constructor. + if (object instanceof Set) object.each(function(value) { set.add(value); }); + + // Otherwise, assume it’s an array. + else if (object) { + var i = -1, n = object.length; + if (f == null) while (++i < n) set.add(object[i]); + else while (++i < n) set.add(f(object[i], i, object)); + } + + return set; +} + +var keys = function(map) { + var keys = []; + for (var key in map) keys.push(key); + return keys; +}; + +var values = function(map) { + var values = []; + for (var key in map) values.push(map[key]); + return values; +}; + +var entries = function(map) { + var entries = []; + for (var key in map) entries.push({key: key, value: map[key]}); + return entries; +}; + +var uniform = function(min, max) { + min = min == null ? 0 : +min; + max = max == null ? 1 : +max; + if (arguments.length === 1) max = min, min = 0; + else max -= min; + return function() { + return Math.random() * max + min; + }; +}; + +var normal = function(mu, sigma) { + var x, r; + mu = mu == null ? 0 : +mu; + sigma = sigma == null ? 1 : +sigma; + return function() { + var y; + + // If available, use the second previously-generated uniform random. + if (x != null) y = x, x = null; + + // Otherwise, generate a new x and y. + else do { + x = Math.random() * 2 - 1; + y = Math.random() * 2 - 1; + r = x * x + y * y; + } while (!r || r > 1); + + return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r); + }; +}; + +var logNormal = function() { + var randomNormal = normal.apply(this, arguments); + return function() { + return Math.exp(randomNormal()); + }; +}; + +var irwinHall = function(n) { + return function() { + for (var sum = 0, i = 0; i < n; ++i) sum += Math.random(); + return sum; + }; +}; + +var bates = function(n) { + var randomIrwinHall = irwinHall(n); + return function() { + return randomIrwinHall() / n; + }; +}; + +var exponential = function(lambda) { + return function() { + return -Math.log(1 - Math.random()) / lambda; + }; +}; + +function linear(t) { + return +t; +} + +function quadIn(t) { + return t * t; +} + +function quadOut(t) { + return t * (2 - t); +} + +function quadInOut(t) { + return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2; +} + +function cubicIn(t) { + return t * t * t; +} + +function cubicOut(t) { + return --t * t * t + 1; +} + +function cubicInOut(t) { + return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2; +} + +var exponent = 3; + +var polyIn = (function custom(e) { + e = +e; + + function polyIn(t) { + return Math.pow(t, e); + } + + polyIn.exponent = custom; + + return polyIn; +})(exponent); + +var polyOut = (function custom(e) { + e = +e; + + function polyOut(t) { + return 1 - Math.pow(1 - t, e); + } + + polyOut.exponent = custom; + + return polyOut; +})(exponent); + +var polyInOut = (function custom(e) { + e = +e; + + function polyInOut(t) { + return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2; + } + + polyInOut.exponent = custom; + + return polyInOut; +})(exponent); + +var pi = Math.PI; +var halfPi = pi / 2; + +function sinIn(t) { + return 1 - Math.cos(t * halfPi); +} + +function sinOut(t) { + return Math.sin(t * halfPi); +} + +function sinInOut(t) { + return (1 - Math.cos(pi * t)) / 2; +} + +function expIn(t) { + return Math.pow(2, 10 * t - 10); +} + +function expOut(t) { + return 1 - Math.pow(2, -10 * t); +} + +function expInOut(t) { + return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2; +} + +function circleIn(t) { + return 1 - Math.sqrt(1 - t * t); +} + +function circleOut(t) { + return Math.sqrt(1 - --t * t); +} + +function circleInOut(t) { + return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2; +} + +var b1 = 4 / 11; +var b2 = 6 / 11; +var b3 = 8 / 11; +var b4 = 3 / 4; +var b5 = 9 / 11; +var b6 = 10 / 11; +var b7 = 15 / 16; +var b8 = 21 / 22; +var b9 = 63 / 64; +var b0 = 1 / b1 / b1; + +function bounceIn(t) { + return 1 - bounceOut(1 - t); +} + +function bounceOut(t) { + return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9; +} + +function bounceInOut(t) { + return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2; +} + +var overshoot = 1.70158; + +var backIn = (function custom(s) { + s = +s; + + function backIn(t) { + return t * t * ((s + 1) * t - s); + } + + backIn.overshoot = custom; + + return backIn; +})(overshoot); + +var backOut = (function custom(s) { + s = +s; + + function backOut(t) { + return --t * t * ((s + 1) * t + s) + 1; + } + + backOut.overshoot = custom; + + return backOut; +})(overshoot); + +var backInOut = (function custom(s) { + s = +s; + + function backInOut(t) { + return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2; + } + + backInOut.overshoot = custom; + + return backInOut; +})(overshoot); + +var tau = 2 * Math.PI; +var amplitude = 1; +var period = 0.3; + +var elasticIn = (function custom(a, p) { + var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau); + + function elasticIn(t) { + return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p); + } + + elasticIn.amplitude = function(a) { return custom(a, p * tau); }; + elasticIn.period = function(p) { return custom(a, p); }; + + return elasticIn; +})(amplitude, period); + +var elasticOut = (function custom(a, p) { + var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau); + + function elasticOut(t) { + return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p); + } + + elasticOut.amplitude = function(a) { return custom(a, p * tau); }; + elasticOut.period = function(p) { return custom(a, p); }; + + return elasticOut; +})(amplitude, period); + +var elasticInOut = (function custom(a, p) { + var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau); + + function elasticInOut(t) { + return ((t = t * 2 - 1) < 0 + ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p) + : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2; + } + + elasticInOut.amplitude = function(a) { return custom(a, p * tau); }; + elasticInOut.period = function(p) { return custom(a, p); }; + + return elasticInOut; +})(amplitude, period); + +var area = function(polygon) { + var i = -1, + n = polygon.length, + a, + b = polygon[n - 1], + area = 0; + + while (++i < n) { + a = b; + b = polygon[i]; + area += a[1] * b[0] - a[0] * b[1]; + } + + return area / 2; +}; + +var centroid = function(polygon) { + var i = -1, + n = polygon.length, + x = 0, + y = 0, + a, + b = polygon[n - 1], + c, + k = 0; + + while (++i < n) { + a = b; + b = polygon[i]; + k += c = a[0] * b[1] - b[0] * a[1]; + x += (a[0] + b[0]) * c; + y += (a[1] + b[1]) * c; + } + + return k *= 3, [x / k, y / k]; +}; + +// Returns the 2D cross product of AB and AC vectors, i.e., the z-component of +// the 3D cross product in a quadrant I Cartesian coordinate system (+x is +// right, +y is up). Returns a positive value if ABC is counter-clockwise, +// negative if clockwise, and zero if the points are collinear. +var cross = function(a, b, c) { + return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]); +}; + +function lexicographicOrder(a, b) { + return a[0] - b[0] || a[1] - b[1]; +} + +// Computes the upper convex hull per the monotone chain algorithm. +// Assumes points.length >= 3, is sorted by x, unique in y. +// Returns an array of indices into points in left-to-right order. +function computeUpperHullIndexes(points) { + var n = points.length, + indexes = [0, 1], + size = 2; + + for (var i = 2; i < n; ++i) { + while (size > 1 && cross(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size; + indexes[size++] = i; + } + + return indexes.slice(0, size); // remove popped points +} + +var hull = function(points) { + if ((n = points.length) < 3) return null; + + var i, + n, + sortedPoints = new Array(n), + flippedPoints = new Array(n); + + for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i]; + sortedPoints.sort(lexicographicOrder); + for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]]; + + var upperIndexes = computeUpperHullIndexes(sortedPoints), + lowerIndexes = computeUpperHullIndexes(flippedPoints); + + // Construct the hull polygon, removing possible duplicate endpoints. + var skipLeft = lowerIndexes[0] === upperIndexes[0], + skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1], + hull = []; + + // Add upper hull in right-to-l order. + // Then add lower hull in left-to-right order. + for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]); + for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]); + + return hull; +}; + +var contains = function(polygon, point) { + var n = polygon.length, + p = polygon[n - 1], + x = point[0], y = point[1], + x0 = p[0], y0 = p[1], + x1, y1, + inside = false; + + for (var i = 0; i < n; ++i) { + p = polygon[i], x1 = p[0], y1 = p[1]; + if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside; + x0 = x1, y0 = y1; + } + + return inside; +}; + +var length$1 = function(polygon) { + var i = -1, + n = polygon.length, + b = polygon[n - 1], + xa, + ya, + xb = b[0], + yb = b[1], + perimeter = 0; + + while (++i < n) { + xa = xb; + ya = yb; + b = polygon[i]; + xb = b[0]; + yb = b[1]; + xa -= xb; + ya -= yb; + perimeter += Math.sqrt(xa * xa + ya * ya); + } + + return perimeter; +}; + +var pi$1 = Math.PI; +var tau$1 = 2 * pi$1; +var epsilon = 1e-6; +var tauEpsilon = tau$1 - epsilon; + +function Path() { + this._x0 = this._y0 = // start of current subpath + this._x1 = this._y1 = null; // end of current subpath + this._ = []; +} + +function path() { + return new Path; +} + +Path.prototype = path.prototype = { + constructor: Path, + moveTo: function(x, y) { + this._.push("M", this._x0 = this._x1 = +x, ",", this._y0 = this._y1 = +y); + }, + closePath: function() { + if (this._x1 !== null) { + this._x1 = this._x0, this._y1 = this._y0; + this._.push("Z"); + } + }, + lineTo: function(x, y) { + this._.push("L", this._x1 = +x, ",", this._y1 = +y); + }, + quadraticCurveTo: function(x1, y1, x, y) { + this._.push("Q", +x1, ",", +y1, ",", this._x1 = +x, ",", this._y1 = +y); + }, + bezierCurveTo: function(x1, y1, x2, y2, x, y) { + this._.push("C", +x1, ",", +y1, ",", +x2, ",", +y2, ",", this._x1 = +x, ",", this._y1 = +y); + }, + arcTo: function(x1, y1, x2, y2, r) { + x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r; + var x0 = this._x1, + y0 = this._y1, + x21 = x2 - x1, + y21 = y2 - y1, + x01 = x0 - x1, + y01 = y0 - y1, + l01_2 = x01 * x01 + y01 * y01; + + // Is the radius negative? Error. + if (r < 0) throw new Error("negative radius: " + r); + + // Is this path empty? Move to (x1,y1). + if (this._x1 === null) { + this._.push( + "M", this._x1 = x1, ",", this._y1 = y1 + ); + } + + // Or, is (x1,y1) coincident with (x0,y0)? Do nothing. + else if (!(l01_2 > epsilon)) {} + + // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear? + // Equivalently, is (x1,y1) coincident with (x2,y2)? + // Or, is the radius zero? Line to (x1,y1). + else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) { + this._.push( + "L", this._x1 = x1, ",", this._y1 = y1 + ); + } + + // Otherwise, draw an arc! + else { + var x20 = x2 - x0, + y20 = y2 - y0, + l21_2 = x21 * x21 + y21 * y21, + l20_2 = x20 * x20 + y20 * y20, + l21 = Math.sqrt(l21_2), + l01 = Math.sqrt(l01_2), + l = r * Math.tan((pi$1 - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2), + t01 = l / l01, + t21 = l / l21; + + // If the start tangent is not coincident with (x0,y0), line to. + if (Math.abs(t01 - 1) > epsilon) { + this._.push( + "L", x1 + t01 * x01, ",", y1 + t01 * y01 + ); + } + + this._.push( + "A", r, ",", r, ",0,0,", +(y01 * x20 > x01 * y20), ",", this._x1 = x1 + t21 * x21, ",", this._y1 = y1 + t21 * y21 + ); + } + }, + arc: function(x, y, r, a0, a1, ccw) { + x = +x, y = +y, r = +r; + var dx = r * Math.cos(a0), + dy = r * Math.sin(a0), + x0 = x + dx, + y0 = y + dy, + cw = 1 ^ ccw, + da = ccw ? a0 - a1 : a1 - a0; + + // Is the radius negative? Error. + if (r < 0) throw new Error("negative radius: " + r); + + // Is this path empty? Move to (x0,y0). + if (this._x1 === null) { + this._.push( + "M", x0, ",", y0 + ); + } + + // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0). + else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) { + this._.push( + "L", x0, ",", y0 + ); + } + + // Is this arc empty? We’re done. + if (!r) return; + + // Is this a complete circle? Draw two arcs to complete the circle. + if (da > tauEpsilon) { + this._.push( + "A", r, ",", r, ",0,1,", cw, ",", x - dx, ",", y - dy, + "A", r, ",", r, ",0,1,", cw, ",", this._x1 = x0, ",", this._y1 = y0 + ); + } + + // Otherwise, draw an arc! + else { + if (da < 0) da = da % tau$1 + tau$1; + this._.push( + "A", r, ",", r, ",0,", +(da >= pi$1), ",", cw, ",", this._x1 = x + r * Math.cos(a1), ",", this._y1 = y + r * Math.sin(a1) + ); + } + }, + rect: function(x, y, w, h) { + this._.push("M", this._x0 = this._x1 = +x, ",", this._y0 = this._y1 = +y, "h", +w, "v", +h, "h", -w, "Z"); + }, + toString: function() { + return this._.join(""); + } +}; + +var tree_add = function(d) { + var x = +this._x.call(null, d), + y = +this._y.call(null, d); + return add(this.cover(x, y), x, y, d); +}; + +function add(tree, x, y, d) { + if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points + + var parent, + node = tree._root, + leaf = {data: d}, + x0 = tree._x0, + y0 = tree._y0, + x1 = tree._x1, + y1 = tree._y1, + xm, + ym, + xp, + yp, + right, + bottom, + i, + j; + + // If the tree is empty, initialize the root as a leaf. + if (!node) return tree._root = leaf, tree; + + // Find the existing leaf for the new point, or add it. + while (node.length) { + if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; + if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; + if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree; + } + + // Is the new point is exactly coincident with the existing point? + xp = +tree._x.call(null, node.data); + yp = +tree._y.call(null, node.data); + if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree; + + // Otherwise, split the leaf node until the old and new point are separated. + do { + parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4); + if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; + if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; + } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm))); + return parent[j] = node, parent[i] = leaf, tree; +} + +function addAll(data) { + var d, i, n = data.length, + x, + y, + xz = new Array(n), + yz = new Array(n), + x0 = Infinity, + y0 = Infinity, + x1 = -Infinity, + y1 = -Infinity; + + // Compute the points and their extent. + for (i = 0; i < n; ++i) { + if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue; + xz[i] = x; + yz[i] = y; + if (x < x0) x0 = x; + if (x > x1) x1 = x; + if (y < y0) y0 = y; + if (y > y1) y1 = y; + } + + // If there were no (valid) points, inherit the existing extent. + if (x1 < x0) x0 = this._x0, x1 = this._x1; + if (y1 < y0) y0 = this._y0, y1 = this._y1; + + // Expand the tree to cover the new points. + this.cover(x0, y0).cover(x1, y1); + + // Add the new points. + for (i = 0; i < n; ++i) { + add(this, xz[i], yz[i], data[i]); + } + + return this; +} + +var tree_cover = function(x, y) { + if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points + + var x0 = this._x0, + y0 = this._y0, + x1 = this._x1, + y1 = this._y1; + + // If the quadtree has no extent, initialize them. + // Integer extent are necessary so that if we later double the extent, + // the existing quadrant boundaries don’t change due to floating point error! + if (isNaN(x0)) { + x1 = (x0 = Math.floor(x)) + 1; + y1 = (y0 = Math.floor(y)) + 1; + } + + // Otherwise, double repeatedly to cover. + else if (x0 > x || x > x1 || y0 > y || y > y1) { + var z = x1 - x0, + node = this._root, + parent, + i; + + switch (i = (y < (y0 + y1) / 2) << 1 | (x < (x0 + x1) / 2)) { + case 0: { + do parent = new Array(4), parent[i] = node, node = parent; + while (z *= 2, x1 = x0 + z, y1 = y0 + z, x > x1 || y > y1); + break; + } + case 1: { + do parent = new Array(4), parent[i] = node, node = parent; + while (z *= 2, x0 = x1 - z, y1 = y0 + z, x0 > x || y > y1); + break; + } + case 2: { + do parent = new Array(4), parent[i] = node, node = parent; + while (z *= 2, x1 = x0 + z, y0 = y1 - z, x > x1 || y0 > y); + break; + } + case 3: { + do parent = new Array(4), parent[i] = node, node = parent; + while (z *= 2, x0 = x1 - z, y0 = y1 - z, x0 > x || y0 > y); + break; + } + } + + if (this._root && this._root.length) this._root = node; + } + + // If the quadtree covers the point already, just return. + else return this; + + this._x0 = x0; + this._y0 = y0; + this._x1 = x1; + this._y1 = y1; + return this; +}; + +var tree_data = function() { + var data = []; + this.visit(function(node) { + if (!node.length) do data.push(node.data); while (node = node.next) + }); + return data; +}; + +var tree_extent = function(_) { + return arguments.length + ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1]) + : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]]; +}; + +var Quad = function(node, x0, y0, x1, y1) { + this.node = node; + this.x0 = x0; + this.y0 = y0; + this.x1 = x1; + this.y1 = y1; +}; + +var tree_find = function(x, y, radius) { + var data, + x0 = this._x0, + y0 = this._y0, + x1, + y1, + x2, + y2, + x3 = this._x1, + y3 = this._y1, + quads = [], + node = this._root, + q, + i; + + if (node) quads.push(new Quad(node, x0, y0, x3, y3)); + if (radius == null) radius = Infinity; + else { + x0 = x - radius, y0 = y - radius; + x3 = x + radius, y3 = y + radius; + radius *= radius; + } + + while (q = quads.pop()) { + + // Stop searching if this quadrant can’t contain a closer node. + if (!(node = q.node) + || (x1 = q.x0) > x3 + || (y1 = q.y0) > y3 + || (x2 = q.x1) < x0 + || (y2 = q.y1) < y0) continue; + + // Bisect the current quadrant. + if (node.length) { + var xm = (x1 + x2) / 2, + ym = (y1 + y2) / 2; + + quads.push( + new Quad(node[3], xm, ym, x2, y2), + new Quad(node[2], x1, ym, xm, y2), + new Quad(node[1], xm, y1, x2, ym), + new Quad(node[0], x1, y1, xm, ym) + ); + + // Visit the closest quadrant first. + if (i = (y >= ym) << 1 | (x >= xm)) { + q = quads[quads.length - 1]; + quads[quads.length - 1] = quads[quads.length - 1 - i]; + quads[quads.length - 1 - i] = q; + } + } + + // Visit this point. (Visiting coincident points isn’t necessary!) + else { + var dx = x - +this._x.call(null, node.data), + dy = y - +this._y.call(null, node.data), + d2 = dx * dx + dy * dy; + if (d2 < radius) { + var d = Math.sqrt(radius = d2); + x0 = x - d, y0 = y - d; + x3 = x + d, y3 = y + d; + data = node.data; + } + } + } + + return data; +}; + +var tree_remove = function(d) { + if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points + + var parent, + node = this._root, + retainer, + previous, + next, + x0 = this._x0, + y0 = this._y0, + x1 = this._x1, + y1 = this._y1, + x, + y, + xm, + ym, + right, + bottom, + i, + j; + + // If the tree is empty, initialize the root as a leaf. + if (!node) return this; + + // Find the leaf node for the point. + // While descending, also retain the deepest parent with a non-removed sibling. + if (node.length) while (true) { + if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; + if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; + if (!(parent = node, node = node[i = bottom << 1 | right])) return this; + if (!node.length) break; + if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i; + } + + // Find the point to remove. + while (node.data !== d) if (!(previous = node, node = node.next)) return this; + if (next = node.next) delete node.next; + + // If there are multiple coincident points, remove just the point. + if (previous) return (next ? previous.next = next : delete previous.next), this; + + // If this is the root point, remove it. + if (!parent) return this._root = next, this; + + // Remove this leaf. + next ? parent[i] = next : delete parent[i]; + + // If the parent now contains exactly one leaf, collapse superfluous parents. + if ((node = parent[0] || parent[1] || parent[2] || parent[3]) + && node === (parent[3] || parent[2] || parent[1] || parent[0]) + && !node.length) { + if (retainer) retainer[j] = node; + else this._root = node; + } + + return this; +}; + +function removeAll(data) { + for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]); + return this; +} + +var tree_root = function() { + return this._root; +}; + +var tree_size = function() { + var size = 0; + this.visit(function(node) { + if (!node.length) do ++size; while (node = node.next) + }); + return size; +}; + +var tree_visit = function(callback) { + var quads = [], q, node = this._root, child, x0, y0, x1, y1; + if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1)); + while (q = quads.pop()) { + if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) { + var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; + if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1)); + if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1)); + if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym)); + if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym)); + } + } + return this; +}; + +var tree_visitAfter = function(callback) { + var quads = [], next = [], q; + if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1)); + while (q = quads.pop()) { + var node = q.node; + if (node.length) { + var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; + if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym)); + if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym)); + if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1)); + if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1)); + } + next.push(q); + } + while (q = next.pop()) { + callback(q.node, q.x0, q.y0, q.x1, q.y1); + } + return this; +}; + +function defaultX(d) { + return d[0]; +} + +var tree_x = function(_) { + return arguments.length ? (this._x = _, this) : this._x; +}; + +function defaultY(d) { + return d[1]; +} + +var tree_y = function(_) { + return arguments.length ? (this._y = _, this) : this._y; +}; + +function quadtree(nodes, x, y) { + var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN); + return nodes == null ? tree : tree.addAll(nodes); +} + +function Quadtree(x, y, x0, y0, x1, y1) { + this._x = x; + this._y = y; + this._x0 = x0; + this._y0 = y0; + this._x1 = x1; + this._y1 = y1; + this._root = undefined; +} + +function leaf_copy(leaf) { + var copy = {data: leaf.data}, next = copy; + while (leaf = leaf.next) next = next.next = {data: leaf.data}; + return copy; +} + +var treeProto = quadtree.prototype = Quadtree.prototype; + +treeProto.copy = function() { + var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1), + node = this._root, + nodes, + child; + + if (!node) return copy; + + if (!node.length) return copy._root = leaf_copy(node), copy; + + nodes = [{source: node, target: copy._root = new Array(4)}]; + while (node = nodes.pop()) { + for (var i = 0; i < 4; ++i) { + if (child = node.source[i]) { + if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)}); + else node.target[i] = leaf_copy(child); + } + } + } + + return copy; +}; + +treeProto.add = tree_add; +treeProto.addAll = addAll; +treeProto.cover = tree_cover; +treeProto.data = tree_data; +treeProto.extent = tree_extent; +treeProto.find = tree_find; +treeProto.remove = tree_remove; +treeProto.removeAll = removeAll; +treeProto.root = tree_root; +treeProto.size = tree_size; +treeProto.visit = tree_visit; +treeProto.visitAfter = tree_visitAfter; +treeProto.x = tree_x; +treeProto.y = tree_y; + +var slice$1 = [].slice; + +var noabort = {}; + +function Queue(size) { + if (!(size >= 1)) throw new Error; + this._size = size; + this._call = + this._error = null; + this._tasks = []; + this._data = []; + this._waiting = + this._active = + this._ended = + this._start = 0; // inside a synchronous task callback? +} + +Queue.prototype = queue.prototype = { + constructor: Queue, + defer: function(callback) { + if (typeof callback !== "function" || this._call) throw new Error; + if (this._error != null) return this; + var t = slice$1.call(arguments, 1); + t.push(callback); + ++this._waiting, this._tasks.push(t); + poke(this); + return this; + }, + abort: function() { + if (this._error == null) abort(this, new Error("abort")); + return this; + }, + await: function(callback) { + if (typeof callback !== "function" || this._call) throw new Error; + this._call = function(error, results) { callback.apply(null, [error].concat(results)); }; + maybeNotify(this); + return this; + }, + awaitAll: function(callback) { + if (typeof callback !== "function" || this._call) throw new Error; + this._call = callback; + maybeNotify(this); + return this; + } +}; + +function poke(q) { + if (!q._start) { + try { start(q); } // let the current task complete + catch (e) { + if (q._tasks[q._ended + q._active - 1]) abort(q, e); // task errored synchronously + else if (!q._data) throw e; // await callback errored synchronously + } + } +} + +function start(q) { + while (q._start = q._waiting && q._active < q._size) { + var i = q._ended + q._active, + t = q._tasks[i], + j = t.length - 1, + c = t[j]; + t[j] = end(q, i); + --q._waiting, ++q._active; + t = c.apply(null, t); + if (!q._tasks[i]) continue; // task finished synchronously + q._tasks[i] = t || noabort; + } +} + +function end(q, i) { + return function(e, r) { + if (!q._tasks[i]) return; // ignore multiple callbacks + --q._active, ++q._ended; + q._tasks[i] = null; + if (q._error != null) return; // ignore secondary errors + if (e != null) { + abort(q, e); + } else { + q._data[i] = r; + if (q._waiting) poke(q); + else maybeNotify(q); + } + }; +} + +function abort(q, e) { + var i = q._tasks.length, t; + q._error = e; // ignore active callbacks + q._data = undefined; // allow gc + q._waiting = NaN; // prevent starting + + while (--i >= 0) { + if (t = q._tasks[i]) { + q._tasks[i] = null; + if (t.abort) { + try { t.abort(); } + catch (e) { /* ignore */ } + } + } + } + + q._active = NaN; // allow notification + maybeNotify(q); +} + +function maybeNotify(q) { + if (!q._active && q._call) { + var d = q._data; + q._data = undefined; // allow gc + q._call(q._error, d); + } +} + +function queue(concurrency) { + return new Queue(arguments.length ? +concurrency : Infinity); +} + +var constant$2 = function(x) { + return function constant() { + return x; + }; +}; + +var epsilon$1 = 1e-12; +var pi$2 = Math.PI; +var halfPi$1 = pi$2 / 2; +var tau$2 = 2 * pi$2; + +function arcInnerRadius(d) { + return d.innerRadius; +} + +function arcOuterRadius(d) { + return d.outerRadius; +} + +function arcStartAngle(d) { + return d.startAngle; +} + +function arcEndAngle(d) { + return d.endAngle; +} + +function arcPadAngle(d) { + return d && d.padAngle; // Note: optional! +} + +function asin(x) { + return x >= 1 ? halfPi$1 : x <= -1 ? -halfPi$1 : Math.asin(x); +} + +function intersect(x0, y0, x1, y1, x2, y2, x3, y3) { + var x10 = x1 - x0, y10 = y1 - y0, + x32 = x3 - x2, y32 = y3 - y2, + t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10); + return [x0 + t * x10, y0 + t * y10]; +} + +// Compute perpendicular offset line of length rc. +// http://mathworld.wolfram.com/Circle-LineIntersection.html +function cornerTangents(x0, y0, x1, y1, r1, rc, cw) { + var x01 = x0 - x1, + y01 = y0 - y1, + lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01), + ox = lo * y01, + oy = -lo * x01, + x11 = x0 + ox, + y11 = y0 + oy, + x10 = x1 + ox, + y10 = y1 + oy, + x00 = (x11 + x10) / 2, + y00 = (y11 + y10) / 2, + dx = x10 - x11, + dy = y10 - y11, + d2 = dx * dx + dy * dy, + r = r1 - rc, + D = x11 * y10 - x10 * y11, + d = (dy < 0 ? -1 : 1) * Math.sqrt(Math.max(0, r * r * d2 - D * D)), + cx0 = (D * dy - dx * d) / d2, + cy0 = (-D * dx - dy * d) / d2, + cx1 = (D * dy + dx * d) / d2, + cy1 = (-D * dx + dy * d) / d2, + dx0 = cx0 - x00, + dy0 = cy0 - y00, + dx1 = cx1 - x00, + dy1 = cy1 - y00; + + // Pick the closer of the two intersection points. + // TODO Is there a faster way to determine which intersection to use? + if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1; + + return { + cx: cx0, + cy: cy0, + x01: -ox, + y01: -oy, + x11: cx0 * (r1 / r - 1), + y11: cy0 * (r1 / r - 1) + }; +} + +var arc = function() { + var innerRadius = arcInnerRadius, + outerRadius = arcOuterRadius, + cornerRadius = constant$2(0), + padRadius = null, + startAngle = arcStartAngle, + endAngle = arcEndAngle, + padAngle = arcPadAngle, + context = null; + + function arc() { + var buffer, + r, + r0 = +innerRadius.apply(this, arguments), + r1 = +outerRadius.apply(this, arguments), + a0 = startAngle.apply(this, arguments) - halfPi$1, + a1 = endAngle.apply(this, arguments) - halfPi$1, + da = Math.abs(a1 - a0), + cw = a1 > a0; + + if (!context) context = buffer = path(); + + // Ensure that the outer radius is always larger than the inner radius. + if (r1 < r0) r = r1, r1 = r0, r0 = r; + + // Is it a point? + if (!(r1 > epsilon$1)) context.moveTo(0, 0); + + // Or is it a circle or annulus? + else if (da > tau$2 - epsilon$1) { + context.moveTo(r1 * Math.cos(a0), r1 * Math.sin(a0)); + context.arc(0, 0, r1, a0, a1, !cw); + if (r0 > epsilon$1) { + context.moveTo(r0 * Math.cos(a1), r0 * Math.sin(a1)); + context.arc(0, 0, r0, a1, a0, cw); + } + } + + // Or is it a circular or annular sector? + else { + var a01 = a0, + a11 = a1, + a00 = a0, + a10 = a1, + da0 = da, + da1 = da, + ap = padAngle.apply(this, arguments) / 2, + rp = (ap > epsilon$1) && (padRadius ? +padRadius.apply(this, arguments) : Math.sqrt(r0 * r0 + r1 * r1)), + rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)), + rc0 = rc, + rc1 = rc, + t0, + t1; + + // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0. + if (rp > epsilon$1) { + var p0 = asin(rp / r0 * Math.sin(ap)), + p1 = asin(rp / r1 * Math.sin(ap)); + if ((da0 -= p0 * 2) > epsilon$1) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0; + else da0 = 0, a00 = a10 = (a0 + a1) / 2; + if ((da1 -= p1 * 2) > epsilon$1) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1; + else da1 = 0, a01 = a11 = (a0 + a1) / 2; + } + + var x01 = r1 * Math.cos(a01), + y01 = r1 * Math.sin(a01), + x10 = r0 * Math.cos(a10), + y10 = r0 * Math.sin(a10); + + // Apply rounded corners? + if (rc > epsilon$1) { + var x11 = r1 * Math.cos(a11), + y11 = r1 * Math.sin(a11), + x00 = r0 * Math.cos(a00), + y00 = r0 * Math.sin(a00); + + // Restrict the corner radius according to the sector angle. + if (da < pi$2) { + var oc = da0 > epsilon$1 ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10], + ax = x01 - oc[0], + ay = y01 - oc[1], + bx = x11 - oc[0], + by = y11 - oc[1], + kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2), + lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]); + rc0 = Math.min(rc, (r0 - lc) / (kc - 1)); + rc1 = Math.min(rc, (r1 - lc) / (kc + 1)); + } + } + + // Is the sector collapsed to a line? + if (!(da1 > epsilon$1)) context.moveTo(x01, y01); + + // Does the sector’s outer ring have rounded corners? + else if (rc1 > epsilon$1) { + t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw); + t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw); + + context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01); + + // Have the corners merged? + if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw); + + // Otherwise, draw the two corners and the ring. + else { + context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw); + context.arc(0, 0, r1, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw); + context.arc(t1.cx, t1.cy, rc1, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw); + } + } + + // Or is the outer ring just a circular arc? + else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw); + + // Is there no inner ring, and it’s a circular sector? + // Or perhaps it’s an annular sector collapsed due to padding? + if (!(r0 > epsilon$1) || !(da0 > epsilon$1)) context.lineTo(x10, y10); + + // Does the sector’s inner ring (or point) have rounded corners? + else if (rc0 > epsilon$1) { + t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw); + t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw); + + context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01); + + // Have the corners merged? + if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw); + + // Otherwise, draw the two corners and the ring. + else { + context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw); + context.arc(0, 0, r0, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw); + context.arc(t1.cx, t1.cy, rc0, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw); + } + } + + // Or is the inner ring just a circular arc? + else context.arc(0, 0, r0, a10, a00, cw); + } + + context.closePath(); + + if (buffer) return context = null, buffer + "" || null; + } + + arc.centroid = function() { + var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, + a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi$2 / 2; + return [Math.cos(a) * r, Math.sin(a) * r]; + }; + + arc.innerRadius = function(_) { + return arguments.length ? (innerRadius = typeof _ === "function" ? _ : constant$2(+_), arc) : innerRadius; + }; + + arc.outerRadius = function(_) { + return arguments.length ? (outerRadius = typeof _ === "function" ? _ : constant$2(+_), arc) : outerRadius; + }; + + arc.cornerRadius = function(_) { + return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : constant$2(+_), arc) : cornerRadius; + }; + + arc.padRadius = function(_) { + return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : constant$2(+_), arc) : padRadius; + }; + + arc.startAngle = function(_) { + return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$2(+_), arc) : startAngle; + }; + + arc.endAngle = function(_) { + return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$2(+_), arc) : endAngle; + }; + + arc.padAngle = function(_) { + return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$2(+_), arc) : padAngle; + }; + + arc.context = function(_) { + return arguments.length ? ((context = _ == null ? null : _), arc) : context; + }; + + return arc; +}; + +function Linear(context) { + this._context = context; +} + +Linear.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._point = 0; + }, + lineEnd: function() { + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; // proceed + default: this._context.lineTo(x, y); break; + } + } +}; + +var curveLinear = function(context) { + return new Linear(context); +}; + +function x(p) { + return p[0]; +} + +function y(p) { + return p[1]; +} + +var line = function() { + var x$$1 = x, + y$$1 = y, + defined = constant$2(true), + context = null, + curve = curveLinear, + output = null; + + function line(data) { + var i, + n = data.length, + d, + defined0 = false, + buffer; + + if (context == null) output = curve(buffer = path()); + + for (i = 0; i <= n; ++i) { + if (!(i < n && defined(d = data[i], i, data)) === defined0) { + if (defined0 = !defined0) output.lineStart(); + else output.lineEnd(); + } + if (defined0) output.point(+x$$1(d, i, data), +y$$1(d, i, data)); + } + + if (buffer) return output = null, buffer + "" || null; + } + + line.x = function(_) { + return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$2(+_), line) : x$$1; + }; + + line.y = function(_) { + return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$2(+_), line) : y$$1; + }; + + line.defined = function(_) { + return arguments.length ? (defined = typeof _ === "function" ? _ : constant$2(!!_), line) : defined; + }; + + line.curve = function(_) { + return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve; + }; + + line.context = function(_) { + return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context; + }; + + return line; +}; + +var area$1 = function() { + var x0 = x, + x1 = null, + y0 = constant$2(0), + y1 = y, + defined = constant$2(true), + context = null, + curve = curveLinear, + output = null; + + function area(data) { + var i, + j, + k, + n = data.length, + d, + defined0 = false, + buffer, + x0z = new Array(n), + y0z = new Array(n); + + if (context == null) output = curve(buffer = path()); + + for (i = 0; i <= n; ++i) { + if (!(i < n && defined(d = data[i], i, data)) === defined0) { + if (defined0 = !defined0) { + j = i; + output.areaStart(); + output.lineStart(); + } else { + output.lineEnd(); + output.lineStart(); + for (k = i - 1; k >= j; --k) { + output.point(x0z[k], y0z[k]); + } + output.lineEnd(); + output.areaEnd(); + } + } + if (defined0) { + x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data); + output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]); + } + } + + if (buffer) return output = null, buffer + "" || null; + } + + function arealine() { + return line().defined(defined).curve(curve).context(context); + } + + area.x = function(_) { + return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$2(+_), x1 = null, area) : x0; + }; + + area.x0 = function(_) { + return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$2(+_), area) : x0; + }; + + area.x1 = function(_) { + return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : constant$2(+_), area) : x1; + }; + + area.y = function(_) { + return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$2(+_), y1 = null, area) : y0; + }; + + area.y0 = function(_) { + return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$2(+_), area) : y0; + }; + + area.y1 = function(_) { + return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : constant$2(+_), area) : y1; + }; + + area.lineX0 = + area.lineY0 = function() { + return arealine().x(x0).y(y0); + }; + + area.lineY1 = function() { + return arealine().x(x0).y(y1); + }; + + area.lineX1 = function() { + return arealine().x(x1).y(y0); + }; + + area.defined = function(_) { + return arguments.length ? (defined = typeof _ === "function" ? _ : constant$2(!!_), area) : defined; + }; + + area.curve = function(_) { + return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve; + }; + + area.context = function(_) { + return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context; + }; + + return area; +}; + +var descending$1 = function(a, b) { + return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; +}; + +var identity$1 = function(d) { + return d; +}; + +var pie = function() { + var value = identity$1, + sortValues = descending$1, + sort = null, + startAngle = constant$2(0), + endAngle = constant$2(tau$2), + padAngle = constant$2(0); + + function pie(data) { + var i, + n = data.length, + j, + k, + sum = 0, + index = new Array(n), + arcs = new Array(n), + a0 = +startAngle.apply(this, arguments), + da = Math.min(tau$2, Math.max(-tau$2, endAngle.apply(this, arguments) - a0)), + a1, + p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)), + pa = p * (da < 0 ? -1 : 1), + v; + + for (i = 0; i < n; ++i) { + if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) { + sum += v; + } + } + + // Optionally sort the arcs by previously-computed values or by data. + if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); }); + else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); }); + + // Compute the arcs! They are stored in the original data's order. + for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) { + j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = { + data: data[j], + index: i, + value: v, + startAngle: a0, + endAngle: a1, + padAngle: p + }; + } + + return arcs; + } + + pie.value = function(_) { + return arguments.length ? (value = typeof _ === "function" ? _ : constant$2(+_), pie) : value; + }; + + pie.sortValues = function(_) { + return arguments.length ? (sortValues = _, sort = null, pie) : sortValues; + }; + + pie.sort = function(_) { + return arguments.length ? (sort = _, sortValues = null, pie) : sort; + }; + + pie.startAngle = function(_) { + return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$2(+_), pie) : startAngle; + }; + + pie.endAngle = function(_) { + return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$2(+_), pie) : endAngle; + }; + + pie.padAngle = function(_) { + return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$2(+_), pie) : padAngle; + }; + + return pie; +}; + +var curveRadialLinear = curveRadial(curveLinear); + +function Radial(curve) { + this._curve = curve; +} + +Radial.prototype = { + areaStart: function() { + this._curve.areaStart(); + }, + areaEnd: function() { + this._curve.areaEnd(); + }, + lineStart: function() { + this._curve.lineStart(); + }, + lineEnd: function() { + this._curve.lineEnd(); + }, + point: function(a, r) { + this._curve.point(r * Math.sin(a), r * -Math.cos(a)); + } +}; + +function curveRadial(curve) { + + function radial(context) { + return new Radial(curve(context)); + } + + radial._curve = curve; + + return radial; +} + +function radialLine(l) { + var c = l.curve; + + l.angle = l.x, delete l.x; + l.radius = l.y, delete l.y; + + l.curve = function(_) { + return arguments.length ? c(curveRadial(_)) : c()._curve; + }; + + return l; +} + +var radialLine$1 = function() { + return radialLine(line().curve(curveRadialLinear)); +}; + +var radialArea = function() { + var a = area$1().curve(curveRadialLinear), + c = a.curve, + x0 = a.lineX0, + x1 = a.lineX1, + y0 = a.lineY0, + y1 = a.lineY1; + + a.angle = a.x, delete a.x; + a.startAngle = a.x0, delete a.x0; + a.endAngle = a.x1, delete a.x1; + a.radius = a.y, delete a.y; + a.innerRadius = a.y0, delete a.y0; + a.outerRadius = a.y1, delete a.y1; + a.lineStartAngle = function() { return radialLine(x0()); }, delete a.lineX0; + a.lineEndAngle = function() { return radialLine(x1()); }, delete a.lineX1; + a.lineInnerRadius = function() { return radialLine(y0()); }, delete a.lineY0; + a.lineOuterRadius = function() { return radialLine(y1()); }, delete a.lineY1; + + a.curve = function(_) { + return arguments.length ? c(curveRadial(_)) : c()._curve; + }; + + return a; +}; + +var circle = { + draw: function(context, size) { + var r = Math.sqrt(size / pi$2); + context.moveTo(r, 0); + context.arc(0, 0, r, 0, tau$2); + } +}; + +var cross$1 = { + draw: function(context, size) { + var r = Math.sqrt(size / 5) / 2; + context.moveTo(-3 * r, -r); + context.lineTo(-r, -r); + context.lineTo(-r, -3 * r); + context.lineTo(r, -3 * r); + context.lineTo(r, -r); + context.lineTo(3 * r, -r); + context.lineTo(3 * r, r); + context.lineTo(r, r); + context.lineTo(r, 3 * r); + context.lineTo(-r, 3 * r); + context.lineTo(-r, r); + context.lineTo(-3 * r, r); + context.closePath(); + } +}; + +var tan30 = Math.sqrt(1 / 3); +var tan30_2 = tan30 * 2; + +var diamond = { + draw: function(context, size) { + var y = Math.sqrt(size / tan30_2), + x = y * tan30; + context.moveTo(0, -y); + context.lineTo(x, 0); + context.lineTo(0, y); + context.lineTo(-x, 0); + context.closePath(); + } +}; + +var ka = 0.89081309152928522810; +var kr = Math.sin(pi$2 / 10) / Math.sin(7 * pi$2 / 10); +var kx = Math.sin(tau$2 / 10) * kr; +var ky = -Math.cos(tau$2 / 10) * kr; + +var star = { + draw: function(context, size) { + var r = Math.sqrt(size * ka), + x = kx * r, + y = ky * r; + context.moveTo(0, -r); + context.lineTo(x, y); + for (var i = 1; i < 5; ++i) { + var a = tau$2 * i / 5, + c = Math.cos(a), + s = Math.sin(a); + context.lineTo(s * r, -c * r); + context.lineTo(c * x - s * y, s * x + c * y); + } + context.closePath(); + } +}; + +var square = { + draw: function(context, size) { + var w = Math.sqrt(size), + x = -w / 2; + context.rect(x, x, w, w); + } +}; + +var sqrt3 = Math.sqrt(3); + +var triangle = { + draw: function(context, size) { + var y = -Math.sqrt(size / (sqrt3 * 3)); + context.moveTo(0, y * 2); + context.lineTo(-sqrt3 * y, -y); + context.lineTo(sqrt3 * y, -y); + context.closePath(); + } +}; + +var c = -0.5; +var s = Math.sqrt(3) / 2; +var k = 1 / Math.sqrt(12); +var a = (k / 2 + 1) * 3; + +var wye = { + draw: function(context, size) { + var r = Math.sqrt(size / a), + x0 = r / 2, + y0 = r * k, + x1 = x0, + y1 = r * k + r, + x2 = -x1, + y2 = y1; + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.lineTo(c * x0 - s * y0, s * x0 + c * y0); + context.lineTo(c * x1 - s * y1, s * x1 + c * y1); + context.lineTo(c * x2 - s * y2, s * x2 + c * y2); + context.lineTo(c * x0 + s * y0, c * y0 - s * x0); + context.lineTo(c * x1 + s * y1, c * y1 - s * x1); + context.lineTo(c * x2 + s * y2, c * y2 - s * x2); + context.closePath(); + } +}; + +var symbols = [ + circle, + cross$1, + diamond, + square, + star, + triangle, + wye +]; + +var symbol = function() { + var type = constant$2(circle), + size = constant$2(64), + context = null; + + function symbol() { + var buffer; + if (!context) context = buffer = path(); + type.apply(this, arguments).draw(context, +size.apply(this, arguments)); + if (buffer) return context = null, buffer + "" || null; + } + + symbol.type = function(_) { + return arguments.length ? (type = typeof _ === "function" ? _ : constant$2(_), symbol) : type; + }; + + symbol.size = function(_) { + return arguments.length ? (size = typeof _ === "function" ? _ : constant$2(+_), symbol) : size; + }; + + symbol.context = function(_) { + return arguments.length ? (context = _ == null ? null : _, symbol) : context; + }; + + return symbol; +}; + +var noop = function() {}; + +function point(that, x, y) { + that._context.bezierCurveTo( + (2 * that._x0 + that._x1) / 3, + (2 * that._y0 + that._y1) / 3, + (that._x0 + 2 * that._x1) / 3, + (that._y0 + 2 * that._y1) / 3, + (that._x0 + 4 * that._x1 + x) / 6, + (that._y0 + 4 * that._y1 + y) / 6 + ); +} + +function Basis(context) { + this._context = context; +} + +Basis.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = + this._y0 = this._y1 = NaN; + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 3: point(this, this._x1, this._y1); // proceed + case 2: this._context.lineTo(this._x1, this._y1); break; + } + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; break; + case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed + default: point(this, x, y); break; + } + this._x0 = this._x1, this._x1 = x; + this._y0 = this._y1, this._y1 = y; + } +}; + +var basis = function(context) { + return new Basis(context); +}; + +function BasisClosed(context) { + this._context = context; +} + +BasisClosed.prototype = { + areaStart: noop, + areaEnd: noop, + lineStart: function() { + this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = + this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN; + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 1: { + this._context.moveTo(this._x2, this._y2); + this._context.closePath(); + break; + } + case 2: { + this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3); + this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3); + this._context.closePath(); + break; + } + case 3: { + this.point(this._x2, this._y2); + this.point(this._x3, this._y3); + this.point(this._x4, this._y4); + break; + } + } + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._x2 = x, this._y2 = y; break; + case 1: this._point = 2; this._x3 = x, this._y3 = y; break; + case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break; + default: point(this, x, y); break; + } + this._x0 = this._x1, this._x1 = x; + this._y0 = this._y1, this._y1 = y; + } +}; + +var basisClosed = function(context) { + return new BasisClosed(context); +}; + +function BasisOpen(context) { + this._context = context; +} + +BasisOpen.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = + this._y0 = this._y1 = NaN; + this._point = 0; + }, + lineEnd: function() { + if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; break; + case 1: this._point = 2; break; + case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break; + case 3: this._point = 4; // proceed + default: point(this, x, y); break; + } + this._x0 = this._x1, this._x1 = x; + this._y0 = this._y1, this._y1 = y; + } +}; + +var basisOpen = function(context) { + return new BasisOpen(context); +}; + +function Bundle(context, beta) { + this._basis = new Basis(context); + this._beta = beta; +} + +Bundle.prototype = { + lineStart: function() { + this._x = []; + this._y = []; + this._basis.lineStart(); + }, + lineEnd: function() { + var x = this._x, + y = this._y, + j = x.length - 1; + + if (j > 0) { + var x0 = x[0], + y0 = y[0], + dx = x[j] - x0, + dy = y[j] - y0, + i = -1, + t; + + while (++i <= j) { + t = i / j; + this._basis.point( + this._beta * x[i] + (1 - this._beta) * (x0 + t * dx), + this._beta * y[i] + (1 - this._beta) * (y0 + t * dy) + ); + } + } + + this._x = this._y = null; + this._basis.lineEnd(); + }, + point: function(x, y) { + this._x.push(+x); + this._y.push(+y); + } +}; + +var bundle = (function custom(beta) { + + function bundle(context) { + return beta === 1 ? new Basis(context) : new Bundle(context, beta); + } + + bundle.beta = function(beta) { + return custom(+beta); + }; + + return bundle; +})(0.85); + +function point$1(that, x, y) { + that._context.bezierCurveTo( + that._x1 + that._k * (that._x2 - that._x0), + that._y1 + that._k * (that._y2 - that._y0), + that._x2 + that._k * (that._x1 - x), + that._y2 + that._k * (that._y1 - y), + that._x2, + that._y2 + ); +} + +function Cardinal(context, tension) { + this._context = context; + this._k = (1 - tension) / 6; +} + +Cardinal.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = this._x2 = + this._y0 = this._y1 = this._y2 = NaN; + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 2: this._context.lineTo(this._x2, this._y2); break; + case 3: point$1(this, this._x1, this._y1); break; + } + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; this._x1 = x, this._y1 = y; break; + case 2: this._point = 3; // proceed + default: point$1(this, x, y); break; + } + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } +}; + +var cardinal = (function custom(tension) { + + function cardinal(context) { + return new Cardinal(context, tension); + } + + cardinal.tension = function(tension) { + return custom(+tension); + }; + + return cardinal; +})(0); + +function CardinalClosed(context, tension) { + this._context = context; + this._k = (1 - tension) / 6; +} + +CardinalClosed.prototype = { + areaStart: noop, + areaEnd: noop, + lineStart: function() { + this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = + this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN; + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 1: { + this._context.moveTo(this._x3, this._y3); + this._context.closePath(); + break; + } + case 2: { + this._context.lineTo(this._x3, this._y3); + this._context.closePath(); + break; + } + case 3: { + this.point(this._x3, this._y3); + this.point(this._x4, this._y4); + this.point(this._x5, this._y5); + break; + } + } + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._x3 = x, this._y3 = y; break; + case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break; + case 2: this._point = 3; this._x5 = x, this._y5 = y; break; + default: point$1(this, x, y); break; + } + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } +}; + +var cardinalClosed = (function custom(tension) { + + function cardinal(context) { + return new CardinalClosed(context, tension); + } + + cardinal.tension = function(tension) { + return custom(+tension); + }; + + return cardinal; +})(0); + +function CardinalOpen(context, tension) { + this._context = context; + this._k = (1 - tension) / 6; +} + +CardinalOpen.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = this._x2 = + this._y0 = this._y1 = this._y2 = NaN; + this._point = 0; + }, + lineEnd: function() { + if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; break; + case 1: this._point = 2; break; + case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break; + case 3: this._point = 4; // proceed + default: point$1(this, x, y); break; + } + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } +}; + +var cardinalOpen = (function custom(tension) { + + function cardinal(context) { + return new CardinalOpen(context, tension); + } + + cardinal.tension = function(tension) { + return custom(+tension); + }; + + return cardinal; +})(0); + +function point$2(that, x, y) { + var x1 = that._x1, + y1 = that._y1, + x2 = that._x2, + y2 = that._y2; + + if (that._l01_a > epsilon$1) { + var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a, + n = 3 * that._l01_a * (that._l01_a + that._l12_a); + x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n; + y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n; + } + + if (that._l23_a > epsilon$1) { + var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a, + m = 3 * that._l23_a * (that._l23_a + that._l12_a); + x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m; + y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m; + } + + that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2); +} + +function CatmullRom(context, alpha) { + this._context = context; + this._alpha = alpha; +} + +CatmullRom.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = this._x2 = + this._y0 = this._y1 = this._y2 = NaN; + this._l01_a = this._l12_a = this._l23_a = + this._l01_2a = this._l12_2a = this._l23_2a = + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 2: this._context.lineTo(this._x2, this._y2); break; + case 3: this.point(this._x2, this._y2); break; + } + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + + if (this._point) { + var x23 = this._x2 - x, + y23 = this._y2 - y; + this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); + } + + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; break; + case 2: this._point = 3; // proceed + default: point$2(this, x, y); break; + } + + this._l01_a = this._l12_a, this._l12_a = this._l23_a; + this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } +}; + +var catmullRom = (function custom(alpha) { + + function catmullRom(context) { + return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0); + } + + catmullRom.alpha = function(alpha) { + return custom(+alpha); + }; + + return catmullRom; +})(0.5); + +function CatmullRomClosed(context, alpha) { + this._context = context; + this._alpha = alpha; +} + +CatmullRomClosed.prototype = { + areaStart: noop, + areaEnd: noop, + lineStart: function() { + this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = + this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN; + this._l01_a = this._l12_a = this._l23_a = + this._l01_2a = this._l12_2a = this._l23_2a = + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 1: { + this._context.moveTo(this._x3, this._y3); + this._context.closePath(); + break; + } + case 2: { + this._context.lineTo(this._x3, this._y3); + this._context.closePath(); + break; + } + case 3: { + this.point(this._x3, this._y3); + this.point(this._x4, this._y4); + this.point(this._x5, this._y5); + break; + } + } + }, + point: function(x, y) { + x = +x, y = +y; + + if (this._point) { + var x23 = this._x2 - x, + y23 = this._y2 - y; + this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); + } + + switch (this._point) { + case 0: this._point = 1; this._x3 = x, this._y3 = y; break; + case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break; + case 2: this._point = 3; this._x5 = x, this._y5 = y; break; + default: point$2(this, x, y); break; + } + + this._l01_a = this._l12_a, this._l12_a = this._l23_a; + this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } +}; + +var catmullRomClosed = (function custom(alpha) { + + function catmullRom(context) { + return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0); + } + + catmullRom.alpha = function(alpha) { + return custom(+alpha); + }; + + return catmullRom; +})(0.5); + +function CatmullRomOpen(context, alpha) { + this._context = context; + this._alpha = alpha; +} + +CatmullRomOpen.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = this._x2 = + this._y0 = this._y1 = this._y2 = NaN; + this._l01_a = this._l12_a = this._l23_a = + this._l01_2a = this._l12_2a = this._l23_2a = + this._point = 0; + }, + lineEnd: function() { + if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + + if (this._point) { + var x23 = this._x2 - x, + y23 = this._y2 - y; + this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); + } + + switch (this._point) { + case 0: this._point = 1; break; + case 1: this._point = 2; break; + case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break; + case 3: this._point = 4; // proceed + default: point$2(this, x, y); break; + } + + this._l01_a = this._l12_a, this._l12_a = this._l23_a; + this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } +}; + +var catmullRomOpen = (function custom(alpha) { + + function catmullRom(context) { + return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0); + } + + catmullRom.alpha = function(alpha) { + return custom(+alpha); + }; + + return catmullRom; +})(0.5); + +function LinearClosed(context) { + this._context = context; +} + +LinearClosed.prototype = { + areaStart: noop, + areaEnd: noop, + lineStart: function() { + this._point = 0; + }, + lineEnd: function() { + if (this._point) this._context.closePath(); + }, + point: function(x, y) { + x = +x, y = +y; + if (this._point) this._context.lineTo(x, y); + else this._point = 1, this._context.moveTo(x, y); + } +}; + +var linearClosed = function(context) { + return new LinearClosed(context); +}; + +function sign(x) { + return x < 0 ? -1 : 1; +} + +// Calculate the slopes of the tangents (Hermite-type interpolation) based on +// the following paper: Steffen, M. 1990. A Simple Method for Monotonic +// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO. +// NOV(II), P. 443, 1990. +function slope3(that, x2, y2) { + var h0 = that._x1 - that._x0, + h1 = x2 - that._x1, + s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0), + s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0), + p = (s0 * h1 + s1 * h0) / (h0 + h1); + return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0; +} + +// Calculate a one-sided slope. +function slope2(that, t) { + var h = that._x1 - that._x0; + return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t; +} + +// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations +// "you can express cubic Hermite interpolation in terms of cubic Bézier curves +// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1". +function point$3(that, t0, t1) { + var x0 = that._x0, + y0 = that._y0, + x1 = that._x1, + y1 = that._y1, + dx = (x1 - x0) / 3; + that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1); +} + +function MonotoneX(context) { + this._context = context; +} + +MonotoneX.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = + this._y0 = this._y1 = + this._t0 = NaN; + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 2: this._context.lineTo(this._x1, this._y1); break; + case 3: point$3(this, this._t0, slope2(this, this._t0)); break; + } + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + var t1 = NaN; + + x = +x, y = +y; + if (x === this._x1 && y === this._y1) return; // Ignore coincident points. + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; break; + case 2: this._point = 3; point$3(this, slope2(this, t1 = slope3(this, x, y)), t1); break; + default: point$3(this, this._t0, t1 = slope3(this, x, y)); break; + } + + this._x0 = this._x1, this._x1 = x; + this._y0 = this._y1, this._y1 = y; + this._t0 = t1; + } +}; + +function MonotoneY(context) { + this._context = new ReflectContext(context); +} + +(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) { + MonotoneX.prototype.point.call(this, y, x); +}; + +function ReflectContext(context) { + this._context = context; +} + +ReflectContext.prototype = { + moveTo: function(x, y) { this._context.moveTo(y, x); }, + closePath: function() { this._context.closePath(); }, + lineTo: function(x, y) { this._context.lineTo(y, x); }, + bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); } +}; + +function monotoneX(context) { + return new MonotoneX(context); +} + +function monotoneY(context) { + return new MonotoneY(context); +} + +function Natural(context) { + this._context = context; +} + +Natural.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x = []; + this._y = []; + }, + lineEnd: function() { + var x = this._x, + y = this._y, + n = x.length; + + if (n) { + this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]); + if (n === 2) { + this._context.lineTo(x[1], y[1]); + } else { + var px = controlPoints(x), + py = controlPoints(y); + for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) { + this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]); + } + } + } + + if (this._line || (this._line !== 0 && n === 1)) this._context.closePath(); + this._line = 1 - this._line; + this._x = this._y = null; + }, + point: function(x, y) { + this._x.push(+x); + this._y.push(+y); + } +}; + +// See https://www.particleincell.com/2012/bezier-splines/ for derivation. +function controlPoints(x) { + var i, + n = x.length - 1, + m, + a = new Array(n), + b = new Array(n), + r = new Array(n); + a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1]; + for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1]; + a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n]; + for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1]; + a[n - 1] = r[n - 1] / b[n - 1]; + for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i]; + b[n - 1] = (x[n] + a[n - 1]) / 2; + for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1]; + return [a, b]; +} + +var natural = function(context) { + return new Natural(context); +}; + +function Step(context, t) { + this._context = context; + this._t = t; +} + +Step.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x = this._y = NaN; + this._point = 0; + }, + lineEnd: function() { + if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y); + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; // proceed + default: { + if (this._t <= 0) { + this._context.lineTo(this._x, y); + this._context.lineTo(x, y); + } else { + var x1 = this._x * (1 - this._t) + x * this._t; + this._context.lineTo(x1, this._y); + this._context.lineTo(x1, y); + } + break; + } + } + this._x = x, this._y = y; + } +}; + +var step = function(context) { + return new Step(context, 0.5); +}; + +function stepBefore(context) { + return new Step(context, 0); +} + +function stepAfter(context) { + return new Step(context, 1); +} + +var slice$2 = Array.prototype.slice; + +var none = function(series, order) { + if (!((n = series.length) > 1)) return; + for (var i = 1, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) { + s0 = s1, s1 = series[order[i]]; + for (var j = 0; j < m; ++j) { + s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1]; + } + } +}; + +var none$1 = function(series) { + var n = series.length, o = new Array(n); + while (--n >= 0) o[n] = n; + return o; +}; + +function stackValue(d, key) { + return d[key]; +} + +var stack = function() { + var keys = constant$2([]), + order = none$1, + offset = none, + value = stackValue; + + function stack(data) { + var kz = keys.apply(this, arguments), + i, + m = data.length, + n = kz.length, + sz = new Array(n), + oz; + + for (i = 0; i < n; ++i) { + for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) { + si[j] = sij = [0, +value(data[j], ki, j, data)]; + sij.data = data[j]; + } + si.key = ki; + } + + for (i = 0, oz = order(sz); i < n; ++i) { + sz[oz[i]].index = i; + } + + offset(sz, oz); + return sz; + } + + stack.keys = function(_) { + return arguments.length ? (keys = typeof _ === "function" ? _ : constant$2(slice$2.call(_)), stack) : keys; + }; + + stack.value = function(_) { + return arguments.length ? (value = typeof _ === "function" ? _ : constant$2(+_), stack) : value; + }; + + stack.order = function(_) { + return arguments.length ? (order = _ == null ? none$1 : typeof _ === "function" ? _ : constant$2(slice$2.call(_)), stack) : order; + }; + + stack.offset = function(_) { + return arguments.length ? (offset = _ == null ? none : _, stack) : offset; + }; + + return stack; +}; + +var expand = function(series, order) { + if (!((n = series.length) > 0)) return; + for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) { + for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0; + if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y; + } + none(series, order); +}; + +var silhouette = function(series, order) { + if (!((n = series.length) > 0)) return; + for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) { + for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0; + s0[j][1] += s0[j][0] = -y / 2; + } + none(series, order); +}; + +var wiggle = function(series, order) { + if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return; + for (var y = 0, j = 1, s0, m, n; j < m; ++j) { + for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) { + var si = series[order[i]], + sij0 = si[j][1] || 0, + sij1 = si[j - 1][1] || 0, + s3 = (sij0 - sij1) / 2; + for (var k = 0; k < i; ++k) { + var sk = series[order[k]], + skj0 = sk[j][1] || 0, + skj1 = sk[j - 1][1] || 0; + s3 += skj0 - skj1; + } + s1 += sij0, s2 += s3 * sij0; + } + s0[j - 1][1] += s0[j - 1][0] = y; + if (s1) y -= s2 / s1; + } + s0[j - 1][1] += s0[j - 1][0] = y; + none(series, order); +}; + +var ascending$1 = function(series) { + var sums = series.map(sum$1); + return none$1(series).sort(function(a, b) { return sums[a] - sums[b]; }); +}; + +function sum$1(series) { + var s = 0, i = -1, n = series.length, v; + while (++i < n) if (v = +series[i][1]) s += v; + return s; +} + +var descending$2 = function(series) { + return ascending$1(series).reverse(); +}; + +var insideOut = function(series) { + var n = series.length, + i, + j, + sums = series.map(sum$1), + order = none$1(series).sort(function(a, b) { return sums[b] - sums[a]; }), + top = 0, + bottom = 0, + tops = [], + bottoms = []; + + for (i = 0; i < n; ++i) { + j = order[i]; + if (top < bottom) { + top += sums[j]; + tops.push(j); + } else { + bottom += sums[j]; + bottoms.push(j); + } + } + + return bottoms.reverse().concat(tops); +}; + +var reverse = function(series) { + return none$1(series).reverse(); +}; + +var define = function(constructor, factory, prototype) { + constructor.prototype = factory.prototype = prototype; + prototype.constructor = constructor; +}; + +function extend(parent, definition) { + var prototype = Object.create(parent.prototype); + for (var key in definition) prototype[key] = definition[key]; + return prototype; +} + +function Color() {} + +var darker = 0.7; +var brighter = 1 / darker; + +var reHex3 = /^#([0-9a-f]{3})$/; +var reHex6 = /^#([0-9a-f]{6})$/; +var reRgbInteger = /^rgb\(\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*\)$/; +var reRgbPercent = /^rgb\(\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*\)$/; +var reRgbaInteger = /^rgba\(\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*,\s*([-+]?\d+(?:\.\d+)?)\s*\)$/; +var reRgbaPercent = /^rgba\(\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)\s*\)$/; +var reHslPercent = /^hsl\(\s*([-+]?\d+(?:\.\d+)?)\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*\)$/; +var reHslaPercent = /^hsla\(\s*([-+]?\d+(?:\.\d+)?)\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)\s*\)$/; + +var named = { + aliceblue: 0xf0f8ff, + antiquewhite: 0xfaebd7, + aqua: 0x00ffff, + aquamarine: 0x7fffd4, + azure: 0xf0ffff, + beige: 0xf5f5dc, + bisque: 0xffe4c4, + black: 0x000000, + blanchedalmond: 0xffebcd, + blue: 0x0000ff, + blueviolet: 0x8a2be2, + brown: 0xa52a2a, + burlywood: 0xdeb887, + cadetblue: 0x5f9ea0, + chartreuse: 0x7fff00, + chocolate: 0xd2691e, + coral: 0xff7f50, + cornflowerblue: 0x6495ed, + cornsilk: 0xfff8dc, + crimson: 0xdc143c, + cyan: 0x00ffff, + darkblue: 0x00008b, + darkcyan: 0x008b8b, + darkgoldenrod: 0xb8860b, + darkgray: 0xa9a9a9, + darkgreen: 0x006400, + darkgrey: 0xa9a9a9, + darkkhaki: 0xbdb76b, + darkmagenta: 0x8b008b, + darkolivegreen: 0x556b2f, + darkorange: 0xff8c00, + darkorchid: 0x9932cc, + darkred: 0x8b0000, + darksalmon: 0xe9967a, + darkseagreen: 0x8fbc8f, + darkslateblue: 0x483d8b, + darkslategray: 0x2f4f4f, + darkslategrey: 0x2f4f4f, + darkturquoise: 0x00ced1, + darkviolet: 0x9400d3, + deeppink: 0xff1493, + deepskyblue: 0x00bfff, + dimgray: 0x696969, + dimgrey: 0x696969, + dodgerblue: 0x1e90ff, + firebrick: 0xb22222, + floralwhite: 0xfffaf0, + forestgreen: 0x228b22, + fuchsia: 0xff00ff, + gainsboro: 0xdcdcdc, + ghostwhite: 0xf8f8ff, + gold: 0xffd700, + goldenrod: 0xdaa520, + gray: 0x808080, + green: 0x008000, + greenyellow: 0xadff2f, + grey: 0x808080, + honeydew: 0xf0fff0, + hotpink: 0xff69b4, + indianred: 0xcd5c5c, + indigo: 0x4b0082, + ivory: 0xfffff0, + khaki: 0xf0e68c, + lavender: 0xe6e6fa, + lavenderblush: 0xfff0f5, + lawngreen: 0x7cfc00, + lemonchiffon: 0xfffacd, + lightblue: 0xadd8e6, + lightcoral: 0xf08080, + lightcyan: 0xe0ffff, + lightgoldenrodyellow: 0xfafad2, + lightgray: 0xd3d3d3, + lightgreen: 0x90ee90, + lightgrey: 0xd3d3d3, + lightpink: 0xffb6c1, + lightsalmon: 0xffa07a, + lightseagreen: 0x20b2aa, + lightskyblue: 0x87cefa, + lightslategray: 0x778899, + lightslategrey: 0x778899, + lightsteelblue: 0xb0c4de, + lightyellow: 0xffffe0, + lime: 0x00ff00, + limegreen: 0x32cd32, + linen: 0xfaf0e6, + magenta: 0xff00ff, + maroon: 0x800000, + mediumaquamarine: 0x66cdaa, + mediumblue: 0x0000cd, + mediumorchid: 0xba55d3, + mediumpurple: 0x9370db, + mediumseagreen: 0x3cb371, + mediumslateblue: 0x7b68ee, + mediumspringgreen: 0x00fa9a, + mediumturquoise: 0x48d1cc, + mediumvioletred: 0xc71585, + midnightblue: 0x191970, + mintcream: 0xf5fffa, + mistyrose: 0xffe4e1, + moccasin: 0xffe4b5, + navajowhite: 0xffdead, + navy: 0x000080, + oldlace: 0xfdf5e6, + olive: 0x808000, + olivedrab: 0x6b8e23, + orange: 0xffa500, + orangered: 0xff4500, + orchid: 0xda70d6, + palegoldenrod: 0xeee8aa, + palegreen: 0x98fb98, + paleturquoise: 0xafeeee, + palevioletred: 0xdb7093, + papayawhip: 0xffefd5, + peachpuff: 0xffdab9, + peru: 0xcd853f, + pink: 0xffc0cb, + plum: 0xdda0dd, + powderblue: 0xb0e0e6, + purple: 0x800080, + rebeccapurple: 0x663399, + red: 0xff0000, + rosybrown: 0xbc8f8f, + royalblue: 0x4169e1, + saddlebrown: 0x8b4513, + salmon: 0xfa8072, + sandybrown: 0xf4a460, + seagreen: 0x2e8b57, + seashell: 0xfff5ee, + sienna: 0xa0522d, + silver: 0xc0c0c0, + skyblue: 0x87ceeb, + slateblue: 0x6a5acd, + slategray: 0x708090, + slategrey: 0x708090, + snow: 0xfffafa, + springgreen: 0x00ff7f, + steelblue: 0x4682b4, + tan: 0xd2b48c, + teal: 0x008080, + thistle: 0xd8bfd8, + tomato: 0xff6347, + turquoise: 0x40e0d0, + violet: 0xee82ee, + wheat: 0xf5deb3, + white: 0xffffff, + whitesmoke: 0xf5f5f5, + yellow: 0xffff00, + yellowgreen: 0x9acd32 +}; + +define(Color, color, { + displayable: function() { + return this.rgb().displayable(); + }, + toString: function() { + return this.rgb() + ""; + } +}); + +function color(format) { + var m; + format = (format + "").trim().toLowerCase(); + return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00 + : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000 + : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0) + : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%) + : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1) + : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1) + : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%) + : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1) + : named.hasOwnProperty(format) ? rgbn(named[format]) + : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0) + : null; +} + +function rgbn(n) { + return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1); +} + +function rgba(r, g, b, a) { + if (a <= 0) r = g = b = NaN; + return new Rgb(r, g, b, a); +} + +function rgbConvert(o) { + if (!(o instanceof Color)) o = color(o); + if (!o) return new Rgb; + o = o.rgb(); + return new Rgb(o.r, o.g, o.b, o.opacity); +} + +function rgb(r, g, b, opacity) { + return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity); +} + +function Rgb(r, g, b, opacity) { + this.r = +r; + this.g = +g; + this.b = +b; + this.opacity = +opacity; +} + +define(Rgb, rgb, extend(Color, { + brighter: function(k) { + k = k == null ? brighter : Math.pow(brighter, k); + return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); + }, + darker: function(k) { + k = k == null ? darker : Math.pow(darker, k); + return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); + }, + rgb: function() { + return this; + }, + displayable: function() { + return (0 <= this.r && this.r <= 255) + && (0 <= this.g && this.g <= 255) + && (0 <= this.b && this.b <= 255) + && (0 <= this.opacity && this.opacity <= 1); + }, + toString: function() { + var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a)); + return (a === 1 ? "rgb(" : "rgba(") + + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", " + + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", " + + Math.max(0, Math.min(255, Math.round(this.b) || 0)) + + (a === 1 ? ")" : ", " + a + ")"); + } +})); + +function hsla(h, s, l, a) { + if (a <= 0) h = s = l = NaN; + else if (l <= 0 || l >= 1) h = s = NaN; + else if (s <= 0) h = NaN; + return new Hsl(h, s, l, a); +} + +function hslConvert(o) { + if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity); + if (!(o instanceof Color)) o = color(o); + if (!o) return new Hsl; + if (o instanceof Hsl) return o; + o = o.rgb(); + var r = o.r / 255, + g = o.g / 255, + b = o.b / 255, + min = Math.min(r, g, b), + max = Math.max(r, g, b), + h = NaN, + s = max - min, + l = (max + min) / 2; + if (s) { + if (r === max) h = (g - b) / s + (g < b) * 6; + else if (g === max) h = (b - r) / s + 2; + else h = (r - g) / s + 4; + s /= l < 0.5 ? max + min : 2 - max - min; + h *= 60; + } else { + s = l > 0 && l < 1 ? 0 : h; + } + return new Hsl(h, s, l, o.opacity); +} + +function hsl(h, s, l, opacity) { + return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity); +} + +function Hsl(h, s, l, opacity) { + this.h = +h; + this.s = +s; + this.l = +l; + this.opacity = +opacity; +} + +define(Hsl, hsl, extend(Color, { + brighter: function(k) { + k = k == null ? brighter : Math.pow(brighter, k); + return new Hsl(this.h, this.s, this.l * k, this.opacity); + }, + darker: function(k) { + k = k == null ? darker : Math.pow(darker, k); + return new Hsl(this.h, this.s, this.l * k, this.opacity); + }, + rgb: function() { + var h = this.h % 360 + (this.h < 0) * 360, + s = isNaN(h) || isNaN(this.s) ? 0 : this.s, + l = this.l, + m2 = l + (l < 0.5 ? l : 1 - l) * s, + m1 = 2 * l - m2; + return new Rgb( + hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2), + hsl2rgb(h, m1, m2), + hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2), + this.opacity + ); + }, + displayable: function() { + return (0 <= this.s && this.s <= 1 || isNaN(this.s)) + && (0 <= this.l && this.l <= 1) + && (0 <= this.opacity && this.opacity <= 1); + } +})); + +/* From FvD 13.37, CSS Color Module Level 3 */ +function hsl2rgb(h, m1, m2) { + return (h < 60 ? m1 + (m2 - m1) * h / 60 + : h < 180 ? m2 + : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60 + : m1) * 255; +} + +var deg2rad = Math.PI / 180; +var rad2deg = 180 / Math.PI; + +var Kn = 18; +var Xn = 0.950470; +var Yn = 1; +var Zn = 1.088830; +var t0 = 4 / 29; +var t1 = 6 / 29; +var t2 = 3 * t1 * t1; +var t3 = t1 * t1 * t1; + +function labConvert(o) { + if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity); + if (o instanceof Hcl) { + var h = o.h * deg2rad; + return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity); + } + if (!(o instanceof Rgb)) o = rgbConvert(o); + var b = rgb2xyz(o.r), + a = rgb2xyz(o.g), + l = rgb2xyz(o.b), + x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn), + y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.0721750 * l) / Yn), + z = xyz2lab((0.0193339 * b + 0.1191920 * a + 0.9503041 * l) / Zn); + return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity); +} + +function lab(l, a, b, opacity) { + return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity); +} + +function Lab(l, a, b, opacity) { + this.l = +l; + this.a = +a; + this.b = +b; + this.opacity = +opacity; +} + +define(Lab, lab, extend(Color, { + brighter: function(k) { + return new Lab(this.l + Kn * (k == null ? 1 : k), this.a, this.b, this.opacity); + }, + darker: function(k) { + return new Lab(this.l - Kn * (k == null ? 1 : k), this.a, this.b, this.opacity); + }, + rgb: function() { + var y = (this.l + 16) / 116, + x = isNaN(this.a) ? y : y + this.a / 500, + z = isNaN(this.b) ? y : y - this.b / 200; + y = Yn * lab2xyz(y); + x = Xn * lab2xyz(x); + z = Zn * lab2xyz(z); + return new Rgb( + xyz2rgb( 3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB + xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z), + xyz2rgb( 0.0556434 * x - 0.2040259 * y + 1.0572252 * z), + this.opacity + ); + } +})); + +function xyz2lab(t) { + return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0; +} + +function lab2xyz(t) { + return t > t1 ? t * t * t : t2 * (t - t0); +} + +function xyz2rgb(x) { + return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055); +} + +function rgb2xyz(x) { + return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4); +} + +function hclConvert(o) { + if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity); + if (!(o instanceof Lab)) o = labConvert(o); + var h = Math.atan2(o.b, o.a) * rad2deg; + return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity); +} + +function hcl(h, c, l, opacity) { + return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity); +} + +function Hcl(h, c, l, opacity) { + this.h = +h; + this.c = +c; + this.l = +l; + this.opacity = +opacity; +} + +define(Hcl, hcl, extend(Color, { + brighter: function(k) { + return new Hcl(this.h, this.c, this.l + Kn * (k == null ? 1 : k), this.opacity); + }, + darker: function(k) { + return new Hcl(this.h, this.c, this.l - Kn * (k == null ? 1 : k), this.opacity); + }, + rgb: function() { + return labConvert(this).rgb(); + } +})); + +var A = -0.14861; +var B = +1.78277; +var C = -0.29227; +var D = -0.90649; +var E = +1.97294; +var ED = E * D; +var EB = E * B; +var BC_DA = B * C - D * A; + +function cubehelixConvert(o) { + if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity); + if (!(o instanceof Rgb)) o = rgbConvert(o); + var r = o.r / 255, + g = o.g / 255, + b = o.b / 255, + l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB), + bl = b - l, + k = (E * (g - l) - C * bl) / D, + s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1 + h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN; + return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity); +} + +function cubehelix(h, s, l, opacity) { + return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity); +} + +function Cubehelix(h, s, l, opacity) { + this.h = +h; + this.s = +s; + this.l = +l; + this.opacity = +opacity; +} + +define(Cubehelix, cubehelix, extend(Color, { + brighter: function(k) { + k = k == null ? brighter : Math.pow(brighter, k); + return new Cubehelix(this.h, this.s, this.l * k, this.opacity); + }, + darker: function(k) { + k = k == null ? darker : Math.pow(darker, k); + return new Cubehelix(this.h, this.s, this.l * k, this.opacity); + }, + rgb: function() { + var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad, + l = +this.l, + a = isNaN(this.s) ? 0 : this.s * l * (1 - l), + cosh = Math.cos(h), + sinh = Math.sin(h); + return new Rgb( + 255 * (l + a * (A * cosh + B * sinh)), + 255 * (l + a * (C * cosh + D * sinh)), + 255 * (l + a * (E * cosh)), + this.opacity + ); + } +})); + +function basis$1(t1, v0, v1, v2, v3) { + var t2 = t1 * t1, t3 = t2 * t1; + return ((1 - 3 * t1 + 3 * t2 - t3) * v0 + + (4 - 6 * t2 + 3 * t3) * v1 + + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2 + + t3 * v3) / 6; +} + +var basis$2 = function(values) { + var n = values.length - 1; + return function(t) { + var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n), + v1 = values[i], + v2 = values[i + 1], + v0 = i > 0 ? values[i - 1] : 2 * v1 - v2, + v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1; + return basis$1((t - i / n) * n, v0, v1, v2, v3); + }; +}; + +var basisClosed$1 = function(values) { + var n = values.length; + return function(t) { + var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n), + v0 = values[(i + n - 1) % n], + v1 = values[i % n], + v2 = values[(i + 1) % n], + v3 = values[(i + 2) % n]; + return basis$1((t - i / n) * n, v0, v1, v2, v3); + }; +}; + +var constant$3 = function(x) { + return function() { + return x; + }; +}; + +function linear$1(a, d) { + return function(t) { + return a + t * d; + }; +} + +function exponential$1(a, b, y) { + return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) { + return Math.pow(a + t * b, y); + }; +} + +function hue(a, b) { + var d = b - a; + return d ? linear$1(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant$3(isNaN(a) ? b : a); +} + +function gamma(y) { + return (y = +y) === 1 ? nogamma : function(a, b) { + return b - a ? exponential$1(a, b, y) : constant$3(isNaN(a) ? b : a); + }; +} + +function nogamma(a, b) { + var d = b - a; + return d ? linear$1(a, d) : constant$3(isNaN(a) ? b : a); +} + +var interpolateRgb = (function rgbGamma(y) { + var color$$1 = gamma(y); + + function rgb$$1(start, end) { + var r = color$$1((start = rgb(start)).r, (end = rgb(end)).r), + g = color$$1(start.g, end.g), + b = color$$1(start.b, end.b), + opacity = color$$1(start.opacity, end.opacity); + return function(t) { + start.r = r(t); + start.g = g(t); + start.b = b(t); + start.opacity = opacity(t); + return start + ""; + }; + } + + rgb$$1.gamma = rgbGamma; + + return rgb$$1; +})(1); + +function rgbSpline(spline) { + return function(colors) { + var n = colors.length, + r = new Array(n), + g = new Array(n), + b = new Array(n), + i, color$$1; + for (i = 0; i < n; ++i) { + color$$1 = rgb(colors[i]); + r[i] = color$$1.r || 0; + g[i] = color$$1.g || 0; + b[i] = color$$1.b || 0; + } + r = spline(r); + g = spline(g); + b = spline(b); + color$$1.opacity = 1; + return function(t) { + color$$1.r = r(t); + color$$1.g = g(t); + color$$1.b = b(t); + return color$$1 + ""; + }; + }; +} + +var rgbBasis = rgbSpline(basis$2); +var rgbBasisClosed = rgbSpline(basisClosed$1); + +var array$1 = function(a, b) { + var nb = b ? b.length : 0, + na = a ? Math.min(nb, a.length) : 0, + x = new Array(nb), + c = new Array(nb), + i; + + for (i = 0; i < na; ++i) x[i] = interpolate(a[i], b[i]); + for (; i < nb; ++i) c[i] = b[i]; + + return function(t) { + for (i = 0; i < na; ++i) c[i] = x[i](t); + return c; + }; +}; + +var date = function(a, b) { + var d = new Date; + return a = +a, b -= a, function(t) { + return d.setTime(a + b * t), d; + }; +}; + +var interpolateNumber = function(a, b) { + return a = +a, b -= a, function(t) { + return a + b * t; + }; +}; + +var object = function(a, b) { + var i = {}, + c = {}, + k; + + if (a === null || typeof a !== "object") a = {}; + if (b === null || typeof b !== "object") b = {}; + + for (k in b) { + if (k in a) { + i[k] = interpolate(a[k], b[k]); + } else { + c[k] = b[k]; + } + } + + return function(t) { + for (k in i) c[k] = i[k](t); + return c; + }; +}; + +var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g; +var reB = new RegExp(reA.source, "g"); + +function zero(b) { + return function() { + return b; + }; +} + +function one(b) { + return function(t) { + return b(t) + ""; + }; +} + +var interpolateString = function(a, b) { + var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b + am, // current match in a + bm, // current match in b + bs, // string preceding current number in b, if any + i = -1, // index in s + s = [], // string constants and placeholders + q = []; // number interpolators + + // Coerce inputs to strings. + a = a + "", b = b + ""; + + // Interpolate pairs of numbers in a & b. + while ((am = reA.exec(a)) + && (bm = reB.exec(b))) { + if ((bs = bm.index) > bi) { // a string precedes the next number in b + bs = b.slice(bi, bs); + if (s[i]) s[i] += bs; // coalesce with previous string + else s[++i] = bs; + } + if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match + if (s[i]) s[i] += bm; // coalesce with previous string + else s[++i] = bm; + } else { // interpolate non-matching numbers + s[++i] = null; + q.push({i: i, x: interpolateNumber(am, bm)}); + } + bi = reB.lastIndex; + } + + // Add remains of b. + if (bi < b.length) { + bs = b.slice(bi); + if (s[i]) s[i] += bs; // coalesce with previous string + else s[++i] = bs; + } + + // Special optimization for only a single match. + // Otherwise, interpolate each of the numbers and rejoin the string. + return s.length < 2 ? (q[0] + ? one(q[0].x) + : zero(b)) + : (b = q.length, function(t) { + for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t); + return s.join(""); + }); +}; + +var interpolate = function(a, b) { + var t = typeof b, c; + return b == null || t === "boolean" ? constant$3(b) + : (t === "number" ? interpolateNumber + : t === "string" ? ((c = color(b)) ? (b = c, interpolateRgb) : interpolateString) + : b instanceof color ? interpolateRgb + : b instanceof Date ? date + : Array.isArray(b) ? array$1 + : isNaN(b) ? object + : interpolateNumber)(a, b); +}; + +var interpolateRound = function(a, b) { + return a = +a, b -= a, function(t) { + return Math.round(a + b * t); + }; +}; + +var degrees = 180 / Math.PI; + +var identity$2 = { + translateX: 0, + translateY: 0, + rotate: 0, + skewX: 0, + scaleX: 1, + scaleY: 1 +}; + +var decompose = function(a, b, c, d, e, f) { + var scaleX, scaleY, skewX; + if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX; + if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX; + if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY; + if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX; + return { + translateX: e, + translateY: f, + rotate: Math.atan2(b, a) * degrees, + skewX: Math.atan(skewX) * degrees, + scaleX: scaleX, + scaleY: scaleY + }; +}; + +var cssNode; +var cssRoot; +var cssView; +var svgNode; + +function parseCss(value) { + if (value === "none") return identity$2; + if (!cssNode) cssNode = document.createElement("DIV"), cssRoot = document.documentElement, cssView = document.defaultView; + cssNode.style.transform = value; + value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue("transform"); + cssRoot.removeChild(cssNode); + value = value.slice(7, -1).split(","); + return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]); +} + +function parseSvg(value) { + if (value == null) return identity$2; + if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g"); + svgNode.setAttribute("transform", value); + if (!(value = svgNode.transform.baseVal.consolidate())) return identity$2; + value = value.matrix; + return decompose(value.a, value.b, value.c, value.d, value.e, value.f); +} + +function interpolateTransform(parse, pxComma, pxParen, degParen) { + + function pop(s) { + return s.length ? s.pop() + " " : ""; + } + + function translate(xa, ya, xb, yb, s, q) { + if (xa !== xb || ya !== yb) { + var i = s.push("translate(", null, pxComma, null, pxParen); + q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)}); + } else if (xb || yb) { + s.push("translate(" + xb + pxComma + yb + pxParen); + } + } + + function rotate(a, b, s, q) { + if (a !== b) { + if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path + q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: interpolateNumber(a, b)}); + } else if (b) { + s.push(pop(s) + "rotate(" + b + degParen); + } + } + + function skewX(a, b, s, q) { + if (a !== b) { + q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: interpolateNumber(a, b)}); + } else if (b) { + s.push(pop(s) + "skewX(" + b + degParen); + } + } + + function scale(xa, ya, xb, yb, s, q) { + if (xa !== xb || ya !== yb) { + var i = s.push(pop(s) + "scale(", null, ",", null, ")"); + q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)}); + } else if (xb !== 1 || yb !== 1) { + s.push(pop(s) + "scale(" + xb + "," + yb + ")"); + } + } + + return function(a, b) { + var s = [], // string constants and placeholders + q = []; // number interpolators + a = parse(a), b = parse(b); + translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q); + rotate(a.rotate, b.rotate, s, q); + skewX(a.skewX, b.skewX, s, q); + scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q); + a = b = null; // gc + return function(t) { + var i = -1, n = q.length, o; + while (++i < n) s[(o = q[i]).i] = o.x(t); + return s.join(""); + }; + }; +} + +var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)"); +var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")"); + +var rho = Math.SQRT2; +var rho2 = 2; +var rho4 = 4; +var epsilon2 = 1e-12; + +function cosh(x) { + return ((x = Math.exp(x)) + 1 / x) / 2; +} + +function sinh(x) { + return ((x = Math.exp(x)) - 1 / x) / 2; +} + +function tanh(x) { + return ((x = Math.exp(2 * x)) - 1) / (x + 1); +} + +// p0 = [ux0, uy0, w0] +// p1 = [ux1, uy1, w1] +var interpolateZoom = function(p0, p1) { + var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], + ux1 = p1[0], uy1 = p1[1], w1 = p1[2], + dx = ux1 - ux0, + dy = uy1 - uy0, + d2 = dx * dx + dy * dy, + i, + S; + + // Special case for u0 ≅ u1. + if (d2 < epsilon2) { + S = Math.log(w1 / w0) / rho; + i = function(t) { + return [ + ux0 + t * dx, + uy0 + t * dy, + w0 * Math.exp(rho * t * S) + ]; + }; + } + + // General case. + else { + var d1 = Math.sqrt(d2), + b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1), + b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1), + r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), + r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1); + S = (r1 - r0) / rho; + i = function(t) { + var s = t * S, + coshr0 = cosh(r0), + u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0)); + return [ + ux0 + u * dx, + uy0 + u * dy, + w0 * coshr0 / cosh(rho * s + r0) + ]; + }; + } + + i.duration = S * 1000; + + return i; +}; + +function hsl$1(hue$$1) { + return function(start, end) { + var h = hue$$1((start = hsl(start)).h, (end = hsl(end)).h), + s = nogamma(start.s, end.s), + l = nogamma(start.l, end.l), + opacity = nogamma(start.opacity, end.opacity); + return function(t) { + start.h = h(t); + start.s = s(t); + start.l = l(t); + start.opacity = opacity(t); + return start + ""; + }; + } +} + +var hsl$2 = hsl$1(hue); +var hslLong = hsl$1(nogamma); + +function lab$1(start, end) { + var l = nogamma((start = lab(start)).l, (end = lab(end)).l), + a = nogamma(start.a, end.a), + b = nogamma(start.b, end.b), + opacity = nogamma(start.opacity, end.opacity); + return function(t) { + start.l = l(t); + start.a = a(t); + start.b = b(t); + start.opacity = opacity(t); + return start + ""; + }; +} + +function hcl$1(hue$$1) { + return function(start, end) { + var h = hue$$1((start = hcl(start)).h, (end = hcl(end)).h), + c = nogamma(start.c, end.c), + l = nogamma(start.l, end.l), + opacity = nogamma(start.opacity, end.opacity); + return function(t) { + start.h = h(t); + start.c = c(t); + start.l = l(t); + start.opacity = opacity(t); + return start + ""; + }; + } +} + +var hcl$2 = hcl$1(hue); +var hclLong = hcl$1(nogamma); + +function cubehelix$1(hue$$1) { + return (function cubehelixGamma(y) { + y = +y; + + function cubehelix$$1(start, end) { + var h = hue$$1((start = cubehelix(start)).h, (end = cubehelix(end)).h), + s = nogamma(start.s, end.s), + l = nogamma(start.l, end.l), + opacity = nogamma(start.opacity, end.opacity); + return function(t) { + start.h = h(t); + start.s = s(t); + start.l = l(Math.pow(t, y)); + start.opacity = opacity(t); + return start + ""; + }; + } + + cubehelix$$1.gamma = cubehelixGamma; + + return cubehelix$$1; + })(1); +} + +var cubehelix$2 = cubehelix$1(hue); +var cubehelixLong = cubehelix$1(nogamma); + +var quantize = function(interpolator, n) { + var samples = new Array(n); + for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1)); + return samples; +}; + +var noop$1 = {value: function() {}}; + +function dispatch() { + for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) { + if (!(t = arguments[i] + "") || (t in _)) throw new Error("illegal type: " + t); + _[t] = []; + } + return new Dispatch(_); +} + +function Dispatch(_) { + this._ = _; +} + +function parseTypenames(typenames, types) { + return typenames.trim().split(/^|\s+/).map(function(t) { + var name = "", i = t.indexOf("."); + if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); + if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t); + return {type: t, name: name}; + }); +} + +Dispatch.prototype = dispatch.prototype = { + constructor: Dispatch, + on: function(typename, callback) { + var _ = this._, + T = parseTypenames(typename + "", _), + t, + i = -1, + n = T.length; + + // If no callback was specified, return the callback of the given type and name. + if (arguments.length < 2) { + while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t; + return; + } + + // If a type was specified, set the callback for the given type and name. + // Otherwise, if a null callback was specified, remove callbacks of the given name. + if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback); + while (++i < n) { + if (t = (typename = T[i]).type) _[t] = set$2(_[t], typename.name, callback); + else if (callback == null) for (t in _) _[t] = set$2(_[t], typename.name, null); + } + + return this; + }, + copy: function() { + var copy = {}, _ = this._; + for (var t in _) copy[t] = _[t].slice(); + return new Dispatch(copy); + }, + call: function(type, that) { + if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2]; + if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); + for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); + }, + apply: function(type, that, args) { + if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); + for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); + } +}; + +function get(type, name) { + for (var i = 0, n = type.length, c; i < n; ++i) { + if ((c = type[i]).name === name) { + return c.value; + } + } +} + +function set$2(type, name, callback) { + for (var i = 0, n = type.length; i < n; ++i) { + if (type[i].name === name) { + type[i] = noop$1, type = type.slice(0, i).concat(type.slice(i + 1)); + break; + } + } + if (callback != null) type.push({name: name, value: callback}); + return type; +} + +function objectConverter(columns) { + return new Function("d", "return {" + columns.map(function(name, i) { + return JSON.stringify(name) + ": d[" + i + "]"; + }).join(",") + "}"); +} + +function customConverter(columns, f) { + var object = objectConverter(columns); + return function(row, i) { + return f(object(row), i, columns); + }; +} + +// Compute unique columns in order of discovery. +function inferColumns(rows) { + var columnSet = Object.create(null), + columns = []; + + rows.forEach(function(row) { + for (var column in row) { + if (!(column in columnSet)) { + columns.push(columnSet[column] = column); + } + } + }); + + return columns; +} + +var dsv = function(delimiter) { + var reFormat = new RegExp("[\"" + delimiter + "\n]"), + delimiterCode = delimiter.charCodeAt(0); + + function parse(text, f) { + var convert, columns, rows = parseRows(text, function(row, i) { + if (convert) return convert(row, i - 1); + columns = row, convert = f ? customConverter(row, f) : objectConverter(row); + }); + rows.columns = columns; + return rows; + } + + function parseRows(text, f) { + var EOL = {}, // sentinel value for end-of-line + EOF = {}, // sentinel value for end-of-file + rows = [], // output rows + N = text.length, + I = 0, // current character index + n = 0, // the current line number + t, // the current token + eol; // is the current token followed by EOL? + + function token() { + if (I >= N) return EOF; // special case: end of file + if (eol) return eol = false, EOL; // special case: end of line + + // special case: quotes + var j = I, c; + if (text.charCodeAt(j) === 34) { + var i = j; + while (i++ < N) { + if (text.charCodeAt(i) === 34) { + if (text.charCodeAt(i + 1) !== 34) break; + ++i; + } + } + I = i + 2; + c = text.charCodeAt(i + 1); + if (c === 13) { + eol = true; + if (text.charCodeAt(i + 2) === 10) ++I; + } else if (c === 10) { + eol = true; + } + return text.slice(j + 1, i).replace(/""/g, "\""); + } + + // common case: find next delimiter or newline + while (I < N) { + var k = 1; + c = text.charCodeAt(I++); + if (c === 10) eol = true; // \n + else if (c === 13) { eol = true; if (text.charCodeAt(I) === 10) ++I, ++k; } // \r|\r\n + else if (c !== delimiterCode) continue; + return text.slice(j, I - k); + } + + // special case: last token before EOF + return text.slice(j); + } + + while ((t = token()) !== EOF) { + var a = []; + while (t !== EOL && t !== EOF) { + a.push(t); + t = token(); + } + if (f && (a = f(a, n++)) == null) continue; + rows.push(a); + } + + return rows; + } + + function format(rows, columns) { + if (columns == null) columns = inferColumns(rows); + return [columns.map(formatValue).join(delimiter)].concat(rows.map(function(row) { + return columns.map(function(column) { + return formatValue(row[column]); + }).join(delimiter); + })).join("\n"); + } + + function formatRows(rows) { + return rows.map(formatRow).join("\n"); + } + + function formatRow(row) { + return row.map(formatValue).join(delimiter); + } + + function formatValue(text) { + return text == null ? "" + : reFormat.test(text += "") ? "\"" + text.replace(/\"/g, "\"\"") + "\"" + : text; + } + + return { + parse: parse, + parseRows: parseRows, + format: format, + formatRows: formatRows + }; +}; + +var csv = dsv(","); + +var csvParse = csv.parse; +var csvParseRows = csv.parseRows; +var csvFormat = csv.format; +var csvFormatRows = csv.formatRows; + +var tsv = dsv("\t"); + +var tsvParse = tsv.parse; +var tsvParseRows = tsv.parseRows; +var tsvFormat = tsv.format; +var tsvFormatRows = tsv.formatRows; + +var request = function(url, callback) { + var request, + event = dispatch("beforesend", "progress", "load", "error"), + mimeType, + headers = map$1(), + xhr = new XMLHttpRequest, + user = null, + password = null, + response, + responseType, + timeout = 0; + + // If IE does not support CORS, use XDomainRequest. + if (typeof XDomainRequest !== "undefined" + && !("withCredentials" in xhr) + && /^(http(s)?:)?\/\//.test(url)) xhr = new XDomainRequest; + + "onload" in xhr + ? xhr.onload = xhr.onerror = xhr.ontimeout = respond + : xhr.onreadystatechange = function(o) { xhr.readyState > 3 && respond(o); }; + + function respond(o) { + var status = xhr.status, result; + if (!status && hasResponse(xhr) + || status >= 200 && status < 300 + || status === 304) { + if (response) { + try { + result = response.call(request, xhr); + } catch (e) { + event.call("error", request, e); + return; + } + } else { + result = xhr; + } + event.call("load", request, result); + } else { + event.call("error", request, o); + } + } + + xhr.onprogress = function(e) { + event.call("progress", request, e); + }; + + request = { + header: function(name, value) { + name = (name + "").toLowerCase(); + if (arguments.length < 2) return headers.get(name); + if (value == null) headers.remove(name); + else headers.set(name, value + ""); + return request; + }, + + // If mimeType is non-null and no Accept header is set, a default is used. + mimeType: function(value) { + if (!arguments.length) return mimeType; + mimeType = value == null ? null : value + ""; + return request; + }, + + // Specifies what type the response value should take; + // for instance, arraybuffer, blob, document, or text. + responseType: function(value) { + if (!arguments.length) return responseType; + responseType = value; + return request; + }, + + timeout: function(value) { + if (!arguments.length) return timeout; + timeout = +value; + return request; + }, + + user: function(value) { + return arguments.length < 1 ? user : (user = value == null ? null : value + "", request); + }, + + password: function(value) { + return arguments.length < 1 ? password : (password = value == null ? null : value + "", request); + }, + + // Specify how to convert the response content to a specific type; + // changes the callback value on "load" events. + response: function(value) { + response = value; + return request; + }, + + // Alias for send("GET", …). + get: function(data, callback) { + return request.send("GET", data, callback); + }, + + // Alias for send("POST", …). + post: function(data, callback) { + return request.send("POST", data, callback); + }, + + // If callback is non-null, it will be used for error and load events. + send: function(method, data, callback) { + xhr.open(method, url, true, user, password); + if (mimeType != null && !headers.has("accept")) headers.set("accept", mimeType + ",*/*"); + if (xhr.setRequestHeader) headers.each(function(value, name) { xhr.setRequestHeader(name, value); }); + if (mimeType != null && xhr.overrideMimeType) xhr.overrideMimeType(mimeType); + if (responseType != null) xhr.responseType = responseType; + if (timeout > 0) xhr.timeout = timeout; + if (callback == null && typeof data === "function") callback = data, data = null; + if (callback != null && callback.length === 1) callback = fixCallback(callback); + if (callback != null) request.on("error", callback).on("load", function(xhr) { callback(null, xhr); }); + event.call("beforesend", request, xhr); + xhr.send(data == null ? null : data); + return request; + }, + + abort: function() { + xhr.abort(); + return request; + }, + + on: function() { + var value = event.on.apply(event, arguments); + return value === event ? request : value; + } + }; + + if (callback != null) { + if (typeof callback !== "function") throw new Error("invalid callback: " + callback); + return request.get(callback); + } + + return request; +}; + +function fixCallback(callback) { + return function(error, xhr) { + callback(error == null ? xhr : null); + }; +} + +function hasResponse(xhr) { + var type = xhr.responseType; + return type && type !== "text" + ? xhr.response // null on error + : xhr.responseText; // "" on error +} + +var type = function(defaultMimeType, response) { + return function(url, callback) { + var r = request(url).mimeType(defaultMimeType).response(response); + if (callback != null) { + if (typeof callback !== "function") throw new Error("invalid callback: " + callback); + return r.get(callback); + } + return r; + }; +}; + +var html = type("text/html", function(xhr) { + return document.createRange().createContextualFragment(xhr.responseText); +}); + +var json = type("application/json", function(xhr) { + return JSON.parse(xhr.responseText); +}); + +var text = type("text/plain", function(xhr) { + return xhr.responseText; +}); + +var xml = type("application/xml", function(xhr) { + var xml = xhr.responseXML; + if (!xml) throw new Error("parse error"); + return xml; +}); + +var dsv$1 = function(defaultMimeType, parse) { + return function(url, row, callback) { + if (arguments.length < 3) callback = row, row = null; + var r = request(url).mimeType(defaultMimeType); + r.row = function(_) { return arguments.length ? r.response(responseOf(parse, row = _)) : row; }; + r.row(row); + return callback ? r.get(callback) : r; + }; +}; + +function responseOf(parse, row) { + return function(request$$1) { + return parse(request$$1.responseText, row); + }; +} + +var csv$1 = dsv$1("text/csv", csvParse); + +var tsv$1 = dsv$1("text/tab-separated-values", tsvParse); + +var frame = 0; +var timeout = 0; +var interval = 0; +var pokeDelay = 1000; +var taskHead; +var taskTail; +var clockLast = 0; +var clockNow = 0; +var clockSkew = 0; +var clock = typeof performance === "object" && performance.now ? performance : Date; +var setFrame = typeof requestAnimationFrame === "function" ? requestAnimationFrame : function(f) { setTimeout(f, 17); }; + +function now() { + return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew); +} + +function clearNow() { + clockNow = 0; +} + +function Timer() { + this._call = + this._time = + this._next = null; +} + +Timer.prototype = timer.prototype = { + constructor: Timer, + restart: function(callback, delay, time) { + if (typeof callback !== "function") throw new TypeError("callback is not a function"); + time = (time == null ? now() : +time) + (delay == null ? 0 : +delay); + if (!this._next && taskTail !== this) { + if (taskTail) taskTail._next = this; + else taskHead = this; + taskTail = this; + } + this._call = callback; + this._time = time; + sleep(); + }, + stop: function() { + if (this._call) { + this._call = null; + this._time = Infinity; + sleep(); + } + } +}; + +function timer(callback, delay, time) { + var t = new Timer; + t.restart(callback, delay, time); + return t; +} + +function timerFlush() { + now(); // Get the current time, if not already set. + ++frame; // Pretend we’ve set an alarm, if we haven’t already. + var t = taskHead, e; + while (t) { + if ((e = clockNow - t._time) >= 0) t._call.call(null, e); + t = t._next; + } + --frame; +} + +function wake() { + clockNow = (clockLast = clock.now()) + clockSkew; + frame = timeout = 0; + try { + timerFlush(); + } finally { + frame = 0; + nap(); + clockNow = 0; + } +} + +function poke$1() { + var now = clock.now(), delay = now - clockLast; + if (delay > pokeDelay) clockSkew -= delay, clockLast = now; +} + +function nap() { + var t0, t1 = taskHead, t2, time = Infinity; + while (t1) { + if (t1._call) { + if (time > t1._time) time = t1._time; + t0 = t1, t1 = t1._next; + } else { + t2 = t1._next, t1._next = null; + t1 = t0 ? t0._next = t2 : taskHead = t2; + } + } + taskTail = t0; + sleep(time); +} + +function sleep(time) { + if (frame) return; // Soonest alarm already set, or will be. + if (timeout) timeout = clearTimeout(timeout); + var delay = time - clockNow; + if (delay > 24) { + if (time < Infinity) timeout = setTimeout(wake, delay); + if (interval) interval = clearInterval(interval); + } else { + if (!interval) interval = setInterval(poke$1, pokeDelay); + frame = 1, setFrame(wake); + } +} + +var timeout$1 = function(callback, delay, time) { + var t = new Timer; + delay = delay == null ? 0 : +delay; + t.restart(function(elapsed) { + t.stop(); + callback(elapsed + delay); + }, delay, time); + return t; +}; + +var interval$1 = function(callback, delay, time) { + var t = new Timer, total = delay; + if (delay == null) return t.restart(callback, delay, time), t; + delay = +delay, time = time == null ? now() : +time; + t.restart(function tick(elapsed) { + elapsed += total; + t.restart(tick, total += delay, time); + callback(elapsed); + }, delay, time); + return t; +}; + +var t0$1 = new Date; +var t1$1 = new Date; + +function newInterval(floori, offseti, count, field) { + + function interval(date) { + return floori(date = new Date(+date)), date; + } + + interval.floor = interval; + + interval.ceil = function(date) { + return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date; + }; + + interval.round = function(date) { + var d0 = interval(date), + d1 = interval.ceil(date); + return date - d0 < d1 - date ? d0 : d1; + }; + + interval.offset = function(date, step) { + return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date; + }; + + interval.range = function(start, stop, step) { + var range = []; + start = interval.ceil(start); + step = step == null ? 1 : Math.floor(step); + if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date + do range.push(new Date(+start)); while (offseti(start, step), floori(start), start < stop) + return range; + }; + + interval.filter = function(test) { + return newInterval(function(date) { + if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1); + }, function(date, step) { + if (date >= date) while (--step >= 0) while (offseti(date, 1), !test(date)) {} // eslint-disable-line no-empty + }); + }; + + if (count) { + interval.count = function(start, end) { + t0$1.setTime(+start), t1$1.setTime(+end); + floori(t0$1), floori(t1$1); + return Math.floor(count(t0$1, t1$1)); + }; + + interval.every = function(step) { + step = Math.floor(step); + return !isFinite(step) || !(step > 0) ? null + : !(step > 1) ? interval + : interval.filter(field + ? function(d) { return field(d) % step === 0; } + : function(d) { return interval.count(0, d) % step === 0; }); + }; + } + + return interval; +} + +var millisecond = newInterval(function() { + // noop +}, function(date, step) { + date.setTime(+date + step); +}, function(start, end) { + return end - start; +}); + +// An optimized implementation for this simple case. +millisecond.every = function(k) { + k = Math.floor(k); + if (!isFinite(k) || !(k > 0)) return null; + if (!(k > 1)) return millisecond; + return newInterval(function(date) { + date.setTime(Math.floor(date / k) * k); + }, function(date, step) { + date.setTime(+date + step * k); + }, function(start, end) { + return (end - start) / k; + }); +}; + +var milliseconds = millisecond.range; + +var durationSecond = 1e3; +var durationMinute = 6e4; +var durationHour = 36e5; +var durationDay = 864e5; +var durationWeek = 6048e5; + +var second = newInterval(function(date) { + date.setTime(Math.floor(date / durationSecond) * durationSecond); +}, function(date, step) { + date.setTime(+date + step * durationSecond); +}, function(start, end) { + return (end - start) / durationSecond; +}, function(date) { + return date.getUTCSeconds(); +}); + +var seconds = second.range; + +var minute = newInterval(function(date) { + date.setTime(Math.floor(date / durationMinute) * durationMinute); +}, function(date, step) { + date.setTime(+date + step * durationMinute); +}, function(start, end) { + return (end - start) / durationMinute; +}, function(date) { + return date.getMinutes(); +}); + +var minutes = minute.range; + +var hour = newInterval(function(date) { + var offset = date.getTimezoneOffset() * durationMinute % durationHour; + if (offset < 0) offset += durationHour; + date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset); +}, function(date, step) { + date.setTime(+date + step * durationHour); +}, function(start, end) { + return (end - start) / durationHour; +}, function(date) { + return date.getHours(); +}); + +var hours = hour.range; + +var day = newInterval(function(date) { + date.setHours(0, 0, 0, 0); +}, function(date, step) { + date.setDate(date.getDate() + step); +}, function(start, end) { + return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay; +}, function(date) { + return date.getDate() - 1; +}); + +var days = day.range; + +function weekday(i) { + return newInterval(function(date) { + date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7); + date.setHours(0, 0, 0, 0); + }, function(date, step) { + date.setDate(date.getDate() + step * 7); + }, function(start, end) { + return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek; + }); +} + +var sunday = weekday(0); +var monday = weekday(1); +var tuesday = weekday(2); +var wednesday = weekday(3); +var thursday = weekday(4); +var friday = weekday(5); +var saturday = weekday(6); + +var sundays = sunday.range; +var mondays = monday.range; +var tuesdays = tuesday.range; +var wednesdays = wednesday.range; +var thursdays = thursday.range; +var fridays = friday.range; +var saturdays = saturday.range; + +var month = newInterval(function(date) { + date.setDate(1); + date.setHours(0, 0, 0, 0); +}, function(date, step) { + date.setMonth(date.getMonth() + step); +}, function(start, end) { + return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12; +}, function(date) { + return date.getMonth(); +}); + +var months = month.range; + +var year = newInterval(function(date) { + date.setMonth(0, 1); + date.setHours(0, 0, 0, 0); +}, function(date, step) { + date.setFullYear(date.getFullYear() + step); +}, function(start, end) { + return end.getFullYear() - start.getFullYear(); +}, function(date) { + return date.getFullYear(); +}); + +// An optimized implementation for this simple case. +year.every = function(k) { + return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) { + date.setFullYear(Math.floor(date.getFullYear() / k) * k); + date.setMonth(0, 1); + date.setHours(0, 0, 0, 0); + }, function(date, step) { + date.setFullYear(date.getFullYear() + step * k); + }); +}; + +var years = year.range; + +var utcMinute = newInterval(function(date) { + date.setUTCSeconds(0, 0); +}, function(date, step) { + date.setTime(+date + step * durationMinute); +}, function(start, end) { + return (end - start) / durationMinute; +}, function(date) { + return date.getUTCMinutes(); +}); + +var utcMinutes = utcMinute.range; + +var utcHour = newInterval(function(date) { + date.setUTCMinutes(0, 0, 0); +}, function(date, step) { + date.setTime(+date + step * durationHour); +}, function(start, end) { + return (end - start) / durationHour; +}, function(date) { + return date.getUTCHours(); +}); + +var utcHours = utcHour.range; + +var utcDay = newInterval(function(date) { + date.setUTCHours(0, 0, 0, 0); +}, function(date, step) { + date.setUTCDate(date.getUTCDate() + step); +}, function(start, end) { + return (end - start) / durationDay; +}, function(date) { + return date.getUTCDate() - 1; +}); + +var utcDays = utcDay.range; + +function utcWeekday(i) { + return newInterval(function(date) { + date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7); + date.setUTCHours(0, 0, 0, 0); + }, function(date, step) { + date.setUTCDate(date.getUTCDate() + step * 7); + }, function(start, end) { + return (end - start) / durationWeek; + }); +} + +var utcSunday = utcWeekday(0); +var utcMonday = utcWeekday(1); +var utcTuesday = utcWeekday(2); +var utcWednesday = utcWeekday(3); +var utcThursday = utcWeekday(4); +var utcFriday = utcWeekday(5); +var utcSaturday = utcWeekday(6); + +var utcSundays = utcSunday.range; +var utcMondays = utcMonday.range; +var utcTuesdays = utcTuesday.range; +var utcWednesdays = utcWednesday.range; +var utcThursdays = utcThursday.range; +var utcFridays = utcFriday.range; +var utcSaturdays = utcSaturday.range; + +var utcMonth = newInterval(function(date) { + date.setUTCDate(1); + date.setUTCHours(0, 0, 0, 0); +}, function(date, step) { + date.setUTCMonth(date.getUTCMonth() + step); +}, function(start, end) { + return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12; +}, function(date) { + return date.getUTCMonth(); +}); + +var utcMonths = utcMonth.range; + +var utcYear = newInterval(function(date) { + date.setUTCMonth(0, 1); + date.setUTCHours(0, 0, 0, 0); +}, function(date, step) { + date.setUTCFullYear(date.getUTCFullYear() + step); +}, function(start, end) { + return end.getUTCFullYear() - start.getUTCFullYear(); +}, function(date) { + return date.getUTCFullYear(); +}); + +// An optimized implementation for this simple case. +utcYear.every = function(k) { + return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) { + date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k); + date.setUTCMonth(0, 1); + date.setUTCHours(0, 0, 0, 0); + }, function(date, step) { + date.setUTCFullYear(date.getUTCFullYear() + step * k); + }); +}; + +var utcYears = utcYear.range; + +// Computes the decimal coefficient and exponent of the specified number x with +// significant digits p, where x is positive and p is in [1, 21] or undefined. +// For example, formatDecimal(1.23) returns ["123", 0]. +var formatDecimal = function(x, p) { + if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity + var i, coefficient = x.slice(0, i); + + // The string returned by toExponential either has the form \d\.\d+e[-+]\d+ + // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3). + return [ + coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient, + +x.slice(i + 1) + ]; +}; + +var exponent$1 = function(x) { + return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN; +}; + +var formatGroup = function(grouping, thousands) { + return function(value, width) { + var i = value.length, + t = [], + j = 0, + g = grouping[0], + length = 0; + + while (i > 0 && g > 0) { + if (length + g + 1 > width) g = Math.max(1, width - length); + t.push(value.substring(i -= g, i + g)); + if ((length += g + 1) > width) break; + g = grouping[j = (j + 1) % grouping.length]; + } + + return t.reverse().join(thousands); + }; +}; + +var formatDefault = function(x, p) { + x = x.toPrecision(p); + + out: for (var n = x.length, i = 1, i0 = -1, i1; i < n; ++i) { + switch (x[i]) { + case ".": i0 = i1 = i; break; + case "0": if (i0 === 0) i0 = i; i1 = i; break; + case "e": break out; + default: if (i0 > 0) i0 = 0; break; + } + } + + return i0 > 0 ? x.slice(0, i0) + x.slice(i1 + 1) : x; +}; + +var prefixExponent; + +var formatPrefixAuto = function(x, p) { + var d = formatDecimal(x, p); + if (!d) return x + ""; + var coefficient = d[0], + exponent = d[1], + i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1, + n = coefficient.length; + return i === n ? coefficient + : i > n ? coefficient + new Array(i - n + 1).join("0") + : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i) + : "0." + new Array(1 - i).join("0") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y! +}; + +var formatRounded = function(x, p) { + var d = formatDecimal(x, p); + if (!d) return x + ""; + var coefficient = d[0], + exponent = d[1]; + return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient + : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1) + : coefficient + new Array(exponent - coefficient.length + 2).join("0"); +}; + +var formatTypes = { + "": formatDefault, + "%": function(x, p) { return (x * 100).toFixed(p); }, + "b": function(x) { return Math.round(x).toString(2); }, + "c": function(x) { return x + ""; }, + "d": function(x) { return Math.round(x).toString(10); }, + "e": function(x, p) { return x.toExponential(p); }, + "f": function(x, p) { return x.toFixed(p); }, + "g": function(x, p) { return x.toPrecision(p); }, + "o": function(x) { return Math.round(x).toString(8); }, + "p": function(x, p) { return formatRounded(x * 100, p); }, + "r": formatRounded, + "s": formatPrefixAuto, + "X": function(x) { return Math.round(x).toString(16).toUpperCase(); }, + "x": function(x) { return Math.round(x).toString(16); } +}; + +// [[fill]align][sign][symbol][0][width][,][.precision][type] +var re = /^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i; + +var formatSpecifier = function(specifier) { + return new FormatSpecifier(specifier); +}; + +function FormatSpecifier(specifier) { + if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier); + + var match, + fill = match[1] || " ", + align = match[2] || ">", + sign = match[3] || "-", + symbol = match[4] || "", + zero = !!match[5], + width = match[6] && +match[6], + comma = !!match[7], + precision = match[8] && +match[8].slice(1), + type = match[9] || ""; + + // The "n" type is an alias for ",g". + if (type === "n") comma = true, type = "g"; + + // Map invalid types to the default format. + else if (!formatTypes[type]) type = ""; + + // If zero fill is specified, padding goes after sign and before digits. + if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "="; + + this.fill = fill; + this.align = align; + this.sign = sign; + this.symbol = symbol; + this.zero = zero; + this.width = width; + this.comma = comma; + this.precision = precision; + this.type = type; +} + +FormatSpecifier.prototype.toString = function() { + return this.fill + + this.align + + this.sign + + this.symbol + + (this.zero ? "0" : "") + + (this.width == null ? "" : Math.max(1, this.width | 0)) + + (this.comma ? "," : "") + + (this.precision == null ? "" : "." + Math.max(0, this.precision | 0)) + + this.type; +}; + +var prefixes = ["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"]; + +function identity$3(x) { + return x; +} + +var formatLocale = function(locale) { + var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity$3, + currency = locale.currency, + decimal = locale.decimal; + + function newFormat(specifier) { + specifier = formatSpecifier(specifier); + + var fill = specifier.fill, + align = specifier.align, + sign = specifier.sign, + symbol = specifier.symbol, + zero = specifier.zero, + width = specifier.width, + comma = specifier.comma, + precision = specifier.precision, + type = specifier.type; + + // Compute the prefix and suffix. + // For SI-prefix, the suffix is lazily computed. + var prefix = symbol === "$" ? currency[0] : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "", + suffix = symbol === "$" ? currency[1] : /[%p]/.test(type) ? "%" : ""; + + // What format function should we use? + // Is this an integer type? + // Can this type generate exponential notation? + var formatType = formatTypes[type], + maybeSuffix = !type || /[defgprs%]/.test(type); + + // Set the default precision if not specified, + // or clamp the specified precision to the supported range. + // For significant precision, it must be in [1, 21]. + // For fixed precision, it must be in [0, 20]. + precision = precision == null ? (type ? 6 : 12) + : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) + : Math.max(0, Math.min(20, precision)); + + function format(value) { + var valuePrefix = prefix, + valueSuffix = suffix, + i, n, c; + + if (type === "c") { + valueSuffix = formatType(value) + valueSuffix; + value = ""; + } else { + value = +value; + + // Convert negative to positive, and compute the prefix. + // Note that -0 is not less than 0, but 1 / -0 is! + var valueNegative = (value < 0 || 1 / value < 0) && (value *= -1, true); + + // Perform the initial formatting. + value = formatType(value, precision); + + // If the original value was negative, it may be rounded to zero during + // formatting; treat this as (positive) zero. + if (valueNegative) { + i = -1, n = value.length; + valueNegative = false; + while (++i < n) { + if (c = value.charCodeAt(i), (48 < c && c < 58) + || (type === "x" && 96 < c && c < 103) + || (type === "X" && 64 < c && c < 71)) { + valueNegative = true; + break; + } + } + } + + // Compute the prefix and suffix. + valuePrefix = (valueNegative ? (sign === "(" ? sign : "-") : sign === "-" || sign === "(" ? "" : sign) + valuePrefix; + valueSuffix = valueSuffix + (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + (valueNegative && sign === "(" ? ")" : ""); + + // Break the formatted value into the integer “value†part that can be + // grouped, and fractional or exponential “suffix†part that is not. + if (maybeSuffix) { + i = -1, n = value.length; + while (++i < n) { + if (c = value.charCodeAt(i), 48 > c || c > 57) { + valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix; + value = value.slice(0, i); + break; + } + } + } + } + + // If the fill character is not "0", grouping is applied before padding. + if (comma && !zero) value = group(value, Infinity); + + // Compute the padding. + var length = valuePrefix.length + value.length + valueSuffix.length, + padding = length < width ? new Array(width - length + 1).join(fill) : ""; + + // If the fill character is "0", grouping is applied after padding. + if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = ""; + + // Reconstruct the final output based on the desired alignment. + switch (align) { + case "<": return valuePrefix + value + valueSuffix + padding; + case "=": return valuePrefix + padding + value + valueSuffix; + case "^": return padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); + } + return padding + valuePrefix + value + valueSuffix; + } + + format.toString = function() { + return specifier + ""; + }; + + return format; + } + + function formatPrefix(specifier, value) { + var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)), + e = Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3, + k = Math.pow(10, -e), + prefix = prefixes[8 + e / 3]; + return function(value) { + return f(k * value) + prefix; + }; + } + + return { + format: newFormat, + formatPrefix: formatPrefix + }; +}; + +var locale$1; + + + +defaultLocale({ + decimal: ".", + thousands: ",", + grouping: [3], + currency: ["$", ""] +}); + +function defaultLocale(definition) { + locale$1 = formatLocale(definition); + exports.format = locale$1.format; + exports.formatPrefix = locale$1.formatPrefix; + return locale$1; +} + +var precisionFixed = function(step) { + return Math.max(0, -exponent$1(Math.abs(step))); +}; + +var precisionPrefix = function(step, value) { + return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3 - exponent$1(Math.abs(step))); +}; + +var precisionRound = function(step, max) { + step = Math.abs(step), max = Math.abs(max) - step; + return Math.max(0, exponent$1(max) - exponent$1(step)) + 1; +}; + +function localDate(d) { + if (0 <= d.y && d.y < 100) { + var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L); + date.setFullYear(d.y); + return date; + } + return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L); +} + +function utcDate(d) { + if (0 <= d.y && d.y < 100) { + var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L)); + date.setUTCFullYear(d.y); + return date; + } + return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L)); +} + +function newYear(y) { + return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0}; +} + +function formatLocale$1(locale) { + var locale_dateTime = locale.dateTime, + locale_date = locale.date, + locale_time = locale.time, + locale_periods = locale.periods, + locale_weekdays = locale.days, + locale_shortWeekdays = locale.shortDays, + locale_months = locale.months, + locale_shortMonths = locale.shortMonths; + + var periodRe = formatRe(locale_periods), + periodLookup = formatLookup(locale_periods), + weekdayRe = formatRe(locale_weekdays), + weekdayLookup = formatLookup(locale_weekdays), + shortWeekdayRe = formatRe(locale_shortWeekdays), + shortWeekdayLookup = formatLookup(locale_shortWeekdays), + monthRe = formatRe(locale_months), + monthLookup = formatLookup(locale_months), + shortMonthRe = formatRe(locale_shortMonths), + shortMonthLookup = formatLookup(locale_shortMonths); + + var formats = { + "a": formatShortWeekday, + "A": formatWeekday, + "b": formatShortMonth, + "B": formatMonth, + "c": null, + "d": formatDayOfMonth, + "e": formatDayOfMonth, + "H": formatHour24, + "I": formatHour12, + "j": formatDayOfYear, + "L": formatMilliseconds, + "m": formatMonthNumber, + "M": formatMinutes, + "p": formatPeriod, + "S": formatSeconds, + "U": formatWeekNumberSunday, + "w": formatWeekdayNumber, + "W": formatWeekNumberMonday, + "x": null, + "X": null, + "y": formatYear, + "Y": formatFullYear, + "Z": formatZone, + "%": formatLiteralPercent + }; + + var utcFormats = { + "a": formatUTCShortWeekday, + "A": formatUTCWeekday, + "b": formatUTCShortMonth, + "B": formatUTCMonth, + "c": null, + "d": formatUTCDayOfMonth, + "e": formatUTCDayOfMonth, + "H": formatUTCHour24, + "I": formatUTCHour12, + "j": formatUTCDayOfYear, + "L": formatUTCMilliseconds, + "m": formatUTCMonthNumber, + "M": formatUTCMinutes, + "p": formatUTCPeriod, + "S": formatUTCSeconds, + "U": formatUTCWeekNumberSunday, + "w": formatUTCWeekdayNumber, + "W": formatUTCWeekNumberMonday, + "x": null, + "X": null, + "y": formatUTCYear, + "Y": formatUTCFullYear, + "Z": formatUTCZone, + "%": formatLiteralPercent + }; + + var parses = { + "a": parseShortWeekday, + "A": parseWeekday, + "b": parseShortMonth, + "B": parseMonth, + "c": parseLocaleDateTime, + "d": parseDayOfMonth, + "e": parseDayOfMonth, + "H": parseHour24, + "I": parseHour24, + "j": parseDayOfYear, + "L": parseMilliseconds, + "m": parseMonthNumber, + "M": parseMinutes, + "p": parsePeriod, + "S": parseSeconds, + "U": parseWeekNumberSunday, + "w": parseWeekdayNumber, + "W": parseWeekNumberMonday, + "x": parseLocaleDate, + "X": parseLocaleTime, + "y": parseYear, + "Y": parseFullYear, + "Z": parseZone, + "%": parseLiteralPercent + }; + + // These recursive directive definitions must be deferred. + formats.x = newFormat(locale_date, formats); + formats.X = newFormat(locale_time, formats); + formats.c = newFormat(locale_dateTime, formats); + utcFormats.x = newFormat(locale_date, utcFormats); + utcFormats.X = newFormat(locale_time, utcFormats); + utcFormats.c = newFormat(locale_dateTime, utcFormats); + + function newFormat(specifier, formats) { + return function(date) { + var string = [], + i = -1, + j = 0, + n = specifier.length, + c, + pad, + format; + + if (!(date instanceof Date)) date = new Date(+date); + + while (++i < n) { + if (specifier.charCodeAt(i) === 37) { + string.push(specifier.slice(j, i)); + if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i); + else pad = c === "e" ? " " : "0"; + if (format = formats[c]) c = format(date, pad); + string.push(c); + j = i + 1; + } + } + + string.push(specifier.slice(j, i)); + return string.join(""); + }; + } + + function newParse(specifier, newDate) { + return function(string) { + var d = newYear(1900), + i = parseSpecifier(d, specifier, string += "", 0); + if (i != string.length) return null; + + // The am-pm flag is 0 for AM, and 1 for PM. + if ("p" in d) d.H = d.H % 12 + d.p * 12; + + // Convert day-of-week and week-of-year to day-of-year. + if ("W" in d || "U" in d) { + if (!("w" in d)) d.w = "W" in d ? 1 : 0; + var day$$1 = "Z" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay(); + d.m = 0; + d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day$$1 + 5) % 7 : d.w + d.U * 7 - (day$$1 + 6) % 7; + } + + // If a time zone is specified, all fields are interpreted as UTC and then + // offset according to the specified time zone. + if ("Z" in d) { + d.H += d.Z / 100 | 0; + d.M += d.Z % 100; + return utcDate(d); + } + + // Otherwise, all fields are in local time. + return newDate(d); + }; + } + + function parseSpecifier(d, specifier, string, j) { + var i = 0, + n = specifier.length, + m = string.length, + c, + parse; + + while (i < n) { + if (j >= m) return -1; + c = specifier.charCodeAt(i++); + if (c === 37) { + c = specifier.charAt(i++); + parse = parses[c in pads ? specifier.charAt(i++) : c]; + if (!parse || ((j = parse(d, string, j)) < 0)) return -1; + } else if (c != string.charCodeAt(j++)) { + return -1; + } + } + + return j; + } + + function parsePeriod(d, string, i) { + var n = periodRe.exec(string.slice(i)); + return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1; + } + + function parseShortWeekday(d, string, i) { + var n = shortWeekdayRe.exec(string.slice(i)); + return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1; + } + + function parseWeekday(d, string, i) { + var n = weekdayRe.exec(string.slice(i)); + return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1; + } + + function parseShortMonth(d, string, i) { + var n = shortMonthRe.exec(string.slice(i)); + return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1; + } + + function parseMonth(d, string, i) { + var n = monthRe.exec(string.slice(i)); + return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1; + } + + function parseLocaleDateTime(d, string, i) { + return parseSpecifier(d, locale_dateTime, string, i); + } + + function parseLocaleDate(d, string, i) { + return parseSpecifier(d, locale_date, string, i); + } + + function parseLocaleTime(d, string, i) { + return parseSpecifier(d, locale_time, string, i); + } + + function formatShortWeekday(d) { + return locale_shortWeekdays[d.getDay()]; + } + + function formatWeekday(d) { + return locale_weekdays[d.getDay()]; + } + + function formatShortMonth(d) { + return locale_shortMonths[d.getMonth()]; + } + + function formatMonth(d) { + return locale_months[d.getMonth()]; + } + + function formatPeriod(d) { + return locale_periods[+(d.getHours() >= 12)]; + } + + function formatUTCShortWeekday(d) { + return locale_shortWeekdays[d.getUTCDay()]; + } + + function formatUTCWeekday(d) { + return locale_weekdays[d.getUTCDay()]; + } + + function formatUTCShortMonth(d) { + return locale_shortMonths[d.getUTCMonth()]; + } + + function formatUTCMonth(d) { + return locale_months[d.getUTCMonth()]; + } + + function formatUTCPeriod(d) { + return locale_periods[+(d.getUTCHours() >= 12)]; + } + + return { + format: function(specifier) { + var f = newFormat(specifier += "", formats); + f.toString = function() { return specifier; }; + return f; + }, + parse: function(specifier) { + var p = newParse(specifier += "", localDate); + p.toString = function() { return specifier; }; + return p; + }, + utcFormat: function(specifier) { + var f = newFormat(specifier += "", utcFormats); + f.toString = function() { return specifier; }; + return f; + }, + utcParse: function(specifier) { + var p = newParse(specifier, utcDate); + p.toString = function() { return specifier; }; + return p; + } + }; +} + +var pads = {"-": "", "_": " ", "0": "0"}; +var numberRe = /^\s*\d+/; +var percentRe = /^%/; +var requoteRe = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g; + +function pad(value, fill, width) { + var sign = value < 0 ? "-" : "", + string = (sign ? -value : value) + "", + length = string.length; + return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string); +} + +function requote(s) { + return s.replace(requoteRe, "\\$&"); +} + +function formatRe(names) { + return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i"); +} + +function formatLookup(names) { + var map = {}, i = -1, n = names.length; + while (++i < n) map[names[i].toLowerCase()] = i; + return map; +} + +function parseWeekdayNumber(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 1)); + return n ? (d.w = +n[0], i + n[0].length) : -1; +} + +function parseWeekNumberSunday(d, string, i) { + var n = numberRe.exec(string.slice(i)); + return n ? (d.U = +n[0], i + n[0].length) : -1; +} + +function parseWeekNumberMonday(d, string, i) { + var n = numberRe.exec(string.slice(i)); + return n ? (d.W = +n[0], i + n[0].length) : -1; +} + +function parseFullYear(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 4)); + return n ? (d.y = +n[0], i + n[0].length) : -1; +} + +function parseYear(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1; +} + +function parseZone(d, string, i) { + var n = /^(Z)|([+-]\d\d)(?:\:?(\d\d))?/.exec(string.slice(i, i + 6)); + return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1; +} + +function parseMonthNumber(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.m = n[0] - 1, i + n[0].length) : -1; +} + +function parseDayOfMonth(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.d = +n[0], i + n[0].length) : -1; +} + +function parseDayOfYear(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 3)); + return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1; +} + +function parseHour24(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.H = +n[0], i + n[0].length) : -1; +} + +function parseMinutes(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.M = +n[0], i + n[0].length) : -1; +} + +function parseSeconds(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.S = +n[0], i + n[0].length) : -1; +} + +function parseMilliseconds(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 3)); + return n ? (d.L = +n[0], i + n[0].length) : -1; +} + +function parseLiteralPercent(d, string, i) { + var n = percentRe.exec(string.slice(i, i + 1)); + return n ? i + n[0].length : -1; +} + +function formatDayOfMonth(d, p) { + return pad(d.getDate(), p, 2); +} + +function formatHour24(d, p) { + return pad(d.getHours(), p, 2); +} + +function formatHour12(d, p) { + return pad(d.getHours() % 12 || 12, p, 2); +} + +function formatDayOfYear(d, p) { + return pad(1 + day.count(year(d), d), p, 3); +} + +function formatMilliseconds(d, p) { + return pad(d.getMilliseconds(), p, 3); +} + +function formatMonthNumber(d, p) { + return pad(d.getMonth() + 1, p, 2); +} + +function formatMinutes(d, p) { + return pad(d.getMinutes(), p, 2); +} + +function formatSeconds(d, p) { + return pad(d.getSeconds(), p, 2); +} + +function formatWeekNumberSunday(d, p) { + return pad(sunday.count(year(d), d), p, 2); +} + +function formatWeekdayNumber(d) { + return d.getDay(); +} + +function formatWeekNumberMonday(d, p) { + return pad(monday.count(year(d), d), p, 2); +} + +function formatYear(d, p) { + return pad(d.getFullYear() % 100, p, 2); +} + +function formatFullYear(d, p) { + return pad(d.getFullYear() % 10000, p, 4); +} + +function formatZone(d) { + var z = d.getTimezoneOffset(); + return (z > 0 ? "-" : (z *= -1, "+")) + + pad(z / 60 | 0, "0", 2) + + pad(z % 60, "0", 2); +} + +function formatUTCDayOfMonth(d, p) { + return pad(d.getUTCDate(), p, 2); +} + +function formatUTCHour24(d, p) { + return pad(d.getUTCHours(), p, 2); +} + +function formatUTCHour12(d, p) { + return pad(d.getUTCHours() % 12 || 12, p, 2); +} + +function formatUTCDayOfYear(d, p) { + return pad(1 + utcDay.count(utcYear(d), d), p, 3); +} + +function formatUTCMilliseconds(d, p) { + return pad(d.getUTCMilliseconds(), p, 3); +} + +function formatUTCMonthNumber(d, p) { + return pad(d.getUTCMonth() + 1, p, 2); +} + +function formatUTCMinutes(d, p) { + return pad(d.getUTCMinutes(), p, 2); +} + +function formatUTCSeconds(d, p) { + return pad(d.getUTCSeconds(), p, 2); +} + +function formatUTCWeekNumberSunday(d, p) { + return pad(utcSunday.count(utcYear(d), d), p, 2); +} + +function formatUTCWeekdayNumber(d) { + return d.getUTCDay(); +} + +function formatUTCWeekNumberMonday(d, p) { + return pad(utcMonday.count(utcYear(d), d), p, 2); +} + +function formatUTCYear(d, p) { + return pad(d.getUTCFullYear() % 100, p, 2); +} + +function formatUTCFullYear(d, p) { + return pad(d.getUTCFullYear() % 10000, p, 4); +} + +function formatUTCZone() { + return "+0000"; +} + +function formatLiteralPercent() { + return "%"; +} + +var locale$2; + + + + + +defaultLocale$1({ + dateTime: "%x, %X", + date: "%-m/%-d/%Y", + time: "%-I:%M:%S %p", + periods: ["AM", "PM"], + days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], + shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], + months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], + shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] +}); + +function defaultLocale$1(definition) { + locale$2 = formatLocale$1(definition); + exports.timeFormat = locale$2.format; + exports.timeParse = locale$2.parse; + exports.utcFormat = locale$2.utcFormat; + exports.utcParse = locale$2.utcParse; + return locale$2; +} + +var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ"; + +function formatIsoNative(date) { + return date.toISOString(); +} + +var formatIso = Date.prototype.toISOString + ? formatIsoNative + : exports.utcFormat(isoSpecifier); + +function parseIsoNative(string) { + var date = new Date(string); + return isNaN(date) ? null : date; +} + +var parseIso = +new Date("2000-01-01T00:00:00.000Z") + ? parseIsoNative + : exports.utcParse(isoSpecifier); + +var array$2 = Array.prototype; + +var map$3 = array$2.map; +var slice$3 = array$2.slice; + +var implicit = {name: "implicit"}; + +function ordinal(range) { + var index = map$1(), + domain = [], + unknown = implicit; + + range = range == null ? [] : slice$3.call(range); + + function scale(d) { + var key = d + "", i = index.get(key); + if (!i) { + if (unknown !== implicit) return unknown; + index.set(key, i = domain.push(d)); + } + return range[(i - 1) % range.length]; + } + + scale.domain = function(_) { + if (!arguments.length) return domain.slice(); + domain = [], index = map$1(); + var i = -1, n = _.length, d, key; + while (++i < n) if (!index.has(key = (d = _[i]) + "")) index.set(key, domain.push(d)); + return scale; + }; + + scale.range = function(_) { + return arguments.length ? (range = slice$3.call(_), scale) : range.slice(); + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + scale.copy = function() { + return ordinal() + .domain(domain) + .range(range) + .unknown(unknown); + }; + + return scale; +} + +function band() { + var scale = ordinal().unknown(undefined), + domain = scale.domain, + ordinalRange = scale.range, + range$$1 = [0, 1], + step, + bandwidth, + round = false, + paddingInner = 0, + paddingOuter = 0, + align = 0.5; + + delete scale.unknown; + + function rescale() { + var n = domain().length, + reverse = range$$1[1] < range$$1[0], + start = range$$1[reverse - 0], + stop = range$$1[1 - reverse]; + step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2); + if (round) step = Math.floor(step); + start += (stop - start - step * (n - paddingInner)) * align; + bandwidth = step * (1 - paddingInner); + if (round) start = Math.round(start), bandwidth = Math.round(bandwidth); + var values = range(n).map(function(i) { return start + step * i; }); + return ordinalRange(reverse ? values.reverse() : values); + } + + scale.domain = function(_) { + return arguments.length ? (domain(_), rescale()) : domain(); + }; + + scale.range = function(_) { + return arguments.length ? (range$$1 = [+_[0], +_[1]], rescale()) : range$$1.slice(); + }; + + scale.rangeRound = function(_) { + return range$$1 = [+_[0], +_[1]], round = true, rescale(); + }; + + scale.bandwidth = function() { + return bandwidth; + }; + + scale.step = function() { + return step; + }; + + scale.round = function(_) { + return arguments.length ? (round = !!_, rescale()) : round; + }; + + scale.padding = function(_) { + return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner; + }; + + scale.paddingInner = function(_) { + return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner; + }; + + scale.paddingOuter = function(_) { + return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter; + }; + + scale.align = function(_) { + return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align; + }; + + scale.copy = function() { + return band() + .domain(domain()) + .range(range$$1) + .round(round) + .paddingInner(paddingInner) + .paddingOuter(paddingOuter) + .align(align); + }; + + return rescale(); +} + +function pointish(scale) { + var copy = scale.copy; + + scale.padding = scale.paddingOuter; + delete scale.paddingInner; + delete scale.paddingOuter; + + scale.copy = function() { + return pointish(copy()); + }; + + return scale; +} + +function point$4() { + return pointish(band().paddingInner(1)); +} + +var constant$4 = function(x) { + return function() { + return x; + }; +}; + +var number$1 = function(x) { + return +x; +}; + +var unit = [0, 1]; + +function deinterpolateLinear(a, b) { + return (b -= (a = +a)) + ? function(x) { return (x - a) / b; } + : constant$4(b); +} + +function deinterpolateClamp(deinterpolate) { + return function(a, b) { + var d = deinterpolate(a = +a, b = +b); + return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); }; + }; +} + +function reinterpolateClamp(reinterpolate) { + return function(a, b) { + var r = reinterpolate(a = +a, b = +b); + return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); }; + }; +} + +function bimap(domain, range$$1, deinterpolate, reinterpolate) { + var d0 = domain[0], d1 = domain[1], r0 = range$$1[0], r1 = range$$1[1]; + if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0); + else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1); + return function(x) { return r0(d0(x)); }; +} + +function polymap(domain, range$$1, deinterpolate, reinterpolate) { + var j = Math.min(domain.length, range$$1.length) - 1, + d = new Array(j), + r = new Array(j), + i = -1; + + // Reverse descending domains. + if (domain[j] < domain[0]) { + domain = domain.slice().reverse(); + range$$1 = range$$1.slice().reverse(); + } + + while (++i < j) { + d[i] = deinterpolate(domain[i], domain[i + 1]); + r[i] = reinterpolate(range$$1[i], range$$1[i + 1]); + } + + return function(x) { + var i = bisectRight(domain, x, 1, j) - 1; + return r[i](d[i](x)); + }; +} + +function copy(source, target) { + return target + .domain(source.domain()) + .range(source.range()) + .interpolate(source.interpolate()) + .clamp(source.clamp()); +} + +// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1]. +// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b]. +function continuous(deinterpolate, reinterpolate) { + var domain = unit, + range$$1 = unit, + interpolate$$1 = interpolate, + clamp = false, + piecewise, + output, + input; + + function rescale() { + piecewise = Math.min(domain.length, range$$1.length) > 2 ? polymap : bimap; + output = input = null; + return scale; + } + + function scale(x) { + return (output || (output = piecewise(domain, range$$1, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate$$1)))(+x); + } + + scale.invert = function(y) { + return (input || (input = piecewise(range$$1, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y); + }; + + scale.domain = function(_) { + return arguments.length ? (domain = map$3.call(_, number$1), rescale()) : domain.slice(); + }; + + scale.range = function(_) { + return arguments.length ? (range$$1 = slice$3.call(_), rescale()) : range$$1.slice(); + }; + + scale.rangeRound = function(_) { + return range$$1 = slice$3.call(_), interpolate$$1 = interpolateRound, rescale(); + }; + + scale.clamp = function(_) { + return arguments.length ? (clamp = !!_, rescale()) : clamp; + }; + + scale.interpolate = function(_) { + return arguments.length ? (interpolate$$1 = _, rescale()) : interpolate$$1; + }; + + return rescale(); +} + +var tickFormat = function(domain, count, specifier) { + var start = domain[0], + stop = domain[domain.length - 1], + step = tickStep(start, stop, count == null ? 10 : count), + precision; + specifier = formatSpecifier(specifier == null ? ",f" : specifier); + switch (specifier.type) { + case "s": { + var value = Math.max(Math.abs(start), Math.abs(stop)); + if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision; + return exports.formatPrefix(specifier, value); + } + case "": + case "e": + case "g": + case "p": + case "r": { + if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e"); + break; + } + case "f": + case "%": { + if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2; + break; + } + } + return exports.format(specifier); +}; + +function linearish(scale) { + var domain = scale.domain; + + scale.ticks = function(count) { + var d = domain(); + return ticks(d[0], d[d.length - 1], count == null ? 10 : count); + }; + + scale.tickFormat = function(count, specifier) { + return tickFormat(domain(), count, specifier); + }; + + scale.nice = function(count) { + var d = domain(), + i = d.length - 1, + n = count == null ? 10 : count, + start = d[0], + stop = d[i], + step = tickStep(start, stop, n); + + if (step) { + step = tickStep(Math.floor(start / step) * step, Math.ceil(stop / step) * step, n); + d[0] = Math.floor(start / step) * step; + d[i] = Math.ceil(stop / step) * step; + domain(d); + } + + return scale; + }; + + return scale; +} + +function linear$2() { + var scale = continuous(deinterpolateLinear, interpolateNumber); + + scale.copy = function() { + return copy(scale, linear$2()); + }; + + return linearish(scale); +} + +function identity$4() { + var domain = [0, 1]; + + function scale(x) { + return +x; + } + + scale.invert = scale; + + scale.domain = scale.range = function(_) { + return arguments.length ? (domain = map$3.call(_, number$1), scale) : domain.slice(); + }; + + scale.copy = function() { + return identity$4().domain(domain); + }; + + return linearish(scale); +} + +var nice = function(domain, interval) { + domain = domain.slice(); + + var i0 = 0, + i1 = domain.length - 1, + x0 = domain[i0], + x1 = domain[i1], + t; + + if (x1 < x0) { + t = i0, i0 = i1, i1 = t; + t = x0, x0 = x1, x1 = t; + } + + domain[i0] = interval.floor(x0); + domain[i1] = interval.ceil(x1); + return domain; +}; + +function deinterpolate(a, b) { + return (b = Math.log(b / a)) + ? function(x) { return Math.log(x / a) / b; } + : constant$4(b); +} + +function reinterpolate(a, b) { + return a < 0 + ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); } + : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); }; +} + +function pow10(x) { + return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x; +} + +function powp(base) { + return base === 10 ? pow10 + : base === Math.E ? Math.exp + : function(x) { return Math.pow(base, x); }; +} + +function logp(base) { + return base === Math.E ? Math.log + : base === 10 && Math.log10 + || base === 2 && Math.log2 + || (base = Math.log(base), function(x) { return Math.log(x) / base; }); +} + +function reflect(f) { + return function(x) { + return -f(-x); + }; +} + +function log() { + var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]), + domain = scale.domain, + base = 10, + logs = logp(10), + pows = powp(10); + + function rescale() { + logs = logp(base), pows = powp(base); + if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows); + return scale; + } + + scale.base = function(_) { + return arguments.length ? (base = +_, rescale()) : base; + }; + + scale.domain = function(_) { + return arguments.length ? (domain(_), rescale()) : domain(); + }; + + scale.ticks = function(count) { + var d = domain(), + u = d[0], + v = d[d.length - 1], + r; + + if (r = v < u) i = u, u = v, v = i; + + var i = logs(u), + j = logs(v), + p, + k, + t, + n = count == null ? 10 : +count, + z = []; + + if (!(base % 1) && j - i < n) { + i = Math.round(i) - 1, j = Math.round(j) + 1; + if (u > 0) for (; i < j; ++i) { + for (k = 1, p = pows(i); k < base; ++k) { + t = p * k; + if (t < u) continue; + if (t > v) break; + z.push(t); + } + } else for (; i < j; ++i) { + for (k = base - 1, p = pows(i); k >= 1; --k) { + t = p * k; + if (t < u) continue; + if (t > v) break; + z.push(t); + } + } + } else { + z = ticks(i, j, Math.min(j - i, n)).map(pows); + } + + return r ? z.reverse() : z; + }; + + scale.tickFormat = function(count, specifier) { + if (specifier == null) specifier = base === 10 ? ".0e" : ","; + if (typeof specifier !== "function") specifier = exports.format(specifier); + if (count === Infinity) return specifier; + if (count == null) count = 10; + var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate? + return function(d) { + var i = d / pows(Math.round(logs(d))); + if (i * base < base - 0.5) i *= base; + return i <= k ? specifier(d) : ""; + }; + }; + + scale.nice = function() { + return domain(nice(domain(), { + floor: function(x) { return pows(Math.floor(logs(x))); }, + ceil: function(x) { return pows(Math.ceil(logs(x))); } + })); + }; + + scale.copy = function() { + return copy(scale, log().base(base)); + }; + + return scale; +} + +function raise(x, exponent) { + return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent); +} + +function pow() { + var exponent = 1, + scale = continuous(deinterpolate, reinterpolate), + domain = scale.domain; + + function deinterpolate(a, b) { + return (b = raise(b, exponent) - (a = raise(a, exponent))) + ? function(x) { return (raise(x, exponent) - a) / b; } + : constant$4(b); + } + + function reinterpolate(a, b) { + b = raise(b, exponent) - (a = raise(a, exponent)); + return function(t) { return raise(a + b * t, 1 / exponent); }; + } + + scale.exponent = function(_) { + return arguments.length ? (exponent = +_, domain(domain())) : exponent; + }; + + scale.copy = function() { + return copy(scale, pow().exponent(exponent)); + }; + + return linearish(scale); +} + +function sqrt() { + return pow().exponent(0.5); +} + +function quantile$$1() { + var domain = [], + range$$1 = [], + thresholds = []; + + function rescale() { + var i = 0, n = Math.max(1, range$$1.length); + thresholds = new Array(n - 1); + while (++i < n) thresholds[i - 1] = threshold(domain, i / n); + return scale; + } + + function scale(x) { + if (!isNaN(x = +x)) return range$$1[bisectRight(thresholds, x)]; + } + + scale.invertExtent = function(y) { + var i = range$$1.indexOf(y); + return i < 0 ? [NaN, NaN] : [ + i > 0 ? thresholds[i - 1] : domain[0], + i < thresholds.length ? thresholds[i] : domain[domain.length - 1] + ]; + }; + + scale.domain = function(_) { + if (!arguments.length) return domain.slice(); + domain = []; + for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d); + domain.sort(ascending); + return rescale(); + }; + + scale.range = function(_) { + return arguments.length ? (range$$1 = slice$3.call(_), rescale()) : range$$1.slice(); + }; + + scale.quantiles = function() { + return thresholds.slice(); + }; + + scale.copy = function() { + return quantile$$1() + .domain(domain) + .range(range$$1); + }; + + return scale; +} + +function quantize$1() { + var x0 = 0, + x1 = 1, + n = 1, + domain = [0.5], + range$$1 = [0, 1]; + + function scale(x) { + if (x <= x) return range$$1[bisectRight(domain, x, 0, n)]; + } + + function rescale() { + var i = -1; + domain = new Array(n); + while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1); + return scale; + } + + scale.domain = function(_) { + return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1]; + }; + + scale.range = function(_) { + return arguments.length ? (n = (range$$1 = slice$3.call(_)).length - 1, rescale()) : range$$1.slice(); + }; + + scale.invertExtent = function(y) { + var i = range$$1.indexOf(y); + return i < 0 ? [NaN, NaN] + : i < 1 ? [x0, domain[0]] + : i >= n ? [domain[n - 1], x1] + : [domain[i - 1], domain[i]]; + }; + + scale.copy = function() { + return quantize$1() + .domain([x0, x1]) + .range(range$$1); + }; + + return linearish(scale); +} + +function threshold$1() { + var domain = [0.5], + range$$1 = [0, 1], + n = 1; + + function scale(x) { + if (x <= x) return range$$1[bisectRight(domain, x, 0, n)]; + } + + scale.domain = function(_) { + return arguments.length ? (domain = slice$3.call(_), n = Math.min(domain.length, range$$1.length - 1), scale) : domain.slice(); + }; + + scale.range = function(_) { + return arguments.length ? (range$$1 = slice$3.call(_), n = Math.min(domain.length, range$$1.length - 1), scale) : range$$1.slice(); + }; + + scale.invertExtent = function(y) { + var i = range$$1.indexOf(y); + return [domain[i - 1], domain[i]]; + }; + + scale.copy = function() { + return threshold$1() + .domain(domain) + .range(range$$1); + }; + + return scale; +} + +var durationSecond$1 = 1000; +var durationMinute$1 = durationSecond$1 * 60; +var durationHour$1 = durationMinute$1 * 60; +var durationDay$1 = durationHour$1 * 24; +var durationWeek$1 = durationDay$1 * 7; +var durationMonth = durationDay$1 * 30; +var durationYear = durationDay$1 * 365; + +function date$1(t) { + return new Date(t); +} + +function number$2(t) { + return t instanceof Date ? +t : +new Date(+t); +} + +function calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format) { + var scale = continuous(deinterpolateLinear, interpolateNumber), + invert = scale.invert, + domain = scale.domain; + + var formatMillisecond = format(".%L"), + formatSecond = format(":%S"), + formatMinute = format("%I:%M"), + formatHour = format("%I %p"), + formatDay = format("%a %d"), + formatWeek = format("%b %d"), + formatMonth = format("%B"), + formatYear = format("%Y"); + + var tickIntervals = [ + [second$$1, 1, durationSecond$1], + [second$$1, 5, 5 * durationSecond$1], + [second$$1, 15, 15 * durationSecond$1], + [second$$1, 30, 30 * durationSecond$1], + [minute$$1, 1, durationMinute$1], + [minute$$1, 5, 5 * durationMinute$1], + [minute$$1, 15, 15 * durationMinute$1], + [minute$$1, 30, 30 * durationMinute$1], + [ hour$$1, 1, durationHour$1 ], + [ hour$$1, 3, 3 * durationHour$1 ], + [ hour$$1, 6, 6 * durationHour$1 ], + [ hour$$1, 12, 12 * durationHour$1 ], + [ day$$1, 1, durationDay$1 ], + [ day$$1, 2, 2 * durationDay$1 ], + [ week, 1, durationWeek$1 ], + [ month$$1, 1, durationMonth ], + [ month$$1, 3, 3 * durationMonth ], + [ year$$1, 1, durationYear ] + ]; + + function tickFormat(date) { + return (second$$1(date) < date ? formatMillisecond + : minute$$1(date) < date ? formatSecond + : hour$$1(date) < date ? formatMinute + : day$$1(date) < date ? formatHour + : month$$1(date) < date ? (week(date) < date ? formatDay : formatWeek) + : year$$1(date) < date ? formatMonth + : formatYear)(date); + } + + function tickInterval(interval, start, stop, step) { + if (interval == null) interval = 10; + + // If a desired tick count is specified, pick a reasonable tick interval + // based on the extent of the domain and a rough estimate of tick size. + // Otherwise, assume interval is already a time interval and use it. + if (typeof interval === "number") { + var target = Math.abs(stop - start) / interval, + i = bisector(function(i) { return i[2]; }).right(tickIntervals, target); + if (i === tickIntervals.length) { + step = tickStep(start / durationYear, stop / durationYear, interval); + interval = year$$1; + } else if (i) { + i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i]; + step = i[1]; + interval = i[0]; + } else { + step = tickStep(start, stop, interval); + interval = millisecond$$1; + } + } + + return step == null ? interval : interval.every(step); + } + + scale.invert = function(y) { + return new Date(invert(y)); + }; + + scale.domain = function(_) { + return arguments.length ? domain(map$3.call(_, number$2)) : domain().map(date$1); + }; + + scale.ticks = function(interval, step) { + var d = domain(), + t0 = d[0], + t1 = d[d.length - 1], + r = t1 < t0, + t; + if (r) t = t0, t0 = t1, t1 = t; + t = tickInterval(interval, t0, t1, step); + t = t ? t.range(t0, t1 + 1) : []; // inclusive stop + return r ? t.reverse() : t; + }; + + scale.tickFormat = function(count, specifier) { + return specifier == null ? tickFormat : format(specifier); + }; + + scale.nice = function(interval, step) { + var d = domain(); + return (interval = tickInterval(interval, d[0], d[d.length - 1], step)) + ? domain(nice(d, interval)) + : scale; + }; + + scale.copy = function() { + return copy(scale, calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format)); + }; + + return scale; +} + +var time = function() { + return calendar(year, month, sunday, day, hour, minute, second, millisecond, exports.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]); +}; + +var utcTime = function() { + return calendar(utcYear, utcMonth, utcSunday, utcDay, utcHour, utcMinute, second, millisecond, exports.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]); +}; + +var colors = function(s) { + return s.match(/.{6}/g).map(function(x) { + return "#" + x; + }); +}; + +var category10 = colors("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"); + +var category20b = colors("393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6"); + +var category20c = colors("3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9"); + +var category20 = colors("1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5"); + +var cubehelix$3 = cubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0)); + +var warm = cubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8)); + +var cool = cubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8)); + +var rainbow = cubehelix(); + +var rainbow$1 = function(t) { + if (t < 0 || t > 1) t -= Math.floor(t); + var ts = Math.abs(t - 0.5); + rainbow.h = 360 * t - 100; + rainbow.s = 1.5 - 1.5 * ts; + rainbow.l = 0.8 - 0.9 * ts; + return rainbow + ""; +}; + +function ramp(range) { + var n = range.length; + return function(t) { + return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))]; + }; +} + +var viridis = ramp(colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")); + +var magma = ramp(colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")); + +var inferno = ramp(colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")); + +var plasma = ramp(colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")); + +function sequential(interpolator) { + var x0 = 0, + x1 = 1, + clamp = false; + + function scale(x) { + var t = (x - x0) / (x1 - x0); + return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t); + } + + scale.domain = function(_) { + return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1]; + }; + + scale.clamp = function(_) { + return arguments.length ? (clamp = !!_, scale) : clamp; + }; + + scale.interpolator = function(_) { + return arguments.length ? (interpolator = _, scale) : interpolator; + }; + + scale.copy = function() { + return sequential(interpolator).domain([x0, x1]).clamp(clamp); + }; + + return linearish(scale); +} + +var xhtml = "http://www.w3.org/1999/xhtml"; + +var namespaces = { + svg: "http://www.w3.org/2000/svg", + xhtml: xhtml, + xlink: "http://www.w3.org/1999/xlink", + xml: "http://www.w3.org/XML/1998/namespace", + xmlns: "http://www.w3.org/2000/xmlns/" +}; + +var namespace = function(name) { + var prefix = name += "", i = prefix.indexOf(":"); + if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1); + return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; +}; + +function creatorInherit(name) { + return function() { + var document = this.ownerDocument, + uri = this.namespaceURI; + return uri === xhtml && document.documentElement.namespaceURI === xhtml + ? document.createElement(name) + : document.createElementNS(uri, name); + }; +} + +function creatorFixed(fullname) { + return function() { + return this.ownerDocument.createElementNS(fullname.space, fullname.local); + }; +} + +var creator = function(name) { + var fullname = namespace(name); + return (fullname.local + ? creatorFixed + : creatorInherit)(fullname); +}; + +var nextId = 0; + +function local() { + return new Local; +} + +function Local() { + this._ = "@" + (++nextId).toString(36); +} + +Local.prototype = local.prototype = { + constructor: Local, + get: function(node) { + var id = this._; + while (!(id in node)) if (!(node = node.parentNode)) return; + return node[id]; + }, + set: function(node, value) { + return node[this._] = value; + }, + remove: function(node) { + return this._ in node && delete node[this._]; + }, + toString: function() { + return this._; + } +}; + +var matcher = function(selector) { + return function() { + return this.matches(selector); + }; +}; + +if (typeof document !== "undefined") { + var element = document.documentElement; + if (!element.matches) { + var vendorMatches = element.webkitMatchesSelector + || element.msMatchesSelector + || element.mozMatchesSelector + || element.oMatchesSelector; + matcher = function(selector) { + return function() { + return vendorMatches.call(this, selector); + }; + }; + } +} + +var matcher$1 = matcher; + +var filterEvents = {}; + +exports.event = null; + +if (typeof document !== "undefined") { + var element$1 = document.documentElement; + if (!("onmouseenter" in element$1)) { + filterEvents = {mouseenter: "mouseover", mouseleave: "mouseout"}; + } +} + +function filterContextListener(listener, index, group) { + listener = contextListener(listener, index, group); + return function(event) { + var related = event.relatedTarget; + if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) { + listener.call(this, event); + } + }; +} + +function contextListener(listener, index, group) { + return function(event1) { + var event0 = exports.event; // Events can be reentrant (e.g., focus). + exports.event = event1; + try { + listener.call(this, this.__data__, index, group); + } finally { + exports.event = event0; + } + }; +} + +function parseTypenames$1(typenames) { + return typenames.trim().split(/^|\s+/).map(function(t) { + var name = "", i = t.indexOf("."); + if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); + return {type: t, name: name}; + }); +} + +function onRemove(typename) { + return function() { + var on = this.__on; + if (!on) return; + for (var j = 0, i = -1, m = on.length, o; j < m; ++j) { + if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) { + this.removeEventListener(o.type, o.listener, o.capture); + } else { + on[++i] = o; + } + } + if (++i) on.length = i; + else delete this.__on; + }; +} + +function onAdd(typename, value, capture) { + var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener; + return function(d, i, group) { + var on = this.__on, o, listener = wrap(value, i, group); + if (on) for (var j = 0, m = on.length; j < m; ++j) { + if ((o = on[j]).type === typename.type && o.name === typename.name) { + this.removeEventListener(o.type, o.listener, o.capture); + this.addEventListener(o.type, o.listener = listener, o.capture = capture); + o.value = value; + return; + } + } + this.addEventListener(typename.type, listener, capture); + o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture}; + if (!on) this.__on = [o]; + else on.push(o); + }; +} + +var selection_on = function(typename, value, capture) { + var typenames = parseTypenames$1(typename + ""), i, n = typenames.length, t; + + if (arguments.length < 2) { + var on = this.node().__on; + if (on) for (var j = 0, m = on.length, o; j < m; ++j) { + for (i = 0, o = on[j]; i < n; ++i) { + if ((t = typenames[i]).type === o.type && t.name === o.name) { + return o.value; + } + } + } + return; + } + + on = value ? onAdd : onRemove; + if (capture == null) capture = false; + for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture)); + return this; +}; + +function customEvent(event1, listener, that, args) { + var event0 = exports.event; + event1.sourceEvent = exports.event; + exports.event = event1; + try { + return listener.apply(that, args); + } finally { + exports.event = event0; + } +} + +var sourceEvent = function() { + var current = exports.event, source; + while (source = current.sourceEvent) current = source; + return current; +}; + +var point$5 = function(node, event) { + var svg = node.ownerSVGElement || node; + + if (svg.createSVGPoint) { + var point = svg.createSVGPoint(); + point.x = event.clientX, point.y = event.clientY; + point = point.matrixTransform(node.getScreenCTM().inverse()); + return [point.x, point.y]; + } + + var rect = node.getBoundingClientRect(); + return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop]; +}; + +var mouse = function(node) { + var event = sourceEvent(); + if (event.changedTouches) event = event.changedTouches[0]; + return point$5(node, event); +}; + +function none$2() {} + +var selector = function(selector) { + return selector == null ? none$2 : function() { + return this.querySelector(selector); + }; +}; + +var selection_select = function(select) { + if (typeof select !== "function") select = selector(select); + + for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { + if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) { + if ("__data__" in node) subnode.__data__ = node.__data__; + subgroup[i] = subnode; + } + } + } + + return new Selection(subgroups, this._parents); +}; + +function empty() { + return []; +} + +var selectorAll = function(selector) { + return selector == null ? empty : function() { + return this.querySelectorAll(selector); + }; +}; + +var selection_selectAll = function(select) { + if (typeof select !== "function") select = selectorAll(select); + + for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { + if (node = group[i]) { + subgroups.push(select.call(node, node.__data__, i, group)); + parents.push(node); + } + } + } + + return new Selection(subgroups, parents); +}; + +var selection_filter = function(match) { + if (typeof match !== "function") match = matcher$1(match); + + for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { + if ((node = group[i]) && match.call(node, node.__data__, i, group)) { + subgroup.push(node); + } + } + } + + return new Selection(subgroups, this._parents); +}; + +var sparse = function(update) { + return new Array(update.length); +}; + +var selection_enter = function() { + return new Selection(this._enter || this._groups.map(sparse), this._parents); +}; + +function EnterNode(parent, datum) { + this.ownerDocument = parent.ownerDocument; + this.namespaceURI = parent.namespaceURI; + this._next = null; + this._parent = parent; + this.__data__ = datum; +} + +EnterNode.prototype = { + constructor: EnterNode, + appendChild: function(child) { return this._parent.insertBefore(child, this._next); }, + insertBefore: function(child, next) { return this._parent.insertBefore(child, next); }, + querySelector: function(selector) { return this._parent.querySelector(selector); }, + querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); } +}; + +var constant$5 = function(x) { + return function() { + return x; + }; +}; + +var keyPrefix = "$"; // Protect against keys like “__proto__â€. + +function bindIndex(parent, group, enter, update, exit, data) { + var i = 0, + node, + groupLength = group.length, + dataLength = data.length; + + // Put any non-null nodes that fit into update. + // Put any null nodes into enter. + // Put any remaining data into enter. + for (; i < dataLength; ++i) { + if (node = group[i]) { + node.__data__ = data[i]; + update[i] = node; + } else { + enter[i] = new EnterNode(parent, data[i]); + } + } + + // Put any non-null nodes that don’t fit into exit. + for (; i < groupLength; ++i) { + if (node = group[i]) { + exit[i] = node; + } + } +} + +function bindKey(parent, group, enter, update, exit, data, key) { + var i, + node, + nodeByKeyValue = {}, + groupLength = group.length, + dataLength = data.length, + keyValues = new Array(groupLength), + keyValue; + + // Compute the key for each node. + // If multiple nodes have the same key, the duplicates are added to exit. + for (i = 0; i < groupLength; ++i) { + if (node = group[i]) { + keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group); + if (keyValue in nodeByKeyValue) { + exit[i] = node; + } else { + nodeByKeyValue[keyValue] = node; + } + } + } + + // Compute the key for each datum. + // If there a node associated with this key, join and add it to update. + // If there is not (or the key is a duplicate), add it to enter. + for (i = 0; i < dataLength; ++i) { + keyValue = keyPrefix + key.call(parent, data[i], i, data); + if (node = nodeByKeyValue[keyValue]) { + update[i] = node; + node.__data__ = data[i]; + nodeByKeyValue[keyValue] = null; + } else { + enter[i] = new EnterNode(parent, data[i]); + } + } + + // Add any remaining nodes that were not bound to data to exit. + for (i = 0; i < groupLength; ++i) { + if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) { + exit[i] = node; + } + } +} + +var selection_data = function(value, key) { + if (!value) { + data = new Array(this.size()), j = -1; + this.each(function(d) { data[++j] = d; }); + return data; + } + + var bind = key ? bindKey : bindIndex, + parents = this._parents, + groups = this._groups; + + if (typeof value !== "function") value = constant$5(value); + + for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) { + var parent = parents[j], + group = groups[j], + groupLength = group.length, + data = value.call(parent, parent && parent.__data__, j, parents), + dataLength = data.length, + enterGroup = enter[j] = new Array(dataLength), + updateGroup = update[j] = new Array(dataLength), + exitGroup = exit[j] = new Array(groupLength); + + bind(parent, group, enterGroup, updateGroup, exitGroup, data, key); + + // Now connect the enter nodes to their following update node, such that + // appendChild can insert the materialized enter node before this node, + // rather than at the end of the parent node. + for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) { + if (previous = enterGroup[i0]) { + if (i0 >= i1) i1 = i0 + 1; + while (!(next = updateGroup[i1]) && ++i1 < dataLength); + previous._next = next || null; + } + } + } + + update = new Selection(update, parents); + update._enter = enter; + update._exit = exit; + return update; +}; + +var selection_exit = function() { + return new Selection(this._exit || this._groups.map(sparse), this._parents); +}; + +var selection_merge = function(selection) { + + for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) { + for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { + if (node = group0[i] || group1[i]) { + merge[i] = node; + } + } + } + + for (; j < m0; ++j) { + merges[j] = groups0[j]; + } + + return new Selection(merges, this._parents); +}; + +var selection_order = function() { + + for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) { + for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) { + if (node = group[i]) { + if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next); + next = node; + } + } + } + + return this; +}; + +var selection_sort = function(compare) { + if (!compare) compare = ascending$2; + + function compareNode(a, b) { + return a && b ? compare(a.__data__, b.__data__) : !a - !b; + } + + for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) { + if (node = group[i]) { + sortgroup[i] = node; + } + } + sortgroup.sort(compareNode); + } + + return new Selection(sortgroups, this._parents).order(); +}; + +function ascending$2(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; +} + +var selection_call = function() { + var callback = arguments[0]; + arguments[0] = this; + callback.apply(null, arguments); + return this; +}; + +var selection_nodes = function() { + var nodes = new Array(this.size()), i = -1; + this.each(function() { nodes[++i] = this; }); + return nodes; +}; + +var selection_node = function() { + + for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { + for (var group = groups[j], i = 0, n = group.length; i < n; ++i) { + var node = group[i]; + if (node) return node; + } + } + + return null; +}; + +var selection_size = function() { + var size = 0; + this.each(function() { ++size; }); + return size; +}; + +var selection_empty = function() { + return !this.node(); +}; + +var selection_each = function(callback) { + + for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { + for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) { + if (node = group[i]) callback.call(node, node.__data__, i, group); + } + } + + return this; +}; + +function attrRemove(name) { + return function() { + this.removeAttribute(name); + }; +} + +function attrRemoveNS(fullname) { + return function() { + this.removeAttributeNS(fullname.space, fullname.local); + }; +} + +function attrConstant(name, value) { + return function() { + this.setAttribute(name, value); + }; +} + +function attrConstantNS(fullname, value) { + return function() { + this.setAttributeNS(fullname.space, fullname.local, value); + }; +} + +function attrFunction(name, value) { + return function() { + var v = value.apply(this, arguments); + if (v == null) this.removeAttribute(name); + else this.setAttribute(name, v); + }; +} + +function attrFunctionNS(fullname, value) { + return function() { + var v = value.apply(this, arguments); + if (v == null) this.removeAttributeNS(fullname.space, fullname.local); + else this.setAttributeNS(fullname.space, fullname.local, v); + }; +} + +var selection_attr = function(name, value) { + var fullname = namespace(name); + + if (arguments.length < 2) { + var node = this.node(); + return fullname.local + ? node.getAttributeNS(fullname.space, fullname.local) + : node.getAttribute(fullname); + } + + return this.each((value == null + ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function" + ? (fullname.local ? attrFunctionNS : attrFunction) + : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value)); +}; + +var window = function(node) { + return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node + || (node.document && node) // node is a Window + || node.defaultView; // node is a Document +}; + +function styleRemove(name) { + return function() { + this.style.removeProperty(name); + }; +} + +function styleConstant(name, value, priority) { + return function() { + this.style.setProperty(name, value, priority); + }; +} + +function styleFunction(name, value, priority) { + return function() { + var v = value.apply(this, arguments); + if (v == null) this.style.removeProperty(name); + else this.style.setProperty(name, v, priority); + }; +} + +var selection_style = function(name, value, priority) { + var node; + return arguments.length > 1 + ? this.each((value == null + ? styleRemove : typeof value === "function" + ? styleFunction + : styleConstant)(name, value, priority == null ? "" : priority)) + : window(node = this.node()) + .getComputedStyle(node, null) + .getPropertyValue(name); +}; + +function propertyRemove(name) { + return function() { + delete this[name]; + }; +} + +function propertyConstant(name, value) { + return function() { + this[name] = value; + }; +} + +function propertyFunction(name, value) { + return function() { + var v = value.apply(this, arguments); + if (v == null) delete this[name]; + else this[name] = v; + }; +} + +var selection_property = function(name, value) { + return arguments.length > 1 + ? this.each((value == null + ? propertyRemove : typeof value === "function" + ? propertyFunction + : propertyConstant)(name, value)) + : this.node()[name]; +}; + +function classArray(string) { + return string.trim().split(/^|\s+/); +} + +function classList(node) { + return node.classList || new ClassList(node); +} + +function ClassList(node) { + this._node = node; + this._names = classArray(node.getAttribute("class") || ""); +} + +ClassList.prototype = { + add: function(name) { + var i = this._names.indexOf(name); + if (i < 0) { + this._names.push(name); + this._node.setAttribute("class", this._names.join(" ")); + } + }, + remove: function(name) { + var i = this._names.indexOf(name); + if (i >= 0) { + this._names.splice(i, 1); + this._node.setAttribute("class", this._names.join(" ")); + } + }, + contains: function(name) { + return this._names.indexOf(name) >= 0; + } +}; + +function classedAdd(node, names) { + var list = classList(node), i = -1, n = names.length; + while (++i < n) list.add(names[i]); +} + +function classedRemove(node, names) { + var list = classList(node), i = -1, n = names.length; + while (++i < n) list.remove(names[i]); +} + +function classedTrue(names) { + return function() { + classedAdd(this, names); + }; +} + +function classedFalse(names) { + return function() { + classedRemove(this, names); + }; +} + +function classedFunction(names, value) { + return function() { + (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names); + }; +} + +var selection_classed = function(name, value) { + var names = classArray(name + ""); + + if (arguments.length < 2) { + var list = classList(this.node()), i = -1, n = names.length; + while (++i < n) if (!list.contains(names[i])) return false; + return true; + } + + return this.each((typeof value === "function" + ? classedFunction : value + ? classedTrue + : classedFalse)(names, value)); +}; + +function textRemove() { + this.textContent = ""; +} + +function textConstant(value) { + return function() { + this.textContent = value; + }; +} + +function textFunction(value) { + return function() { + var v = value.apply(this, arguments); + this.textContent = v == null ? "" : v; + }; +} + +var selection_text = function(value) { + return arguments.length + ? this.each(value == null + ? textRemove : (typeof value === "function" + ? textFunction + : textConstant)(value)) + : this.node().textContent; +}; + +function htmlRemove() { + this.innerHTML = ""; +} + +function htmlConstant(value) { + return function() { + this.innerHTML = value; + }; +} + +function htmlFunction(value) { + return function() { + var v = value.apply(this, arguments); + this.innerHTML = v == null ? "" : v; + }; +} + +var selection_html = function(value) { + return arguments.length + ? this.each(value == null + ? htmlRemove : (typeof value === "function" + ? htmlFunction + : htmlConstant)(value)) + : this.node().innerHTML; +}; + +function raise$1() { + if (this.nextSibling) this.parentNode.appendChild(this); +} + +var selection_raise = function() { + return this.each(raise$1); +}; + +function lower() { + if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild); +} + +var selection_lower = function() { + return this.each(lower); +}; + +var selection_append = function(name) { + var create = typeof name === "function" ? name : creator(name); + return this.select(function() { + return this.appendChild(create.apply(this, arguments)); + }); +}; + +function constantNull() { + return null; +} + +var selection_insert = function(name, before) { + var create = typeof name === "function" ? name : creator(name), + select = before == null ? constantNull : typeof before === "function" ? before : selector(before); + return this.select(function() { + return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null); + }); +}; + +function remove() { + var parent = this.parentNode; + if (parent) parent.removeChild(this); +} + +var selection_remove = function() { + return this.each(remove); +}; + +var selection_datum = function(value) { + return arguments.length + ? this.property("__data__", value) + : this.node().__data__; +}; + +function dispatchEvent(node, type, params) { + var window$$1 = window(node), + event = window$$1.CustomEvent; + + if (event) { + event = new event(type, params); + } else { + event = window$$1.document.createEvent("Event"); + if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail; + else event.initEvent(type, false, false); + } + + node.dispatchEvent(event); +} + +function dispatchConstant(type, params) { + return function() { + return dispatchEvent(this, type, params); + }; +} + +function dispatchFunction(type, params) { + return function() { + return dispatchEvent(this, type, params.apply(this, arguments)); + }; +} + +var selection_dispatch = function(type, params) { + return this.each((typeof params === "function" + ? dispatchFunction + : dispatchConstant)(type, params)); +}; + +var root = [null]; + +function Selection(groups, parents) { + this._groups = groups; + this._parents = parents; +} + +function selection() { + return new Selection([[document.documentElement]], root); +} + +Selection.prototype = selection.prototype = { + constructor: Selection, + select: selection_select, + selectAll: selection_selectAll, + filter: selection_filter, + data: selection_data, + enter: selection_enter, + exit: selection_exit, + merge: selection_merge, + order: selection_order, + sort: selection_sort, + call: selection_call, + nodes: selection_nodes, + node: selection_node, + size: selection_size, + empty: selection_empty, + each: selection_each, + attr: selection_attr, + style: selection_style, + property: selection_property, + classed: selection_classed, + text: selection_text, + html: selection_html, + raise: selection_raise, + lower: selection_lower, + append: selection_append, + insert: selection_insert, + remove: selection_remove, + datum: selection_datum, + on: selection_on, + dispatch: selection_dispatch +}; + +var select = function(selector) { + return typeof selector === "string" + ? new Selection([[document.querySelector(selector)]], [document.documentElement]) + : new Selection([[selector]], root); +}; + +var selectAll = function(selector) { + return typeof selector === "string" + ? new Selection([document.querySelectorAll(selector)], [document.documentElement]) + : new Selection([selector == null ? [] : selector], root); +}; + +var touch = function(node, touches, identifier) { + if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches; + + for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) { + if ((touch = touches[i]).identifier === identifier) { + return point$5(node, touch); + } + } + + return null; +}; + +var touches = function(node, touches) { + if (touches == null) touches = sourceEvent().touches; + + for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) { + points[i] = point$5(node, touches[i]); + } + + return points; +}; + +var emptyOn = dispatch("start", "end", "interrupt"); +var emptyTween = []; + +var CREATED = 0; +var SCHEDULED = 1; +var STARTING = 2; +var STARTED = 3; +var RUNNING = 4; +var ENDING = 5; +var ENDED = 6; + +var schedule = function(node, name, id, index, group, timing) { + var schedules = node.__transition; + if (!schedules) node.__transition = {}; + else if (id in schedules) return; + create(node, id, { + name: name, + index: index, // For context during callback. + group: group, // For context during callback. + on: emptyOn, + tween: emptyTween, + time: timing.time, + delay: timing.delay, + duration: timing.duration, + ease: timing.ease, + timer: null, + state: CREATED + }); +}; + +function init(node, id) { + var schedule = node.__transition; + if (!schedule || !(schedule = schedule[id]) || schedule.state > CREATED) throw new Error("too late"); + return schedule; +} + +function set$3(node, id) { + var schedule = node.__transition; + if (!schedule || !(schedule = schedule[id]) || schedule.state > STARTING) throw new Error("too late"); + return schedule; +} + +function get$1(node, id) { + var schedule = node.__transition; + if (!schedule || !(schedule = schedule[id])) throw new Error("too late"); + return schedule; +} + +function create(node, id, self) { + var schedules = node.__transition, + tween; + + // Initialize the self timer when the transition is created. + // Note the actual delay is not known until the first callback! + schedules[id] = self; + self.timer = timer(schedule, 0, self.time); + + function schedule(elapsed) { + self.state = SCHEDULED; + self.timer.restart(start, self.delay, self.time); + + // If the elapsed delay is less than our first sleep, start immediately. + if (self.delay <= elapsed) start(elapsed - self.delay); + } + + function start(elapsed) { + var i, j, n, o; + + // If the state is not SCHEDULED, then we previously errored on start. + if (self.state !== SCHEDULED) return stop(); + + for (i in schedules) { + o = schedules[i]; + if (o.name !== self.name) continue; + + // While this element already has a starting transition during this frame, + // defer starting an interrupting transition until that transition has a + // chance to tick (and possibly end); see d3/d3-transition#54! + if (o.state === STARTED) return timeout$1(start); + + // Interrupt the active transition, if any. + // Dispatch the interrupt event. + if (o.state === RUNNING) { + o.state = ENDED; + o.timer.stop(); + o.on.call("interrupt", node, node.__data__, o.index, o.group); + delete schedules[i]; + } + + // Cancel any pre-empted transitions. No interrupt event is dispatched + // because the cancelled transitions never started. Note that this also + // removes this transition from the pending list! + else if (+i < id) { + o.state = ENDED; + o.timer.stop(); + delete schedules[i]; + } + } + + // Defer the first tick to end of the current frame; see d3/d3#1576. + // Note the transition may be canceled after start and before the first tick! + // Note this must be scheduled before the start event; see d3/d3-transition#16! + // Assuming this is successful, subsequent callbacks go straight to tick. + timeout$1(function() { + if (self.state === STARTED) { + self.state = RUNNING; + self.timer.restart(tick, self.delay, self.time); + tick(elapsed); + } + }); + + // Dispatch the start event. + // Note this must be done before the tween are initialized. + self.state = STARTING; + self.on.call("start", node, node.__data__, self.index, self.group); + if (self.state !== STARTING) return; // interrupted + self.state = STARTED; + + // Initialize the tween, deleting null tween. + tween = new Array(n = self.tween.length); + for (i = 0, j = -1; i < n; ++i) { + if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) { + tween[++j] = o; + } + } + tween.length = j + 1; + } + + function tick(elapsed) { + var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1), + i = -1, + n = tween.length; + + while (++i < n) { + tween[i].call(null, t); + } + + // Dispatch the end event. + if (self.state === ENDING) { + self.on.call("end", node, node.__data__, self.index, self.group); + stop(); + } + } + + function stop() { + self.state = ENDED; + self.timer.stop(); + delete schedules[id]; + for (var i in schedules) return; // eslint-disable-line no-unused-vars + delete node.__transition; + } +} + +var interrupt = function(node, name) { + var schedules = node.__transition, + schedule, + active, + empty = true, + i; + + if (!schedules) return; + + name = name == null ? null : name + ""; + + for (i in schedules) { + if ((schedule = schedules[i]).name !== name) { empty = false; continue; } + active = schedule.state > STARTING && schedule.state < ENDING; + schedule.state = ENDED; + schedule.timer.stop(); + if (active) schedule.on.call("interrupt", node, node.__data__, schedule.index, schedule.group); + delete schedules[i]; + } + + if (empty) delete node.__transition; +}; + +var selection_interrupt = function(name) { + return this.each(function() { + interrupt(this, name); + }); +}; + +function tweenRemove(id, name) { + var tween0, tween1; + return function() { + var schedule = set$3(this, id), + tween = schedule.tween; + + // If this node shared tween with the previous node, + // just assign the updated shared tween and we’re done! + // Otherwise, copy-on-write. + if (tween !== tween0) { + tween1 = tween0 = tween; + for (var i = 0, n = tween1.length; i < n; ++i) { + if (tween1[i].name === name) { + tween1 = tween1.slice(); + tween1.splice(i, 1); + break; + } + } + } + + schedule.tween = tween1; + }; +} + +function tweenFunction(id, name, value) { + var tween0, tween1; + if (typeof value !== "function") throw new Error; + return function() { + var schedule = set$3(this, id), + tween = schedule.tween; + + // If this node shared tween with the previous node, + // just assign the updated shared tween and we’re done! + // Otherwise, copy-on-write. + if (tween !== tween0) { + tween1 = (tween0 = tween).slice(); + for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) { + if (tween1[i].name === name) { + tween1[i] = t; + break; + } + } + if (i === n) tween1.push(t); + } + + schedule.tween = tween1; + }; +} + +var transition_tween = function(name, value) { + var id = this._id; + + name += ""; + + if (arguments.length < 2) { + var tween = get$1(this.node(), id).tween; + for (var i = 0, n = tween.length, t; i < n; ++i) { + if ((t = tween[i]).name === name) { + return t.value; + } + } + return null; + } + + return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value)); +}; + +function tweenValue(transition, name, value) { + var id = transition._id; + + transition.each(function() { + var schedule = set$3(this, id); + (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments); + }); + + return function(node) { + return get$1(node, id).value[name]; + }; +} + +var interpolate$1 = function(a, b) { + var c; + return (typeof b === "number" ? interpolateNumber + : b instanceof color ? interpolateRgb + : (c = color(b)) ? (b = c, interpolateRgb) + : interpolateString)(a, b); +}; + +function attrRemove$1(name) { + return function() { + this.removeAttribute(name); + }; +} + +function attrRemoveNS$1(fullname) { + return function() { + this.removeAttributeNS(fullname.space, fullname.local); + }; +} + +function attrConstant$1(name, interpolate$$1, value1) { + var value00, + interpolate0; + return function() { + var value0 = this.getAttribute(name); + return value0 === value1 ? null + : value0 === value00 ? interpolate0 + : interpolate0 = interpolate$$1(value00 = value0, value1); + }; +} + +function attrConstantNS$1(fullname, interpolate$$1, value1) { + var value00, + interpolate0; + return function() { + var value0 = this.getAttributeNS(fullname.space, fullname.local); + return value0 === value1 ? null + : value0 === value00 ? interpolate0 + : interpolate0 = interpolate$$1(value00 = value0, value1); + }; +} + +function attrFunction$1(name, interpolate$$1, value) { + var value00, + value10, + interpolate0; + return function() { + var value0, value1 = value(this); + if (value1 == null) return void this.removeAttribute(name); + value0 = this.getAttribute(name); + return value0 === value1 ? null + : value0 === value00 && value1 === value10 ? interpolate0 + : interpolate0 = interpolate$$1(value00 = value0, value10 = value1); + }; +} + +function attrFunctionNS$1(fullname, interpolate$$1, value) { + var value00, + value10, + interpolate0; + return function() { + var value0, value1 = value(this); + if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local); + value0 = this.getAttributeNS(fullname.space, fullname.local); + return value0 === value1 ? null + : value0 === value00 && value1 === value10 ? interpolate0 + : interpolate0 = interpolate$$1(value00 = value0, value10 = value1); + }; +} + +var transition_attr = function(name, value) { + var fullname = namespace(name), i = fullname === "transform" ? interpolateTransformSvg : interpolate$1; + return this.attrTween(name, typeof value === "function" + ? (fullname.local ? attrFunctionNS$1 : attrFunction$1)(fullname, i, tweenValue(this, "attr." + name, value)) + : value == null ? (fullname.local ? attrRemoveNS$1 : attrRemove$1)(fullname) + : (fullname.local ? attrConstantNS$1 : attrConstant$1)(fullname, i, value)); +}; + +function attrTweenNS(fullname, value) { + function tween() { + var node = this, i = value.apply(node, arguments); + return i && function(t) { + node.setAttributeNS(fullname.space, fullname.local, i(t)); + }; + } + tween._value = value; + return tween; +} + +function attrTween(name, value) { + function tween() { + var node = this, i = value.apply(node, arguments); + return i && function(t) { + node.setAttribute(name, i(t)); + }; + } + tween._value = value; + return tween; +} + +var transition_attrTween = function(name, value) { + var key = "attr." + name; + if (arguments.length < 2) return (key = this.tween(key)) && key._value; + if (value == null) return this.tween(key, null); + if (typeof value !== "function") throw new Error; + var fullname = namespace(name); + return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value)); +}; + +function delayFunction(id, value) { + return function() { + init(this, id).delay = +value.apply(this, arguments); + }; +} + +function delayConstant(id, value) { + return value = +value, function() { + init(this, id).delay = value; + }; +} + +var transition_delay = function(value) { + var id = this._id; + + return arguments.length + ? this.each((typeof value === "function" + ? delayFunction + : delayConstant)(id, value)) + : get$1(this.node(), id).delay; +}; + +function durationFunction(id, value) { + return function() { + set$3(this, id).duration = +value.apply(this, arguments); + }; +} + +function durationConstant(id, value) { + return value = +value, function() { + set$3(this, id).duration = value; + }; +} + +var transition_duration = function(value) { + var id = this._id; + + return arguments.length + ? this.each((typeof value === "function" + ? durationFunction + : durationConstant)(id, value)) + : get$1(this.node(), id).duration; +}; + +function easeConstant(id, value) { + if (typeof value !== "function") throw new Error; + return function() { + set$3(this, id).ease = value; + }; +} + +var transition_ease = function(value) { + var id = this._id; + + return arguments.length + ? this.each(easeConstant(id, value)) + : get$1(this.node(), id).ease; +}; + +var transition_filter = function(match) { + if (typeof match !== "function") match = matcher$1(match); + + for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { + if ((node = group[i]) && match.call(node, node.__data__, i, group)) { + subgroup.push(node); + } + } + } + + return new Transition(subgroups, this._parents, this._name, this._id); +}; + +var transition_merge = function(transition) { + if (transition._id !== this._id) throw new Error; + + for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) { + for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { + if (node = group0[i] || group1[i]) { + merge[i] = node; + } + } + } + + for (; j < m0; ++j) { + merges[j] = groups0[j]; + } + + return new Transition(merges, this._parents, this._name, this._id); +}; + +function start$1(name) { + return (name + "").trim().split(/^|\s+/).every(function(t) { + var i = t.indexOf("."); + if (i >= 0) t = t.slice(0, i); + return !t || t === "start"; + }); +} + +function onFunction(id, name, listener) { + var on0, on1, sit = start$1(name) ? init : set$3; + return function() { + var schedule = sit(this, id), + on = schedule.on; + + // If this node shared a dispatch with the previous node, + // just assign the updated shared dispatch and we’re done! + // Otherwise, copy-on-write. + if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener); + + schedule.on = on1; + }; +} + +var transition_on = function(name, listener) { + var id = this._id; + + return arguments.length < 2 + ? get$1(this.node(), id).on.on(name) + : this.each(onFunction(id, name, listener)); +}; + +function removeFunction(id) { + return function() { + var parent = this.parentNode; + for (var i in this.__transition) if (+i !== id) return; + if (parent) parent.removeChild(this); + }; +} + +var transition_remove = function() { + return this.on("end.remove", removeFunction(this._id)); +}; + +var transition_select = function(select$$1) { + var name = this._name, + id = this._id; + + if (typeof select$$1 !== "function") select$$1 = selector(select$$1); + + for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { + if ((node = group[i]) && (subnode = select$$1.call(node, node.__data__, i, group))) { + if ("__data__" in node) subnode.__data__ = node.__data__; + subgroup[i] = subnode; + schedule(subgroup[i], name, id, i, subgroup, get$1(node, id)); + } + } + } + + return new Transition(subgroups, this._parents, name, id); +}; + +var transition_selectAll = function(select$$1) { + var name = this._name, + id = this._id; + + if (typeof select$$1 !== "function") select$$1 = selectorAll(select$$1); + + for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { + if (node = group[i]) { + for (var children = select$$1.call(node, node.__data__, i, group), child, inherit = get$1(node, id), k = 0, l = children.length; k < l; ++k) { + if (child = children[k]) { + schedule(child, name, id, k, children, inherit); + } + } + subgroups.push(children); + parents.push(node); + } + } + } + + return new Transition(subgroups, parents, name, id); +}; + +var Selection$1 = selection.prototype.constructor; + +var transition_selection = function() { + return new Selection$1(this._groups, this._parents); +}; + +function styleRemove$1(name, interpolate$$1) { + var value00, + value10, + interpolate0; + return function() { + var style = window(this).getComputedStyle(this, null), + value0 = style.getPropertyValue(name), + value1 = (this.style.removeProperty(name), style.getPropertyValue(name)); + return value0 === value1 ? null + : value0 === value00 && value1 === value10 ? interpolate0 + : interpolate0 = interpolate$$1(value00 = value0, value10 = value1); + }; +} + +function styleRemoveEnd(name) { + return function() { + this.style.removeProperty(name); + }; +} + +function styleConstant$1(name, interpolate$$1, value1) { + var value00, + interpolate0; + return function() { + var value0 = window(this).getComputedStyle(this, null).getPropertyValue(name); + return value0 === value1 ? null + : value0 === value00 ? interpolate0 + : interpolate0 = interpolate$$1(value00 = value0, value1); + }; +} + +function styleFunction$1(name, interpolate$$1, value) { + var value00, + value10, + interpolate0; + return function() { + var style = window(this).getComputedStyle(this, null), + value0 = style.getPropertyValue(name), + value1 = value(this); + if (value1 == null) value1 = (this.style.removeProperty(name), style.getPropertyValue(name)); + return value0 === value1 ? null + : value0 === value00 && value1 === value10 ? interpolate0 + : interpolate0 = interpolate$$1(value00 = value0, value10 = value1); + }; +} + +var transition_style = function(name, value, priority) { + var i = (name += "") === "transform" ? interpolateTransformCss : interpolate$1; + return value == null ? this + .styleTween(name, styleRemove$1(name, i)) + .on("end.style." + name, styleRemoveEnd(name)) + : this.styleTween(name, typeof value === "function" + ? styleFunction$1(name, i, tweenValue(this, "style." + name, value)) + : styleConstant$1(name, i, value), priority); +}; + +function styleTween(name, value, priority) { + function tween() { + var node = this, i = value.apply(node, arguments); + return i && function(t) { + node.style.setProperty(name, i(t), priority); + }; + } + tween._value = value; + return tween; +} + +var transition_styleTween = function(name, value, priority) { + var key = "style." + (name += ""); + if (arguments.length < 2) return (key = this.tween(key)) && key._value; + if (value == null) return this.tween(key, null); + if (typeof value !== "function") throw new Error; + return this.tween(key, styleTween(name, value, priority == null ? "" : priority)); +}; + +function textConstant$1(value) { + return function() { + this.textContent = value; + }; +} + +function textFunction$1(value) { + return function() { + var value1 = value(this); + this.textContent = value1 == null ? "" : value1; + }; +} + +var transition_text = function(value) { + return this.tween("text", typeof value === "function" + ? textFunction$1(tweenValue(this, "text", value)) + : textConstant$1(value == null ? "" : value + "")); +}; + +var transition_transition = function() { + var name = this._name, + id0 = this._id, + id1 = newId(); + + for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { + if (node = group[i]) { + var inherit = get$1(node, id0); + schedule(node, name, id1, i, group, { + time: inherit.time + inherit.delay + inherit.duration, + delay: 0, + duration: inherit.duration, + ease: inherit.ease + }); + } + } + } + + return new Transition(groups, this._parents, name, id1); +}; + +var id = 0; + +function Transition(groups, parents, name, id) { + this._groups = groups; + this._parents = parents; + this._name = name; + this._id = id; +} + +function transition(name) { + return selection().transition(name); +} + +function newId() { + return ++id; +} + +var selection_prototype = selection.prototype; + +Transition.prototype = transition.prototype = { + constructor: Transition, + select: transition_select, + selectAll: transition_selectAll, + filter: transition_filter, + merge: transition_merge, + selection: transition_selection, + transition: transition_transition, + call: selection_prototype.call, + nodes: selection_prototype.nodes, + node: selection_prototype.node, + size: selection_prototype.size, + empty: selection_prototype.empty, + each: selection_prototype.each, + on: transition_on, + attr: transition_attr, + attrTween: transition_attrTween, + style: transition_style, + styleTween: transition_styleTween, + text: transition_text, + remove: transition_remove, + tween: transition_tween, + delay: transition_delay, + duration: transition_duration, + ease: transition_ease +}; + +var defaultTiming = { + time: null, // Set on use. + delay: 0, + duration: 250, + ease: cubicInOut +}; + +function inherit(node, id) { + var timing; + while (!(timing = node.__transition) || !(timing = timing[id])) { + if (!(node = node.parentNode)) { + return defaultTiming.time = now(), defaultTiming; + } + } + return timing; +} + +var selection_transition = function(name) { + var id, + timing; + + if (name instanceof Transition) { + id = name._id, name = name._name; + } else { + id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + ""; + } + + for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { + if (node = group[i]) { + schedule(node, name, id, i, group, timing || inherit(node, id)); + } + } + } + + return new Transition(groups, this._parents, name, id); +}; + +selection.prototype.interrupt = selection_interrupt; +selection.prototype.transition = selection_transition; + +var root$1 = [null]; + +var active = function(node, name) { + var schedules = node.__transition, + schedule, + i; + + if (schedules) { + name = name == null ? null : name + ""; + for (i in schedules) { + if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) { + return new Transition([[node]], root$1, name, +i); + } + } + } + + return null; +}; + +var slice$4 = Array.prototype.slice; + +var identity$5 = function(x) { + return x; +}; + +var top = 1; +var right = 2; +var bottom = 3; +var left = 4; +var epsilon$2 = 1e-6; + +function translateX(scale0, scale1, d) { + var x = scale0(d); + return "translate(" + (isFinite(x) ? x : scale1(d)) + ",0)"; +} + +function translateY(scale0, scale1, d) { + var y = scale0(d); + return "translate(0," + (isFinite(y) ? y : scale1(d)) + ")"; +} + +function center(scale) { + var offset = scale.bandwidth() / 2; + if (scale.round()) offset = Math.round(offset); + return function(d) { + return scale(d) + offset; + }; +} + +function entering() { + return !this.__axis; +} + +function axis(orient, scale) { + var tickArguments = [], + tickValues = null, + tickFormat = null, + tickSizeInner = 6, + tickSizeOuter = 6, + tickPadding = 3; + + function axis(context) { + var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues, + format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity$5) : tickFormat, + spacing = Math.max(tickSizeInner, 0) + tickPadding, + transform = orient === top || orient === bottom ? translateX : translateY, + range = scale.range(), + range0 = range[0] + 0.5, + range1 = range[range.length - 1] + 0.5, + position = (scale.bandwidth ? center : identity$5)(scale.copy()), + selection = context.selection ? context.selection() : context, + path = selection.selectAll(".domain").data([null]), + tick = selection.selectAll(".tick").data(values, scale).order(), + tickExit = tick.exit(), + tickEnter = tick.enter().append("g").attr("class", "tick"), + line = tick.select("line"), + text = tick.select("text"), + k = orient === top || orient === left ? -1 : 1, + x, y = orient === left || orient === right ? (x = "x", "y") : (x = "y", "x"); + + path = path.merge(path.enter().insert("path", ".tick") + .attr("class", "domain") + .attr("stroke", "#000")); + + tick = tick.merge(tickEnter); + + line = line.merge(tickEnter.append("line") + .attr("stroke", "#000") + .attr(x + "2", k * tickSizeInner) + .attr(y + "1", 0.5) + .attr(y + "2", 0.5)); + + text = text.merge(tickEnter.append("text") + .attr("fill", "#000") + .attr(x, k * spacing) + .attr(y, 0.5) + .attr("dy", orient === top ? "0em" : orient === bottom ? "0.71em" : "0.32em")); + + if (context !== selection) { + path = path.transition(context); + tick = tick.transition(context); + line = line.transition(context); + text = text.transition(context); + + tickExit = tickExit.transition(context) + .attr("opacity", epsilon$2) + .attr("transform", function(d) { return transform(position, this.parentNode.__axis || position, d); }); + + tickEnter + .attr("opacity", epsilon$2) + .attr("transform", function(d) { return transform(this.parentNode.__axis || position, position, d); }); + } + + tickExit.remove(); + + path + .attr("d", orient === left || orient == right + ? "M" + k * tickSizeOuter + "," + range0 + "H0.5V" + range1 + "H" + k * tickSizeOuter + : "M" + range0 + "," + k * tickSizeOuter + "V0.5H" + range1 + "V" + k * tickSizeOuter); + + tick + .attr("opacity", 1) + .attr("transform", function(d) { return transform(position, position, d); }); + + line + .attr(x + "2", k * tickSizeInner); + + text + .attr(x, k * spacing) + .text(format); + + selection.filter(entering) + .attr("fill", "none") + .attr("font-size", 10) + .attr("font-family", "sans-serif") + .attr("text-anchor", orient === right ? "start" : orient === left ? "end" : "middle"); + + selection + .each(function() { this.__axis = position; }); + } + + axis.scale = function(_) { + return arguments.length ? (scale = _, axis) : scale; + }; + + axis.ticks = function() { + return tickArguments = slice$4.call(arguments), axis; + }; + + axis.tickArguments = function(_) { + return arguments.length ? (tickArguments = _ == null ? [] : slice$4.call(_), axis) : tickArguments.slice(); + }; + + axis.tickValues = function(_) { + return arguments.length ? (tickValues = _ == null ? null : slice$4.call(_), axis) : tickValues && tickValues.slice(); + }; + + axis.tickFormat = function(_) { + return arguments.length ? (tickFormat = _, axis) : tickFormat; + }; + + axis.tickSize = function(_) { + return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner; + }; + + axis.tickSizeInner = function(_) { + return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner; + }; + + axis.tickSizeOuter = function(_) { + return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter; + }; + + axis.tickPadding = function(_) { + return arguments.length ? (tickPadding = +_, axis) : tickPadding; + }; + + return axis; +} + +function axisTop(scale) { + return axis(top, scale); +} + +function axisRight(scale) { + return axis(right, scale); +} + +function axisBottom(scale) { + return axis(bottom, scale); +} + +function axisLeft(scale) { + return axis(left, scale); +} + +function defaultSeparation(a, b) { + return a.parent === b.parent ? 1 : 2; +} + +function meanX(children) { + return children.reduce(meanXReduce, 0) / children.length; +} + +function meanXReduce(x, c) { + return x + c.x; +} + +function maxY(children) { + return 1 + children.reduce(maxYReduce, 0); +} + +function maxYReduce(y, c) { + return Math.max(y, c.y); +} + +function leafLeft(node) { + var children; + while (children = node.children) node = children[0]; + return node; +} + +function leafRight(node) { + var children; + while (children = node.children) node = children[children.length - 1]; + return node; +} + +var cluster = function() { + var separation = defaultSeparation, + dx = 1, + dy = 1, + nodeSize = false; + + function cluster(root) { + var previousNode, + x = 0; + + // First walk, computing the initial x & y values. + root.eachAfter(function(node) { + var children = node.children; + if (children) { + node.x = meanX(children); + node.y = maxY(children); + } else { + node.x = previousNode ? x += separation(node, previousNode) : 0; + node.y = 0; + previousNode = node; + } + }); + + var left = leafLeft(root), + right = leafRight(root), + x0 = left.x - separation(left, right) / 2, + x1 = right.x + separation(right, left) / 2; + + // Second walk, normalizing x & y to the desired size. + return root.eachAfter(nodeSize ? function(node) { + node.x = (node.x - root.x) * dx; + node.y = (root.y - node.y) * dy; + } : function(node) { + node.x = (node.x - x0) / (x1 - x0) * dx; + node.y = (1 - (root.y ? node.y / root.y : 1)) * dy; + }); + } + + cluster.separation = function(x) { + return arguments.length ? (separation = x, cluster) : separation; + }; + + cluster.size = function(x) { + return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]); + }; + + cluster.nodeSize = function(x) { + return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null); + }; + + return cluster; +}; + +var node_each = function(callback) { + var node = this, current, next = [node], children, i, n; + do { + current = next.reverse(), next = []; + while (node = current.pop()) { + callback(node), children = node.children; + if (children) for (i = 0, n = children.length; i < n; ++i) { + next.push(children[i]); + } + } + } while (next.length); + return this; +}; + +var node_eachBefore = function(callback) { + var node = this, nodes = [node], children, i; + while (node = nodes.pop()) { + callback(node), children = node.children; + if (children) for (i = children.length - 1; i >= 0; --i) { + nodes.push(children[i]); + } + } + return this; +}; + +var node_eachAfter = function(callback) { + var node = this, nodes = [node], next = [], children, i, n; + while (node = nodes.pop()) { + next.push(node), children = node.children; + if (children) for (i = 0, n = children.length; i < n; ++i) { + nodes.push(children[i]); + } + } + while (node = next.pop()) { + callback(node); + } + return this; +}; + +var node_sum = function(value) { + return this.eachAfter(function(node) { + var sum = +value(node.data) || 0, + children = node.children, + i = children && children.length; + while (--i >= 0) sum += children[i].value; + node.value = sum; + }); +}; + +var node_sort = function(compare) { + return this.eachBefore(function(node) { + if (node.children) { + node.children.sort(compare); + } + }); +}; + +var node_path = function(end) { + var start = this, + ancestor = leastCommonAncestor(start, end), + nodes = [start]; + while (start !== ancestor) { + start = start.parent; + nodes.push(start); + } + var k = nodes.length; + while (end !== ancestor) { + nodes.splice(k, 0, end); + end = end.parent; + } + return nodes; +}; + +function leastCommonAncestor(a, b) { + if (a === b) return a; + var aNodes = a.ancestors(), + bNodes = b.ancestors(), + c = null; + a = aNodes.pop(); + b = bNodes.pop(); + while (a === b) { + c = a; + a = aNodes.pop(); + b = bNodes.pop(); + } + return c; +} + +var node_ancestors = function() { + var node = this, nodes = [node]; + while (node = node.parent) { + nodes.push(node); + } + return nodes; +}; + +var node_descendants = function() { + var nodes = []; + this.each(function(node) { + nodes.push(node); + }); + return nodes; +}; + +var node_leaves = function() { + var leaves = []; + this.eachBefore(function(node) { + if (!node.children) { + leaves.push(node); + } + }); + return leaves; +}; + +var node_links = function() { + var root = this, links = []; + root.each(function(node) { + if (node !== root) { // Don’t include the root’s parent, if any. + links.push({source: node.parent, target: node}); + } + }); + return links; +}; + +function hierarchy(data, children) { + var root = new Node(data), + valued = +data.value && (root.value = data.value), + node, + nodes = [root], + child, + childs, + i, + n; + + if (children == null) children = defaultChildren; + + while (node = nodes.pop()) { + if (valued) node.value = +node.data.value; + if ((childs = children(node.data)) && (n = childs.length)) { + node.children = new Array(n); + for (i = n - 1; i >= 0; --i) { + nodes.push(child = node.children[i] = new Node(childs[i])); + child.parent = node; + child.depth = node.depth + 1; + } + } + } + + return root.eachBefore(computeHeight); +} + +function node_copy() { + return hierarchy(this).eachBefore(copyData); +} + +function defaultChildren(d) { + return d.children; +} + +function copyData(node) { + node.data = node.data.data; +} + +function computeHeight(node) { + var height = 0; + do node.height = height; + while ((node = node.parent) && (node.height < ++height)); +} + +function Node(data) { + this.data = data; + this.depth = + this.height = 0; + this.parent = null; +} + +Node.prototype = hierarchy.prototype = { + constructor: Node, + each: node_each, + eachAfter: node_eachAfter, + eachBefore: node_eachBefore, + sum: node_sum, + sort: node_sort, + path: node_path, + ancestors: node_ancestors, + descendants: node_descendants, + leaves: node_leaves, + links: node_links, + copy: node_copy +}; + +function Node$2(value) { + this._ = value; + this.next = null; +} + +var shuffle$1 = function(array) { + var i, + n = (array = array.slice()).length, + head = null, + node = head; + + while (n) { + var next = new Node$2(array[n - 1]); + if (node) node = node.next = next; + else node = head = next; + array[i] = array[--n]; + } + + return { + head: head, + tail: node + }; +}; + +var enclose = function(circles) { + return encloseN(shuffle$1(circles), []); +}; + +function encloses(a, b) { + var dx = b.x - a.x, + dy = b.y - a.y, + dr = a.r - b.r; + return dr * dr + 1e-6 > dx * dx + dy * dy; +} + +// Returns the smallest circle that contains circles L and intersects circles B. +function encloseN(L, B) { + var circle, + l0 = null, + l1 = L.head, + l2, + p1; + + switch (B.length) { + case 1: circle = enclose1(B[0]); break; + case 2: circle = enclose2(B[0], B[1]); break; + case 3: circle = enclose3(B[0], B[1], B[2]); break; + } + + while (l1) { + p1 = l1._, l2 = l1.next; + if (!circle || !encloses(circle, p1)) { + + // Temporarily truncate L before l1. + if (l0) L.tail = l0, l0.next = null; + else L.head = L.tail = null; + + B.push(p1); + circle = encloseN(L, B); // Note: reorders L! + B.pop(); + + // Move l1 to the front of L and reconnect the truncated list L. + if (L.head) l1.next = L.head, L.head = l1; + else l1.next = null, L.head = L.tail = l1; + l0 = L.tail, l0.next = l2; + + } else { + l0 = l1; + } + l1 = l2; + } + + L.tail = l0; + return circle; +} + +function enclose1(a) { + return { + x: a.x, + y: a.y, + r: a.r + }; +} + +function enclose2(a, b) { + var x1 = a.x, y1 = a.y, r1 = a.r, + x2 = b.x, y2 = b.y, r2 = b.r, + x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1, + l = Math.sqrt(x21 * x21 + y21 * y21); + return { + x: (x1 + x2 + x21 / l * r21) / 2, + y: (y1 + y2 + y21 / l * r21) / 2, + r: (l + r1 + r2) / 2 + }; +} + +function enclose3(a, b, c) { + var x1 = a.x, y1 = a.y, r1 = a.r, + x2 = b.x, y2 = b.y, r2 = b.r, + x3 = c.x, y3 = c.y, r3 = c.r, + a2 = 2 * (x1 - x2), + b2 = 2 * (y1 - y2), + c2 = 2 * (r2 - r1), + d2 = x1 * x1 + y1 * y1 - r1 * r1 - x2 * x2 - y2 * y2 + r2 * r2, + a3 = 2 * (x1 - x3), + b3 = 2 * (y1 - y3), + c3 = 2 * (r3 - r1), + d3 = x1 * x1 + y1 * y1 - r1 * r1 - x3 * x3 - y3 * y3 + r3 * r3, + ab = a3 * b2 - a2 * b3, + xa = (b2 * d3 - b3 * d2) / ab - x1, + xb = (b3 * c2 - b2 * c3) / ab, + ya = (a3 * d2 - a2 * d3) / ab - y1, + yb = (a2 * c3 - a3 * c2) / ab, + A = xb * xb + yb * yb - 1, + B = 2 * (xa * xb + ya * yb + r1), + C = xa * xa + ya * ya - r1 * r1, + r = (-B - Math.sqrt(B * B - 4 * A * C)) / (2 * A); + return { + x: xa + xb * r + x1, + y: ya + yb * r + y1, + r: r + }; +} + +function place(a, b, c) { + var ax = a.x, + ay = a.y, + da = b.r + c.r, + db = a.r + c.r, + dx = b.x - ax, + dy = b.y - ay, + dc = dx * dx + dy * dy; + if (dc) { + var x = 0.5 + ((db *= db) - (da *= da)) / (2 * dc), + y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc); + c.x = ax + x * dx + y * dy; + c.y = ay + x * dy - y * dx; + } else { + c.x = ax + db; + c.y = ay; + } +} + +function intersects(a, b) { + var dx = b.x - a.x, + dy = b.y - a.y, + dr = a.r + b.r; + return dr * dr > dx * dx + dy * dy; +} + +function distance2(circle, x, y) { + var dx = circle.x - x, + dy = circle.y - y; + return dx * dx + dy * dy; +} + +function Node$1(circle) { + this._ = circle; + this.next = null; + this.previous = null; +} + +function packEnclose(circles) { + if (!(n = circles.length)) return 0; + + var a, b, c, n; + + // Place the first circle. + a = circles[0], a.x = 0, a.y = 0; + if (!(n > 1)) return a.r; + + // Place the second circle. + b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0; + if (!(n > 2)) return a.r + b.r; + + // Place the third circle. + place(b, a, c = circles[2]); + + // Initialize the weighted centroid. + var aa = a.r * a.r, + ba = b.r * b.r, + ca = c.r * c.r, + oa = aa + ba + ca, + ox = aa * a.x + ba * b.x + ca * c.x, + oy = aa * a.y + ba * b.y + ca * c.y, + cx, cy, i, j, k, sj, sk; + + // Initialize the front-chain using the first three circles a, b and c. + a = new Node$1(a), b = new Node$1(b), c = new Node$1(c); + a.next = c.previous = b; + b.next = a.previous = c; + c.next = b.previous = a; + + // Attempt to place each remaining circle… + pack: for (i = 3; i < n; ++i) { + place(a._, b._, c = circles[i]), c = new Node$1(c); + + // If there are only three elements in the front-chain… + if ((k = a.previous) === (j = b.next)) { + // If the new circle intersects the third circle, + // rotate the front chain to try the next position. + if (intersects(j._, c._)) { + a = b, b = j, --i; + continue pack; + } + } + + // Find the closest intersecting circle on the front-chain, if any. + else { + sj = j._.r, sk = k._.r; + do { + if (sj <= sk) { + if (intersects(j._, c._)) { + b = j, a.next = b, b.previous = a, --i; + continue pack; + } + j = j.next, sj += j._.r; + } else { + if (intersects(k._, c._)) { + a = k, a.next = b, b.previous = a, --i; + continue pack; + } + k = k.previous, sk += k._.r; + } + } while (j !== k.next); + } + + // Success! Insert the new circle c between a and b. + c.previous = a, c.next = b, a.next = b.previous = b = c; + + // Update the weighted centroid. + oa += ca = c._.r * c._.r; + ox += ca * c._.x; + oy += ca * c._.y; + + // Compute the new closest circle a to centroid. + aa = distance2(a._, cx = ox / oa, cy = oy / oa); + while ((c = c.next) !== b) { + if ((ca = distance2(c._, cx, cy)) < aa) { + a = c, aa = ca; + } + } + b = a.next; + } + + // Compute the enclosing circle of the front chain. + a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a); + + // Translate the circles to put the enclosing circle around the origin. + for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y; + + return c.r; +} + +var siblings = function(circles) { + packEnclose(circles); + return circles; +}; + +function optional(f) { + return f == null ? null : required(f); +} + +function required(f) { + if (typeof f !== "function") throw new Error; + return f; +} + +function constantZero() { + return 0; +} + +var constant$6 = function(x) { + return function() { + return x; + }; +}; + +function defaultRadius(d) { + return Math.sqrt(d.value); +} + +var index = function() { + var radius = null, + dx = 1, + dy = 1, + padding = constantZero; + + function pack(root) { + root.x = dx / 2, root.y = dy / 2; + if (radius) { + root.eachBefore(radiusLeaf(radius)) + .eachAfter(packChildren(padding, 0.5)) + .eachBefore(translateChild(1)); + } else { + root.eachBefore(radiusLeaf(defaultRadius)) + .eachAfter(packChildren(constantZero, 1)) + .eachAfter(packChildren(padding, root.r / Math.min(dx, dy))) + .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r))); + } + return root; + } + + pack.radius = function(x) { + return arguments.length ? (radius = optional(x), pack) : radius; + }; + + pack.size = function(x) { + return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy]; + }; + + pack.padding = function(x) { + return arguments.length ? (padding = typeof x === "function" ? x : constant$6(+x), pack) : padding; + }; + + return pack; +}; + +function radiusLeaf(radius) { + return function(node) { + if (!node.children) { + node.r = Math.max(0, +radius(node) || 0); + } + }; +} + +function packChildren(padding, k) { + return function(node) { + if (children = node.children) { + var children, + i, + n = children.length, + r = padding(node) * k || 0, + e; + + if (r) for (i = 0; i < n; ++i) children[i].r += r; + e = packEnclose(children); + if (r) for (i = 0; i < n; ++i) children[i].r -= r; + node.r = e + r; + } + }; +} + +function translateChild(k) { + return function(node) { + var parent = node.parent; + node.r *= k; + if (parent) { + node.x = parent.x + k * node.x; + node.y = parent.y + k * node.y; + } + }; +} + +var roundNode = function(node) { + node.x0 = Math.round(node.x0); + node.y0 = Math.round(node.y0); + node.x1 = Math.round(node.x1); + node.y1 = Math.round(node.y1); +}; + +var treemapDice = function(parent, x0, y0, x1, y1) { + var nodes = parent.children, + node, + i = -1, + n = nodes.length, + k = parent.value && (x1 - x0) / parent.value; + + while (++i < n) { + node = nodes[i], node.y0 = y0, node.y1 = y1; + node.x0 = x0, node.x1 = x0 += node.value * k; + } +}; + +var partition = function() { + var dx = 1, + dy = 1, + padding = 0, + round = false; + + function partition(root) { + var n = root.height + 1; + root.x0 = + root.y0 = padding; + root.x1 = dx; + root.y1 = dy / n; + root.eachBefore(positionNode(dy, n)); + if (round) root.eachBefore(roundNode); + return root; + } + + function positionNode(dy, n) { + return function(node) { + if (node.children) { + treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n); + } + var x0 = node.x0, + y0 = node.y0, + x1 = node.x1 - padding, + y1 = node.y1 - padding; + if (x1 < x0) x0 = x1 = (x0 + x1) / 2; + if (y1 < y0) y0 = y1 = (y0 + y1) / 2; + node.x0 = x0; + node.y0 = y0; + node.x1 = x1; + node.y1 = y1; + }; + } + + partition.round = function(x) { + return arguments.length ? (round = !!x, partition) : round; + }; + + partition.size = function(x) { + return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy]; + }; + + partition.padding = function(x) { + return arguments.length ? (padding = +x, partition) : padding; + }; + + return partition; +}; + +var keyPrefix$1 = "$"; +var preroot = {depth: -1}; +var ambiguous = {}; + +function defaultId(d) { + return d.id; +} + +function defaultParentId(d) { + return d.parentId; +} + +var stratify = function() { + var id = defaultId, + parentId = defaultParentId; + + function stratify(data) { + var d, + i, + n = data.length, + root, + parent, + node, + nodes = new Array(n), + nodeId, + nodeKey, + nodeByKey = {}; + + for (i = 0; i < n; ++i) { + d = data[i], node = nodes[i] = new Node(d); + if ((nodeId = id(d, i, data)) != null && (nodeId += "")) { + nodeKey = keyPrefix$1 + (node.id = nodeId); + nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node; + } + } + + for (i = 0; i < n; ++i) { + node = nodes[i], nodeId = parentId(data[i], i, data); + if (nodeId == null || !(nodeId += "")) { + if (root) throw new Error("multiple roots"); + root = node; + } else { + parent = nodeByKey[keyPrefix$1 + nodeId]; + if (!parent) throw new Error("missing: " + nodeId); + if (parent === ambiguous) throw new Error("ambiguous: " + nodeId); + if (parent.children) parent.children.push(node); + else parent.children = [node]; + node.parent = parent; + } + } + + if (!root) throw new Error("no root"); + root.parent = preroot; + root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight); + root.parent = null; + if (n > 0) throw new Error("cycle"); + + return root; + } + + stratify.id = function(x) { + return arguments.length ? (id = required(x), stratify) : id; + }; + + stratify.parentId = function(x) { + return arguments.length ? (parentId = required(x), stratify) : parentId; + }; + + return stratify; +}; + +function defaultSeparation$1(a, b) { + return a.parent === b.parent ? 1 : 2; +} + +// function radialSeparation(a, b) { +// return (a.parent === b.parent ? 1 : 2) / a.depth; +// } + +// This function is used to traverse the left contour of a subtree (or +// subforest). It returns the successor of v on this contour. This successor is +// either given by the leftmost child of v or by the thread of v. The function +// returns null if and only if v is on the highest level of its subtree. +function nextLeft(v) { + var children = v.children; + return children ? children[0] : v.t; +} + +// This function works analogously to nextLeft. +function nextRight(v) { + var children = v.children; + return children ? children[children.length - 1] : v.t; +} + +// Shifts the current subtree rooted at w+. This is done by increasing +// prelim(w+) and mod(w+) by shift. +function moveSubtree(wm, wp, shift) { + var change = shift / (wp.i - wm.i); + wp.c -= change; + wp.s += shift; + wm.c += change; + wp.z += shift; + wp.m += shift; +} + +// All other shifts, applied to the smaller subtrees between w- and w+, are +// performed by this function. To prepare the shifts, we have to adjust +// change(w+), shift(w+), and change(w-). +function executeShifts(v) { + var shift = 0, + change = 0, + children = v.children, + i = children.length, + w; + while (--i >= 0) { + w = children[i]; + w.z += shift; + w.m += shift; + shift += w.s + (change += w.c); + } +} + +// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise, +// returns the specified (default) ancestor. +function nextAncestor(vim, v, ancestor) { + return vim.a.parent === v.parent ? vim.a : ancestor; +} + +function TreeNode(node, i) { + this._ = node; + this.parent = null; + this.children = null; + this.A = null; // default ancestor + this.a = this; // ancestor + this.z = 0; // prelim + this.m = 0; // mod + this.c = 0; // change + this.s = 0; // shift + this.t = null; // thread + this.i = i; // number +} + +TreeNode.prototype = Object.create(Node.prototype); + +function treeRoot(root) { + var tree = new TreeNode(root, 0), + node, + nodes = [tree], + child, + children, + i, + n; + + while (node = nodes.pop()) { + if (children = node._.children) { + node.children = new Array(n = children.length); + for (i = n - 1; i >= 0; --i) { + nodes.push(child = node.children[i] = new TreeNode(children[i], i)); + child.parent = node; + } + } + } + + (tree.parent = new TreeNode(null, 0)).children = [tree]; + return tree; +} + +// Node-link tree diagram using the Reingold-Tilford "tidy" algorithm +var tree = function() { + var separation = defaultSeparation$1, + dx = 1, + dy = 1, + nodeSize = null; + + function tree(root) { + var t = treeRoot(root); + + // Compute the layout using Buchheim et al.’s algorithm. + t.eachAfter(firstWalk), t.parent.m = -t.z; + t.eachBefore(secondWalk); + + // If a fixed node size is specified, scale x and y. + if (nodeSize) root.eachBefore(sizeNode); + + // If a fixed tree size is specified, scale x and y based on the extent. + // Compute the left-most, right-most, and depth-most nodes for extents. + else { + var left = root, + right = root, + bottom = root; + root.eachBefore(function(node) { + if (node.x < left.x) left = node; + if (node.x > right.x) right = node; + if (node.depth > bottom.depth) bottom = node; + }); + var s = left === right ? 1 : separation(left, right) / 2, + tx = s - left.x, + kx = dx / (right.x + s + tx), + ky = dy / (bottom.depth || 1); + root.eachBefore(function(node) { + node.x = (node.x + tx) * kx; + node.y = node.depth * ky; + }); + } + + return root; + } + + // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is + // applied recursively to the children of v, as well as the function + // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the + // node v is placed to the midpoint of its outermost children. + function firstWalk(v) { + var children = v.children, + siblings = v.parent.children, + w = v.i ? siblings[v.i - 1] : null; + if (children) { + executeShifts(v); + var midpoint = (children[0].z + children[children.length - 1].z) / 2; + if (w) { + v.z = w.z + separation(v._, w._); + v.m = v.z - midpoint; + } else { + v.z = midpoint; + } + } else if (w) { + v.z = w.z + separation(v._, w._); + } + v.parent.A = apportion(v, w, v.parent.A || siblings[0]); + } + + // Computes all real x-coordinates by summing up the modifiers recursively. + function secondWalk(v) { + v._.x = v.z + v.parent.m; + v.m += v.parent.m; + } + + // The core of the algorithm. Here, a new subtree is combined with the + // previous subtrees. Threads are used to traverse the inside and outside + // contours of the left and right subtree up to the highest common level. The + // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the + // superscript o means outside and i means inside, the subscript - means left + // subtree and + means right subtree. For summing up the modifiers along the + // contour, we use respective variables si+, si-, so-, and so+. Whenever two + // nodes of the inside contours conflict, we compute the left one of the + // greatest uncommon ancestors using the function ANCESTOR and call MOVE + // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees. + // Finally, we add a new thread (if necessary). + function apportion(v, w, ancestor) { + if (w) { + var vip = v, + vop = v, + vim = w, + vom = vip.parent.children[0], + sip = vip.m, + sop = vop.m, + sim = vim.m, + som = vom.m, + shift; + while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) { + vom = nextLeft(vom); + vop = nextRight(vop); + vop.a = v; + shift = vim.z + sim - vip.z - sip + separation(vim._, vip._); + if (shift > 0) { + moveSubtree(nextAncestor(vim, v, ancestor), v, shift); + sip += shift; + sop += shift; + } + sim += vim.m; + sip += vip.m; + som += vom.m; + sop += vop.m; + } + if (vim && !nextRight(vop)) { + vop.t = vim; + vop.m += sim - sop; + } + if (vip && !nextLeft(vom)) { + vom.t = vip; + vom.m += sip - som; + ancestor = v; + } + } + return ancestor; + } + + function sizeNode(node) { + node.x *= dx; + node.y = node.depth * dy; + } + + tree.separation = function(x) { + return arguments.length ? (separation = x, tree) : separation; + }; + + tree.size = function(x) { + return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]); + }; + + tree.nodeSize = function(x) { + return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null); + }; + + return tree; +}; + +var treemapSlice = function(parent, x0, y0, x1, y1) { + var nodes = parent.children, + node, + i = -1, + n = nodes.length, + k = parent.value && (y1 - y0) / parent.value; + + while (++i < n) { + node = nodes[i], node.x0 = x0, node.x1 = x1; + node.y0 = y0, node.y1 = y0 += node.value * k; + } +}; + +var phi = (1 + Math.sqrt(5)) / 2; + +function squarifyRatio(ratio, parent, x0, y0, x1, y1) { + var rows = [], + nodes = parent.children, + row, + nodeValue, + i0 = 0, + i1, + n = nodes.length, + dx, dy, + value = parent.value, + sumValue, + minValue, + maxValue, + newRatio, + minRatio, + alpha, + beta; + + while (i0 < n) { + dx = x1 - x0, dy = y1 - y0; + minValue = maxValue = sumValue = nodes[i0].value; + alpha = Math.max(dy / dx, dx / dy) / (value * ratio); + beta = sumValue * sumValue * alpha; + minRatio = Math.max(maxValue / beta, beta / minValue); + + // Keep adding nodes while the aspect ratio maintains or improves. + for (i1 = i0 + 1; i1 < n; ++i1) { + sumValue += nodeValue = nodes[i1].value; + if (nodeValue < minValue) minValue = nodeValue; + if (nodeValue > maxValue) maxValue = nodeValue; + beta = sumValue * sumValue * alpha; + newRatio = Math.max(maxValue / beta, beta / minValue); + if (newRatio > minRatio) { sumValue -= nodeValue; break; } + minRatio = newRatio; + } + + // Position and record the row orientation. + rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)}); + if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1); + else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1); + value -= sumValue, i0 = i1; + } + + return rows; +} + +var squarify = (function custom(ratio) { + + function squarify(parent, x0, y0, x1, y1) { + squarifyRatio(ratio, parent, x0, y0, x1, y1); + } + + squarify.ratio = function(x) { + return custom((x = +x) > 1 ? x : 1); + }; + + return squarify; +})(phi); + +var index$1 = function() { + var tile = squarify, + round = false, + dx = 1, + dy = 1, + paddingStack = [0], + paddingInner = constantZero, + paddingTop = constantZero, + paddingRight = constantZero, + paddingBottom = constantZero, + paddingLeft = constantZero; + + function treemap(root) { + root.x0 = + root.y0 = 0; + root.x1 = dx; + root.y1 = dy; + root.eachBefore(positionNode); + paddingStack = [0]; + if (round) root.eachBefore(roundNode); + return root; + } + + function positionNode(node) { + var p = paddingStack[node.depth], + x0 = node.x0 + p, + y0 = node.y0 + p, + x1 = node.x1 - p, + y1 = node.y1 - p; + if (x1 < x0) x0 = x1 = (x0 + x1) / 2; + if (y1 < y0) y0 = y1 = (y0 + y1) / 2; + node.x0 = x0; + node.y0 = y0; + node.x1 = x1; + node.y1 = y1; + if (node.children) { + p = paddingStack[node.depth + 1] = paddingInner(node) / 2; + x0 += paddingLeft(node) - p; + y0 += paddingTop(node) - p; + x1 -= paddingRight(node) - p; + y1 -= paddingBottom(node) - p; + if (x1 < x0) x0 = x1 = (x0 + x1) / 2; + if (y1 < y0) y0 = y1 = (y0 + y1) / 2; + tile(node, x0, y0, x1, y1); + } + } + + treemap.round = function(x) { + return arguments.length ? (round = !!x, treemap) : round; + }; + + treemap.size = function(x) { + return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy]; + }; + + treemap.tile = function(x) { + return arguments.length ? (tile = required(x), treemap) : tile; + }; + + treemap.padding = function(x) { + return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner(); + }; + + treemap.paddingInner = function(x) { + return arguments.length ? (paddingInner = typeof x === "function" ? x : constant$6(+x), treemap) : paddingInner; + }; + + treemap.paddingOuter = function(x) { + return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop(); + }; + + treemap.paddingTop = function(x) { + return arguments.length ? (paddingTop = typeof x === "function" ? x : constant$6(+x), treemap) : paddingTop; + }; + + treemap.paddingRight = function(x) { + return arguments.length ? (paddingRight = typeof x === "function" ? x : constant$6(+x), treemap) : paddingRight; + }; + + treemap.paddingBottom = function(x) { + return arguments.length ? (paddingBottom = typeof x === "function" ? x : constant$6(+x), treemap) : paddingBottom; + }; + + treemap.paddingLeft = function(x) { + return arguments.length ? (paddingLeft = typeof x === "function" ? x : constant$6(+x), treemap) : paddingLeft; + }; + + return treemap; +}; + +var binary = function(parent, x0, y0, x1, y1) { + var nodes = parent.children, + i, n = nodes.length, + sum, sums = new Array(n + 1); + + for (sums[0] = sum = i = 0; i < n; ++i) { + sums[i + 1] = sum += nodes[i].value; + } + + partition(0, n, parent.value, x0, y0, x1, y1); + + function partition(i, j, value, x0, y0, x1, y1) { + if (i >= j - 1) { + var node = nodes[i]; + node.x0 = x0, node.y0 = y0; + node.x1 = x1, node.y1 = y1; + return; + } + + var valueOffset = sums[i], + valueTarget = (value / 2) + valueOffset, + k = i + 1, + hi = j - 1; + + while (k < hi) { + var mid = k + hi >>> 1; + if (sums[mid] < valueTarget) k = mid + 1; + else hi = mid; + } + + var valueLeft = sums[k] - valueOffset, + valueRight = value - valueLeft; + + if ((y1 - y0) > (x1 - x0)) { + var yk = (y0 * valueRight + y1 * valueLeft) / value; + partition(i, k, valueLeft, x0, y0, x1, yk); + partition(k, j, valueRight, x0, yk, x1, y1); + } else { + var xk = (x0 * valueRight + x1 * valueLeft) / value; + partition(i, k, valueLeft, x0, y0, xk, y1); + partition(k, j, valueRight, xk, y0, x1, y1); + } + } +}; + +var sliceDice = function(parent, x0, y0, x1, y1) { + (parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1); +}; + +var resquarify = (function custom(ratio) { + + function resquarify(parent, x0, y0, x1, y1) { + if ((rows = parent._squarify) && (rows.ratio === ratio)) { + var rows, + row, + nodes, + i, + j = -1, + n, + m = rows.length, + value = parent.value; + + while (++j < m) { + row = rows[j], nodes = row.children; + for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value; + if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value); + else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1); + value -= row.value; + } + } else { + parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1); + rows.ratio = ratio; + } + } + + resquarify.ratio = function(x) { + return custom((x = +x) > 1 ? x : 1); + }; + + return resquarify; +})(phi); + +var center$1 = function(x, y) { + var nodes; + + if (x == null) x = 0; + if (y == null) y = 0; + + function force() { + var i, + n = nodes.length, + node, + sx = 0, + sy = 0; + + for (i = 0; i < n; ++i) { + node = nodes[i], sx += node.x, sy += node.y; + } + + for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) { + node = nodes[i], node.x -= sx, node.y -= sy; + } + } + + force.initialize = function(_) { + nodes = _; + }; + + force.x = function(_) { + return arguments.length ? (x = +_, force) : x; + }; + + force.y = function(_) { + return arguments.length ? (y = +_, force) : y; + }; + + return force; +}; + +var constant$7 = function(x) { + return function() { + return x; + }; +}; + +var jiggle = function() { + return (Math.random() - 0.5) * 1e-6; +}; + +function x$1(d) { + return d.x + d.vx; +} + +function y$1(d) { + return d.y + d.vy; +} + +var collide = function(radius) { + var nodes, + radii, + strength = 1, + iterations = 1; + + if (typeof radius !== "function") radius = constant$7(radius == null ? 1 : +radius); + + function force() { + var i, n = nodes.length, + tree, + node, + xi, + yi, + ri, + ri2; + + for (var k = 0; k < iterations; ++k) { + tree = quadtree(nodes, x$1, y$1).visitAfter(prepare); + for (i = 0; i < n; ++i) { + node = nodes[i]; + ri = radii[i], ri2 = ri * ri; + xi = node.x + node.vx; + yi = node.y + node.vy; + tree.visit(apply); + } + } + + function apply(quad, x0, y0, x1, y1) { + var data = quad.data, rj = quad.r, r = ri + rj; + if (data) { + if (data.index > i) { + var x = xi - data.x - data.vx, + y = yi - data.y - data.vy, + l = x * x + y * y; + if (l < r * r) { + if (x === 0) x = jiggle(), l += x * x; + if (y === 0) y = jiggle(), l += y * y; + l = (r - (l = Math.sqrt(l))) / l * strength; + node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj)); + node.vy += (y *= l) * r; + data.vx -= x * (r = 1 - r); + data.vy -= y * r; + } + } + return; + } + return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r; + } + } + + function prepare(quad) { + if (quad.data) return quad.r = radii[quad.data.index]; + for (var i = quad.r = 0; i < 4; ++i) { + if (quad[i] && quad[i].r > quad.r) { + quad.r = quad[i].r; + } + } + } + + function initialize() { + if (!nodes) return; + var i, n = nodes.length; + radii = new Array(n); + for (i = 0; i < n; ++i) radii[i] = +radius(nodes[i], i, nodes); + } + + force.initialize = function(_) { + nodes = _; + initialize(); + }; + + force.iterations = function(_) { + return arguments.length ? (iterations = +_, force) : iterations; + }; + + force.strength = function(_) { + return arguments.length ? (strength = +_, force) : strength; + }; + + force.radius = function(_) { + return arguments.length ? (radius = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : radius; + }; + + return force; +}; + +function index$2(d, i) { + return i; +} + +function find(nodeById, nodeId) { + var node = nodeById.get(nodeId); + if (!node) throw new Error("missing: " + nodeId); + return node; +} + +var link = function(links) { + var id = index$2, + strength = defaultStrength, + strengths, + distance = constant$7(30), + distances, + nodes, + count, + bias, + iterations = 1; + + if (links == null) links = []; + + function defaultStrength(link) { + return 1 / Math.min(count[link.source.index], count[link.target.index]); + } + + function force(alpha) { + for (var k = 0, n = links.length; k < iterations; ++k) { + for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) { + link = links[i], source = link.source, target = link.target; + x = target.x + target.vx - source.x - source.vx || jiggle(); + y = target.y + target.vy - source.y - source.vy || jiggle(); + l = Math.sqrt(x * x + y * y); + l = (l - distances[i]) / l * alpha * strengths[i]; + x *= l, y *= l; + target.vx -= x * (b = bias[i]); + target.vy -= y * b; + source.vx += x * (b = 1 - b); + source.vy += y * b; + } + } + } + + function initialize() { + if (!nodes) return; + + var i, + n = nodes.length, + m = links.length, + nodeById = map$1(nodes, id), + link; + + for (i = 0, count = new Array(n); i < n; ++i) { + count[i] = 0; + } + + for (i = 0; i < m; ++i) { + link = links[i], link.index = i; + if (typeof link.source !== "object") link.source = find(nodeById, link.source); + if (typeof link.target !== "object") link.target = find(nodeById, link.target); + ++count[link.source.index], ++count[link.target.index]; + } + + for (i = 0, bias = new Array(m); i < m; ++i) { + link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]); + } + + strengths = new Array(m), initializeStrength(); + distances = new Array(m), initializeDistance(); + } + + function initializeStrength() { + if (!nodes) return; + + for (var i = 0, n = links.length; i < n; ++i) { + strengths[i] = +strength(links[i], i, links); + } + } + + function initializeDistance() { + if (!nodes) return; + + for (var i = 0, n = links.length; i < n; ++i) { + distances[i] = +distance(links[i], i, links); + } + } + + force.initialize = function(_) { + nodes = _; + initialize(); + }; + + force.links = function(_) { + return arguments.length ? (links = _, initialize(), force) : links; + }; + + force.id = function(_) { + return arguments.length ? (id = _, force) : id; + }; + + force.iterations = function(_) { + return arguments.length ? (iterations = +_, force) : iterations; + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initializeStrength(), force) : strength; + }; + + force.distance = function(_) { + return arguments.length ? (distance = typeof _ === "function" ? _ : constant$7(+_), initializeDistance(), force) : distance; + }; + + return force; +}; + +function x$2(d) { + return d.x; +} + +function y$2(d) { + return d.y; +} + +var initialRadius = 10; +var initialAngle = Math.PI * (3 - Math.sqrt(5)); + +var simulation = function(nodes) { + var simulation, + alpha = 1, + alphaMin = 0.001, + alphaDecay = 1 - Math.pow(alphaMin, 1 / 300), + alphaTarget = 0, + velocityDecay = 0.6, + forces = map$1(), + stepper = timer(step), + event = dispatch("tick", "end"); + + if (nodes == null) nodes = []; + + function step() { + tick(); + event.call("tick", simulation); + if (alpha < alphaMin) { + stepper.stop(); + event.call("end", simulation); + } + } + + function tick() { + var i, n = nodes.length, node; + + alpha += (alphaTarget - alpha) * alphaDecay; + + forces.each(function(force) { + force(alpha); + }); + + for (i = 0; i < n; ++i) { + node = nodes[i]; + if (node.fx == null) node.x += node.vx *= velocityDecay; + else node.x = node.fx, node.vx = 0; + if (node.fy == null) node.y += node.vy *= velocityDecay; + else node.y = node.fy, node.vy = 0; + } + } + + function initializeNodes() { + for (var i = 0, n = nodes.length, node; i < n; ++i) { + node = nodes[i], node.index = i; + if (isNaN(node.x) || isNaN(node.y)) { + var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle; + node.x = radius * Math.cos(angle); + node.y = radius * Math.sin(angle); + } + if (isNaN(node.vx) || isNaN(node.vy)) { + node.vx = node.vy = 0; + } + } + } + + function initializeForce(force) { + if (force.initialize) force.initialize(nodes); + return force; + } + + initializeNodes(); + + return simulation = { + tick: tick, + + restart: function() { + return stepper.restart(step), simulation; + }, + + stop: function() { + return stepper.stop(), simulation; + }, + + nodes: function(_) { + return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes; + }, + + alpha: function(_) { + return arguments.length ? (alpha = +_, simulation) : alpha; + }, + + alphaMin: function(_) { + return arguments.length ? (alphaMin = +_, simulation) : alphaMin; + }, + + alphaDecay: function(_) { + return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay; + }, + + alphaTarget: function(_) { + return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget; + }, + + velocityDecay: function(_) { + return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay; + }, + + force: function(name, _) { + return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name); + }, + + find: function(x, y, radius) { + var i = 0, + n = nodes.length, + dx, + dy, + d2, + node, + closest; + + if (radius == null) radius = Infinity; + else radius *= radius; + + for (i = 0; i < n; ++i) { + node = nodes[i]; + dx = x - node.x; + dy = y - node.y; + d2 = dx * dx + dy * dy; + if (d2 < radius) closest = node, radius = d2; + } + + return closest; + }, + + on: function(name, _) { + return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name); + } + }; +}; + +var manyBody = function() { + var nodes, + node, + alpha, + strength = constant$7(-30), + strengths, + distanceMin2 = 1, + distanceMax2 = Infinity, + theta2 = 0.81; + + function force(_) { + var i, n = nodes.length, tree = quadtree(nodes, x$2, y$2).visitAfter(accumulate); + for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply); + } + + function initialize() { + if (!nodes) return; + var i, n = nodes.length; + strengths = new Array(n); + for (i = 0; i < n; ++i) strengths[i] = +strength(nodes[i], i, nodes); + } + + function accumulate(quad) { + var strength = 0, q, c, x$$1, y$$1, i; + + // For internal nodes, accumulate forces from child quadrants. + if (quad.length) { + for (x$$1 = y$$1 = i = 0; i < 4; ++i) { + if ((q = quad[i]) && (c = q.value)) { + strength += c, x$$1 += c * q.x, y$$1 += c * q.y; + } + } + quad.x = x$$1 / strength; + quad.y = y$$1 / strength; + } + + // For leaf nodes, accumulate forces from coincident quadrants. + else { + q = quad; + q.x = q.data.x; + q.y = q.data.y; + do strength += strengths[q.data.index]; + while (q = q.next); + } + + quad.value = strength; + } + + function apply(quad, x1, _, x2) { + if (!quad.value) return true; + + var x$$1 = quad.x - node.x, + y$$1 = quad.y - node.y, + w = x2 - x1, + l = x$$1 * x$$1 + y$$1 * y$$1; + + // Apply the Barnes-Hut approximation if possible. + // Limit forces for very close nodes; randomize direction if coincident. + if (w * w / theta2 < l) { + if (l < distanceMax2) { + if (x$$1 === 0) x$$1 = jiggle(), l += x$$1 * x$$1; + if (y$$1 === 0) y$$1 = jiggle(), l += y$$1 * y$$1; + if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); + node.vx += x$$1 * quad.value * alpha / l; + node.vy += y$$1 * quad.value * alpha / l; + } + return true; + } + + // Otherwise, process points directly. + else if (quad.length || l >= distanceMax2) return; + + // Limit forces for very close nodes; randomize direction if coincident. + if (quad.data !== node || quad.next) { + if (x$$1 === 0) x$$1 = jiggle(), l += x$$1 * x$$1; + if (y$$1 === 0) y$$1 = jiggle(), l += y$$1 * y$$1; + if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); + } + + do if (quad.data !== node) { + w = strengths[quad.data.index] * alpha / l; + node.vx += x$$1 * w; + node.vy += y$$1 * w; + } while (quad = quad.next); + } + + force.initialize = function(_) { + nodes = _; + initialize(); + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength; + }; + + force.distanceMin = function(_) { + return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2); + }; + + force.distanceMax = function(_) { + return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2); + }; + + force.theta = function(_) { + return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2); + }; + + return force; +}; + +var x$3 = function(x) { + var strength = constant$7(0.1), + nodes, + strengths, + xz; + + if (typeof x !== "function") x = constant$7(x == null ? 0 : +x); + + function force(alpha) { + for (var i = 0, n = nodes.length, node; i < n; ++i) { + node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha; + } + } + + function initialize() { + if (!nodes) return; + var i, n = nodes.length; + strengths = new Array(n); + xz = new Array(n); + for (i = 0; i < n; ++i) { + strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes); + } + } + + force.initialize = function(_) { + nodes = _; + initialize(); + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength; + }; + + force.x = function(_) { + return arguments.length ? (x = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : x; + }; + + return force; +}; + +var y$3 = function(y) { + var strength = constant$7(0.1), + nodes, + strengths, + yz; + + if (typeof y !== "function") y = constant$7(y == null ? 0 : +y); + + function force(alpha) { + for (var i = 0, n = nodes.length, node; i < n; ++i) { + node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha; + } + } + + function initialize() { + if (!nodes) return; + var i, n = nodes.length; + strengths = new Array(n); + yz = new Array(n); + for (i = 0; i < n; ++i) { + strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes); + } + } + + force.initialize = function(_) { + nodes = _; + initialize(); + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength; + }; + + force.y = function(_) { + return arguments.length ? (y = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : y; + }; + + return force; +}; + +function nopropagation() { + exports.event.stopImmediatePropagation(); +} + +var noevent = function() { + exports.event.preventDefault(); + exports.event.stopImmediatePropagation(); +}; + +var dragDisable = function(view) { + var root = view.document.documentElement, + selection$$1 = select(view).on("dragstart.drag", noevent, true); + if ("onselectstart" in root) { + selection$$1.on("selectstart.drag", noevent, true); + } else { + root.__noselect = root.style.MozUserSelect; + root.style.MozUserSelect = "none"; + } +}; + +function yesdrag(view, noclick) { + var root = view.document.documentElement, + selection$$1 = select(view).on("dragstart.drag", null); + if (noclick) { + selection$$1.on("click.drag", noevent, true); + setTimeout(function() { selection$$1.on("click.drag", null); }, 0); + } + if ("onselectstart" in root) { + selection$$1.on("selectstart.drag", null); + } else { + root.style.MozUserSelect = root.__noselect; + delete root.__noselect; + } +} + +var constant$8 = function(x) { + return function() { + return x; + }; +}; + +function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) { + this.target = target; + this.type = type; + this.subject = subject; + this.identifier = id; + this.active = active; + this.x = x; + this.y = y; + this.dx = dx; + this.dy = dy; + this._ = dispatch; +} + +DragEvent.prototype.on = function() { + var value = this._.on.apply(this._, arguments); + return value === this._ ? this : value; +}; + +// Ignore right-click, since that should open the context menu. +function defaultFilter() { + return !exports.event.button; +} + +function defaultContainer() { + return this.parentNode; +} + +function defaultSubject(d) { + return d == null ? {x: exports.event.x, y: exports.event.y} : d; +} + +var drag = function() { + var filter = defaultFilter, + container = defaultContainer, + subject = defaultSubject, + gestures = {}, + listeners = dispatch("start", "drag", "end"), + active = 0, + mousemoving, + touchending; + + function drag(selection$$1) { + selection$$1 + .on("mousedown.drag", mousedowned) + .on("touchstart.drag", touchstarted) + .on("touchmove.drag", touchmoved) + .on("touchend.drag touchcancel.drag", touchended) + .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)"); + } + + function mousedowned() { + if (touchending || !filter.apply(this, arguments)) return; + var gesture = beforestart("mouse", container.apply(this, arguments), mouse, this, arguments); + if (!gesture) return; + select(exports.event.view).on("mousemove.drag", mousemoved, true).on("mouseup.drag", mouseupped, true); + dragDisable(exports.event.view); + nopropagation(); + mousemoving = false; + gesture("start"); + } + + function mousemoved() { + noevent(); + mousemoving = true; + gestures.mouse("drag"); + } + + function mouseupped() { + select(exports.event.view).on("mousemove.drag mouseup.drag", null); + yesdrag(exports.event.view, mousemoving); + noevent(); + gestures.mouse("end"); + } + + function touchstarted() { + if (!filter.apply(this, arguments)) return; + var touches$$1 = exports.event.changedTouches, + c = container.apply(this, arguments), + n = touches$$1.length, i, gesture; + + for (i = 0; i < n; ++i) { + if (gesture = beforestart(touches$$1[i].identifier, c, touch, this, arguments)) { + nopropagation(); + gesture("start"); + } + } + } + + function touchmoved() { + var touches$$1 = exports.event.changedTouches, + n = touches$$1.length, i, gesture; + + for (i = 0; i < n; ++i) { + if (gesture = gestures[touches$$1[i].identifier]) { + noevent(); + gesture("drag"); + } + } + } + + function touchended() { + var touches$$1 = exports.event.changedTouches, + n = touches$$1.length, i, gesture; + + if (touchending) clearTimeout(touchending); + touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed! + for (i = 0; i < n; ++i) { + if (gesture = gestures[touches$$1[i].identifier]) { + nopropagation(); + gesture("end"); + } + } + } + + function beforestart(id, container, point, that, args) { + var p = point(container, id), s, dx, dy, + sublisteners = listeners.copy(); + + if (!customEvent(new DragEvent(drag, "beforestart", s, id, active, p[0], p[1], 0, 0, sublisteners), function() { + if ((exports.event.subject = s = subject.apply(that, args)) == null) return false; + dx = s.x - p[0] || 0; + dy = s.y - p[1] || 0; + return true; + })) return; + + return function gesture(type) { + var p0 = p, n; + switch (type) { + case "start": gestures[id] = gesture, n = active++; break; + case "end": delete gestures[id], --active; // nobreak + case "drag": p = point(container, id), n = active; break; + } + customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]); + }; + } + + drag.filter = function(_) { + return arguments.length ? (filter = typeof _ === "function" ? _ : constant$8(!!_), drag) : filter; + }; + + drag.container = function(_) { + return arguments.length ? (container = typeof _ === "function" ? _ : constant$8(_), drag) : container; + }; + + drag.subject = function(_) { + return arguments.length ? (subject = typeof _ === "function" ? _ : constant$8(_), drag) : subject; + }; + + drag.on = function() { + var value = listeners.on.apply(listeners, arguments); + return value === listeners ? drag : value; + }; + + return drag; +}; + +var constant$9 = function(x) { + return function() { + return x; + }; +}; + +function x$4(d) { + return d[0]; +} + +function y$4(d) { + return d[1]; +} + +function RedBlackTree() { + this._ = null; // root node +} + +function RedBlackNode(node) { + node.U = // parent node + node.C = // color - true for red, false for black + node.L = // left node + node.R = // right node + node.P = // previous node + node.N = null; // next node +} + +RedBlackTree.prototype = { + constructor: RedBlackTree, + + insert: function(after, node) { + var parent, grandpa, uncle; + + if (after) { + node.P = after; + node.N = after.N; + if (after.N) after.N.P = node; + after.N = node; + if (after.R) { + after = after.R; + while (after.L) after = after.L; + after.L = node; + } else { + after.R = node; + } + parent = after; + } else if (this._) { + after = RedBlackFirst(this._); + node.P = null; + node.N = after; + after.P = after.L = node; + parent = after; + } else { + node.P = node.N = null; + this._ = node; + parent = null; + } + node.L = node.R = null; + node.U = parent; + node.C = true; + + after = node; + while (parent && parent.C) { + grandpa = parent.U; + if (parent === grandpa.L) { + uncle = grandpa.R; + if (uncle && uncle.C) { + parent.C = uncle.C = false; + grandpa.C = true; + after = grandpa; + } else { + if (after === parent.R) { + RedBlackRotateLeft(this, parent); + after = parent; + parent = after.U; + } + parent.C = false; + grandpa.C = true; + RedBlackRotateRight(this, grandpa); + } + } else { + uncle = grandpa.L; + if (uncle && uncle.C) { + parent.C = uncle.C = false; + grandpa.C = true; + after = grandpa; + } else { + if (after === parent.L) { + RedBlackRotateRight(this, parent); + after = parent; + parent = after.U; + } + parent.C = false; + grandpa.C = true; + RedBlackRotateLeft(this, grandpa); + } + } + parent = after.U; + } + this._.C = false; + }, + + remove: function(node) { + if (node.N) node.N.P = node.P; + if (node.P) node.P.N = node.N; + node.N = node.P = null; + + var parent = node.U, + sibling, + left = node.L, + right = node.R, + next, + red; + + if (!left) next = right; + else if (!right) next = left; + else next = RedBlackFirst(right); + + if (parent) { + if (parent.L === node) parent.L = next; + else parent.R = next; + } else { + this._ = next; + } + + if (left && right) { + red = next.C; + next.C = node.C; + next.L = left; + left.U = next; + if (next !== right) { + parent = next.U; + next.U = node.U; + node = next.R; + parent.L = node; + next.R = right; + right.U = next; + } else { + next.U = parent; + parent = next; + node = next.R; + } + } else { + red = node.C; + node = next; + } + + if (node) node.U = parent; + if (red) return; + if (node && node.C) { node.C = false; return; } + + do { + if (node === this._) break; + if (node === parent.L) { + sibling = parent.R; + if (sibling.C) { + sibling.C = false; + parent.C = true; + RedBlackRotateLeft(this, parent); + sibling = parent.R; + } + if ((sibling.L && sibling.L.C) + || (sibling.R && sibling.R.C)) { + if (!sibling.R || !sibling.R.C) { + sibling.L.C = false; + sibling.C = true; + RedBlackRotateRight(this, sibling); + sibling = parent.R; + } + sibling.C = parent.C; + parent.C = sibling.R.C = false; + RedBlackRotateLeft(this, parent); + node = this._; + break; + } + } else { + sibling = parent.L; + if (sibling.C) { + sibling.C = false; + parent.C = true; + RedBlackRotateRight(this, parent); + sibling = parent.L; + } + if ((sibling.L && sibling.L.C) + || (sibling.R && sibling.R.C)) { + if (!sibling.L || !sibling.L.C) { + sibling.R.C = false; + sibling.C = true; + RedBlackRotateLeft(this, sibling); + sibling = parent.L; + } + sibling.C = parent.C; + parent.C = sibling.L.C = false; + RedBlackRotateRight(this, parent); + node = this._; + break; + } + } + sibling.C = true; + node = parent; + parent = parent.U; + } while (!node.C); + + if (node) node.C = false; + } +}; + +function RedBlackRotateLeft(tree, node) { + var p = node, + q = node.R, + parent = p.U; + + if (parent) { + if (parent.L === p) parent.L = q; + else parent.R = q; + } else { + tree._ = q; + } + + q.U = parent; + p.U = q; + p.R = q.L; + if (p.R) p.R.U = p; + q.L = p; +} + +function RedBlackRotateRight(tree, node) { + var p = node, + q = node.L, + parent = p.U; + + if (parent) { + if (parent.L === p) parent.L = q; + else parent.R = q; + } else { + tree._ = q; + } + + q.U = parent; + p.U = q; + p.L = q.R; + if (p.L) p.L.U = p; + q.R = p; +} + +function RedBlackFirst(node) { + while (node.L) node = node.L; + return node; +} + +function createEdge(left, right, v0, v1) { + var edge = [null, null], + index = edges.push(edge) - 1; + edge.left = left; + edge.right = right; + if (v0) setEdgeEnd(edge, left, right, v0); + if (v1) setEdgeEnd(edge, right, left, v1); + cells[left.index].halfedges.push(index); + cells[right.index].halfedges.push(index); + return edge; +} + +function createBorderEdge(left, v0, v1) { + var edge = [v0, v1]; + edge.left = left; + return edge; +} + +function setEdgeEnd(edge, left, right, vertex) { + if (!edge[0] && !edge[1]) { + edge[0] = vertex; + edge.left = left; + edge.right = right; + } else if (edge.left === right) { + edge[1] = vertex; + } else { + edge[0] = vertex; + } +} + +// Liang–Barsky line clipping. +function clipEdge(edge, x0, y0, x1, y1) { + var a = edge[0], + b = edge[1], + ax = a[0], + ay = a[1], + bx = b[0], + by = b[1], + t0 = 0, + t1 = 1, + dx = bx - ax, + dy = by - ay, + r; + + r = x0 - ax; + if (!dx && r > 0) return; + r /= dx; + if (dx < 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } else if (dx > 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } + + r = x1 - ax; + if (!dx && r < 0) return; + r /= dx; + if (dx < 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } else if (dx > 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } + + r = y0 - ay; + if (!dy && r > 0) return; + r /= dy; + if (dy < 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } else if (dy > 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } + + r = y1 - ay; + if (!dy && r < 0) return; + r /= dy; + if (dy < 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } else if (dy > 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } + + if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check? + + if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy]; + if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy]; + return true; +} + +function connectEdge(edge, x0, y0, x1, y1) { + var v1 = edge[1]; + if (v1) return true; + + var v0 = edge[0], + left = edge.left, + right = edge.right, + lx = left[0], + ly = left[1], + rx = right[0], + ry = right[1], + fx = (lx + rx) / 2, + fy = (ly + ry) / 2, + fm, + fb; + + if (ry === ly) { + if (fx < x0 || fx >= x1) return; + if (lx > rx) { + if (!v0) v0 = [fx, y0]; + else if (v0[1] >= y1) return; + v1 = [fx, y1]; + } else { + if (!v0) v0 = [fx, y1]; + else if (v0[1] < y0) return; + v1 = [fx, y0]; + } + } else { + fm = (lx - rx) / (ry - ly); + fb = fy - fm * fx; + if (fm < -1 || fm > 1) { + if (lx > rx) { + if (!v0) v0 = [(y0 - fb) / fm, y0]; + else if (v0[1] >= y1) return; + v1 = [(y1 - fb) / fm, y1]; + } else { + if (!v0) v0 = [(y1 - fb) / fm, y1]; + else if (v0[1] < y0) return; + v1 = [(y0 - fb) / fm, y0]; + } + } else { + if (ly < ry) { + if (!v0) v0 = [x0, fm * x0 + fb]; + else if (v0[0] >= x1) return; + v1 = [x1, fm * x1 + fb]; + } else { + if (!v0) v0 = [x1, fm * x1 + fb]; + else if (v0[0] < x0) return; + v1 = [x0, fm * x0 + fb]; + } + } + } + + edge[0] = v0; + edge[1] = v1; + return true; +} + +function clipEdges(x0, y0, x1, y1) { + var i = edges.length, + edge; + + while (i--) { + if (!connectEdge(edge = edges[i], x0, y0, x1, y1) + || !clipEdge(edge, x0, y0, x1, y1) + || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon$3 + || Math.abs(edge[0][1] - edge[1][1]) > epsilon$3)) { + delete edges[i]; + } + } +} + +function createCell(site) { + return cells[site.index] = { + site: site, + halfedges: [] + }; +} + +function cellHalfedgeAngle(cell, edge) { + var site = cell.site, + va = edge.left, + vb = edge.right; + if (site === vb) vb = va, va = site; + if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]); + if (site === va) va = edge[1], vb = edge[0]; + else va = edge[0], vb = edge[1]; + return Math.atan2(va[0] - vb[0], vb[1] - va[1]); +} + +function cellHalfedgeStart(cell, edge) { + return edge[+(edge.left !== cell.site)]; +} + +function cellHalfedgeEnd(cell, edge) { + return edge[+(edge.left === cell.site)]; +} + +function sortCellHalfedges() { + for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) { + if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) { + var index = new Array(m), + array = new Array(m); + for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]); + index.sort(function(i, j) { return array[j] - array[i]; }); + for (j = 0; j < m; ++j) array[j] = halfedges[index[j]]; + for (j = 0; j < m; ++j) halfedges[j] = array[j]; + } + } +} + +function clipCells(x0, y0, x1, y1) { + var nCells = cells.length, + iCell, + cell, + site, + iHalfedge, + halfedges, + nHalfedges, + start, + startX, + startY, + end, + endX, + endY, + cover = true; + + for (iCell = 0; iCell < nCells; ++iCell) { + if (cell = cells[iCell]) { + site = cell.site; + halfedges = cell.halfedges; + iHalfedge = halfedges.length; + + // Remove any dangling clipped edges. + while (iHalfedge--) { + if (!edges[halfedges[iHalfedge]]) { + halfedges.splice(iHalfedge, 1); + } + } + + // Insert any border edges as necessary. + iHalfedge = 0, nHalfedges = halfedges.length; + while (iHalfedge < nHalfedges) { + end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1]; + start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1]; + if (Math.abs(endX - startX) > epsilon$3 || Math.abs(endY - startY) > epsilon$3) { + halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end, + Math.abs(endX - x0) < epsilon$3 && y1 - endY > epsilon$3 ? [x0, Math.abs(startX - x0) < epsilon$3 ? startY : y1] + : Math.abs(endY - y1) < epsilon$3 && x1 - endX > epsilon$3 ? [Math.abs(startY - y1) < epsilon$3 ? startX : x1, y1] + : Math.abs(endX - x1) < epsilon$3 && endY - y0 > epsilon$3 ? [x1, Math.abs(startX - x1) < epsilon$3 ? startY : y0] + : Math.abs(endY - y0) < epsilon$3 && endX - x0 > epsilon$3 ? [Math.abs(startY - y0) < epsilon$3 ? startX : x0, y0] + : null)) - 1); + ++nHalfedges; + } + } + + if (nHalfedges) cover = false; + } + } + + // If there weren’t any edges, have the closest site cover the extent. + // It doesn’t matter which corner of the extent we measure! + if (cover) { + var dx, dy, d2, dc = Infinity; + + for (iCell = 0, cover = null; iCell < nCells; ++iCell) { + if (cell = cells[iCell]) { + site = cell.site; + dx = site[0] - x0; + dy = site[1] - y0; + d2 = dx * dx + dy * dy; + if (d2 < dc) dc = d2, cover = cell; + } + } + + if (cover) { + var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0]; + cover.halfedges.push( + edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1, + edges.push(createBorderEdge(site, v01, v11)) - 1, + edges.push(createBorderEdge(site, v11, v10)) - 1, + edges.push(createBorderEdge(site, v10, v00)) - 1 + ); + } + } + + // Lastly delete any cells with no edges; these were entirely clipped. + for (iCell = 0; iCell < nCells; ++iCell) { + if (cell = cells[iCell]) { + if (!cell.halfedges.length) { + delete cells[iCell]; + } + } + } +} + +var circlePool = []; + +var firstCircle; + +function Circle() { + RedBlackNode(this); + this.x = + this.y = + this.arc = + this.site = + this.cy = null; +} + +function attachCircle(arc) { + var lArc = arc.P, + rArc = arc.N; + + if (!lArc || !rArc) return; + + var lSite = lArc.site, + cSite = arc.site, + rSite = rArc.site; + + if (lSite === rSite) return; + + var bx = cSite[0], + by = cSite[1], + ax = lSite[0] - bx, + ay = lSite[1] - by, + cx = rSite[0] - bx, + cy = rSite[1] - by; + + var d = 2 * (ax * cy - ay * cx); + if (d >= -epsilon2$1) return; + + var ha = ax * ax + ay * ay, + hc = cx * cx + cy * cy, + x = (cy * ha - ay * hc) / d, + y = (ax * hc - cx * ha) / d; + + var circle = circlePool.pop() || new Circle; + circle.arc = arc; + circle.site = cSite; + circle.x = x + bx; + circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom + + arc.circle = circle; + + var before = null, + node = circles._; + + while (node) { + if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) { + if (node.L) node = node.L; + else { before = node.P; break; } + } else { + if (node.R) node = node.R; + else { before = node; break; } + } + } + + circles.insert(before, circle); + if (!before) firstCircle = circle; +} + +function detachCircle(arc) { + var circle = arc.circle; + if (circle) { + if (!circle.P) firstCircle = circle.N; + circles.remove(circle); + circlePool.push(circle); + RedBlackNode(circle); + arc.circle = null; + } +} + +var beachPool = []; + +function Beach() { + RedBlackNode(this); + this.edge = + this.site = + this.circle = null; +} + +function createBeach(site) { + var beach = beachPool.pop() || new Beach; + beach.site = site; + return beach; +} + +function detachBeach(beach) { + detachCircle(beach); + beaches.remove(beach); + beachPool.push(beach); + RedBlackNode(beach); +} + +function removeBeach(beach) { + var circle = beach.circle, + x = circle.x, + y = circle.cy, + vertex = [x, y], + previous = beach.P, + next = beach.N, + disappearing = [beach]; + + detachBeach(beach); + + var lArc = previous; + while (lArc.circle + && Math.abs(x - lArc.circle.x) < epsilon$3 + && Math.abs(y - lArc.circle.cy) < epsilon$3) { + previous = lArc.P; + disappearing.unshift(lArc); + detachBeach(lArc); + lArc = previous; + } + + disappearing.unshift(lArc); + detachCircle(lArc); + + var rArc = next; + while (rArc.circle + && Math.abs(x - rArc.circle.x) < epsilon$3 + && Math.abs(y - rArc.circle.cy) < epsilon$3) { + next = rArc.N; + disappearing.push(rArc); + detachBeach(rArc); + rArc = next; + } + + disappearing.push(rArc); + detachCircle(rArc); + + var nArcs = disappearing.length, + iArc; + for (iArc = 1; iArc < nArcs; ++iArc) { + rArc = disappearing[iArc]; + lArc = disappearing[iArc - 1]; + setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex); + } + + lArc = disappearing[0]; + rArc = disappearing[nArcs - 1]; + rArc.edge = createEdge(lArc.site, rArc.site, null, vertex); + + attachCircle(lArc); + attachCircle(rArc); +} + +function addBeach(site) { + var x = site[0], + directrix = site[1], + lArc, + rArc, + dxl, + dxr, + node = beaches._; + + while (node) { + dxl = leftBreakPoint(node, directrix) - x; + if (dxl > epsilon$3) node = node.L; else { + dxr = x - rightBreakPoint(node, directrix); + if (dxr > epsilon$3) { + if (!node.R) { + lArc = node; + break; + } + node = node.R; + } else { + if (dxl > -epsilon$3) { + lArc = node.P; + rArc = node; + } else if (dxr > -epsilon$3) { + lArc = node; + rArc = node.N; + } else { + lArc = rArc = node; + } + break; + } + } + } + + createCell(site); + var newArc = createBeach(site); + beaches.insert(lArc, newArc); + + if (!lArc && !rArc) return; + + if (lArc === rArc) { + detachCircle(lArc); + rArc = createBeach(lArc.site); + beaches.insert(newArc, rArc); + newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site); + attachCircle(lArc); + attachCircle(rArc); + return; + } + + if (!rArc) { // && lArc + newArc.edge = createEdge(lArc.site, newArc.site); + return; + } + + // else lArc !== rArc + detachCircle(lArc); + detachCircle(rArc); + + var lSite = lArc.site, + ax = lSite[0], + ay = lSite[1], + bx = site[0] - ax, + by = site[1] - ay, + rSite = rArc.site, + cx = rSite[0] - ax, + cy = rSite[1] - ay, + d = 2 * (bx * cy - by * cx), + hb = bx * bx + by * by, + hc = cx * cx + cy * cy, + vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay]; + + setEdgeEnd(rArc.edge, lSite, rSite, vertex); + newArc.edge = createEdge(lSite, site, null, vertex); + rArc.edge = createEdge(site, rSite, null, vertex); + attachCircle(lArc); + attachCircle(rArc); +} + +function leftBreakPoint(arc, directrix) { + var site = arc.site, + rfocx = site[0], + rfocy = site[1], + pby2 = rfocy - directrix; + + if (!pby2) return rfocx; + + var lArc = arc.P; + if (!lArc) return -Infinity; + + site = lArc.site; + var lfocx = site[0], + lfocy = site[1], + plby2 = lfocy - directrix; + + if (!plby2) return lfocx; + + var hl = lfocx - rfocx, + aby2 = 1 / pby2 - 1 / plby2, + b = hl / plby2; + + if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx; + + return (rfocx + lfocx) / 2; +} + +function rightBreakPoint(arc, directrix) { + var rArc = arc.N; + if (rArc) return leftBreakPoint(rArc, directrix); + var site = arc.site; + return site[1] === directrix ? site[0] : Infinity; +} + +var epsilon$3 = 1e-6; +var epsilon2$1 = 1e-12; +var beaches; +var cells; +var circles; +var edges; + +function triangleArea(a, b, c) { + return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]); +} + +function lexicographic(a, b) { + return b[1] - a[1] + || b[0] - a[0]; +} + +function Diagram(sites, extent) { + var site = sites.sort(lexicographic).pop(), + x, + y, + circle; + + edges = []; + cells = new Array(sites.length); + beaches = new RedBlackTree; + circles = new RedBlackTree; + + while (true) { + circle = firstCircle; + if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) { + if (site[0] !== x || site[1] !== y) { + addBeach(site); + x = site[0], y = site[1]; + } + site = sites.pop(); + } else if (circle) { + removeBeach(circle.arc); + } else { + break; + } + } + + sortCellHalfedges(); + + if (extent) { + var x0 = +extent[0][0], + y0 = +extent[0][1], + x1 = +extent[1][0], + y1 = +extent[1][1]; + clipEdges(x0, y0, x1, y1); + clipCells(x0, y0, x1, y1); + } + + this.edges = edges; + this.cells = cells; + + beaches = + circles = + edges = + cells = null; +} + +Diagram.prototype = { + constructor: Diagram, + + polygons: function() { + var edges = this.edges; + + return this.cells.map(function(cell) { + var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); }); + polygon.data = cell.site.data; + return polygon; + }); + }, + + triangles: function() { + var triangles = [], + edges = this.edges; + + this.cells.forEach(function(cell, i) { + var site = cell.site, + halfedges = cell.halfedges, + j = -1, + m = halfedges.length, + s0, + e1 = edges[halfedges[m - 1]], + s1 = e1.left === site ? e1.right : e1.left; + + while (++j < m) { + s0 = s1; + e1 = edges[halfedges[j]]; + s1 = e1.left === site ? e1.right : e1.left; + if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) { + triangles.push([site.data, s0.data, s1.data]); + } + } + }); + + return triangles; + }, + + links: function() { + return this.edges.filter(function(edge) { + return edge.right; + }).map(function(edge) { + return { + source: edge.left.data, + target: edge.right.data + }; + }); + }, + + find: function(x, y, radius) { + var that = this, + i0, i1 = that._found || 0, + cell = that.cells[i1] || that.cells[i1 = 0], + dx = x - cell.site[0], + dy = y - cell.site[1], + d2 = dx * dx + dy * dy; + + do { + cell = that.cells[i0 = i1], i1 = null; + cell.halfedges.forEach(function(e) { + var edge = that.edges[e], v = edge.left; + if ((v === cell.site || !v) && !(v = edge.right)) return; + var vx = x - v[0], + vy = y - v[1], + v2 = vx * vx + vy * vy; + if (v2 < d2) d2 = v2, i1 = v.index; + }); + } while (i1 !== null); + + that._found = i0; + + return radius == null || d2 <= radius * radius ? cell.site : null; + } +}; + +var voronoi = function() { + var x$$1 = x$4, + y$$1 = y$4, + extent = null; + + function voronoi(data) { + return new Diagram(data.map(function(d, i) { + var s = [Math.round(x$$1(d, i, data) / epsilon$3) * epsilon$3, Math.round(y$$1(d, i, data) / epsilon$3) * epsilon$3]; + s.index = i; + s.data = d; + return s; + }), extent); + } + + voronoi.polygons = function(data) { + return voronoi(data).polygons(); + }; + + voronoi.links = function(data) { + return voronoi(data).links(); + }; + + voronoi.triangles = function(data) { + return voronoi(data).triangles(); + }; + + voronoi.x = function(_) { + return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$9(+_), voronoi) : x$$1; + }; + + voronoi.y = function(_) { + return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$9(+_), voronoi) : y$$1; + }; + + voronoi.extent = function(_) { + return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]]; + }; + + voronoi.size = function(_) { + return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]]; + }; + + return voronoi; +}; + +var constant$10 = function(x) { + return function() { + return x; + }; +}; + +function ZoomEvent(target, type, transform) { + this.target = target; + this.type = type; + this.transform = transform; +} + +function Transform(k, x, y) { + this.k = k; + this.x = x; + this.y = y; +} + +Transform.prototype = { + constructor: Transform, + scale: function(k) { + return k === 1 ? this : new Transform(this.k * k, this.x, this.y); + }, + translate: function(x, y) { + return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y); + }, + apply: function(point) { + return [point[0] * this.k + this.x, point[1] * this.k + this.y]; + }, + applyX: function(x) { + return x * this.k + this.x; + }, + applyY: function(y) { + return y * this.k + this.y; + }, + invert: function(location) { + return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k]; + }, + invertX: function(x) { + return (x - this.x) / this.k; + }, + invertY: function(y) { + return (y - this.y) / this.k; + }, + rescaleX: function(x) { + return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x)); + }, + rescaleY: function(y) { + return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y)); + }, + toString: function() { + return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")"; + } +}; + +var identity$6 = new Transform(1, 0, 0); + +transform.prototype = Transform.prototype; + +function transform(node) { + return node.__zoom || identity$6; +} + +function nopropagation$1() { + exports.event.stopImmediatePropagation(); +} + +var noevent$1 = function() { + exports.event.preventDefault(); + exports.event.stopImmediatePropagation(); +}; + +// Ignore right-click, since that should open the context menu. +function defaultFilter$1() { + return !exports.event.button; +} + +function defaultExtent() { + var e = this, w, h; + if (e instanceof SVGElement) { + e = e.ownerSVGElement || e; + w = e.width.baseVal.value; + h = e.height.baseVal.value; + } else { + w = e.clientWidth; + h = e.clientHeight; + } + return [[0, 0], [w, h]]; +} + +function defaultTransform() { + return this.__zoom || identity$6; +} + +var zoom = function() { + var filter = defaultFilter$1, + extent = defaultExtent, + k0 = 0, + k1 = Infinity, + x0 = -k1, + x1 = k1, + y0 = x0, + y1 = x1, + duration = 250, + gestures = [], + listeners = dispatch("start", "zoom", "end"), + touchstarting, + touchending, + touchDelay = 500, + wheelDelay = 150; + + function zoom(selection$$1) { + selection$$1 + .on("wheel.zoom", wheeled) + .on("mousedown.zoom", mousedowned) + .on("dblclick.zoom", dblclicked) + .on("touchstart.zoom", touchstarted) + .on("touchmove.zoom", touchmoved) + .on("touchend.zoom touchcancel.zoom", touchended) + .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)") + .property("__zoom", defaultTransform); + } + + zoom.transform = function(collection, transform) { + var selection$$1 = collection.selection ? collection.selection() : collection; + selection$$1.property("__zoom", defaultTransform); + if (collection !== selection$$1) { + schedule(collection, transform); + } else { + selection$$1.interrupt().each(function() { + gesture(this, arguments) + .start() + .zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform) + .end(); + }); + } + }; + + zoom.scaleBy = function(selection$$1, k) { + zoom.scaleTo(selection$$1, function() { + var k0 = this.__zoom.k, + k1 = typeof k === "function" ? k.apply(this, arguments) : k; + return k0 * k1; + }); + }; + + zoom.scaleTo = function(selection$$1, k) { + zoom.transform(selection$$1, function() { + var e = extent.apply(this, arguments), + t0 = this.__zoom, + p0 = centroid(e), + p1 = t0.invert(p0), + k1 = typeof k === "function" ? k.apply(this, arguments) : k; + return constrain(translate(scale(t0, k1), p0, p1), e); + }); + }; + + zoom.translateBy = function(selection$$1, x, y) { + zoom.transform(selection$$1, function() { + return constrain(this.__zoom.translate( + typeof x === "function" ? x.apply(this, arguments) : x, + typeof y === "function" ? y.apply(this, arguments) : y + ), extent.apply(this, arguments)); + }); + }; + + function scale(transform, k) { + k = Math.max(k0, Math.min(k1, k)); + return k === transform.k ? transform : new Transform(k, transform.x, transform.y); + } + + function translate(transform, p0, p1) { + var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k; + return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y); + } + + function constrain(transform, extent) { + var dx = Math.min(0, transform.invertX(extent[0][0]) - x0) || Math.max(0, transform.invertX(extent[1][0]) - x1), + dy = Math.min(0, transform.invertY(extent[0][1]) - y0) || Math.max(0, transform.invertY(extent[1][1]) - y1); + return dx || dy ? transform.translate(dx, dy) : transform; + } + + function centroid(extent) { + return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2]; + } + + function schedule(transition$$1, transform, center) { + transition$$1 + .on("start.zoom", function() { gesture(this, arguments).start(); }) + .on("interrupt.zoom end.zoom", function() { gesture(this, arguments).end(); }) + .tween("zoom", function() { + var that = this, + args = arguments, + g = gesture(that, args), + e = extent.apply(that, args), + p = center || centroid(e), + w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]), + a = that.__zoom, + b = typeof transform === "function" ? transform.apply(that, args) : transform, + i = interpolateZoom(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k)); + return function(t) { + if (t === 1) t = b; // Avoid rounding error on end. + else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); } + g.zoom(null, t); + }; + }); + } + + function gesture(that, args) { + for (var i = 0, n = gestures.length, g; i < n; ++i) { + if ((g = gestures[i]).that === that) { + return g; + } + } + return new Gesture(that, args); + } + + function Gesture(that, args) { + this.that = that; + this.args = args; + this.index = -1; + this.active = 0; + this.extent = extent.apply(that, args); + } + + Gesture.prototype = { + start: function() { + if (++this.active === 1) { + this.index = gestures.push(this) - 1; + this.emit("start"); + } + return this; + }, + zoom: function(key, transform) { + if (this.mouse && key !== "mouse") this.mouse[1] = transform.invert(this.mouse[0]); + if (this.touch0 && key !== "touch") this.touch0[1] = transform.invert(this.touch0[0]); + if (this.touch1 && key !== "touch") this.touch1[1] = transform.invert(this.touch1[0]); + this.that.__zoom = transform; + this.emit("zoom"); + return this; + }, + end: function() { + if (--this.active === 0) { + gestures.splice(this.index, 1); + this.index = -1; + this.emit("end"); + } + return this; + }, + emit: function(type) { + customEvent(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]); + } + }; + + function wheeled() { + if (!filter.apply(this, arguments)) return; + var g = gesture(this, arguments), + t = this.__zoom, + k = Math.max(k0, Math.min(k1, t.k * Math.pow(2, -exports.event.deltaY * (exports.event.deltaMode ? 120 : 1) / 500))), + p = mouse(this); + + // If the mouse is in the same location as before, reuse it. + // If there were recent wheel events, reset the wheel idle timeout. + if (g.wheel) { + if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) { + g.mouse[1] = t.invert(g.mouse[0] = p); + } + clearTimeout(g.wheel); + } + + // If this wheel event won’t trigger a transform change, ignore it. + else if (t.k === k) return; + + // Otherwise, capture the mouse point and location at the start. + else { + g.mouse = [p, t.invert(p)]; + interrupt(this); + g.start(); + } + + noevent$1(); + g.wheel = setTimeout(wheelidled, wheelDelay); + g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent)); + + function wheelidled() { + g.wheel = null; + g.end(); + } + } + + function mousedowned() { + if (touchending || !filter.apply(this, arguments)) return; + var g = gesture(this, arguments), + v = select(exports.event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true), + p = mouse(this); + + dragDisable(exports.event.view); + nopropagation$1(); + g.mouse = [p, this.__zoom.invert(p)]; + interrupt(this); + g.start(); + + function mousemoved() { + noevent$1(); + g.moved = true; + g.zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = mouse(g.that), g.mouse[1]), g.extent)); + } + + function mouseupped() { + v.on("mousemove.zoom mouseup.zoom", null); + yesdrag(exports.event.view, g.moved); + noevent$1(); + g.end(); + } + } + + function dblclicked() { + if (!filter.apply(this, arguments)) return; + var t0 = this.__zoom, + p0 = mouse(this), + p1 = t0.invert(p0), + k1 = t0.k * (exports.event.shiftKey ? 0.5 : 2), + t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments)); + + noevent$1(); + if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0); + else select(this).call(zoom.transform, t1); + } + + function touchstarted() { + if (!filter.apply(this, arguments)) return; + var g = gesture(this, arguments), + touches$$1 = exports.event.changedTouches, + n = touches$$1.length, i, t, p; + + nopropagation$1(); + for (i = 0; i < n; ++i) { + t = touches$$1[i], p = touch(this, touches$$1, t.identifier); + p = [p, this.__zoom.invert(p), t.identifier]; + if (!g.touch0) g.touch0 = p; + else if (!g.touch1) g.touch1 = p; + } + if (touchstarting) { + touchstarting = clearTimeout(touchstarting); + if (!g.touch1) return g.end(), dblclicked.apply(this, arguments); + } + if (exports.event.touches.length === n) { + touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay); + interrupt(this); + g.start(); + } + } + + function touchmoved() { + var g = gesture(this, arguments), + touches$$1 = exports.event.changedTouches, + n = touches$$1.length, i, t, p, l; + + noevent$1(); + if (touchstarting) touchstarting = clearTimeout(touchstarting); + for (i = 0; i < n; ++i) { + t = touches$$1[i], p = touch(this, touches$$1, t.identifier); + if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p; + else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p; + } + t = g.that.__zoom; + if (g.touch1) { + var p0 = g.touch0[0], l0 = g.touch0[1], + p1 = g.touch1[0], l1 = g.touch1[1], + dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp, + dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl; + t = scale(t, Math.sqrt(dp / dl)); + p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2]; + l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2]; + } + else if (g.touch0) p = g.touch0[0], l = g.touch0[1]; + else return; + g.zoom("touch", constrain(translate(t, p, l), g.extent)); + } + + function touchended() { + var g = gesture(this, arguments), + touches$$1 = exports.event.changedTouches, + n = touches$$1.length, i, t; + + nopropagation$1(); + if (touchending) clearTimeout(touchending); + touchending = setTimeout(function() { touchending = null; }, touchDelay); + for (i = 0; i < n; ++i) { + t = touches$$1[i]; + if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0; + else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1; + } + if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1; + if (!g.touch0) g.end(); + } + + zoom.filter = function(_) { + return arguments.length ? (filter = typeof _ === "function" ? _ : constant$10(!!_), zoom) : filter; + }; + + zoom.extent = function(_) { + return arguments.length ? (extent = typeof _ === "function" ? _ : constant$10([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent; + }; + + zoom.scaleExtent = function(_) { + return arguments.length ? (k0 = +_[0], k1 = +_[1], zoom) : [k0, k1]; + }; + + zoom.translateExtent = function(_) { + return arguments.length ? (x0 = +_[0][0], x1 = +_[1][0], y0 = +_[0][1], y1 = +_[1][1], zoom) : [[x0, y0], [x1, y1]]; + }; + + zoom.duration = function(_) { + return arguments.length ? (duration = +_, zoom) : duration; + }; + + zoom.on = function() { + var value = listeners.on.apply(listeners, arguments); + return value === listeners ? zoom : value; + }; + + return zoom; +}; + +var constant$11 = function(x) { + return function() { + return x; + }; +}; + +var BrushEvent = function(target, type, selection) { + this.target = target; + this.type = type; + this.selection = selection; +}; + +function nopropagation$2() { + exports.event.stopImmediatePropagation(); +} + +var noevent$2 = function() { + exports.event.preventDefault(); + exports.event.stopImmediatePropagation(); +}; + +var MODE_DRAG = {name: "drag"}; +var MODE_SPACE = {name: "space"}; +var MODE_HANDLE = {name: "handle"}; +var MODE_CENTER = {name: "center"}; + +var X = { + name: "x", + handles: ["e", "w"].map(type$1), + input: function(x, e) { return x && [[x[0], e[0][1]], [x[1], e[1][1]]]; }, + output: function(xy) { return xy && [xy[0][0], xy[1][0]]; } +}; + +var Y = { + name: "y", + handles: ["n", "s"].map(type$1), + input: function(y, e) { return y && [[e[0][0], y[0]], [e[1][0], y[1]]]; }, + output: function(xy) { return xy && [xy[0][1], xy[1][1]]; } +}; + +var XY = { + name: "xy", + handles: ["n", "e", "s", "w", "nw", "ne", "se", "sw"].map(type$1), + input: function(xy) { return xy; }, + output: function(xy) { return xy; } +}; + +var cursors = { + overlay: "crosshair", + selection: "move", + n: "ns-resize", + e: "ew-resize", + s: "ns-resize", + w: "ew-resize", + nw: "nwse-resize", + ne: "nesw-resize", + se: "nwse-resize", + sw: "nesw-resize" +}; + +var flipX = { + e: "w", + w: "e", + nw: "ne", + ne: "nw", + se: "sw", + sw: "se" +}; + +var flipY = { + n: "s", + s: "n", + nw: "sw", + ne: "se", + se: "ne", + sw: "nw" +}; + +var signsX = { + overlay: +1, + selection: +1, + n: null, + e: +1, + s: null, + w: -1, + nw: -1, + ne: +1, + se: +1, + sw: -1 +}; + +var signsY = { + overlay: +1, + selection: +1, + n: -1, + e: null, + s: +1, + w: null, + nw: -1, + ne: -1, + se: +1, + sw: +1 +}; + +function type$1(t) { + return {type: t}; +} + +// Ignore right-click, since that should open the context menu. +function defaultFilter$2() { + return !exports.event.button; +} + +function defaultExtent$1() { + var svg = this.ownerSVGElement || this; + return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]]; +} + +// Like d3.local, but with the name “__brush†rather than auto-generated. +function local$1(node) { + while (!node.__brush) if (!(node = node.parentNode)) return; + return node.__brush; +} + +function empty$1(extent) { + return extent[0][0] === extent[1][0] + || extent[0][1] === extent[1][1]; +} + +function brushSelection(node) { + var state = node.__brush; + return state ? state.dim.output(state.selection) : null; +} + +function brushX() { + return brush$1(X); +} + +function brushY() { + return brush$1(Y); +} + +var brush = function() { + return brush$1(XY); +}; + +function brush$1(dim) { + var extent = defaultExtent$1, + filter = defaultFilter$2, + listeners = dispatch(brush, "start", "brush", "end"), + handleSize = 6, + touchending; + + function brush(group) { + var overlay = group + .property("__brush", initialize) + .selectAll(".overlay") + .data([type$1("overlay")]); + + overlay.enter().append("rect") + .attr("class", "overlay") + .attr("pointer-events", "all") + .attr("cursor", cursors.overlay) + .merge(overlay) + .each(function() { + var extent = local$1(this).extent; + select(this) + .attr("x", extent[0][0]) + .attr("y", extent[0][1]) + .attr("width", extent[1][0] - extent[0][0]) + .attr("height", extent[1][1] - extent[0][1]); + }); + + group.selectAll(".selection") + .data([type$1("selection")]) + .enter().append("rect") + .attr("class", "selection") + .attr("cursor", cursors.selection) + .attr("fill", "#777") + .attr("fill-opacity", 0.3) + .attr("stroke", "#fff") + .attr("shape-rendering", "crispEdges"); + + var handle = group.selectAll(".handle") + .data(dim.handles, function(d) { return d.type; }); + + handle.exit().remove(); + + handle.enter().append("rect") + .attr("class", function(d) { return "handle handle--" + d.type; }) + .attr("cursor", function(d) { return cursors[d.type]; }); + + group + .each(redraw) + .attr("fill", "none") + .attr("pointer-events", "all") + .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)") + .on("mousedown.brush touchstart.brush", started); + } + + brush.move = function(group, selection$$1) { + if (group.selection) { + group + .on("start.brush", function() { emitter(this, arguments).beforestart().start(); }) + .on("interrupt.brush end.brush", function() { emitter(this, arguments).end(); }) + .tween("brush", function() { + var that = this, + state = that.__brush, + emit = emitter(that, arguments), + selection0 = state.selection, + selection1 = dim.input(typeof selection$$1 === "function" ? selection$$1.apply(this, arguments) : selection$$1, state.extent), + i = interpolate(selection0, selection1); + + function tween(t) { + state.selection = t === 1 && empty$1(selection1) ? null : i(t); + redraw.call(that); + emit.brush(); + } + + return selection0 && selection1 ? tween : tween(1); + }); + } else { + group + .each(function() { + var that = this, + args = arguments, + state = that.__brush, + selection1 = dim.input(typeof selection$$1 === "function" ? selection$$1.apply(that, args) : selection$$1, state.extent), + emit = emitter(that, args).beforestart(); + + interrupt(that); + state.selection = selection1 == null || empty$1(selection1) ? null : selection1; + redraw.call(that); + emit.start().brush().end(); + }); + } + }; + + function redraw() { + var group = select(this), + selection$$1 = local$1(this).selection; + + if (selection$$1) { + group.selectAll(".selection") + .style("display", null) + .attr("x", selection$$1[0][0]) + .attr("y", selection$$1[0][1]) + .attr("width", selection$$1[1][0] - selection$$1[0][0]) + .attr("height", selection$$1[1][1] - selection$$1[0][1]); + + group.selectAll(".handle") + .style("display", null) + .attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection$$1[1][0] - handleSize / 2 : selection$$1[0][0] - handleSize / 2; }) + .attr("y", function(d) { return d.type[0] === "s" ? selection$$1[1][1] - handleSize / 2 : selection$$1[0][1] - handleSize / 2; }) + .attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection$$1[1][0] - selection$$1[0][0] + handleSize : handleSize; }) + .attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection$$1[1][1] - selection$$1[0][1] + handleSize : handleSize; }); + } + + else { + group.selectAll(".selection,.handle") + .style("display", "none") + .attr("x", null) + .attr("y", null) + .attr("width", null) + .attr("height", null); + } + } + + function emitter(that, args) { + return that.__brush.emitter || new Emitter(that, args); + } + + function Emitter(that, args) { + this.that = that; + this.args = args; + this.state = that.__brush; + this.active = 0; + } + + Emitter.prototype = { + beforestart: function() { + if (++this.active === 1) this.state.emitter = this, this.starting = true; + return this; + }, + start: function() { + if (this.starting) this.starting = false, this.emit("start"); + return this; + }, + brush: function() { + this.emit("brush"); + return this; + }, + end: function() { + if (--this.active === 0) delete this.state.emitter, this.emit("end"); + return this; + }, + emit: function(type) { + customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]); + } + }; + + function started() { + if (exports.event.touches) { if (exports.event.changedTouches.length < exports.event.touches.length) return noevent$2(); } + else if (touchending) return; + if (!filter.apply(this, arguments)) return; + + var that = this, + type = exports.event.target.__data__.type, + mode = (exports.event.metaKey ? type = "overlay" : type) === "selection" ? MODE_DRAG : (exports.event.altKey ? MODE_CENTER : MODE_HANDLE), + signX = dim === Y ? null : signsX[type], + signY = dim === X ? null : signsY[type], + state = local$1(that), + extent = state.extent, + selection$$1 = state.selection, + W = extent[0][0], w0, w1, + N = extent[0][1], n0, n1, + E = extent[1][0], e0, e1, + S = extent[1][1], s0, s1, + dx, + dy, + moving, + shifting = signX && signY && exports.event.shiftKey, + lockX, + lockY, + point0 = mouse(that), + point = point0, + emit = emitter(that, arguments).beforestart(); + + if (type === "overlay") { + state.selection = selection$$1 = [ + [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]], + [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0] + ]; + } else { + w0 = selection$$1[0][0]; + n0 = selection$$1[0][1]; + e0 = selection$$1[1][0]; + s0 = selection$$1[1][1]; + } + + w1 = w0; + n1 = n0; + e1 = e0; + s1 = s0; + + var group = select(that) + .attr("pointer-events", "none"); + + var overlay = group.selectAll(".overlay") + .attr("cursor", cursors[type]); + + if (exports.event.touches) { + group + .on("touchmove.brush", moved, true) + .on("touchend.brush touchcancel.brush", ended, true); + } else { + var view = select(exports.event.view) + .on("keydown.brush", keydowned, true) + .on("keyup.brush", keyupped, true) + .on("mousemove.brush", moved, true) + .on("mouseup.brush", ended, true); + + dragDisable(exports.event.view); + } + + nopropagation$2(); + interrupt(that); + redraw.call(that); + emit.start(); + + function moved() { + var point1 = mouse(that); + if (shifting && !lockX && !lockY) { + if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true; + else lockX = true; + } + point = point1; + moving = true; + noevent$2(); + move(); + } + + function move() { + var t; + + dx = point[0] - point0[0]; + dy = point[1] - point0[1]; + + switch (mode) { + case MODE_SPACE: + case MODE_DRAG: { + if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx; + if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy; + break; + } + case MODE_HANDLE: { + if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0; + else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx; + if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0; + else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy; + break; + } + case MODE_CENTER: { + if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX)); + if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY)); + break; + } + } + + if (e1 < w1) { + signX *= -1; + t = w0, w0 = e0, e0 = t; + t = w1, w1 = e1, e1 = t; + if (type in flipX) overlay.attr("cursor", cursors[type = flipX[type]]); + } + + if (s1 < n1) { + signY *= -1; + t = n0, n0 = s0, s0 = t; + t = n1, n1 = s1, s1 = t; + if (type in flipY) overlay.attr("cursor", cursors[type = flipY[type]]); + } + + if (state.selection) selection$$1 = state.selection; // May be set by brush.move! + if (lockX) w1 = selection$$1[0][0], e1 = selection$$1[1][0]; + if (lockY) n1 = selection$$1[0][1], s1 = selection$$1[1][1]; + + if (selection$$1[0][0] !== w1 + || selection$$1[0][1] !== n1 + || selection$$1[1][0] !== e1 + || selection$$1[1][1] !== s1) { + state.selection = [[w1, n1], [e1, s1]]; + redraw.call(that); + emit.brush(); + } + } + + function ended() { + nopropagation$2(); + if (exports.event.touches) { + if (exports.event.touches.length) return; + if (touchending) clearTimeout(touchending); + touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed! + group.on("touchmove.brush touchend.brush touchcancel.brush", null); + } else { + yesdrag(exports.event.view, moving); + view.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null); + } + group.attr("pointer-events", "all"); + overlay.attr("cursor", cursors.overlay); + if (state.selection) selection$$1 = state.selection; // May be set by brush.move (on start)! + if (empty$1(selection$$1)) state.selection = null, redraw.call(that); + emit.end(); + } + + function keydowned() { + switch (exports.event.keyCode) { + case 16: { // SHIFT + shifting = signX && signY; + break; + } + case 18: { // ALT + if (mode === MODE_HANDLE) { + if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX; + if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY; + mode = MODE_CENTER; + move(); + } + break; + } + case 32: { // SPACE; takes priority over ALT + if (mode === MODE_HANDLE || mode === MODE_CENTER) { + if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx; + if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy; + mode = MODE_SPACE; + overlay.attr("cursor", cursors.selection); + move(); + } + break; + } + default: return; + } + noevent$2(); + } + + function keyupped() { + switch (exports.event.keyCode) { + case 16: { // SHIFT + if (shifting) { + lockX = lockY = shifting = false; + move(); + } + break; + } + case 18: { // ALT + if (mode === MODE_CENTER) { + if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1; + if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1; + mode = MODE_HANDLE; + move(); + } + break; + } + case 32: { // SPACE + if (mode === MODE_SPACE) { + if (exports.event.altKey) { + if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX; + if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY; + mode = MODE_CENTER; + } else { + if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1; + if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1; + mode = MODE_HANDLE; + } + overlay.attr("cursor", cursors[type]); + move(); + } + break; + } + default: return; + } + noevent$2(); + } + } + + function initialize() { + var state = this.__brush || {selection: null}; + state.extent = extent.apply(this, arguments); + state.dim = dim; + return state; + } + + brush.extent = function(_) { + return arguments.length ? (extent = typeof _ === "function" ? _ : constant$11([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), brush) : extent; + }; + + brush.filter = function(_) { + return arguments.length ? (filter = typeof _ === "function" ? _ : constant$11(!!_), brush) : filter; + }; + + brush.handleSize = function(_) { + return arguments.length ? (handleSize = +_, brush) : handleSize; + }; + + brush.on = function() { + var value = listeners.on.apply(listeners, arguments); + return value === listeners ? brush : value; + }; + + return brush; +} + +var cos = Math.cos; +var sin = Math.sin; +var pi$3 = Math.PI; +var halfPi$2 = pi$3 / 2; +var tau$3 = pi$3 * 2; +var max$1 = Math.max; + +function compareValue(compare) { + return function(a, b) { + return compare( + a.source.value + a.target.value, + b.source.value + b.target.value + ); + }; +} + +var chord = function() { + var padAngle = 0, + sortGroups = null, + sortSubgroups = null, + sortChords = null; + + function chord(matrix) { + var n = matrix.length, + groupSums = [], + groupIndex = range(n), + subgroupIndex = [], + chords = [], + groups = chords.groups = new Array(n), + subgroups = new Array(n * n), + k, + x, + x0, + dx, + i, + j; + + // Compute the sum. + k = 0, i = -1; while (++i < n) { + x = 0, j = -1; while (++j < n) { + x += matrix[i][j]; + } + groupSums.push(x); + subgroupIndex.push(range(n)); + k += x; + } + + // Sort groups… + if (sortGroups) groupIndex.sort(function(a, b) { + return sortGroups(groupSums[a], groupSums[b]); + }); + + // Sort subgroups… + if (sortSubgroups) subgroupIndex.forEach(function(d, i) { + d.sort(function(a, b) { + return sortSubgroups(matrix[i][a], matrix[i][b]); + }); + }); + + // Convert the sum to scaling factor for [0, 2pi]. + // TODO Allow start and end angle to be specified? + // TODO Allow padding to be specified as percentage? + k = max$1(0, tau$3 - padAngle * n) / k; + dx = k ? padAngle : tau$3 / n; + + // Compute the start and end angle for each group and subgroup. + // Note: Opera has a bug reordering object literal properties! + x = 0, i = -1; while (++i < n) { + x0 = x, j = -1; while (++j < n) { + var di = groupIndex[i], + dj = subgroupIndex[di][j], + v = matrix[di][dj], + a0 = x, + a1 = x += v * k; + subgroups[dj * n + di] = { + index: di, + subindex: dj, + startAngle: a0, + endAngle: a1, + value: v + }; + } + groups[di] = { + index: di, + startAngle: x0, + endAngle: x, + value: groupSums[di] + }; + x += dx; + } + + // Generate chords for each (non-empty) subgroup-subgroup link. + i = -1; while (++i < n) { + j = i - 1; while (++j < n) { + var source = subgroups[j * n + i], + target = subgroups[i * n + j]; + if (source.value || target.value) { + chords.push(source.value < target.value + ? {source: target, target: source} + : {source: source, target: target}); + } + } + } + + return sortChords ? chords.sort(sortChords) : chords; + } + + chord.padAngle = function(_) { + return arguments.length ? (padAngle = max$1(0, _), chord) : padAngle; + }; + + chord.sortGroups = function(_) { + return arguments.length ? (sortGroups = _, chord) : sortGroups; + }; + + chord.sortSubgroups = function(_) { + return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups; + }; + + chord.sortChords = function(_) { + return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._; + }; + + return chord; +}; + +var slice$5 = Array.prototype.slice; + +var constant$12 = function(x) { + return function() { + return x; + }; +}; + +function defaultSource(d) { + return d.source; +} + +function defaultTarget(d) { + return d.target; +} + +function defaultRadius$1(d) { + return d.radius; +} + +function defaultStartAngle(d) { + return d.startAngle; +} + +function defaultEndAngle(d) { + return d.endAngle; +} + +var ribbon = function() { + var source = defaultSource, + target = defaultTarget, + radius = defaultRadius$1, + startAngle = defaultStartAngle, + endAngle = defaultEndAngle, + context = null; + + function ribbon() { + var buffer, + argv = slice$5.call(arguments), + s = source.apply(this, argv), + t = target.apply(this, argv), + sr = +radius.apply(this, (argv[0] = s, argv)), + sa0 = startAngle.apply(this, argv) - halfPi$2, + sa1 = endAngle.apply(this, argv) - halfPi$2, + sx0 = sr * cos(sa0), + sy0 = sr * sin(sa0), + tr = +radius.apply(this, (argv[0] = t, argv)), + ta0 = startAngle.apply(this, argv) - halfPi$2, + ta1 = endAngle.apply(this, argv) - halfPi$2; + + if (!context) context = buffer = path(); + + context.moveTo(sx0, sy0); + context.arc(0, 0, sr, sa0, sa1); + if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr? + context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0)); + context.arc(0, 0, tr, ta0, ta1); + } + context.quadraticCurveTo(0, 0, sx0, sy0); + context.closePath(); + + if (buffer) return context = null, buffer + "" || null; + } + + ribbon.radius = function(_) { + return arguments.length ? (radius = typeof _ === "function" ? _ : constant$12(+_), ribbon) : radius; + }; + + ribbon.startAngle = function(_) { + return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$12(+_), ribbon) : startAngle; + }; + + ribbon.endAngle = function(_) { + return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$12(+_), ribbon) : endAngle; + }; + + ribbon.source = function(_) { + return arguments.length ? (source = _, ribbon) : source; + }; + + ribbon.target = function(_) { + return arguments.length ? (target = _, ribbon) : target; + }; + + ribbon.context = function(_) { + return arguments.length ? ((context = _ == null ? null : _), ribbon) : context; + }; + + return ribbon; +}; + +// Adds floating point numbers with twice the normal precision. +// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and +// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3) +// 305–363 (1997). +// Code adapted from GeographicLib by Charles F. F. Karney, +// http://geographiclib.sourceforge.net/ + +var adder = function() { + return new Adder; +}; + +function Adder() { + this.reset(); +} + +Adder.prototype = { + constructor: Adder, + reset: function() { + this.s = // rounded value + this.t = 0; // exact error + }, + add: function(y) { + add$1(temp, y, this.t); + add$1(this, temp.s, this.s); + if (this.s) this.t += temp.t; + else this.s = temp.t; + }, + valueOf: function() { + return this.s; + } +}; + +var temp = new Adder; + +function add$1(adder, a, b) { + var x = adder.s = a + b, + bv = x - a, + av = x - bv; + adder.t = (a - av) + (b - bv); +} + +var epsilon$4 = 1e-6; +var epsilon2$2 = 1e-12; +var pi$4 = Math.PI; +var halfPi$3 = pi$4 / 2; +var quarterPi = pi$4 / 4; +var tau$4 = pi$4 * 2; + +var degrees$1 = 180 / pi$4; +var radians = pi$4 / 180; + +var abs = Math.abs; +var atan = Math.atan; +var atan2 = Math.atan2; +var cos$1 = Math.cos; +var ceil = Math.ceil; +var exp = Math.exp; + +var log$1 = Math.log; +var pow$1 = Math.pow; +var sin$1 = Math.sin; +var sign$1 = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; }; +var sqrt$1 = Math.sqrt; +var tan = Math.tan; + +function acos(x) { + return x > 1 ? 0 : x < -1 ? pi$4 : Math.acos(x); +} + +function asin$1(x) { + return x > 1 ? halfPi$3 : x < -1 ? -halfPi$3 : Math.asin(x); +} + +function haversin(x) { + return (x = sin$1(x / 2)) * x; +} + +function noop$2() {} + +function streamGeometry(geometry, stream) { + if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) { + streamGeometryType[geometry.type](geometry, stream); + } +} + +var streamObjectType = { + Feature: function(feature, stream) { + streamGeometry(feature.geometry, stream); + }, + FeatureCollection: function(object, stream) { + var features = object.features, i = -1, n = features.length; + while (++i < n) streamGeometry(features[i].geometry, stream); + } +}; + +var streamGeometryType = { + Sphere: function(object, stream) { + stream.sphere(); + }, + Point: function(object, stream) { + object = object.coordinates; + stream.point(object[0], object[1], object[2]); + }, + MultiPoint: function(object, stream) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]); + }, + LineString: function(object, stream) { + streamLine(object.coordinates, stream, 0); + }, + MultiLineString: function(object, stream) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) streamLine(coordinates[i], stream, 0); + }, + Polygon: function(object, stream) { + streamPolygon(object.coordinates, stream); + }, + MultiPolygon: function(object, stream) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) streamPolygon(coordinates[i], stream); + }, + GeometryCollection: function(object, stream) { + var geometries = object.geometries, i = -1, n = geometries.length; + while (++i < n) streamGeometry(geometries[i], stream); + } +}; + +function streamLine(coordinates, stream, closed) { + var i = -1, n = coordinates.length - closed, coordinate; + stream.lineStart(); + while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]); + stream.lineEnd(); +} + +function streamPolygon(coordinates, stream) { + var i = -1, n = coordinates.length; + stream.polygonStart(); + while (++i < n) streamLine(coordinates[i], stream, 1); + stream.polygonEnd(); +} + +var geoStream = function(object, stream) { + if (object && streamObjectType.hasOwnProperty(object.type)) { + streamObjectType[object.type](object, stream); + } else { + streamGeometry(object, stream); + } +}; + +var areaRingSum = adder(); + +var areaSum = adder(); +var lambda00; +var phi00; +var lambda0; +var cosPhi0; +var sinPhi0; + +var areaStream = { + point: noop$2, + lineStart: noop$2, + lineEnd: noop$2, + polygonStart: function() { + areaRingSum.reset(); + areaStream.lineStart = areaRingStart; + areaStream.lineEnd = areaRingEnd; + }, + polygonEnd: function() { + var areaRing = +areaRingSum; + areaSum.add(areaRing < 0 ? tau$4 + areaRing : areaRing); + this.lineStart = this.lineEnd = this.point = noop$2; + }, + sphere: function() { + areaSum.add(tau$4); + } +}; + +function areaRingStart() { + areaStream.point = areaPointFirst; +} + +function areaRingEnd() { + areaPoint(lambda00, phi00); +} + +function areaPointFirst(lambda, phi) { + areaStream.point = areaPoint; + lambda00 = lambda, phi00 = phi; + lambda *= radians, phi *= radians; + lambda0 = lambda, cosPhi0 = cos$1(phi = phi / 2 + quarterPi), sinPhi0 = sin$1(phi); +} + +function areaPoint(lambda, phi) { + lambda *= radians, phi *= radians; + phi = phi / 2 + quarterPi; // half the angular distance from south pole + + // Spherical excess E for a spherical triangle with vertices: south pole, + // previous point, current point. Uses a formula derived from Cagnoli’s + // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2). + var dLambda = lambda - lambda0, + sdLambda = dLambda >= 0 ? 1 : -1, + adLambda = sdLambda * dLambda, + cosPhi = cos$1(phi), + sinPhi = sin$1(phi), + k = sinPhi0 * sinPhi, + u = cosPhi0 * cosPhi + k * cos$1(adLambda), + v = k * sdLambda * sin$1(adLambda); + areaRingSum.add(atan2(v, u)); + + // Advance the previous points. + lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi; +} + +var area$2 = function(object) { + areaSum.reset(); + geoStream(object, areaStream); + return areaSum * 2; +}; + +function spherical(cartesian) { + return [atan2(cartesian[1], cartesian[0]), asin$1(cartesian[2])]; +} + +function cartesian(spherical) { + var lambda = spherical[0], phi = spherical[1], cosPhi = cos$1(phi); + return [cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)]; +} + +function cartesianDot(a, b) { + return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; +} + +function cartesianCross(a, b) { + return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]]; +} + +// TODO return a +function cartesianAddInPlace(a, b) { + a[0] += b[0], a[1] += b[1], a[2] += b[2]; +} + +function cartesianScale(vector, k) { + return [vector[0] * k, vector[1] * k, vector[2] * k]; +} + +// TODO return d +function cartesianNormalizeInPlace(d) { + var l = sqrt$1(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]); + d[0] /= l, d[1] /= l, d[2] /= l; +} + +var lambda0$1; +var phi0; +var lambda1; +var phi1; +var lambda2; +var lambda00$1; +var phi00$1; +var p0; +var deltaSum = adder(); +var ranges; +var range$1; + +var boundsStream = { + point: boundsPoint, + lineStart: boundsLineStart, + lineEnd: boundsLineEnd, + polygonStart: function() { + boundsStream.point = boundsRingPoint; + boundsStream.lineStart = boundsRingStart; + boundsStream.lineEnd = boundsRingEnd; + deltaSum.reset(); + areaStream.polygonStart(); + }, + polygonEnd: function() { + areaStream.polygonEnd(); + boundsStream.point = boundsPoint; + boundsStream.lineStart = boundsLineStart; + boundsStream.lineEnd = boundsLineEnd; + if (areaRingSum < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90); + else if (deltaSum > epsilon$4) phi1 = 90; + else if (deltaSum < -epsilon$4) phi0 = -90; + range$1[0] = lambda0$1, range$1[1] = lambda1; + } +}; + +function boundsPoint(lambda, phi) { + ranges.push(range$1 = [lambda0$1 = lambda, lambda1 = lambda]); + if (phi < phi0) phi0 = phi; + if (phi > phi1) phi1 = phi; +} + +function linePoint(lambda, phi) { + var p = cartesian([lambda * radians, phi * radians]); + if (p0) { + var normal = cartesianCross(p0, p), + equatorial = [normal[1], -normal[0], 0], + inflection = cartesianCross(equatorial, normal); + cartesianNormalizeInPlace(inflection); + inflection = spherical(inflection); + var delta = lambda - lambda2, + sign$$1 = delta > 0 ? 1 : -1, + lambdai = inflection[0] * degrees$1 * sign$$1, + phii, + antimeridian = abs(delta) > 180; + if (antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) { + phii = inflection[1] * degrees$1; + if (phii > phi1) phi1 = phii; + } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) { + phii = -inflection[1] * degrees$1; + if (phii < phi0) phi0 = phii; + } else { + if (phi < phi0) phi0 = phi; + if (phi > phi1) phi1 = phi; + } + if (antimeridian) { + if (lambda < lambda2) { + if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda; + } else { + if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda; + } + } else { + if (lambda1 >= lambda0$1) { + if (lambda < lambda0$1) lambda0$1 = lambda; + if (lambda > lambda1) lambda1 = lambda; + } else { + if (lambda > lambda2) { + if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda; + } else { + if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda; + } + } + } + } else { + boundsPoint(lambda, phi); + } + p0 = p, lambda2 = lambda; +} + +function boundsLineStart() { + boundsStream.point = linePoint; +} + +function boundsLineEnd() { + range$1[0] = lambda0$1, range$1[1] = lambda1; + boundsStream.point = boundsPoint; + p0 = null; +} + +function boundsRingPoint(lambda, phi) { + if (p0) { + var delta = lambda - lambda2; + deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta); + } else { + lambda00$1 = lambda, phi00$1 = phi; + } + areaStream.point(lambda, phi); + linePoint(lambda, phi); +} + +function boundsRingStart() { + areaStream.lineStart(); +} + +function boundsRingEnd() { + boundsRingPoint(lambda00$1, phi00$1); + areaStream.lineEnd(); + if (abs(deltaSum) > epsilon$4) lambda0$1 = -(lambda1 = 180); + range$1[0] = lambda0$1, range$1[1] = lambda1; + p0 = null; +} + +// Finds the left-right distance between two longitudes. +// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want +// the distance between ±180° to be 360°. +function angle(lambda0, lambda1) { + return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1; +} + +function rangeCompare(a, b) { + return a[0] - b[0]; +} + +function rangeContains(range, x) { + return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x; +} + +var bounds = function(feature) { + var i, n, a, b, merged, deltaMax, delta; + + phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity); + ranges = []; + geoStream(feature, boundsStream); + + // First, sort ranges by their minimum longitudes. + if (n = ranges.length) { + ranges.sort(rangeCompare); + + // Then, merge any ranges that overlap. + for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) { + b = ranges[i]; + if (rangeContains(a, b[0]) || rangeContains(a, b[1])) { + if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1]; + if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0]; + } else { + merged.push(a = b); + } + } + + // Finally, find the largest gap between the merged ranges. + // The final bounding box will be the inverse of this gap. + for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) { + b = merged[i]; + if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1]; + } + } + + ranges = range$1 = null; + + return lambda0$1 === Infinity || phi0 === Infinity + ? [[NaN, NaN], [NaN, NaN]] + : [[lambda0$1, phi0], [lambda1, phi1]]; +}; + +var W0; +var W1; +var X0; +var Y0; +var Z0; +var X1; +var Y1; +var Z1; +var X2; +var Y2; +var Z2; +var lambda00$2; +var phi00$2; +var x0; +var y0; +var z0; // previous point + +var centroidStream = { + sphere: noop$2, + point: centroidPoint, + lineStart: centroidLineStart, + lineEnd: centroidLineEnd, + polygonStart: function() { + centroidStream.lineStart = centroidRingStart; + centroidStream.lineEnd = centroidRingEnd; + }, + polygonEnd: function() { + centroidStream.lineStart = centroidLineStart; + centroidStream.lineEnd = centroidLineEnd; + } +}; + +// Arithmetic mean of Cartesian vectors. +function centroidPoint(lambda, phi) { + lambda *= radians, phi *= radians; + var cosPhi = cos$1(phi); + centroidPointCartesian(cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)); +} + +function centroidPointCartesian(x, y, z) { + ++W0; + X0 += (x - X0) / W0; + Y0 += (y - Y0) / W0; + Z0 += (z - Z0) / W0; +} + +function centroidLineStart() { + centroidStream.point = centroidLinePointFirst; +} + +function centroidLinePointFirst(lambda, phi) { + lambda *= radians, phi *= radians; + var cosPhi = cos$1(phi); + x0 = cosPhi * cos$1(lambda); + y0 = cosPhi * sin$1(lambda); + z0 = sin$1(phi); + centroidStream.point = centroidLinePoint; + centroidPointCartesian(x0, y0, z0); +} + +function centroidLinePoint(lambda, phi) { + lambda *= radians, phi *= radians; + var cosPhi = cos$1(phi), + x = cosPhi * cos$1(lambda), + y = cosPhi * sin$1(lambda), + z = sin$1(phi), + w = atan2(sqrt$1((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z); + W1 += w; + X1 += w * (x0 + (x0 = x)); + Y1 += w * (y0 + (y0 = y)); + Z1 += w * (z0 + (z0 = z)); + centroidPointCartesian(x0, y0, z0); +} + +function centroidLineEnd() { + centroidStream.point = centroidPoint; +} + +// See J. E. Brock, The Inertia Tensor for a Spherical Triangle, +// J. Applied Mechanics 42, 239 (1975). +function centroidRingStart() { + centroidStream.point = centroidRingPointFirst; +} + +function centroidRingEnd() { + centroidRingPoint(lambda00$2, phi00$2); + centroidStream.point = centroidPoint; +} + +function centroidRingPointFirst(lambda, phi) { + lambda00$2 = lambda, phi00$2 = phi; + lambda *= radians, phi *= radians; + centroidStream.point = centroidRingPoint; + var cosPhi = cos$1(phi); + x0 = cosPhi * cos$1(lambda); + y0 = cosPhi * sin$1(lambda); + z0 = sin$1(phi); + centroidPointCartesian(x0, y0, z0); +} + +function centroidRingPoint(lambda, phi) { + lambda *= radians, phi *= radians; + var cosPhi = cos$1(phi), + x = cosPhi * cos$1(lambda), + y = cosPhi * sin$1(lambda), + z = sin$1(phi), + cx = y0 * z - z0 * y, + cy = z0 * x - x0 * z, + cz = x0 * y - y0 * x, + m = sqrt$1(cx * cx + cy * cy + cz * cz), + u = x0 * x + y0 * y + z0 * z, + v = m && -acos(u) / m, // area weight + w = atan2(m, u); // line weight + X2 += v * cx; + Y2 += v * cy; + Z2 += v * cz; + W1 += w; + X1 += w * (x0 + (x0 = x)); + Y1 += w * (y0 + (y0 = y)); + Z1 += w * (z0 + (z0 = z)); + centroidPointCartesian(x0, y0, z0); +} + +var centroid$1 = function(object) { + W0 = W1 = + X0 = Y0 = Z0 = + X1 = Y1 = Z1 = + X2 = Y2 = Z2 = 0; + geoStream(object, centroidStream); + + var x = X2, + y = Y2, + z = Z2, + m = x * x + y * y + z * z; + + // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid. + if (m < epsilon2$2) { + x = X1, y = Y1, z = Z1; + // If the feature has zero length, fall back to arithmetic mean of point vectors. + if (W1 < epsilon$4) x = X0, y = Y0, z = Z0; + m = x * x + y * y + z * z; + // If the feature still has an undefined ccentroid, then return. + if (m < epsilon2$2) return [NaN, NaN]; + } + + return [atan2(y, x) * degrees$1, asin$1(z / sqrt$1(m)) * degrees$1]; +}; + +var constant$13 = function(x) { + return function() { + return x; + }; +}; + +var compose = function(a, b) { + + function compose(x, y) { + return x = a(x, y), b(x[0], x[1]); + } + + if (a.invert && b.invert) compose.invert = function(x, y) { + return x = b.invert(x, y), x && a.invert(x[0], x[1]); + }; + + return compose; +}; + +function rotationIdentity(lambda, phi) { + return [lambda > pi$4 ? lambda - tau$4 : lambda < -pi$4 ? lambda + tau$4 : lambda, phi]; +} + +rotationIdentity.invert = rotationIdentity; + +function rotateRadians(deltaLambda, deltaPhi, deltaGamma) { + return (deltaLambda %= tau$4) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma)) + : rotationLambda(deltaLambda)) + : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma) + : rotationIdentity); +} + +function forwardRotationLambda(deltaLambda) { + return function(lambda, phi) { + return lambda += deltaLambda, [lambda > pi$4 ? lambda - tau$4 : lambda < -pi$4 ? lambda + tau$4 : lambda, phi]; + }; +} + +function rotationLambda(deltaLambda) { + var rotation = forwardRotationLambda(deltaLambda); + rotation.invert = forwardRotationLambda(-deltaLambda); + return rotation; +} + +function rotationPhiGamma(deltaPhi, deltaGamma) { + var cosDeltaPhi = cos$1(deltaPhi), + sinDeltaPhi = sin$1(deltaPhi), + cosDeltaGamma = cos$1(deltaGamma), + sinDeltaGamma = sin$1(deltaGamma); + + function rotation(lambda, phi) { + var cosPhi = cos$1(phi), + x = cos$1(lambda) * cosPhi, + y = sin$1(lambda) * cosPhi, + z = sin$1(phi), + k = z * cosDeltaPhi + x * sinDeltaPhi; + return [ + atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi), + asin$1(k * cosDeltaGamma + y * sinDeltaGamma) + ]; + } + + rotation.invert = function(lambda, phi) { + var cosPhi = cos$1(phi), + x = cos$1(lambda) * cosPhi, + y = sin$1(lambda) * cosPhi, + z = sin$1(phi), + k = z * cosDeltaGamma - y * sinDeltaGamma; + return [ + atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi), + asin$1(k * cosDeltaPhi - x * sinDeltaPhi) + ]; + }; + + return rotation; +} + +var rotation = function(rotate) { + rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0); + + function forward(coordinates) { + coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians); + return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates; + } + + forward.invert = function(coordinates) { + coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians); + return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates; + }; + + return forward; +}; + +// Generates a circle centered at [0°, 0°], with a given radius and precision. +function circleStream(stream, radius, delta, direction, t0, t1) { + if (!delta) return; + var cosRadius = cos$1(radius), + sinRadius = sin$1(radius), + step = direction * delta; + if (t0 == null) { + t0 = radius + direction * tau$4; + t1 = radius - step / 2; + } else { + t0 = circleRadius(cosRadius, t0); + t1 = circleRadius(cosRadius, t1); + if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau$4; + } + for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) { + point = spherical([cosRadius, -sinRadius * cos$1(t), -sinRadius * sin$1(t)]); + stream.point(point[0], point[1]); + } +} + +// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0]. +function circleRadius(cosRadius, point) { + point = cartesian(point), point[0] -= cosRadius; + cartesianNormalizeInPlace(point); + var radius = acos(-point[1]); + return ((-point[2] < 0 ? -radius : radius) + tau$4 - epsilon$4) % tau$4; +} + +var circle$1 = function() { + var center = constant$13([0, 0]), + radius = constant$13(90), + precision = constant$13(6), + ring, + rotate, + stream = {point: point}; + + function point(x, y) { + ring.push(x = rotate(x, y)); + x[0] *= degrees$1, x[1] *= degrees$1; + } + + function circle() { + var c = center.apply(this, arguments), + r = radius.apply(this, arguments) * radians, + p = precision.apply(this, arguments) * radians; + ring = []; + rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert; + circleStream(stream, r, p, 1); + c = {type: "Polygon", coordinates: [ring]}; + ring = rotate = null; + return c; + } + + circle.center = function(_) { + return arguments.length ? (center = typeof _ === "function" ? _ : constant$13([+_[0], +_[1]]), circle) : center; + }; + + circle.radius = function(_) { + return arguments.length ? (radius = typeof _ === "function" ? _ : constant$13(+_), circle) : radius; + }; + + circle.precision = function(_) { + return arguments.length ? (precision = typeof _ === "function" ? _ : constant$13(+_), circle) : precision; + }; + + return circle; +}; + +var clipBuffer = function() { + var lines = [], + line; + return { + point: function(x, y) { + line.push([x, y]); + }, + lineStart: function() { + lines.push(line = []); + }, + lineEnd: noop$2, + rejoin: function() { + if (lines.length > 1) lines.push(lines.pop().concat(lines.shift())); + }, + result: function() { + var result = lines; + lines = []; + line = null; + return result; + } + }; +}; + +var clipLine = function(a, b, x0, y0, x1, y1) { + var ax = a[0], + ay = a[1], + bx = b[0], + by = b[1], + t0 = 0, + t1 = 1, + dx = bx - ax, + dy = by - ay, + r; + + r = x0 - ax; + if (!dx && r > 0) return; + r /= dx; + if (dx < 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } else if (dx > 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } + + r = x1 - ax; + if (!dx && r < 0) return; + r /= dx; + if (dx < 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } else if (dx > 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } + + r = y0 - ay; + if (!dy && r > 0) return; + r /= dy; + if (dy < 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } else if (dy > 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } + + r = y1 - ay; + if (!dy && r < 0) return; + r /= dy; + if (dy < 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } else if (dy > 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } + + if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy; + if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy; + return true; +}; + +var pointEqual = function(a, b) { + return abs(a[0] - b[0]) < epsilon$4 && abs(a[1] - b[1]) < epsilon$4; +}; + +function Intersection(point, points, other, entry) { + this.x = point; + this.z = points; + this.o = other; // another intersection + this.e = entry; // is an entry? + this.v = false; // visited + this.n = this.p = null; // next & previous +} + +// A generalized polygon clipping algorithm: given a polygon that has been cut +// into its visible line segments, and rejoins the segments by interpolating +// along the clip edge. +var clipPolygon = function(segments, compareIntersection, startInside, interpolate, stream) { + var subject = [], + clip = [], + i, + n; + + segments.forEach(function(segment) { + if ((n = segment.length - 1) <= 0) return; + var n, p0 = segment[0], p1 = segment[n], x; + + // If the first and last points of a segment are coincident, then treat as a + // closed ring. TODO if all rings are closed, then the winding order of the + // exterior ring should be checked. + if (pointEqual(p0, p1)) { + stream.lineStart(); + for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]); + stream.lineEnd(); + return; + } + + subject.push(x = new Intersection(p0, segment, null, true)); + clip.push(x.o = new Intersection(p0, null, x, false)); + subject.push(x = new Intersection(p1, segment, null, false)); + clip.push(x.o = new Intersection(p1, null, x, true)); + }); + + if (!subject.length) return; + + clip.sort(compareIntersection); + link$1(subject); + link$1(clip); + + for (i = 0, n = clip.length; i < n; ++i) { + clip[i].e = startInside = !startInside; + } + + var start = subject[0], + points, + point; + + while (1) { + // Find first unvisited intersection. + var current = start, + isSubject = true; + while (current.v) if ((current = current.n) === start) return; + points = current.z; + stream.lineStart(); + do { + current.v = current.o.v = true; + if (current.e) { + if (isSubject) { + for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]); + } else { + interpolate(current.x, current.n.x, 1, stream); + } + current = current.n; + } else { + if (isSubject) { + points = current.p.z; + for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]); + } else { + interpolate(current.x, current.p.x, -1, stream); + } + current = current.p; + } + current = current.o; + points = current.z; + isSubject = !isSubject; + } while (!current.v); + stream.lineEnd(); + } +}; + +function link$1(array) { + if (!(n = array.length)) return; + var n, + i = 0, + a = array[0], + b; + while (++i < n) { + a.n = b = array[i]; + b.p = a; + a = b; + } + a.n = b = array[0]; + b.p = a; +} + +var clipMax = 1e9; +var clipMin = -clipMax; + +// TODO Use d3-polygon’s polygonContains here for the ring check? +// TODO Eliminate duplicate buffering in clipBuffer and polygon.push? + +function clipExtent(x0, y0, x1, y1) { + + function visible(x, y) { + return x0 <= x && x <= x1 && y0 <= y && y <= y1; + } + + function interpolate(from, to, direction, stream) { + var a = 0, a1 = 0; + if (from == null + || (a = corner(from, direction)) !== (a1 = corner(to, direction)) + || comparePoint(from, to) < 0 ^ direction > 0) { + do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0); + while ((a = (a + direction + 4) % 4) !== a1); + } else { + stream.point(to[0], to[1]); + } + } + + function corner(p, direction) { + return abs(p[0] - x0) < epsilon$4 ? direction > 0 ? 0 : 3 + : abs(p[0] - x1) < epsilon$4 ? direction > 0 ? 2 : 1 + : abs(p[1] - y0) < epsilon$4 ? direction > 0 ? 1 : 0 + : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon + } + + function compareIntersection(a, b) { + return comparePoint(a.x, b.x); + } + + function comparePoint(a, b) { + var ca = corner(a, 1), + cb = corner(b, 1); + return ca !== cb ? ca - cb + : ca === 0 ? b[1] - a[1] + : ca === 1 ? a[0] - b[0] + : ca === 2 ? a[1] - b[1] + : b[0] - a[0]; + } + + return function(stream) { + var activeStream = stream, + bufferStream = clipBuffer(), + segments, + polygon, + ring, + x__, y__, v__, // first point + x_, y_, v_, // previous point + first, + clean; + + var clipStream = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: polygonStart, + polygonEnd: polygonEnd + }; + + function point(x, y) { + if (visible(x, y)) activeStream.point(x, y); + } + + function polygonInside() { + var winding = 0; + + for (var i = 0, n = polygon.length; i < n; ++i) { + for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) { + a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1]; + if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; } + else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; } + } + } + + return winding; + } + + // Buffer geometry within a polygon and then clip it en masse. + function polygonStart() { + activeStream = bufferStream, segments = [], polygon = [], clean = true; + } + + function polygonEnd() { + var startInside = polygonInside(), + cleanInside = clean && startInside, + visible = (segments = merge(segments)).length; + if (cleanInside || visible) { + stream.polygonStart(); + if (cleanInside) { + stream.lineStart(); + interpolate(null, null, 1, stream); + stream.lineEnd(); + } + if (visible) { + clipPolygon(segments, compareIntersection, startInside, interpolate, stream); + } + stream.polygonEnd(); + } + activeStream = stream, segments = polygon = ring = null; + } + + function lineStart() { + clipStream.point = linePoint; + if (polygon) polygon.push(ring = []); + first = true; + v_ = false; + x_ = y_ = NaN; + } + + // TODO rather than special-case polygons, simply handle them separately. + // Ideally, coincident intersection points should be jittered to avoid + // clipping issues. + function lineEnd() { + if (segments) { + linePoint(x__, y__); + if (v__ && v_) bufferStream.rejoin(); + segments.push(bufferStream.result()); + } + clipStream.point = point; + if (v_) activeStream.lineEnd(); + } + + function linePoint(x, y) { + var v = visible(x, y); + if (polygon) ring.push([x, y]); + if (first) { + x__ = x, y__ = y, v__ = v; + first = false; + if (v) { + activeStream.lineStart(); + activeStream.point(x, y); + } + } else { + if (v && v_) activeStream.point(x, y); + else { + var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))], + b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))]; + if (clipLine(a, b, x0, y0, x1, y1)) { + if (!v_) { + activeStream.lineStart(); + activeStream.point(a[0], a[1]); + } + activeStream.point(b[0], b[1]); + if (!v) activeStream.lineEnd(); + clean = false; + } else if (v) { + activeStream.lineStart(); + activeStream.point(x, y); + clean = false; + } + } + } + x_ = x, y_ = y, v_ = v; + } + + return clipStream; + }; +} + +var extent$1 = function() { + var x0 = 0, + y0 = 0, + x1 = 960, + y1 = 500, + cache, + cacheStream, + clip; + + return clip = { + stream: function(stream) { + return cache && cacheStream === stream ? cache : cache = clipExtent(x0, y0, x1, y1)(cacheStream = stream); + }, + extent: function(_) { + return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]]; + } + }; +}; + +var lengthSum = adder(); +var lambda0$2; +var sinPhi0$1; +var cosPhi0$1; + +var lengthStream = { + sphere: noop$2, + point: noop$2, + lineStart: lengthLineStart, + lineEnd: noop$2, + polygonStart: noop$2, + polygonEnd: noop$2 +}; + +function lengthLineStart() { + lengthStream.point = lengthPointFirst; + lengthStream.lineEnd = lengthLineEnd; +} + +function lengthLineEnd() { + lengthStream.point = lengthStream.lineEnd = noop$2; +} + +function lengthPointFirst(lambda, phi) { + lambda *= radians, phi *= radians; + lambda0$2 = lambda, sinPhi0$1 = sin$1(phi), cosPhi0$1 = cos$1(phi); + lengthStream.point = lengthPoint; +} + +function lengthPoint(lambda, phi) { + lambda *= radians, phi *= radians; + var sinPhi = sin$1(phi), + cosPhi = cos$1(phi), + delta = abs(lambda - lambda0$2), + cosDelta = cos$1(delta), + sinDelta = sin$1(delta), + x = cosPhi * sinDelta, + y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta, + z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta; + lengthSum.add(atan2(sqrt$1(x * x + y * y), z)); + lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi; +} + +var length$2 = function(object) { + lengthSum.reset(); + geoStream(object, lengthStream); + return +lengthSum; +}; + +var coordinates = [null, null]; +var object$1 = {type: "LineString", coordinates: coordinates}; + +var distance = function(a, b) { + coordinates[0] = a; + coordinates[1] = b; + return length$2(object$1); +}; + +function graticuleX(y0, y1, dy) { + var y = range(y0, y1 - epsilon$4, dy).concat(y1); + return function(x) { return y.map(function(y) { return [x, y]; }); }; +} + +function graticuleY(x0, x1, dx) { + var x = range(x0, x1 - epsilon$4, dx).concat(x1); + return function(y) { return x.map(function(x) { return [x, y]; }); }; +} + +function graticule() { + var x1, x0, X1, X0, + y1, y0, Y1, Y0, + dx = 10, dy = dx, DX = 90, DY = 360, + x, y, X, Y, + precision = 2.5; + + function graticule() { + return {type: "MultiLineString", coordinates: lines()}; + } + + function lines() { + return range(ceil(X0 / DX) * DX, X1, DX).map(X) + .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y)) + .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon$4; }).map(x)) + .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon$4; }).map(y)); + } + + graticule.lines = function() { + return lines().map(function(coordinates) { return {type: "LineString", coordinates: coordinates}; }); + }; + + graticule.outline = function() { + return { + type: "Polygon", + coordinates: [ + X(X0).concat( + Y(Y1).slice(1), + X(X1).reverse().slice(1), + Y(Y0).reverse().slice(1)) + ] + }; + }; + + graticule.extent = function(_) { + if (!arguments.length) return graticule.extentMinor(); + return graticule.extentMajor(_).extentMinor(_); + }; + + graticule.extentMajor = function(_) { + if (!arguments.length) return [[X0, Y0], [X1, Y1]]; + X0 = +_[0][0], X1 = +_[1][0]; + Y0 = +_[0][1], Y1 = +_[1][1]; + if (X0 > X1) _ = X0, X0 = X1, X1 = _; + if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _; + return graticule.precision(precision); + }; + + graticule.extentMinor = function(_) { + if (!arguments.length) return [[x0, y0], [x1, y1]]; + x0 = +_[0][0], x1 = +_[1][0]; + y0 = +_[0][1], y1 = +_[1][1]; + if (x0 > x1) _ = x0, x0 = x1, x1 = _; + if (y0 > y1) _ = y0, y0 = y1, y1 = _; + return graticule.precision(precision); + }; + + graticule.step = function(_) { + if (!arguments.length) return graticule.stepMinor(); + return graticule.stepMajor(_).stepMinor(_); + }; + + graticule.stepMajor = function(_) { + if (!arguments.length) return [DX, DY]; + DX = +_[0], DY = +_[1]; + return graticule; + }; + + graticule.stepMinor = function(_) { + if (!arguments.length) return [dx, dy]; + dx = +_[0], dy = +_[1]; + return graticule; + }; + + graticule.precision = function(_) { + if (!arguments.length) return precision; + precision = +_; + x = graticuleX(y0, y1, 90); + y = graticuleY(x0, x1, precision); + X = graticuleX(Y0, Y1, 90); + Y = graticuleY(X0, X1, precision); + return graticule; + }; + + return graticule + .extentMajor([[-180, -90 + epsilon$4], [180, 90 - epsilon$4]]) + .extentMinor([[-180, -80 - epsilon$4], [180, 80 + epsilon$4]]); +} + +function graticule10() { + return graticule()(); +} + +var interpolate$2 = function(a, b) { + var x0 = a[0] * radians, + y0 = a[1] * radians, + x1 = b[0] * radians, + y1 = b[1] * radians, + cy0 = cos$1(y0), + sy0 = sin$1(y0), + cy1 = cos$1(y1), + sy1 = sin$1(y1), + kx0 = cy0 * cos$1(x0), + ky0 = cy0 * sin$1(x0), + kx1 = cy1 * cos$1(x1), + ky1 = cy1 * sin$1(x1), + d = 2 * asin$1(sqrt$1(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))), + k = sin$1(d); + + var interpolate = d ? function(t) { + var B = sin$1(t *= d) / k, + A = sin$1(d - t) / k, + x = A * kx0 + B * kx1, + y = A * ky0 + B * ky1, + z = A * sy0 + B * sy1; + return [ + atan2(y, x) * degrees$1, + atan2(z, sqrt$1(x * x + y * y)) * degrees$1 + ]; + } : function() { + return [x0 * degrees$1, y0 * degrees$1]; + }; + + interpolate.distance = d; + + return interpolate; +}; + +var identity$7 = function(x) { + return x; +}; + +var areaSum$1 = adder(); +var areaRingSum$1 = adder(); +var x00; +var y00; +var x0$1; +var y0$1; + +var areaStream$1 = { + point: noop$2, + lineStart: noop$2, + lineEnd: noop$2, + polygonStart: function() { + areaStream$1.lineStart = areaRingStart$1; + areaStream$1.lineEnd = areaRingEnd$1; + }, + polygonEnd: function() { + areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop$2; + areaSum$1.add(abs(areaRingSum$1)); + areaRingSum$1.reset(); + }, + result: function() { + var area = areaSum$1 / 2; + areaSum$1.reset(); + return area; + } +}; + +function areaRingStart$1() { + areaStream$1.point = areaPointFirst$1; +} + +function areaPointFirst$1(x, y) { + areaStream$1.point = areaPoint$1; + x00 = x0$1 = x, y00 = y0$1 = y; +} + +function areaPoint$1(x, y) { + areaRingSum$1.add(y0$1 * x - x0$1 * y); + x0$1 = x, y0$1 = y; +} + +function areaRingEnd$1() { + areaPoint$1(x00, y00); +} + +var x0$2 = Infinity; +var y0$2 = x0$2; +var x1 = -x0$2; +var y1 = x1; + +var boundsStream$1 = { + point: boundsPoint$1, + lineStart: noop$2, + lineEnd: noop$2, + polygonStart: noop$2, + polygonEnd: noop$2, + result: function() { + var bounds = [[x0$2, y0$2], [x1, y1]]; + x1 = y1 = -(y0$2 = x0$2 = Infinity); + return bounds; + } +}; + +function boundsPoint$1(x, y) { + if (x < x0$2) x0$2 = x; + if (x > x1) x1 = x; + if (y < y0$2) y0$2 = y; + if (y > y1) y1 = y; +} + +// TODO Enforce positive area for exterior, negative area for interior? + +var X0$1 = 0; +var Y0$1 = 0; +var Z0$1 = 0; +var X1$1 = 0; +var Y1$1 = 0; +var Z1$1 = 0; +var X2$1 = 0; +var Y2$1 = 0; +var Z2$1 = 0; +var x00$1; +var y00$1; +var x0$3; +var y0$3; + +var centroidStream$1 = { + point: centroidPoint$1, + lineStart: centroidLineStart$1, + lineEnd: centroidLineEnd$1, + polygonStart: function() { + centroidStream$1.lineStart = centroidRingStart$1; + centroidStream$1.lineEnd = centroidRingEnd$1; + }, + polygonEnd: function() { + centroidStream$1.point = centroidPoint$1; + centroidStream$1.lineStart = centroidLineStart$1; + centroidStream$1.lineEnd = centroidLineEnd$1; + }, + result: function() { + var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1] + : Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1] + : Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1] + : [NaN, NaN]; + X0$1 = Y0$1 = Z0$1 = + X1$1 = Y1$1 = Z1$1 = + X2$1 = Y2$1 = Z2$1 = 0; + return centroid; + } +}; + +function centroidPoint$1(x, y) { + X0$1 += x; + Y0$1 += y; + ++Z0$1; +} + +function centroidLineStart$1() { + centroidStream$1.point = centroidPointFirstLine; +} + +function centroidPointFirstLine(x, y) { + centroidStream$1.point = centroidPointLine; + centroidPoint$1(x0$3 = x, y0$3 = y); +} + +function centroidPointLine(x, y) { + var dx = x - x0$3, dy = y - y0$3, z = sqrt$1(dx * dx + dy * dy); + X1$1 += z * (x0$3 + x) / 2; + Y1$1 += z * (y0$3 + y) / 2; + Z1$1 += z; + centroidPoint$1(x0$3 = x, y0$3 = y); +} + +function centroidLineEnd$1() { + centroidStream$1.point = centroidPoint$1; +} + +function centroidRingStart$1() { + centroidStream$1.point = centroidPointFirstRing; +} + +function centroidRingEnd$1() { + centroidPointRing(x00$1, y00$1); +} + +function centroidPointFirstRing(x, y) { + centroidStream$1.point = centroidPointRing; + centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y); +} + +function centroidPointRing(x, y) { + var dx = x - x0$3, + dy = y - y0$3, + z = sqrt$1(dx * dx + dy * dy); + + X1$1 += z * (x0$3 + x) / 2; + Y1$1 += z * (y0$3 + y) / 2; + Z1$1 += z; + + z = y0$3 * x - x0$3 * y; + X2$1 += z * (x0$3 + x); + Y2$1 += z * (y0$3 + y); + Z2$1 += z * 3; + centroidPoint$1(x0$3 = x, y0$3 = y); +} + +function PathContext(context) { + this._context = context; +} + +PathContext.prototype = { + _radius: 4.5, + pointRadius: function(_) { + return this._radius = _, this; + }, + polygonStart: function() { + this._line = 0; + }, + polygonEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._point = 0; + }, + lineEnd: function() { + if (this._line === 0) this._context.closePath(); + this._point = NaN; + }, + point: function(x, y) { + switch (this._point) { + case 0: { + this._context.moveTo(x, y); + this._point = 1; + break; + } + case 1: { + this._context.lineTo(x, y); + break; + } + default: { + this._context.moveTo(x + this._radius, y); + this._context.arc(x, y, this._radius, 0, tau$4); + break; + } + } + }, + result: noop$2 +}; + +function PathString() { + this._string = []; +} + +PathString.prototype = { + _circle: circle$2(4.5), + pointRadius: function(_) { + return this._circle = circle$2(_), this; + }, + polygonStart: function() { + this._line = 0; + }, + polygonEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._point = 0; + }, + lineEnd: function() { + if (this._line === 0) this._string.push("Z"); + this._point = NaN; + }, + point: function(x, y) { + switch (this._point) { + case 0: { + this._string.push("M", x, ",", y); + this._point = 1; + break; + } + case 1: { + this._string.push("L", x, ",", y); + break; + } + default: { + this._string.push("M", x, ",", y, this._circle); + break; + } + } + }, + result: function() { + if (this._string.length) { + var result = this._string.join(""); + this._string = []; + return result; + } + } +}; + +function circle$2(radius) { + return "m0," + radius + + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius + + "z"; +} + +var index$3 = function(projection, context) { + var pointRadius = 4.5, + projectionStream, + contextStream; + + function path(object) { + if (object) { + if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments)); + geoStream(object, projectionStream(contextStream)); + } + return contextStream.result(); + } + + path.area = function(object) { + geoStream(object, projectionStream(areaStream$1)); + return areaStream$1.result(); + }; + + path.bounds = function(object) { + geoStream(object, projectionStream(boundsStream$1)); + return boundsStream$1.result(); + }; + + path.centroid = function(object) { + geoStream(object, projectionStream(centroidStream$1)); + return centroidStream$1.result(); + }; + + path.projection = function(_) { + return arguments.length ? (projectionStream = (projection = _) == null ? identity$7 : _.stream, path) : projection; + }; + + path.context = function(_) { + if (!arguments.length) return context; + contextStream = (context = _) == null ? new PathString : new PathContext(_); + if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius); + return path; + }; + + path.pointRadius = function(_) { + if (!arguments.length) return pointRadius; + pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_); + return path; + }; + + return path.projection(projection).context(context); +}; + +var sum$2 = adder(); + +var polygonContains = function(polygon, point) { + var lambda = point[0], + phi = point[1], + normal = [sin$1(lambda), -cos$1(lambda), 0], + angle = 0, + winding = 0; + + sum$2.reset(); + + for (var i = 0, n = polygon.length; i < n; ++i) { + if (!(m = (ring = polygon[i]).length)) continue; + var ring, + m, + point0 = ring[m - 1], + lambda0 = point0[0], + phi0 = point0[1] / 2 + quarterPi, + sinPhi0 = sin$1(phi0), + cosPhi0 = cos$1(phi0); + + for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) { + var point1 = ring[j], + lambda1 = point1[0], + phi1 = point1[1] / 2 + quarterPi, + sinPhi1 = sin$1(phi1), + cosPhi1 = cos$1(phi1), + delta = lambda1 - lambda0, + sign$$1 = delta >= 0 ? 1 : -1, + absDelta = sign$$1 * delta, + antimeridian = absDelta > pi$4, + k = sinPhi0 * sinPhi1; + + sum$2.add(atan2(k * sign$$1 * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta))); + angle += antimeridian ? delta + sign$$1 * tau$4 : delta; + + // Are the longitudes either side of the point’s meridian (lambda), + // and are the latitudes smaller than the parallel (phi)? + if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) { + var arc = cartesianCross(cartesian(point0), cartesian(point1)); + cartesianNormalizeInPlace(arc); + var intersection = cartesianCross(normal, arc); + cartesianNormalizeInPlace(intersection); + var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin$1(intersection[2]); + if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) { + winding += antimeridian ^ delta >= 0 ? 1 : -1; + } + } + } + } + + // First, determine whether the South pole is inside or outside: + // + // It is inside if: + // * the polygon winds around it in a clockwise direction. + // * the polygon does not (cumulatively) wind around it, but has a negative + // (counter-clockwise) area. + // + // Second, count the (signed) number of times a segment crosses a lambda + // from the point to the South pole. If it is zero, then the point is the + // same side as the South pole. + + return (angle < -epsilon$4 || angle < epsilon$4 && sum$2 < -epsilon$4) ^ (winding & 1); +}; + +var clip = function(pointVisible, clipLine, interpolate, start) { + return function(rotate, sink) { + var line = clipLine(sink), + rotatedStart = rotate.invert(start[0], start[1]), + ringBuffer = clipBuffer(), + ringSink = clipLine(ringBuffer), + polygonStarted = false, + polygon, + segments, + ring; + + var clip = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: function() { + clip.point = pointRing; + clip.lineStart = ringStart; + clip.lineEnd = ringEnd; + segments = []; + polygon = []; + }, + polygonEnd: function() { + clip.point = point; + clip.lineStart = lineStart; + clip.lineEnd = lineEnd; + segments = merge(segments); + var startInside = polygonContains(polygon, rotatedStart); + if (segments.length) { + if (!polygonStarted) sink.polygonStart(), polygonStarted = true; + clipPolygon(segments, compareIntersection, startInside, interpolate, sink); + } else if (startInside) { + if (!polygonStarted) sink.polygonStart(), polygonStarted = true; + sink.lineStart(); + interpolate(null, null, 1, sink); + sink.lineEnd(); + } + if (polygonStarted) sink.polygonEnd(), polygonStarted = false; + segments = polygon = null; + }, + sphere: function() { + sink.polygonStart(); + sink.lineStart(); + interpolate(null, null, 1, sink); + sink.lineEnd(); + sink.polygonEnd(); + } + }; + + function point(lambda, phi) { + var point = rotate(lambda, phi); + if (pointVisible(lambda = point[0], phi = point[1])) sink.point(lambda, phi); + } + + function pointLine(lambda, phi) { + var point = rotate(lambda, phi); + line.point(point[0], point[1]); + } + + function lineStart() { + clip.point = pointLine; + line.lineStart(); + } + + function lineEnd() { + clip.point = point; + line.lineEnd(); + } + + function pointRing(lambda, phi) { + ring.push([lambda, phi]); + var point = rotate(lambda, phi); + ringSink.point(point[0], point[1]); + } + + function ringStart() { + ringSink.lineStart(); + ring = []; + } + + function ringEnd() { + pointRing(ring[0][0], ring[0][1]); + ringSink.lineEnd(); + + var clean = ringSink.clean(), + ringSegments = ringBuffer.result(), + i, n = ringSegments.length, m, + segment, + point; + + ring.pop(); + polygon.push(ring); + ring = null; + + if (!n) return; + + // No intersections. + if (clean & 1) { + segment = ringSegments[0]; + if ((m = segment.length - 1) > 0) { + if (!polygonStarted) sink.polygonStart(), polygonStarted = true; + sink.lineStart(); + for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]); + sink.lineEnd(); + } + return; + } + + // Rejoin connected segments. + // TODO reuse ringBuffer.rejoin()? + if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift())); + + segments.push(ringSegments.filter(validSegment)); + } + + return clip; + }; +}; + +function validSegment(segment) { + return segment.length > 1; +} + +// Intersections are sorted along the clip edge. For both antimeridian cutting +// and circle clipping, the same comparison is used. +function compareIntersection(a, b) { + return ((a = a.x)[0] < 0 ? a[1] - halfPi$3 - epsilon$4 : halfPi$3 - a[1]) + - ((b = b.x)[0] < 0 ? b[1] - halfPi$3 - epsilon$4 : halfPi$3 - b[1]); +} + +var clipAntimeridian = clip( + function() { return true; }, + clipAntimeridianLine, + clipAntimeridianInterpolate, + [-pi$4, -halfPi$3] +); + +// Takes a line and cuts into visible segments. Return values: 0 - there were +// intersections or the line was empty; 1 - no intersections; 2 - there were +// intersections, and the first and last segments should be rejoined. +function clipAntimeridianLine(stream) { + var lambda0 = NaN, + phi0 = NaN, + sign0 = NaN, + clean; // no intersections + + return { + lineStart: function() { + stream.lineStart(); + clean = 1; + }, + point: function(lambda1, phi1) { + var sign1 = lambda1 > 0 ? pi$4 : -pi$4, + delta = abs(lambda1 - lambda0); + if (abs(delta - pi$4) < epsilon$4) { // line crosses a pole + stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$3 : -halfPi$3); + stream.point(sign0, phi0); + stream.lineEnd(); + stream.lineStart(); + stream.point(sign1, phi0); + stream.point(lambda1, phi0); + clean = 0; + } else if (sign0 !== sign1 && delta >= pi$4) { // line crosses antimeridian + if (abs(lambda0 - sign0) < epsilon$4) lambda0 -= sign0 * epsilon$4; // handle degeneracies + if (abs(lambda1 - sign1) < epsilon$4) lambda1 -= sign1 * epsilon$4; + phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1); + stream.point(sign0, phi0); + stream.lineEnd(); + stream.lineStart(); + stream.point(sign1, phi0); + clean = 0; + } + stream.point(lambda0 = lambda1, phi0 = phi1); + sign0 = sign1; + }, + lineEnd: function() { + stream.lineEnd(); + lambda0 = phi0 = NaN; + }, + clean: function() { + return 2 - clean; // if intersections, rejoin first and last segments + } + }; +} + +function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) { + var cosPhi0, + cosPhi1, + sinLambda0Lambda1 = sin$1(lambda0 - lambda1); + return abs(sinLambda0Lambda1) > epsilon$4 + ? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1) + - sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0)) + / (cosPhi0 * cosPhi1 * sinLambda0Lambda1)) + : (phi0 + phi1) / 2; +} + +function clipAntimeridianInterpolate(from, to, direction, stream) { + var phi; + if (from == null) { + phi = direction * halfPi$3; + stream.point(-pi$4, phi); + stream.point(0, phi); + stream.point(pi$4, phi); + stream.point(pi$4, 0); + stream.point(pi$4, -phi); + stream.point(0, -phi); + stream.point(-pi$4, -phi); + stream.point(-pi$4, 0); + stream.point(-pi$4, phi); + } else if (abs(from[0] - to[0]) > epsilon$4) { + var lambda = from[0] < to[0] ? pi$4 : -pi$4; + phi = direction * lambda / 2; + stream.point(-lambda, phi); + stream.point(0, phi); + stream.point(lambda, phi); + } else { + stream.point(to[0], to[1]); + } +} + +var clipCircle = function(radius, delta) { + var cr = cos$1(radius), + smallRadius = cr > 0, + notHemisphere = abs(cr) > epsilon$4; // TODO optimise for this common case + + function interpolate(from, to, direction, stream) { + circleStream(stream, radius, delta, direction, from, to); + } + + function visible(lambda, phi) { + return cos$1(lambda) * cos$1(phi) > cr; + } + + // Takes a line and cuts into visible segments. Return values used for polygon + // clipping: 0 - there were intersections or the line was empty; 1 - no + // intersections 2 - there were intersections, and the first and last segments + // should be rejoined. + function clipLine(stream) { + var point0, // previous point + c0, // code for previous point + v0, // visibility of previous point + v00, // visibility of first point + clean; // no intersections + return { + lineStart: function() { + v00 = v0 = false; + clean = 1; + }, + point: function(lambda, phi) { + var point1 = [lambda, phi], + point2, + v = visible(lambda, phi), + c = smallRadius + ? v ? 0 : code(lambda, phi) + : v ? code(lambda + (lambda < 0 ? pi$4 : -pi$4), phi) : 0; + if (!point0 && (v00 = v0 = v)) stream.lineStart(); + // Handle degeneracies. + // TODO ignore if not clipping polygons. + if (v !== v0) { + point2 = intersect(point0, point1); + if (pointEqual(point0, point2) || pointEqual(point1, point2)) { + point1[0] += epsilon$4; + point1[1] += epsilon$4; + v = visible(point1[0], point1[1]); + } + } + if (v !== v0) { + clean = 0; + if (v) { + // outside going in + stream.lineStart(); + point2 = intersect(point1, point0); + stream.point(point2[0], point2[1]); + } else { + // inside going out + point2 = intersect(point0, point1); + stream.point(point2[0], point2[1]); + stream.lineEnd(); + } + point0 = point2; + } else if (notHemisphere && point0 && smallRadius ^ v) { + var t; + // If the codes for two points are different, or are both zero, + // and there this segment intersects with the small circle. + if (!(c & c0) && (t = intersect(point1, point0, true))) { + clean = 0; + if (smallRadius) { + stream.lineStart(); + stream.point(t[0][0], t[0][1]); + stream.point(t[1][0], t[1][1]); + stream.lineEnd(); + } else { + stream.point(t[1][0], t[1][1]); + stream.lineEnd(); + stream.lineStart(); + stream.point(t[0][0], t[0][1]); + } + } + } + if (v && (!point0 || !pointEqual(point0, point1))) { + stream.point(point1[0], point1[1]); + } + point0 = point1, v0 = v, c0 = c; + }, + lineEnd: function() { + if (v0) stream.lineEnd(); + point0 = null; + }, + // Rejoin first and last segments if there were intersections and the first + // and last points were visible. + clean: function() { + return clean | ((v00 && v0) << 1); + } + }; + } + + // Intersects the great circle between a and b with the clip circle. + function intersect(a, b, two) { + var pa = cartesian(a), + pb = cartesian(b); + + // We have two planes, n1.p = d1 and n2.p = d2. + // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2). + var n1 = [1, 0, 0], // normal + n2 = cartesianCross(pa, pb), + n2n2 = cartesianDot(n2, n2), + n1n2 = n2[0], // cartesianDot(n1, n2), + determinant = n2n2 - n1n2 * n1n2; + + // Two polar points. + if (!determinant) return !two && a; + + var c1 = cr * n2n2 / determinant, + c2 = -cr * n1n2 / determinant, + n1xn2 = cartesianCross(n1, n2), + A = cartesianScale(n1, c1), + B = cartesianScale(n2, c2); + cartesianAddInPlace(A, B); + + // Solve |p(t)|^2 = 1. + var u = n1xn2, + w = cartesianDot(A, u), + uu = cartesianDot(u, u), + t2 = w * w - uu * (cartesianDot(A, A) - 1); + + if (t2 < 0) return; + + var t = sqrt$1(t2), + q = cartesianScale(u, (-w - t) / uu); + cartesianAddInPlace(q, A); + q = spherical(q); + + if (!two) return q; + + // Two intersection points. + var lambda0 = a[0], + lambda1 = b[0], + phi0 = a[1], + phi1 = b[1], + z; + + if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z; + + var delta = lambda1 - lambda0, + polar = abs(delta - pi$4) < epsilon$4, + meridian = polar || delta < epsilon$4; + + if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z; + + // Check that the first point is between a and b. + if (meridian + ? polar + ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon$4 ? phi0 : phi1) + : phi0 <= q[1] && q[1] <= phi1 + : delta > pi$4 ^ (lambda0 <= q[0] && q[0] <= lambda1)) { + var q1 = cartesianScale(u, (-w + t) / uu); + cartesianAddInPlace(q1, A); + return [q, spherical(q1)]; + } + } + + // Generates a 4-bit vector representing the location of a point relative to + // the small circle's bounding box. + function code(lambda, phi) { + var r = smallRadius ? radius : pi$4 - radius, + code = 0; + if (lambda < -r) code |= 1; // left + else if (lambda > r) code |= 2; // right + if (phi < -r) code |= 4; // below + else if (phi > r) code |= 8; // above + return code; + } + + return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi$4, radius - pi$4]); +}; + +var transform$1 = function(methods) { + return { + stream: transformer(methods) + }; +}; + +function transformer(methods) { + return function(stream) { + var s = new TransformStream; + for (var key in methods) s[key] = methods[key]; + s.stream = stream; + return s; + }; +} + +function TransformStream() {} + +TransformStream.prototype = { + constructor: TransformStream, + point: function(x, y) { this.stream.point(x, y); }, + sphere: function() { this.stream.sphere(); }, + lineStart: function() { this.stream.lineStart(); }, + lineEnd: function() { this.stream.lineEnd(); }, + polygonStart: function() { this.stream.polygonStart(); }, + polygonEnd: function() { this.stream.polygonEnd(); } +}; + +function fitExtent(projection, extent, object) { + var w = extent[1][0] - extent[0][0], + h = extent[1][1] - extent[0][1], + clip = projection.clipExtent && projection.clipExtent(); + + projection + .scale(150) + .translate([0, 0]); + + if (clip != null) projection.clipExtent(null); + + geoStream(object, projection.stream(boundsStream$1)); + + var b = boundsStream$1.result(), + k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])), + x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2, + y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2; + + if (clip != null) projection.clipExtent(clip); + + return projection + .scale(k * 150) + .translate([x, y]); +} + +function fitSize(projection, size, object) { + return fitExtent(projection, [[0, 0], size], object); +} + +var maxDepth = 16; +var cosMinDistance = cos$1(30 * radians); // cos(minimum angular distance) + +var resample = function(project, delta2) { + return +delta2 ? resample$1(project, delta2) : resampleNone(project); +}; + +function resampleNone(project) { + return transformer({ + point: function(x, y) { + x = project(x, y); + this.stream.point(x[0], x[1]); + } + }); +} + +function resample$1(project, delta2) { + + function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) { + var dx = x1 - x0, + dy = y1 - y0, + d2 = dx * dx + dy * dy; + if (d2 > 4 * delta2 && depth--) { + var a = a0 + a1, + b = b0 + b1, + c = c0 + c1, + m = sqrt$1(a * a + b * b + c * c), + phi2 = asin$1(c /= m), + lambda2 = abs(abs(c) - 1) < epsilon$4 || abs(lambda0 - lambda1) < epsilon$4 ? (lambda0 + lambda1) / 2 : atan2(b, a), + p = project(lambda2, phi2), + x2 = p[0], + y2 = p[1], + dx2 = x2 - x0, + dy2 = y2 - y0, + dz = dy * dx2 - dx * dy2; + if (dz * dz / d2 > delta2 // perpendicular projected distance + || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end + || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance + resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream); + stream.point(x2, y2); + resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream); + } + } + } + return function(stream) { + var lambda00, x00, y00, a00, b00, c00, // first point + lambda0, x0, y0, a0, b0, c0; // previous point + + var resampleStream = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; }, + polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; } + }; + + function point(x, y) { + x = project(x, y); + stream.point(x[0], x[1]); + } + + function lineStart() { + x0 = NaN; + resampleStream.point = linePoint; + stream.lineStart(); + } + + function linePoint(lambda, phi) { + var c = cartesian([lambda, phi]), p = project(lambda, phi); + resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream); + stream.point(x0, y0); + } + + function lineEnd() { + resampleStream.point = point; + stream.lineEnd(); + } + + function ringStart() { + lineStart(); + resampleStream.point = ringPoint; + resampleStream.lineEnd = ringEnd; + } + + function ringPoint(lambda, phi) { + linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0; + resampleStream.point = linePoint; + } + + function ringEnd() { + resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream); + resampleStream.lineEnd = lineEnd; + lineEnd(); + } + + return resampleStream; + }; +} + +var transformRadians = transformer({ + point: function(x, y) { + this.stream.point(x * radians, y * radians); + } +}); + +function projection(project) { + return projectionMutator(function() { return project; })(); +} + +function projectionMutator(projectAt) { + var project, + k = 150, // scale + x = 480, y = 250, // translate + dx, dy, lambda = 0, phi = 0, // center + deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, projectRotate, // rotate + theta = null, preclip = clipAntimeridian, // clip angle + x0 = null, y0, x1, y1, postclip = identity$7, // clip extent + delta2 = 0.5, projectResample = resample(projectTransform, delta2), // precision + cache, + cacheStream; + + function projection(point) { + point = projectRotate(point[0] * radians, point[1] * radians); + return [point[0] * k + dx, dy - point[1] * k]; + } + + function invert(point) { + point = projectRotate.invert((point[0] - dx) / k, (dy - point[1]) / k); + return point && [point[0] * degrees$1, point[1] * degrees$1]; + } + + function projectTransform(x, y) { + return x = project(x, y), [x[0] * k + dx, dy - x[1] * k]; + } + + projection.stream = function(stream) { + return cache && cacheStream === stream ? cache : cache = transformRadians(preclip(rotate, projectResample(postclip(cacheStream = stream)))); + }; + + projection.clipAngle = function(_) { + return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians, 6 * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees$1; + }; + + projection.clipExtent = function(_) { + return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$7) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]]; + }; + + projection.scale = function(_) { + return arguments.length ? (k = +_, recenter()) : k; + }; + + projection.translate = function(_) { + return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y]; + }; + + projection.center = function(_) { + return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees$1, phi * degrees$1]; + }; + + projection.rotate = function(_) { + return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees$1, deltaPhi * degrees$1, deltaGamma * degrees$1]; + }; + + projection.precision = function(_) { + return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt$1(delta2); + }; + + projection.fitExtent = function(extent, object) { + return fitExtent(projection, extent, object); + }; + + projection.fitSize = function(size, object) { + return fitSize(projection, size, object); + }; + + function recenter() { + projectRotate = compose(rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma), project); + var center = project(lambda, phi); + dx = x - center[0] * k; + dy = y + center[1] * k; + return reset(); + } + + function reset() { + cache = cacheStream = null; + return projection; + } + + return function() { + project = projectAt.apply(this, arguments); + projection.invert = project.invert && invert; + return recenter(); + }; +} + +function conicProjection(projectAt) { + var phi0 = 0, + phi1 = pi$4 / 3, + m = projectionMutator(projectAt), + p = m(phi0, phi1); + + p.parallels = function(_) { + return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees$1, phi1 * degrees$1]; + }; + + return p; +} + +function cylindricalEqualAreaRaw(phi0) { + var cosPhi0 = cos$1(phi0); + + function forward(lambda, phi) { + return [lambda * cosPhi0, sin$1(phi) / cosPhi0]; + } + + forward.invert = function(x, y) { + return [x / cosPhi0, asin$1(y * cosPhi0)]; + }; + + return forward; +} + +function conicEqualAreaRaw(y0, y1) { + var sy0 = sin$1(y0), n = (sy0 + sin$1(y1)) / 2; + + // Are the parallels symmetrical around the Equator? + if (abs(n) < epsilon$4) return cylindricalEqualAreaRaw(y0); + + var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt$1(c) / n; + + function project(x, y) { + var r = sqrt$1(c - 2 * n * sin$1(y)) / n; + return [r * sin$1(x *= n), r0 - r * cos$1(x)]; + } + + project.invert = function(x, y) { + var r0y = r0 - y; + return [atan2(x, abs(r0y)) / n * sign$1(r0y), asin$1((c - (x * x + r0y * r0y) * n * n) / (2 * n))]; + }; + + return project; +} + +var conicEqualArea = function() { + return conicProjection(conicEqualAreaRaw) + .scale(155.424) + .center([0, 33.6442]); +}; + +var albers = function() { + return conicEqualArea() + .parallels([29.5, 45.5]) + .scale(1070) + .translate([480, 250]) + .rotate([96, 0]) + .center([-0.6, 38.7]); +}; + +// The projections must have mutually exclusive clip regions on the sphere, +// as this will avoid emitting interleaving lines and polygons. +function multiplex(streams) { + var n = streams.length; + return { + point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); }, + sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); }, + lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); }, + lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); }, + polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); }, + polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); } + }; +} + +// A composite projection for the United States, configured by default for +// 960×500. The projection also works quite well at 960×600 if you change the +// scale to 1285 and adjust the translate accordingly. The set of standard +// parallels for each region comes from USGS, which is published here: +// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers +var albersUsa = function() { + var cache, + cacheStream, + lower48 = albers(), lower48Point, + alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338 + hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007 + point, pointStream = {point: function(x, y) { point = [x, y]; }}; + + function albersUsa(coordinates) { + var x = coordinates[0], y = coordinates[1]; + return point = null, + (lower48Point.point(x, y), point) + || (alaskaPoint.point(x, y), point) + || (hawaiiPoint.point(x, y), point); + } + + albersUsa.invert = function(coordinates) { + var k = lower48.scale(), + t = lower48.translate(), + x = (coordinates[0] - t[0]) / k, + y = (coordinates[1] - t[1]) / k; + return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska + : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii + : lower48).invert(coordinates); + }; + + albersUsa.stream = function(stream) { + return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]); + }; + + albersUsa.precision = function(_) { + if (!arguments.length) return lower48.precision(); + lower48.precision(_), alaska.precision(_), hawaii.precision(_); + return reset(); + }; + + albersUsa.scale = function(_) { + if (!arguments.length) return lower48.scale(); + lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_); + return albersUsa.translate(lower48.translate()); + }; + + albersUsa.translate = function(_) { + if (!arguments.length) return lower48.translate(); + var k = lower48.scale(), x = +_[0], y = +_[1]; + + lower48Point = lower48 + .translate(_) + .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]]) + .stream(pointStream); + + alaskaPoint = alaska + .translate([x - 0.307 * k, y + 0.201 * k]) + .clipExtent([[x - 0.425 * k + epsilon$4, y + 0.120 * k + epsilon$4], [x - 0.214 * k - epsilon$4, y + 0.234 * k - epsilon$4]]) + .stream(pointStream); + + hawaiiPoint = hawaii + .translate([x - 0.205 * k, y + 0.212 * k]) + .clipExtent([[x - 0.214 * k + epsilon$4, y + 0.166 * k + epsilon$4], [x - 0.115 * k - epsilon$4, y + 0.234 * k - epsilon$4]]) + .stream(pointStream); + + return reset(); + }; + + albersUsa.fitExtent = function(extent, object) { + return fitExtent(albersUsa, extent, object); + }; + + albersUsa.fitSize = function(size, object) { + return fitSize(albersUsa, size, object); + }; + + function reset() { + cache = cacheStream = null; + return albersUsa; + } + + return albersUsa.scale(1070); +}; + +function azimuthalRaw(scale) { + return function(x, y) { + var cx = cos$1(x), + cy = cos$1(y), + k = scale(cx * cy); + return [ + k * cy * sin$1(x), + k * sin$1(y) + ]; + } +} + +function azimuthalInvert(angle) { + return function(x, y) { + var z = sqrt$1(x * x + y * y), + c = angle(z), + sc = sin$1(c), + cc = cos$1(c); + return [ + atan2(x * sc, z * cc), + asin$1(z && y * sc / z) + ]; + } +} + +var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) { + return sqrt$1(2 / (1 + cxcy)); +}); + +azimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) { + return 2 * asin$1(z / 2); +}); + +var azimuthalEqualArea = function() { + return projection(azimuthalEqualAreaRaw) + .scale(124.75) + .clipAngle(180 - 1e-3); +}; + +var azimuthalEquidistantRaw = azimuthalRaw(function(c) { + return (c = acos(c)) && c / sin$1(c); +}); + +azimuthalEquidistantRaw.invert = azimuthalInvert(function(z) { + return z; +}); + +var azimuthalEquidistant = function() { + return projection(azimuthalEquidistantRaw) + .scale(79.4188) + .clipAngle(180 - 1e-3); +}; + +function mercatorRaw(lambda, phi) { + return [lambda, log$1(tan((halfPi$3 + phi) / 2))]; +} + +mercatorRaw.invert = function(x, y) { + return [x, 2 * atan(exp(y)) - halfPi$3]; +}; + +var mercator = function() { + return mercatorProjection(mercatorRaw) + .scale(961 / tau$4); +}; + +function mercatorProjection(project) { + var m = projection(project), + scale = m.scale, + translate = m.translate, + clipExtent = m.clipExtent, + clipAuto; + + m.scale = function(_) { + return arguments.length ? (scale(_), clipAuto && m.clipExtent(null), m) : scale(); + }; + + m.translate = function(_) { + return arguments.length ? (translate(_), clipAuto && m.clipExtent(null), m) : translate(); + }; + + m.clipExtent = function(_) { + if (!arguments.length) return clipAuto ? null : clipExtent(); + if (clipAuto = _ == null) { + var k = pi$4 * scale(), + t = translate(); + _ = [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]]; + } + clipExtent(_); + return m; + }; + + return m.clipExtent(null); +} + +function tany(y) { + return tan((halfPi$3 + y) / 2); +} + +function conicConformalRaw(y0, y1) { + var cy0 = cos$1(y0), + n = y0 === y1 ? sin$1(y0) : log$1(cy0 / cos$1(y1)) / log$1(tany(y1) / tany(y0)), + f = cy0 * pow$1(tany(y0), n) / n; + + if (!n) return mercatorRaw; + + function project(x, y) { + if (f > 0) { if (y < -halfPi$3 + epsilon$4) y = -halfPi$3 + epsilon$4; } + else { if (y > halfPi$3 - epsilon$4) y = halfPi$3 - epsilon$4; } + var r = f / pow$1(tany(y), n); + return [r * sin$1(n * x), f - r * cos$1(n * x)]; + } + + project.invert = function(x, y) { + var fy = f - y, r = sign$1(n) * sqrt$1(x * x + fy * fy); + return [atan2(x, abs(fy)) / n * sign$1(fy), 2 * atan(pow$1(f / r, 1 / n)) - halfPi$3]; + }; + + return project; +} + +var conicConformal = function() { + return conicProjection(conicConformalRaw) + .scale(109.5) + .parallels([30, 30]); +}; + +function equirectangularRaw(lambda, phi) { + return [lambda, phi]; +} + +equirectangularRaw.invert = equirectangularRaw; + +var equirectangular = function() { + return projection(equirectangularRaw) + .scale(152.63); +}; + +function conicEquidistantRaw(y0, y1) { + var cy0 = cos$1(y0), + n = y0 === y1 ? sin$1(y0) : (cy0 - cos$1(y1)) / (y1 - y0), + g = cy0 / n + y0; + + if (abs(n) < epsilon$4) return equirectangularRaw; + + function project(x, y) { + var gy = g - y, nx = n * x; + return [gy * sin$1(nx), g - gy * cos$1(nx)]; + } + + project.invert = function(x, y) { + var gy = g - y; + return [atan2(x, abs(gy)) / n * sign$1(gy), g - sign$1(n) * sqrt$1(x * x + gy * gy)]; + }; + + return project; +} + +var conicEquidistant = function() { + return conicProjection(conicEquidistantRaw) + .scale(131.154) + .center([0, 13.9389]); +}; + +function gnomonicRaw(x, y) { + var cy = cos$1(y), k = cos$1(x) * cy; + return [cy * sin$1(x) / k, sin$1(y) / k]; +} + +gnomonicRaw.invert = azimuthalInvert(atan); + +var gnomonic = function() { + return projection(gnomonicRaw) + .scale(144.049) + .clipAngle(60); +}; + +function scaleTranslate(k, tx, ty) { + return k === 1 && tx === 0 && ty === 0 ? identity$7 : transformer({ + point: function(x, y) { + this.stream.point(x * k + tx, y * k + ty); + } + }); +} + +var identity$8 = function() { + var k = 1, tx = 0, ty = 0, transform = identity$7, // scale and translate + x0 = null, y0, x1, y1, clip = identity$7, // clip extent + cache, + cacheStream, + projection; + + function reset() { + cache = cacheStream = null; + return projection; + } + + return projection = { + stream: function(stream) { + return cache && cacheStream === stream ? cache : cache = transform(clip(cacheStream = stream)); + }, + clipExtent: function(_) { + return arguments.length ? (clip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$7) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]]; + }, + scale: function(_) { + return arguments.length ? (transform = scaleTranslate(k = +_, tx, ty), reset()) : k; + }, + translate: function(_) { + return arguments.length ? (transform = scaleTranslate(k, tx = +_[0], ty = +_[1]), reset()) : [tx, ty]; + }, + fitExtent: function(extent, object) { + return fitExtent(projection, extent, object); + }, + fitSize: function(size, object) { + return fitSize(projection, size, object); + } + }; +}; + +function orthographicRaw(x, y) { + return [cos$1(y) * sin$1(x), sin$1(y)]; +} + +orthographicRaw.invert = azimuthalInvert(asin$1); + +var orthographic = function() { + return projection(orthographicRaw) + .scale(249.5) + .clipAngle(90 + epsilon$4); +}; + +function stereographicRaw(x, y) { + var cy = cos$1(y), k = 1 + cos$1(x) * cy; + return [cy * sin$1(x) / k, sin$1(y) / k]; +} + +stereographicRaw.invert = azimuthalInvert(function(z) { + return 2 * atan(z); +}); + +var stereographic = function() { + return projection(stereographicRaw) + .scale(250) + .clipAngle(142); +}; + +function transverseMercatorRaw(lambda, phi) { + return [log$1(tan((halfPi$3 + phi) / 2)), -lambda]; +} + +transverseMercatorRaw.invert = function(x, y) { + return [-y, 2 * atan(exp(x)) - halfPi$3]; +}; + +var transverseMercator = function() { + var m = mercatorProjection(transverseMercatorRaw), + center = m.center, + rotate = m.rotate; + + m.center = function(_) { + return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]); + }; + + m.rotate = function(_) { + return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]); + }; + + return rotate([0, 0, 90]) + .scale(159.155); +}; + +exports.version = version; +exports.bisect = bisectRight; +exports.bisectRight = bisectRight; +exports.bisectLeft = bisectLeft; +exports.ascending = ascending; +exports.bisector = bisector; +exports.descending = descending; +exports.deviation = deviation; +exports.extent = extent; +exports.histogram = histogram; +exports.thresholdFreedmanDiaconis = freedmanDiaconis; +exports.thresholdScott = scott; +exports.thresholdSturges = sturges; +exports.max = max; +exports.mean = mean; +exports.median = median; +exports.merge = merge; +exports.min = min; +exports.pairs = pairs; +exports.permute = permute; +exports.quantile = threshold; +exports.range = range; +exports.scan = scan; +exports.shuffle = shuffle; +exports.sum = sum; +exports.ticks = ticks; +exports.tickStep = tickStep; +exports.transpose = transpose; +exports.variance = variance; +exports.zip = zip; +exports.entries = entries; +exports.keys = keys; +exports.values = values; +exports.map = map$1; +exports.set = set; +exports.nest = nest; +exports.randomUniform = uniform; +exports.randomNormal = normal; +exports.randomLogNormal = logNormal; +exports.randomBates = bates; +exports.randomIrwinHall = irwinHall; +exports.randomExponential = exponential; +exports.easeLinear = linear; +exports.easeQuad = quadInOut; +exports.easeQuadIn = quadIn; +exports.easeQuadOut = quadOut; +exports.easeQuadInOut = quadInOut; +exports.easeCubic = cubicInOut; +exports.easeCubicIn = cubicIn; +exports.easeCubicOut = cubicOut; +exports.easeCubicInOut = cubicInOut; +exports.easePoly = polyInOut; +exports.easePolyIn = polyIn; +exports.easePolyOut = polyOut; +exports.easePolyInOut = polyInOut; +exports.easeSin = sinInOut; +exports.easeSinIn = sinIn; +exports.easeSinOut = sinOut; +exports.easeSinInOut = sinInOut; +exports.easeExp = expInOut; +exports.easeExpIn = expIn; +exports.easeExpOut = expOut; +exports.easeExpInOut = expInOut; +exports.easeCircle = circleInOut; +exports.easeCircleIn = circleIn; +exports.easeCircleOut = circleOut; +exports.easeCircleInOut = circleInOut; +exports.easeBounce = bounceOut; +exports.easeBounceIn = bounceIn; +exports.easeBounceOut = bounceOut; +exports.easeBounceInOut = bounceInOut; +exports.easeBack = backInOut; +exports.easeBackIn = backIn; +exports.easeBackOut = backOut; +exports.easeBackInOut = backInOut; +exports.easeElastic = elasticOut; +exports.easeElasticIn = elasticIn; +exports.easeElasticOut = elasticOut; +exports.easeElasticInOut = elasticInOut; +exports.polygonArea = area; +exports.polygonCentroid = centroid; +exports.polygonHull = hull; +exports.polygonContains = contains; +exports.polygonLength = length$1; +exports.path = path; +exports.quadtree = quadtree; +exports.queue = queue; +exports.arc = arc; +exports.area = area$1; +exports.line = line; +exports.pie = pie; +exports.radialArea = radialArea; +exports.radialLine = radialLine$1; +exports.symbol = symbol; +exports.symbols = symbols; +exports.symbolCircle = circle; +exports.symbolCross = cross$1; +exports.symbolDiamond = diamond; +exports.symbolSquare = square; +exports.symbolStar = star; +exports.symbolTriangle = triangle; +exports.symbolWye = wye; +exports.curveBasisClosed = basisClosed; +exports.curveBasisOpen = basisOpen; +exports.curveBasis = basis; +exports.curveBundle = bundle; +exports.curveCardinalClosed = cardinalClosed; +exports.curveCardinalOpen = cardinalOpen; +exports.curveCardinal = cardinal; +exports.curveCatmullRomClosed = catmullRomClosed; +exports.curveCatmullRomOpen = catmullRomOpen; +exports.curveCatmullRom = catmullRom; +exports.curveLinearClosed = linearClosed; +exports.curveLinear = curveLinear; +exports.curveMonotoneX = monotoneX; +exports.curveMonotoneY = monotoneY; +exports.curveNatural = natural; +exports.curveStep = step; +exports.curveStepAfter = stepAfter; +exports.curveStepBefore = stepBefore; +exports.stack = stack; +exports.stackOffsetExpand = expand; +exports.stackOffsetNone = none; +exports.stackOffsetSilhouette = silhouette; +exports.stackOffsetWiggle = wiggle; +exports.stackOrderAscending = ascending$1; +exports.stackOrderDescending = descending$2; +exports.stackOrderInsideOut = insideOut; +exports.stackOrderNone = none$1; +exports.stackOrderReverse = reverse; +exports.color = color; +exports.rgb = rgb; +exports.hsl = hsl; +exports.lab = lab; +exports.hcl = hcl; +exports.cubehelix = cubehelix; +exports.interpolate = interpolate; +exports.interpolateArray = array$1; +exports.interpolateDate = date; +exports.interpolateNumber = interpolateNumber; +exports.interpolateObject = object; +exports.interpolateRound = interpolateRound; +exports.interpolateString = interpolateString; +exports.interpolateTransformCss = interpolateTransformCss; +exports.interpolateTransformSvg = interpolateTransformSvg; +exports.interpolateZoom = interpolateZoom; +exports.interpolateRgb = interpolateRgb; +exports.interpolateRgbBasis = rgbBasis; +exports.interpolateRgbBasisClosed = rgbBasisClosed; +exports.interpolateHsl = hsl$2; +exports.interpolateHslLong = hslLong; +exports.interpolateLab = lab$1; +exports.interpolateHcl = hcl$2; +exports.interpolateHclLong = hclLong; +exports.interpolateCubehelix = cubehelix$2; +exports.interpolateCubehelixLong = cubehelixLong; +exports.interpolateBasis = basis$2; +exports.interpolateBasisClosed = basisClosed$1; +exports.quantize = quantize; +exports.dispatch = dispatch; +exports.dsvFormat = dsv; +exports.csvParse = csvParse; +exports.csvParseRows = csvParseRows; +exports.csvFormat = csvFormat; +exports.csvFormatRows = csvFormatRows; +exports.tsvParse = tsvParse; +exports.tsvParseRows = tsvParseRows; +exports.tsvFormat = tsvFormat; +exports.tsvFormatRows = tsvFormatRows; +exports.request = request; +exports.html = html; +exports.json = json; +exports.text = text; +exports.xml = xml; +exports.csv = csv$1; +exports.tsv = tsv$1; +exports.now = now; +exports.timer = timer; +exports.timerFlush = timerFlush; +exports.timeout = timeout$1; +exports.interval = interval$1; +exports.timeInterval = newInterval; +exports.timeMillisecond = millisecond; +exports.timeMilliseconds = milliseconds; +exports.timeSecond = second; +exports.timeSeconds = seconds; +exports.timeMinute = minute; +exports.timeMinutes = minutes; +exports.timeHour = hour; +exports.timeHours = hours; +exports.timeDay = day; +exports.timeDays = days; +exports.timeWeek = sunday; +exports.timeWeeks = sundays; +exports.timeSunday = sunday; +exports.timeSundays = sundays; +exports.timeMonday = monday; +exports.timeMondays = mondays; +exports.timeTuesday = tuesday; +exports.timeTuesdays = tuesdays; +exports.timeWednesday = wednesday; +exports.timeWednesdays = wednesdays; +exports.timeThursday = thursday; +exports.timeThursdays = thursdays; +exports.timeFriday = friday; +exports.timeFridays = fridays; +exports.timeSaturday = saturday; +exports.timeSaturdays = saturdays; +exports.timeMonth = month; +exports.timeMonths = months; +exports.timeYear = year; +exports.timeYears = years; +exports.utcMillisecond = millisecond; +exports.utcMilliseconds = milliseconds; +exports.utcSecond = second; +exports.utcSeconds = seconds; +exports.utcMinute = utcMinute; +exports.utcMinutes = utcMinutes; +exports.utcHour = utcHour; +exports.utcHours = utcHours; +exports.utcDay = utcDay; +exports.utcDays = utcDays; +exports.utcWeek = utcSunday; +exports.utcWeeks = utcSundays; +exports.utcSunday = utcSunday; +exports.utcSundays = utcSundays; +exports.utcMonday = utcMonday; +exports.utcMondays = utcMondays; +exports.utcTuesday = utcTuesday; +exports.utcTuesdays = utcTuesdays; +exports.utcWednesday = utcWednesday; +exports.utcWednesdays = utcWednesdays; +exports.utcThursday = utcThursday; +exports.utcThursdays = utcThursdays; +exports.utcFriday = utcFriday; +exports.utcFridays = utcFridays; +exports.utcSaturday = utcSaturday; +exports.utcSaturdays = utcSaturdays; +exports.utcMonth = utcMonth; +exports.utcMonths = utcMonths; +exports.utcYear = utcYear; +exports.utcYears = utcYears; +exports.formatLocale = formatLocale; +exports.formatDefaultLocale = defaultLocale; +exports.formatSpecifier = formatSpecifier; +exports.precisionFixed = precisionFixed; +exports.precisionPrefix = precisionPrefix; +exports.precisionRound = precisionRound; +exports.isoFormat = formatIso; +exports.isoParse = parseIso; +exports.timeFormatLocale = formatLocale$1; +exports.timeFormatDefaultLocale = defaultLocale$1; +exports.scaleBand = band; +exports.scalePoint = point$4; +exports.scaleIdentity = identity$4; +exports.scaleLinear = linear$2; +exports.scaleLog = log; +exports.scaleOrdinal = ordinal; +exports.scaleImplicit = implicit; +exports.scalePow = pow; +exports.scaleSqrt = sqrt; +exports.scaleQuantile = quantile$$1; +exports.scaleQuantize = quantize$1; +exports.scaleThreshold = threshold$1; +exports.scaleTime = time; +exports.scaleUtc = utcTime; +exports.schemeCategory10 = category10; +exports.schemeCategory20b = category20b; +exports.schemeCategory20c = category20c; +exports.schemeCategory20 = category20; +exports.scaleSequential = sequential; +exports.interpolateCubehelixDefault = cubehelix$3; +exports.interpolateRainbow = rainbow$1; +exports.interpolateWarm = warm; +exports.interpolateCool = cool; +exports.interpolateViridis = viridis; +exports.interpolateMagma = magma; +exports.interpolateInferno = inferno; +exports.interpolatePlasma = plasma; +exports.creator = creator; +exports.customEvent = customEvent; +exports.local = local; +exports.matcher = matcher$1; +exports.mouse = mouse; +exports.namespace = namespace; +exports.namespaces = namespaces; +exports.select = select; +exports.selectAll = selectAll; +exports.selection = selection; +exports.selector = selector; +exports.selectorAll = selectorAll; +exports.touch = touch; +exports.touches = touches; +exports.window = window; +exports.active = active; +exports.interrupt = interrupt; +exports.transition = transition; +exports.axisTop = axisTop; +exports.axisRight = axisRight; +exports.axisBottom = axisBottom; +exports.axisLeft = axisLeft; +exports.cluster = cluster; +exports.hierarchy = hierarchy; +exports.pack = index; +exports.packSiblings = siblings; +exports.packEnclose = enclose; +exports.partition = partition; +exports.stratify = stratify; +exports.tree = tree; +exports.treemap = index$1; +exports.treemapBinary = binary; +exports.treemapDice = treemapDice; +exports.treemapSlice = treemapSlice; +exports.treemapSliceDice = sliceDice; +exports.treemapSquarify = squarify; +exports.treemapResquarify = resquarify; +exports.forceCenter = center$1; +exports.forceCollide = collide; +exports.forceLink = link; +exports.forceManyBody = manyBody; +exports.forceSimulation = simulation; +exports.forceX = x$3; +exports.forceY = y$3; +exports.drag = drag; +exports.dragDisable = dragDisable; +exports.dragEnable = yesdrag; +exports.voronoi = voronoi; +exports.zoom = zoom; +exports.zoomIdentity = identity$6; +exports.zoomTransform = transform; +exports.brush = brush; +exports.brushX = brushX; +exports.brushY = brushY; +exports.brushSelection = brushSelection; +exports.chord = chord; +exports.ribbon = ribbon; +exports.geoAlbers = albers; +exports.geoAlbersUsa = albersUsa; +exports.geoArea = area$2; +exports.geoAzimuthalEqualArea = azimuthalEqualArea; +exports.geoAzimuthalEqualAreaRaw = azimuthalEqualAreaRaw; +exports.geoAzimuthalEquidistant = azimuthalEquidistant; +exports.geoAzimuthalEquidistantRaw = azimuthalEquidistantRaw; +exports.geoBounds = bounds; +exports.geoCentroid = centroid$1; +exports.geoCircle = circle$1; +exports.geoClipExtent = extent$1; +exports.geoConicConformal = conicConformal; +exports.geoConicConformalRaw = conicConformalRaw; +exports.geoConicEqualArea = conicEqualArea; +exports.geoConicEqualAreaRaw = conicEqualAreaRaw; +exports.geoConicEquidistant = conicEquidistant; +exports.geoConicEquidistantRaw = conicEquidistantRaw; +exports.geoDistance = distance; +exports.geoEquirectangular = equirectangular; +exports.geoEquirectangularRaw = equirectangularRaw; +exports.geoGnomonic = gnomonic; +exports.geoGnomonicRaw = gnomonicRaw; +exports.geoGraticule = graticule; +exports.geoGraticule10 = graticule10; +exports.geoIdentity = identity$8; +exports.geoInterpolate = interpolate$2; +exports.geoLength = length$2; +exports.geoMercator = mercator; +exports.geoMercatorRaw = mercatorRaw; +exports.geoOrthographic = orthographic; +exports.geoOrthographicRaw = orthographicRaw; +exports.geoPath = index$3; +exports.geoProjection = projection; +exports.geoProjectionMutator = projectionMutator; +exports.geoRotation = rotation; +exports.geoStereographic = stereographic; +exports.geoStereographicRaw = stereographicRaw; +exports.geoStream = geoStream; +exports.geoTransform = transform$1; +exports.geoTransverseMercator = transverseMercator; +exports.geoTransverseMercatorRaw = transverseMercatorRaw; + +Object.defineProperty(exports, '__esModule', { value: true }); + +}))); + + +//aigner: HERE IS WHERE IT ALL STARTS!!! +},{}],2:[function(require,module,exports){ +var d3 = require('d3'); + +var PULSE_DURATION = 700; +var SUB_ANIM_DELAY = 200; +var ACTIVE_COLOR = d3.rgb("seagreen"); + +function Animation(xdsms, rootId, delay) { + this.rootId = rootId; + if (typeof (rootId) === 'undefined') { + this.rootId = 'root'; + } + this.root = xdsms[this.rootId]; + this.xdsms = xdsms; + this.duration = PULSE_DURATION; + this.initialDelay = delay || 0; +} + +Animation.prototype._pulse = function(delay, toBeSelected, option) { + var sel = d3.select("svg." + this.rootId) + .selectAll(toBeSelected) + .transition().delay(delay); + if (option !== "out") { + sel = sel.transition().duration(200) + .style('stroke-width', '8px') + .style('stroke', ACTIVE_COLOR) + .style('fill', function(d) { + if (d.id) { + return ACTIVE_COLOR.brighter(); + }}); + } + if (option !== "in") { + sel.transition().duration(3 * PULSE_DURATION) + .style('stroke-width', null) + .style('stroke', null) + .style('fill', null); + } +}; + +Animation.prototype._animate = function() { + var self = this; + var delay = this.initialDelay; + var animDelay = SUB_ANIM_DELAY; + var graph = self.xdsms[self.rootId].graph; + + var title = d3.select("svg." + self.rootId).select("g.title"); + title.select("text").transition().delay(delay).style("fill", ACTIVE_COLOR); + d3.select("svg." + self.rootId).select("rect.border") + .transition().delay(delay) + .style("stroke-width", '5px').duration(200) + .transition().duration(1000) + .style("stroke", 'black').style("stroke-width", '0px'); + + graph.nodesByStep.forEach(function(nodesAtStep, n, nodesByStep) { + var offsets = []; + nodesAtStep.forEach(function(nodeId) { + var elapsed = delay + n * PULSE_DURATION; + if (n > 0) { + nodesByStep[n-1].forEach(function(prevNodeId) { // eslint-disable-line space-infix-ops + var from = graph.idxOf(prevNodeId); + var to = graph.idxOf(nodeId); + self._pulse(elapsed,"polyline.link_" + from + "_" + to); + }); + } + //aigner: Look for existing xdsms/Sub-xdsms. Only show those, which are expanded + var gnode = "g." + nodeId; + var nodeSel = d3.select("svg." + self.rootId).select(gnode); + var scnId = graph.getNode(nodeId).getScenarioId(); + if (nodeSel.classed("mdo") && self.xdsms[scnId]) + { + self._pulse(elapsed, gnode + " > rect", "in"); + var anim = new Animation(self.xdsms, scnId, elapsed + animDelay); + var offset = anim._animate(); + offsets.push(offset); + self._pulse(offset + elapsed + animDelay, gnode + " > rect", "out"); + } + else + { + self._pulse(elapsed, gnode + " > rect"); + } + }, this); + + if (offsets.length > 0) { + delay += Math.max.apply(null, offsets); + } + delay += animDelay; + }, this); + + title.select("text").transition() + .delay(graph.nodesByStep.length * PULSE_DURATION + delay) + .style("fill", null); + + return graph.nodesByStep.length * PULSE_DURATION; +}; + +Animation.prototype.run = function() { + this._animate(); +}; + +module.exports = Animation; + +},{"d3":1}],3:[function(require,module,exports){ +var UID = "_U_"; +var MULTI_TYPE = "_multi"; + +//aigner: Node() constructor additionally gets the "xdsm" +function Node(xdsm, id, name, type, metadata) { + + var splitUndef = name.split("undefined: ") + if (splitUndef.length>1) {name=splitUndef[1]} + else {name=splitUndef[0]} + + if (typeof (name) === 'undefined') { + name = id; + } + if (typeof (type) === 'undefined') { + type = 'analysis'; + } + this.xdsm = xdsm; + this.id = id; + this.name = name; + this.metadata = metadata; + this.isMulti = (type.search(/_multi$/) >= 0); + this.type = this.isMulti ? + type.substr(0, type.length - MULTI_TYPE.length) : type; +} + +Node.prototype.isMdo = function() { + return this.type === "mdo"; +}; + +Node.prototype.getScenarioId = function() { + if (this.isMdo()) { + var idxscn = this.name.indexOf("_scn-"); + if (idxscn === -1) { + console.log("Warning: MDO Scenario not found. " + + "Bad type or name for node: " + JSON.stringify(this)); + return null; + } + return this.name.substr(idxscn + 1); + } + return null; +}; + +function Edge(from, to, name, row, col, isMulti) { + this.id = "link_" + from + "_" + to; + this.name = name; + this.row = row; + this.col = col; + this.iotype = row < col ? "in" : "out"; + this.io = { + fromU: (from === UID), + toU: (to === UID) + }; + this.from = from; + this.to = to; + this.isMulti = isMulti; +} + +Edge.prototype.isIO = function() { + return this.io.fromU || this.io.toU; +}; + +//aigner: Function creates the xdsm graph +function Graph(mdo, refname) { + this.nodes = [new Node(UID, UID, UID, "user",[])]; + this.edges = []; + this.chains = []; + this.refname = refname || ""; + + //aigner: New numbering due to new workflow definition in KADMOS (Old stuff commented out) + var numbering = Graph.new_number(mdo.workflow); + //var numbering = Graph.number(mdo.workflow); + var numPrefixes = numbering.toNum; + this.nodesByStep = numbering.toNode; + + mdo.nodes.forEach(function(item) { + name = document.createElement("TEXTAREA"); + name = numPrefixes[item.id] + ": " + item.name; + this.nodes.push(new Node(item.xdsm, item.id, name, item.type,item.metadata)); + }, this); + + this.ids = this.nodes.map(function(elt) { + return elt.id; + }); + + mdo.edges.forEach(function(item) { + var idA = this.idxOf(item.from); + var idB = this.idxOf(item.to); + + var isMulti = this.nodes[idA].isMulti || this.nodes[idB].isMulti; + this.edges.push(new Edge(item.from, item.to, item.name, idA, idB, isMulti)); + }, this); + + + //aigner: new chains with new workflow definition for KADMOS (Old stuff commented out) + this.chains = Graph.new_expand(mdo.workflow,mdo.nodes); + // var echain = Graph.expand(mdo.workflow); + // echain.forEach(function(leafChain) { + // if (leafChain.length < 2) { + // throw new Error("Bad process chain (" + leafChain.length + "elt)"); + // } else { + // this.chains.push([]); + // var ids = this.nodes.map(function(elt) { + // return elt.id; + // }); + // leafChain.forEach(function(item, j) { + // if (j !== 0) { + // var idA = ids.indexOf(leafChain[j - 1]); + // if (idA < 0) { + // throw new Error("Process chain element (" + + // leafChain[j - 1] + ") not found"); + // } + // var idB = ids.indexOf(leafChain[j]); + // if (idB < 0) { + // throw new Error("Process chain element (" + + // leafChain[j] + ") not found"); + // } + // if (idA !== idB) { + // this.chains[this.chains.length - 1].push([idA, idB]); + // } + // } + // }, this); + // } + // }, this); + + +} + +Graph.prototype.idxOf = function(nodeId) { + return this.ids.indexOf(nodeId); +}; +Graph.prototype.getNode = function(nodeId) { + return this.nodes[this.ids.indexOf(nodeId)]; +}; + +function _expand(workflow) { + var ret = []; + var prev; + workflow.forEach(function(item) { + if (item instanceof Array) { + if (item[0].hasOwnProperty('parallel')) { + if (prev) { + ret = ret.slice(0, ret.length - 1).concat(item[0].parallel.map( + function(elt) { + return [prev].concat(_expand([elt]), prev); + })); + } else { + throw new Error("Bad workflow structure : " + + "cannot parallel loop without previous starting point."); + } + } else if (prev) { + ret = ret.concat(_expand(item), prev); + } else { + ret = ret.concat(_expand(item)); + } + prev = ret[ret.length - 1]; + } else if (item.hasOwnProperty('parallel')) { + if (prev) { + ret = ret.slice(0, ret.length - 1).concat( + item.parallel.map(function(elt) { + return [prev].concat(_expand([elt])); + })); + } else { + ret = ret.concat(item.parallel.map( + function(elt) { + return _expand([elt]); + })); + } + prev = undefined; + } else { + var i = ret.length - 1; + var flagParallel = false; + while (i >= 0 && (ret[i] instanceof Array)) { + ret[i] = ret[i].concat(item); + i -= 1; + flagParallel = true; + } + if (!flagParallel) { + ret.push(item); + } + prev = item; + } + }, this); + return ret; +} + +Graph.expand = function(item) { + var expanded = _expand(item); + var result = []; + var current = []; + expanded.forEach(function(elt) { + if (elt instanceof Array) { + if (current.length > 0) { + current.push(elt[0]); + result.push(current); + current = []; + } + result.push(elt); + } else { + if (result.length > 0 && current.length === 0) { + var lastChain = result[result.length - 1]; + var lastElt = lastChain[lastChain.length - 1]; + current.push(lastElt); + } + current.push(elt); + } + }, this); + if (current.length > 0) { + result.push(current); + } + return result; +}; + +Graph.new_expand = function(workflow,nodes) { + var ids = nodes.map(function(elt) { + return elt.id; + }); + var result_tmp = []; + for (var i=0; i < workflow.length; i++) + { + var stepNumber = workflow[i].step_number + var edges = workflow[i].edges; + for (var j=0; j < edges.length; j++) + { + var fromNode = edges[j][0]; + var toNode = edges[j][1]; + var fromId = ids.indexOf(fromNode)+1; + var toId = ids.indexOf(toNode)+1; + result_tmp.push([fromId,toId]); + } + } + var result = []; + result.push(result_tmp) + return result; +}; + +Graph.number = function(workflow, num) { + num = (typeof num === 'undefined') ? 0 : num; + var toNum = {}; + var toNode = []; + + function setStep(step, nodeId) { + if (step in toNode) { + toNode[step].push(nodeId); + } else { + toNode[step] = [nodeId]; + } + } + + function setNum(nodeId, beg, end) { + if (end === undefined) { + num = String(beg); + setStep(beg, nodeId); + } else { + num = end + "-" + beg; + setStep(end, nodeId); + } + if (nodeId in toNum) { + toNum[nodeId] += "," + num; + } else { + toNum[nodeId] = num; + } + } + + function _number(wks, num) { + var ret = 0; + if (wks instanceof Array) { + if (wks.length === 0) { + ret = num; + } else if (wks.length === 1) { + ret = _number(wks[0], num); + } else { + var head = wks[0]; + var tail = wks.slice(1); + var beg = _number(head, num); + if (tail[0] instanceof Array) { + var end = _number(tail[0], beg); + setNum(head, beg, end); + beg = end + 1; + tail.shift(); + } + ret = _number(tail, beg); + } + } else if ((wks instanceof Object) && 'parallel' in wks) { + var nums = wks.parallel.map(function(branch) { + return _number(branch, num); + }); + ret = Math.max.apply(null, nums); + } else { + setNum(wks, num); + ret = num + 1; + } + return ret; + } + + _number(workflow, num); + // console.log('toNodes=', JSON.stringify(toNode)); + // console.log('toNum=',JSON.stringify(toNum)); + return {toNum: toNum, toNode: toNode}; +}; + +//aigner: New numbering for the workflow nodes +Graph.new_number = function(workflow, num) { + num = (typeof num === 'undefined') ? 0 : num; + var toNum = {}; + var toNode = []; + + for (var i=0; i < workflow.length; i++) + { + //aigner: Number the nodes with respect to the defined process steps + //--> toNum + //########################################## + for (var j=0; j < workflow[i].process_step_blocks.length; j++) + { + var proc_id_to = workflow[i].process_step_blocks[j]; + if (proc_id_to) + { + + if (!toNum[proc_id_to]) + { + toNum[proc_id_to] = workflow[i].step_number; + } + else + { + toNum[proc_id_to] += "," + workflow[i].step_number; + } + } + } + for (var j=0; j < workflow[i].converger_step_blocks.length; j++) + { + var conv_id_to = workflow[i].converger_step_blocks[j]; + if (conv_id_to) + { + toNum[conv_id_to] += "," + workflow[i].step_number; + var stepID = parseInt(toNum[conv_id_to].split(',')[0])+1; + //aigner: CAUTION --> hard coded exception for coordinator + if (conv_id_to!="id_Coordinator"){toNum[conv_id_to] += "-" + stepID;} + } + } + //########################################## + //--> toNode + //########################################## + var stepNumber = workflow[i].step_number + var nodeId; + if (stepNumber==0){nodeId = [workflow[i].process_step_blocks[0]];} + else + { + var nodeIds = []; + for (var j=0; j<workflow[i].edges.length ;j++) + { + nodeIds.push(workflow[i].edges[j][1]); + } + nodeId = nodeIds; + } + toNode[stepNumber] = nodeId; + //########################################## + } + return {toNum: toNum, toNode: toNode}; +}; + +module.exports = Graph; + +},{}],4:[function(require,module,exports){ +function Labelizer() {} + +Labelizer.strParse = function(str) { + if (str === "") { + return [{base: '', sub: undefined, sup: undefined}]; + } + + //console.log("STR-->") + //console.log(str); + //aigner: Space sign added + var lstr = str.split(','); + var underscores = /_/g; + var rg = /([0-9\-]+: )?([A-Za-z0-9\{\}\(\)\[\]\-\.]+)(_[A-Za-z0-9\-\._]+)?(\^.+)?/; + + var res = lstr.map(function(s) { + var base; + var sub; + var sup; + + //aigner: Modification. xpath is split after each "/" + var s_split = s.split("/"); + s = s_split[s_split.length-1]; + + if ((s.match(underscores) || []).length > 1) { + var mu = s.match(/(.+)^(.+)/); + if (mu) { + return {base: mu[1], sub: undefined, sup: mu[2]}; + } + return {base: s, sub: undefined, sup: undefined}; + } + var m = s.match(rg); + if (m) { + base = (m[1] ? m[1] : "") + m[2]; + if (m[3]) { + sub = m[3].substring(1); + } + if (m[4]) { + sup = m[4].substring(1); + } + } else { + throw new Error("Labelizer.strParse: Can not parse '" + s + "'"); + } + return {base: base, sub: sub, sup: sup}; + }, this); + + return res; +}; + +Labelizer.labelize = function() { + var ellipsis = 0; + + //aigner: createLabel modified. Hide variable names if too long. + function createLabel(selection) + { + selection.each(function(d) { + //console.log("Labelize-->"); + //console.log(d); + var tokens = Labelizer.strParse(d.name); + var text = selection.append("text"); + + var className = selection._groups[0][0].getAttribute("class"); + + if (className.includes("node")) + { + tokens.every(function(token, i, ary) + { + var offsetSub = 0; + var offsetSup = 0; + //aigner: If the node is too big, it will not be shown at first, only when hovering + if (ellipsis < 1 || i < 15) + { + text.append("tspan").text(token.base); + if (token.sub) + { + offsetSub = 10; + text.append("tspan") + .attr("class", "sub") + .attr("dy", offsetSub) + .text(token.sub); + } + if (token.sup) { + offsetSup = -10; + text.append("tspan") + .attr("class", "sup") + .attr("dx", -5) + .attr("dy", -offsetSub + offsetSup) + .text(token.sup); + offsetSub = 0; + } + } else + { + text.append("tspan") + .attr("dy", -offsetSub - offsetSup) + .text("..."); + selection.classed("ellipsized", true); + return false; + } + if (i < ary.length - 1) + { + text.append("tspan") + .attr("dy", -offsetSub - offsetSup) + .text(", "); + } + return true; + }, this); + } + else if(className.includes("edge")) + { + var offsetSub = 0; + var offsetSup = 0; + //aigner: If there are more than 5 variables in an edge, they are not shown! + tokens.every(function(token, i, ary) + { + if(d.io.fromU || d.from =="id_Coordinator"){text_tmp = "inp."} + else if(d.io.toU || d.to=="id_Coordinator"){text_tmp = "outp."} + else{text_tmp = "conn."} + //if (ary.length>1){text_tmp = text_tmp+"s"}; + text.append("tspan") + .attr("dy", -offsetSub - offsetSup) + .text(ary.length + " " + text_tmp); + + selection.classed("ellipsized", true); + return false; + }, this); + } + }); + } + + createLabel.ellipsis = function(value) { + if (!arguments.length) { + return ellipsis; + } + ellipsis = value; + return createLabel; + }; + + return createLabel; +}; + +Labelizer.tooltipize = function() { + var text = ""; + + function createTooltip(selection) { + var tokens = Labelizer.strParse(text); + var html = []; + tokens.forEach(function(token) { + var item = token.base; + if (token.sub) { + item += "<sub>" + token.sub + "</sub>"; + } + if (token.sup) { + item += "<sup>" + token.sup + "</sup>"; + } + html.push(item); + }, this); + selection.html(html.join(", ")); + } + + createTooltip.text = function(value) { + if (!arguments.length) { + return text; + } + text = value; + return createTooltip; + }; + + return createTooltip; +}; + +module.exports = Labelizer; + +},{}],5:[function(require,module,exports){ +var d3 = require('d3'); +var Labelizer = require('./labelizer.js'); + +var WIDTH = 1000; +var HEIGHT = 500; +var X_ORIG = 70; +var Y_ORIG = 20; +var PADDING = 20; +var CELL_W = 250; +var CELL_H = 75; +var MULTI_OFFSET = 3; + +function Cell(x, y, width, height) { + this.x = x; + this.y = y; + this.width = width; + this.height = height; +} + +function Xdsm(graph, svgid, tooltip) { + this.graph = graph; + this.tooltip = tooltip; + this.svg = d3.select(".xdsm") + .append("svg") + .attr("width", WIDTH) + .attr("height", HEIGHT) + .attr("class", svgid); + + this.grid = []; + this.nodes = []; + this.edges = []; +} + +Xdsm.prototype.draw = function(graphName) { + var self = this; + + if (self.graph.refname) { + var ref = self.svg.append('g').classed('title', true); + + var text_tmp = self.graph.refname.replace(/\w/g, function(l){ return l.toUpperCase() }) + + ref.append("text").text(graphName); + var bbox = ref.nodes()[0].getBBox(); + ref.insert("rect", "text") + .attr('x', bbox.x) + .attr('y', bbox.y) + .attr('width', bbox.width) + .attr('height', bbox.height); + + ref.attr('transform', + 'translate(' + X_ORIG + ',' + (Y_ORIG + bbox.height-10) + ')'); + } + + self.nodes = self._createTextGroup("node"); + self.edges = self._createTextGroup("edge"); + + // Workflow + self._createWorkflow(); + + // Layout texts + self._layoutText(self.nodes); + self._layoutText(self.edges); + + // Rectangles for nodes + self.nodes.each(function(d, i) { + var that = d3.select(this); + that.call(self._customRect.bind(self), d, i, 0); + if (d.isMulti) { + that.call(self._customRect.bind(self), d, i, 1 * Number(MULTI_OFFSET)); + that.call(self._customRect.bind(self), d, i, 2 * Number(MULTI_OFFSET)); + } + }); + + // Trapezium for edges + self.edges.each(function(d, i) { + var that = d3.select(this); + that.call(self._customTrapz.bind(self), d, i, 0); + if (d.isMulti) { + that.call(self._customTrapz.bind(self), d, i, 1 * Number(MULTI_OFFSET)); + that.call(self._customTrapz.bind(self), d, i, 2 * Number(MULTI_OFFSET)); + } + }); + + // Dataflow + self._createDataflow(self.edges); + + //aigner: set svg size + var w = CELL_W * (self.graph.nodes.length + 1); + var h = CELL_H * (self.graph.nodes.length + 1); + self.svg.attr("width", w).attr("height", h); + + var bordercolor = 'black'; + self.svg.append("rect") + .classed("border", true) + .attr("x", 4) + .attr("y", 4) + .attr("height", h - 4) + .attr("width", w - 4) + .style("stroke", bordercolor) + .style("fill", "none") + .style("stroke-width", 0); + + //aigner: PlayButton for animation + var playButton = self.svg.append("g").attr("class", "playButton") + .attr("transform", "translate("+ 10 +","+ 10 +")"); + playButton + .append("rect") + .attr("class", "playButton_rect") + .attr("width", 50) + .attr("height", 50) + .attr("rx", 4) + .style("fill", "#666666"); + playButton + .append("path") + .attr("class", "playButton_triangle") + .attr("d", "M15 10 L15 40 L35 25 Z") + .style("fill", "white"); + //aigner: Hide playbutton if there is no workflow process + if(self.graph.nodesByStep.length<1) + { + playButton.attr("visibility","hidden"); + } +}; + +Xdsm.prototype._createTextGroup = function(kind) { + var self = this; + + var group = self.svg.append('g').attr("class", kind + "s"); + + var textGroups = + group.selectAll("." + kind) + .data(this.graph[kind + "s"]) + .enter() + .append("g").attr("class", function(d) { + var klass = kind === "node" ? d.type : "dataInter"; + if (klass === "dataInter" && (d.isIO()||d.from=="id_Coordinator"||d.to=="id_Coordinator")) { + klass = "dataIO"; + } + return d.id + " " + kind + " " + klass; + }).each(function() { + var labelize = Labelizer.labelize().ellipsis(5); + d3.select(this).call(labelize); + }); + + d3.selectAll(".ellipsized") + .on("mouseover", function(d) { + d3.select(this).style("cursor", "pointer") + self.tooltip.transition().duration(200).style("opacity", 0.9); + var pipeData = d.name.split(","); + var pipeVariables=[]; + for (var i=0; i<pipeData.length; i++) + { + if (pipeData[i].includes("/")) + { + var splitPipeData = pipeData[i].split("/"); + pipeVariables.push(splitPipeData[splitPipeData.length-1]); + } + } + + + var pruned_pipeVars = {}; + var tooltipText=""; + pipeVariables.forEach(function(x) { pruned_pipeVars[x] = (pruned_pipeVars[x] || 0)+1; }); + for(var keyName in pruned_pipeVars) { + var textTmp; + var value = pruned_pipeVars[keyName] + if (value>1){textTmp = String(keyName+"("+value+")")} + else{textTmp=String(keyName)} + if (tooltipText==""){tooltipText+=textTmp} + else{tooltipText+=","+textTmp} + } + + var tooltipize = Labelizer.tooltipize().text(tooltipText); + self.tooltip.call(tooltipize) + .style("width", "200px") + .style("left", (d3.event.pageX) + "px") + .style("top", (d3.event.pageY - 28) + "px"); + }) + .on("mouseout", function() { + self.tooltip.transition().duration(500).style("opacity", 0); + }); + + return textGroups; +}; + +Xdsm.prototype._createWorkflow = function() { + // console.log(JSON.stringify(this.graph.chains)); + var workflow = this.svg.insert("g", ":first-child") + .attr("class", "workflow"); + workflow.selectAll("g") + .data(this.graph.chains) + .enter() + .insert('g').attr("class", "workflow-chain") + .selectAll('polyline') + .data(function(d) { return d; }) // eslint-disable-line brace-style + .enter() + .append("polyline") + .attr("class", function(d) { + return "link_" + d[0] + "_" + d[1]; + }) + .attr("points", function(d) { + var w = CELL_W * Math.abs(d[0] - d[1]); + var h = CELL_H * Math.abs(d[0] - d[1]); + var points = []; + if (d[0] < d[1]) { + if (d[0] !== 0) { + points.push((-w) + ",0"); + } + points.push("0,0"); + if (d[1] !== 0) { + points.push("0," + h); + } + } else { + if (d[0] !== 0) { + points.push(w + ",0"); + } + points.push("0,0"); + if (d[1] !== 0) { + points.push("0," + (-h)); + } + } + return points.join(" "); + }) + .attr("transform", function(d) { + var max = Math.max(d[0], d[1]); + var min = Math.min(d[0], d[1]); + var w; + var h; + if (d[0] < d[1]) { + w = CELL_W * max + X_ORIG; + h = CELL_H * min + Y_ORIG; + } else { + w = CELL_W * min + X_ORIG; + h = CELL_H * max + Y_ORIG; + } + return "translate(" + (X_ORIG + w) + "," + (Y_ORIG + h) + ")"; + }); +}; + +Xdsm.prototype._createDataflow = function(edges) { + var dataflow = this.svg.insert("g", ":first-child") + .attr("class", "dataflow"); + + edges.each(function(d, i) { + dataflow.insert("polyline", ":first-child") + .attr("points", function() { + var w = CELL_W * Math.abs(d.col - d.row); + var h = CELL_H * Math.abs(d.col - d.row); + var points = []; + if (d.iotype === "in") { + if (!d.io.fromU) { + points.push((-w) + ",0"); + } + points.push("0,0"); + if (!d.io.toU) { + points.push("0," + h); + } + } else { + if (!d.io.fromU) { + points.push(w + ",0"); + } + points.push("0,0"); + if (!d.io.toU) { + points.push("0," + (-h)); + } + } + return points.join(" "); + }).attr("transform", function() { + var m = (d.col === undefined) ? i : d.col; + var n = (d.row === undefined) ? i : d.row; + var w = CELL_W * m + X_ORIG; + var h = CELL_H * n + Y_ORIG; + return "translate(" + (X_ORIG + w) + "," + (Y_ORIG + h) + ")"; + }); + }); +}; + +Xdsm.prototype._layoutText = function(items) { + var grid = this.grid; + items.each(function(d, i) { + var item = d3.select(this); + if (grid[i] === undefined) { + grid[i] = new Array(items.length); + } + item.select("text").each(function(d, j) { + var that = d3.select(this); + var data = item.data()[0]; + var m = (data.row === undefined) ? i : data.row; + var n = (data.col === undefined) ? i : data.col; + var bbox = that.nodes()[j].getBBox(); + grid[m][n] = new Cell(-bbox.width / 2, 0, bbox.width, bbox.height); + that.attr("x", function() { + return grid[m][n].x; + }).attr("y", function() { + return grid[m][n].y; + }).attr("width", function() { + return grid[m][n].width; + }).attr("height", function() { + return grid[m][n].height; + }); + }); + }); + + items.attr("transform", function(d, i) { + var m = (d.col === undefined) ? i : d.col; + var n = (d.row === undefined) ? i : d.row; + var w = CELL_W * m + X_ORIG; + var h = CELL_H * n + Y_ORIG; + return "translate(" + (X_ORIG + w) + "," + (Y_ORIG + h) + ")"; + }); +}; + +Xdsm.prototype._customRect = function(node, d, i, offset) { + var grid = this.grid; + node.insert("rect", ":first-child").attr("x", function() { + return grid[i][i].x + offset - PADDING; + }).attr("y", function() { + return -grid[i][i].height * 2 / 3 - PADDING - offset; + }).attr("width", function() { + return grid[i][i].width + (PADDING * 2); + }).attr("height", function() { + return grid[i][i].height + (PADDING * 2); + }).attr("rx", function() { + var rounded = d.type === 'optimization' || + d.type === 'mda' || + d.type === 'doe' || + d.type === 'converger'; + return rounded ? (grid[i][i].height + (PADDING * 2)) / 2 : 0; + }).attr("ry", function() { + var rounded = d.type === 'optimization' || + d.type === 'mda' || + d.type === 'doe' || + d.type === 'converger'; + return rounded ? (grid[i][i].height + (PADDING * 2)) / 2 : 0; + }); +}; + +Xdsm.prototype._customTrapz = function(edge, d, i, offset) { + var grid = this.grid; + edge.insert("polygon", ":first-child").attr("points", function(d) { + var pad = 5; + var w = grid[d.row][d.col].width; + var h = grid[d.row][d.col].height; + var topleft = (-pad - w / 2 + offset) + ", " + + (-pad - h * 2 / 3 - offset); + var topright = (w / 2 + pad + offset + 5) + ", " + + (-pad - h * 2 / 3 - offset); + var botright = (w / 2 + pad + offset - 5 + 5) + ", " + + (pad + h / 3 - offset); + var botleft = (-pad - w / 2 + offset - 5) + ", " + + (pad + h / 3 - offset); + var tpz = [topleft, topright, botright, botleft].join(" "); + return tpz; + }); +}; + +module.exports = Xdsm; + +},{"./labelizer.js":4,"d3":1}],6:[function(require,module,exports){ +/* + * XDSMjs + * Copyright 2016 Rémi Lafage + */ +"use strict"; + + + + +var d3 = require('d3'); +var Graph = require('./src/graph'); +var Xdsm = require('./src/xdsm'); +var Animation = require('./src/animation'); + + +//aigner: NEW! +//#####################################################################// +//aigner: functions for drawing expand- and collapse-symbols +function drawExpandSymbol(aCircle, line1, line2) +{ + aCircle = aCircle + .attr("r", 10) + .style("stroke", "black") + .style("stroke-width", 2) + .style("fill", "green") + .style("fill-opacity", .6) + line1 = line1 + .attr("x1", parseFloat(aCircle.attr("cx"))-5) + .attr("y1", parseFloat(aCircle.attr("cy"))) + .attr("x2", parseFloat(aCircle.attr("cx"))+5) + .attr("y2", parseFloat(aCircle.attr("cy"))) + .style("stroke", "black") + .style("stroke-width", 2); + line2 = line2 + .attr("x1", parseFloat(aCircle.attr("cx"))) + .attr("y1", parseFloat(aCircle.attr("cy"))-5) + .attr("x2", parseFloat(aCircle.attr("cx"))) + .attr("y2", parseFloat(aCircle.attr("cy"))+5) + .style("stroke", "black") + .style("stroke-width", 2); +} +function drawRemoveSymbol(anXdsm, aCircle, aMinus) +{ + var xOffset=150; + var yOffset=12; + aCircle = aCircle + .attr("cx", anXdsm.svg.attr("width")-xOffset) + .attr("cy", yOffset) + .attr("r", 10) + .classed("remCircle",true) + aMinus = aMinus + .attr("x1", anXdsm.svg.attr("width")-xOffset+5) + .attr("y1", yOffset) + .attr("x2", anXdsm.svg.attr("width")-xOffset-5) + .attr("y2", yOffset) + .classed("remMinus",true) +} +function drawTreeRemoveSymbol(aRemoveSymbol) +{ + aRemoveSymbol = aRemoveSymbol + .attr("class", "treeRemoveSymbol") + .attr("transform", "translate(38,12)") + var circle = aRemoveSymbol.append("circle"); + var minus = aRemoveSymbol.append("line"); + var cx = -20; + var cy = 12; + circle = circle + .attr("cx", cx+5) + .attr("cy", cy) + .attr("r", 10) + .classed("remCircle",true) + minus = minus + .attr("x1", cx) + .attr("y1", cy) + .attr("x2", cx+10) + .attr("y2", cy) + .classed("remMinus",true) + aRemoveSymbol + .on("mouseover", function(){ + d3.select(this).style("cursor", "pointer") + circle.style("fill", "red").style("fill-opacity", .8); + }) + .on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)}) +} + +//aigner: Update of the sub workflows +function update_subXdsm(xdsms, refName) +{ + var playButton = d3.select(".xdsm").select("."+refName).select(".playButton"); + var rect = playButton.select(".playButton_rect"); + playButton.on("mouseover",function(){ + d3.select(this).style("cursor", "pointer") + rect.style("fill","#3399FF"); + }) + .on("mousedown", function() + { + rect.style("fill","#3399FF"); + var anim = new Animation(xdsms, refName); + anim.run(); + }) + .on("mouseup", function(){rect.style("fill","#4B4B4B");}) + .on("mouseout", function(){rect.style("fill","#666666");}) +} +//d3-context-menu for right-click-option +d3.contextMenu = function (menu, openCallback) { + + // create the div element that will hold the context menu + d3.selectAll('.d3-context-menu').data([1]) + .enter() + .append('div') + .attr('class', 'd3-context-menu'); + + // close menu + d3.select('body').on('click.d3-context-menu', function() { + d3.select('.d3-context-menu').style('display', 'none'); + }); + + // this gets executed when a contextmenu event occurs + return function(data, index) { + var elm = this; + + d3.selectAll('.d3-context-menu').html(''); + var list = d3.selectAll('.d3-context-menu').append('ul'); + list.selectAll('li').data(menu).enter() + .append('li') + .html(function(d) { + return d.title; + }) + .on('mousedown', function(d, i) { + d.onMouseDown(elm, data, index); + }) + .on('mouseup', function(d, i) { + d.onMouseUp(elm, data, index); + d3.select('.d3-context-menu').style('display', 'none'); + }) + .on('mouseenter',function(d,i){ + d.onMouseOver(elm,data,index); + if(d.childrenItems.length>0 ) + { + d3.select(this).selectAll("ul").remove(); + d3.select(this) + .append("ul") + .selectAll("li") + .data(d.childrenItems) + .enter().append("li") + .text(function(d) { return d.title; }) + .on("mouseenter", function(d,i){ + d.onMouseOver(elm,data,index); + }) + .on('click', function(d, i) { + d.onMouseClick(elm, d, index); + }) + .on('mouseleave',function(d,i){ + + }); + } + else + return false; + }) + .on('mouseleave',function(d,i){ + d3.select(this).selectAll("ul").style('display', 'none') + }); + + + + // the openCallback allows an action to fire before the menu is displayed + // an example usage would be closing a tooltip + if (openCallback) openCallback(data, index); + + // display context menu + d3.select('.d3-context-menu') + .style('left', (d3.event.pageX - 2) + 'px') + .style('top', (d3.event.pageY - 2) + 'px') + .style('display', 'block'); + + d3.event.preventDefault(); + }; +}; +//aigner: Move to front function +d3.selection.prototype.moveToFront = function() { + return this.each(function(){ + this.parentNode.appendChild(this); + }); +}; +//aigner: Include function +function include(arr,obj) { + return (arr.indexOf(obj) != -1); +} + +//aigner: Make KADMOS Menu +//#####################################################################// +function makeKadmosMenu(theGraphs,currentView,currentID) +{ + var imageWidth = 200; + var imageHeight = 150; + var padding = 10; + var rectHeight = 70; + var imgSize = 40; + var visPackDiv = d3.select("body").append("div").attr("class","vispackDiv"); + var visPackSvg = visPackDiv.append("svg") + .attr("class","visPackSvg") + .attr("width",imageWidth*5+40) + .attr("height",imageHeight+40) + .attr("transform", "translate(" + + String(10) + "," + String(10) + ")") + + + var defs = visPackSvg.append("defs"); + var filter = defs.append("filter") + .attr("id", "drop-shadow") + .attr("height", "130%") + filter.append("feColorMatrix") + .attr("values", "0.2 0 0 0 0 0 0.2 0 0 0 0 0 0.2 0 0 0 0 0 1 0") + .attr("result", "matrixOut") + filter.append("feGaussianBlur") + .attr("in", "matrixOut") + .attr("stdDeviation", 5) + .attr("result", "blur") + filter.append("feOffset") + .attr("in", "blur") + .attr("dx", 5) + .attr("dy", 5) + .attr("result", "offsetBlur") + var feMerge = filter.append("feMerge"); + feMerge.append("feMergeNode") + .attr("in", "offsetBlur") + feMerge.append("feMergeNode") + .attr("in", "SourceGraphic"); + + var visPackFrame = visPackSvg.append("rect") + .attr("width",imageWidth*5+12) + .attr("height",imageHeight) + .attr("fill", "white") + .style("filter", "url(#drop-shadow)") + + var imgs = visPackSvg.selectAll("image").data([0]); + imgs.enter() + .append("svg:image") + .attr("x",5) + .attr("xlink:href", "file:../supportFiles/include/KADMOS_VisualizationPack_Icon.png") + .attr("width", imageWidth) + .attr("height", imageHeight) + .attr("position", "relative") + + var offset_tmp = 860; + visPackSvg.append("text") + .attr("transform", "translate(" + + String(210) + "," + String(35) + ")") + .attr("font-family","Arial") + .attr("font-size","32pt") + .attr("fill","#666666") + .text("KADMOS Visualization Package") + + + var acknGroup = visPackSvg.append("g").attr("class","acknGroup").classed("acknGroup",true) + var acknRect = acknGroup.append("rect").classed("ackn",true) + .attr("height", 30) + .attr("transform", "translate(" + + String(offset_tmp) + "," + String(2) + ")") + acknGroup.append("text") + .attr("transform", "translate(" + + String(offset_tmp+padding/2) + "," + String(20) + ")") + .attr("text-anchor", "front") + .attr("font-family","Arial") + .attr("font-size","12pt") + .attr("fill","white") + .text("Acknowledgements") + acknRect = acknRect.attr("width", function(d) {return this.parentNode.getBBox().width+padding;}) + acknRect = acknRect.classed("VisPackMenu",true) + acknGroup = acknGroup.on("mouseover", function(){d3.select(this).style("cursor", "pointer")}) + .on("click",function(){window.open("../supportFiles/include/acknowledgements.html", '_blank');}) + + var acknGroup2 = visPackSvg.append("g").attr("class","acknGroup2") + .attr("transform", "translate(" + + String(offset_tmp) + "," + String(40+padding) + ")") + acknGroup2.append("text") + .classed("acknText",true) + .attr("dy", "0em") + .text("Copyright:") + acknGroup2.append("text") + .classed("acknText",true) + .attr("dy", "1.5em") + .text("B. Aigner") + var imgs = visPackSvg.selectAll("img").data([0]); + imgs.enter() + .append("svg:image") + .attr("xlink:href", "file:../supportFiles/include/RWTH_Logo.png") + .attr("x", String(offset_tmp+85)) + .attr("y", "3em") + .attr("width", "60") + .attr("height", "40"); + acknGroup2.append("text") + .classed("acknText",true) + .attr("dy", "3.2em") + .text("I. van Gent") + var imgs = visPackSvg.selectAll("img").data([0]); + imgs.enter() + .append("svg:image") + .attr("xlink:href", "file:../supportFiles/include/TUDelft_Logo.png") + .attr("x", String(offset_tmp+85)) + .attr("y", "4.7em") + .attr("width", "60") + .attr("height", "40"); + + + var ul = d3.select("body").append("div").attr("class","newDiv").append("ul") + function makeViewButtons(graphs_tmp,aName, visFile) + { + var dropdown1 = ul.append("li").on("mouseover", function(){d3.select(this).style("cursor", "default")}) + dropdown1.append("a").text(aName) + dropdown1.append("img").attr("src","../supportFiles/include/AGILE_Icon.png") + .attr("align","left") + .style("margin-left","6px") + .style("margin-right","0px") + .style("margin-top","6px") + .style("margin-bottom","6px") + .attr("height","42") + .attr("width","42") + var links = dropdown1.append("ul"); + for (var i=0; i < graphs_tmp.length; i++) + { + makeDropDown(graphs_tmp[i],visFile,links,aName) + } + } + function makeDropDown(theData,file,theLinks,aName) + { + var linkLi = theLinks.append("li"); + var link = linkLi.append("a").text(theData.description) + if (theData.id == currentID && currentView == aName) + { + link + .on("mouseover", function(){ + d3.select(this).style("cursor", "default")}) + linkLi.style("background","#888") + } + else + { + link + .on("mouseover", function(){d3.select(this).style("cursor", "pointer")}) + .on("click", function(){ + window.location.replace("../supportFiles/"+file, '_blank'); + window.localStorage.setItem("graphID", theData.id);}) + } + } + makeViewButtons(theGraphs,"XDSM","xdsm.html"); + makeViewButtons(theGraphs,"Edge Bundles","edgeBundles.html"); + makeViewButtons(theGraphs,"Sankey Diagram","sankeyDiagram.html"); +} +//#####################################################################// + +function showRightClickOption() +{ + var optionGroupDiv = d3.select("body").append("div").attr("class","optionDiv") + .style("left",(d3.event.pageX) + "px") + .style("top",(d3.event.pageY - 28) + "px") + .style("position", "absolute"); + var optionGroupSvg = optionGroupDiv.append("svg").attr("class","optionGroupSvg"); + var optionGroup = optionGroupSvg.append("g").attr("class","optionGroup"); + var optionGroupRect = optionGroup.append("rect") + .transition().delay(400) + .attr("height", 25) + .attr("fill", "#f2f2f2") + .style("border-radius", "4px") + .style("border", "1px solid #d4d4d4") + .attr("fill-opacity", 1.) + .attr("width", 175) + .attr("stroke", "black") + .attr("stroke-width", 1) + var optionText = optionGroup.append("text") + .transition().delay(400) + .attr("transform", "translate(10,18)") + .attr("font-family","Arial") + .attr("font-size","12pt") + .attr("fill","black") + .attr("fill-opacity",1.) + .text("Click right for options") +} +function hideRightClickOption() +{ + d3.selectAll(".optionDiv").remove() +} + +//aigner: Function creates a table +function tabulate(aTable,data,columns) { + var thead = aTable.append('thead'); + var tbody = aTable.append('tbody'); + + // create a row for each object in the data + var rows = tbody.selectAll('tr') + .data(data) + .enter() + .append('tr'); + + // create a cell in each row for each column + var cells = rows.selectAll('td') + .data(function (row) { + return columns.map(function (column) { + return {column: column, value: row[column]}; + }); + }) + .enter() + .append('td') + .html(function (d) { return d.value; }); + + return aTable; +} + +function loader(config) { + return function() { + var radius = Math.min(config.width, config.height) / 2; + var tau = 2 * Math.PI; + + var arc = d3.svg.arc() + .innerRadius(radius*0.5) + .outerRadius(radius*0.9) + .startAngle(0); + + var svg = d3.select(config.container).append("svg") + .attr("id", config.id) + .attr("width", config.width) + .attr("height", config.height) + .append("g") + .attr("transform", "translate(" + config.width / 2 + "," + config.height / 2 + ")") + + var background = svg.append("path") + .datum({endAngle: 0.33*tau}) + .style("fill", "#4D4D4D") + .attr("d", arc) + .call(spin, 1500) + + function spin(selection, duration) { + selection.transition() + .ease("linear") + .duration(duration) + .attrTween("transform", function() { + return d3.interpolateString("rotate(0)", "rotate(360)"); + }); + + setTimeout(function() { spin(selection, duration); }, duration); + } + + function transitionFunction(path) { + path.transition() + .duration(7500) + .attrTween("stroke-dasharray", tweenDash) + .each("end", function() { d3.select(this).call(transition); }); + } + + }; +} + + +var myLoader = loader({width: 960, height: 500, container: "#loader_container", id: "loader"}); + + + +//aigner: NEW! +//aigner: Here, the .json file is read and the XDSM is created +//#####################################################################// +//get the current graph ID from the KADMOS visualiazation package's starting page +var graphID = "01"; +if (window.localStorage.getItem("graphID")) +{ + graphID=window.localStorage.getItem("graphID"); +} +var jsonFile = "json/xdsm_"+graphID+".json"; + +//Get graph info from graphs.json file +var graphs; +var currentGraph; +var varCategories; +d3.json("json/graphs.json", function(error, aGraphInfo) +{ + if (error) {throw error;} + graphs = aGraphInfo.graphs; + for (var i=0;i<graphs.length;i++) + { + if (graphs[i].id==graphID) + { + currentGraph = graphs[i] + } + } + + varCategories = aGraphInfo.categories; +}) + + +d3.json(jsonFile, function(error, mdo) +{ + if (error) {throw error;} + + + //aigner: Tree option menu to select which kind of tree view the user wants to see + //#####################################################################// + function showFullTree(categoryName) + { + //expandSymbolDiv.remove(); + var treeLayoutdiv = d3.select("body").append("div").attr("class","treeDiv") + .style("left",(d3.event.pageX) + "px") + .style("top",(d3.event.pageY - 28) + "px") + .style("position", "absolute") + var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG") + var treeLayout = treeLayoutSVG.append("g").attr("class","treeLayout"); + var name = "Full tree view"; + maketreeLayout(emptyArray, treeLayout, treeLayoutSVG, treeLayoutdiv, name, categoryName); + //Remove Symbol is created + var removeSymbol = treeLayout.append("g"); + drawTreeRemoveSymbol(removeSymbol); + removeSymbol.on("mousedown", function(d) + { + treeLayoutdiv.remove(); + }) + } + + var childrenItems = []; + for (var j=0; j< varCategories.length; j++) + { + childrenItems.push({title: 'according to ' + varCategories[j].description, + identifier: varCategories[j].name+"_"+graphID, + onMouseClick: function(elm, d, i) {showFullTree(d.identifier)}, + onMouseOver: function(elm,d,i){}}) + } + var treeOptionMenu = [ + { + title: 'Show variable tree...', + onMouseDown: function(elm, d, i) { + }, + onMouseUp: function(elm, d, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: childrenItems + } + ] + //#####################################################################// + + //aigner: KADMOS menu + //################################################################################################// + makeKadmosMenu(graphs,"XDSM",graphID); + //################################################################################################// + //aigner: New Feature --> treeLayout in the bottom + //################################################################################################// + //aigner: tree layout is done + var emptyArray; + var expandSymbolDiv = d3.select("body").append("div").attr("class","expandSymbolDiv"); + var expandSymbolSvg = expandSymbolDiv.append("svg").attr("width",400).attr("height",100); + var expandSymbol = expandSymbolSvg.append("g") + .attr("class", "newExpandSymbol") + .attr("transform", "translate(38,12)"); + var expandRect = expandSymbol.append("rect") + .attr("x",-28) + .attr("height", 50) + .attr("fill", "#666666") + .attr("stroke", "none") + .attr("stroke-width", 2) + .attr("fill-opacity", 1) + var expCircle = expandSymbol.append("circle") + .attr("cx", -10) + .attr("cy", 25); + var expLine1 = expandSymbol.append("line"); + var expLine2 = expandSymbol.append("line"); + drawExpandSymbol(expCircle,expLine1,expLine2); + expCircle = expCircle.attr("fill", "white"); + expandSymbol.append("text") + .attr("transform", "translate(15,35)") + .attr("font-family","Arial") + .attr("font-size","24pt") + .attr("fill","white") + .text("Show full variable tree") + expandRect.attr("width", function(d) {return this.parentNode.getBBox().width+40}) + expandSymbol + .on("mouseover", function(){ + d3.select(this).style("cursor", "pointer") + expCircle.style("fill", "green").style("fill-opacity", .8); + expandRect.style("fill", "#4677f8"); + showRightClickOption(); + }) + .on("mouseout", function(){ + expCircle.style("fill", "green").style("fill-opacity", .6); + expandRect.style("fill", "#666666"); + hideRightClickOption(); + }) + .on('contextmenu', d3.contextMenu(treeOptionMenu)) + //################################################################################################// + + //create the xdsm div + d3.select("body").append("div").attr("class","xdsm"); + //create tooltip + var tooltip = d3.select("body").selectAll(".tooltip").data(['tooltip']) + .enter().append("div") + .attr("class", "tooltip") + .style("opacity", 0); + + var scenarioKeys = Object.keys(mdo).sort(); + var xdsms = {}; + + //If there is only one MDO and it is not named root, then it is created + if (scenarioKeys.indexOf('root') === -1) + { + var scenarioKeys_tmp = []; + scenarioKeys_tmp.push('root'); + scenarioKeys = scenarioKeys_tmp; + var mdo_tmp={}; + mdo_tmp['root']=mdo; + mdo = mdo_tmp; + } + // new format managing several XDSM + var index = scenarioKeys.indexOf('root'); + if (index > -1) + { + scenarioKeys.splice(index, 1); + } + scenarioKeys.unshift('root'); + + var xdsm; + scenarioKeys.forEach(function(k) + { + if (mdo.hasOwnProperty(k) && k =="root") + { + //aigner: Here the graphs are created + var graph = new Graph(mdo[k], k); + //aigner: Here the xdsms are drawn + xdsms[k] = new Xdsm(graph, k, tooltip); + xdsms[k].draw(currentGraph.name); + xdsm = xdsms[k]; + update_subXdsm(xdsms, k); + prepareTreeLayout(xdsms, k); + } + }, this) + + + xdsm.svg.selectAll(".node") + .each(function(d) + { + var gNode = this; + var d3gNode = d3.select(gNode); + + //aigner: Creation of input/output tree + //############################################################ + function showIOTree(categoryName, k, io) + { + var edges = d3.selectAll(".edge"); + var array=""; + edges.each(function(d) + { + if (io=="in") + { + if (d.to == k.id) + { + array = array + ", " + d.name; + } + } + else if (io=="out") + { + if (d.from == k.id) + { + array = array + ", " + d.name; + } + } + }) + var treeLayoutdiv = d3.select("body").append("div").attr("class","treeDiv_input_"+k.id) + .style("left",(d3.event.pageX) + "px") + .style("top",(d3.event.pageY - 28) + "px") + .style("position", "absolute") + var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG") + var treeLayout = treeLayoutSVG.append("g").attr("class","treeLayout"); + var name = "Input tree view: " + k.id; + maketreeLayout(array, treeLayout, treeLayoutSVG, treeLayoutdiv, name, categoryName); + //Remove Symbol is created + var removeSymbol = treeLayout.append("g"); + drawTreeRemoveSymbol(removeSymbol); + removeSymbol.on("click", function(d) + { + treeLayoutdiv.remove(); + }) + } + //############################################################ + + var inputChildrenitems = []; + var outputChildrenitems = []; + for (var j=0; j< varCategories.length; j++) + { + inputChildrenitems.push({title: 'according to ' + varCategories[j].description, + identifier: varCategories[j].name+"_"+graphID, + onMouseClick: function(elm, data, i) {showIOTree(data.identifier,d,"in")}, + onMouseOver: function(elm,data,i){}}); + outputChildrenitems.push({title: 'according to ' + varCategories[j].description, + identifier: varCategories[j].name+"_"+graphID, + onMouseClick: function(elm, data, i) {showIOTree(data.identifier,d,"out")}, + onMouseOver: function(elm,data,i){}}); + } + + + function showToolTable(aTool) + { + var toolTableDiv = d3.select("body").append("div").attr("class","toolTableDiv") + .style('left', (d3.event.pageX - 2) + 'px') + .style('top', (d3.event.pageY - 2) + 'px') + .style("position", "absolute") + var toolTableGroup = toolTableDiv.append("g").attr("class","toolTableGroup") + + //Drag Function for variable table + var xPos_init = d3.event.pageX - 2; + var yPos_init = d3.event.pageY - 2; + var xOffset_tmp; + var yOffset_tmp; + var drag = toolTableDiv.call(d3.drag() + .on("start", dragstarted) + .on("drag", dragged) + .on("end", dragended)); + function dragstarted() { + d3.select(this).raise().classed("active", true); + xOffset_tmp = xPos_init-d3.event.x; + yOffset_tmp = yPos_init-d3.event.y; + } + function dragged() { + d3.select(this).classed("active", false) + .style("left",(d3.event.x+xOffset_tmp) + "px") + .style("top",(d3.event.y+yOffset_tmp) + "px") + } + function dragended() { + d3.select(this).classed("active", false); + xPos_init = d3.event.x+xOffset_tmp; + yPos_init = d3.event.y+yOffset_tmp; + } + + var aToolNameSplit = aTool.name.split(': ') + var headLine; + if (aToolNameSplit.length>1){headLine = "Competence Information: (" + aToolNameSplit[1] + ")";} + else {headLine = "Competence Information: (" + aToolNameSplit[0] + ")";} + + var tabRemoveSVG = toolTableGroup.append("svg") + .attr("width",800) + .attr("height",26) + var tabRemoveRect = tabRemoveSVG.append("rect") + .attr("width", "100%") + .attr("height", "100%") + .attr("fill", "white"); + var tabRemoveSymbol = tabRemoveSVG.append("g"); + tabRemoveSymbol = tabRemoveSymbol + .attr("class", "tabRemoveSymbol") + .attr("transform", "translate(26,0)") + var circle = tabRemoveSymbol.append("circle") + .classed("remCircle",true) + var minus = tabRemoveSymbol.append("line").classed("remMinus",true) + var cx = -20; + var cy = 12; + circle = circle + .attr("cx", cx+5) + .attr("cy", cy) + .attr("r", 10) + minus = minus + .attr("x1", cx) + .attr("y1", cy) + .attr("x2", cx+10) + .attr("y2", cy) + + tabRemoveSVG.append("text").attr("class","tabRemoveText") + .attr("transform", "translate(26,20)") + .attr("fill", "black") + .style("font-family", "Arial") + .style("font-size", "16pt") + .style("font-weight", "bold") + .text(headLine); + + tabRemoveSymbol + .on("mouseover", function(){ + d3.select(this).style("cursor", "pointer") + circle.style("fill", "red").style("fill-opacity", .8); + }) + .on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)}) + tabRemoveSymbol.on("click", function(d) + { + toolTableDiv.remove(); + }) + + + var data = []; + // render the table(s) + if (aTool.metadata.length==0) + { + data.push({ "name" : "NO TOOL METADATA AVAILABLE", "value" : "..." }) + } + for (var j=0; j < aTool.metadata.length;j++) + { + var metaData = aTool.metadata[j] + for(var key in metaData){ + data.push({ "name" : key, "value" : metaData[key] }) + } + + } + var table = toolTableGroup.append('table'); + tabulate(table,data,['name', 'value']); // 2 column table + } + + //menu --> functions for right click options + var toolMenu = [ + { + title: 'Show competence info', + onMouseDown: function(elm, k, i) { + showToolTable(k); + }, + onMouseUp: function(elm, k, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: [] + }, + { + title: 'Show input variable tree...', + onMouseDown: function(elm, k, i) { + }, + onMouseUp: function(elm, k, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: inputChildrenitems + }, + { + title: 'Show output variable tree...', + onMouseDown: function(elm, k, i) { + }, + onMouseUp: function(elm, k, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: outputChildrenitems + } + ] + + scenarioKeys.forEach(function(k) + { + if (k == d.xdsm) + { + var cx, cy; + for (var j=0; j < gNode.childNodes.length; j++) + { + if(gNode.childNodes[j].nodeName != "text") + { + cx = gNode.childNodes[j].getAttribute("width")/2-13; + cy = -gNode.childNodes[j].getAttribute("height")/2+8; + } + } + //Expand Symbol is created + var expandSymbol = d3.select(gNode).append("g").attr("class", "expandSymbol"); + var circle = expandSymbol.append("circle") + .attr("cx", cx) + .attr("cy", cy); + var line1 = expandSymbol.append("line"); + var line2 = expandSymbol.append("line"); + drawExpandSymbol( circle, line1,line2); + expandSymbol = expandSymbol + .on("mouseover", function(){circle.style("fill-opacity", .8);}) + .on("mouseout", function(){circle.style("fill-opacity", .6)}) + .on("mousedown", function(){circle.style("fill", "darkgreen")}) + .on("mouseup", function(){circle.style("fill", "green")}) + + //TODO - aigner: on mouseover there should be a text box telling the options + d3gNode = d3gNode + .on("click", function() + { + //On mousedown, additional sub-workflows will be visualized + var createNew = true; + if(xdsms[k]){createNew=false;} + if (createNew == true) + { + var graph = new Graph(mdo[k], k); + xdsms[k] = new Xdsm(graph, k, tooltip); + xdsms[k].draw(currentGraph.name); + update_subXdsm(xdsms, k); + prepareTreeLayout(xdsms, k); + //Remove Symbol is created + var removeSymbol = xdsms[k].svg.append("g") + .attr("class", "removeSymbol"); + var circle = removeSymbol.append("circle"); + var minus = removeSymbol.append("line"); + drawRemoveSymbol(xdsms[k], circle, minus); + //Clicking on remove symbol will remove sub-workflow + removeSymbol = removeSymbol + .on("mouseover", function(){ + showRightClickOption() + circle.style("fill", "red").style("fill-opacity", .8);}) + .on("mouseout", function(){ + hideRightClickOption(); + circle.style("fill", "red").style("fill-opacity", .6)}) + .on("mousedown", function(){circle.style("fill", "darkred").style("fill-opacity",1);}) + .on("mouseup", function(d) + { + xdsms[k].svg.remove(); + d3.select(".treeDiv"+k).remove(); + delete xdsms[k]; + }) + + xdsms[k].svg.selectAll(".node") + .each(function(d) + { + var gNode = this; + d3.select(gNode).on('contextmenu', d3.contextMenu(toolMenu)); + }) + } + }) + } + }) + d3gNode = d3gNode.on('contextmenu', d3.contextMenu(toolMenu)) + .on("mouseover", function(){showRightClickOption()}) + .on("mouseout", function(){hideRightClickOption()}) + }) + + + function prune_tree(parentXPath, objArray, xPathList) + { + var firstElement = "/"+xPathList.split("/")[1]+"/"; + for (var i = 0; i < objArray.length; ++i) + { + var obj = objArray[i]; + var objXPath; + + //aigner: If object has children append a "/" as xPath separator + //else append comma as indicator for last element in the xPath + if (obj.children){objXPath = parentXPath+objArray[i].name+"/";} + else{objXPath = parentXPath+objArray[i].name;} + var objXPathFromFirst = objXPath.split(firstElement); + + // console.log("Current node ->") + // console.log(firstElement+objXPathFromFirst[1]) + // console.log(xPathList) + + var delete_it = true; + if(objXPathFromFirst[1]==undefined) + { + delete_it = false; + } + else + { + if (include(xPathList, firstElement+objXPathFromFirst[1])) + { + delete_it = false; + } + } + if (delete_it==true) + { + // console.log("delete ->") + // console.log( objXPathFromFirst[1]) + // console.log(xPathList) + + objArray.splice(i, 1); + i--; + } + else + { + // console.log("do not delete ->") + // console.log(objXPath); + if (obj.children) + { + if (obj.children.length==0) + { + objArray.splice(i, 1); + i--; + prune_tree(parentXPath, objArray, xPathList) + } + else{prune_tree(objXPath, obj.children, xPathList);} + + } + } + } + } + function getPrunedLeafNodes(parentXPath, objArray, xPathList, leafNodes) + { + var firstElement = "/"+xPathList.split("/")[1]+"/"; + for (var i = 0; i < objArray.length; ++i) + { + var obj = objArray[i]; + var objXPath; + + //aigner: If object has children append a "/" as xPath separator + //else append comma as indicator for last element in the xPath + if (obj.children){objXPath = parentXPath+objArray[i].name+"/";} + else{objXPath = parentXPath+objArray[i].name;} + var objXPathFromFirst = objXPath.split(firstElement); + + // console.log("Current node ->") + // console.log(firstElement+objXPathFromFirst[1]) + // console.log(xPathList) + + var delete_it = true; + if(objXPathFromFirst[1]==undefined) + { + delete_it = false; + } + else + { + if (include(xPathList, firstElement+objXPathFromFirst[1])) + { + delete_it = false; + } + } + if (delete_it==true) + { + // console.log("delete ->") + // console.log( objXPathFromFirst[1]) + // console.log(xPathList) + + objArray.splice(i, 1); + i--; + } + else + { + // console.log("do not delete ->") + // console.log(objXPath); + if (obj.children) + { + if (obj.children.length==0) + { + objArray.splice(i, 1); + i--; + getPrunedLeafNodes(parentXPath, objArray, xPathList, leafNodes) + } + else{getPrunedLeafNodes(objXPath, obj.children, xPathList, leafNodes);} + } + else + { + obj.xPath = objXPath; + leafNodes.push(obj); + }; + } + } + } + function clean_tree(objArray) + { + for (var i = 0; i < objArray.length; ++i) + { + var obj = objArray[i]; + if (obj.children) + { + if (obj.children.length==0) + { + objArray.splice(i, 1); + i--; + } + clean_tree(obj.children); + } + } + } + function countElements(node, counter) + { + counter ++; + if (node.children) + { + if (node.children.length !== 0) + { + node.children.forEach(function(n) + { + counter = countElements(n, counter); + }); + } + } + return counter; + } + + function prepareTreeLayout(xdsms, refName) + { + function showEdgeTree(data,categoryName) + { + //aigner:Split the pipeLineData at the comma separator + var array = data.name.split(',') + //aigner:Append a comma to all xPath to indicate the end of the xPath + for(var i=0;i<array.length;i++){ + array[i]=array[i]+","; + } + var treeLayout; + var treeLayoutdiv = d3.select("body").append("div").attr("class","treeDiv_"+data.from+"_"+data.to) + .style("left",(d3.event.pageX) + "px") + .style("top",(d3.event.pageY - 28) + "px") + .style("position", "absolute") + var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG") + + treeLayout = treeLayoutSVG.append("g").attr("class","treeLayout"); + var name = "Tree view: " + data.from + " → " + data.to; + //aigner: tree layout is done + maketreeLayout(data.name, treeLayout, treeLayoutSVG, treeLayoutdiv, name, categoryName); + //Remove Symbol is created + var removeSymbol = treeLayout.append("g"); + drawTreeRemoveSymbol(removeSymbol); + removeSymbol.on("click", function(d) + { + treeLayoutdiv.remove(); + }) + + } + + function showEdgeTable(anEdge) + { + var edgeTableDiv = d3.select("body").append("div").attr("class","edgeTableDiv") + .style('left', (d3.event.pageX - 2) + 'px') + .style('top', (d3.event.pageY - 2) + 'px') + .style("position", "absolute") + var edgeTableGroup = edgeTableDiv.append("g").attr("class","edgeTableGroup") + + //Drag Function for edge table + var xPos_init = d3.event.pageX - 2; + var yPos_init = d3.event.pageY - 2; + var xOffset_tmp; + var yOffset_tmp; + var drag = edgeTableDiv.call(d3.drag() + .on("start", dragstarted) + .on("drag", dragged) + .on("end", dragended)); + function dragstarted() { + d3.select(this).raise().classed("active", true); + xOffset_tmp = xPos_init-d3.event.x; + yOffset_tmp = yPos_init-d3.event.y; + } + function dragged() { + d3.select(this).classed("active", false) + .style("left",(d3.event.x+xOffset_tmp) + "px") + .style("top",(d3.event.y+yOffset_tmp) + "px") + } + function dragended() { + d3.select(this).classed("active", false); + xPos_init = d3.event.x+xOffset_tmp; + yPos_init = d3.event.y+yOffset_tmp; + } + + var headLine = "Edge Information (" + anEdge.from + " - " + anEdge.to + ")"; + + var tabRemoveSVG = edgeTableGroup.append("svg") + .attr("width",String(headLine.length*12+"pt")) + .attr("height",26) + tabRemoveSVG.append("rect") + .attr("width", "100%") + .attr("height", "100%") + .attr("fill", "white"); + var tabRemoveSymbol = tabRemoveSVG.append("g"); + tabRemoveSymbol = tabRemoveSymbol + .attr("class", "tabRemoveSymbol") + .attr("transform", "translate(26,0)") + var circle = tabRemoveSymbol.append("circle") + .classed("remCircle",true) + var minus = tabRemoveSymbol.append("line").classed("remMinus",true) + var cx = -20; + var cy = 12; + circle = circle + .attr("cx", cx+5) + .attr("cy", cy) + .attr("r", 10) + minus = minus + .attr("x1", cx) + .attr("y1", cy) + .attr("x2", cx+10) + .attr("y2", cy) + + tabRemoveSVG.append("text").attr("class","tabRemoveText") + .attr("transform", "translate(26,20)") + .attr("fill", "black") + .style("font-family", "Arial") + .style("font-size", "16pt") + .style("font-weight", "bold") + .text(headLine); + + tabRemoveSymbol + .on("mouseover", function(){ + d3.select(this).style("cursor", "pointer") + circle.style("fill", "red").style("fill-opacity", .8); + }) + .on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)}) + tabRemoveSymbol.on("click", function(d) + { + edgeTableDiv.remove(); + }) + + var anEdgeNameSplit = anEdge.name.split(',') + var numberOfconnections = anEdgeNameSplit.length; + var theLeafNodes = []; + var dimension=0; + var nullDim=false; + var undefinedLeafs; + var treeData; + $.ajax({ + dataType: "json", + url: "json/"+varCategories[0].name+"_"+graphID+".json", + async: false, + success: function(data){treeData = JSON.parse(JSON.stringify(data))} + }); + var pipeData = anEdge.name; + getPrunedLeafNodes("/"+treeData.name+"/", treeData.children, pipeData, theLeafNodes) + var undefLeafsNumber=0; + var defLeafsNumber=0; + for (var k=0;k<theLeafNodes.length;k++) + { + if (theLeafNodes[k].dimension!=null){dimension = dimension+theLeafNodes[k].dimension} + else{nullDim=true} + if (theLeafNodes[k].value.includes("could not be found")||theLeafNodes[k].value.includes("unknown")) + { + if (undefLeafsNumber==0){undefinedLeafs += theLeafNodes[k].xPath;} + else {undefinedLeafs += "," + theLeafNodes[k].xPath;} + undefLeafsNumber ++; + } + else + { + defLeafsNumber++; + } + } + + //Render data for table + var data = []; + data.push({ "name" : "Total number of connections", "value" : numberOfconnections }) + data.push({ "name" : "Number of referenced connections", "value" : defLeafsNumber }) + data.push({ "name" : "Dimension of referenced connections", "value" : String(dimension) }) + if (undefinedLeafs) + { + data.push({ "name" : "Number of unreferenced connections", "value" : undefLeafsNumber}) + } + var table = edgeTableGroup.append('table'); + tabulate(table,data,['name', 'value']); // 2 column table + if (undefinedLeafs) + { + var undefLeafTreeSVG = edgeTableGroup.append("svg") + .attr("transform", "translate(0,20)") + .attr("width",String(headLine.length*9.5+"pt")) + .attr("height",50) + undefLeafTreeSVG.append("rect") + .attr("width", "100%") + .attr("height", "100%") + .attr("fill", "white"); + var expandSymbol = undefLeafTreeSVG.append("g") + .attr("class", "newExpandSymbol") + .attr("transform", "translate(38,12)"); + var expandRect = expandSymbol.append("rect") + .attr("x",-28) + .attr("height", 50) + .attr("fill", "#666666") + .attr("stroke", "none") + .attr("stroke-width", 2) + .attr("fill-opacity", 1) + var expCircle = expandSymbol.append("circle") + .attr("cx", -26) + .attr("cy", 0); + var expLine1 = expandSymbol.append("line"); + var expLine2 = expandSymbol.append("line"); + drawExpandSymbol(expCircle,expLine1,expLine2); + expCircle = expCircle.attr("fill", "white"); + expandSymbol + .on("mouseover", function(){ + d3.select(this).style("cursor", "pointer") + expCircle.style("fill", "green").style("fill-opacity", .8); + }) + .on("mouseout", function(){ + expCircle.style("fill", "green").style("fill-opacity", .6); + }) + undefLeafTreeSVG.append("text").attr("class","tabRemoveText") + .attr("transform", "translate(26,20)") + .attr("fill", "black") + .style("font-family", "Arial") + .style("font-size", "16pt") + .style("font-weight", "bold") + .text("Show unreferenced connections as tree"); + expandSymbol.on("mousedown", function(){ + var treeLayoutdiv = d3.select("body").append("div").attr("class","treeDiv_"+anEdge.from+"_"+anEdge.to) + .style("left",(d3.event.pageX) + "px") + .style("top",(d3.event.pageY + 50) + "px") + .style("position", "absolute") + var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG") + + var pipeData = anEdge.name; + var treeLayout = treeLayoutSVG.append("g").attr("class","treeLayout"); + var name = "Unref. connections: " + anEdge.from + " to " + anEdge.to; + //aigner: tree layout is done + maketreeLayout(undefinedLeafs, treeLayout, treeLayoutSVG, treeLayoutdiv, name, varCategories[0].name+"_"+graphID); + //Remove Symbol is created + var removeSymbol = treeLayout.append("g"); + drawTreeRemoveSymbol(removeSymbol); + removeSymbol.on("click", function(d) + { + treeLayoutdiv.remove(); + }) + }) + } + + } + + xdsms[refName].svg.selectAll(".edge") + .each(function(d) + { + //edgeMenu --> functions for right click options + var edgeChildrenItems = []; + for (var j=0; j< varCategories.length; j++) + { + edgeChildrenItems.push({title: 'according to ' + varCategories[j].description, + identifier: varCategories[j].name+"_"+graphID, + onMouseClick: function(elm, data, i) {showEdgeTree(d,data.identifier)}, + onMouseOver: function(elm,data,i){}}); + } + var theEdge = this; + var edgeMenu = [ + { + title: 'Show edge info', + onMouseDown: function(elm, k, i) { + showEdgeTable(d) + }, + onMouseUp: function(elm, k, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: [] + }, + { + title: 'Show variable tree...', + onMouseDown: function(elm, k, i) { + }, + onMouseUp: function(elm, k, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: edgeChildrenItems + } + ] + + var thisEdge = d3.select(this); + thisEdge.on('contextmenu', d3.contextMenu(edgeMenu)) + }) + } + + function maketreeLayout(pipeData, layout, svg, div, aName, aFilename) + { + //console.log("Tree Layout will be created"); + //aigner: here the tree layout begins + //Drag Function for treeLayout + //Drag Function for variable table + var xPos_init = d3.event.pageX - 2; + var yPos_init = d3.event.pageY - 2; + var xOffset_tmp; + var yOffset_tmp; + var drag = div.call(d3.drag() + .on("start", dragstarted) + .on("drag", dragged) + .on("end", dragended)); + function dragstarted() { + d3.select(this).raise().classed("active", true); + xOffset_tmp = xPos_init-d3.event.x; + yOffset_tmp = yPos_init-d3.event.y; + } + function dragged() { + d3.select(this).classed("active", false) + .style("left",(d3.event.x+xOffset_tmp) + "px") + .style("top",(d3.event.y+yOffset_tmp) + "px") + } + function dragended() { + d3.select(this).classed("active", false); + xPos_init = d3.event.x+xOffset_tmp; + yPos_init = d3.event.y+yOffset_tmp; + } + createTree(aFilename); + + function createTree(aFileName) + { + d3.json ("json/"+aFileName+".json", function(schema) + { + var treeData = (JSON.parse(JSON.stringify(schema))); + //aigner: Here, the minimalized tree is created! + //Transferred variables: + //1) parentXPath --> xPath until current nodes + //2) objArray --> Array of current nodes + //3) xPathList --> Array of actually used pipeLine data + + if (pipeData) + { + prune_tree("/"+treeData.name+"/", treeData.children, pipeData); + //aigner: count all descendants of a node + var firstEl = pipeData.split("/")[1]; + if(firstEl != treeData.name) + { + var cleanOperations = countElements(treeData,0) + for (var i=0; i<cleanOperations; i++){clean_tree(treeData.children);} + } + } + + + + + // Set the dimensions and margins of the diagram + var margin = {top: 20, right: 90, bottom: 20, left: 90}, + width = 960 - margin.left - margin.right, + height = 500 - margin.top - margin.bottom; + + // append the svg object to the body of the page + // appends a 'group' element to 'svg' + // moves the 'group' element to the top left margin + var offset_tmp = 60; + svg = svg.attr("width", width + margin.right + margin.left+offset_tmp) + .attr("height", height + margin.top + margin.bottom+offset_tmp); + div = div.attr("width", width + margin.right + margin.left+offset_tmp) + .attr("height", height + margin.top + margin.bottom+offset_tmp); + layout = layout + .attr("width", width + margin.right + margin.left) + .attr("height", height + margin.top + margin.bottom); + var name; + var rect = layout.append("rect") + .attr("class","treeFrame") + .attr("width", 0) + .attr("height", 70) + .attr("transform", "translate(" + + String(10) + "," + String(10) + ")") + .attr("fill", "white") + .attr("stroke", "darkgrey") + .attr("stroke-width", 0) + .attr("fill-opacity", 0.8) + //aigner: Put remove button on top of the rect + d3.selectAll(".treeRemoveSymbol").moveToFront(); + + //aigner: Exit, if no tree data is available! + if (!treeData.children || treeData.children.length==0) + { + var newText = layout.append('text') + .attr("dx", 40) + .attr("dy", 55) + .style("font-family", "Arial") + .style("font-size", "32pt") + .style("font-weight", "bold") + .html(function (d) { + return 'No tree view available! → Please check data for consistency!'; + }); + + var newWidth; + rect.attr("width", function(d) { + newWidth = this.parentNode.getBBox().width+20; + return newWidth;}) + div = div.attr("width", newWidth+30) + svg = svg.attr("width", newWidth+30) + return; + } + + var newText = layout.append('text') + .attr("dx", 40) + .attr("dy", 30) + .style("font-family", "Arial") + .style("font-size", "12pt") + .style("font-weight", "bold") + .text(aName); + + // Calculate total nodes, max label length + var totalNodes = 0; + var maxLabelLength = 0; + + var i = 0, + duration = 500, + root; + + // declares a tree layout and assigns the size + var treemap = d3.tree().size([height, width]); + + // Assigns parent, children, height, depth + root = d3.hierarchy(treeData, function(d) { return d.children; }); + root.x0 = height / 2; + root.y0 = 0; + + // Append a group which holds all nodes and which the zoom Listener can act upon. + var svgGroup_xOff = root.data.name.length*10 + var svgGroup = layout.append("g") + .attr("transform", "translate("+ svgGroup_xOff + "," + String(margin.top+10) + ")"); + + + // Collapse root initially + collapse(root); + update(root); + + // Collapse the node and all it's children + function collapse(d) { + if(d.children) { + d._children = d.children + d._children.forEach(collapse) + d.children = null + } + } + // Collapse the node and all it's children + function expand(d) { + if(d._children) { + d.children = d._children + d.children.forEach(expand) + d._children = null + } + } + // Toggle children on click. + function click(d) + { + if (d.children) { + d._children = d.children; + d.children = null; + } else + { + d.children = d._children; + d._children = null; + } + update(d); + } + // Collapse/expand entire tree on double-click + function dblclick(d) + { + if(d.children) + { + collapse(d); + } + else if(d._children) + { + expand(d); + } + update(d); + } + + function update(source) + { + var levelWidth = [1]; + var getLevelWidth = function(level, n) + { + if (n.children && n.children.length > 0) { + if (levelWidth.length <= level + 1) levelWidth.push(0); + + //establish maxLabelLength + maxLabelLength = Math.max(n.data.name.length, maxLabelLength); + + levelWidth[level + 1] += n.children.length; + n.children.forEach(function(d) { + getLevelWidth(level + 1, d); + }); + } + }; + getLevelWidth(0, root); + var newHeight = d3.max(levelWidth) * 60; // 20 pixels per line + //BENNI: fill in viewerHeight instead of newHeight for other expanding/collapsing beaviour + + layout = layout.attr("height", newHeight + margin.top + margin.bottom) + svgGroup = svgGroup.attr("height", newHeight + margin.top + margin.bottom) + treemap = treemap.size([newHeight, width]); + + + // Assigns the x and y position for the nodes + var treeData = treemap(root); + + // Compute the new tree layout. + var nodes = treeData.descendants(), + links = treeData.descendants().slice(1); + + //aigner: count all descendants of a node + function countDescendants(node, counter) + { + if (node._children) + { + node._children.forEach(function(n) + { + counter = countDescendants(n, counter); + }); + } + else if (node.children) + { + node.children.forEach(function(n) + { + counter = countDescendants(n, counter); + }); + } + else + { + counter ++; + } + return counter; + } + + + var depth_tmp = 0; + var labelLength = []; + labelLength.push(0); + nodes.forEach(function(d) + { + //aigner: If node is collapsed show number of ancestors + if (d._children) + { + d._childrenNum = countDescendants(d, 0); + d.data.text = d.data.name + " (" + d._childrenNum + ")"; + } + else + { + d.data.text = d.data.name + } + + //aigner: Find maximum labelLength for each level + if (d.depth>depth_tmp) + { + depth_tmp = d.depth; + labelLength.push(d.data.text.length); + } + else + { + if (d.depth!=0){labelLength[labelLength.length-1] = Math.max(d.data.text.length, labelLength[labelLength.length-1]);} + } + }); + // Set widths between levels based on labelLength of each level. + var newWidth=0; + var y_tmp = 100; + var depth_tmp = 0; + nodes.forEach(function(d) + { + if (d.depth>depth_tmp) + { + depth_tmp = d.depth; + d.y = y_tmp+(labelLength[depth_tmp])*12+50; + } + else + { + d.y = y_tmp; + } + newWidth=d.y; + y_tmp = d.y; + }); + + //aigner: Adjust height and width of the frame + div = div.attr("height", newHeight + margin.top + margin.bottom+offset_tmp) + div = div.attr("width", newWidth + margin.top + margin.bottom +300+maxLabelLength*25+offset_tmp) + .on("mousedown", function(d) { + d3.select(this).moveToFront(); + }) + svg = svg.attr("height", newHeight + margin.top + margin.bottom+offset_tmp) + svg = svg.attr("width", newWidth + margin.top + margin.bottom +300+maxLabelLength*25+offset_tmp) + rect = rect.attr("height", newHeight + margin.top + margin.bottom) + rect = rect.attr("width", newWidth + margin.top + margin.bottom+300+maxLabelLength*15) + + + + + + // ****************** Nodes section *************************** + // Update the nodes... + var node = svgGroup.selectAll('g.node') + .data(nodes, function(d) {return d.id || (d.id = ++i); }); + + var dblclick_timer = false; + // Enter any new modes at the parent's previous position. + var nodeEnter = node.enter().append('g') + .attr('class', 'node') + .attr("transform", function(d) { + return "translate(" + source.y0 + "," + source.x0 + ")"; + }) + .on("click", function(d) { + // if double click timer is active, this click is the double click + if ( dblclick_timer ) + { + clearTimeout(dblclick_timer) + dblclick_timer = false + // double click code code comes here + //console.log("DOUBLE CLICK") + dblclick(d); + } + // otherwise, what to do after single click (double click has timed out) + else dblclick_timer = setTimeout( function(){ + dblclick_timer = false + // single click code code comes here + //console.log("SINGLE CLICK") + click(d); + }, 250) + }) + + // Add Circle for the nodes + nodeEnter.append('circle') + .attr('class', 'node') + .attr('r', 4.5) + .style("fill", function(d) { + return d._children ? "lightsteelblue" : "#fff"; + }); + + // Add labels for the nodes + nodeEnter.append('text') + .attr('class', 'nodeText') + .attr("dy", ".35em") + .attr("x", function(d) { + return d.children || d._children ? -13 : 13; + }) + .attr("text-anchor", function(d) { + return d.children || d._children ? "end" : "start"; + }) + //.text(function(d) { return d.data.text; }); + + + // Function to download data to a file + function download(filename, text) { + var element = document.createElement('a'); + element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text)); + element.setAttribute('download', filename); + + element.style.display = 'none'; + document.body.appendChild(element); + + element.click(); + + document.body.removeChild(element); + } + + //Highlight function, that shows usage of a node in the XDSM + function highlight(data,aText) + { + aText = "/"+data.data.name+aText; + if (data.parent){highlight(data.parent,aText)} + else + { + scenarioKeys.forEach(function(k) + { + var xdsm_tmp; + xdsm_tmp = xdsms[k]; + if (xdsm_tmp) + { + xdsm_tmp.svg.selectAll(".edge").each(function(p) + { + var firstElement_tmp = p.name.split("/")[1] + var text_fromFirst = "/"+firstElement_tmp+aText.split(firstElement_tmp)[1] + if (include(p.name,text_fromFirst)) + { + var highlightEdge = d3.select(this).select("polygon"); + highlightEdge.style("stroke-width",5.); + d3.selectAll(".treeFrame") + .attr("fill-opacity", 0.5) + .attr("stroke-opacity", 0.5); + d3.selectAll(".nodeText").style("fill-opacity",0.5); + } + }) + } + }) + } + } + + + function showVariableTable(aVariable) + { + var varTableDiv = d3.select("body").append("div").attr("class","varTableDiv_"+aName+"_"+aVariable.data.name) + .style('left', (d3.event.pageX - 2) + 'px') + .style('top', (d3.event.pageY - 2) + 'px') + .style("position", "absolute") + .on("mousedown", function(d) { + d3.select(this).moveToFront(); + }) + var varTableGroup = varTableDiv.append("g").attr("class","varTableGroup") + + //Drag Function for variable table + var xPos_init = d3.event.pageX - 2; + var yPos_init = d3.event.pageY - 2; + var xOffset_tmp; + var yOffset_tmp; + var drag = varTableDiv.call(d3.drag() + .on("start", dragstarted) + .on("drag", dragged) + .on("end", dragended)); + function dragstarted() { + d3.select(this).raise().classed("active", true); + xOffset_tmp = xPos_init-d3.event.x; + yOffset_tmp = yPos_init-d3.event.y; + } + function dragged() { + d3.select(this).classed("active", false) + .style("left",(d3.event.x+xOffset_tmp) + "px") + .style("top",(d3.event.y+yOffset_tmp) + "px") + } + function dragended() { + d3.select(this).classed("active", false); + xPos_init = d3.event.x+xOffset_tmp; + yPos_init = d3.event.y+yOffset_tmp; + } + + var headLine = "Node Information (" + aName + ")"; + var tabRemoveSVG = varTableGroup.append("svg") + .attr("width",String(headLine.length*9.5+"pt")) + .attr("height",26) + tabRemoveSVG.append("rect") + .attr("width", "100%") + .attr("height", "100%") + .attr("fill", "white"); + var tabRemoveSymbol = tabRemoveSVG.append("g"); + tabRemoveSymbol = tabRemoveSymbol + .attr("class", "tabRemoveSymbol") + .attr("transform", "translate(26,0)") + var circle = tabRemoveSymbol.append("circle") + .classed("remCircle",true) + var minus = tabRemoveSymbol.append("line").classed("remMinus",true) + var cx = -20; + var cy = 12; + circle = circle + .attr("cx", cx+5) + .attr("cy", cy) + .attr("r", 10) + minus = minus + .attr("x1", cx) + .attr("y1", cy) + .attr("x2", cx+10) + .attr("y2", cy) + + + tabRemoveSVG.append("text").attr("class","tabRemoveText") + .attr("transform", "translate(26,20)") + .attr("fill", "black") + .style("font-family", "Arial") + .style("font-size", "16pt") + .style("font-weight", "bold") + .text(headLine); + + + tabRemoveSymbol + .on("mouseover", function(){ + d3.select(this).style("cursor", "pointer") + circle.style("fill", "red").style("fill-opacity", .8); + }) + .on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)}) + tabRemoveSymbol.on("click", function(d) + { + varTableDiv.remove(); + }) + + + + var data = []; + // render the table(s) + data.push({ "name" : "Name", "value" : "\""+aVariable.data.name+"\"" }) + + function getNodeXPath(strWrapper,aNode) + { + strWrapper.val = "/"+aNode.data.name+strWrapper.val; + if (!aNode.parent) + { + return strWrapper; + } + else + { + + return getNodeXPath(strWrapper, aNode.parent); + } + } + var xPath_tmp = getNodeXPath({ val : '' }, aVariable).val; + data.push({ "name" : "xPath", "value" : xPath_tmp }) + if (aVariable.data.type){data.push({ "name" : "Type", "value" : aVariable.data.type })} + if (aVariable.data.level){data.push({ "name" : "Level", "value" : aVariable.data.level })} + if (aVariable.data.children){data.push({ "name" : "Number of children", "value" : aVariable.data.children.length })} + if (aVariable.data.dimension){data.push({ "name" : "Dimension", "value" : aVariable.data.dimension })} + else if(aVariable.data.dimension===null){data.push({ "name" : "Dimension", "value" : "undefined" })} + if (aVariable.data.value){data.push({ "name" : "Value(s)", "value" : aVariable.data.value })} + var table = varTableGroup.append('table'); + tabulate(table,data,['name', 'value']); // 2 column table + } + + + //menu --> functions for right click options + var nodeMenu = [ + { + title: 'Show node information', + onMouseDown: function(elm, d, i) { + showVariableTable(d); + }, + onMouseUp: function(elm, d, i) {}, + onMouseOver: function(elm, d, i) {}, + childrenItems: [] + }, + { + title: 'Show usage of node in XDSM', + onMouseDown: function(elm, d, i) { + var theText=""; + highlight(d,theText); + }, + onMouseUp: function(elm, d, i) { + var highlightEdge = d3.selectAll("polygon"); + highlightEdge.style("stroke-width",1.); + d3.selectAll(".treeFrame") + .attr("fill-opacity", 0.8) + .attr("stroke-opacity", 0.8); + d3.selectAll(".nodeText").style("fill-opacity",1); + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: [] + }, + { + title: 'Copy x-path to clipboard', + onMouseDown: function(elm, d, i) { + function copyToClipboard(text) + { + window.prompt("Copy to clipboard: Ctrl+C, Enter", text); + } + function copyXPathToClipboard(data,aText) + { + aText = "/"+data.data.name+aText; + if (data.parent){copyXPathToClipboard(data.parent,aText)} + else{copyToClipboard(aText);} + } + var copyText=""; + copyXPathToClipboard(d,copyText); + d3.select('.d3-context-menu').style('display', 'none'); + }, + onMouseUp: function(elm, d, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: [] + }, + { + title: 'Download full tree as XML-file', + onMouseDown: function(elm, d, i) { + //Begin xml structure with the first element + var xmlString = "<"+nodes[0].data.name+">"+"</"+nodes[0].data.name+">"; + //Create a new xml document + var parser = new DOMParser(); + var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml" + //Get initial xPath of the tree and pass it to the function "writeTreeToXML" + var initialXPath = "/"+nodes[0].data.name; + writeTreeToXML(nodes[0],xmlDocument,initialXPath); + //remove all attributes dummyID + removeAttributeInAllElements(xmlDocument,'dummyID'); + //Make the xml document a string + var serializer = new XMLSerializer(); + var xmlString = serializer.serializeToString(xmlDocument); + xmlString = vkbeautify.xml(xmlString); + //Download a document with the xml-schema + download(aName+'_full.xml',xmlString); + }, + onMouseUp: function(elm, d, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: [] + }, + { + title: 'Download tree as XML-file from current node', + onMouseDown: function(elm, d, i) { + var xmlString = putAncestorsInXMLString({ val : '' }, d).val; + var initialXPath = putAncestorsInXPath({ val : '' }, d).val; + //Create a new xml document + var parser = new DOMParser(); + var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml" + //Get initial xPath of the tree and pass it to the function "writeCurrentTreeToXML" + writeTreeToXML(d,xmlDocument,initialXPath); + //remove all attributes dummyID + removeAttributeInAllElements(xmlDocument,'dummyID'); + //Make the xml document a string + var serializer = new XMLSerializer(); + xmlString = serializer.serializeToString(xmlDocument); + xmlString = vkbeautify.xml(xmlString); + //Download a document with the xml-schema + download(aName+"_"+d.data.name+'.xml',xmlString); + }, + onMouseUp: function(elm, d, i) { + }, + onMouseOver: function(elm, d, i) { + }, + childrenItems: [] + } + ] + + //Function writeTreeToXML goes through tree nodes and puts the into an xml document + function writeTreeToXML(aNode,anXMLDoc,anXPath) + { + //Variable "children" + //--> One children variable, no matter whether a node has "_children" (collapsed) or "children" (expanded) + var children; + if (aNode._children){children = aNode._children;} + else if (aNode.children){children = aNode.children;} + + //Get current xml element with its xPath + var element = anXMLDoc.evaluate(anXPath,anXMLDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue; + if (element != null) {element.value = '...';} + + //If a node has children (collapsed or expanded), loop through them + if (children) + { + for (var i=0; i < children.length;i++) + { + //Name of the new XML element --> childName + var child = children[i]; + var childName = child.data.name.split(/[\[\]]+/);//Split childName at "[]" which is the uID + var cleanChildName = childName[0].split(/[\+\*\^\-\ \#]+/);//Split childName all special characters + var newNode = anXMLDoc.createElement(String(cleanChildName[0])); + + //The children are appended to the xPath --> newXPath + var newXPath = anXPath+"/"+cleanChildName[0]; + + //If childName contains a uID, make the uID an attribute + if (childName[1]) + { + if (parseInt(childName[1])) + { + var dummyID = childName[1]; + newNode.setAttribute("dummyID", dummyID) + newXPath = newXPath+"[@dummyID='"+dummyID+"']"; + } + else + { + var uID = childName[1]; + newNode.setAttribute("uID", uID) + newXPath = newXPath+"[@uID='"+uID+"']"; + } + } + if (cleanChildName.length>1) {newNode.setAttribute("elementName", childName[0])}; + + //Append the newNode to the xml structure + element.appendChild(newNode); + + + + ////aigner: Sorting of XML elements according to "uID" + // var items = element.children; + // var itemsArr = []; + // for (var j in items) { + // if (items[j].nodeType == 1) { // get rid of the whitespace text nodes + // itemsArr.push(items[j]); + // } + // } + // itemsArr.sort(function(a,b){ + // if (a.getAttribute("uID") < b.getAttribute("uID")) + // return -1; + // if (a.getAttribute("uID") > b.getAttribute("uID")) + // return 1; + // return 0; + // }); + + // for (j = 0; j < itemsArr.length; ++j) { + // element.appendChild(itemsArr[j]); + // } + + //call function writeTreeToXML recursively for all children + writeTreeToXML(child,anXMLDoc,newXPath) + } + } + else + { + if (aNode.data.value){element.innerHTML = String(aNode.data.value);} + else{element.innerHTML = " ";} + } + //return the xml document + return anXMLDoc; + } + + function removeAttributeInAllElements(aDocument,attribute) + { + var matchingElements = []; + var allElements = aDocument.getElementsByTagName('*'); + for (var i = 0, n = allElements.length; i < n; i++) + { + if (allElements[i].getAttribute(attribute) !== null) + { + allElements[i].removeAttribute(attribute); + } + } + return matchingElements; + } + + function putAncestorsInXMLString(strWrapper, aNode) + { + //Name of the new XML element + var nodeName = aNode.data.name.split(/[\[\]]+/);//Split name at "[]" which is the uID + var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters + //If nodeName contains a uID, make the uID an attribute + if (nodeName[1]) + { + var uID = nodeName[1]; + strWrapper.val = "<"+cleanNodeName[0]+" uID='"+ uID +"'>"+strWrapper.val+"</"+cleanNodeName[0]+">";; + } + else + { + strWrapper.val = "<"+cleanNodeName[0]+">"+strWrapper.val+"</"+cleanNodeName[0]+">";; + } + var aParent = aNode.parent; + if (aParent) + { + return putAncestorsInXMLString(strWrapper, aParent); + } + else + { + return strWrapper; + } + } + + function putAncestorsInXPath(strWrapper, aNode) + { + //Name of the new XML element + var nodeName = aNode.data.name.split(/[\[\]]+/);//Split name at "[]" which is the uID + var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters + //If nodeName contains a uID, make the uID an attribute + if (nodeName[1]) + { + var uID = nodeName[1]; + strWrapper.val = "/"+cleanNodeName[0]+"[@uID='"+uID+"']"+strWrapper.val; + } + else + { + strWrapper.val = "/"+cleanNodeName[0]+strWrapper.val; + } + var aParent = aNode.parent; + if (aParent) + { + return putAncestorsInXPath(strWrapper, aParent); + } + else + { + return strWrapper; + } + } + + nodeEnter = nodeEnter + .on('contextmenu', d3.contextMenu(nodeMenu)); + + + + // UPDATE + var nodeUpdate = nodeEnter.merge(node); + + // Transition to the proper position for the node + nodeUpdate.transition() + .duration(duration) + .attr("transform", function(d) { + return "translate(" + d.y + "," + d.x + ")"; + }); + + // Update the node attributes and style + nodeUpdate.select('circle.node') + .attr('r', 4.5) + .style("fill", function(d) { + return d._children ? "lightsteelblue" : "#fff"; + }) + .attr('cursor', 'pointer'); + + nodeUpdate.select('text') + .text(function(d) { return d.data.text; }); + + + // Remove any exiting nodes + var nodeExit = node.exit().transition() + .duration(duration) + .attr("transform", function(d) { + return "translate(" + source.y + "," + source.x + ")"; + }) + .remove(); + + // ****************** links section *************************** + + // Update the links... + var link = svgGroup.selectAll('path.link') + .data(links, function(d) { return d.id; }); + + // Enter any new links at the parent's previous position. + var linkEnter = link.enter().insert('path', "g") + .attr("class", "link") + .attr('d', function(d){ + var o = {x: source.x0, y: source.y0} + return diagonal(o, o) + }); + + // UPDATE + var linkUpdate = linkEnter.merge(link); + + // Transition back to the parent element position + linkUpdate.transition() + .duration(duration) + .attr('d', function(d){ return diagonal(d, d.parent) }); + + // Remove any exiting links + var linkExit = link.exit().transition() + .duration(duration) + .attr('d', function(d) { + var o = {x: source.x, y: source.y} + return diagonal(o, o) + }) + .remove(); + + // Store the old positions for transition. + nodes.forEach(function(d){ + d.x0 = d.x; + d.y0 = d.y; + }); + + // Creates a curved (diagonal) path from parent to the child nodes + function diagonal(s, d) { + return "M" + s.y + "," + s.x + + "C" + (s.y + d.y) / 2 + "," + s.x + + " " + (s.y + d.y) / 2 + "," + d.x + + " " + d.y + "," + d.x; + } + } + }); + } + } +}); + +////aigner: Unused funcktions --> Could be helpful at some point +////aigner: clone function, so that original object is not overwritten but deep copied +// function clone(obj) { + // if (null == obj || "object" != typeof obj) return obj; + // var copy = obj.constructor(); + // for (var attr in obj) { + // if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr]; + // } + // return copy; +// } +////aigner: cleanArray Function +// function cleanArray(actual) +// { + // var newArray = new Array(); + // for (var i = 0; i < actual.length; i++) + // { + // if (actual[i]) + // { + // newArray.push(actual[i]); + // } + // } + // return newArray; +// } +//#####################################################################// + + +},{"./src/animation":2,"./src/graph":3,"./src/xdsm":5,"d3":1}]},{},[6]); -- GitLab