{"version":3,"file":"static/js/1871.1c04571b.js","mappings":"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","sources":["../node_modules/@plotly/d3/d3.js"],"sourcesContent":["!function() {\n var d3 = {\n version: \"3.8.0\"\n };\n var d3_arraySlice = [].slice, d3_array = function(list) {\n return d3_arraySlice.call(list);\n };\n var d3_document = self.document;\n function d3_documentElement(node) {\n return node && (node.ownerDocument || node.document || node).documentElement;\n }\n function d3_window(node) {\n return node && (node.ownerDocument && node.ownerDocument.defaultView || node.document && node || node.defaultView);\n }\n if (d3_document) {\n try {\n d3_array(d3_document.documentElement.childNodes)[0].nodeType;\n } catch (e) {\n d3_array = function(list) {\n var i = list.length, array = new Array(i);\n while (i--) array[i] = list[i];\n return array;\n };\n }\n }\n if (!Date.now) Date.now = function() {\n return +new Date();\n };\n if (d3_document) {\n try {\n d3_document.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\");\n } catch (error) {\n var d3_element_prototype = this.Element.prototype, d3_element_setAttribute = d3_element_prototype.setAttribute, d3_element_setAttributeNS = d3_element_prototype.setAttributeNS, d3_style_prototype = this.CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty;\n d3_element_prototype.setAttribute = function(name, value) {\n d3_element_setAttribute.call(this, name, value + \"\");\n };\n d3_element_prototype.setAttributeNS = function(space, local, value) {\n d3_element_setAttributeNS.call(this, space, local, value + \"\");\n };\n d3_style_prototype.setProperty = function(name, value, priority) {\n d3_style_setProperty.call(this, name, value + \"\", priority);\n };\n }\n }\n d3.ascending = d3_ascending;\n function d3_ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n }\n d3.descending = function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n };\n d3.min = function(array, f) {\n var i = -1, n = array.length, a, b;\n if (arguments.length === 1) {\n while (++i < n) if ((b = array[i]) != null && b >= b) {\n a = b;\n break;\n }\n while (++i < n) if ((b = array[i]) != null && a > b) a = b;\n } else {\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n a = b;\n break;\n }\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;\n }\n return a;\n };\n d3.max = function(array, f) {\n var i = -1, n = array.length, a, b;\n if (arguments.length === 1) {\n while (++i < n) if ((b = array[i]) != null && b >= b) {\n a = b;\n break;\n }\n while (++i < n) if ((b = array[i]) != null && b > a) a = b;\n } else {\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n a = b;\n break;\n }\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;\n }\n return a;\n };\n d3.extent = function(array, f) {\n var i = -1, n = array.length, a, b, c;\n if (arguments.length === 1) {\n while (++i < n) if ((b = array[i]) != null && b >= b) {\n a = c = b;\n break;\n }\n while (++i < n) if ((b = array[i]) != null) {\n if (a > b) a = b;\n if (c < b) c = b;\n }\n } else {\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n a = c = b;\n break;\n }\n while (++i < n) if ((b = f.call(array, array[i], i)) != null) {\n if (a > b) a = b;\n if (c < b) c = b;\n }\n }\n return [ a, c ];\n };\n function d3_number(x) {\n return x === null ? NaN : +x;\n }\n function d3_numeric(x) {\n return !isNaN(x);\n }\n d3.sum = function(array, f) {\n var s = 0, n = array.length, a, i = -1;\n if (arguments.length === 1) {\n while (++i < n) if (d3_numeric(a = +array[i])) s += a;\n } else {\n while (++i < n) if (d3_numeric(a = +f.call(array, array[i], i))) s += a;\n }\n return s;\n };\n d3.mean = function(array, f) {\n var s = 0, n = array.length, a, i = -1, j = n;\n if (arguments.length === 1) {\n while (++i < n) if (d3_numeric(a = d3_number(array[i]))) s += a; else --j;\n } else {\n while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) s += a; else --j;\n }\n if (j) return s / j;\n };\n d3.quantile = function(values, p) {\n var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h;\n return e ? v + e * (values[h] - v) : v;\n };\n d3.median = function(array, f) {\n var numbers = [], n = array.length, a, i = -1;\n if (arguments.length === 1) {\n while (++i < n) if (d3_numeric(a = d3_number(array[i]))) numbers.push(a);\n } else {\n while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) numbers.push(a);\n }\n if (numbers.length) return d3.quantile(numbers.sort(d3_ascending), .5);\n };\n d3.variance = function(array, f) {\n var n = array.length, m = 0, a, d, s = 0, i = -1, j = 0;\n if (arguments.length === 1) {\n while (++i < n) {\n if (d3_numeric(a = d3_number(array[i]))) {\n d = a - m;\n m += d / ++j;\n s += d * (a - m);\n }\n }\n } else {\n while (++i < n) {\n if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) {\n d = a - m;\n m += d / ++j;\n s += d * (a - m);\n }\n }\n }\n if (j > 1) return s / (j - 1);\n };\n d3.deviation = function() {\n var v = d3.variance.apply(this, arguments);\n return v ? Math.sqrt(v) : v;\n };\n function d3_bisector(compare) {\n return {\n left: function(a, x, lo, hi) {\n if (arguments.length < 3) lo = 0;\n if (arguments.length < 4) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1; else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (arguments.length < 3) lo = 0;\n if (arguments.length < 4) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid; else lo = mid + 1;\n }\n return lo;\n }\n };\n }\n var d3_bisect = d3_bisector(d3_ascending);\n d3.bisectLeft = d3_bisect.left;\n d3.bisect = d3.bisectRight = d3_bisect.right;\n d3.bisector = function(f) {\n return d3_bisector(f.length === 1 ? function(d, x) {\n return d3_ascending(f(d), x);\n } : f);\n };\n d3.shuffle = function(array, i0, i1) {\n if ((m = arguments.length) < 3) {\n i1 = array.length;\n if (m < 2) i0 = 0;\n }\n var m = i1 - i0, t, i;\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m + i0], array[m + i0] = array[i + i0], array[i + i0] = t;\n }\n return array;\n };\n d3.permute = function(array, indexes) {\n var i = indexes.length, permutes = new Array(i);\n while (i--) permutes[i] = array[indexes[i]];\n return permutes;\n };\n d3.pairs = function(array) {\n var i = 0, n = array.length - 1, p0, p1 = array[0], pairs = new Array(n < 0 ? 0 : n);\n while (i < n) pairs[i] = [ p0 = p1, p1 = array[++i] ];\n return pairs;\n };\n d3.transpose = function(matrix) {\n if (!(n = matrix.length)) return [];\n for (var i = -1, m = d3.min(matrix, d3_transposeLength), transpose = new Array(m); ++i < m; ) {\n for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n; ) {\n row[j] = matrix[j][i];\n }\n }\n return transpose;\n };\n function d3_transposeLength(d) {\n return d.length;\n }\n d3.zip = function() {\n return d3.transpose(arguments);\n };\n d3.keys = function(map) {\n var keys = [];\n for (var key in map) keys.push(key);\n return keys;\n };\n d3.values = function(map) {\n var values = [];\n for (var key in map) values.push(map[key]);\n return values;\n };\n d3.entries = function(map) {\n var entries = [];\n for (var key in map) entries.push({\n key: key,\n value: map[key]\n });\n return entries;\n };\n d3.merge = function(arrays) {\n var n = arrays.length, m, i = -1, j = 0, merged, array;\n while (++i < n) j += arrays[i].length;\n merged = new Array(j);\n while (--n >= 0) {\n array = arrays[n];\n m = array.length;\n while (--m >= 0) {\n merged[--j] = array[m];\n }\n }\n return merged;\n };\n var abs = Math.abs;\n d3.range = function(start, stop, step) {\n if (arguments.length < 3) {\n step = 1;\n if (arguments.length < 2) {\n stop = start;\n start = 0;\n }\n }\n if ((stop - start) / step === Infinity) throw new Error(\"infinite range\");\n var range = [], k = d3_range_integerScale(abs(step)), i = -1, j;\n start *= k, stop *= k, step *= k;\n if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k);\n return range;\n };\n function d3_range_integerScale(x) {\n var k = 1;\n while (x * k % 1) k *= 10;\n return k;\n }\n function d3_class(ctor, properties) {\n for (var key in properties) {\n Object.defineProperty(ctor.prototype, key, {\n value: properties[key],\n enumerable: false\n });\n }\n }\n d3.map = function(object, f) {\n var map = new d3_Map();\n if (object instanceof d3_Map) {\n object.forEach(function(key, value) {\n map.set(key, value);\n });\n } else if (Array.isArray(object)) {\n var i = -1, n = object.length, o;\n if (arguments.length === 1) while (++i < n) map.set(i, object[i]); else while (++i < n) map.set(f.call(object, o = object[i], i), o);\n } else {\n for (var key in object) map.set(key, object[key]);\n }\n return map;\n };\n function d3_Map() {\n this._ = Object.create(null);\n }\n var d3_map_proto = \"__proto__\", d3_map_zero = \"\\x00\";\n d3_class(d3_Map, {\n has: d3_map_has,\n get: function(key) {\n return this._[d3_map_escape(key)];\n },\n set: function(key, value) {\n return this._[d3_map_escape(key)] = value;\n },\n remove: d3_map_remove,\n keys: d3_map_keys,\n values: function() {\n var values = [];\n for (var key in this._) values.push(this._[key]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var key in this._) entries.push({\n key: d3_map_unescape(key),\n value: this._[key]\n });\n return entries;\n },\n size: d3_map_size,\n empty: d3_map_empty,\n forEach: function(f) {\n for (var key in this._) f.call(this, d3_map_unescape(key), this._[key]);\n }\n });\n function d3_map_escape(key) {\n return (key += \"\") === d3_map_proto || key[0] === d3_map_zero ? d3_map_zero + key : key;\n }\n function d3_map_unescape(key) {\n return (key += \"\")[0] === d3_map_zero ? key.slice(1) : key;\n }\n function d3_map_has(key) {\n return d3_map_escape(key) in this._;\n }\n function d3_map_remove(key) {\n return (key = d3_map_escape(key)) in this._ && delete this._[key];\n }\n function d3_map_keys() {\n var keys = [];\n for (var key in this._) keys.push(d3_map_unescape(key));\n return keys;\n }\n function d3_map_size() {\n var size = 0;\n for (var key in this._) ++size;\n return size;\n }\n function d3_map_empty() {\n for (var key in this._) return false;\n return true;\n }\n d3.nest = function() {\n var nest = {}, keys = [], sortKeys = [], sortValues, rollup;\n function map(mapType, array, depth) {\n if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array;\n var i = -1, n = array.length, key = keys[depth++], keyValue, object, setter, valuesByKey = new d3_Map(), values;\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(object = array[i]))) {\n values.push(object);\n } else {\n valuesByKey.set(keyValue, [ object ]);\n }\n }\n if (mapType) {\n object = mapType();\n setter = function(keyValue, values) {\n object.set(keyValue, map(mapType, values, depth));\n };\n } else {\n object = {};\n setter = function(keyValue, values) {\n object[keyValue] = map(mapType, values, depth);\n };\n }\n valuesByKey.forEach(setter);\n return object;\n }\n function entries(map, depth) {\n if (depth >= keys.length) return map;\n var array = [], sortKey = sortKeys[depth++];\n map.forEach(function(key, keyMap) {\n array.push({\n key: key,\n values: entries(keyMap, depth)\n });\n });\n return sortKey ? array.sort(function(a, b) {\n return sortKey(a.key, b.key);\n }) : array;\n }\n nest.map = function(array, mapType) {\n return map(mapType, array, 0);\n };\n nest.entries = function(array) {\n return entries(map(d3.map, array, 0), 0);\n };\n nest.key = function(d) {\n keys.push(d);\n return nest;\n };\n nest.sortKeys = function(order) {\n sortKeys[keys.length - 1] = order;\n return nest;\n };\n nest.sortValues = function(order) {\n sortValues = order;\n return nest;\n };\n nest.rollup = function(f) {\n rollup = f;\n return nest;\n };\n return nest;\n };\n d3.set = function(array) {\n var set = new d3_Set();\n if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]);\n return set;\n };\n function d3_Set() {\n this._ = Object.create(null);\n }\n d3_class(d3_Set, {\n has: d3_map_has,\n add: function(key) {\n this._[d3_map_escape(key += \"\")] = true;\n return key;\n },\n remove: d3_map_remove,\n values: d3_map_keys,\n size: d3_map_size,\n empty: d3_map_empty,\n forEach: function(f) {\n for (var key in this._) f.call(this, d3_map_unescape(key));\n }\n });\n d3.behavior = {};\n function d3_identity(d) {\n return d;\n }\n d3.rebind = function(target, source) {\n var i = 1, n = arguments.length, method;\n while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]);\n return target;\n };\n function d3_rebind(target, source, method) {\n return function() {\n var value = method.apply(source, arguments);\n return value === source ? target : value;\n };\n }\n function d3_vendorSymbol(object, name) {\n if (name in object) return name;\n name = name.charAt(0).toUpperCase() + name.slice(1);\n for (var i = 0, n = d3_vendorPrefixes.length; i < n; ++i) {\n var prefixName = d3_vendorPrefixes[i] + name;\n if (prefixName in object) return prefixName;\n }\n }\n var d3_vendorPrefixes = [ \"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\" ];\n function d3_noop() {}\n d3.dispatch = function() {\n var dispatch = new d3_dispatch(), i = -1, n = arguments.length;\n while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);\n return dispatch;\n };\n function d3_dispatch() {}\n d3_dispatch.prototype.on = function(type, listener) {\n var i = type.indexOf(\".\"), name = \"\";\n if (i >= 0) {\n name = type.slice(i + 1);\n type = type.slice(0, i);\n }\n if (type) return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener);\n if (arguments.length === 2) {\n if (listener == null) for (type in this) {\n if (this.hasOwnProperty(type)) this[type].on(name, null);\n }\n return this;\n }\n };\n function d3_dispatch_event(dispatch) {\n var listeners = [], listenerByName = new d3_Map();\n function event() {\n var z = listeners, i = -1, n = z.length, l;\n while (++i < n) if (l = z[i].on) l.apply(this, arguments);\n return dispatch;\n }\n event.on = function(name, listener) {\n var l = listenerByName.get(name), i;\n if (arguments.length < 2) return l && l.on;\n if (l) {\n l.on = null;\n listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1));\n listenerByName.remove(name);\n }\n if (listener) listeners.push(listenerByName.set(name, {\n on: listener\n }));\n return dispatch;\n };\n return event;\n }\n d3.event = null;\n function d3_eventPreventDefault() {\n d3.event.preventDefault();\n }\n function d3_eventSource() {\n var e = d3.event, s;\n while (s = e.sourceEvent) e = s;\n return e;\n }\n function d3_eventDispatch(target) {\n var dispatch = new d3_dispatch(), i = 0, n = arguments.length;\n while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);\n dispatch.of = function(thiz, argumentz) {\n return function(e1) {\n try {\n var e0 = e1.sourceEvent = d3.event;\n e1.target = target;\n d3.event = e1;\n dispatch[e1.type].apply(thiz, argumentz);\n } finally {\n d3.event = e0;\n }\n };\n };\n return dispatch;\n }\n d3.requote = function(s) {\n return s.replace(d3_requote_re, \"\\\\$&\");\n };\n var d3_requote_re = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;\n var d3_subclass = {}.__proto__ ? function(object, prototype) {\n object.__proto__ = prototype;\n } : function(object, prototype) {\n for (var property in prototype) object[property] = prototype[property];\n };\n function d3_selection(groups) {\n d3_subclass(groups, d3_selectionPrototype);\n return groups;\n }\n var d3_select = function(s, n) {\n return n.querySelector(s);\n }, d3_selectAll = function(s, n) {\n return n.querySelectorAll(s);\n }, d3_selectMatches = function(n, s) {\n var d3_selectMatcher = n.matches || n[d3_vendorSymbol(n, \"matchesSelector\")];\n d3_selectMatches = function(n, s) {\n return d3_selectMatcher.call(n, s);\n };\n return d3_selectMatches(n, s);\n };\n if (typeof Sizzle === \"function\") {\n d3_select = function(s, n) {\n return Sizzle(s, n)[0] || null;\n };\n d3_selectAll = Sizzle;\n d3_selectMatches = Sizzle.matchesSelector;\n }\n d3.selection = function() {\n return d3.select(d3_document.documentElement);\n };\n var d3_selectionPrototype = d3.selection.prototype = [];\n d3_selectionPrototype.select = function(selector) {\n var subgroups = [], subgroup, subnode, group, node;\n selector = d3_selection_selector(selector);\n for (var j = -1, m = this.length; ++j < m; ) {\n subgroups.push(subgroup = []);\n subgroup.parentNode = (group = this[j]).parentNode;\n for (var i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) {\n subgroup.push(subnode = selector.call(node, node.__data__, i, j));\n if (subnode && \"__data__\" in node) subnode.__data__ = node.__data__;\n } else {\n subgroup.push(null);\n }\n }\n }\n return d3_selection(subgroups);\n };\n function d3_selection_selector(selector) {\n return typeof selector === \"function\" ? selector : function() {\n return d3_select(selector, this);\n };\n }\n d3_selectionPrototype.selectAll = function(selector) {\n var subgroups = [], subgroup, node;\n selector = d3_selection_selectorAll(selector);\n for (var j = -1, m = this.length; ++j < m; ) {\n for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) {\n subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i, j)));\n subgroup.parentNode = node;\n }\n }\n }\n return d3_selection(subgroups);\n };\n function d3_selection_selectorAll(selector) {\n return typeof selector === \"function\" ? selector : function() {\n return d3_selectAll(selector, this);\n };\n }\n var d3_nsXhtml = \"http://www.w3.org/1999/xhtml\";\n var d3_nsPrefix = {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: d3_nsXhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n };\n d3.ns = {\n prefix: d3_nsPrefix,\n qualify: function(name) {\n var i = name.indexOf(\":\"), prefix = name;\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return d3_nsPrefix.hasOwnProperty(prefix) ? {\n space: d3_nsPrefix[prefix],\n local: name\n } : name;\n }\n };\n d3_selectionPrototype.attr = function(name, value) {\n if (arguments.length < 2) {\n if (typeof name === \"string\") {\n var node = this.node();\n name = d3.ns.qualify(name);\n return name.local ? node.getAttributeNS(name.space, name.local) : node.getAttribute(name);\n }\n for (value in name) this.each(d3_selection_attr(value, name[value]));\n return this;\n }\n return this.each(d3_selection_attr(name, value));\n };\n function d3_selection_attr(name, value) {\n name = d3.ns.qualify(name);\n function attrNull() {\n this.removeAttribute(name);\n }\n function attrNullNS() {\n this.removeAttributeNS(name.space, name.local);\n }\n function attrConstant() {\n this.setAttribute(name, value);\n }\n function attrConstantNS() {\n this.setAttributeNS(name.space, name.local, value);\n }\n function attrFunction() {\n var x = value.apply(this, arguments);\n if (x == null) this.removeAttribute(name); else this.setAttribute(name, x);\n }\n function attrFunctionNS() {\n var x = value.apply(this, arguments);\n if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x);\n }\n return value == null ? name.local ? attrNullNS : attrNull : typeof value === \"function\" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant;\n }\n function d3_collapse(s) {\n return s.trim().replace(/\\s+/g, \" \");\n }\n d3_selectionPrototype.classed = function(name, value) {\n if (arguments.length < 2) {\n if (typeof name === \"string\") {\n var node = this.node(), n = (name = d3_selection_classes(name)).length, i = -1;\n if (value = node.classList) {\n while (++i < n) if (!value.contains(name[i])) return false;\n } else {\n value = node.getAttribute(\"class\");\n while (++i < n) if (!d3_selection_classedRe(name[i]).test(value)) return false;\n }\n return true;\n }\n for (value in name) this.each(d3_selection_classed(value, name[value]));\n return this;\n }\n return this.each(d3_selection_classed(name, value));\n };\n function d3_selection_classedRe(name) {\n return new RegExp(\"(?:^|\\\\s+)\" + d3.requote(name) + \"(?:\\\\s+|$)\", \"g\");\n }\n function d3_selection_classes(name) {\n return (name + \"\").trim().split(/^|\\s+/);\n }\n function d3_selection_classed(name, value) {\n name = d3_selection_classes(name).map(d3_selection_classedName);\n var n = name.length;\n function classedConstant() {\n var i = -1;\n while (++i < n) name[i](this, value);\n }\n function classedFunction() {\n var i = -1, x = value.apply(this, arguments);\n while (++i < n) name[i](this, x);\n }\n return typeof value === \"function\" ? classedFunction : classedConstant;\n }\n function d3_selection_classedName(name) {\n var re = d3_selection_classedRe(name);\n return function(node, value) {\n if (c = node.classList) return value ? c.add(name) : c.remove(name);\n var c = node.getAttribute(\"class\") || \"\";\n if (value) {\n re.lastIndex = 0;\n if (!re.test(c)) node.setAttribute(\"class\", d3_collapse(c + \" \" + name));\n } else {\n node.setAttribute(\"class\", d3_collapse(c.replace(re, \" \")));\n }\n };\n }\n d3_selectionPrototype.style = function(name, value, priority) {\n var n = arguments.length;\n if (n < 3) {\n if (typeof name !== \"string\") {\n if (n < 2) value = \"\";\n for (priority in name) this.each(d3_selection_style(priority, name[priority], value));\n return this;\n }\n if (n < 2) {\n var node = this.node();\n return d3_window(node).getComputedStyle(node, null).getPropertyValue(name);\n }\n priority = \"\";\n }\n return this.each(d3_selection_style(name, value, priority));\n };\n function d3_selection_style(name, value, priority) {\n function styleNull() {\n this.style.removeProperty(name);\n }\n function styleConstant() {\n this.style.setProperty(name, value, priority);\n }\n function styleFunction() {\n var x = value.apply(this, arguments);\n if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority);\n }\n return value == null ? styleNull : typeof value === \"function\" ? styleFunction : styleConstant;\n }\n d3_selectionPrototype.property = function(name, value) {\n if (arguments.length < 2) {\n if (typeof name === \"string\") return this.node()[name];\n for (value in name) this.each(d3_selection_property(value, name[value]));\n return this;\n }\n return this.each(d3_selection_property(name, value));\n };\n function d3_selection_property(name, value) {\n function propertyNull() {\n delete this[name];\n }\n function propertyConstant() {\n this[name] = value;\n }\n function propertyFunction() {\n var x = value.apply(this, arguments);\n if (x == null) delete this[name]; else this[name] = x;\n }\n return value == null ? propertyNull : typeof value === \"function\" ? propertyFunction : propertyConstant;\n }\n d3_selectionPrototype.text = function(value) {\n return arguments.length ? this.each(typeof value === \"function\" ? function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n } : value == null ? function() {\n this.textContent = \"\";\n } : function() {\n this.textContent = value;\n }) : this.node().textContent;\n };\n d3_selectionPrototype.html = function(value) {\n return arguments.length ? this.each(typeof value === \"function\" ? function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n } : value == null ? function() {\n this.innerHTML = \"\";\n } : function() {\n this.innerHTML = value;\n }) : this.node().innerHTML;\n };\n d3_selectionPrototype.append = function(name) {\n name = d3_selection_creator(name);\n return this.select(function() {\n return this.appendChild(name.apply(this, arguments));\n });\n };\n function d3_selection_creator(name) {\n function create() {\n var document = this.ownerDocument, namespace = this.namespaceURI;\n return namespace === d3_nsXhtml && document.documentElement.namespaceURI === d3_nsXhtml ? document.createElement(name) : document.createElementNS(namespace, name);\n }\n function createNS() {\n return this.ownerDocument.createElementNS(name.space, name.local);\n }\n return typeof name === \"function\" ? name : (name = d3.ns.qualify(name)).local ? createNS : create;\n }\n d3_selectionPrototype.insert = function(name, before) {\n name = d3_selection_creator(name);\n before = d3_selection_selector(before);\n return this.select(function() {\n return this.insertBefore(name.apply(this, arguments), before.apply(this, arguments) || null);\n });\n };\n d3_selectionPrototype.remove = function() {\n return this.each(d3_selectionRemove);\n };\n function d3_selectionRemove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n }\n d3_selectionPrototype.data = function(value, key) {\n var i = -1, n = this.length, group, node;\n if (!arguments.length) {\n value = new Array(n = (group = this[0]).length);\n while (++i < n) {\n if (node = group[i]) {\n value[i] = node.__data__;\n }\n }\n return value;\n }\n function bind(group, groupData) {\n var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData;\n if (key) {\n var nodeByKeyValue = new d3_Map(), keyValues = new Array(n), keyValue;\n for (i = -1; ++i < n; ) {\n if (node = group[i]) {\n if (nodeByKeyValue.has(keyValue = key.call(node, node.__data__, i))) {\n exitNodes[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n keyValues[i] = keyValue;\n }\n }\n for (i = -1; ++i < m; ) {\n if (!(node = nodeByKeyValue.get(keyValue = key.call(groupData, nodeData = groupData[i], i)))) {\n enterNodes[i] = d3_selection_dataNode(nodeData);\n } else if (node !== true) {\n updateNodes[i] = node;\n node.__data__ = nodeData;\n }\n nodeByKeyValue.set(keyValue, true);\n }\n for (i = -1; ++i < n; ) {\n if (i in keyValues && nodeByKeyValue.get(keyValues[i]) !== true) {\n exitNodes[i] = group[i];\n }\n }\n } else {\n for (i = -1; ++i < n0; ) {\n node = group[i];\n nodeData = groupData[i];\n if (node) {\n node.__data__ = nodeData;\n updateNodes[i] = node;\n } else {\n enterNodes[i] = d3_selection_dataNode(nodeData);\n }\n }\n for (;i < m; ++i) {\n enterNodes[i] = d3_selection_dataNode(groupData[i]);\n }\n for (;i < n; ++i) {\n exitNodes[i] = group[i];\n }\n }\n enterNodes.update = updateNodes;\n enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode;\n enter.push(enterNodes);\n update.push(updateNodes);\n exit.push(exitNodes);\n }\n var enter = d3_selection_enter([]), update = d3_selection([]), exit = d3_selection([]);\n if (typeof value === \"function\") {\n while (++i < n) {\n bind(group = this[i], value.call(group, group.parentNode.__data__, i));\n }\n } else {\n while (++i < n) {\n bind(group = this[i], value);\n }\n }\n update.enter = function() {\n return enter;\n };\n update.exit = function() {\n return exit;\n };\n return update;\n };\n function d3_selection_dataNode(data) {\n return {\n __data__: data\n };\n }\n d3_selectionPrototype.datum = function(value) {\n return arguments.length ? this.property(\"__data__\", value) : this.property(\"__data__\");\n };\n d3_selectionPrototype.filter = function(filter) {\n var subgroups = [], subgroup, group, node;\n if (typeof filter !== \"function\") filter = d3_selection_filter(filter);\n for (var j = 0, m = this.length; j < m; j++) {\n subgroups.push(subgroup = []);\n subgroup.parentNode = (group = this[j]).parentNode;\n for (var i = 0, n = group.length; i < n; i++) {\n if ((node = group[i]) && filter.call(node, node.__data__, i, j)) {\n subgroup.push(node);\n }\n }\n }\n return d3_selection(subgroups);\n };\n function d3_selection_filter(selector) {\n return function() {\n return d3_selectMatches(this, selector);\n };\n }\n d3_selectionPrototype.order = function() {\n for (var j = -1, m = this.length; ++j < m; ) {\n for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0; ) {\n if (node = group[i]) {\n if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n return this;\n };\n d3_selectionPrototype.sort = function(comparator) {\n comparator = d3_selection_sortComparator.apply(this, arguments);\n for (var j = -1, m = this.length; ++j < m; ) this[j].sort(comparator);\n return this.order();\n };\n function d3_selection_sortComparator(comparator) {\n if (!arguments.length) comparator = d3_ascending;\n return function(a, b) {\n return a && b ? comparator(a.__data__, b.__data__) : !a - !b;\n };\n }\n d3_selectionPrototype.each = function(callback) {\n return d3_selection_each(this, function(node, i, j) {\n callback.call(node, node.__data__, i, j);\n });\n };\n function d3_selection_each(groups, callback) {\n for (var j = 0, m = groups.length; j < m; j++) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; i++) {\n if (node = group[i]) callback(node, i, j);\n }\n }\n return groups;\n }\n d3_selectionPrototype.call = function(callback) {\n var args = d3_array(arguments);\n callback.apply(args[0] = this, args);\n return this;\n };\n d3_selectionPrototype.empty = function() {\n return !this.node();\n };\n d3_selectionPrototype.node = function() {\n for (var j = 0, m = this.length; j < m; j++) {\n for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n var node = group[i];\n if (node) return node;\n }\n }\n return null;\n };\n d3_selectionPrototype.size = function() {\n var n = 0;\n d3_selection_each(this, function() {\n ++n;\n });\n return n;\n };\n function d3_selection_enter(selection) {\n d3_subclass(selection, d3_selection_enterPrototype);\n return selection;\n }\n var d3_selection_enterPrototype = [];\n d3.selection.enter = d3_selection_enter;\n d3.selection.enter.prototype = d3_selection_enterPrototype;\n d3_selection_enterPrototype.append = d3_selectionPrototype.append;\n d3_selection_enterPrototype.empty = d3_selectionPrototype.empty;\n d3_selection_enterPrototype.node = d3_selectionPrototype.node;\n d3_selection_enterPrototype.call = d3_selectionPrototype.call;\n d3_selection_enterPrototype.size = d3_selectionPrototype.size;\n d3_selection_enterPrototype.select = function(selector) {\n var subgroups = [], subgroup, subnode, upgroup, group, node;\n for (var j = -1, m = this.length; ++j < m; ) {\n upgroup = (group = this[j]).update;\n subgroups.push(subgroup = []);\n subgroup.parentNode = group.parentNode;\n for (var i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) {\n subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i, j));\n subnode.__data__ = node.__data__;\n } else {\n subgroup.push(null);\n }\n }\n }\n return d3_selection(subgroups);\n };\n d3_selection_enterPrototype.insert = function(name, before) {\n if (arguments.length < 2) before = d3_selection_enterInsertBefore(this);\n return d3_selectionPrototype.insert.call(this, name, before);\n };\n function d3_selection_enterInsertBefore(enter) {\n var i0, j0;\n return function(d, i, j) {\n var group = enter[j].update, n = group.length, node;\n if (j != j0) j0 = j, i0 = 0;\n if (i >= i0) i0 = i + 1;\n while (!(node = group[i0]) && ++i0 < n) ;\n return node;\n };\n }\n d3.select = function(node) {\n var group;\n if (typeof node === \"string\") {\n group = [ d3_select(node, d3_document) ];\n group.parentNode = d3_document.documentElement;\n } else {\n group = [ node ];\n group.parentNode = d3_documentElement(node);\n }\n return d3_selection([ group ]);\n };\n d3.selectAll = function(nodes) {\n var group;\n if (typeof nodes === \"string\") {\n group = d3_array(d3_selectAll(nodes, d3_document));\n group.parentNode = d3_document.documentElement;\n } else {\n group = d3_array(nodes);\n group.parentNode = null;\n }\n return d3_selection([ group ]);\n };\n d3_selectionPrototype.on = function(type, listener, capture) {\n var n = arguments.length;\n if (n < 3) {\n if (typeof type !== \"string\") {\n if (n < 2) listener = false;\n for (capture in type) this.each(d3_selection_on(capture, type[capture], listener));\n return this;\n }\n if (n < 2) return (n = this.node()[\"__on\" + type]) && n._;\n capture = false;\n }\n return this.each(d3_selection_on(type, listener, capture));\n };\n function d3_selection_on(type, listener, capture) {\n var name = \"__on\" + type, i = type.indexOf(\".\"), wrap = d3_selection_onListener;\n if (i > 0) type = type.slice(0, i);\n var filter = d3_selection_onFilters.get(type);\n if (filter) type = filter, wrap = d3_selection_onFilter;\n function onRemove() {\n var l = this[name];\n if (l) {\n this.removeEventListener(type, l, l.$);\n delete this[name];\n }\n }\n function onAdd() {\n var l = wrap(listener, d3_array(arguments));\n onRemove.call(this);\n this.addEventListener(type, this[name] = l, l.$ = capture);\n l._ = listener;\n }\n function removeAll() {\n var re = new RegExp(\"^__on([^.]+)\" + d3.requote(type) + \"$\"), match;\n for (var name in this) {\n if (match = name.match(re)) {\n var l = this[name];\n this.removeEventListener(match[1], l, l.$);\n delete this[name];\n }\n }\n }\n return i ? listener ? onAdd : onRemove : listener ? d3_noop : removeAll;\n }\n var d3_selection_onFilters = d3.map({\n mouseenter: \"mouseover\",\n mouseleave: \"mouseout\"\n });\n if (d3_document) {\n d3_selection_onFilters.forEach(function(k) {\n if (\"on\" + k in d3_document) d3_selection_onFilters.remove(k);\n });\n }\n function d3_selection_onListener(listener, argumentz) {\n return function(e) {\n var o = d3.event;\n d3.event = e;\n argumentz[0] = this.__data__;\n try {\n listener.apply(this, argumentz);\n } finally {\n d3.event = o;\n }\n };\n }\n function d3_selection_onFilter(listener, argumentz) {\n var l = d3_selection_onListener(listener, argumentz);\n return function(e) {\n var target = this, related = e.relatedTarget;\n if (!related || related !== target && !(related.compareDocumentPosition(target) & 8)) {\n l.call(target, e);\n }\n };\n }\n var d3_event_dragSelect, d3_event_dragId = 0;\n function d3_event_dragSuppress(node) {\n var name = \".dragsuppress-\" + ++d3_event_dragId, click = \"click\" + name, w = d3.select(d3_window(node)).on(\"touchmove\" + name, d3_eventPreventDefault).on(\"dragstart\" + name, d3_eventPreventDefault).on(\"selectstart\" + name, d3_eventPreventDefault);\n if (d3_event_dragSelect == null) {\n d3_event_dragSelect = \"onselectstart\" in node ? false : d3_vendorSymbol(node.style, \"userSelect\");\n }\n if (d3_event_dragSelect) {\n var style = d3_documentElement(node).style, select = style[d3_event_dragSelect];\n style[d3_event_dragSelect] = \"none\";\n }\n return function(suppressClick) {\n w.on(name, null);\n if (d3_event_dragSelect) style[d3_event_dragSelect] = select;\n if (suppressClick) {\n var off = function() {\n w.on(click, null);\n };\n w.on(click, function() {\n d3_eventPreventDefault();\n off();\n }, true);\n setTimeout(off, 0);\n }\n };\n }\n d3.mouse = function(container) {\n return d3_mousePoint(container, d3_eventSource());\n };\n var d3_mouse_bug44083 = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n function d3_mousePoint(container, e) {\n if (e.changedTouches) e = e.changedTouches[0];\n var svg = container.ownerSVGElement || container;\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n if (d3_mouse_bug44083 < 0) {\n var window = d3_window(container);\n if (window.scrollX || window.scrollY) {\n svg = d3.select(\"body\").append(\"svg\").style({\n position: \"absolute\",\n top: 0,\n left: 0,\n margin: 0,\n padding: 0,\n border: \"none\"\n }, \"important\");\n var ctm = svg[0][0].getScreenCTM();\n d3_mouse_bug44083 = !(ctm.f || ctm.e);\n svg.remove();\n }\n }\n if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY; else point.x = e.clientX, \n point.y = e.clientY;\n point = point.matrixTransform(container.getScreenCTM().inverse());\n return [ point.x, point.y ];\n }\n var rect = container.getBoundingClientRect();\n return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ];\n }\n d3.touch = function(container, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = d3_eventSource().changedTouches;\n if (touches) for (var i = 0, n = touches.length, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return d3_mousePoint(container, touch);\n }\n }\n };\n d3.behavior.drag = function() {\n var event = d3_eventDispatch(drag, \"drag\", \"dragstart\", \"dragend\"), origin = null, mousedown = dragstart(d3_noop, d3.mouse, d3_window, \"mousemove\", \"mouseup\"), touchstart = dragstart(d3_behavior_dragTouchId, d3.touch, d3_identity, \"touchmove\", \"touchend\");\n function drag() {\n this.on(\"mousedown.drag\", mousedown).on(\"touchstart.drag\", touchstart);\n }\n function dragstart(id, position, subject, move, end) {\n return function() {\n var that = this, target = d3.event.target.correspondingElement || d3.event.target, parent = that.parentNode, dispatch = event.of(that, arguments), dragged = 0, dragId = id(), dragName = \".drag\" + (dragId == null ? \"\" : \"-\" + dragId), dragOffset, dragSubject = d3.select(subject(target)).on(move + dragName, moved).on(end + dragName, ended), dragRestore = d3_event_dragSuppress(target), position0 = position(parent, dragId);\n if (origin) {\n dragOffset = origin.apply(that, arguments);\n dragOffset = [ dragOffset.x - position0[0], dragOffset.y - position0[1] ];\n } else {\n dragOffset = [ 0, 0 ];\n }\n dispatch({\n type: \"dragstart\"\n });\n function moved() {\n var position1 = position(parent, dragId), dx, dy;\n if (!position1) return;\n dx = position1[0] - position0[0];\n dy = position1[1] - position0[1];\n dragged |= dx | dy;\n position0 = position1;\n dispatch({\n type: \"drag\",\n x: position1[0] + dragOffset[0],\n y: position1[1] + dragOffset[1],\n dx: dx,\n dy: dy\n });\n }\n function ended() {\n if (!position(parent, dragId)) return;\n dragSubject.on(move + dragName, null).on(end + dragName, null);\n dragRestore(dragged);\n dispatch({\n type: \"dragend\"\n });\n }\n };\n }\n drag.origin = function(x) {\n if (!arguments.length) return origin;\n origin = x;\n return drag;\n };\n return d3.rebind(drag, event, \"on\");\n };\n function d3_behavior_dragTouchId() {\n return d3.event.changedTouches[0].identifier;\n }\n d3.touches = function(container, touches) {\n if (arguments.length < 2) touches = d3_eventSource().touches;\n return touches ? d3_array(touches).map(function(touch) {\n var point = d3_mousePoint(container, touch);\n point.identifier = touch.identifier;\n return point;\n }) : [];\n };\n var ε = 1e-6, ε2 = ε * ε, π = Math.PI, τ = 2 * π, τε = τ - ε, halfπ = π / 2, d3_radians = π / 180, d3_degrees = 180 / π;\n function d3_sgn(x) {\n return x > 0 ? 1 : x < 0 ? -1 : 0;\n }\n function d3_cross2d(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);\n }\n function d3_acos(x) {\n return x > 1 ? 0 : x < -1 ? π : Math.acos(x);\n }\n function d3_asin(x) {\n return x > 1 ? halfπ : x < -1 ? -halfπ : Math.asin(x);\n }\n function d3_sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n }\n function d3_cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n }\n function d3_tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n }\n function d3_haversin(x) {\n return (x = Math.sin(x / 2)) * x;\n }\n var ρ = Math.SQRT2, ρ2 = 2, ρ4 = 4;\n d3.interpolateZoom = function(p0, p1) {\n 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;\n if (d2 < ε2) {\n S = Math.log(w1 / w0) / ρ;\n i = function(t) {\n return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(ρ * t * S) ];\n };\n } else {\n var d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + ρ4 * d2) / (2 * w0 * ρ2 * d1), b1 = (w1 * w1 - w0 * w0 - ρ4 * d2) / (2 * w1 * ρ2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / ρ;\n i = function(t) {\n var s = t * S, coshr0 = d3_cosh(r0), u = w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0));\n return [ ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / d3_cosh(ρ * s + r0) ];\n };\n }\n i.duration = S * 1e3;\n return i;\n };\n d3.behavior.zoom = function() {\n var view = {\n x: 0,\n y: 0,\n k: 1\n }, translate0, center0, center, size = [ 960, 500 ], scaleExtent = d3_behavior_zoomInfinity, duration = 250, zooming = 0, mousedown = \"mousedown.zoom\", mousemove = \"mousemove.zoom\", mouseup = \"mouseup.zoom\", mousewheelTimer, touchstart = \"touchstart.zoom\", touchtime, event = d3_eventDispatch(zoom, \"zoomstart\", \"zoom\", \"zoomend\"), x0, x1, y0, y1;\n if (!d3_behavior_zoomWheel) {\n d3_behavior_zoomWheel = \"onwheel\" in d3_document ? (d3_behavior_zoomDelta = function() {\n return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1);\n }, \"wheel\") : \"onmousewheel\" in d3_document ? (d3_behavior_zoomDelta = function() {\n return d3.event.wheelDelta;\n }, \"mousewheel\") : (d3_behavior_zoomDelta = function() {\n return -d3.event.detail;\n }, \"MozMousePixelScroll\");\n }\n function zoom(g) {\n g.on(mousedown, mousedowned).on(d3_behavior_zoomWheel + \".zoom\", mousewheeled).on(\"dblclick.zoom\", dblclicked).on(touchstart, touchstarted);\n }\n zoom.event = function(g) {\n g.each(function() {\n var dispatch = event.of(this, arguments), view1 = view;\n if (d3_transitionInheritId) {\n d3.select(this).transition().each(\"start.zoom\", function() {\n view = this.__chart__ || {\n x: 0,\n y: 0,\n k: 1\n };\n zoomstarted(dispatch);\n }).tween(\"zoom:zoom\", function() {\n var dx = size[0], dy = size[1], cx = center0 ? center0[0] : dx / 2, cy = center0 ? center0[1] : dy / 2, i = d3.interpolateZoom([ (cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k ], [ (cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k ]);\n return function(t) {\n var l = i(t), k = dx / l[2];\n this.__chart__ = view = {\n x: cx - l[0] * k,\n y: cy - l[1] * k,\n k: k\n };\n zoomed(dispatch);\n };\n }).each(\"interrupt.zoom\", function() {\n zoomended(dispatch);\n }).each(\"end.zoom\", function() {\n zoomended(dispatch);\n });\n } else {\n this.__chart__ = view;\n zoomstarted(dispatch);\n zoomed(dispatch);\n zoomended(dispatch);\n }\n });\n };\n zoom.translate = function(_) {\n if (!arguments.length) return [ view.x, view.y ];\n view = {\n x: +_[0],\n y: +_[1],\n k: view.k\n };\n rescale();\n return zoom;\n };\n zoom.scale = function(_) {\n if (!arguments.length) return view.k;\n view = {\n x: view.x,\n y: view.y,\n k: null\n };\n scaleTo(+_);\n rescale();\n return zoom;\n };\n zoom.scaleExtent = function(_) {\n if (!arguments.length) return scaleExtent;\n scaleExtent = _ == null ? d3_behavior_zoomInfinity : [ +_[0], +_[1] ];\n return zoom;\n };\n zoom.center = function(_) {\n if (!arguments.length) return center;\n center = _ && [ +_[0], +_[1] ];\n return zoom;\n };\n zoom.size = function(_) {\n if (!arguments.length) return size;\n size = _ && [ +_[0], +_[1] ];\n return zoom;\n };\n zoom.duration = function(_) {\n if (!arguments.length) return duration;\n duration = +_;\n return zoom;\n };\n zoom.x = function(z) {\n if (!arguments.length) return x1;\n x1 = z;\n x0 = z.copy();\n view = {\n x: 0,\n y: 0,\n k: 1\n };\n return zoom;\n };\n zoom.y = function(z) {\n if (!arguments.length) return y1;\n y1 = z;\n y0 = z.copy();\n view = {\n x: 0,\n y: 0,\n k: 1\n };\n return zoom;\n };\n function location(p) {\n return [ (p[0] - view.x) / view.k, (p[1] - view.y) / view.k ];\n }\n function point(l) {\n return [ l[0] * view.k + view.x, l[1] * view.k + view.y ];\n }\n function scaleTo(s) {\n view.k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s));\n }\n function translateTo(p, l) {\n l = point(l);\n view.x += p[0] - l[0];\n view.y += p[1] - l[1];\n }\n function zoomTo(that, p, l, k) {\n that.__chart__ = {\n x: view.x,\n y: view.y,\n k: view.k\n };\n scaleTo(Math.pow(2, k));\n translateTo(center0 = p, l);\n that = d3.select(that);\n if (duration > 0) that = that.transition().duration(duration);\n that.call(zoom.event);\n }\n function rescale() {\n if (x1) x1.domain(x0.range().map(function(x) {\n return (x - view.x) / view.k;\n }).map(x0.invert));\n if (y1) y1.domain(y0.range().map(function(y) {\n return (y - view.y) / view.k;\n }).map(y0.invert));\n }\n function zoomstarted(dispatch) {\n if (!zooming++) dispatch({\n type: \"zoomstart\"\n });\n }\n function zoomed(dispatch) {\n rescale();\n dispatch({\n type: \"zoom\",\n scale: view.k,\n translate: [ view.x, view.y ]\n });\n }\n function zoomended(dispatch) {\n if (!--zooming) dispatch({\n type: \"zoomend\"\n }), center0 = null;\n }\n function mousedowned() {\n var that = this, dispatch = event.of(that, arguments), dragged = 0, subject = d3.select(d3_window(that)).on(mousemove, moved).on(mouseup, ended), location0 = location(d3.mouse(that)), dragRestore = d3_event_dragSuppress(that);\n d3_selection_interrupt.call(that);\n zoomstarted(dispatch);\n function moved() {\n dragged = 1;\n translateTo(d3.mouse(that), location0);\n zoomed(dispatch);\n }\n function ended() {\n subject.on(mousemove, null).on(mouseup, null);\n dragRestore(dragged);\n zoomended(dispatch);\n }\n }\n function touchstarted() {\n var that = this, dispatch = event.of(that, arguments), locations0 = {}, distance0 = 0, scale0, zoomName = \".zoom-\" + d3.event.changedTouches[0].identifier, touchmove = \"touchmove\" + zoomName, touchend = \"touchend\" + zoomName, targets = [], subject = d3.select(that), dragRestore = d3_event_dragSuppress(that);\n started();\n zoomstarted(dispatch);\n subject.on(mousedown, null).on(touchstart, started);\n function relocate() {\n var touches = d3.touches(that);\n scale0 = view.k;\n touches.forEach(function(t) {\n if (t.identifier in locations0) locations0[t.identifier] = location(t);\n });\n return touches;\n }\n function started() {\n var target = d3.event.target;\n d3.select(target).on(touchmove, moved).on(touchend, ended);\n targets.push(target);\n var changed = d3.event.changedTouches;\n for (var i = 0, n = changed.length; i < n; ++i) {\n locations0[changed[i].identifier] = null;\n }\n var touches = relocate(), now = Date.now();\n if (touches.length === 1) {\n if (now - touchtime < 500) {\n var p = touches[0];\n zoomTo(that, p, locations0[p.identifier], Math.floor(Math.log(view.k) / Math.LN2) + 1);\n d3_eventPreventDefault();\n }\n touchtime = now;\n } else if (touches.length > 1) {\n var p = touches[0], q = touches[1], dx = p[0] - q[0], dy = p[1] - q[1];\n distance0 = dx * dx + dy * dy;\n }\n }\n function moved() {\n var touches = d3.touches(that), p0, l0, p1, l1;\n d3_selection_interrupt.call(that);\n for (var i = 0, n = touches.length; i < n; ++i, l1 = null) {\n p1 = touches[i];\n if (l1 = locations0[p1.identifier]) {\n if (l0) break;\n p0 = p1, l0 = l1;\n }\n }\n if (l1) {\n var distance1 = (distance1 = p1[0] - p0[0]) * distance1 + (distance1 = p1[1] - p0[1]) * distance1, scale1 = distance0 && Math.sqrt(distance1 / distance0);\n p0 = [ (p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2 ];\n l0 = [ (l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2 ];\n scaleTo(scale1 * scale0);\n }\n touchtime = null;\n translateTo(p0, l0);\n zoomed(dispatch);\n }\n function ended() {\n if (d3.event.touches.length) {\n var changed = d3.event.changedTouches;\n for (var i = 0, n = changed.length; i < n; ++i) {\n delete locations0[changed[i].identifier];\n }\n for (var identifier in locations0) {\n return void relocate();\n }\n }\n d3.selectAll(targets).on(zoomName, null);\n subject.on(mousedown, mousedowned).on(touchstart, touchstarted);\n dragRestore();\n zoomended(dispatch);\n }\n }\n function mousewheeled() {\n var dispatch = event.of(this, arguments);\n if (mousewheelTimer) clearTimeout(mousewheelTimer); else d3_selection_interrupt.call(this), \n translate0 = location(center0 = center || d3.mouse(this)), zoomstarted(dispatch);\n mousewheelTimer = setTimeout(function() {\n mousewheelTimer = null;\n zoomended(dispatch);\n }, 50);\n d3_eventPreventDefault();\n scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * view.k);\n translateTo(center0, translate0);\n zoomed(dispatch);\n }\n function dblclicked() {\n var p = d3.mouse(this), k = Math.log(view.k) / Math.LN2;\n zoomTo(this, p, location(p), d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1);\n }\n return d3.rebind(zoom, event, \"on\");\n };\n var d3_behavior_zoomInfinity = [ 0, Infinity ], d3_behavior_zoomDelta, d3_behavior_zoomWheel;\n d3.color = d3_color;\n function d3_color() {}\n d3_color.prototype.toString = function() {\n return this.rgb() + \"\";\n };\n d3.hsl = d3_hsl;\n function d3_hsl(h, s, l) {\n return this instanceof d3_hsl ? void (this.h = +h, this.s = +s, this.l = +l) : arguments.length < 2 ? h instanceof d3_hsl ? new d3_hsl(h.h, h.s, h.l) : d3_rgb_parse(\"\" + h, d3_rgb_hsl, d3_hsl) : new d3_hsl(h, s, l);\n }\n var d3_hslPrototype = d3_hsl.prototype = new d3_color();\n d3_hslPrototype.brighter = function(k) {\n k = Math.pow(.7, arguments.length ? k : 1);\n return new d3_hsl(this.h, this.s, this.l / k);\n };\n d3_hslPrototype.darker = function(k) {\n k = Math.pow(.7, arguments.length ? k : 1);\n return new d3_hsl(this.h, this.s, k * this.l);\n };\n d3_hslPrototype.rgb = function() {\n return d3_hsl_rgb(this.h, this.s, this.l);\n };\n function d3_hsl_rgb(h, s, l) {\n var m1, m2;\n h = isNaN(h) ? 0 : (h %= 360) < 0 ? h + 360 : h;\n s = isNaN(s) ? 0 : s < 0 ? 0 : s > 1 ? 1 : s;\n l = l < 0 ? 0 : l > 1 ? 1 : l;\n m2 = l <= .5 ? l * (1 + s) : l + s - l * s;\n m1 = 2 * l - m2;\n function v(h) {\n if (h > 360) h -= 360; else if (h < 0) h += 360;\n if (h < 60) return m1 + (m2 - m1) * h / 60;\n if (h < 180) return m2;\n if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60;\n return m1;\n }\n function vv(h) {\n return Math.round(v(h) * 255);\n }\n return new d3_rgb(vv(h + 120), vv(h), vv(h - 120));\n }\n d3.hcl = d3_hcl;\n function d3_hcl(h, c, l) {\n return this instanceof d3_hcl ? void (this.h = +h, this.c = +c, this.l = +l) : arguments.length < 2 ? h instanceof d3_hcl ? new d3_hcl(h.h, h.c, h.l) : h instanceof d3_lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : new d3_hcl(h, c, l);\n }\n var d3_hclPrototype = d3_hcl.prototype = new d3_color();\n d3_hclPrototype.brighter = function(k) {\n return new d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)));\n };\n d3_hclPrototype.darker = function(k) {\n return new d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)));\n };\n d3_hclPrototype.rgb = function() {\n return d3_hcl_lab(this.h, this.c, this.l).rgb();\n };\n function d3_hcl_lab(h, c, l) {\n if (isNaN(h)) h = 0;\n if (isNaN(c)) c = 0;\n return new d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c);\n }\n d3.lab = d3_lab;\n function d3_lab(l, a, b) {\n return this instanceof d3_lab ? void (this.l = +l, this.a = +a, this.b = +b) : arguments.length < 2 ? l instanceof d3_lab ? new d3_lab(l.l, l.a, l.b) : l instanceof d3_hcl ? d3_hcl_lab(l.h, l.c, l.l) : d3_rgb_lab((l = d3_rgb(l)).r, l.g, l.b) : new d3_lab(l, a, b);\n }\n var d3_lab_K = 18;\n var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883;\n var d3_labPrototype = d3_lab.prototype = new d3_color();\n d3_labPrototype.brighter = function(k) {\n return new d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);\n };\n d3_labPrototype.darker = function(k) {\n return new d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);\n };\n d3_labPrototype.rgb = function() {\n return d3_lab_rgb(this.l, this.a, this.b);\n };\n function d3_lab_rgb(l, a, b) {\n var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200;\n x = d3_lab_xyz(x) * d3_lab_X;\n y = d3_lab_xyz(y) * d3_lab_Y;\n z = d3_lab_xyz(z) * d3_lab_Z;\n return new d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z));\n }\n function d3_lab_hcl(l, a, b) {\n return l > 0 ? new d3_hcl(Math.atan2(b, a) * d3_degrees, Math.sqrt(a * a + b * b), l) : new d3_hcl(NaN, NaN, l);\n }\n function d3_lab_xyz(x) {\n return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037;\n }\n function d3_xyz_lab(x) {\n return x > .008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29;\n }\n function d3_xyz_rgb(r) {\n return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055));\n }\n d3.rgb = d3_rgb;\n function d3_rgb(r, g, b) {\n return this instanceof d3_rgb ? void (this.r = ~~r, this.g = ~~g, this.b = ~~b) : arguments.length < 2 ? r instanceof d3_rgb ? new d3_rgb(r.r, r.g, r.b) : d3_rgb_parse(\"\" + r, d3_rgb, d3_hsl_rgb) : new d3_rgb(r, g, b);\n }\n function d3_rgbNumber(value) {\n return new d3_rgb(value >> 16, value >> 8 & 255, value & 255);\n }\n function d3_rgbString(value) {\n return d3_rgbNumber(value) + \"\";\n }\n var d3_rgbPrototype = d3_rgb.prototype = new d3_color();\n d3_rgbPrototype.brighter = function(k) {\n k = Math.pow(.7, arguments.length ? k : 1);\n var r = this.r, g = this.g, b = this.b, i = 30;\n if (!r && !g && !b) return new d3_rgb(i, i, i);\n if (r && r < i) r = i;\n if (g && g < i) g = i;\n if (b && b < i) b = i;\n return new d3_rgb(Math.min(255, r / k), Math.min(255, g / k), Math.min(255, b / k));\n };\n d3_rgbPrototype.darker = function(k) {\n k = Math.pow(.7, arguments.length ? k : 1);\n return new d3_rgb(k * this.r, k * this.g, k * this.b);\n };\n d3_rgbPrototype.hsl = function() {\n return d3_rgb_hsl(this.r, this.g, this.b);\n };\n d3_rgbPrototype.toString = function() {\n return \"#\" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);\n };\n function d3_rgb_hex(v) {\n return v < 16 ? \"0\" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16);\n }\n function d3_rgb_parse(format, rgb, hsl) {\n var r = 0, g = 0, b = 0, m1, m2, color;\n m1 = /([a-z]+)\\((.*)\\)/.exec(format = format.toLowerCase());\n if (m1) {\n m2 = m1[2].split(\",\");\n switch (m1[1]) {\n case \"hsl\":\n {\n return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100);\n }\n\n case \"rgb\":\n {\n return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2]));\n }\n }\n }\n if (color = d3_rgb_names.get(format)) {\n return rgb(color.r, color.g, color.b);\n }\n if (format != null && format.charAt(0) === \"#\" && !isNaN(color = parseInt(format.slice(1), 16))) {\n if (format.length === 4) {\n r = (color & 3840) >> 4;\n r = r >> 4 | r;\n g = color & 240;\n g = g >> 4 | g;\n b = color & 15;\n b = b << 4 | b;\n } else if (format.length === 7) {\n r = (color & 16711680) >> 16;\n g = (color & 65280) >> 8;\n b = color & 255;\n }\n }\n return rgb(r, g, b);\n }\n function d3_rgb_hsl(r, g, b) {\n var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2;\n if (d) {\n s = l < .5 ? d / (max + min) : d / (2 - max - min);\n if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4;\n h *= 60;\n } else {\n h = NaN;\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new d3_hsl(h, s, l);\n }\n function d3_rgb_lab(r, g, b) {\n r = d3_rgb_xyz(r);\n g = d3_rgb_xyz(g);\n b = d3_rgb_xyz(b);\n var x = d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X), y = d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y), z = d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z);\n return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z));\n }\n function d3_rgb_xyz(r) {\n return (r /= 255) <= .04045 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4);\n }\n function d3_rgb_parseNumber(c) {\n var f = parseFloat(c);\n return c.charAt(c.length - 1) === \"%\" ? Math.round(f * 2.55) : f;\n }\n var d3_rgb_names = d3.map({\n aliceblue: 15792383,\n antiquewhite: 16444375,\n aqua: 65535,\n aquamarine: 8388564,\n azure: 15794175,\n beige: 16119260,\n bisque: 16770244,\n black: 0,\n blanchedalmond: 16772045,\n blue: 255,\n blueviolet: 9055202,\n brown: 10824234,\n burlywood: 14596231,\n cadetblue: 6266528,\n chartreuse: 8388352,\n chocolate: 13789470,\n coral: 16744272,\n cornflowerblue: 6591981,\n cornsilk: 16775388,\n crimson: 14423100,\n cyan: 65535,\n darkblue: 139,\n darkcyan: 35723,\n darkgoldenrod: 12092939,\n darkgray: 11119017,\n darkgreen: 25600,\n darkgrey: 11119017,\n darkkhaki: 12433259,\n darkmagenta: 9109643,\n darkolivegreen: 5597999,\n darkorange: 16747520,\n darkorchid: 10040012,\n darkred: 9109504,\n darksalmon: 15308410,\n darkseagreen: 9419919,\n darkslateblue: 4734347,\n darkslategray: 3100495,\n darkslategrey: 3100495,\n darkturquoise: 52945,\n darkviolet: 9699539,\n deeppink: 16716947,\n deepskyblue: 49151,\n dimgray: 6908265,\n dimgrey: 6908265,\n dodgerblue: 2003199,\n firebrick: 11674146,\n floralwhite: 16775920,\n forestgreen: 2263842,\n fuchsia: 16711935,\n gainsboro: 14474460,\n ghostwhite: 16316671,\n gold: 16766720,\n goldenrod: 14329120,\n gray: 8421504,\n green: 32768,\n greenyellow: 11403055,\n grey: 8421504,\n honeydew: 15794160,\n hotpink: 16738740,\n indianred: 13458524,\n indigo: 4915330,\n ivory: 16777200,\n khaki: 15787660,\n lavender: 15132410,\n lavenderblush: 16773365,\n lawngreen: 8190976,\n lemonchiffon: 16775885,\n lightblue: 11393254,\n lightcoral: 15761536,\n lightcyan: 14745599,\n lightgoldenrodyellow: 16448210,\n lightgray: 13882323,\n lightgreen: 9498256,\n lightgrey: 13882323,\n lightpink: 16758465,\n lightsalmon: 16752762,\n lightseagreen: 2142890,\n lightskyblue: 8900346,\n lightslategray: 7833753,\n lightslategrey: 7833753,\n lightsteelblue: 11584734,\n lightyellow: 16777184,\n lime: 65280,\n limegreen: 3329330,\n linen: 16445670,\n magenta: 16711935,\n maroon: 8388608,\n mediumaquamarine: 6737322,\n mediumblue: 205,\n mediumorchid: 12211667,\n mediumpurple: 9662683,\n mediumseagreen: 3978097,\n mediumslateblue: 8087790,\n mediumspringgreen: 64154,\n mediumturquoise: 4772300,\n mediumvioletred: 13047173,\n midnightblue: 1644912,\n mintcream: 16121850,\n mistyrose: 16770273,\n moccasin: 16770229,\n navajowhite: 16768685,\n navy: 128,\n oldlace: 16643558,\n olive: 8421376,\n olivedrab: 7048739,\n orange: 16753920,\n orangered: 16729344,\n orchid: 14315734,\n palegoldenrod: 15657130,\n palegreen: 10025880,\n paleturquoise: 11529966,\n palevioletred: 14381203,\n papayawhip: 16773077,\n peachpuff: 16767673,\n peru: 13468991,\n pink: 16761035,\n plum: 14524637,\n powderblue: 11591910,\n purple: 8388736,\n rebeccapurple: 6697881,\n red: 16711680,\n rosybrown: 12357519,\n royalblue: 4286945,\n saddlebrown: 9127187,\n salmon: 16416882,\n sandybrown: 16032864,\n seagreen: 3050327,\n seashell: 16774638,\n sienna: 10506797,\n silver: 12632256,\n skyblue: 8900331,\n slateblue: 6970061,\n slategray: 7372944,\n slategrey: 7372944,\n snow: 16775930,\n springgreen: 65407,\n steelblue: 4620980,\n tan: 13808780,\n teal: 32896,\n thistle: 14204888,\n tomato: 16737095,\n turquoise: 4251856,\n violet: 15631086,\n wheat: 16113331,\n white: 16777215,\n whitesmoke: 16119285,\n yellow: 16776960,\n yellowgreen: 10145074\n });\n d3_rgb_names.forEach(function(key, value) {\n d3_rgb_names.set(key, d3_rgbNumber(value));\n });\n function d3_functor(v) {\n return typeof v === \"function\" ? v : function() {\n return v;\n };\n }\n d3.functor = d3_functor;\n d3.xhr = d3_xhrType(d3_identity);\n function d3_xhrType(response) {\n return function(url, mimeType, callback) {\n if (arguments.length === 2 && typeof mimeType === \"function\") callback = mimeType, \n mimeType = null;\n return d3_xhr(url, mimeType, response, callback);\n };\n }\n function d3_xhr(url, mimeType, response, callback) {\n var xhr = {}, dispatch = d3.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"), headers = {}, request = new XMLHttpRequest(), responseType = null;\n if (self.XDomainRequest && !(\"withCredentials\" in request) && /^(http(s)?:)?\\/\\//.test(url)) request = new XDomainRequest();\n \"onload\" in request ? request.onload = request.onerror = respond : request.onreadystatechange = function() {\n request.readyState > 3 && respond();\n };\n function respond() {\n var status = request.status, result;\n if (!status && d3_xhrHasResponse(request) || status >= 200 && status < 300 || status === 304) {\n try {\n result = response.call(xhr, request);\n } catch (e) {\n dispatch.error.call(xhr, e);\n return;\n }\n dispatch.load.call(xhr, result);\n } else {\n dispatch.error.call(xhr, request);\n }\n }\n request.onprogress = function(event) {\n var o = d3.event;\n d3.event = event;\n try {\n dispatch.progress.call(xhr, request);\n } finally {\n d3.event = o;\n }\n };\n xhr.header = function(name, value) {\n name = (name + \"\").toLowerCase();\n if (arguments.length < 2) return headers[name];\n if (value == null) delete headers[name]; else headers[name] = value + \"\";\n return xhr;\n };\n xhr.mimeType = function(value) {\n if (!arguments.length) return mimeType;\n mimeType = value == null ? null : value + \"\";\n return xhr;\n };\n xhr.responseType = function(value) {\n if (!arguments.length) return responseType;\n responseType = value;\n return xhr;\n };\n xhr.response = function(value) {\n response = value;\n return xhr;\n };\n [ \"get\", \"post\" ].forEach(function(method) {\n xhr[method] = function() {\n return xhr.send.apply(xhr, [ method ].concat(d3_array(arguments)));\n };\n });\n xhr.send = function(method, data, callback) {\n if (arguments.length === 2 && typeof data === \"function\") callback = data, data = null;\n request.open(method, url, true);\n if (mimeType != null && !(\"accept\" in headers)) headers[\"accept\"] = mimeType + \",*/*\";\n if (request.setRequestHeader) for (var name in headers) request.setRequestHeader(name, headers[name]);\n if (mimeType != null && request.overrideMimeType) request.overrideMimeType(mimeType);\n if (responseType != null) request.responseType = responseType;\n if (callback != null) xhr.on(\"error\", callback).on(\"load\", function(request) {\n callback(null, request);\n });\n dispatch.beforesend.call(xhr, request);\n request.send(data == null ? null : data);\n return xhr;\n };\n xhr.abort = function() {\n request.abort();\n return xhr;\n };\n d3.rebind(xhr, dispatch, \"on\");\n return callback == null ? xhr : xhr.get(d3_xhr_fixCallback(callback));\n }\n function d3_xhr_fixCallback(callback) {\n return callback.length === 1 ? function(error, request) {\n callback(error == null ? request : null);\n } : callback;\n }\n function d3_xhrHasResponse(request) {\n var type = request.responseType;\n return type && type !== \"text\" ? request.response : request.responseText;\n }\n d3.dsv = function(delimiter, mimeType) {\n var reFormat = new RegExp('[\"' + delimiter + \"\\n]\"), delimiterCode = delimiter.charCodeAt(0);\n function dsv(url, row, callback) {\n if (arguments.length < 3) callback = row, row = null;\n var xhr = d3_xhr(url, mimeType, row == null ? response : typedResponse(row), callback);\n xhr.row = function(_) {\n return arguments.length ? xhr.response((row = _) == null ? response : typedResponse(_)) : row;\n };\n return xhr;\n }\n function response(request) {\n return dsv.parse(request.responseText);\n }\n function typedResponse(f) {\n return function(request) {\n return dsv.parse(request.responseText, f);\n };\n }\n dsv.parse = function(text, f) {\n var o;\n return dsv.parseRows(text, function(row, i) {\n if (o) return o(row, i - 1);\n var a = function(d) {\n var obj = {};\n var len = row.length;\n for (var k = 0; k < len; ++k) {\n obj[row[k]] = d[k];\n }\n return obj;\n };\n o = f ? function(row, i) {\n return f(a(row), i);\n } : a;\n });\n };\n dsv.parseRows = function(text, f) {\n var EOL = {}, EOF = {}, rows = [], N = text.length, I = 0, n = 0, t, eol;\n function token() {\n if (I >= N) return EOF;\n if (eol) return eol = false, EOL;\n var j = I;\n if (text.charCodeAt(j) === 34) {\n var i = j;\n while (i++ < N) {\n if (text.charCodeAt(i) === 34) {\n if (text.charCodeAt(i + 1) !== 34) break;\n ++i;\n }\n }\n I = i + 2;\n var c = text.charCodeAt(i + 1);\n if (c === 13) {\n eol = true;\n if (text.charCodeAt(i + 2) === 10) ++I;\n } else if (c === 10) {\n eol = true;\n }\n return text.slice(j + 1, i).replace(/\"\"/g, '\"');\n }\n while (I < N) {\n var c = text.charCodeAt(I++), k = 1;\n if (c === 10) eol = true; else if (c === 13) {\n eol = true;\n if (text.charCodeAt(I) === 10) ++I, ++k;\n } else if (c !== delimiterCode) continue;\n return text.slice(j, I - k);\n }\n return text.slice(j);\n }\n while ((t = token()) !== EOF) {\n var a = [];\n while (t !== EOL && t !== EOF) {\n a.push(t);\n t = token();\n }\n if (f && (a = f(a, n++)) == null) continue;\n rows.push(a);\n }\n return rows;\n };\n dsv.format = function(rows) {\n if (Array.isArray(rows[0])) return dsv.formatRows(rows);\n var fieldSet = new d3_Set(), fields = [];\n rows.forEach(function(row) {\n for (var field in row) {\n if (!fieldSet.has(field)) {\n fields.push(fieldSet.add(field));\n }\n }\n });\n return [ fields.map(formatValue).join(delimiter) ].concat(rows.map(function(row) {\n return fields.map(function(field) {\n return formatValue(row[field]);\n }).join(delimiter);\n })).join(\"\\n\");\n };\n dsv.formatRows = function(rows) {\n return rows.map(formatRow).join(\"\\n\");\n };\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n function formatValue(text) {\n return reFormat.test(text) ? '\"' + text.replace(/\\\"/g, '\"\"') + '\"' : text;\n }\n return dsv;\n };\n d3.csv = d3.dsv(\",\", \"text/csv\");\n d3.tsv = d3.dsv(\"\t\", \"text/tab-separated-values\");\n var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, d3_timer_timeout, d3_timer_frame = this[d3_vendorSymbol(this, \"requestAnimationFrame\")] || function(callback) {\n setTimeout(callback, 17);\n };\n d3.timer = function() {\n d3_timer.apply(this, arguments);\n };\n function d3_timer(callback, delay, then) {\n var n = arguments.length;\n if (n < 2) delay = 0;\n if (n < 3) then = Date.now();\n var time = then + delay, timer = {\n c: callback,\n t: time,\n n: null\n };\n if (d3_timer_queueTail) d3_timer_queueTail.n = timer; else d3_timer_queueHead = timer;\n d3_timer_queueTail = timer;\n if (!d3_timer_interval) {\n d3_timer_timeout = clearTimeout(d3_timer_timeout);\n d3_timer_interval = 1;\n d3_timer_frame(d3_timer_step);\n }\n return timer;\n }\n function d3_timer_step() {\n var now = d3_timer_mark(), delay = d3_timer_sweep() - now;\n if (delay > 24) {\n if (isFinite(delay)) {\n clearTimeout(d3_timer_timeout);\n d3_timer_timeout = setTimeout(d3_timer_step, delay);\n }\n d3_timer_interval = 0;\n } else {\n d3_timer_interval = 1;\n d3_timer_frame(d3_timer_step);\n }\n }\n d3.timer.flush = function() {\n d3_timer_mark();\n d3_timer_sweep();\n };\n function d3_timer_mark() {\n var now = Date.now(), timer = d3_timer_queueHead;\n while (timer) {\n if (now >= timer.t && timer.c(now - timer.t)) timer.c = null;\n timer = timer.n;\n }\n return now;\n }\n function d3_timer_sweep() {\n var t0, t1 = d3_timer_queueHead, time = Infinity;\n while (t1) {\n if (t1.c) {\n if (t1.t < time) time = t1.t;\n t1 = (t0 = t1).n;\n } else {\n t1 = t0 ? t0.n = t1.n : d3_timer_queueHead = t1.n;\n }\n }\n d3_timer_queueTail = t0;\n return time;\n }\n d3.round = function(x, n) {\n return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x);\n };\n d3.geom = {};\n function d3_geom_pointX(d) {\n return d[0];\n }\n function d3_geom_pointY(d) {\n return d[1];\n }\n d3.geom.hull = function(vertices) {\n var x = d3_geom_pointX, y = d3_geom_pointY;\n if (arguments.length) return hull(vertices);\n function hull(data) {\n if (data.length < 3) return [];\n var fx = d3_functor(x), fy = d3_functor(y), i, n = data.length, points = [], flippedPoints = [];\n for (i = 0; i < n; i++) {\n points.push([ +fx.call(this, data[i], i), +fy.call(this, data[i], i), i ]);\n }\n points.sort(d3_geom_hullOrder);\n for (i = 0; i < n; i++) flippedPoints.push([ points[i][0], -points[i][1] ]);\n var upper = d3_geom_hullUpper(points), lower = d3_geom_hullUpper(flippedPoints);\n var skipLeft = lower[0] === upper[0], skipRight = lower[lower.length - 1] === upper[upper.length - 1], polygon = [];\n for (i = upper.length - 1; i >= 0; --i) polygon.push(data[points[upper[i]][2]]);\n for (i = +skipLeft; i < lower.length - skipRight; ++i) polygon.push(data[points[lower[i]][2]]);\n return polygon;\n }\n hull.x = function(_) {\n return arguments.length ? (x = _, hull) : x;\n };\n hull.y = function(_) {\n return arguments.length ? (y = _, hull) : y;\n };\n return hull;\n };\n function d3_geom_hullUpper(points) {\n var n = points.length, hull = [ 0, 1 ], hs = 2;\n for (var i = 2; i < n; i++) {\n while (hs > 1 && d3_cross2d(points[hull[hs - 2]], points[hull[hs - 1]], points[i]) <= 0) --hs;\n hull[hs++] = i;\n }\n return hull.slice(0, hs);\n }\n function d3_geom_hullOrder(a, b) {\n return a[0] - b[0] || a[1] - b[1];\n }\n d3.geom.polygon = function(coordinates) {\n d3_subclass(coordinates, d3_geom_polygonPrototype);\n return coordinates;\n };\n var d3_geom_polygonPrototype = d3.geom.polygon.prototype = [];\n d3_geom_polygonPrototype.area = function() {\n var i = -1, n = this.length, a, b = this[n - 1], area = 0;\n while (++i < n) {\n a = b;\n b = this[i];\n area += a[1] * b[0] - a[0] * b[1];\n }\n return area * .5;\n };\n d3_geom_polygonPrototype.centroid = function(k) {\n var i = -1, n = this.length, x = 0, y = 0, a, b = this[n - 1], c;\n if (!arguments.length) k = -1 / (6 * this.area());\n while (++i < n) {\n a = b;\n b = this[i];\n c = a[0] * b[1] - b[0] * a[1];\n x += (a[0] + b[0]) * c;\n y += (a[1] + b[1]) * c;\n }\n return [ x * k, y * k ];\n };\n d3_geom_polygonPrototype.clip = function(subject) {\n var input, closed = d3_geom_polygonClosed(subject), i = -1, n = this.length - d3_geom_polygonClosed(this), j, m, a = this[n - 1], b, c, d;\n while (++i < n) {\n input = subject.slice();\n subject.length = 0;\n b = this[i];\n c = input[(m = input.length - closed) - 1];\n j = -1;\n while (++j < m) {\n d = input[j];\n if (d3_geom_polygonInside(d, a, b)) {\n if (!d3_geom_polygonInside(c, a, b)) {\n subject.push(d3_geom_polygonIntersect(c, d, a, b));\n }\n subject.push(d);\n } else if (d3_geom_polygonInside(c, a, b)) {\n subject.push(d3_geom_polygonIntersect(c, d, a, b));\n }\n c = d;\n }\n if (closed) subject.push(subject[0]);\n a = b;\n }\n return subject;\n };\n function d3_geom_polygonInside(p, a, b) {\n return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]);\n }\n function d3_geom_polygonIntersect(c, d, a, b) {\n var x1 = c[0], x3 = a[0], x21 = d[0] - x1, x43 = b[0] - x3, y1 = c[1], y3 = a[1], y21 = d[1] - y1, y43 = b[1] - y3, ua = (x43 * (y1 - y3) - y43 * (x1 - x3)) / (y43 * x21 - x43 * y21);\n return [ x1 + ua * x21, y1 + ua * y21 ];\n }\n function d3_geom_polygonClosed(coordinates) {\n var a = coordinates[0], b = coordinates[coordinates.length - 1];\n return !(a[0] - b[0] || a[1] - b[1]);\n }\n var d3_geom_voronoiEdges, d3_geom_voronoiCells, d3_geom_voronoiBeaches, d3_geom_voronoiBeachPool = [], d3_geom_voronoiFirstCircle, d3_geom_voronoiCircles, d3_geom_voronoiCirclePool = [];\n function d3_geom_voronoiBeach() {\n d3_geom_voronoiRedBlackNode(this);\n this.edge = this.site = this.circle = null;\n }\n function d3_geom_voronoiCreateBeach(site) {\n var beach = d3_geom_voronoiBeachPool.pop() || new d3_geom_voronoiBeach();\n beach.site = site;\n return beach;\n }\n function d3_geom_voronoiDetachBeach(beach) {\n d3_geom_voronoiDetachCircle(beach);\n d3_geom_voronoiBeaches.remove(beach);\n d3_geom_voronoiBeachPool.push(beach);\n d3_geom_voronoiRedBlackNode(beach);\n }\n function d3_geom_voronoiRemoveBeach(beach) {\n var circle = beach.circle, x = circle.x, y = circle.cy, vertex = {\n x: x,\n y: y\n }, previous = beach.P, next = beach.N, disappearing = [ beach ];\n d3_geom_voronoiDetachBeach(beach);\n var lArc = previous;\n while (lArc.circle && abs(x - lArc.circle.x) < ε && abs(y - lArc.circle.cy) < ε) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n d3_geom_voronoiDetachBeach(lArc);\n lArc = previous;\n }\n disappearing.unshift(lArc);\n d3_geom_voronoiDetachCircle(lArc);\n var rArc = next;\n while (rArc.circle && abs(x - rArc.circle.x) < ε && abs(y - rArc.circle.cy) < ε) {\n next = rArc.N;\n disappearing.push(rArc);\n d3_geom_voronoiDetachBeach(rArc);\n rArc = next;\n }\n disappearing.push(rArc);\n d3_geom_voronoiDetachCircle(rArc);\n var nArcs = disappearing.length, iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n d3_geom_voronoiSetEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, rArc.site, null, vertex);\n d3_geom_voronoiAttachCircle(lArc);\n d3_geom_voronoiAttachCircle(rArc);\n }\n function d3_geom_voronoiAddBeach(site) {\n var x = site.x, directrix = site.y, lArc, rArc, dxl, dxr, node = d3_geom_voronoiBeaches._;\n while (node) {\n dxl = d3_geom_voronoiLeftBreakPoint(node, directrix) - x;\n if (dxl > ε) node = node.L; else {\n dxr = x - d3_geom_voronoiRightBreakPoint(node, directrix);\n if (dxr > ε) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -ε) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -ε) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n var newArc = d3_geom_voronoiCreateBeach(site);\n d3_geom_voronoiBeaches.insert(lArc, newArc);\n if (!lArc && !rArc) return;\n if (lArc === rArc) {\n d3_geom_voronoiDetachCircle(lArc);\n rArc = d3_geom_voronoiCreateBeach(lArc.site);\n d3_geom_voronoiBeaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site);\n d3_geom_voronoiAttachCircle(lArc);\n d3_geom_voronoiAttachCircle(rArc);\n return;\n }\n if (!rArc) {\n newArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site);\n return;\n }\n d3_geom_voronoiDetachCircle(lArc);\n d3_geom_voronoiDetachCircle(rArc);\n var lSite = lArc.site, ax = lSite.x, ay = lSite.y, bx = site.x - ax, by = site.y - ay, rSite = rArc.site, cx = rSite.x - ax, cy = rSite.y - ay, d = 2 * (bx * cy - by * cx), hb = bx * bx + by * by, hc = cx * cx + cy * cy, vertex = {\n x: (cy * hb - by * hc) / d + ax,\n y: (bx * hc - cx * hb) / d + ay\n };\n d3_geom_voronoiSetEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = d3_geom_voronoiCreateEdge(lSite, site, null, vertex);\n rArc.edge = d3_geom_voronoiCreateEdge(site, rSite, null, vertex);\n d3_geom_voronoiAttachCircle(lArc);\n d3_geom_voronoiAttachCircle(rArc);\n }\n function d3_geom_voronoiLeftBreakPoint(arc, directrix) {\n var site = arc.site, rfocx = site.x, rfocy = site.y, pby2 = rfocy - directrix;\n if (!pby2) return rfocx;\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n site = lArc.site;\n var lfocx = site.x, lfocy = site.y, plby2 = lfocy - directrix;\n if (!plby2) return lfocx;\n var hl = lfocx - rfocx, aby2 = 1 / pby2 - 1 / plby2, b = hl / plby2;\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n return (rfocx + lfocx) / 2;\n }\n function d3_geom_voronoiRightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return d3_geom_voronoiLeftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site.y === directrix ? site.x : Infinity;\n }\n function d3_geom_voronoiCell(site) {\n this.site = site;\n this.edges = [];\n }\n d3_geom_voronoiCell.prototype.prepare = function() {\n var halfEdges = this.edges, iHalfEdge = halfEdges.length, edge;\n while (iHalfEdge--) {\n edge = halfEdges[iHalfEdge].edge;\n if (!edge.b || !edge.a) halfEdges.splice(iHalfEdge, 1);\n }\n halfEdges.sort(d3_geom_voronoiHalfEdgeOrder);\n return halfEdges.length;\n };\n function d3_geom_voronoiCloseCells(extent) {\n var x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], x2, y2, x3, y3, cells = d3_geom_voronoiCells, iCell = cells.length, cell, iHalfEdge, halfEdges, nHalfEdges, start, end;\n while (iCell--) {\n cell = cells[iCell];\n if (!cell || !cell.prepare()) continue;\n halfEdges = cell.edges;\n nHalfEdges = halfEdges.length;\n iHalfEdge = 0;\n while (iHalfEdge < nHalfEdges) {\n end = halfEdges[iHalfEdge].end(), x3 = end.x, y3 = end.y;\n start = halfEdges[++iHalfEdge % nHalfEdges].start(), x2 = start.x, y2 = start.y;\n if (abs(x3 - x2) > ε || abs(y3 - y2) > ε) {\n halfEdges.splice(iHalfEdge, 0, new d3_geom_voronoiHalfEdge(d3_geom_voronoiCreateBorderEdge(cell.site, end, abs(x3 - x0) < ε && y1 - y3 > ε ? {\n x: x0,\n y: abs(x2 - x0) < ε ? y2 : y1\n } : abs(y3 - y1) < ε && x1 - x3 > ε ? {\n x: abs(y2 - y1) < ε ? x2 : x1,\n y: y1\n } : abs(x3 - x1) < ε && y3 - y0 > ε ? {\n x: x1,\n y: abs(x2 - x1) < ε ? y2 : y0\n } : abs(y3 - y0) < ε && x3 - x0 > ε ? {\n x: abs(y2 - y0) < ε ? x2 : x0,\n y: y0\n } : null), cell.site, null));\n ++nHalfEdges;\n }\n }\n }\n }\n function d3_geom_voronoiHalfEdgeOrder(a, b) {\n return b.angle - a.angle;\n }\n function d3_geom_voronoiCircle() {\n d3_geom_voronoiRedBlackNode(this);\n this.x = this.y = this.arc = this.site = this.cy = null;\n }\n function d3_geom_voronoiAttachCircle(arc) {\n var lArc = arc.P, rArc = arc.N;\n if (!lArc || !rArc) return;\n var lSite = lArc.site, cSite = arc.site, rSite = rArc.site;\n if (lSite === rSite) return;\n var bx = cSite.x, by = cSite.y, ax = lSite.x - bx, ay = lSite.y - by, cx = rSite.x - bx, cy = rSite.y - by;\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -ε2) return;\n var ha = ax * ax + ay * ay, hc = cx * cx + cy * cy, x = (cy * ha - ay * hc) / d, y = (ax * hc - cx * ha) / d, cy = y + by;\n var circle = d3_geom_voronoiCirclePool.pop() || new d3_geom_voronoiCircle();\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = cy + Math.sqrt(x * x + y * y);\n circle.cy = cy;\n arc.circle = circle;\n var before = null, node = d3_geom_voronoiCircles._;\n while (node) {\n if (circle.y < node.y || circle.y === node.y && circle.x <= node.x) {\n if (node.L) node = node.L; else {\n before = node.P;\n break;\n }\n } else {\n if (node.R) node = node.R; else {\n before = node;\n break;\n }\n }\n }\n d3_geom_voronoiCircles.insert(before, circle);\n if (!before) d3_geom_voronoiFirstCircle = circle;\n }\n function d3_geom_voronoiDetachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) d3_geom_voronoiFirstCircle = circle.N;\n d3_geom_voronoiCircles.remove(circle);\n d3_geom_voronoiCirclePool.push(circle);\n d3_geom_voronoiRedBlackNode(circle);\n arc.circle = null;\n }\n }\n function d3_geom_clipLine(x0, y0, x1, y1) {\n return function(line) {\n var a = line.a, b = line.b, ax = a.x, ay = a.y, bx = b.x, by = b.y, t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r;\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n if (t0 > 0) line.a = {\n x: ax + t0 * dx,\n y: ay + t0 * dy\n };\n if (t1 < 1) line.b = {\n x: ax + t1 * dx,\n y: ay + t1 * dy\n };\n return line;\n };\n }\n function d3_geom_voronoiClipEdges(extent) {\n var edges = d3_geom_voronoiEdges, clip = d3_geom_clipLine(extent[0][0], extent[0][1], extent[1][0], extent[1][1]), i = edges.length, e;\n while (i--) {\n e = edges[i];\n if (!d3_geom_voronoiConnectEdge(e, extent) || !clip(e) || abs(e.a.x - e.b.x) < ε && abs(e.a.y - e.b.y) < ε) {\n e.a = e.b = null;\n edges.splice(i, 1);\n }\n }\n }\n function d3_geom_voronoiConnectEdge(edge, extent) {\n var vb = edge.b;\n if (vb) return true;\n var va = edge.a, x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], lSite = edge.l, rSite = edge.r, lx = lSite.x, ly = lSite.y, rx = rSite.x, ry = rSite.y, fx = (lx + rx) / 2, fy = (ly + ry) / 2, fm, fb;\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!va) va = {\n x: fx,\n y: y0\n }; else if (va.y >= y1) return;\n vb = {\n x: fx,\n y: y1\n };\n } else {\n if (!va) va = {\n x: fx,\n y: y1\n }; else if (va.y < y0) return;\n vb = {\n x: fx,\n y: y0\n };\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!va) va = {\n x: (y0 - fb) / fm,\n y: y0\n }; else if (va.y >= y1) return;\n vb = {\n x: (y1 - fb) / fm,\n y: y1\n };\n } else {\n if (!va) va = {\n x: (y1 - fb) / fm,\n y: y1\n }; else if (va.y < y0) return;\n vb = {\n x: (y0 - fb) / fm,\n y: y0\n };\n }\n } else {\n if (ly < ry) {\n if (!va) va = {\n x: x0,\n y: fm * x0 + fb\n }; else if (va.x >= x1) return;\n vb = {\n x: x1,\n y: fm * x1 + fb\n };\n } else {\n if (!va) va = {\n x: x1,\n y: fm * x1 + fb\n }; else if (va.x < x0) return;\n vb = {\n x: x0,\n y: fm * x0 + fb\n };\n }\n }\n }\n edge.a = va;\n edge.b = vb;\n return true;\n }\n function d3_geom_voronoiEdge(lSite, rSite) {\n this.l = lSite;\n this.r = rSite;\n this.a = this.b = null;\n }\n function d3_geom_voronoiCreateEdge(lSite, rSite, va, vb) {\n var edge = new d3_geom_voronoiEdge(lSite, rSite);\n d3_geom_voronoiEdges.push(edge);\n if (va) d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, va);\n if (vb) d3_geom_voronoiSetEdgeEnd(edge, rSite, lSite, vb);\n d3_geom_voronoiCells[lSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, lSite, rSite));\n d3_geom_voronoiCells[rSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, rSite, lSite));\n return edge;\n }\n function d3_geom_voronoiCreateBorderEdge(lSite, va, vb) {\n var edge = new d3_geom_voronoiEdge(lSite, null);\n edge.a = va;\n edge.b = vb;\n d3_geom_voronoiEdges.push(edge);\n return edge;\n }\n function d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, vertex) {\n if (!edge.a && !edge.b) {\n edge.a = vertex;\n edge.l = lSite;\n edge.r = rSite;\n } else if (edge.l === rSite) {\n edge.b = vertex;\n } else {\n edge.a = vertex;\n }\n }\n function d3_geom_voronoiHalfEdge(edge, lSite, rSite) {\n var va = edge.a, vb = edge.b;\n this.edge = edge;\n this.site = lSite;\n this.angle = rSite ? Math.atan2(rSite.y - lSite.y, rSite.x - lSite.x) : edge.l === lSite ? Math.atan2(vb.x - va.x, va.y - vb.y) : Math.atan2(va.x - vb.x, vb.y - va.y);\n }\n d3_geom_voronoiHalfEdge.prototype = {\n start: function() {\n return this.edge.l === this.site ? this.edge.a : this.edge.b;\n },\n end: function() {\n return this.edge.l === this.site ? this.edge.b : this.edge.a;\n }\n };\n function d3_geom_voronoiRedBlackTree() {\n this._ = null;\n }\n function d3_geom_voronoiRedBlackNode(node) {\n node.U = node.C = node.L = node.R = node.P = node.N = null;\n }\n d3_geom_voronoiRedBlackTree.prototype = {\n insert: function(after, node) {\n var parent, grandpa, uncle;\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = d3_geom_voronoiRedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n d3_geom_voronoiRedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n d3_geom_voronoiRedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n d3_geom_voronoiRedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n d3_geom_voronoiRedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n var parent = node.U, sibling, left = node.L, right = node.R, next, red;\n if (!left) next = right; else if (!right) next = left; else next = d3_geom_voronoiRedBlackFirst(right);\n if (parent) {\n if (parent.L === node) parent.L = next; else parent.R = next;\n } else {\n this._ = next;\n }\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) {\n node.C = false;\n return;\n }\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n d3_geom_voronoiRedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n d3_geom_voronoiRedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n d3_geom_voronoiRedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n d3_geom_voronoiRedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n d3_geom_voronoiRedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n d3_geom_voronoiRedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n if (node) node.C = false;\n }\n };\n function d3_geom_voronoiRedBlackRotateLeft(tree, node) {\n var p = node, q = node.R, parent = p.U;\n if (parent) {\n if (parent.L === p) parent.L = q; else parent.R = q;\n } else {\n tree._ = q;\n }\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n }\n function d3_geom_voronoiRedBlackRotateRight(tree, node) {\n var p = node, q = node.L, parent = p.U;\n if (parent) {\n if (parent.L === p) parent.L = q; else parent.R = q;\n } else {\n tree._ = q;\n }\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n }\n function d3_geom_voronoiRedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n }\n function d3_geom_voronoi(sites, bbox) {\n var site = sites.sort(d3_geom_voronoiVertexOrder).pop(), x0, y0, circle;\n d3_geom_voronoiEdges = [];\n d3_geom_voronoiCells = new Array(sites.length);\n d3_geom_voronoiBeaches = new d3_geom_voronoiRedBlackTree();\n d3_geom_voronoiCircles = new d3_geom_voronoiRedBlackTree();\n while (true) {\n circle = d3_geom_voronoiFirstCircle;\n if (site && (!circle || site.y < circle.y || site.y === circle.y && site.x < circle.x)) {\n if (site.x !== x0 || site.y !== y0) {\n d3_geom_voronoiCells[site.i] = new d3_geom_voronoiCell(site);\n d3_geom_voronoiAddBeach(site);\n x0 = site.x, y0 = site.y;\n }\n site = sites.pop();\n } else if (circle) {\n d3_geom_voronoiRemoveBeach(circle.arc);\n } else {\n break;\n }\n }\n if (bbox) d3_geom_voronoiClipEdges(bbox), d3_geom_voronoiCloseCells(bbox);\n var diagram = {\n cells: d3_geom_voronoiCells,\n edges: d3_geom_voronoiEdges\n };\n d3_geom_voronoiBeaches = d3_geom_voronoiCircles = d3_geom_voronoiEdges = d3_geom_voronoiCells = null;\n return diagram;\n }\n function d3_geom_voronoiVertexOrder(a, b) {\n return b.y - a.y || b.x - a.x;\n }\n d3.geom.voronoi = function(points) {\n var x = d3_geom_pointX, y = d3_geom_pointY, fx = x, fy = y, clipExtent = d3_geom_voronoiClipExtent;\n if (points) return voronoi(points);\n function voronoi(data) {\n var polygons = new Array(data.length), x0 = clipExtent[0][0], y0 = clipExtent[0][1], x1 = clipExtent[1][0], y1 = clipExtent[1][1];\n d3_geom_voronoi(sites(data), clipExtent).cells.forEach(function(cell, i) {\n var edges = cell.edges, site = cell.site, polygon = polygons[i] = edges.length ? edges.map(function(e) {\n var s = e.start();\n return [ s.x, s.y ];\n }) : site.x >= x0 && site.x <= x1 && site.y >= y0 && site.y <= y1 ? [ [ x0, y1 ], [ x1, y1 ], [ x1, y0 ], [ x0, y0 ] ] : [];\n polygon.point = data[i];\n });\n return polygons;\n }\n function sites(data) {\n return data.map(function(d, i) {\n return {\n x: Math.round(fx(d, i) / ε) * ε,\n y: Math.round(fy(d, i) / ε) * ε,\n i: i\n };\n });\n }\n voronoi.links = function(data) {\n return d3_geom_voronoi(sites(data)).edges.filter(function(edge) {\n return edge.l && edge.r;\n }).map(function(edge) {\n return {\n source: data[edge.l.i],\n target: data[edge.r.i]\n };\n });\n };\n voronoi.triangles = function(data) {\n var triangles = [];\n d3_geom_voronoi(sites(data)).cells.forEach(function(cell, i) {\n var site = cell.site, edges = cell.edges.sort(d3_geom_voronoiHalfEdgeOrder), j = -1, m = edges.length, e0, s0, e1 = edges[m - 1].edge, s1 = e1.l === site ? e1.r : e1.l;\n while (++j < m) {\n e0 = e1;\n s0 = s1;\n e1 = edges[j].edge;\n s1 = e1.l === site ? e1.r : e1.l;\n if (i < s0.i && i < s1.i && d3_geom_voronoiTriangleArea(site, s0, s1) < 0) {\n triangles.push([ data[i], data[s0.i], data[s1.i] ]);\n }\n }\n });\n return triangles;\n };\n voronoi.x = function(_) {\n return arguments.length ? (fx = d3_functor(x = _), voronoi) : x;\n };\n voronoi.y = function(_) {\n return arguments.length ? (fy = d3_functor(y = _), voronoi) : y;\n };\n voronoi.clipExtent = function(_) {\n if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent;\n clipExtent = _ == null ? d3_geom_voronoiClipExtent : _;\n return voronoi;\n };\n voronoi.size = function(_) {\n if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent && clipExtent[1];\n return voronoi.clipExtent(_ && [ [ 0, 0 ], _ ]);\n };\n return voronoi;\n };\n var d3_geom_voronoiClipExtent = [ [ -1e6, -1e6 ], [ 1e6, 1e6 ] ];\n function d3_geom_voronoiTriangleArea(a, b, c) {\n return (a.x - c.x) * (b.y - a.y) - (a.x - b.x) * (c.y - a.y);\n }\n d3.geom.delaunay = function(vertices) {\n return d3.geom.voronoi().triangles(vertices);\n };\n d3.geom.quadtree = function(points, x1, y1, x2, y2) {\n var x = d3_geom_pointX, y = d3_geom_pointY, compat;\n if (compat = arguments.length) {\n x = d3_geom_quadtreeCompatX;\n y = d3_geom_quadtreeCompatY;\n if (compat === 3) {\n y2 = y1;\n x2 = x1;\n y1 = x1 = 0;\n }\n return quadtree(points);\n }\n function quadtree(data) {\n var d, fx = d3_functor(x), fy = d3_functor(y), xs, ys, i, n, x1_, y1_, x2_, y2_;\n if (x1 != null) {\n x1_ = x1, y1_ = y1, x2_ = x2, y2_ = y2;\n } else {\n x2_ = y2_ = -(x1_ = y1_ = Infinity);\n xs = [], ys = [];\n n = data.length;\n if (compat) for (i = 0; i < n; ++i) {\n d = data[i];\n if (d.x < x1_) x1_ = d.x;\n if (d.y < y1_) y1_ = d.y;\n if (d.x > x2_) x2_ = d.x;\n if (d.y > y2_) y2_ = d.y;\n xs.push(d.x);\n ys.push(d.y);\n } else for (i = 0; i < n; ++i) {\n var x_ = +fx(d = data[i], i), y_ = +fy(d, i);\n if (x_ < x1_) x1_ = x_;\n if (y_ < y1_) y1_ = y_;\n if (x_ > x2_) x2_ = x_;\n if (y_ > y2_) y2_ = y_;\n xs.push(x_);\n ys.push(y_);\n }\n }\n var dx = x2_ - x1_, dy = y2_ - y1_;\n if (dx > dy) y2_ = y1_ + dx; else x2_ = x1_ + dy;\n function insert(n, d, x, y, x1, y1, x2, y2) {\n if (isNaN(x) || isNaN(y)) return;\n if (n.leaf) {\n var nx = n.x, ny = n.y;\n if (nx != null) {\n if (abs(nx - x) + abs(ny - y) < .01) {\n insertChild(n, d, x, y, x1, y1, x2, y2);\n } else {\n var nPoint = n.point;\n n.x = n.y = n.point = null;\n insertChild(n, nPoint, nx, ny, x1, y1, x2, y2);\n insertChild(n, d, x, y, x1, y1, x2, y2);\n }\n } else {\n n.x = x, n.y = y, n.point = d;\n }\n } else {\n insertChild(n, d, x, y, x1, y1, x2, y2);\n }\n }\n function insertChild(n, d, x, y, x1, y1, x2, y2) {\n var xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym, i = below << 1 | right;\n n.leaf = false;\n n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode());\n if (right) x1 = xm; else x2 = xm;\n if (below) y1 = ym; else y2 = ym;\n insert(n, d, x, y, x1, y1, x2, y2);\n }\n var root = d3_geom_quadtreeNode();\n root.add = function(d) {\n insert(root, d, +fx(d, ++i), +fy(d, i), x1_, y1_, x2_, y2_);\n };\n root.visit = function(f) {\n d3_geom_quadtreeVisit(f, root, x1_, y1_, x2_, y2_);\n };\n root.find = function(point) {\n return d3_geom_quadtreeFind(root, point[0], point[1], x1_, y1_, x2_, y2_);\n };\n i = -1;\n if (x1 == null) {\n while (++i < n) {\n insert(root, data[i], xs[i], ys[i], x1_, y1_, x2_, y2_);\n }\n --i;\n } else data.forEach(root.add);\n xs = ys = data = d = null;\n return root;\n }\n quadtree.x = function(_) {\n return arguments.length ? (x = _, quadtree) : x;\n };\n quadtree.y = function(_) {\n return arguments.length ? (y = _, quadtree) : y;\n };\n quadtree.extent = function(_) {\n if (!arguments.length) return x1 == null ? null : [ [ x1, y1 ], [ x2, y2 ] ];\n if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = +_[0][0], y1 = +_[0][1], x2 = +_[1][0], \n y2 = +_[1][1];\n return quadtree;\n };\n quadtree.size = function(_) {\n if (!arguments.length) return x1 == null ? null : [ x2 - x1, y2 - y1 ];\n if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = y1 = 0, x2 = +_[0], y2 = +_[1];\n return quadtree;\n };\n return quadtree;\n };\n function d3_geom_quadtreeCompatX(d) {\n return d.x;\n }\n function d3_geom_quadtreeCompatY(d) {\n return d.y;\n }\n function d3_geom_quadtreeNode() {\n return {\n leaf: true,\n nodes: [],\n point: null,\n x: null,\n y: null\n };\n }\n function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) {\n if (!f(node, x1, y1, x2, y2)) {\n var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, children = node.nodes;\n if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy);\n if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy);\n if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2);\n if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2);\n }\n }\n function d3_geom_quadtreeFind(root, x, y, x0, y0, x3, y3) {\n var minDistance2 = Infinity, closestPoint;\n (function find(node, x1, y1, x2, y2) {\n if (x1 > x3 || y1 > y3 || x2 < x0 || y2 < y0) return;\n if (point = node.point) {\n var point, dx = x - node.x, dy = y - node.y, distance2 = dx * dx + dy * dy;\n if (distance2 < minDistance2) {\n var distance = Math.sqrt(minDistance2 = distance2);\n x0 = x - distance, y0 = y - distance;\n x3 = x + distance, y3 = y + distance;\n closestPoint = point;\n }\n }\n var children = node.nodes, xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym;\n for (var i = below << 1 | right, j = i + 4; i < j; ++i) {\n if (node = children[i & 3]) switch (i & 3) {\n case 0:\n find(node, x1, y1, xm, ym);\n break;\n\n case 1:\n find(node, xm, y1, x2, ym);\n break;\n\n case 2:\n find(node, x1, ym, xm, y2);\n break;\n\n case 3:\n find(node, xm, ym, x2, y2);\n break;\n }\n }\n })(root, x0, y0, x3, y3);\n return closestPoint;\n }\n d3.interpolateRgb = d3_interpolateRgb;\n function d3_interpolateRgb(a, b) {\n a = d3.rgb(a);\n b = d3.rgb(b);\n var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab;\n return function(t) {\n return \"#\" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t));\n };\n }\n d3.interpolateObject = d3_interpolateObject;\n function d3_interpolateObject(a, b) {\n var i = {}, c = {}, k;\n for (k in a) {\n if (k in b) {\n i[k] = d3_interpolate(a[k], b[k]);\n } else {\n c[k] = a[k];\n }\n }\n for (k in b) {\n if (!(k in a)) {\n c[k] = b[k];\n }\n }\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n }\n d3.interpolateNumber = d3_interpolateNumber;\n function d3_interpolateNumber(a, b) {\n a = +a, b = +b;\n return function(t) {\n return a * (1 - t) + b * t;\n };\n }\n d3.interpolateString = d3_interpolateString;\n function d3_interpolateString(a, b) {\n var bi = d3_interpolate_numberA.lastIndex = d3_interpolate_numberB.lastIndex = 0, am, bm, bs, i = -1, s = [], q = [];\n a = a + \"\", b = b + \"\";\n while ((am = d3_interpolate_numberA.exec(a)) && (bm = d3_interpolate_numberB.exec(b))) {\n if ((bs = bm.index) > bi) {\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) {\n if (s[i]) s[i] += bm; else s[++i] = bm;\n } else {\n s[++i] = null;\n q.push({\n i: i,\n x: d3_interpolateNumber(am, bm)\n });\n }\n bi = d3_interpolate_numberB.lastIndex;\n }\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; else s[++i] = bs;\n }\n return s.length < 2 ? q[0] ? (b = q[0].x, function(t) {\n return b(t) + \"\";\n }) : function() {\n return b;\n } : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n }\n var d3_interpolate_numberA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g, d3_interpolate_numberB = new RegExp(d3_interpolate_numberA.source, \"g\");\n d3.interpolate = d3_interpolate;\n function d3_interpolate(a, b) {\n var i = d3.interpolators.length, f;\n while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ;\n return f;\n }\n d3.interpolators = [ function(a, b) {\n var t = typeof b;\n return (t === \"string\" ? d3_rgb_names.has(b.toLowerCase()) || /^(#|rgb\\(|hsl\\()/i.test(b) ? d3_interpolateRgb : d3_interpolateString : b instanceof d3_color ? d3_interpolateRgb : Array.isArray(b) ? d3_interpolateArray : t === \"object\" && isNaN(b) ? d3_interpolateObject : d3_interpolateNumber)(a, b);\n } ];\n d3.interpolateArray = d3_interpolateArray;\n function d3_interpolateArray(a, b) {\n var x = [], c = [], na = a.length, nb = b.length, n0 = Math.min(a.length, b.length), i;\n for (i = 0; i < n0; ++i) x.push(d3_interpolate(a[i], b[i]));\n for (;i < na; ++i) c[i] = a[i];\n for (;i < nb; ++i) c[i] = b[i];\n return function(t) {\n for (i = 0; i < n0; ++i) c[i] = x[i](t);\n return c;\n };\n }\n var d3_ease_default = function() {\n return d3_identity;\n };\n var d3_ease = d3.map({\n linear: d3_ease_default,\n poly: d3_ease_poly,\n quad: function() {\n return d3_ease_quad;\n },\n cubic: function() {\n return d3_ease_cubic;\n },\n sin: function() {\n return d3_ease_sin;\n },\n exp: function() {\n return d3_ease_exp;\n },\n circle: function() {\n return d3_ease_circle;\n },\n elastic: d3_ease_elastic,\n back: d3_ease_back,\n bounce: function() {\n return d3_ease_bounce;\n }\n });\n var d3_ease_mode = d3.map({\n \"in\": d3_identity,\n out: d3_ease_reverse,\n \"in-out\": d3_ease_reflect,\n \"out-in\": function(f) {\n return d3_ease_reflect(d3_ease_reverse(f));\n }\n });\n d3.ease = function(name) {\n var i = name.indexOf(\"-\"), t = i >= 0 ? name.slice(0, i) : name, m = i >= 0 ? name.slice(i + 1) : \"in\";\n t = d3_ease.get(t) || d3_ease_default;\n m = d3_ease_mode.get(m) || d3_identity;\n return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1))));\n };\n function d3_ease_clamp(f) {\n return function(t) {\n return t <= 0 ? 0 : t >= 1 ? 1 : f(t);\n };\n }\n function d3_ease_reverse(f) {\n return function(t) {\n return 1 - f(1 - t);\n };\n }\n function d3_ease_reflect(f) {\n return function(t) {\n return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t));\n };\n }\n function d3_ease_quad(t) {\n return t * t;\n }\n function d3_ease_cubic(t) {\n return t * t * t;\n }\n function d3_ease_cubicInOut(t) {\n if (t <= 0) return 0;\n if (t >= 1) return 1;\n var t2 = t * t, t3 = t2 * t;\n return 4 * (t < .5 ? t3 : 3 * (t - t2) + t3 - .75);\n }\n function d3_ease_poly(e) {\n return function(t) {\n return Math.pow(t, e);\n };\n }\n function d3_ease_sin(t) {\n return 1 - Math.cos(t * halfπ);\n }\n function d3_ease_exp(t) {\n return Math.pow(2, 10 * (t - 1));\n }\n function d3_ease_circle(t) {\n return 1 - Math.sqrt(1 - t * t);\n }\n function d3_ease_elastic(a, p) {\n var s;\n if (arguments.length < 2) p = .45;\n if (arguments.length) s = p / τ * Math.asin(1 / a); else a = 1, s = p / 4;\n return function(t) {\n return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * τ / p);\n };\n }\n function d3_ease_back(s) {\n if (!s) s = 1.70158;\n return function(t) {\n return t * t * ((s + 1) * t - s);\n };\n }\n function d3_ease_bounce(t) {\n return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;\n }\n d3.interpolateHcl = d3_interpolateHcl;\n function d3_interpolateHcl(a, b) {\n a = d3.hcl(a);\n b = d3.hcl(b);\n var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al;\n if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac;\n if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;\n return function(t) {\n return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + \"\";\n };\n }\n d3.interpolateHsl = d3_interpolateHsl;\n function d3_interpolateHsl(a, b) {\n a = d3.hsl(a);\n b = d3.hsl(b);\n var ah = a.h, as = a.s, al = a.l, bh = b.h - ah, bs = b.s - as, bl = b.l - al;\n if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as;\n if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;\n return function(t) {\n return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + \"\";\n };\n }\n d3.interpolateLab = d3_interpolateLab;\n function d3_interpolateLab(a, b) {\n a = d3.lab(a);\n b = d3.lab(b);\n var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab;\n return function(t) {\n return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + \"\";\n };\n }\n d3.interpolateRound = d3_interpolateRound;\n function d3_interpolateRound(a, b) {\n b -= a;\n return function(t) {\n return Math.round(a + b * t);\n };\n }\n d3.transform = function(string) {\n var g = d3_document.createElementNS(d3.ns.prefix.svg, \"g\");\n return (d3.transform = function(string) {\n if (string != null) {\n g.setAttribute(\"transform\", string);\n var t = g.transform.baseVal.consolidate();\n }\n return new d3_transform(t ? t.matrix : d3_transformIdentity);\n })(string);\n };\n function d3_transform(m) {\n var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0;\n if (r0[0] * r1[1] < r1[0] * r0[1]) {\n r0[0] *= -1;\n r0[1] *= -1;\n kx *= -1;\n kz *= -1;\n }\n this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_degrees;\n this.translate = [ m.e, m.f ];\n this.scale = [ kx, ky ];\n this.skew = ky ? Math.atan2(kz, ky) * d3_degrees : 0;\n }\n d3_transform.prototype.toString = function() {\n return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\";\n };\n function d3_transformDot(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n }\n function d3_transformNormalize(a) {\n var k = Math.sqrt(d3_transformDot(a, a));\n if (k) {\n a[0] /= k;\n a[1] /= k;\n }\n return k;\n }\n function d3_transformCombine(a, b, k) {\n a[0] += k * b[0];\n a[1] += k * b[1];\n return a;\n }\n var d3_transformIdentity = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: 0,\n f: 0\n };\n d3.interpolateTransform = d3_interpolateTransform;\n function d3_interpolateTransformPop(s) {\n return s.length ? s.pop() + \",\" : \"\";\n }\n function d3_interpolateTranslate(ta, tb, s, q) {\n if (ta[0] !== tb[0] || ta[1] !== tb[1]) {\n var i = s.push(\"translate(\", null, \",\", null, \")\");\n q.push({\n i: i - 4,\n x: d3_interpolateNumber(ta[0], tb[0])\n }, {\n i: i - 2,\n x: d3_interpolateNumber(ta[1], tb[1])\n });\n } else if (tb[0] || tb[1]) {\n s.push(\"translate(\" + tb + \")\");\n }\n }\n function d3_interpolateRotate(ra, rb, s, q) {\n if (ra !== rb) {\n if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360;\n q.push({\n i: s.push(d3_interpolateTransformPop(s) + \"rotate(\", null, \")\") - 2,\n x: d3_interpolateNumber(ra, rb)\n });\n } else if (rb) {\n s.push(d3_interpolateTransformPop(s) + \"rotate(\" + rb + \")\");\n }\n }\n function d3_interpolateSkew(wa, wb, s, q) {\n if (wa !== wb) {\n q.push({\n i: s.push(d3_interpolateTransformPop(s) + \"skewX(\", null, \")\") - 2,\n x: d3_interpolateNumber(wa, wb)\n });\n } else if (wb) {\n s.push(d3_interpolateTransformPop(s) + \"skewX(\" + wb + \")\");\n }\n }\n function d3_interpolateScale(ka, kb, s, q) {\n if (ka[0] !== kb[0] || ka[1] !== kb[1]) {\n var i = s.push(d3_interpolateTransformPop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({\n i: i - 4,\n x: d3_interpolateNumber(ka[0], kb[0])\n }, {\n i: i - 2,\n x: d3_interpolateNumber(ka[1], kb[1])\n });\n } else if (kb[0] !== 1 || kb[1] !== 1) {\n s.push(d3_interpolateTransformPop(s) + \"scale(\" + kb + \")\");\n }\n }\n function d3_interpolateTransform(a, b) {\n var s = [], q = [];\n a = d3.transform(a), b = d3.transform(b);\n d3_interpolateTranslate(a.translate, b.translate, s, q);\n d3_interpolateRotate(a.rotate, b.rotate, s, q);\n d3_interpolateSkew(a.skew, b.skew, s, q);\n d3_interpolateScale(a.scale, b.scale, s, q);\n a = b = null;\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n }\n function d3_uninterpolateNumber(a, b) {\n b = (b -= a = +a) || 1 / b;\n return function(x) {\n return (x - a) / b;\n };\n }\n function d3_uninterpolateClamp(a, b) {\n b = (b -= a = +a) || 1 / b;\n return function(x) {\n return Math.max(0, Math.min(1, (x - a) / b));\n };\n }\n d3.layout = {};\n d3.layout.bundle = function() {\n return function(links) {\n var paths = [], i = -1, n = links.length;\n while (++i < n) paths.push(d3_layout_bundlePath(links[i]));\n return paths;\n };\n };\n function d3_layout_bundlePath(link) {\n var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [ start ];\n while (start !== lca) {\n start = start.parent;\n points.push(start);\n }\n var k = points.length;\n while (end !== lca) {\n points.splice(k, 0, end);\n end = end.parent;\n }\n return points;\n }\n function d3_layout_bundleAncestors(node) {\n var ancestors = [], parent = node.parent;\n while (parent != null) {\n ancestors.push(node);\n node = parent;\n parent = parent.parent;\n }\n ancestors.push(node);\n return ancestors;\n }\n function d3_layout_bundleLeastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null;\n while (aNode === bNode) {\n sharedNode = aNode;\n aNode = aNodes.pop();\n bNode = bNodes.pop();\n }\n return sharedNode;\n }\n d3.layout.chord = function() {\n var chord = {}, chords, groups, matrix, n, padding = 0, sortGroups, sortSubgroups, sortChords;\n function relayout() {\n var subgroups = {}, groupSums = [], groupIndex = d3.range(n), subgroupIndex = [], k, x, x0, i, j;\n chords = [];\n groups = [];\n k = 0, i = -1;\n while (++i < n) {\n x = 0, j = -1;\n while (++j < n) {\n x += matrix[i][j];\n }\n groupSums.push(x);\n subgroupIndex.push(d3.range(n));\n k += x;\n }\n if (sortGroups) {\n groupIndex.sort(function(a, b) {\n return sortGroups(groupSums[a], groupSums[b]);\n });\n }\n if (sortSubgroups) {\n subgroupIndex.forEach(function(d, i) {\n d.sort(function(a, b) {\n return sortSubgroups(matrix[i][a], matrix[i][b]);\n });\n });\n }\n k = (τ - padding * n) / k;\n x = 0, i = -1;\n while (++i < n) {\n x0 = x, j = -1;\n while (++j < n) {\n var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k;\n subgroups[di + \"-\" + dj] = {\n index: di,\n subindex: dj,\n startAngle: a0,\n endAngle: a1,\n value: v\n };\n }\n groups[di] = {\n index: di,\n startAngle: x0,\n endAngle: x,\n value: groupSums[di]\n };\n x += padding;\n }\n i = -1;\n while (++i < n) {\n j = i - 1;\n while (++j < n) {\n var source = subgroups[i + \"-\" + j], target = subgroups[j + \"-\" + i];\n if (source.value || target.value) {\n chords.push(source.value < target.value ? {\n source: target,\n target: source\n } : {\n source: source,\n target: target\n });\n }\n }\n }\n if (sortChords) resort();\n }\n function resort() {\n chords.sort(function(a, b) {\n return sortChords((a.source.value + a.target.value) / 2, (b.source.value + b.target.value) / 2);\n });\n }\n chord.matrix = function(x) {\n if (!arguments.length) return matrix;\n n = (matrix = x) && matrix.length;\n chords = groups = null;\n return chord;\n };\n chord.padding = function(x) {\n if (!arguments.length) return padding;\n padding = x;\n chords = groups = null;\n return chord;\n };\n chord.sortGroups = function(x) {\n if (!arguments.length) return sortGroups;\n sortGroups = x;\n chords = groups = null;\n return chord;\n };\n chord.sortSubgroups = function(x) {\n if (!arguments.length) return sortSubgroups;\n sortSubgroups = x;\n chords = null;\n return chord;\n };\n chord.sortChords = function(x) {\n if (!arguments.length) return sortChords;\n sortChords = x;\n if (chords) resort();\n return chord;\n };\n chord.chords = function() {\n if (!chords) relayout();\n return chords;\n };\n chord.groups = function() {\n if (!groups) relayout();\n return groups;\n };\n return chord;\n };\n d3.layout.force = function() {\n var force = {}, event = d3.dispatch(\"start\", \"tick\", \"end\"), timer, size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, chargeDistance2 = d3_layout_forceChargeDistance2, gravity = .1, theta2 = .64, nodes = [], links = [], distances, strengths, charges;\n function repulse(node) {\n return function(quad, x1, _, x2) {\n if (quad.point !== node) {\n var dx = quad.cx - node.x, dy = quad.cy - node.y, dw = x2 - x1, dn = dx * dx + dy * dy;\n if (dw * dw / theta2 < dn) {\n if (dn < chargeDistance2) {\n var k = quad.charge / dn;\n node.px -= dx * k;\n node.py -= dy * k;\n }\n return true;\n }\n if (quad.point && dn && dn < chargeDistance2) {\n var k = quad.pointCharge / dn;\n node.px -= dx * k;\n node.py -= dy * k;\n }\n }\n return !quad.charge;\n };\n }\n force.tick = function() {\n if ((alpha *= .99) < .005) {\n timer = null;\n event.end({\n type: \"end\",\n alpha: alpha = 0\n });\n return true;\n }\n var n = nodes.length, m = links.length, q, i, o, s, t, l, k, x, y;\n for (i = 0; i < m; ++i) {\n o = links[i];\n s = o.source;\n t = o.target;\n x = t.x - s.x;\n y = t.y - s.y;\n if (l = x * x + y * y) {\n l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;\n x *= l;\n y *= l;\n t.x -= x * (k = s.weight + t.weight ? s.weight / (s.weight + t.weight) : .5);\n t.y -= y * k;\n s.x += x * (k = 1 - k);\n s.y += y * k;\n }\n }\n if (k = alpha * gravity) {\n x = size[0] / 2;\n y = size[1] / 2;\n i = -1;\n if (k) while (++i < n) {\n o = nodes[i];\n o.x += (x - o.x) * k;\n o.y += (y - o.y) * k;\n }\n }\n if (charge) {\n d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges);\n i = -1;\n while (++i < n) {\n if (!(o = nodes[i]).fixed) {\n q.visit(repulse(o));\n }\n }\n }\n i = -1;\n while (++i < n) {\n o = nodes[i];\n if (o.fixed) {\n o.x = o.px;\n o.y = o.py;\n } else {\n o.x -= (o.px - (o.px = o.x)) * friction;\n o.y -= (o.py - (o.py = o.y)) * friction;\n }\n }\n event.tick({\n type: \"tick\",\n alpha: alpha\n });\n };\n force.nodes = function(x) {\n if (!arguments.length) return nodes;\n nodes = x;\n return force;\n };\n force.links = function(x) {\n if (!arguments.length) return links;\n links = x;\n return force;\n };\n force.size = function(x) {\n if (!arguments.length) return size;\n size = x;\n return force;\n };\n force.linkDistance = function(x) {\n if (!arguments.length) return linkDistance;\n linkDistance = typeof x === \"function\" ? x : +x;\n return force;\n };\n force.distance = force.linkDistance;\n force.linkStrength = function(x) {\n if (!arguments.length) return linkStrength;\n linkStrength = typeof x === \"function\" ? x : +x;\n return force;\n };\n force.friction = function(x) {\n if (!arguments.length) return friction;\n friction = +x;\n return force;\n };\n force.charge = function(x) {\n if (!arguments.length) return charge;\n charge = typeof x === \"function\" ? x : +x;\n return force;\n };\n force.chargeDistance = function(x) {\n if (!arguments.length) return Math.sqrt(chargeDistance2);\n chargeDistance2 = x * x;\n return force;\n };\n force.gravity = function(x) {\n if (!arguments.length) return gravity;\n gravity = +x;\n return force;\n };\n force.theta = function(x) {\n if (!arguments.length) return Math.sqrt(theta2);\n theta2 = x * x;\n return force;\n };\n force.alpha = function(x) {\n if (!arguments.length) return alpha;\n x = +x;\n if (alpha) {\n if (x > 0) {\n alpha = x;\n } else {\n timer.c = null, timer.t = NaN, timer = null;\n event.end({\n type: \"end\",\n alpha: alpha = 0\n });\n }\n } else if (x > 0) {\n event.start({\n type: \"start\",\n alpha: alpha = x\n });\n timer = d3_timer(force.tick);\n }\n return force;\n };\n force.start = function() {\n var i, n = nodes.length, m = links.length, w = size[0], h = size[1], neighbors, o;\n for (i = 0; i < n; ++i) {\n (o = nodes[i]).index = i;\n o.weight = 0;\n }\n for (i = 0; i < m; ++i) {\n o = links[i];\n if (typeof o.source == \"number\") o.source = nodes[o.source];\n if (typeof o.target == \"number\") o.target = nodes[o.target];\n ++o.source.weight;\n ++o.target.weight;\n }\n for (i = 0; i < n; ++i) {\n o = nodes[i];\n if (isNaN(o.x)) o.x = position(\"x\", w);\n if (isNaN(o.y)) o.y = position(\"y\", h);\n if (isNaN(o.px)) o.px = o.x;\n if (isNaN(o.py)) o.py = o.y;\n }\n distances = [];\n if (typeof linkDistance === \"function\") for (i = 0; i < m; ++i) distances[i] = +linkDistance.call(this, links[i], i); else for (i = 0; i < m; ++i) distances[i] = linkDistance;\n strengths = [];\n if (typeof linkStrength === \"function\") for (i = 0; i < m; ++i) strengths[i] = +linkStrength.call(this, links[i], i); else for (i = 0; i < m; ++i) strengths[i] = linkStrength;\n charges = [];\n if (typeof charge === \"function\") for (i = 0; i < n; ++i) charges[i] = +charge.call(this, nodes[i], i); else for (i = 0; i < n; ++i) charges[i] = charge;\n function position(dimension, size) {\n if (!neighbors) {\n neighbors = new Array(n);\n for (j = 0; j < n; ++j) {\n neighbors[j] = [];\n }\n for (j = 0; j < m; ++j) {\n var o = links[j];\n neighbors[o.source.index].push(o.target);\n neighbors[o.target.index].push(o.source);\n }\n }\n var candidates = neighbors[i], j = -1, l = candidates.length, x;\n while (++j < l) if (!isNaN(x = candidates[j][dimension])) return x;\n return Math.random() * size;\n }\n return force.resume();\n };\n force.resume = function() {\n return force.alpha(.1);\n };\n force.stop = function() {\n return force.alpha(0);\n };\n force.drag = function() {\n if (!drag) drag = d3.behavior.drag().origin(d3_identity).on(\"dragstart.force\", d3_layout_forceDragstart).on(\"drag.force\", dragmove).on(\"dragend.force\", d3_layout_forceDragend);\n if (!arguments.length) return drag;\n this.on(\"mouseover.force\", d3_layout_forceMouseover).on(\"mouseout.force\", d3_layout_forceMouseout).call(drag);\n };\n function dragmove(d) {\n d.px = d3.event.x, d.py = d3.event.y;\n force.resume();\n }\n return d3.rebind(force, event, \"on\");\n };\n function d3_layout_forceDragstart(d) {\n d.fixed |= 2;\n }\n function d3_layout_forceDragend(d) {\n d.fixed &= ~6;\n }\n function d3_layout_forceMouseover(d) {\n d.fixed |= 4;\n d.px = d.x, d.py = d.y;\n }\n function d3_layout_forceMouseout(d) {\n d.fixed &= ~4;\n }\n function d3_layout_forceAccumulate(quad, alpha, charges) {\n var cx = 0, cy = 0;\n quad.charge = 0;\n if (!quad.leaf) {\n var nodes = quad.nodes, n = nodes.length, i = -1, c;\n while (++i < n) {\n c = nodes[i];\n if (c == null) continue;\n d3_layout_forceAccumulate(c, alpha, charges);\n quad.charge += c.charge;\n cx += c.charge * c.cx;\n cy += c.charge * c.cy;\n }\n }\n if (quad.point) {\n if (!quad.leaf) {\n quad.point.x += Math.random() - .5;\n quad.point.y += Math.random() - .5;\n }\n var k = alpha * charges[quad.point.index];\n quad.charge += quad.pointCharge = k;\n cx += k * quad.point.x;\n cy += k * quad.point.y;\n }\n quad.cx = cx / quad.charge;\n quad.cy = cy / quad.charge;\n }\n var d3_layout_forceLinkDistance = 20, d3_layout_forceLinkStrength = 1, d3_layout_forceChargeDistance2 = Infinity;\n d3.layout.hierarchy = function() {\n var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue;\n function hierarchy(root) {\n var stack = [ root ], nodes = [], node;\n root.depth = 0;\n while ((node = stack.pop()) != null) {\n nodes.push(node);\n if ((childs = children.call(hierarchy, node, node.depth)) && (n = childs.length)) {\n var n, childs, child;\n while (--n >= 0) {\n stack.push(child = childs[n]);\n child.parent = node;\n child.depth = node.depth + 1;\n }\n if (value) node.value = 0;\n node.children = childs;\n } else {\n if (value) node.value = +value.call(hierarchy, node, node.depth) || 0;\n delete node.children;\n }\n }\n d3_layout_hierarchyVisitAfter(root, function(node) {\n var childs, parent;\n if (sort && (childs = node.children)) childs.sort(sort);\n if (value && (parent = node.parent)) parent.value += node.value;\n });\n return nodes;\n }\n hierarchy.sort = function(x) {\n if (!arguments.length) return sort;\n sort = x;\n return hierarchy;\n };\n hierarchy.children = function(x) {\n if (!arguments.length) return children;\n children = x;\n return hierarchy;\n };\n hierarchy.value = function(x) {\n if (!arguments.length) return value;\n value = x;\n return hierarchy;\n };\n hierarchy.revalue = function(root) {\n if (value) {\n d3_layout_hierarchyVisitBefore(root, function(node) {\n if (node.children) node.value = 0;\n });\n d3_layout_hierarchyVisitAfter(root, function(node) {\n var parent;\n if (!node.children) node.value = +value.call(hierarchy, node, node.depth) || 0;\n if (parent = node.parent) parent.value += node.value;\n });\n }\n return root;\n };\n return hierarchy;\n };\n function d3_layout_hierarchyRebind(object, hierarchy) {\n d3.rebind(object, hierarchy, \"sort\", \"children\", \"value\");\n object.nodes = object;\n object.links = d3_layout_hierarchyLinks;\n return object;\n }\n function d3_layout_hierarchyVisitBefore(node, callback) {\n var nodes = [ node ];\n while ((node = nodes.pop()) != null) {\n callback(node);\n if ((children = node.children) && (n = children.length)) {\n var n, children;\n while (--n >= 0) nodes.push(children[n]);\n }\n }\n }\n function d3_layout_hierarchyVisitAfter(node, callback) {\n var nodes = [ node ], nodes2 = [];\n while ((node = nodes.pop()) != null) {\n nodes2.push(node);\n if ((children = node.children) && (n = children.length)) {\n var i = -1, n, children;\n while (++i < n) nodes.push(children[i]);\n }\n }\n while ((node = nodes2.pop()) != null) {\n callback(node);\n }\n }\n function d3_layout_hierarchyChildren(d) {\n return d.children;\n }\n function d3_layout_hierarchyValue(d) {\n return d.value;\n }\n function d3_layout_hierarchySort(a, b) {\n return b.value - a.value;\n }\n function d3_layout_hierarchyLinks(nodes) {\n return d3.merge(nodes.map(function(parent) {\n return (parent.children || []).map(function(child) {\n return {\n source: parent,\n target: child\n };\n });\n }));\n }\n d3.layout.partition = function() {\n var hierarchy = d3.layout.hierarchy(), size = [ 1, 1 ];\n function position(node, x, dx, dy) {\n var children = node.children;\n node.x = x;\n node.y = node.depth * dy;\n node.dx = dx;\n node.dy = dy;\n if (children && (n = children.length)) {\n var i = -1, n, c, d;\n dx = node.value ? dx / node.value : 0;\n while (++i < n) {\n position(c = children[i], x, d = c.value * dx, dy);\n x += d;\n }\n }\n }\n function depth(node) {\n var children = node.children, d = 0;\n if (children && (n = children.length)) {\n var i = -1, n;\n while (++i < n) d = Math.max(d, depth(children[i]));\n }\n return 1 + d;\n }\n function partition(d, i) {\n var nodes = hierarchy.call(this, d, i);\n position(nodes[0], 0, size[0], size[1] / depth(nodes[0]));\n return nodes;\n }\n partition.size = function(x) {\n if (!arguments.length) return size;\n size = x;\n return partition;\n };\n return d3_layout_hierarchyRebind(partition, hierarchy);\n };\n d3.layout.pie = function() {\n var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = τ, padAngle = 0;\n function pie(data) {\n var n = data.length, values = data.map(function(d, i) {\n return +value.call(pie, d, i);\n }), a = +(typeof startAngle === \"function\" ? startAngle.apply(this, arguments) : startAngle), da = (typeof endAngle === \"function\" ? endAngle.apply(this, arguments) : endAngle) - a, p = Math.min(Math.abs(da) / n, +(typeof padAngle === \"function\" ? padAngle.apply(this, arguments) : padAngle)), pa = p * (da < 0 ? -1 : 1), sum = d3.sum(values), k = sum ? (da - n * pa) / sum : 0, index = d3.range(n), arcs = [], v;\n if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function(i, j) {\n return values[j] - values[i];\n } : function(i, j) {\n return sort(data[i], data[j]);\n });\n index.forEach(function(i) {\n arcs[i] = {\n data: data[i],\n value: v = values[i],\n startAngle: a,\n endAngle: a += v * k + pa,\n padAngle: p\n };\n });\n return arcs;\n }\n pie.value = function(_) {\n if (!arguments.length) return value;\n value = _;\n return pie;\n };\n pie.sort = function(_) {\n if (!arguments.length) return sort;\n sort = _;\n return pie;\n };\n pie.startAngle = function(_) {\n if (!arguments.length) return startAngle;\n startAngle = _;\n return pie;\n };\n pie.endAngle = function(_) {\n if (!arguments.length) return endAngle;\n endAngle = _;\n return pie;\n };\n pie.padAngle = function(_) {\n if (!arguments.length) return padAngle;\n padAngle = _;\n return pie;\n };\n return pie;\n };\n var d3_layout_pieSortByValue = {};\n d3.layout.stack = function() {\n var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY;\n function stack(data, index) {\n if (!(n = data.length)) return data;\n var series = data.map(function(d, i) {\n return values.call(stack, d, i);\n });\n var points = series.map(function(d) {\n return d.map(function(v, i) {\n return [ x.call(stack, v, i), y.call(stack, v, i) ];\n });\n });\n var orders = order.call(stack, points, index);\n series = d3.permute(series, orders);\n points = d3.permute(points, orders);\n var offsets = offset.call(stack, points, index);\n var m = series[0].length, n, i, j, o;\n for (j = 0; j < m; ++j) {\n out.call(stack, series[0][j], o = offsets[j], points[0][j][1]);\n for (i = 1; i < n; ++i) {\n out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]);\n }\n }\n return data;\n }\n stack.values = function(x) {\n if (!arguments.length) return values;\n values = x;\n return stack;\n };\n stack.order = function(x) {\n if (!arguments.length) return order;\n order = typeof x === \"function\" ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault;\n return stack;\n };\n stack.offset = function(x) {\n if (!arguments.length) return offset;\n offset = typeof x === \"function\" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero;\n return stack;\n };\n stack.x = function(z) {\n if (!arguments.length) return x;\n x = z;\n return stack;\n };\n stack.y = function(z) {\n if (!arguments.length) return y;\n y = z;\n return stack;\n };\n stack.out = function(z) {\n if (!arguments.length) return out;\n out = z;\n return stack;\n };\n return stack;\n };\n function d3_layout_stackX(d) {\n return d.x;\n }\n function d3_layout_stackY(d) {\n return d.y;\n }\n function d3_layout_stackOut(d, y0, y) {\n d.y0 = y0;\n d.y = y;\n }\n var d3_layout_stackOrders = d3.map({\n \"inside-out\": function(data) {\n var n = data.length, i, j, max = data.map(d3_layout_stackMaxIndex), sums = data.map(d3_layout_stackReduceSum), index = d3.range(n).sort(function(a, b) {\n return max[a] - max[b];\n }), top = 0, bottom = 0, tops = [], bottoms = [];\n for (i = 0; i < n; ++i) {\n j = index[i];\n if (top < bottom) {\n top += sums[j];\n tops.push(j);\n } else {\n bottom += sums[j];\n bottoms.push(j);\n }\n }\n return bottoms.reverse().concat(tops);\n },\n reverse: function(data) {\n return d3.range(data.length).reverse();\n },\n \"default\": d3_layout_stackOrderDefault\n });\n var d3_layout_stackOffsets = d3.map({\n silhouette: function(data) {\n var n = data.length, m = data[0].length, sums = [], max = 0, i, j, o, y0 = [];\n for (j = 0; j < m; ++j) {\n for (i = 0, o = 0; i < n; i++) o += data[i][j][1];\n if (o > max) max = o;\n sums.push(o);\n }\n for (j = 0; j < m; ++j) {\n y0[j] = (max - sums[j]) / 2;\n }\n return y0;\n },\n wiggle: function(data) {\n var n = data.length, x = data[0], m = x.length, i, j, k, s1, s2, s3, dx, o, o0, y0 = [];\n y0[0] = o = o0 = 0;\n for (j = 1; j < m; ++j) {\n for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1];\n for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) {\n for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) {\n s3 += (data[k][j][1] - data[k][j - 1][1]) / dx;\n }\n s2 += s3 * data[i][j][1];\n }\n y0[j] = o -= s1 ? s2 / s1 * dx : 0;\n if (o < o0) o0 = o;\n }\n for (j = 0; j < m; ++j) y0[j] -= o0;\n return y0;\n },\n expand: function(data) {\n var n = data.length, m = data[0].length, k = 1 / n, i, j, o, y0 = [];\n for (j = 0; j < m; ++j) {\n for (i = 0, o = 0; i < n; i++) o += data[i][j][1];\n if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; else for (i = 0; i < n; i++) data[i][j][1] = k;\n }\n for (j = 0; j < m; ++j) y0[j] = 0;\n return y0;\n },\n zero: d3_layout_stackOffsetZero\n });\n function d3_layout_stackOrderDefault(data) {\n return d3.range(data.length);\n }\n function d3_layout_stackOffsetZero(data) {\n var j = -1, m = data[0].length, y0 = [];\n while (++j < m) y0[j] = 0;\n return y0;\n }\n function d3_layout_stackMaxIndex(array) {\n var i = 1, j = 0, v = array[0][1], k, n = array.length;\n for (;i < n; ++i) {\n if ((k = array[i][1]) > v) {\n j = i;\n v = k;\n }\n }\n return j;\n }\n function d3_layout_stackReduceSum(d) {\n return d.reduce(d3_layout_stackSum, 0);\n }\n function d3_layout_stackSum(p, d) {\n return p + d[1];\n }\n d3.layout.histogram = function() {\n var frequency = true, valuer = Number, ranger = d3_layout_histogramRange, binner = d3_layout_histogramBinSturges;\n function histogram(data, i) {\n var bins = [], values = data.map(valuer, this), range = ranger.call(this, values, i), thresholds = binner.call(this, range, values, i), bin, i = -1, n = values.length, m = thresholds.length - 1, k = frequency ? 1 : 1 / n, x;\n while (++i < m) {\n bin = bins[i] = [];\n bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]);\n bin.y = 0;\n }\n if (m > 0) {\n i = -1;\n while (++i < n) {\n x = values[i];\n if (x >= range[0] && x <= range[1]) {\n bin = bins[d3.bisect(thresholds, x, 1, m) - 1];\n bin.y += k;\n bin.push(data[i]);\n }\n }\n }\n return bins;\n }\n histogram.value = function(x) {\n if (!arguments.length) return valuer;\n valuer = x;\n return histogram;\n };\n histogram.range = function(x) {\n if (!arguments.length) return ranger;\n ranger = d3_functor(x);\n return histogram;\n };\n histogram.bins = function(x) {\n if (!arguments.length) return binner;\n binner = typeof x === \"number\" ? function(range) {\n return d3_layout_histogramBinFixed(range, x);\n } : d3_functor(x);\n return histogram;\n };\n histogram.frequency = function(x) {\n if (!arguments.length) return frequency;\n frequency = !!x;\n return histogram;\n };\n return histogram;\n };\n function d3_layout_histogramBinSturges(range, values) {\n return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1));\n }\n function d3_layout_histogramBinFixed(range, n) {\n var x = -1, b = +range[0], m = (range[1] - b) / n, f = [];\n while (++x <= n) f[x] = m * x + b;\n return f;\n }\n function d3_layout_histogramRange(values) {\n return [ d3.min(values), d3.max(values) ];\n }\n d3.layout.pack = function() {\n var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [ 1, 1 ], radius;\n function pack(d, i) {\n var nodes = hierarchy.call(this, d, i), root = nodes[0], w = size[0], h = size[1], r = radius == null ? Math.sqrt : typeof radius === \"function\" ? radius : function() {\n return radius;\n };\n root.x = root.y = 0;\n d3_layout_hierarchyVisitAfter(root, function(d) {\n d.r = +r(d.value);\n });\n d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);\n if (padding) {\n var dr = padding * (radius ? 1 : Math.max(2 * root.r / w, 2 * root.r / h)) / 2;\n d3_layout_hierarchyVisitAfter(root, function(d) {\n d.r += dr;\n });\n d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);\n d3_layout_hierarchyVisitAfter(root, function(d) {\n d.r -= dr;\n });\n }\n d3_layout_packTransform(root, w / 2, h / 2, radius ? 1 : 1 / Math.max(2 * root.r / w, 2 * root.r / h));\n return nodes;\n }\n pack.size = function(_) {\n if (!arguments.length) return size;\n size = _;\n return pack;\n };\n pack.radius = function(_) {\n if (!arguments.length) return radius;\n radius = _ == null || typeof _ === \"function\" ? _ : +_;\n return pack;\n };\n pack.padding = function(_) {\n if (!arguments.length) return padding;\n padding = +_;\n return pack;\n };\n return d3_layout_hierarchyRebind(pack, hierarchy);\n };\n function d3_layout_packSort(a, b) {\n return a.value - b.value;\n }\n function d3_layout_packInsert(a, b) {\n var c = a._pack_next;\n a._pack_next = b;\n b._pack_prev = a;\n b._pack_next = c;\n c._pack_prev = b;\n }\n function d3_layout_packSplice(a, b) {\n a._pack_next = b;\n b._pack_prev = a;\n }\n function d3_layout_packIntersects(a, b) {\n var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r;\n return .999 * dr * dr > dx * dx + dy * dy;\n }\n function d3_layout_packSiblings(node) {\n if (!(nodes = node.children) || !(n = nodes.length)) return;\n var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n;\n function bound(node) {\n xMin = Math.min(node.x - node.r, xMin);\n xMax = Math.max(node.x + node.r, xMax);\n yMin = Math.min(node.y - node.r, yMin);\n yMax = Math.max(node.y + node.r, yMax);\n }\n nodes.forEach(d3_layout_packLink);\n a = nodes[0];\n a.x = -a.r;\n a.y = 0;\n bound(a);\n if (n > 1) {\n b = nodes[1];\n b.x = b.r;\n b.y = 0;\n bound(b);\n if (n > 2) {\n c = nodes[2];\n d3_layout_packPlace(a, b, c);\n bound(c);\n d3_layout_packInsert(a, c);\n a._pack_prev = c;\n d3_layout_packInsert(c, b);\n b = a._pack_next;\n for (i = 3; i < n; i++) {\n d3_layout_packPlace(a, b, c = nodes[i]);\n var isect = 0, s1 = 1, s2 = 1;\n for (j = b._pack_next; j !== b; j = j._pack_next, s1++) {\n if (d3_layout_packIntersects(j, c)) {\n isect = 1;\n break;\n }\n }\n if (isect == 1) {\n for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {\n if (d3_layout_packIntersects(k, c)) {\n break;\n }\n }\n }\n if (isect) {\n if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b);\n i--;\n } else {\n d3_layout_packInsert(a, c);\n b = c;\n bound(c);\n }\n }\n }\n }\n var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0;\n for (i = 0; i < n; i++) {\n c = nodes[i];\n c.x -= cx;\n c.y -= cy;\n cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y));\n }\n node.r = cr;\n nodes.forEach(d3_layout_packUnlink);\n }\n function d3_layout_packLink(node) {\n node._pack_next = node._pack_prev = node;\n }\n function d3_layout_packUnlink(node) {\n delete node._pack_next;\n delete node._pack_prev;\n }\n function d3_layout_packTransform(node, x, y, k) {\n var children = node.children;\n node.x = x += k * node.x;\n node.y = y += k * node.y;\n node.r *= k;\n if (children) {\n var i = -1, n = children.length;\n while (++i < n) d3_layout_packTransform(children[i], x, y, k);\n }\n }\n function d3_layout_packPlace(a, b, c) {\n var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y;\n if (db && (dx || dy)) {\n var da = b.r + c.r, dc = dx * dx + dy * dy;\n da *= da;\n db *= db;\n var x = .5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);\n c.x = a.x + x * dx + y * dy;\n c.y = a.y + x * dy - y * dx;\n } else {\n c.x = a.x + db;\n c.y = a.y;\n }\n }\n d3.layout.tree = function() {\n var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = null;\n function tree(d, i) {\n var nodes = hierarchy.call(this, d, i), root0 = nodes[0], root1 = wrapTree(root0);\n d3_layout_hierarchyVisitAfter(root1, firstWalk), root1.parent.m = -root1.z;\n d3_layout_hierarchyVisitBefore(root1, secondWalk);\n if (nodeSize) d3_layout_hierarchyVisitBefore(root0, sizeNode); else {\n var left = root0, right = root0, bottom = root0;\n d3_layout_hierarchyVisitBefore(root0, function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var tx = separation(left, right) / 2 - left.x, kx = size[0] / (right.x + separation(right, left) / 2 + tx), ky = size[1] / (bottom.depth || 1);\n d3_layout_hierarchyVisitBefore(root0, function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n return nodes;\n }\n function wrapTree(root0) {\n var root1 = {\n A: null,\n children: [ root0 ]\n }, queue = [ root1 ], node1;\n while ((node1 = queue.pop()) != null) {\n for (var children = node1.children, child, i = 0, n = children.length; i < n; ++i) {\n queue.push((children[i] = child = {\n _: children[i],\n parent: node1,\n children: (child = children[i].children) && child.slice() || [],\n A: null,\n a: null,\n z: 0,\n m: 0,\n c: 0,\n s: 0,\n t: null,\n i: i\n }).a = child);\n }\n }\n return root1.children[0];\n }\n function firstWalk(v) {\n var children = v.children, siblings = v.parent.children, w = v.i ? siblings[v.i - 1] : null;\n if (children.length) {\n d3_layout_treeShift(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n function apportion(v, w, ancestor) {\n if (w) {\n 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;\n while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) {\n vom = d3_layout_treeLeft(vom);\n vop = d3_layout_treeRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n d3_layout_treeMove(d3_layout_treeAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !d3_layout_treeRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !d3_layout_treeLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n function sizeNode(node) {\n node.x *= size[0];\n node.y = node.depth * size[1];\n }\n tree.separation = function(x) {\n if (!arguments.length) return separation;\n separation = x;\n return tree;\n };\n tree.size = function(x) {\n if (!arguments.length) return nodeSize ? null : size;\n nodeSize = (size = x) == null ? sizeNode : null;\n return tree;\n };\n tree.nodeSize = function(x) {\n if (!arguments.length) return nodeSize ? size : null;\n nodeSize = (size = x) == null ? null : sizeNode;\n return tree;\n };\n return d3_layout_hierarchyRebind(tree, hierarchy);\n };\n function d3_layout_treeSeparation(a, b) {\n return a.parent == b.parent ? 1 : 2;\n }\n function d3_layout_treeLeft(v) {\n var children = v.children;\n return children.length ? children[0] : v.t;\n }\n function d3_layout_treeRight(v) {\n var children = v.children, n;\n return (n = children.length) ? children[n - 1] : v.t;\n }\n function d3_layout_treeMove(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n }\n function d3_layout_treeShift(v) {\n var shift = 0, change = 0, children = v.children, i = children.length, w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n }\n function d3_layout_treeAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n }\n d3.layout.cluster = function() {\n var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = false;\n function cluster(d, i) {\n var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0;\n d3_layout_hierarchyVisitAfter(root, function(node) {\n var children = node.children;\n if (children && children.length) {\n node.x = d3_layout_clusterX(children);\n node.y = d3_layout_clusterY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n var left = d3_layout_clusterLeft(root), right = d3_layout_clusterRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2;\n d3_layout_hierarchyVisitAfter(root, nodeSize ? function(node) {\n node.x = (node.x - root.x) * size[0];\n node.y = (root.y - node.y) * size[1];\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * size[0];\n node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1];\n });\n return nodes;\n }\n cluster.separation = function(x) {\n if (!arguments.length) return separation;\n separation = x;\n return cluster;\n };\n cluster.size = function(x) {\n if (!arguments.length) return nodeSize ? null : size;\n nodeSize = (size = x) == null;\n return cluster;\n };\n cluster.nodeSize = function(x) {\n if (!arguments.length) return nodeSize ? size : null;\n nodeSize = (size = x) != null;\n return cluster;\n };\n return d3_layout_hierarchyRebind(cluster, hierarchy);\n };\n function d3_layout_clusterY(children) {\n return 1 + d3.max(children, function(child) {\n return child.y;\n });\n }\n function d3_layout_clusterX(children) {\n return children.reduce(function(x, child) {\n return x + child.x;\n }, 0) / children.length;\n }\n function d3_layout_clusterLeft(node) {\n var children = node.children;\n return children && children.length ? d3_layout_clusterLeft(children[0]) : node;\n }\n function d3_layout_clusterRight(node) {\n var children = node.children, n;\n return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node;\n }\n d3.layout.treemap = function() {\n var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [ 1, 1 ], padding = null, pad = d3_layout_treemapPadNull, sticky = false, stickies, mode = \"squarify\", ratio = .5 * (1 + Math.sqrt(5));\n function scale(children, k) {\n var i = -1, n = children.length, child, area;\n while (++i < n) {\n area = (child = children[i]).value * (k < 0 ? 0 : k);\n child.area = isNaN(area) || area <= 0 ? 0 : area;\n }\n }\n function squarify(node) {\n var children = node.children;\n if (children && children.length) {\n var rect = pad(node), row = [], remaining = children.slice(), child, best = Infinity, score, u = mode === \"slice\" ? rect.dx : mode === \"dice\" ? rect.dy : mode === \"slice-dice\" ? node.depth & 1 ? rect.dy : rect.dx : Math.min(rect.dx, rect.dy), n;\n scale(remaining, rect.dx * rect.dy / node.value);\n row.area = 0;\n while ((n = remaining.length) > 0) {\n row.push(child = remaining[n - 1]);\n row.area += child.area;\n if (mode !== \"squarify\" || (score = worst(row, u)) <= best) {\n remaining.pop();\n best = score;\n } else {\n row.area -= row.pop().area;\n position(row, u, rect, false);\n u = Math.min(rect.dx, rect.dy);\n row.length = row.area = 0;\n best = Infinity;\n }\n }\n if (row.length) {\n position(row, u, rect, true);\n row.length = row.area = 0;\n }\n children.forEach(squarify);\n }\n }\n function stickify(node) {\n var children = node.children;\n if (children && children.length) {\n var rect = pad(node), remaining = children.slice(), child, row = [];\n scale(remaining, rect.dx * rect.dy / node.value);\n row.area = 0;\n while (child = remaining.pop()) {\n row.push(child);\n row.area += child.area;\n if (child.z != null) {\n position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length);\n row.length = row.area = 0;\n }\n }\n children.forEach(stickify);\n }\n }\n function worst(row, u) {\n var s = row.area, r, rmax = 0, rmin = Infinity, i = -1, n = row.length;\n while (++i < n) {\n if (!(r = row[i].area)) continue;\n if (r < rmin) rmin = r;\n if (r > rmax) rmax = r;\n }\n s *= s;\n u *= u;\n return s ? Math.max(u * rmax * ratio / s, s / (u * rmin * ratio)) : Infinity;\n }\n function position(row, u, rect, flush) {\n var i = -1, n = row.length, x = rect.x, y = rect.y, v = u ? round(row.area / u) : 0, o;\n if (u == rect.dx) {\n if (flush || v > rect.dy) v = rect.dy;\n while (++i < n) {\n o = row[i];\n o.x = x;\n o.y = y;\n o.dy = v;\n x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0);\n }\n o.z = true;\n o.dx += rect.x + rect.dx - x;\n rect.y += v;\n rect.dy -= v;\n } else {\n if (flush || v > rect.dx) v = rect.dx;\n while (++i < n) {\n o = row[i];\n o.x = x;\n o.y = y;\n o.dx = v;\n y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0);\n }\n o.z = false;\n o.dy += rect.y + rect.dy - y;\n rect.x += v;\n rect.dx -= v;\n }\n }\n function treemap(d) {\n var nodes = stickies || hierarchy(d), root = nodes[0];\n root.x = root.y = 0;\n if (root.value) root.dx = size[0], root.dy = size[1]; else root.dx = root.dy = 0;\n if (stickies) hierarchy.revalue(root);\n scale([ root ], root.dx * root.dy / root.value);\n (stickies ? stickify : squarify)(root);\n if (sticky) stickies = nodes;\n return nodes;\n }\n treemap.size = function(x) {\n if (!arguments.length) return size;\n size = x;\n return treemap;\n };\n treemap.padding = function(x) {\n if (!arguments.length) return padding;\n function padFunction(node) {\n var p = x.call(treemap, node, node.depth);\n return p == null ? d3_layout_treemapPadNull(node) : d3_layout_treemapPad(node, typeof p === \"number\" ? [ p, p, p, p ] : p);\n }\n function padConstant(node) {\n return d3_layout_treemapPad(node, x);\n }\n var type;\n pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === \"function\" ? padFunction : type === \"number\" ? (x = [ x, x, x, x ], \n padConstant) : padConstant;\n return treemap;\n };\n treemap.round = function(x) {\n if (!arguments.length) return round != Number;\n round = x ? Math.round : Number;\n return treemap;\n };\n treemap.sticky = function(x) {\n if (!arguments.length) return sticky;\n sticky = x;\n stickies = null;\n return treemap;\n };\n treemap.ratio = function(x) {\n if (!arguments.length) return ratio;\n ratio = x;\n return treemap;\n };\n treemap.mode = function(x) {\n if (!arguments.length) return mode;\n mode = x + \"\";\n return treemap;\n };\n return d3_layout_hierarchyRebind(treemap, hierarchy);\n };\n function d3_layout_treemapPadNull(node) {\n return {\n x: node.x,\n y: node.y,\n dx: node.dx,\n dy: node.dy\n };\n }\n function d3_layout_treemapPad(node, padding) {\n var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2];\n if (dx < 0) {\n x += dx / 2;\n dx = 0;\n }\n if (dy < 0) {\n y += dy / 2;\n dy = 0;\n }\n return {\n x: x,\n y: y,\n dx: dx,\n dy: dy\n };\n }\n d3.random = {\n normal: function(µ, σ) {\n var n = arguments.length;\n if (n < 2) σ = 1;\n if (n < 1) µ = 0;\n return function() {\n var x, y, r;\n do {\n x = Math.random() * 2 - 1;\n y = Math.random() * 2 - 1;\n r = x * x + y * y;\n } while (!r || r > 1);\n return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r);\n };\n },\n logNormal: function() {\n var random = d3.random.normal.apply(d3, arguments);\n return function() {\n return Math.exp(random());\n };\n },\n bates: function(m) {\n var random = d3.random.irwinHall(m);\n return function() {\n return random() / m;\n };\n },\n irwinHall: function(m) {\n return function() {\n for (var s = 0, j = 0; j < m; j++) s += Math.random();\n return s;\n };\n }\n };\n d3.scale = {};\n function d3_scaleExtent(domain) {\n var start = domain[0], stop = domain[domain.length - 1];\n return start < stop ? [ start, stop ] : [ stop, start ];\n }\n function d3_scaleRange(scale) {\n return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range());\n }\n function d3_scale_bilinear(domain, range, uninterpolate, interpolate) {\n var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]);\n return function(x) {\n return i(u(x));\n };\n }\n function d3_scale_nice(domain, nice) {\n var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx;\n if (x1 < x0) {\n dx = i0, i0 = i1, i1 = dx;\n dx = x0, x0 = x1, x1 = dx;\n }\n domain[i0] = nice.floor(x0);\n domain[i1] = nice.ceil(x1);\n return domain;\n }\n function d3_scale_niceStep(step) {\n return step ? {\n floor: function(x) {\n return Math.floor(x / step) * step;\n },\n ceil: function(x) {\n return Math.ceil(x / step) * step;\n }\n } : d3_scale_niceIdentity;\n }\n var d3_scale_niceIdentity = {\n floor: d3_identity,\n ceil: d3_identity\n };\n function d3_scale_polylinear(domain, range, uninterpolate, interpolate) {\n var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1;\n if (domain[k] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n while (++j <= k) {\n u.push(uninterpolate(domain[j - 1], domain[j]));\n i.push(interpolate(range[j - 1], range[j]));\n }\n return function(x) {\n var j = d3.bisect(domain, x, 1, k) - 1;\n return i[j](u[j](x));\n };\n }\n d3.scale.linear = function() {\n return d3_scale_linear([ 0, 1 ], [ 0, 1 ], d3_interpolate, false);\n };\n function d3_scale_linear(domain, range, interpolate, clamp) {\n var output, input;\n function rescale() {\n var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber;\n output = linear(domain, range, uninterpolate, interpolate);\n input = linear(range, domain, uninterpolate, d3_interpolate);\n return scale;\n }\n function scale(x) {\n return output(x);\n }\n scale.invert = function(y) {\n return input(y);\n };\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n domain = x.map(Number);\n return rescale();\n };\n scale.range = function(x) {\n if (!arguments.length) return range;\n range = x;\n return rescale();\n };\n scale.rangeRound = function(x) {\n return scale.range(x).interpolate(d3_interpolateRound);\n };\n scale.clamp = function(x) {\n if (!arguments.length) return clamp;\n clamp = x;\n return rescale();\n };\n scale.interpolate = function(x) {\n if (!arguments.length) return interpolate;\n interpolate = x;\n return rescale();\n };\n scale.ticks = function(m) {\n return d3_scale_linearTicks(domain, m);\n };\n scale.tickFormat = function(m, format) {\n return d3_scale_linearTickFormat(domain, m, format);\n };\n scale.nice = function(m) {\n d3_scale_linearNice(domain, m);\n return rescale();\n };\n scale.copy = function() {\n return d3_scale_linear(domain, range, interpolate, clamp);\n };\n return rescale();\n }\n function d3_scale_linearRebind(scale, linear) {\n return d3.rebind(scale, linear, \"range\", \"rangeRound\", \"interpolate\", \"clamp\");\n }\n function d3_scale_linearNice(domain, m) {\n d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));\n d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));\n return domain;\n }\n function d3_scale_linearTickRange(domain, m) {\n if (m == null) m = 10;\n var extent = d3_scaleExtent(domain), span = extent[1] - extent[0], step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), err = m / span * step;\n if (err <= .15) step *= 10; else if (err <= .35) step *= 5; else if (err <= .75) step *= 2;\n extent[0] = Math.ceil(extent[0] / step) * step;\n extent[1] = Math.floor(extent[1] / step) * step + step * .5;\n extent[2] = step;\n return extent;\n }\n function d3_scale_linearTicks(domain, m) {\n return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));\n }\n var d3_scale_linearFormatSignificant = {\n s: 1,\n g: 1,\n p: 1,\n r: 1,\n e: 1\n };\n function d3_scale_linearPrecision(value) {\n return -Math.floor(Math.log(value) / Math.LN10 + .01);\n }\n function d3_scale_linearFormatPrecision(type, range) {\n var p = d3_scale_linearPrecision(range[2]);\n return type in d3_scale_linearFormatSignificant ? Math.abs(p - d3_scale_linearPrecision(Math.max(abs(range[0]), abs(range[1])))) + +(type !== \"e\") : p - (type === \"%\") * 2;\n }\n d3.scale.log = function() {\n return d3_scale_log(d3.scale.linear().domain([ 0, 1 ]), 10, true, [ 1, 10 ]);\n };\n function d3_scale_log(linear, base, positive, domain) {\n function log(x) {\n return (positive ? Math.log(x < 0 ? 0 : x) : -Math.log(x > 0 ? 0 : -x)) / Math.log(base);\n }\n function pow(x) {\n return positive ? Math.pow(base, x) : -Math.pow(base, -x);\n }\n function scale(x) {\n return linear(log(x));\n }\n scale.invert = function(x) {\n return pow(linear.invert(x));\n };\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n positive = x[0] >= 0;\n linear.domain((domain = x.map(Number)).map(log));\n return scale;\n };\n scale.base = function(_) {\n if (!arguments.length) return base;\n base = +_;\n linear.domain(domain.map(log));\n return scale;\n };\n scale.nice = function() {\n var niced = d3_scale_nice(domain.map(log), positive ? Math : d3_scale_logNiceNegative);\n linear.domain(niced);\n domain = niced.map(pow);\n return scale;\n };\n scale.ticks = function() {\n var extent = d3_scaleExtent(domain), ticks = [], u = extent[0], v = extent[1], i = Math.floor(log(u)), j = Math.ceil(log(v)), n = base % 1 ? 2 : base;\n if (isFinite(j - i)) {\n if (positive) {\n for (;i < j; i++) for (var k = 1; k < n; k++) ticks.push(pow(i) * k);\n ticks.push(pow(i));\n } else {\n ticks.push(pow(i));\n for (;i++ < j; ) for (var k = n - 1; k > 0; k--) ticks.push(pow(i) * k);\n }\n for (i = 0; ticks[i] < u; i++) {}\n for (j = ticks.length; ticks[j - 1] > v; j--) {}\n ticks = ticks.slice(i, j);\n }\n return ticks;\n };\n scale.copy = function() {\n return d3_scale_log(linear.copy(), base, positive, domain);\n };\n return d3_scale_linearRebind(scale, linear);\n }\n var d3_scale_logNiceNegative = {\n floor: function(x) {\n return -Math.ceil(-x);\n },\n ceil: function(x) {\n return -Math.floor(-x);\n }\n };\n d3.scale.pow = function() {\n return d3_scale_pow(d3.scale.linear(), 1, [ 0, 1 ]);\n };\n function d3_scale_pow(linear, exponent, domain) {\n var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent);\n function scale(x) {\n return linear(powp(x));\n }\n scale.invert = function(x) {\n return powb(linear.invert(x));\n };\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n linear.domain((domain = x.map(Number)).map(powp));\n return scale;\n };\n scale.ticks = function(m) {\n return d3_scale_linearTicks(domain, m);\n };\n scale.tickFormat = function(m, format) {\n return d3_scale_linearTickFormat(domain, m, format);\n };\n scale.nice = function(m) {\n return scale.domain(d3_scale_linearNice(domain, m));\n };\n scale.exponent = function(x) {\n if (!arguments.length) return exponent;\n powp = d3_scale_powPow(exponent = x);\n powb = d3_scale_powPow(1 / exponent);\n linear.domain(domain.map(powp));\n return scale;\n };\n scale.copy = function() {\n return d3_scale_pow(linear.copy(), exponent, domain);\n };\n return d3_scale_linearRebind(scale, linear);\n }\n function d3_scale_powPow(e) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);\n };\n }\n d3.scale.sqrt = function() {\n return d3.scale.pow().exponent(.5);\n };\n d3.scale.ordinal = function() {\n return d3_scale_ordinal([], {\n t: \"range\",\n a: [ [] ]\n });\n };\n function d3_scale_ordinal(domain, ranger) {\n var index, range, rangeBand;\n function scale(x) {\n return range[((index.get(x) || (ranger.t === \"range\" ? index.set(x, domain.push(x)) : NaN)) - 1) % range.length];\n }\n function steps(start, step) {\n return d3.range(domain.length).map(function(i) {\n return start + step * i;\n });\n }\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n domain = [];\n index = new d3_Map();\n var i = -1, n = x.length, xi;\n while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi));\n return scale[ranger.t].apply(scale, ranger.a);\n };\n scale.range = function(x) {\n if (!arguments.length) return range;\n range = x;\n rangeBand = 0;\n ranger = {\n t: \"range\",\n a: arguments\n };\n return scale;\n };\n scale.rangePoints = function(x, padding) {\n if (arguments.length < 2) padding = 0;\n var start = x[0], stop = x[1], step = domain.length < 2 ? (start = (start + stop) / 2, \n 0) : (stop - start) / (domain.length - 1 + padding);\n range = steps(start + step * padding / 2, step);\n rangeBand = 0;\n ranger = {\n t: \"rangePoints\",\n a: arguments\n };\n return scale;\n };\n scale.rangeRoundPoints = function(x, padding) {\n if (arguments.length < 2) padding = 0;\n var start = x[0], stop = x[1], step = domain.length < 2 ? (start = stop = Math.round((start + stop) / 2), \n 0) : (stop - start) / (domain.length - 1 + padding) | 0;\n range = steps(start + Math.round(step * padding / 2 + (stop - start - (domain.length - 1 + padding) * step) / 2), step);\n rangeBand = 0;\n ranger = {\n t: \"rangeRoundPoints\",\n a: arguments\n };\n return scale;\n };\n scale.rangeBands = function(x, padding, outerPadding) {\n if (arguments.length < 2) padding = 0;\n if (arguments.length < 3) outerPadding = padding;\n var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding);\n range = steps(start + step * outerPadding, step);\n if (reverse) range.reverse();\n rangeBand = step * (1 - padding);\n ranger = {\n t: \"rangeBands\",\n a: arguments\n };\n return scale;\n };\n scale.rangeRoundBands = function(x, padding, outerPadding) {\n if (arguments.length < 2) padding = 0;\n if (arguments.length < 3) outerPadding = padding;\n var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding));\n range = steps(start + Math.round((stop - start - (domain.length - padding) * step) / 2), step);\n if (reverse) range.reverse();\n rangeBand = Math.round(step * (1 - padding));\n ranger = {\n t: \"rangeRoundBands\",\n a: arguments\n };\n return scale;\n };\n scale.rangeBand = function() {\n return rangeBand;\n };\n scale.rangeExtent = function() {\n return d3_scaleExtent(ranger.a[0]);\n };\n scale.copy = function() {\n return d3_scale_ordinal(domain, ranger);\n };\n return scale.domain(domain);\n }\n d3.scale.category10 = function() {\n return d3.scale.ordinal().range(d3_category10);\n };\n d3.scale.category20 = function() {\n return d3.scale.ordinal().range(d3_category20);\n };\n d3.scale.category20b = function() {\n return d3.scale.ordinal().range(d3_category20b);\n };\n d3.scale.category20c = function() {\n return d3.scale.ordinal().range(d3_category20c);\n };\n var d3_category10 = [ 2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175 ].map(d3_rgbString);\n var d3_category20 = [ 2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725 ].map(d3_rgbString);\n var d3_category20b = [ 3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654 ].map(d3_rgbString);\n var d3_category20c = [ 3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081 ].map(d3_rgbString);\n d3.scale.quantile = function() {\n return d3_scale_quantile([], []);\n };\n function d3_scale_quantile(domain, range) {\n var thresholds;\n function rescale() {\n var k = 0, q = range.length;\n thresholds = [];\n while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q);\n return scale;\n }\n function scale(x) {\n if (!isNaN(x = +x)) return range[d3.bisect(thresholds, x)];\n }\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n domain = x.map(d3_number).filter(d3_numeric).sort(d3_ascending);\n return rescale();\n };\n scale.range = function(x) {\n if (!arguments.length) return range;\n range = x;\n return rescale();\n };\n scale.quantiles = function() {\n return thresholds;\n };\n scale.invertExtent = function(y) {\n y = range.indexOf(y);\n return y < 0 ? [ NaN, NaN ] : [ y > 0 ? thresholds[y - 1] : domain[0], y < thresholds.length ? thresholds[y] : domain[domain.length - 1] ];\n };\n scale.copy = function() {\n return d3_scale_quantile(domain, range);\n };\n return rescale();\n }\n d3.scale.quantize = function() {\n return d3_scale_quantize(0, 1, [ 0, 1 ]);\n };\n function d3_scale_quantize(x0, x1, range) {\n var kx, i;\n function scale(x) {\n return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))];\n }\n function rescale() {\n kx = range.length / (x1 - x0);\n i = range.length - 1;\n return scale;\n }\n scale.domain = function(x) {\n if (!arguments.length) return [ x0, x1 ];\n x0 = +x[0];\n x1 = +x[x.length - 1];\n return rescale();\n };\n scale.range = function(x) {\n if (!arguments.length) return range;\n range = x;\n return rescale();\n };\n scale.invertExtent = function(y) {\n y = range.indexOf(y);\n y = y < 0 ? NaN : y / kx + x0;\n return [ y, y + 1 / kx ];\n };\n scale.copy = function() {\n return d3_scale_quantize(x0, x1, range);\n };\n return rescale();\n }\n d3.scale.threshold = function() {\n return d3_scale_threshold([ .5 ], [ 0, 1 ]);\n };\n function d3_scale_threshold(domain, range) {\n function scale(x) {\n if (x <= x) return range[d3.bisect(domain, x)];\n }\n scale.domain = function(_) {\n if (!arguments.length) return domain;\n domain = _;\n return scale;\n };\n scale.range = function(_) {\n if (!arguments.length) return range;\n range = _;\n return scale;\n };\n scale.invertExtent = function(y) {\n y = range.indexOf(y);\n return [ domain[y - 1], domain[y] ];\n };\n scale.copy = function() {\n return d3_scale_threshold(domain, range);\n };\n return scale;\n }\n d3.scale.identity = function() {\n return d3_scale_identity([ 0, 1 ]);\n };\n function d3_scale_identity(domain) {\n function identity(x) {\n return +x;\n }\n identity.invert = identity;\n identity.domain = identity.range = function(x) {\n if (!arguments.length) return domain;\n domain = x.map(identity);\n return identity;\n };\n identity.ticks = function(m) {\n return d3_scale_linearTicks(domain, m);\n };\n identity.tickFormat = function(m, format) {\n return d3_scale_linearTickFormat(domain, m, format);\n };\n identity.copy = function() {\n return d3_scale_identity(domain);\n };\n return identity;\n }\n d3.svg = {};\n function d3_zero() {\n return 0;\n }\n d3.svg.arc = function() {\n var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, cornerRadius = d3_zero, padRadius = d3_svg_arcAuto, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle, padAngle = d3_svg_arcPadAngle;\n function arc() {\n var r0 = Math.max(0, +innerRadius.apply(this, arguments)), r1 = Math.max(0, +outerRadius.apply(this, arguments)), a0 = startAngle.apply(this, arguments) - halfπ, a1 = endAngle.apply(this, arguments) - halfπ, da = Math.abs(a1 - a0), cw = a0 > a1 ? 0 : 1;\n if (r1 < r0) rc = r1, r1 = r0, r0 = rc;\n if (da >= τε) return circleSegment(r1, cw) + (r0 ? circleSegment(r0, 1 - cw) : \"\") + \"Z\";\n var rc, cr, rp, ap, p0 = 0, p1 = 0, x0, y0, x1, y1, x2, y2, x3, y3, path = [];\n if (ap = (+padAngle.apply(this, arguments) || 0) / 2) {\n rp = padRadius === d3_svg_arcAuto ? Math.sqrt(r0 * r0 + r1 * r1) : +padRadius.apply(this, arguments);\n if (!cw) p1 *= -1;\n if (r1) p1 = d3_asin(rp / r1 * Math.sin(ap));\n if (r0) p0 = d3_asin(rp / r0 * Math.sin(ap));\n }\n if (r1) {\n x0 = r1 * Math.cos(a0 + p1);\n y0 = r1 * Math.sin(a0 + p1);\n x1 = r1 * Math.cos(a1 - p1);\n y1 = r1 * Math.sin(a1 - p1);\n var l1 = Math.abs(a1 - a0 - 2 * p1) <= π ? 0 : 1;\n if (p1 && d3_svg_arcSweep(x0, y0, x1, y1) === cw ^ l1) {\n var h1 = (a0 + a1) / 2;\n x0 = r1 * Math.cos(h1);\n y0 = r1 * Math.sin(h1);\n x1 = y1 = null;\n }\n } else {\n x0 = y0 = 0;\n }\n if (r0) {\n x2 = r0 * Math.cos(a1 - p0);\n y2 = r0 * Math.sin(a1 - p0);\n x3 = r0 * Math.cos(a0 + p0);\n y3 = r0 * Math.sin(a0 + p0);\n var l0 = Math.abs(a0 - a1 + 2 * p0) <= π ? 0 : 1;\n if (p0 && d3_svg_arcSweep(x2, y2, x3, y3) === 1 - cw ^ l0) {\n var h0 = (a0 + a1) / 2;\n x2 = r0 * Math.cos(h0);\n y2 = r0 * Math.sin(h0);\n x3 = y3 = null;\n }\n } else {\n x2 = y2 = 0;\n }\n if (da > ε && (rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments))) > .001) {\n cr = r0 < r1 ^ cw ? 0 : 1;\n var rc1 = rc, rc0 = rc;\n if (da < π) {\n var oc = x3 == null ? [ x2, y2 ] : x1 == null ? [ x0, y0 ] : d3_geom_polygonIntersect([ x0, y0 ], [ x3, y3 ], [ x1, y1 ], [ x2, y2 ]), ax = x0 - oc[0], ay = y0 - oc[1], bx = x1 - oc[0], by = y1 - 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]);\n rc0 = Math.min(rc, (r0 - lc) / (kc - 1));\n rc1 = Math.min(rc, (r1 - lc) / (kc + 1));\n }\n if (x1 != null) {\n var t30 = d3_svg_arcCornerTangents(x3 == null ? [ x2, y2 ] : [ x3, y3 ], [ x0, y0 ], r1, rc1, cw), t12 = d3_svg_arcCornerTangents([ x1, y1 ], [ x2, y2 ], r1, rc1, cw);\n if (rc === rc1) {\n path.push(\"M\", t30[0], \"A\", rc1, \",\", rc1, \" 0 0,\", cr, \" \", t30[1], \"A\", r1, \",\", r1, \" 0 \", 1 - cw ^ d3_svg_arcSweep(t30[1][0], t30[1][1], t12[1][0], t12[1][1]), \",\", cw, \" \", t12[1], \"A\", rc1, \",\", rc1, \" 0 0,\", cr, \" \", t12[0]);\n } else {\n path.push(\"M\", t30[0], \"A\", rc1, \",\", rc1, \" 0 1,\", cr, \" \", t12[0]);\n }\n } else {\n path.push(\"M\", x0, \",\", y0);\n }\n if (x3 != null) {\n var t03 = d3_svg_arcCornerTangents([ x0, y0 ], [ x3, y3 ], r0, -rc0, cw), t21 = d3_svg_arcCornerTangents([ x2, y2 ], x1 == null ? [ x0, y0 ] : [ x1, y1 ], r0, -rc0, cw);\n if (rc === rc0) {\n path.push(\"L\", t21[0], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t21[1], \"A\", r0, \",\", r0, \" 0 \", cw ^ d3_svg_arcSweep(t21[1][0], t21[1][1], t03[1][0], t03[1][1]), \",\", 1 - cw, \" \", t03[1], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t03[0]);\n } else {\n path.push(\"L\", t21[0], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t03[0]);\n }\n } else {\n path.push(\"L\", x2, \",\", y2);\n }\n } else {\n path.push(\"M\", x0, \",\", y0);\n if (x1 != null) path.push(\"A\", r1, \",\", r1, \" 0 \", l1, \",\", cw, \" \", x1, \",\", y1);\n path.push(\"L\", x2, \",\", y2);\n if (x3 != null) path.push(\"A\", r0, \",\", r0, \" 0 \", l0, \",\", 1 - cw, \" \", x3, \",\", y3);\n }\n path.push(\"Z\");\n return path.join(\"\");\n }\n function circleSegment(r1, cw) {\n return \"M0,\" + r1 + \"A\" + r1 + \",\" + r1 + \" 0 1,\" + cw + \" 0,\" + -r1 + \"A\" + r1 + \",\" + r1 + \" 0 1,\" + cw + \" 0,\" + r1;\n }\n arc.innerRadius = function(v) {\n if (!arguments.length) return innerRadius;\n innerRadius = d3_functor(v);\n return arc;\n };\n arc.outerRadius = function(v) {\n if (!arguments.length) return outerRadius;\n outerRadius = d3_functor(v);\n return arc;\n };\n arc.cornerRadius = function(v) {\n if (!arguments.length) return cornerRadius;\n cornerRadius = d3_functor(v);\n return arc;\n };\n arc.padRadius = function(v) {\n if (!arguments.length) return padRadius;\n padRadius = v == d3_svg_arcAuto ? d3_svg_arcAuto : d3_functor(v);\n return arc;\n };\n arc.startAngle = function(v) {\n if (!arguments.length) return startAngle;\n startAngle = d3_functor(v);\n return arc;\n };\n arc.endAngle = function(v) {\n if (!arguments.length) return endAngle;\n endAngle = d3_functor(v);\n return arc;\n };\n arc.padAngle = function(v) {\n if (!arguments.length) return padAngle;\n padAngle = d3_functor(v);\n return arc;\n };\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - halfπ;\n return [ Math.cos(a) * r, Math.sin(a) * r ];\n };\n return arc;\n };\n var d3_svg_arcAuto = \"auto\";\n function d3_svg_arcInnerRadius(d) {\n return d.innerRadius;\n }\n function d3_svg_arcOuterRadius(d) {\n return d.outerRadius;\n }\n function d3_svg_arcStartAngle(d) {\n return d.startAngle;\n }\n function d3_svg_arcEndAngle(d) {\n return d.endAngle;\n }\n function d3_svg_arcPadAngle(d) {\n return d && d.padAngle;\n }\n function d3_svg_arcSweep(x0, y0, x1, y1) {\n return (x0 - x1) * y0 - (y0 - y1) * x0 > 0 ? 0 : 1;\n }\n function d3_svg_arcCornerTangents(p0, p1, r1, rc, cw) {\n var x01 = p0[0] - p1[0], y01 = p0[1] - p1[1], lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01), ox = lo * y01, oy = -lo * x01, x1 = p0[0] + ox, y1 = p0[1] + oy, x2 = p1[0] + ox, y2 = p1[1] + oy, x3 = (x1 + x2) / 2, y3 = (y1 + y2) / 2, dx = x2 - x1, dy = y2 - y1, d2 = dx * dx + dy * dy, r = r1 - rc, D = x1 * y2 - x2 * y1, 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 - x3, dy0 = cy0 - y3, dx1 = cx1 - x3, dy1 = cy1 - y3;\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n return [ [ cx0 - ox, cy0 - oy ], [ cx0 * r1 / r, cy0 * r1 / r ] ];\n }\n function d3_true() {\n return true;\n }\n function d3_svg_line(projection) {\n var x = d3_geom_pointX, y = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7;\n function line(data) {\n var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y);\n function segment() {\n segments.push(\"M\", interpolate(projection(points), tension));\n }\n while (++i < n) {\n if (defined.call(this, d = data[i], i)) {\n points.push([ +fx.call(this, d, i), +fy.call(this, d, i) ]);\n } else if (points.length) {\n segment();\n points = [];\n }\n }\n if (points.length) segment();\n return segments.length ? segments.join(\"\") : null;\n }\n line.x = function(_) {\n if (!arguments.length) return x;\n x = _;\n return line;\n };\n line.y = function(_) {\n if (!arguments.length) return y;\n y = _;\n return line;\n };\n line.defined = function(_) {\n if (!arguments.length) return defined;\n defined = _;\n return line;\n };\n line.interpolate = function(_) {\n if (!arguments.length) return interpolateKey;\n if (typeof _ === \"function\") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;\n return line;\n };\n line.tension = function(_) {\n if (!arguments.length) return tension;\n tension = _;\n return line;\n };\n return line;\n }\n d3.svg.line = function() {\n return d3_svg_line(d3_identity);\n };\n var d3_svg_lineInterpolators = d3.map({\n linear: d3_svg_lineLinear,\n \"linear-closed\": d3_svg_lineLinearClosed,\n step: d3_svg_lineStep,\n \"step-before\": d3_svg_lineStepBefore,\n \"step-after\": d3_svg_lineStepAfter,\n basis: d3_svg_lineBasis,\n \"basis-open\": d3_svg_lineBasisOpen,\n \"basis-closed\": d3_svg_lineBasisClosed,\n bundle: d3_svg_lineBundle,\n cardinal: d3_svg_lineCardinal,\n \"cardinal-open\": d3_svg_lineCardinalOpen,\n \"cardinal-closed\": d3_svg_lineCardinalClosed,\n monotone: d3_svg_lineMonotone\n });\n d3_svg_lineInterpolators.forEach(function(key, value) {\n value.key = key;\n value.closed = /-closed$/.test(key);\n });\n function d3_svg_lineLinear(points) {\n return points.length > 1 ? points.join(\"L\") : points + \"Z\";\n }\n function d3_svg_lineLinearClosed(points) {\n return points.join(\"L\") + \"Z\";\n }\n function d3_svg_lineStep(points) {\n var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n while (++i < n) path.push(\"H\", (p[0] + (p = points[i])[0]) / 2, \"V\", p[1]);\n if (n > 1) path.push(\"H\", p[0]);\n return path.join(\"\");\n }\n function d3_svg_lineStepBefore(points) {\n var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n while (++i < n) path.push(\"V\", (p = points[i])[1], \"H\", p[0]);\n return path.join(\"\");\n }\n function d3_svg_lineStepAfter(points) {\n var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n while (++i < n) path.push(\"H\", (p = points[i])[0], \"V\", p[1]);\n return path.join(\"\");\n }\n function d3_svg_lineCardinalOpen(points, tension) {\n return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, -1), d3_svg_lineCardinalTangents(points, tension));\n }\n function d3_svg_lineCardinalClosed(points, tension) {\n return points.length < 3 ? d3_svg_lineLinearClosed(points) : points[0] + d3_svg_lineHermite((points.push(points[0]), \n points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension));\n }\n function d3_svg_lineCardinal(points, tension) {\n return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension));\n }\n function d3_svg_lineHermite(points, tangents) {\n if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) {\n return d3_svg_lineLinear(points);\n }\n var quad = points.length != tangents.length, path = \"\", p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1;\n if (quad) {\n path += \"Q\" + (p[0] - t0[0] * 2 / 3) + \",\" + (p[1] - t0[1] * 2 / 3) + \",\" + p[0] + \",\" + p[1];\n p0 = points[1];\n pi = 2;\n }\n if (tangents.length > 1) {\n t = tangents[1];\n p = points[pi];\n pi++;\n path += \"C\" + (p0[0] + t0[0]) + \",\" + (p0[1] + t0[1]) + \",\" + (p[0] - t[0]) + \",\" + (p[1] - t[1]) + \",\" + p[0] + \",\" + p[1];\n for (var i = 2; i < tangents.length; i++, pi++) {\n p = points[pi];\n t = tangents[i];\n path += \"S\" + (p[0] - t[0]) + \",\" + (p[1] - t[1]) + \",\" + p[0] + \",\" + p[1];\n }\n }\n if (quad) {\n var lp = points[pi];\n path += \"Q\" + (p[0] + t[0] * 2 / 3) + \",\" + (p[1] + t[1] * 2 / 3) + \",\" + lp[0] + \",\" + lp[1];\n }\n return path;\n }\n function d3_svg_lineCardinalTangents(points, tension) {\n var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length;\n while (++i < n) {\n p0 = p1;\n p1 = p2;\n p2 = points[i];\n tangents.push([ a * (p2[0] - p0[0]), a * (p2[1] - p0[1]) ]);\n }\n return tangents;\n }\n function d3_svg_lineBasis(points) {\n if (points.length < 3) return d3_svg_lineLinear(points);\n var i = 1, n = points.length, pi = points[0], x0 = pi[0], y0 = pi[1], px = [ x0, x0, x0, (pi = points[1])[0] ], py = [ y0, y0, y0, pi[1] ], path = [ x0, \",\", y0, \"L\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];\n points.push(points[n - 1]);\n while (++i <= n) {\n pi = points[i];\n px.shift();\n px.push(pi[0]);\n py.shift();\n py.push(pi[1]);\n d3_svg_lineBasisBezier(path, px, py);\n }\n points.pop();\n path.push(\"L\", pi);\n return path.join(\"\");\n }\n function d3_svg_lineBasisOpen(points) {\n if (points.length < 4) return d3_svg_lineLinear(points);\n var path = [], i = -1, n = points.length, pi, px = [ 0 ], py = [ 0 ];\n while (++i < 3) {\n pi = points[i];\n px.push(pi[0]);\n py.push(pi[1]);\n }\n path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + \",\" + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py));\n --i;\n while (++i < n) {\n pi = points[i];\n px.shift();\n px.push(pi[0]);\n py.shift();\n py.push(pi[1]);\n d3_svg_lineBasisBezier(path, px, py);\n }\n return path.join(\"\");\n }\n function d3_svg_lineBasisClosed(points) {\n var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = [];\n while (++i < 4) {\n pi = points[i % n];\n px.push(pi[0]);\n py.push(pi[1]);\n }\n path = [ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];\n --i;\n while (++i < m) {\n pi = points[i % n];\n px.shift();\n px.push(pi[0]);\n py.shift();\n py.push(pi[1]);\n d3_svg_lineBasisBezier(path, px, py);\n }\n return path.join(\"\");\n }\n function d3_svg_lineBundle(points, tension) {\n var n = points.length - 1;\n if (n) {\n var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t;\n while (++i <= n) {\n p = points[i];\n t = i / n;\n p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);\n p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);\n }\n }\n return d3_svg_lineBasis(points);\n }\n function d3_svg_lineDot4(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n }\n var d3_svg_lineBasisBezier1 = [ 0, 2 / 3, 1 / 3, 0 ], d3_svg_lineBasisBezier2 = [ 0, 1 / 3, 2 / 3, 0 ], d3_svg_lineBasisBezier3 = [ 0, 1 / 6, 2 / 3, 1 / 6 ];\n function d3_svg_lineBasisBezier(path, x, y) {\n path.push(\"C\", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y));\n }\n function d3_svg_lineSlope(p0, p1) {\n return (p1[1] - p0[1]) / (p1[0] - p0[0]);\n }\n function d3_svg_lineFiniteDifferences(points) {\n var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1);\n while (++i < j) {\n m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2;\n }\n m[i] = d;\n return m;\n }\n function d3_svg_lineMonotoneTangents(points) {\n var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1;\n while (++i < j) {\n d = d3_svg_lineSlope(points[i], points[i + 1]);\n if (abs(d) < ε) {\n m[i] = m[i + 1] = 0;\n } else {\n a = m[i] / d;\n b = m[i + 1] / d;\n s = a * a + b * b;\n if (s > 9) {\n s = d * 3 / Math.sqrt(s);\n m[i] = s * a;\n m[i + 1] = s * b;\n }\n }\n }\n i = -1;\n while (++i <= j) {\n s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i]));\n tangents.push([ s || 0, m[i] * s || 0 ]);\n }\n return tangents;\n }\n function d3_svg_lineMonotone(points) {\n return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points));\n }\n d3.svg.line.radial = function() {\n var line = d3_svg_line(d3_svg_lineRadial);\n line.radius = line.x, delete line.x;\n line.angle = line.y, delete line.y;\n return line;\n };\n function d3_svg_lineRadial(points) {\n var point, i = -1, n = points.length, r, a;\n while (++i < n) {\n point = points[i];\n r = point[0];\n a = point[1] - halfπ;\n point[0] = r * Math.cos(a);\n point[1] = r * Math.sin(a);\n }\n return points;\n }\n function d3_svg_area(projection) {\n var x0 = d3_geom_pointX, x1 = d3_geom_pointX, y0 = 0, y1 = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, interpolateReverse = interpolate, L = \"L\", tension = .7;\n function area(data) {\n var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function() {\n return x;\n } : d3_functor(x1), fy1 = y0 === y1 ? function() {\n return y;\n } : d3_functor(y1), x, y;\n function segment() {\n segments.push(\"M\", interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), \"Z\");\n }\n while (++i < n) {\n if (defined.call(this, d = data[i], i)) {\n points0.push([ x = +fx0.call(this, d, i), y = +fy0.call(this, d, i) ]);\n points1.push([ +fx1.call(this, d, i), +fy1.call(this, d, i) ]);\n } else if (points0.length) {\n segment();\n points0 = [];\n points1 = [];\n }\n }\n if (points0.length) segment();\n return segments.length ? segments.join(\"\") : null;\n }\n area.x = function(_) {\n if (!arguments.length) return x1;\n x0 = x1 = _;\n return area;\n };\n area.x0 = function(_) {\n if (!arguments.length) return x0;\n x0 = _;\n return area;\n };\n area.x1 = function(_) {\n if (!arguments.length) return x1;\n x1 = _;\n return area;\n };\n area.y = function(_) {\n if (!arguments.length) return y1;\n y0 = y1 = _;\n return area;\n };\n area.y0 = function(_) {\n if (!arguments.length) return y0;\n y0 = _;\n return area;\n };\n area.y1 = function(_) {\n if (!arguments.length) return y1;\n y1 = _;\n return area;\n };\n area.defined = function(_) {\n if (!arguments.length) return defined;\n defined = _;\n return area;\n };\n area.interpolate = function(_) {\n if (!arguments.length) return interpolateKey;\n if (typeof _ === \"function\") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;\n interpolateReverse = interpolate.reverse || interpolate;\n L = interpolate.closed ? \"M\" : \"L\";\n return area;\n };\n area.tension = function(_) {\n if (!arguments.length) return tension;\n tension = _;\n return area;\n };\n return area;\n }\n d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter;\n d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore;\n d3.svg.area = function() {\n return d3_svg_area(d3_identity);\n };\n d3.svg.area.radial = function() {\n var area = d3_svg_area(d3_svg_lineRadial);\n area.radius = area.x, delete area.x;\n area.innerRadius = area.x0, delete area.x0;\n area.outerRadius = area.x1, delete area.x1;\n area.angle = area.y, delete area.y;\n area.startAngle = area.y0, delete area.y0;\n area.endAngle = area.y1, delete area.y1;\n return area;\n };\n function d3_source(d) {\n return d.source;\n }\n function d3_target(d) {\n return d.target;\n }\n d3.svg.chord = function() {\n var source = d3_source, target = d3_target, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle;\n function chord(d, i) {\n var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i);\n return \"M\" + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + \"Z\";\n }\n function subgroup(self, f, d, i) {\n var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) - halfπ, a1 = endAngle.call(self, subgroup, i) - halfπ;\n return {\n r: r,\n a0: a0,\n a1: a1,\n p0: [ r * Math.cos(a0), r * Math.sin(a0) ],\n p1: [ r * Math.cos(a1), r * Math.sin(a1) ]\n };\n }\n function equals(a, b) {\n return a.a0 == b.a0 && a.a1 == b.a1;\n }\n function arc(r, p, a) {\n return \"A\" + r + \",\" + r + \" 0 \" + +(a > π) + \",1 \" + p;\n }\n function curve(r0, p0, r1, p1) {\n return \"Q 0,0 \" + p1;\n }\n chord.radius = function(v) {\n if (!arguments.length) return radius;\n radius = d3_functor(v);\n return chord;\n };\n chord.source = function(v) {\n if (!arguments.length) return source;\n source = d3_functor(v);\n return chord;\n };\n chord.target = function(v) {\n if (!arguments.length) return target;\n target = d3_functor(v);\n return chord;\n };\n chord.startAngle = function(v) {\n if (!arguments.length) return startAngle;\n startAngle = d3_functor(v);\n return chord;\n };\n chord.endAngle = function(v) {\n if (!arguments.length) return endAngle;\n endAngle = d3_functor(v);\n return chord;\n };\n return chord;\n };\n function d3_svg_chordRadius(d) {\n return d.radius;\n }\n d3.svg.diagonal = function() {\n var source = d3_source, target = d3_target, projection = d3_svg_diagonalProjection;\n function diagonal(d, i) {\n var p0 = source.call(this, d, i), p3 = target.call(this, d, i), m = (p0.y + p3.y) / 2, p = [ p0, {\n x: p0.x,\n y: m\n }, {\n x: p3.x,\n y: m\n }, p3 ];\n p = p.map(projection);\n return \"M\" + p[0] + \"C\" + p[1] + \" \" + p[2] + \" \" + p[3];\n }\n diagonal.source = function(x) {\n if (!arguments.length) return source;\n source = d3_functor(x);\n return diagonal;\n };\n diagonal.target = function(x) {\n if (!arguments.length) return target;\n target = d3_functor(x);\n return diagonal;\n };\n diagonal.projection = function(x) {\n if (!arguments.length) return projection;\n projection = x;\n return diagonal;\n };\n return diagonal;\n };\n function d3_svg_diagonalProjection(d) {\n return [ d.x, d.y ];\n }\n d3.svg.diagonal.radial = function() {\n var diagonal = d3.svg.diagonal(), projection = d3_svg_diagonalProjection, projection_ = diagonal.projection;\n diagonal.projection = function(x) {\n return arguments.length ? projection_(d3_svg_diagonalRadialProjection(projection = x)) : projection;\n };\n return diagonal;\n };\n function d3_svg_diagonalRadialProjection(projection) {\n return function() {\n var d = projection.apply(this, arguments), r = d[0], a = d[1] - halfπ;\n return [ r * Math.cos(a), r * Math.sin(a) ];\n };\n }\n d3.svg.symbol = function() {\n var type = d3_svg_symbolType, size = d3_svg_symbolSize;\n function symbol(d, i) {\n return (d3_svg_symbols.get(type.call(this, d, i)) || d3_svg_symbolCircle)(size.call(this, d, i));\n }\n symbol.type = function(x) {\n if (!arguments.length) return type;\n type = d3_functor(x);\n return symbol;\n };\n symbol.size = function(x) {\n if (!arguments.length) return size;\n size = d3_functor(x);\n return symbol;\n };\n return symbol;\n };\n function d3_svg_symbolSize() {\n return 64;\n }\n function d3_svg_symbolType() {\n return \"circle\";\n }\n function d3_svg_symbolCircle(size) {\n var r = Math.sqrt(size / π);\n return \"M0,\" + r + \"A\" + r + \",\" + r + \" 0 1,1 0,\" + -r + \"A\" + r + \",\" + r + \" 0 1,1 0,\" + r + \"Z\";\n }\n var d3_svg_symbols = d3.map({\n circle: d3_svg_symbolCircle,\n cross: function(size) {\n var r = Math.sqrt(size / 5) / 2;\n return \"M\" + -3 * r + \",\" + -r + \"H\" + -r + \"V\" + -3 * r + \"H\" + r + \"V\" + -r + \"H\" + 3 * r + \"V\" + r + \"H\" + r + \"V\" + 3 * r + \"H\" + -r + \"V\" + r + \"H\" + -3 * r + \"Z\";\n },\n diamond: function(size) {\n var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), rx = ry * d3_svg_symbolTan30;\n return \"M0,\" + -ry + \"L\" + rx + \",0\" + \" 0,\" + ry + \" \" + -rx + \",0\" + \"Z\";\n },\n square: function(size) {\n var r = Math.sqrt(size) / 2;\n return \"M\" + -r + \",\" + -r + \"L\" + r + \",\" + -r + \" \" + r + \",\" + r + \" \" + -r + \",\" + r + \"Z\";\n },\n \"triangle-down\": function(size) {\n var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;\n return \"M0,\" + ry + \"L\" + rx + \",\" + -ry + \" \" + -rx + \",\" + -ry + \"Z\";\n },\n \"triangle-up\": function(size) {\n var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;\n return \"M0,\" + -ry + \"L\" + rx + \",\" + ry + \" \" + -rx + \",\" + ry + \"Z\";\n }\n });\n d3.svg.symbolTypes = d3_svg_symbols.keys();\n var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * d3_radians);\n d3_selectionPrototype.transition = function(name) {\n var id = d3_transitionInheritId || ++d3_transitionId, ns = d3_transitionNamespace(name), subgroups = [], subgroup, node, transition = d3_transitionInherit || {\n time: Date.now(),\n ease: d3_ease_cubicInOut,\n delay: 0,\n duration: 250\n };\n for (var j = -1, m = this.length; ++j < m; ) {\n subgroups.push(subgroup = []);\n for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) d3_transitionNode(node, i, ns, id, transition);\n subgroup.push(node);\n }\n }\n return d3_transition(subgroups, ns, id);\n };\n d3_selectionPrototype.interrupt = function(name) {\n return this.each(name == null ? d3_selection_interrupt : d3_selection_interruptNS(d3_transitionNamespace(name)));\n };\n var d3_selection_interrupt = d3_selection_interruptNS(d3_transitionNamespace());\n function d3_selection_interruptNS(ns) {\n return function() {\n var lock, activeId, active;\n if ((lock = this[ns]) && (active = lock[activeId = lock.active])) {\n active.timer.c = null;\n active.timer.t = NaN;\n if (--lock.count) delete lock[activeId]; else delete this[ns];\n lock.active += .5;\n active.event && active.event.interrupt.call(this, this.__data__, active.index);\n }\n };\n }\n function d3_transition(groups, ns, id) {\n d3_subclass(groups, d3_transitionPrototype);\n groups.namespace = ns;\n groups.id = id;\n return groups;\n }\n var d3_transitionPrototype = [], d3_transitionId = 0, d3_transitionInheritId, d3_transitionInherit;\n d3_transitionPrototype.call = d3_selectionPrototype.call;\n d3_transitionPrototype.empty = d3_selectionPrototype.empty;\n d3_transitionPrototype.node = d3_selectionPrototype.node;\n d3_transitionPrototype.size = d3_selectionPrototype.size;\n d3.transition = function(selection, name) {\n return selection && selection.transition ? d3_transitionInheritId ? selection.transition(name) : selection : d3.selection().transition(selection);\n };\n d3.transition.prototype = d3_transitionPrototype;\n d3_transitionPrototype.select = function(selector) {\n var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnode, node;\n selector = d3_selection_selector(selector);\n for (var j = -1, m = this.length; ++j < m; ) {\n subgroups.push(subgroup = []);\n for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i, j))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n d3_transitionNode(subnode, i, ns, id, node[ns][id]);\n subgroup.push(subnode);\n } else {\n subgroup.push(null);\n }\n }\n }\n return d3_transition(subgroups, ns, id);\n };\n d3_transitionPrototype.selectAll = function(selector) {\n var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnodes, node, subnode, transition;\n selector = d3_selection_selectorAll(selector);\n for (var j = -1, m = this.length; ++j < m; ) {\n for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) {\n transition = node[ns][id];\n subnodes = selector.call(node, node.__data__, i, j);\n subgroups.push(subgroup = []);\n for (var k = -1, o = subnodes.length; ++k < o; ) {\n if (subnode = subnodes[k]) d3_transitionNode(subnode, k, ns, id, transition);\n subgroup.push(subnode);\n }\n }\n }\n }\n return d3_transition(subgroups, ns, id);\n };\n d3_transitionPrototype.filter = function(filter) {\n var subgroups = [], subgroup, group, node;\n if (typeof filter !== \"function\") filter = d3_selection_filter(filter);\n for (var j = 0, m = this.length; j < m; j++) {\n subgroups.push(subgroup = []);\n for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n if ((node = group[i]) && filter.call(node, node.__data__, i, j)) {\n subgroup.push(node);\n }\n }\n }\n return d3_transition(subgroups, this.namespace, this.id);\n };\n d3_transitionPrototype.tween = function(name, tween) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 2) return this.node()[ns][id].tween.get(name);\n return d3_selection_each(this, tween == null ? function(node) {\n node[ns][id].tween.remove(name);\n } : function(node) {\n node[ns][id].tween.set(name, tween);\n });\n };\n function d3_transition_tween(groups, name, value, tween) {\n var id = groups.id, ns = groups.namespace;\n return d3_selection_each(groups, typeof value === \"function\" ? function(node, i, j) {\n node[ns][id].tween.set(name, tween(value.call(node, node.__data__, i, j)));\n } : (value = tween(value), function(node) {\n node[ns][id].tween.set(name, value);\n }));\n }\n d3_transitionPrototype.attr = function(nameNS, value) {\n if (arguments.length < 2) {\n for (value in nameNS) this.attr(value, nameNS[value]);\n return this;\n }\n var interpolate = nameNS == \"transform\" ? d3_interpolateTransform : d3_interpolate, name = d3.ns.qualify(nameNS);\n function attrNull() {\n this.removeAttribute(name);\n }\n function attrNullNS() {\n this.removeAttributeNS(name.space, name.local);\n }\n function attrTween(b) {\n return b == null ? attrNull : (b += \"\", function() {\n var a = this.getAttribute(name), i;\n return a !== b && (i = interpolate(a, b), function(t) {\n this.setAttribute(name, i(t));\n });\n });\n }\n function attrTweenNS(b) {\n return b == null ? attrNullNS : (b += \"\", function() {\n var a = this.getAttributeNS(name.space, name.local), i;\n return a !== b && (i = interpolate(a, b), function(t) {\n this.setAttributeNS(name.space, name.local, i(t));\n });\n });\n }\n return d3_transition_tween(this, \"attr.\" + nameNS, value, name.local ? attrTweenNS : attrTween);\n };\n d3_transitionPrototype.attrTween = function(nameNS, tween) {\n var name = d3.ns.qualify(nameNS);\n function attrTween(d, i) {\n var f = tween.call(this, d, i, this.getAttribute(name));\n return f && function(t) {\n this.setAttribute(name, f(t));\n };\n }\n function attrTweenNS(d, i) {\n var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local));\n return f && function(t) {\n this.setAttributeNS(name.space, name.local, f(t));\n };\n }\n return this.tween(\"attr.\" + nameNS, name.local ? attrTweenNS : attrTween);\n };\n d3_transitionPrototype.style = function(name, value, priority) {\n var n = arguments.length;\n if (n < 3) {\n if (typeof name !== \"string\") {\n if (n < 2) value = \"\";\n for (priority in name) this.style(priority, name[priority], value);\n return this;\n }\n priority = \"\";\n }\n function styleNull() {\n this.style.removeProperty(name);\n }\n function styleString(b) {\n return b == null ? styleNull : (b += \"\", function() {\n var a = d3_window(this).getComputedStyle(this, null).getPropertyValue(name), i;\n return a !== b && (i = d3_interpolate(a, b), function(t) {\n this.style.setProperty(name, i(t), priority);\n });\n });\n }\n return d3_transition_tween(this, \"style.\" + name, value, styleString);\n };\n d3_transitionPrototype.styleTween = function(name, tween, priority) {\n if (arguments.length < 3) priority = \"\";\n function styleTween(d, i) {\n var f = tween.call(this, d, i, d3_window(this).getComputedStyle(this, null).getPropertyValue(name));\n return f && function(t) {\n this.style.setProperty(name, f(t), priority);\n };\n }\n return this.tween(\"style.\" + name, styleTween);\n };\n d3_transitionPrototype.text = function(value) {\n return d3_transition_tween(this, \"text\", value, d3_transition_text);\n };\n function d3_transition_text(b) {\n if (b == null) b = \"\";\n return function() {\n this.textContent = b;\n };\n }\n d3_transitionPrototype.remove = function() {\n var ns = this.namespace;\n return this.each(\"end.transition\", function() {\n var p;\n if (this[ns].count < 2 && (p = this.parentNode)) p.removeChild(this);\n });\n };\n d3_transitionPrototype.ease = function(value) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 1) return this.node()[ns][id].ease;\n if (typeof value !== \"function\") value = d3.ease.apply(d3, arguments);\n return d3_selection_each(this, function(node) {\n node[ns][id].ease = value;\n });\n };\n d3_transitionPrototype.delay = function(value) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 1) return this.node()[ns][id].delay;\n return d3_selection_each(this, typeof value === \"function\" ? function(node, i, j) {\n node[ns][id].delay = +value.call(node, node.__data__, i, j);\n } : (value = +value, function(node) {\n node[ns][id].delay = value;\n }));\n };\n d3_transitionPrototype.duration = function(value) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 1) return this.node()[ns][id].duration;\n return d3_selection_each(this, typeof value === \"function\" ? function(node, i, j) {\n node[ns][id].duration = Math.max(1, value.call(node, node.__data__, i, j));\n } : (value = Math.max(1, value), function(node) {\n node[ns][id].duration = value;\n }));\n };\n d3_transitionPrototype.each = function(type, listener) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 2) {\n var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId;\n try {\n d3_transitionInheritId = id;\n d3_selection_each(this, function(node, i, j) {\n d3_transitionInherit = node[ns][id];\n type.call(node, node.__data__, i, j);\n });\n } finally {\n d3_transitionInherit = inherit;\n d3_transitionInheritId = inheritId;\n }\n } else {\n d3_selection_each(this, function(node) {\n var transition = node[ns][id];\n (transition.event || (transition.event = d3.dispatch(\"start\", \"end\", \"interrupt\"))).on(type, listener);\n });\n }\n return this;\n };\n d3_transitionPrototype.transition = function() {\n var id0 = this.id, id1 = ++d3_transitionId, ns = this.namespace, subgroups = [], subgroup, group, node, transition;\n for (var j = 0, m = this.length; j < m; j++) {\n subgroups.push(subgroup = []);\n for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n if (node = group[i]) {\n transition = node[ns][id0];\n d3_transitionNode(node, i, ns, id1, {\n time: transition.time,\n ease: transition.ease,\n delay: transition.delay + transition.duration,\n duration: transition.duration\n });\n }\n subgroup.push(node);\n }\n }\n return d3_transition(subgroups, ns, id1);\n };\n function d3_transitionNamespace(name) {\n return name == null ? \"__transition__\" : \"__transition_\" + name + \"__\";\n }\n function d3_transitionNode(node, i, ns, id, inherit) {\n var lock = node[ns] || (node[ns] = {\n active: 0,\n count: 0\n }), transition = lock[id], time, timer, duration, ease, tweens;\n function schedule(elapsed) {\n var delay = transition.delay;\n timer.t = delay + time;\n if (delay <= elapsed) return start(elapsed - delay);\n timer.c = start;\n }\n function start(elapsed) {\n var activeId = lock.active, active = lock[activeId];\n if (active) {\n active.timer.c = null;\n active.timer.t = NaN;\n --lock.count;\n delete lock[activeId];\n active.event && active.event.interrupt.call(node, node.__data__, active.index);\n }\n for (var cancelId in lock) {\n if (+cancelId < id) {\n var cancel = lock[cancelId];\n cancel.timer.c = null;\n cancel.timer.t = NaN;\n --lock.count;\n delete lock[cancelId];\n }\n }\n timer.c = tick;\n d3_timer(function() {\n if (timer.c && tick(elapsed || 1)) {\n timer.c = null;\n timer.t = NaN;\n }\n return 1;\n }, 0, time);\n lock.active = id;\n transition.event && transition.event.start.call(node, node.__data__, i);\n tweens = [];\n transition.tween.forEach(function(key, value) {\n if (value = value.call(node, node.__data__, i)) {\n tweens.push(value);\n }\n });\n ease = transition.ease;\n duration = transition.duration;\n }\n function tick(elapsed) {\n var t = elapsed / duration, e = ease(t), n = tweens.length;\n while (n > 0) {\n tweens[--n].call(node, e);\n }\n if (t >= 1) {\n transition.event && transition.event.end.call(node, node.__data__, i);\n if (--lock.count) delete lock[id]; else delete node[ns];\n return 1;\n }\n }\n if (!transition) {\n time = inherit.time;\n timer = d3_timer(schedule, 0, time);\n transition = lock[id] = {\n tween: new d3_Map(),\n time: time,\n timer: timer,\n delay: inherit.delay,\n duration: inherit.duration,\n ease: inherit.ease,\n index: i\n };\n inherit = null;\n ++lock.count;\n }\n }\n d3.svg.axis = function() {\n var scale = d3.scale.linear(), orient = d3_svg_axisDefaultOrient, innerTickSize = 6, outerTickSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_;\n function axis(g) {\n g.each(function() {\n var g = d3.select(this);\n var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = scale.copy();\n var ticks = tickValues == null ? scale1.ticks ? scale1.ticks.apply(scale1, tickArguments_) : scale1.domain() : tickValues, tickFormat = tickFormat_ == null ? scale1.tickFormat ? scale1.tickFormat.apply(scale1, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(\".tick\").data(ticks, scale1), tickEnter = tick.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", ε), tickExit = d3.transition(tick.exit()).style(\"opacity\", ε).remove(), tickUpdate = d3.transition(tick.order()).style(\"opacity\", 1), tickSpacing = Math.max(innerTickSize, 0) + tickPadding, tickTransform;\n var range = d3_scaleRange(scale1), path = g.selectAll(\".domain\").data([ 0 ]), pathUpdate = (path.enter().append(\"path\").attr(\"class\", \"domain\"), \n d3.transition(path));\n tickEnter.append(\"line\");\n tickEnter.append(\"text\");\n var lineEnter = tickEnter.select(\"line\"), lineUpdate = tickUpdate.select(\"line\"), text = tick.select(\"text\").text(tickFormat), textEnter = tickEnter.select(\"text\"), textUpdate = tickUpdate.select(\"text\"), sign = orient === \"top\" || orient === \"left\" ? -1 : 1, x1, x2, y1, y2;\n if (orient === \"bottom\" || orient === \"top\") {\n tickTransform = d3_svg_axisX, x1 = \"x\", y1 = \"y\", x2 = \"x2\", y2 = \"y2\";\n text.attr(\"dy\", sign < 0 ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\");\n pathUpdate.attr(\"d\", \"M\" + range[0] + \",\" + sign * outerTickSize + \"V0H\" + range[1] + \"V\" + sign * outerTickSize);\n } else {\n tickTransform = d3_svg_axisY, x1 = \"y\", y1 = \"x\", x2 = \"y2\", y2 = \"x2\";\n text.attr(\"dy\", \".32em\").style(\"text-anchor\", sign < 0 ? \"end\" : \"start\");\n pathUpdate.attr(\"d\", \"M\" + sign * outerTickSize + \",\" + range[0] + \"H0V\" + range[1] + \"H\" + sign * outerTickSize);\n }\n lineEnter.attr(y2, sign * innerTickSize);\n textEnter.attr(y1, sign * tickSpacing);\n lineUpdate.attr(x2, 0).attr(y2, sign * innerTickSize);\n textUpdate.attr(x1, 0).attr(y1, sign * tickSpacing);\n if (scale1.rangeBand) {\n var x = scale1, dx = x.rangeBand() / 2;\n scale0 = scale1 = function(d) {\n return x(d) + dx;\n };\n } else if (scale0.rangeBand) {\n scale0 = scale1;\n } else {\n tickExit.call(tickTransform, scale1, scale0);\n }\n tickEnter.call(tickTransform, scale0, scale1);\n tickUpdate.call(tickTransform, scale1, scale1);\n });\n }\n axis.scale = function(x) {\n if (!arguments.length) return scale;\n scale = x;\n return axis;\n };\n axis.orient = function(x) {\n if (!arguments.length) return orient;\n orient = x in d3_svg_axisOrients ? x + \"\" : d3_svg_axisDefaultOrient;\n return axis;\n };\n axis.ticks = function() {\n if (!arguments.length) return tickArguments_;\n tickArguments_ = d3_array(arguments);\n return axis;\n };\n axis.tickValues = function(x) {\n if (!arguments.length) return tickValues;\n tickValues = x;\n return axis;\n };\n axis.tickFormat = function(x) {\n if (!arguments.length) return tickFormat_;\n tickFormat_ = x;\n return axis;\n };\n axis.tickSize = function(x) {\n var n = arguments.length;\n if (!n) return innerTickSize;\n innerTickSize = +x;\n outerTickSize = +arguments[n - 1];\n return axis;\n };\n axis.innerTickSize = function(x) {\n if (!arguments.length) return innerTickSize;\n innerTickSize = +x;\n return axis;\n };\n axis.outerTickSize = function(x) {\n if (!arguments.length) return outerTickSize;\n outerTickSize = +x;\n return axis;\n };\n axis.tickPadding = function(x) {\n if (!arguments.length) return tickPadding;\n tickPadding = +x;\n return axis;\n };\n axis.tickSubdivide = function() {\n return arguments.length && axis;\n };\n return axis;\n };\n var d3_svg_axisDefaultOrient = \"bottom\", d3_svg_axisOrients = {\n top: 1,\n right: 1,\n bottom: 1,\n left: 1\n };\n function d3_svg_axisX(selection, x0, x1) {\n selection.attr(\"transform\", function(d) {\n var v0 = x0(d);\n return \"translate(\" + (isFinite(v0) ? v0 : x1(d)) + \",0)\";\n });\n }\n function d3_svg_axisY(selection, y0, y1) {\n selection.attr(\"transform\", function(d) {\n var v0 = y0(d);\n return \"translate(0,\" + (isFinite(v0) ? v0 : y1(d)) + \")\";\n });\n }\n d3.svg.brush = function() {\n var event = d3_eventDispatch(brush, \"brushstart\", \"brush\", \"brushend\"), x = null, y = null, xExtent = [ 0, 0 ], yExtent = [ 0, 0 ], xExtentDomain, yExtentDomain, xClamp = true, yClamp = true, resizes = d3_svg_brushResizes[0];\n function brush(g) {\n g.each(function() {\n var g = d3.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", brushstart).on(\"touchstart.brush\", brushstart);\n var background = g.selectAll(\".background\").data([ 0 ]);\n background.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\");\n g.selectAll(\".extent\").data([ 0 ]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n var resize = g.selectAll(\".resize\").data(resizes, d3_identity);\n resize.exit().remove();\n resize.enter().append(\"g\").attr(\"class\", function(d) {\n return \"resize \" + d;\n }).style(\"cursor\", function(d) {\n return d3_svg_brushCursor[d];\n }).append(\"rect\").attr(\"x\", function(d) {\n return /[ew]$/.test(d) ? -3 : null;\n }).attr(\"y\", function(d) {\n return /^[ns]/.test(d) ? -3 : null;\n }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\");\n resize.style(\"display\", brush.empty() ? \"none\" : null);\n var gUpdate = d3.transition(g), backgroundUpdate = d3.transition(background), range;\n if (x) {\n range = d3_scaleRange(x);\n backgroundUpdate.attr(\"x\", range[0]).attr(\"width\", range[1] - range[0]);\n redrawX(gUpdate);\n }\n if (y) {\n range = d3_scaleRange(y);\n backgroundUpdate.attr(\"y\", range[0]).attr(\"height\", range[1] - range[0]);\n redrawY(gUpdate);\n }\n redraw(gUpdate);\n });\n }\n brush.event = function(g) {\n g.each(function() {\n var event_ = event.of(this, arguments), extent1 = {\n x: xExtent,\n y: yExtent,\n i: xExtentDomain,\n j: yExtentDomain\n }, extent0 = this.__chart__ || extent1;\n this.__chart__ = extent1;\n if (d3_transitionInheritId) {\n d3.select(this).transition().each(\"start.brush\", function() {\n xExtentDomain = extent0.i;\n yExtentDomain = extent0.j;\n xExtent = extent0.x;\n yExtent = extent0.y;\n event_({\n type: \"brushstart\"\n });\n }).tween(\"brush:brush\", function() {\n var xi = d3_interpolateArray(xExtent, extent1.x), yi = d3_interpolateArray(yExtent, extent1.y);\n xExtentDomain = yExtentDomain = null;\n return function(t) {\n xExtent = extent1.x = xi(t);\n yExtent = extent1.y = yi(t);\n event_({\n type: \"brush\",\n mode: \"resize\"\n });\n };\n }).each(\"end.brush\", function() {\n xExtentDomain = extent1.i;\n yExtentDomain = extent1.j;\n event_({\n type: \"brush\",\n mode: \"resize\"\n });\n event_({\n type: \"brushend\"\n });\n });\n } else {\n event_({\n type: \"brushstart\"\n });\n event_({\n type: \"brush\",\n mode: \"resize\"\n });\n event_({\n type: \"brushend\"\n });\n }\n });\n };\n function redraw(g) {\n g.selectAll(\".resize\").attr(\"transform\", function(d) {\n return \"translate(\" + xExtent[+/e$/.test(d)] + \",\" + yExtent[+/^s/.test(d)] + \")\";\n });\n }\n function redrawX(g) {\n g.select(\".extent\").attr(\"x\", xExtent[0]);\n g.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", xExtent[1] - xExtent[0]);\n }\n function redrawY(g) {\n g.select(\".extent\").attr(\"y\", yExtent[0]);\n g.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", yExtent[1] - yExtent[0]);\n }\n function brushstart() {\n var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed(\"extent\"), dragRestore = d3_event_dragSuppress(target), center, origin = d3.mouse(target), offset;\n var w = d3.select(d3_window(target)).on(\"keydown.brush\", keydown).on(\"keyup.brush\", keyup);\n if (d3.event.changedTouches) {\n w.on(\"touchmove.brush\", brushmove).on(\"touchend.brush\", brushend);\n } else {\n w.on(\"mousemove.brush\", brushmove).on(\"mouseup.brush\", brushend);\n }\n g.interrupt().selectAll(\"*\").interrupt();\n if (dragging) {\n origin[0] = xExtent[0] - origin[0];\n origin[1] = yExtent[0] - origin[1];\n } else if (resizing) {\n var ex = +/w$/.test(resizing), ey = +/^n/.test(resizing);\n offset = [ xExtent[1 - ex] - origin[0], yExtent[1 - ey] - origin[1] ];\n origin[0] = xExtent[ex];\n origin[1] = yExtent[ey];\n } else if (d3.event.altKey) center = origin.slice();\n g.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null);\n d3.select(\"body\").style(\"cursor\", eventTarget.style(\"cursor\"));\n event_({\n type: \"brushstart\"\n });\n brushmove();\n function keydown() {\n if (d3.event.keyCode == 32) {\n if (!dragging) {\n center = null;\n origin[0] -= xExtent[1];\n origin[1] -= yExtent[1];\n dragging = 2;\n }\n d3_eventPreventDefault();\n }\n }\n function keyup() {\n if (d3.event.keyCode == 32 && dragging == 2) {\n origin[0] += xExtent[1];\n origin[1] += yExtent[1];\n dragging = 0;\n d3_eventPreventDefault();\n }\n }\n function brushmove() {\n var point = d3.mouse(target), moved = false;\n if (offset) {\n point[0] += offset[0];\n point[1] += offset[1];\n }\n if (!dragging) {\n if (d3.event.altKey) {\n if (!center) center = [ (xExtent[0] + xExtent[1]) / 2, (yExtent[0] + yExtent[1]) / 2 ];\n origin[0] = xExtent[+(point[0] < center[0])];\n origin[1] = yExtent[+(point[1] < center[1])];\n } else center = null;\n }\n if (resizingX && move1(point, x, 0)) {\n redrawX(g);\n moved = true;\n }\n if (resizingY && move1(point, y, 1)) {\n redrawY(g);\n moved = true;\n }\n if (moved) {\n redraw(g);\n event_({\n type: \"brush\",\n mode: dragging ? \"move\" : \"resize\"\n });\n }\n }\n function move1(point, scale, i) {\n var range = d3_scaleRange(scale), r0 = range[0], r1 = range[1], position = origin[i], extent = i ? yExtent : xExtent, size = extent[1] - extent[0], min, max;\n if (dragging) {\n r0 -= position;\n r1 -= size + position;\n }\n min = (i ? yClamp : xClamp) ? Math.max(r0, Math.min(r1, point[i])) : point[i];\n if (dragging) {\n max = (min += position) + size;\n } else {\n if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min));\n if (position < min) {\n max = min;\n min = position;\n } else {\n max = position;\n }\n }\n if (extent[0] != min || extent[1] != max) {\n if (i) yExtentDomain = null; else xExtentDomain = null;\n extent[0] = min;\n extent[1] = max;\n return true;\n }\n }\n function brushend() {\n brushmove();\n g.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", brush.empty() ? \"none\" : null);\n d3.select(\"body\").style(\"cursor\", null);\n w.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null);\n dragRestore();\n event_({\n type: \"brushend\"\n });\n }\n }\n brush.x = function(z) {\n if (!arguments.length) return x;\n x = z;\n resizes = d3_svg_brushResizes[!x << 1 | !y];\n return brush;\n };\n brush.y = function(z) {\n if (!arguments.length) return y;\n y = z;\n resizes = d3_svg_brushResizes[!x << 1 | !y];\n return brush;\n };\n brush.clamp = function(z) {\n if (!arguments.length) return x && y ? [ xClamp, yClamp ] : x ? xClamp : y ? yClamp : null;\n if (x && y) xClamp = !!z[0], yClamp = !!z[1]; else if (x) xClamp = !!z; else if (y) yClamp = !!z;\n return brush;\n };\n brush.extent = function(z) {\n var x0, x1, y0, y1, t;\n if (!arguments.length) {\n if (x) {\n if (xExtentDomain) {\n x0 = xExtentDomain[0], x1 = xExtentDomain[1];\n } else {\n x0 = xExtent[0], x1 = xExtent[1];\n if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1);\n if (x1 < x0) t = x0, x0 = x1, x1 = t;\n }\n }\n if (y) {\n if (yExtentDomain) {\n y0 = yExtentDomain[0], y1 = yExtentDomain[1];\n } else {\n y0 = yExtent[0], y1 = yExtent[1];\n if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1);\n if (y1 < y0) t = y0, y0 = y1, y1 = t;\n }\n }\n return x && y ? [ [ x0, y0 ], [ x1, y1 ] ] : x ? [ x0, x1 ] : y && [ y0, y1 ];\n }\n if (x) {\n x0 = z[0], x1 = z[1];\n if (y) x0 = x0[0], x1 = x1[0];\n xExtentDomain = [ x0, x1 ];\n if (x.invert) x0 = x(x0), x1 = x(x1);\n if (x1 < x0) t = x0, x0 = x1, x1 = t;\n if (x0 != xExtent[0] || x1 != xExtent[1]) xExtent = [ x0, x1 ];\n }\n if (y) {\n y0 = z[0], y1 = z[1];\n if (x) y0 = y0[1], y1 = y1[1];\n yExtentDomain = [ y0, y1 ];\n if (y.invert) y0 = y(y0), y1 = y(y1);\n if (y1 < y0) t = y0, y0 = y1, y1 = t;\n if (y0 != yExtent[0] || y1 != yExtent[1]) yExtent = [ y0, y1 ];\n }\n return brush;\n };\n brush.clear = function() {\n if (!brush.empty()) {\n xExtent = [ 0, 0 ], yExtent = [ 0, 0 ];\n xExtentDomain = yExtentDomain = null;\n }\n return brush;\n };\n brush.empty = function() {\n return !!x && xExtent[0] == xExtent[1] || !!y && yExtent[0] == yExtent[1];\n };\n return d3.rebind(brush, event, \"on\");\n };\n var d3_svg_brushCursor = {\n n: \"ns-resize\",\n e: \"ew-resize\",\n s: \"ns-resize\",\n w: \"ew-resize\",\n nw: \"nwse-resize\",\n ne: \"nesw-resize\",\n se: \"nwse-resize\",\n sw: \"nesw-resize\"\n };\n var d3_svg_brushResizes = [ [ \"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\" ], [ \"e\", \"w\" ], [ \"n\", \"s\" ], [] ];\n d3.text = d3_xhrType(function(request) {\n return request.responseText;\n });\n d3.json = function(url, callback) {\n return d3_xhr(url, \"application/json\", d3_json, callback);\n };\n function d3_json(request) {\n return JSON.parse(request.responseText);\n }\n d3.html = function(url, callback) {\n return d3_xhr(url, \"text/html\", d3_html, callback);\n };\n function d3_html(request) {\n var range = d3_document.createRange();\n range.selectNode(d3_document.body);\n return range.createContextualFragment(request.responseText);\n }\n d3.xml = d3_xhrType(function(request) {\n return request.responseXML;\n });\n if (typeof define === \"function\" && define.amd) define(d3); else if (typeof module === \"object\" && module.exports) module.exports = d3; else this.d3 = d3;\n}.apply(self);"],"names":["d3","version","d3_arraySlice","slice","d3_array","list","call","d3_document","self","document","d3_documentElement","node","ownerDocument","documentElement","d3_window","defaultView","childNodes","nodeType","e","i","length","array","Array","Date","now","createElement","style","setProperty","error","d3_element_prototype","this","Element","prototype","d3_element_setAttribute","setAttribute","d3_element_setAttributeNS","setAttributeNS","d3_style_prototype","CSSStyleDeclaration","d3_style_setProperty","name","value","space","local","priority","d3_ascending","a","b","NaN","d3_number","x","d3_numeric","isNaN","d3_bisector","compare","left","lo","hi","arguments","mid","right","ascending","descending","min","f","n","max","extent","c","sum","s","mean","j","quantile","values","p","H","h","Math","floor","v","median","numbers","push","sort","variance","d","m","deviation","apply","sqrt","d3_bisect","d3_transposeLength","bisectLeft","bisect","bisectRight","bisector","shuffle","i0","i1","t","random","permute","indexes","permutes","pairs","p1","transpose","matrix","row","zip","keys","map","key","entries","merge","arrays","merged","abs","d3_class","ctor","properties","Object","defineProperty","enumerable","d3_Map","_","create","range","start","stop","step","Infinity","Error","k","d3_range_integerScale","object","forEach","set","isArray","o","d3_map_escape","d3_map_unescape","d3_map_has","d3_map_remove","d3_map_keys","d3_map_size","size","d3_map_empty","d3_Set","d3_identity","d3_rebind","target","source","method","d3_vendorSymbol","charAt","toUpperCase","d3_vendorPrefixes","prefixName","has","get","remove","empty","nest","sortValues","rollup","sortKeys","mapType","depth","keyValue","setter","valuesByKey","sortKey","keyMap","order","add","behavior","rebind","d3_noop","d3_dispatch","d3_dispatch_event","dispatch","listeners","listenerByName","event","l","z","on","listener","indexOf","concat","d3_eventPreventDefault","preventDefault","d3_eventSource","sourceEvent","d3_eventDispatch","of","thiz","argumentz","e1","e0","type","hasOwnProperty","requote","replace","d3_requote_re","d3_subclass","__proto__","property","d3_selection","groups","d3_selectionPrototype","d3_select","querySelector","d3_selectAll","querySelectorAll","d3_selectMatches","d3_selectMatcher","matches","Sizzle","matchesSelector","selection","select","d3_selection_selector","selector","d3_selection_selectorAll","subgroup","subnode","group","subgroups","parentNode","__data__","selectAll","d3_nsXhtml","d3_nsPrefix","svg","xhtml","xlink","xml","xmlns","d3_selection_attr","ns","qualify","removeAttributeNS","removeAttribute","d3_collapse","trim","d3_selection_classedRe","RegExp","d3_selection_classes","split","d3_selection_classed","d3_selection_classedName","re","classList","getAttribute","lastIndex","test","d3_selection_style","removeProperty","d3_selection_property","d3_selection_creator","createElementNS","namespace","namespaceURI","d3_selectionRemove","parent","removeChild","d3_selection_dataNode","data","d3_selection_filter","d3_selection_sortComparator","comparator","d3_selection_each","callback","d3_selection_enter","d3_selection_enterPrototype","prefix","attr","getAttributeNS","each","classed","contains","getComputedStyle","getPropertyValue","text","textContent","html","innerHTML","append","appendChild","insert","before","insertBefore","bind","groupData","nodeData","n0","updateNodes","enterNodes","exitNodes","nodeByKeyValue","keyValues","update","enter","exit","datum","filter","next","nextSibling","args","d3_selection_on","capture","wrap","d3_selection_onListener","d3_selection_onFilters","onRemove","removeEventListener","$","d3_selection_onFilter","addEventListener","match","upgroup","j0","d3_selection_enterInsertBefore","nodes","mouseenter","mouseleave","related","relatedTarget","compareDocumentPosition","d3_event_dragSelect","d3_event_dragId","d3_event_dragSuppress","click","w","suppressClick","off","setTimeout","mouse","container","d3_mousePoint","d3_mouse_bug44083","navigator","userAgent","changedTouches","ownerSVGElement","createSVGPoint","point","window","scrollX","scrollY","ctm","position","top","margin","padding","border","getScreenCTM","pageX","y","pageY","clientX","clientY","matrixTransform","inverse","rect","getBoundingClientRect","clientLeft","clientTop","d3_behavior_dragTouchId","identifier","touch","touches","drag","origin","mousedown","dragstart","touchstart","id","subject","move","end","dragOffset","that","correspondingElement","dragged","dragId","dragName","dragSubject","dx","dy","position1","position0","dragRestore","ε","ε2","π","PI","τ","τε","halfπ","d3_radians","d3_degrees","d3_asin","asin","d3_cosh","exp","ρ","SQRT2","interpolateZoom","p0","S","ux0","uy0","w0","ux1","uy1","w1","d2","log","d1","b0","b1","r0","r1","coshr0","u","d3_sinh","duration","zoom","translate0","center0","center","mousewheelTimer","touchtime","x0","x1","y0","y1","view","scaleExtent","d3_behavior_zoomInfinity","zooming","mousemove","mouseup","g","mousedowned","d3_behavior_zoomWheel","mousewheeled","dblclicked","touchstarted","location","scaleTo","translateTo","zoomTo","__chart__","pow","transition","rescale","domain","invert","zoomstarted","zoomed","scale","translate","zoomended","location0","d3_selection_interrupt","scale0","locations0","distance0","zoomName","touchmove","touchend","targets","relocate","started","moved","ended","changed","LN2","q","l0","l1","distance1","scale1","clearTimeout","d3_behavior_zoomDelta","shiftKey","ceil","deltaY","deltaMode","wheelDelta","detail","view1","d3_transitionInheritId","tween","cx","cy","copy","d3_color","d3_hsl","d3_rgb_parse","d3_rgb_hsl","color","toString","rgb","hsl","d3_hslPrototype","d3_hsl_rgb","m1","m2","vv","round","d3_rgb","d3_hcl","d3_lab_hcl","d3_lab","d3_rgb_lab","r","brighter","darker","hcl","d3_hclPrototype","d3_hcl_lab","cos","sin","d3_lab_K","lab","d3_lab_X","d3_lab_Y","d3_lab_Z","d3_labPrototype","d3_lab_rgb","d3_xyz_rgb","d3_lab_xyz","atan2","d3_xyz_lab","d3_rgbNumber","d3_rgbString","d3_rgbPrototype","d3_rgb_hex","format","exec","toLowerCase","parseFloat","d3_rgb_parseNumber","d3_rgb_names","parseInt","d3_rgb_xyz","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","d3_functor","d3_xhrType","response","url","mimeType","d3_xhr","xhr","headers","request","XMLHttpRequest","responseType","respond","result","status","responseText","d3_xhrHasResponse","load","XDomainRequest","onload","onerror","onreadystatechange","readyState","onprogress","progress","header","send","open","setRequestHeader","overrideMimeType","beforesend","abort","d3_xhr_fixCallback","functor","dsv","delimiter","reFormat","delimiterCode","charCodeAt","typedResponse","parse","formatRow","formatValue","join","parseRows","obj","len","eol","EOL","EOF","rows","N","I","token","formatRows","fieldSet","fields","field","csv","tsv","d3_timer_queueHead","d3_timer_queueTail","d3_timer_interval","d3_timer_timeout","d3_timer_frame","d3_timer","delay","then","timer","d3_timer_step","d3_timer_mark","d3_timer_sweep","isFinite","t0","t1","time","d3_geom_pointX","d3_geom_pointY","d3_geom_hullUpper","points","hull","hs","d3_geom_hullOrder","flush","geom","vertices","fx","fy","flippedPoints","upper","lower","skipLeft","skipRight","polygon","coordinates","d3_geom_polygonPrototype","d3_geom_polygonInside","d3_geom_polygonIntersect","x3","x21","x43","y3","y21","y43","ua","d3_geom_polygonClosed","area","centroid","clip","input","closed","d3_geom_voronoiEdges","d3_geom_voronoiCells","d3_geom_voronoiBeaches","d3_geom_voronoiFirstCircle","d3_geom_voronoiCircles","d3_geom_voronoiBeachPool","d3_geom_voronoiCirclePool","d3_geom_voronoiBeach","d3_geom_voronoiRedBlackNode","edge","site","circle","d3_geom_voronoiCreateBeach","beach","pop","d3_geom_voronoiDetachBeach","d3_geom_voronoiDetachCircle","d3_geom_voronoiRemoveBeach","vertex","previous","P","disappearing","lArc","unshift","rArc","iArc","nArcs","d3_geom_voronoiSetEdgeEnd","d3_geom_voronoiCreateEdge","d3_geom_voronoiAttachCircle","d3_geom_voronoiAddBeach","dxl","dxr","directrix","d3_geom_voronoiLeftBreakPoint","L","d3_geom_voronoiRightBreakPoint","R","newArc","lSite","ax","ay","bx","by","rSite","hb","hc","arc","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","d3_geom_voronoiCell","edges","d3_geom_voronoiHalfEdgeOrder","angle","d3_geom_voronoiCircle","cSite","ha","d3_geom_voronoiConnectEdge","vb","fm","fb","va","lx","ly","rx","ry","d3_geom_voronoiEdge","d3_geom_voronoiHalfEdge","d3_geom_voronoiCreateBorderEdge","d3_geom_voronoiRedBlackTree","U","C","d3_geom_voronoiRedBlackRotateLeft","tree","d3_geom_voronoiRedBlackRotateRight","d3_geom_voronoiRedBlackFirst","d3_geom_voronoi","sites","bbox","d3_geom_voronoiVertexOrder","line","splice","d3_geom_voronoiClipEdges","x2","y2","cell","iHalfEdge","halfEdges","nHalfEdges","cells","iCell","prepare","d3_geom_voronoiCloseCells","diagram","after","grandpa","uncle","sibling","voronoi","clipExtent","d3_geom_voronoiClipExtent","polygons","links","triangles","s0","s1","d3_geom_quadtreeCompatX","d3_geom_quadtreeCompatY","d3_geom_quadtreeVisit","sx","sy","children","d3_interpolateRgb","ar","ag","ab","br","bg","bb","d3_interpolateObject","d3_interpolate","d3_interpolateNumber","d3_interpolateString","am","bm","bs","bi","d3_interpolate_numberA","d3_interpolate_numberB","index","delaunay","quadtree","compat","xs","ys","x1_","y1_","x2_","y2_","x_","y_","leaf","nx","ny","insertChild","nPoint","xm","ym","below","root","visit","find","closestPoint","minDistance2","distance2","distance","d3_geom_quadtreeFind","interpolateRgb","interpolateObject","interpolateNumber","interpolateString","interpolators","d3_interpolateArray","na","nb","interpolate","interpolateArray","d3_ease_default","d3_ease","linear","poly","quad","d3_ease_quad","cubic","d3_ease_cubic","d3_ease_sin","d3_ease_exp","d3_ease_circle","elastic","back","bounce","d3_ease_bounce","d3_ease_mode","out","d3_ease_reverse","d3_ease_reflect","d3_ease_cubicInOut","t2","t3","d3_interpolateRound","d3_transform","kx","d3_transformNormalize","kz","d3_transformDot","ky","rotate","skew","ease","interpolateHcl","ah","ac","al","bh","bc","bl","interpolateHsl","as","interpolateLab","aa","ba","interpolateRound","transform","string","baseVal","consolidate","d3_transformIdentity","d3_interpolateTransformPop","d3_interpolateTransform","ta","tb","d3_interpolateTranslate","ra","rb","d3_interpolateRotate","wa","wb","d3_interpolateSkew","ka","kb","d3_interpolateScale","d3_uninterpolateNumber","d3_uninterpolateClamp","d3_layout_bundlePath","link","lca","aNodes","d3_layout_bundleAncestors","bNodes","aNode","bNode","sharedNode","d3_layout_bundleLeastCommonAncestor","ancestors","d3_layout_forceDragstart","fixed","d3_layout_forceDragend","d3_layout_forceMouseover","px","py","d3_layout_forceMouseout","d3_layout_forceAccumulate","alpha","charges","charge","pointCharge","interpolateTransform","layout","bundle","paths","chord","chords","sortGroups","sortSubgroups","sortChords","relayout","groupSums","groupIndex","subgroupIndex","di","dj","a0","a1","subindex","startAngle","endAngle","resort","force","distances","strengths","friction","linkDistance","d3_layout_forceLinkDistance","linkStrength","d3_layout_forceLinkStrength","chargeDistance2","d3_layout_forceChargeDistance2","gravity","theta2","repulse","dw","dn","dragmove","resume","tick","weight","chargeDistance","theta","neighbors","dimension","candidates","d3_layout_hierarchyRebind","hierarchy","d3_layout_hierarchyLinks","d3_layout_hierarchyVisitBefore","d3_layout_hierarchyVisitAfter","nodes2","d3_layout_hierarchyChildren","d3_layout_hierarchyValue","d3_layout_hierarchySort","child","stack","childs","revalue","partition","pie","Number","d3_layout_pieSortByValue","padAngle","da","pa","arcs","d3_layout_stackX","d3_layout_stackY","d3_layout_stackOut","d3_layout_stackOrderDefault","offset","d3_layout_stackOffsetZero","series","orders","offsets","d3_layout_stackOrders","d3_layout_stackOffsets","d3_layout_stackMaxIndex","sums","d3_layout_stackReduceSum","bottom","tops","bottoms","reverse","silhouette","wiggle","s2","s3","o0","expand","zero","reduce","d3_layout_stackSum","d3_layout_histogramBinSturges","d3_layout_histogramBinFixed","d3_layout_histogramRange","d3_layout_packSort","d3_layout_packInsert","_pack_next","_pack_prev","d3_layout_packSplice","d3_layout_packIntersects","dr","d3_layout_packSiblings","xMin","xMax","yMin","yMax","d3_layout_packLink","bound","d3_layout_packPlace","isect","cr","d3_layout_packUnlink","d3_layout_packTransform","db","dc","d3_layout_treeSeparation","d3_layout_treeLeft","d3_layout_treeRight","d3_layout_treeMove","wm","wp","shift","change","d3_layout_treeAncestor","vim","ancestor","d3_layout_clusterLeft","d3_layout_clusterRight","d3_layout_treemapPadNull","d3_layout_treemapPad","d3_scaleExtent","d3_scaleRange","rangeExtent","d3_scale_bilinear","uninterpolate","d3_scale_nice","nice","d3_scale_niceStep","d3_scale_niceIdentity","histogram","frequency","valuer","ranger","binner","bin","bins","thresholds","pack","radius","separation","nodeSize","root0","root1","node1","A","queue","wrapTree","firstWalk","secondWalk","sizeNode","tx","siblings","d3_layout_treeShift","midpoint","vip","vop","vom","sip","sop","sim","som","apportion","cluster","previousNode","d3_layout_clusterX","d3_layout_clusterY","treemap","stickies","pad","sticky","mode","ratio","squarify","score","remaining","best","worst","stickify","rmax","rmin","padConstant","normal","µ","σ","logNormal","bates","irwinHall","d3_scale_polylinear","d3_scale_linear","clamp","output","rangeRound","ticks","d3_scale_linearTicks","tickFormat","d3_scale_linearTickFormat","d3_scale_linearNice","d3_scale_linearRebind","d3_scale_linearTickRange","span","LN10","err","d3_scale_log","base","positive","niced","d3_scale_logNiceNegative","d3_scale_pow","exponent","powp","d3_scale_powPow","powb","d3_scale_ordinal","rangeBand","steps","xi","rangePoints","rangeRoundPoints","rangeBands","outerPadding","rangeRoundBands","ordinal","category10","d3_category10","category20","d3_category20","category20b","d3_category20b","category20c","d3_category20c","d3_scale_quantile","quantiles","invertExtent","d3_scale_quantize","d3_scale_threshold","d3_scale_identity","identity","d3_zero","quantize","threshold","innerRadius","d3_svg_arcInnerRadius","outerRadius","d3_svg_arcOuterRadius","cornerRadius","padRadius","d3_svg_arcAuto","d3_svg_arcStartAngle","d3_svg_arcEndAngle","d3_svg_arcPadAngle","cw","rc","circleSegment","rp","ap","path","d3_svg_arcSweep","h1","h0","rc1","rc0","oc","kc","acos","lc","t30","d3_svg_arcCornerTangents","t12","t03","t21","x01","y01","ox","oy","D","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","d3_true","d3_svg_line","projection","defined","d3_svg_lineLinear","interpolateKey","tension","segments","segment","d3_svg_lineInterpolators","d3_svg_lineLinearClosed","d3_svg_lineStepBefore","d3_svg_lineStepAfter","basis","d3_svg_lineBasis","pi","d3_svg_lineDot4","d3_svg_lineBasisBezier3","d3_svg_lineBasisBezier","cardinal","d3_svg_lineHermite","d3_svg_lineCardinalTangents","monotone","tangents","d3_svg_lineSlope","d3_svg_lineFiniteDifferences","d3_svg_lineMonotoneTangents","lp","p2","d3_svg_lineBasisBezier1","d3_svg_lineBasisBezier2","d3_svg_lineRadial","d3_svg_area","interpolateReverse","points0","points1","fx0","fy0","fx1","fy1","d3_source","d3_target","d3_svg_chordRadius","d3_svg_diagonalProjection","d3_svg_symbolSize","d3_svg_symbolType","d3_svg_symbolCircle","radial","curve","diagonal","p3","projection_","d3_svg_diagonalRadialProjection","symbol","d3_svg_symbols","cross","diamond","d3_svg_symbolTan30","square","d3_svg_symbolSqrt3","symbolTypes","d3_transitionId","d3_transitionNamespace","d3_transitionInherit","d3_transitionNode","d3_transition","interrupt","d3_selection_interruptNS","lock","activeId","active","count","d3_transitionPrototype","d3_transition_tween","d3_transition_text","inherit","tweens","elapsed","cancelId","cancel","subnodes","nameNS","attrNull","attrNullNS","attrTween","styleNull","styleTween","inheritId","id0","id1","axis","tickFormat_","orient","d3_svg_axisDefaultOrient","innerTickSize","outerTickSize","tickPadding","tickArguments_","tickValues","tickTransform","tickEnter","tickExit","tickUpdate","tickSpacing","pathUpdate","lineEnter","lineUpdate","textEnter","textUpdate","sign","d3_svg_axisX","d3_svg_axisY","d3_svg_axisOrients","tickSize","tickSubdivide","v0","brush","xExtentDomain","yExtentDomain","xExtent","yExtent","xClamp","yClamp","resizes","d3_svg_brushResizes","brushstart","background","resize","d3_svg_brushCursor","gUpdate","backgroundUpdate","redrawX","redrawY","redraw","eventTarget","event_","resizing","resizingX","resizingY","dragging","keyCode","brushmove","brushend","ex","ey","altKey","move1","extent1","extent0","yi","clear","nw","ne","se","sw","d3_json","JSON","d3_html","createRange","selectNode","body","createContextualFragment","json","responseXML","define"],"sourceRoot":""}