text: /*! Ideogram.js, version 1.3.0.  Developed by Eric Weitz.  https://github.com/eweitz/ideogram.  Public domain (CC0 1.0). */ ! function (t, e) {
  	if ("object" == typeof exports && "object" == typeof module) module.exports = e();
  	else if ("function" == typeof define && define.amd) define([], e);
  	else {
  		var n = e();
  		for (var r in n) ("object" == typeof exports ? exports : t)[r] = n[r]
  	}
  }(window, function () {
  	return function (t) {
  		var e = {};
  
  		function n(r) {
  			if (e[r]) return e[r].exports;
  			var o = e[r] = {
  				i: r,
  				l: !1,
  				exports: {}
  			};
  			return t[r].call(o.exports, o, o.exports, n), o.l = !0, o.exports
  		}
  		return n.m = t, n.c = e, n.d = function (t, e, r) {
  			n.o(t, e) || Object.defineProperty(t, e, {
  				enumerable: !0,
  				get: r
  			})
  		}, n.r = function (t) {
  			"undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t, Symbol.toStringTag, {
  				value: "Module"
  			}), Object.defineProperty(t, "__esModule", {
  				value: !0
  			})
  		}, n.t = function (t, e) {
  			if (1 & e && (t = n(t)), 8 & e) return t;
  			if (4 & e && "object" == typeof t && t && t.__esModule) return t;
  			var r = Object.create(null);
  			if (n.r(r), Object.defineProperty(r, "default", {
  				enumerable: !0,
  				value: t
  			}), 2 & e && "string" != typeof t)
  				for (var o in t) n.d(r, o, function (e) {
  					return t[e]
  				}.bind(null, o));
  			return r
  		}, n.n = function (t) {
  			var e = t && t.__esModule ? function () {
  				return t.default
  			} : function () {
  				return t
  			};
  			return n.d(e, "a", e), e
  		}, n.o = function (t, e) {
  			return Object.prototype.hasOwnProperty.call(t, e)
  		}, n.p = "/dist/js", n(n.s = 11)
  	}([function (t, e, n) {
  		"use strict";
  		n.r(e);
  		var r = "http://www.w3.org/1999/xhtml",
  			o = {
  				svg: "http://www.w3.org/2000/svg",
  				xhtml: r,
  				xlink: "http://www.w3.org/1999/xlink",
  				xml: "http://www.w3.org/XML/1998/namespace",
  				xmlns: "http://www.w3.org/2000/xmlns/"
  			},
  			i = function (t) {
  				var e = t += "",
  					n = e.indexOf(":");
  				return n >= 0 && "xmlns" !== (e = t.slice(0, n)) && (t = t.slice(n + 1)), o.hasOwnProperty(e) ? {
  					space: o[e],
  					local: t
  				} : t
  			};
  		var a = function (t) {
  			var e = i(t);
  			return (e.local ? function (t) {
  				return function () {
  					return this.ownerDocument.createElementNS(t.space, t.local)
  				}
  			} : function (t) {
  				return function () {
  					var e = this.ownerDocument,
  						n = this.namespaceURI;
  					return n === r && e.documentElement.namespaceURI === r ? e.createElement(t) : e.createElementNS(n, t)
  				}
  			})(e)
  		};
  
  		function s() { }
  		var c = function (t) {
  			return null == t ? s : function () {
  				return this.querySelector(t)
  			}
  		};
  
  		function u() {
  			return []
  		}
  		var l = function (t) {
  			return null == t ? u : function () {
  				return this.querySelectorAll(t)
  			}
  		},
  			f = function (t) {
  				return function () {
  					return this.matches(t)
  				}
  			};
  		if ("undefined" != typeof document) {
  			var h = document.documentElement;
  			if (!h.matches) {
  				var d = h.webkitMatchesSelector || h.msMatchesSelector || h.mozMatchesSelector || h.oMatchesSelector;
  				f = function (t) {
  					return function () {
  						return d.call(this, t)
  					}
  				}
  			}
  		}
  		var g = f,
  			p = function (t) {
  				return new Array(t.length)
  			};
  
  		function m(t, e) {
  			this.ownerDocument = t.ownerDocument, this.namespaceURI = t.namespaceURI, this._next = null, this._parent = t, this.__data__ = e
  		}
  		m.prototype = {
  			constructor: m,
  			appendChild: function (t) {
  				return this._parent.insertBefore(t, this._next)
  			},
  			insertBefore: function (t, e) {
  				return this._parent.insertBefore(t, e)
  			},
  			querySelector: function (t) {
  				return this._parent.querySelector(t)
  			},
  			querySelectorAll: function (t) {
  				return this._parent.querySelectorAll(t)
  			}
  		};
  		var _ = "$";
  
  		function b(t, e, n, r, o, i) {
  			for (var a, s = 0, c = e.length, u = i.length; s < u; ++s)(a = e[s]) ? (a.__data__ = i[s], r[s] = a) : n[s] = new m(t, i[s]);
  			for (; s < c; ++s)(a = e[s]) && (o[s] = a)
  		}
  
  		function v(t, e, n, r, o, i, a) {
  			var s, c, u, l = {},
  				f = e.length,
  				h = i.length,
  				d = new Array(f);
  			for (s = 0; s < f; ++s)(c = e[s]) && (d[s] = u = _ + a.call(c, c.__data__, s, e), u in l ? o[s] = c : l[u] = c);
  			for (s = 0; s < h; ++s)(c = l[u = _ + a.call(t, i[s], s, i)]) ? (r[s] = c, c.__data__ = i[s], l[u] = null) : n[s] = new m(t, i[s]);
  			for (s = 0; s < f; ++s)(c = e[s]) && l[d[s]] === c && (o[s] = c)
  		}
  
  		function y(t, e) {
  			return t < e ? -1 : t > e ? 1 : t >= e ? 0 : NaN
  		}
  		var w = function (t) {
  			return t.ownerDocument && t.ownerDocument.defaultView || t.document && t || t.defaultView
  		};
  
  		function x(t, e) {
  			return t.style.getPropertyValue(e) || w(t).getComputedStyle(t, null).getPropertyValue(e)
  		}
  
  		function A(t) {
  			return t.trim().split(/^|\s+/)
  		}
  
  		function C(t) {
  			return t.classList || new M(t)
  		}
  
  		function M(t) {
  			this._node = t, this._names = A(t.getAttribute("class") || "")
  		}
  
  		function k(t, e) {
  			for (var n = C(t), r = -1, o = e.length; ++r < o;) n.add(e[r])
  		}
  
  		function T(t, e) {
  			for (var n = C(t), r = -1, o = e.length; ++r < o;) n.remove(e[r])
  		}
  		M.prototype = {
  			add: function (t) {
  				this._names.indexOf(t) < 0 && (this._names.push(t), this._node.setAttribute("class", this._names.join(" ")))
  			},
  			remove: function (t) {
  				var e = this._names.indexOf(t);
  				e >= 0 && (this._names.splice(e, 1), this._node.setAttribute("class", this._names.join(" ")))
  			},
  			contains: function (t) {
  				return this._names.indexOf(t) >= 0
  			}
  		};
  
  		function S() {
  			this.textContent = ""
  		}
  
  		function D() {
  			this.innerHTML = ""
  		}
  
  		function L() {
  			this.nextSibling && this.parentNode.appendChild(this)
  		}
  
  		function B() {
  			this.previousSibling && this.parentNode.insertBefore(this, this.parentNode.firstChild)
  		}
  
  		function E() {
  			return null
  		}
  
  		function O() {
  			var t = this.parentNode;
  			t && t.removeChild(this)
  		}
  
  		function P() {
  			return this.parentNode.insertBefore(this.cloneNode(!1), this.nextSibling)
  		}
  
  		function F() {
  			return this.parentNode.insertBefore(this.cloneNode(!0), this.nextSibling)
  		}
  		var N = {},
  			I = null;
  		"undefined" != typeof document && ("onmouseenter" in document.documentElement || (N = {
  			mouseenter: "mouseover",
  			mouseleave: "mouseout"
  		}));
  
  		function U(t, e, n) {
  			return t = j(t, e, n),
  				function (e) {
  					var n = e.relatedTarget;
  					n && (n === this || 8 & n.compareDocumentPosition(this)) || t.call(this, e)
  				}
  		}
  
  		function j(t, e, n) {
  			return function (r) {
  				var o = I;
  				I = r;
  				try {
  					t.call(this, this.__data__, e, n)
  				} finally {
  					I = o
  				}
  			}
  		}
  
  		function H(t) {
  			return function () {
  				var e = this.__on;
  				if (e) {
  					for (var n, r = 0, o = -1, i = e.length; r < i; ++r) n = e[r], t.type && n.type !== t.type || n.name !== t.name ? e[++o] = n : this.removeEventListener(n.type, n.listener, n.capture);
  					++o ? e.length = o : delete this.__on
  				}
  			}
  		}
  
  		function W(t, e, n) {
  			var r = N.hasOwnProperty(t.type) ? U : j;
  			return function (o, i, a) {
  				var s, c = this.__on,
  					u = r(e, i, a);
  				if (c)
  					for (var l = 0, f = c.length; l < f; ++l)
  						if ((s = c[l]).type === t.type && s.name === t.name) return this.removeEventListener(s.type, s.listener, s.capture), this.addEventListener(s.type, s.listener = u, s.capture = n), void (s.value = e);
  				this.addEventListener(t.type, u, n), s = {
  					type: t.type,
  					name: t.name,
  					value: e,
  					listener: u,
  					capture: n
  				}, c ? c.push(s) : this.__on = [s]
  			}
  		}
  
  		function R(t, e, n, r) {
  			var o = I;
  			t.sourceEvent = I, I = t;
  			try {
  				return e.apply(n, r)
  			} finally {
  				I = o
  			}
  		}
  
  		function Y(t, e, n) {
  			var r = w(t),
  				o = r.CustomEvent;
  			"function" == typeof o ? o = new o(e, n) : (o = r.document.createEvent("Event"), n ? (o.initEvent(e, n.bubbles, n.cancelable), o.detail = n.detail) : o.initEvent(e, !1, !1)), t.dispatchEvent(o)
  		}
  		var q = [null];
  
  		function z(t, e) {
  			this._groups = t, this._parents = e
  		}
  
  		function X() {
  			return new z([
  				[document.documentElement]
  			], q)
  		}
  		z.prototype = X.prototype = {
  			constructor: z,
  			select: function (t) {
  				"function" != typeof t && (t = c(t));
  				for (var e = this._groups, n = e.length, r = new Array(n), o = 0; o < n; ++o)
  					for (var i, a, s = e[o], u = s.length, l = r[o] = new Array(u), f = 0; f < u; ++f)(i = s[f]) && (a = t.call(i, i.__data__, f, s)) && ("__data__" in i && (a.__data__ = i.__data__), l[f] = a);
  				return new z(r, this._parents)
  			},
  			selectAll: function (t) {
  				"function" != typeof t && (t = l(t));
  				for (var e = this._groups, n = e.length, r = [], o = [], i = 0; i < n; ++i)
  					for (var a, s = e[i], c = s.length, u = 0; u < c; ++u)(a = s[u]) && (r.push(t.call(a, a.__data__, u, s)), o.push(a));
  				return new z(r, o)
  			},
  			filter: function (t) {
  				"function" != typeof t && (t = g(t));
  				for (var e = this._groups, n = e.length, r = new Array(n), o = 0; o < n; ++o)
  					for (var i, a = e[o], s = a.length, c = r[o] = [], u = 0; u < s; ++u)(i = a[u]) && t.call(i, i.__data__, u, a) && c.push(i);
  				return new z(r, this._parents)
  			},
  			data: function (t, e) {
  				if (!t) return d = new Array(this.size()), u = -1, this.each(function (t) {
  					d[++u] = t
  				}), d;
  				var n = e ? v : b,
  					r = this._parents,
  					o = this._groups;
  				"function" != typeof t && (t = function (t) {
  					return function () {
  						return t
  					}
  				}(t));
  				for (var i = o.length, a = new Array(i), s = new Array(i), c = new Array(i), u = 0; u < i; ++u) {
  					var l = r[u],
  						f = o[u],
  						h = f.length,
  						d = t.call(l, l && l.__data__, u, r),
  						g = d.length,
  						p = s[u] = new Array(g),
  						m = a[u] = new Array(g);
  					n(l, f, p, m, c[u] = new Array(h), d, e);
  					for (var _, y, w = 0, x = 0; w < g; ++w)
  						if (_ = p[w]) {
  							for (w >= x && (x = w + 1); !(y = m[x]) && ++x < g;);
  							_._next = y || null
  						}
  				}
  				return (a = new z(a, r))._enter = s, a._exit = c, a
  			},
  			enter: function () {
  				return new z(this._enter || this._groups.map(p), this._parents)
  			},
  			exit: function () {
  				return new z(this._exit || this._groups.map(p), this._parents)
  			},
  			merge: function (t) {
  				for (var e = this._groups, n = t._groups, r = e.length, o = n.length, i = Math.min(r, o), a = new Array(r), s = 0; s < i; ++s)
  					for (var c, u = e[s], l = n[s], f = u.length, h = a[s] = new Array(f), d = 0; d < f; ++d)(c = u[d] || l[d]) && (h[d] = c);
  				for (; s < r; ++s) a[s] = e[s];
  				return new z(a, this._parents)
  			},
  			order: function () {
  				for (var t = this._groups, e = -1, n = t.length; ++e < n;)
  					for (var r, o = t[e], i = o.length - 1, a = o[i]; --i >= 0;)(r = o[i]) && (a && a !== r.nextSibling && a.parentNode.insertBefore(r, a), a = r);
  				return this
  			},
  			sort: function (t) {
  				function e(e, n) {
  					return e && n ? t(e.__data__, n.__data__) : !e - !n
  				}
  				t || (t = y);
  				for (var n = this._groups, r = n.length, o = new Array(r), i = 0; i < r; ++i) {
  					for (var a, s = n[i], c = s.length, u = o[i] = new Array(c), l = 0; l < c; ++l)(a = s[l]) && (u[l] = a);
  					u.sort(e)
  				}
  				return new z(o, this._parents).order()
  			},
  			call: function () {
  				var t = arguments[0];
  				return arguments[0] = this, t.apply(null, arguments), this
  			},
  			nodes: function () {
  				var t = new Array(this.size()),
  					e = -1;
  				return this.each(function () {
  					t[++e] = this
  				}), t
  			},
  			node: function () {
  				for (var t = this._groups, e = 0, n = t.length; e < n; ++e)
  					for (var r = t[e], o = 0, i = r.length; o < i; ++o) {
  						var a = r[o];
  						if (a) return a
  					}
  				return null
  			},
  			size: function () {
  				var t = 0;
  				return this.each(function () {
  					++t
  				}), t
  			},
  			empty: function () {
  				return !this.node()
  			},
  			each: function (t) {
  				for (var e = this._groups, n = 0, r = e.length; n < r; ++n)
  					for (var o, i = e[n], a = 0, s = i.length; a < s; ++a)(o = i[a]) && t.call(o, o.__data__, a, i);
  				return this
  			},
  			attr: function (t, e) {
  				var n = i(t);
  				if (arguments.length < 2) {
  					var r = this.node();
  					return n.local ? r.getAttributeNS(n.space, n.local) : r.getAttribute(n)
  				}
  				return this.each((null == e ? n.local ? function (t) {
  					return function () {
  						this.removeAttributeNS(t.space, t.local)
  					}
  				} : function (t) {
  					return function () {
  						this.removeAttribute(t)
  					}
  				} : "function" == typeof e ? n.local ? function (t, e) {
  					return function () {
  						var n = e.apply(this, arguments);
  						null == n ? this.removeAttributeNS(t.space, t.local) : this.setAttributeNS(t.space, t.local, n)
  					}
  				} : function (t, e) {
  					return function () {
  						var n = e.apply(this, arguments);
  						null == n ? this.removeAttribute(t) : this.setAttribute(t, n)
  					}
  				} : n.local ? function (t, e) {
  					return function () {
  						this.setAttributeNS(t.space, t.local, e)
  					}
  				} : function (t, e) {
  					return function () {
  						this.setAttribute(t, e)
  					}
  				})(n, e))
  			},
  			style: function (t, e, n) {
  				return arguments.length > 1 ? this.each((null == e ? function (t) {
  					return function () {
  						this.style.removeProperty(t)
  					}
  				} : "function" == typeof e ? function (t, e, n) {
  					return function () {
  						var r = e.apply(this, arguments);
  						null == r ? this.style.removeProperty(t) : this.style.setProperty(t, r, n)
  					}
  				} : function (t, e, n) {
  					return function () {
  						this.style.setProperty(t, e, n)
  					}
  				})(t, e, null == n ? "" : n)) : x(this.node(), t)
  			},
  			property: function (t, e) {
  				return arguments.length > 1 ? this.each((null == e ? function (t) {
  					return function () {
  						delete this[t]
  					}
  				} : "function" == typeof e ? function (t, e) {
  					return function () {
  						var n = e.apply(this, arguments);
  						null == n ? delete this[t] : this[t] = n
  					}
  				} : function (t, e) {
  					return function () {
  						this[t] = e
  					}
  				})(t, e)) : this.node()[t]
  			},
  			classed: function (t, e) {
  				var n = A(t + "");
  				if (arguments.length < 2) {
  					for (var r = C(this.node()), o = -1, i = n.length; ++o < i;)
  						if (!r.contains(n[o])) return !1;
  					return !0
  				}
  				return this.each(("function" == typeof e ? function (t, e) {
  					return function () {
  						(e.apply(this, arguments) ? k : T)(this, t)
  					}
  				} : e ? function (t) {
  					return function () {
  						k(this, t)
  					}
  				} : function (t) {
  					return function () {
  						T(this, t)
  					}
  				})(n, e))
  			},
  			text: function (t) {
  				return arguments.length ? this.each(null == t ? S : ("function" == typeof t ? function (t) {
  					return function () {
  						var e = t.apply(this, arguments);
  						this.textContent = null == e ? "" : e
  					}
  				} : function (t) {
  					return function () {
  						this.textContent = t
  					}
  				})(t)) : this.node().textContent
  			},
  			html: function (t) {
  				return arguments.length ? this.each(null == t ? D : ("function" == typeof t ? function (t) {
  					return function () {
  						var e = t.apply(this, arguments);
  						this.innerHTML = null == e ? "" : e
  					}
  				} : function (t) {
  					return function () {
  						this.innerHTML = t
  					}
  				})(t)) : this.node().innerHTML
  			},
  			raise: function () {
  				return this.each(L)
  			},
  			lower: function () {
  				return this.each(B)
  			},
  			append: function (t) {
  				var e = "function" == typeof t ? t : a(t);
  				return this.select(function () {
  					return this.appendChild(e.apply(this, arguments))
  				})
  			},
  			insert: function (t, e) {
  				var n = "function" == typeof t ? t : a(t),
  					r = null == e ? E : "function" == typeof e ? e : c(e);
  				return this.select(function () {
  					return this.insertBefore(n.apply(this, arguments), r.apply(this, arguments) || null)
  				})
  			},
  			remove: function () {
  				return this.each(O)
  			},
  			clone: function (t) {
  				return this.select(t ? F : P)
  			},
  			datum: function (t) {
  				return arguments.length ? this.property("__data__", t) : this.node().__data__
  			},
  			on: function (t, e, n) {
  				var r, o, i = function (t) {
  					return t.trim().split(/^|\s+/).map(function (t) {
  						var e = "",
  							n = t.indexOf(".");
  						return n >= 0 && (e = t.slice(n + 1), t = t.slice(0, n)), {
  							type: t,
  							name: e
  						}
  					})
  				}(t + ""),
  					a = i.length;
  				if (!(arguments.length < 2)) {
  					for (s = e ? W : H, null == n && (n = !1), r = 0; r < a; ++r) this.each(s(i[r], e, n));
  					return this
  				}
  				var s = this.node().__on;
  				if (s)
  					for (var c, u = 0, l = s.length; u < l; ++u)
  						for (r = 0, c = s[u]; r < a; ++r)
  							if ((o = i[r]).type === c.type && o.name === c.name) return c.value
  			},
  			dispatch: function (t, e) {
  				return this.each(("function" == typeof e ? function (t, e) {
  					return function () {
  						return Y(this, t, e.apply(this, arguments))
  					}
  				} : function (t, e) {
  					return function () {
  						return Y(this, t, e)
  					}
  				})(t, e))
  			}
  		};
  		var $ = X,
  			K = function (t) {
  				return "string" == typeof t ? new z([
  					[document.querySelector(t)]
  				], [document.documentElement]) : new z([
  					[t]
  				], q)
  			},
  			V = function (t) {
  				return K(a(t).call(document.documentElement))
  			},
  			G = 0;
  
  		function Q() {
  			return new Z
  		}
  
  		function Z() {
  			this._ = "@" + (++G).toString(36)
  		}
  		Z.prototype = Q.prototype = {
  			constructor: Z,
  			get: function (t) {
  				for (var e = this._; !(e in t);)
  					if (!(t = t.parentNode)) return;
  				return t[e]
  			},
  			set: function (t, e) {
  				return t[this._] = e
  			},
  			remove: function (t) {
  				return this._ in t && delete t[this._]
  			},
  			toString: function () {
  				return this._
  			}
  		};
  		var J = function () {
  			for (var t, e = I; t = e.sourceEvent;) e = t;
  			return e
  		},
  			tt = function (t, e) {
  				var n = t.ownerSVGElement || t;
  				if (n.createSVGPoint) {
  					var r = n.createSVGPoint();
  					return r.x = e.clientX, r.y = e.clientY, [(r = r.matrixTransform(t.getScreenCTM().inverse())).x, r.y]
  				}
  				var o = t.getBoundingClientRect();
  				return [e.clientX - o.left - t.clientLeft, e.clientY - o.top - t.clientTop]
  			},
  			et = function (t) {
  				var e = J();
  				return e.changedTouches && (e = e.changedTouches[0]), tt(t, e)
  			},
  			nt = function (t) {
  				return "string" == typeof t ? new z([document.querySelectorAll(t)], [document.documentElement]) : new z([null == t ? [] : t], q)
  			},
  			rt = function (t, e, n) {
  				arguments.length < 3 && (n = e, e = J().changedTouches);
  				for (var r, o = 0, i = e ? e.length : 0; o < i; ++o)
  					if ((r = e[o]).identifier === n) return tt(t, r);
  				return null
  			},
  			ot = function (t, e) {
  				null == e && (e = J().touches);
  				for (var n = 0, r = e ? e.length : 0, o = new Array(r); n < r; ++n) o[n] = tt(t, e[n]);
  				return o
  			};
  		n.d(e, "create", function () {
  			return V
  		}), n.d(e, "creator", function () {
  			return a
  		}), n.d(e, "local", function () {
  			return Q
  		}), n.d(e, "matcher", function () {
  			return g
  		}), n.d(e, "mouse", function () {
  			return et
  		}), n.d(e, "namespace", function () {
  			return i
  		}), n.d(e, "namespaces", function () {
  			return o
  		}), n.d(e, "clientPoint", function () {
  			return tt
  		}), n.d(e, "select", function () {
  			return K
  		}), n.d(e, "selectAll", function () {
  			return nt
  		}), n.d(e, "selection", function () {
  			return $
  		}), n.d(e, "selector", function () {
  			return c
  		}), n.d(e, "selectorAll", function () {
  			return l
  		}), n.d(e, "style", function () {
  			return x
  		}), n.d(e, "touch", function () {
  			return rt
  		}), n.d(e, "touches", function () {
  			return ot
  		}), n.d(e, "window", function () {
  			return w
  		}), n.d(e, "event", function () {
  			return I
  		}), n.d(e, "customEvent", function () {
  			return R
  		})
  	}, function (t, e, n) {
  		"use strict";
  		var r = n(0);
  		class o {
  			constructor(t) {
  				this._model = t, this._class = "ModelAdapter"
  			}
  			static getInstance(t) {
  				return t.bands ? new o(t) : new i(t)
  			}
  			getModel() {
  				return this._model
  			}
  			getCssClass() {
  				return ""
  			}
  		}
  		class i extends o {
  			constructor(t) {
  				super(t), this._class = "ModelNoBandsAdapter"
  			}
  			getModel() {
  				return this._model.bands = [], this._model.width > 1 && this._model.bands.push({
  					name: "q",
  					px: {
  						start: 0,
  						stop: this._model.width,
  						width: this._model.width
  					},
  					bp: {
  						start: 1,
  						stop: this._model.length
  					}
  				}), this._model
  			}
  			getCssClass() {
  				return "noBands"
  			}
  		}
  		var a = n(7);
  		class s {
  			constructor(t) {
  				this._config = t, this._ploidy = new a.a(this._config)
  			}
  			getArmColor(t, e, n) {
  				return this._config.armColors ? this._config.armColors[n] : this._config.ancestors ? this._getPolyploidArmColor(t, e, n) : null
  			}
  			getBorderColor(t, e, n) {
  				return e < this._config.ploidy ? "#000" : this._ploidy.exists(t, e, n) ? "#000" : "#fff"
  			}
  			_getPolyploidArmColor(t, e, n) {
  				if (this._ploidy.exists(t, e, n)) {
  					var r = this._ploidy.getAncestor(t, e, n);
  					return this._config.ancestors[r]
  				}
  				return "transparent"
  			}
  		}
  		class c {
  			constructor(t) {
  				this._data = t, this.start = t.start, this.stop = t.stop, this.length = this.stop - this.start
  			}
  			getColor(t) {
  				return "ploidy" in this._data ? "ploidy" in this._data && this._data.ploidy[t] ? this._getColor(t) : "transparent" : this._getColor(t)
  			}
  			_getColor(t) {
  				return Array.isArray(this._data.color) ? this._data.color[t] : this._data.color
  			}
  		}
  		class u {
  			constructor(t, e, n) {
  				this._adapter = t, this._model = this._adapter.getModel(), this._config = e, this._ideo = n, this._color = new s(this._config), this._bumpCoefficient = 5
  			}
  			static getInstance(t, e, n) {
  				return "telocentric" === t.getModel().centromerePosition ? new f(t, e, n) : new l(t, e, n)
  			}
  			_addPArmShape(t, e) {
  				return e ? t.concat(this._getPArmShape()) : t
  			}
  			_addQArmShape(t, e) {
  				return e ? t.concat(this._getQArmShape()) : t
  			}
  			render(t, e, n) {
  				var r, o, i, a, s, c, u;
  				return r = this, t = t.append("g").attr("class", "bands").attr("clip-path", "url(#" + this._model.id + "-chromosome-set-clippath)"), o = this._renderArm(t, e, n, "p"), i = this._renderArm(t, e, n, "q"), this._renderRangeSet(t, e, n), a = [], a = this._addPArmShape(a, o), a = this._addQArmShape(a, i), s = "0", c = "", u = this.isFullyBanded(), "ancestors" in this._ideo.config && !("rangeSet" in this._ideo.config) ? (c = r._color.getArmColor(e, n, 0), u && (s = "0.5")) : u ? (s = null, c = "transparent") : "ancestors" in this._ideo.config || (s = "1"), t.append("g").attr("class", "chromosome-border").selectAll("path").data(a).enter().append("path").attr("fill", c).style("fill-opacity", s).attr("stroke", function (t, o) {
  					return r._color.getBorderColor(e, n, o)
  				}).attr("stroke-width", function (t) {
  					return "strokeWidth" in t ? t.strokeWidth : 1
  				}).attr("d", function (t) {
  					return t.path
  				}).attr("class", function (t) {
  					return t.class
  				}), a
  			}
  			_renderRangeSet(t, e, n) {
  				var r, o, i, a;
  				"rangeSet" in this._config && (o = this._config.rangeSet.filter(function (t) {
  					return t.chr - 1 === e
  				}).map(function (t) {
  					return new c(t)
  				}), i = t.append("g").attr("class", "range-set"), a = (r = this)._ideo, i.selectAll("rect.range").data(o).enter().append("rect").attr("class", "range").attr("x", function (t) {
  					return a.convertBpToPx(r._model, t.start)
  				}).attr("y", 0).attr("width", function (t) {
  					return a.convertBpToPx(r._model, t.length)
  				}).attr("height", this._config.chrWidth).style("fill", function (t) {
  					return t.getColor(n)
  				}))
  			}
  			_getShapeData() {
  				var t, e, n, r;
  				for (e = 0; e < this._model.bands.length; e++)
  					if ("q" === this._model.bands[e].name[0]) {
  						t = this._model.bands[e];
  						break
  					}
  				return n = this._model.bands.length - 1, r = this._model.bands[n].px.stop, {
  					x1: 0,
  					x2: t ? t.px.start : r,
  					x3: r,
  					w: this._config.chrWidth,
  					b: this._config.chrWidth / this._bumpCoefficient
  				}
  			}
  			_getPArmShape() {
  				var t = this._getShapeData(),
  					e = t.x2 - t.b;
  				return this.isFullyBanded() || "ancestors" in this._ideo.config ? {
  					class: "",
  					path: "M" + t.b + ",0 L" + e + ",0 Q" + (t.x2 + t.b) + "," + t.w / 2 + "," + e + "," + t.w + " L" + t.b + "," + t.w + " Q-" + t.b + "," + t.w / 2 + "," + t.b + ",0"
  				} : [{
  					class: "",
  					path: "M" + t.b + ",0 L" + (e - 2) + ",0 L" + (e - 2) + "," + t.w + " L" + t.b + "," + t.w + " Q-" + t.b + "," + t.w / 2 + "," + t.b + ",0"
  				}, {
  					class: "acen",
  					path: "M" + e + ",0 Q" + (t.x2 + t.b) + "," + t.w / 2 + "," + e + "," + t.w + " L" + e + "," + t.w + " L" + (e - 2) + "," + t.w + " L" + (e - 2) + ",0"
  				}]
  			}
  			_getQArmShape() {
  				var t = this._getShapeData(),
  					e = t.x3 - t.b,
  					n = t.x2 + t.b;
  				return this.isFullyBanded() || "ancestors" in this._ideo.config ? {
  					class: "",
  					path: "M" + n + ",0 L" + e + ",0 Q" + (t.x3 + t.b) + "," + t.w / 2 + "," + e + "," + t.w + " L" + n + "," + t.w + " Q" + (t.x2 - t.b) + "," + t.w / 2 + "," + n + ",0"
  				} : [{
  					path: "M" + n + ",0 L" + e + ",0 Q" + (t.x3 + t.b) + "," + t.w / 2 + "," + e + "," + t.w + " L" + n + "," + t.w + " L" + n + ",0"
  				}, {
  					class: "acen",
  					path: "M" + n + ",0Q" + (t.x2 - t.b) + "," + t.w / 2 + "," + n + "," + t.w + " L" + n + "," + t.w + "L" + (n + 2) + "," + t.w + "L" + (n + 2) + ",0"
  				}]
  			}
  			isFullyBanded() {
  				return this._model.bands && (2 !== this._model.bands.length || "q" === this._model.bands[0].name[0])
  			}
  			_renderBands(t, e, n, r, o) {
  				var i, a, s;
  				i = this, a = "p" === o ? 0 : 1, s = "", "ancestors" in i._ideo.config && !i.isFullyBanded() && (s = i._color.getArmColor(e, n, a)), t.selectAll("path.band." + o).data(r).enter().append("path").attr("id", function (t) {
  					return i._model.id + "-" + t.name.replace(".", "-")
  				}).attr("class", function (t) {
  					return "band " + o + "-band " + t.stain
  				}).attr("d", function (t) {
  					var e;
  					return "M " + i._ideo.round(t.px.start) + ", 0l " + (e = i._ideo.round(t.px.width)) + " 0 l 0 " + i._config.chrWidth + " l -" + e + " 0 z"
  				}).style("fill", s)
  			}
  			_renderArm(t, e, n, r) {
  				var o = this._model.bands.filter(function (t) {
  					return t.name[0] === r
  				});
  				return this._renderBands(t, e, n, o, r), Boolean(o.length)
  			}
  		}
  		class l extends u {
  			constructor(t, e, n) {
  				super(t, e, n), this._class = "MetacentricChromosome"
  			}
  		}
  		class f extends u {
  			constructor(t, e, n) {
  				super(t, e, n), this._class = "TelocentricChromosome", this._pArmOffset = 3
  			}
  			_addPArmShape(t) {
  				return t.concat(this._getPArmShape())
  			}
  			_getPArmShape() {
  				var t = this._getShapeData();
  				return t.o = this._pArmOffset, [{
  					class: "acen",
  					path: "M" + (t.x2 + 2) + ",1L" + (t.x2 + t.o + 3.25) + ",1 L" + (t.x2 + t.o + 3.25) + "," + (t.w - 1) + " L" + (t.x2 + 2) + "," + (t.w - 1)
  				}, {
  					class: "gpos66",
  					path: "M" + (t.x2 - t.o + 5) + ",0L" + (t.x2 - t.o + 3) + ",0 L" + (t.x2 - t.o + 3) + "," + t.w + " L" + (t.x2 - t.o + 5) + "," + t.w,
  					strokeWidth: .5
  				}]
  			}
  			_getQArmShape() {
  				var t = this._getShapeData(),
  					e = t.x3 - t.b,
  					n = this._pArmOffset + 3;
  				return {
  					class: "",
  					path: "M" + (t.x2 + n) + ",0 L" + e + ",0 Q" + (t.x3 + t.b) + "," + t.w / 2 + "," + e + "," + t.w + " L" + (t.x2 + n) + "," + t.w
  				}
  			}
  		}
  		n.d(e, "c", function () {
  			return d
  		}), n.d(e, "h", function () {
  			return g
  		}), n.d(e, "f", function () {
  			return m
  		}), n.d(e, "g", function () {
  			return p
  		}), n.d(e, "e", function () {
  			return _
  		}), n.d(e, "l", function () {
  			return b
  		}), n.d(e, "m", function () {
  			return v
  		}), n.d(e, "b", function () {
  			return y
  		}), n.d(e, "d", function () {
  			return w
  		}), n.d(e, "k", function () {
  			return x
  		}), n.d(e, "j", function () {
  			return A
  		}), n.d(e, "i", function () {
  			return C
  		}), n.d(e, "a", function () {
  			return Object
  		});
  		var h = Object.assign({}, r);
  
  		function d() {
  			return "assembly" in this.config && /(GCF_|GCA_)/.test(this.config.assembly)
  		}
  
  		function g() {
  			var t, e, n = document.scripts,
  				r = location.host.split(":")[0],
  				o = Ideogram.version;
  			if ("localhost" !== r && "127.0.0.1" !== r) return "https://unpkg.com/ideogram@" + o + "/dist/data/bands/native/";
  			for (var i = 0; i < n.length; i++)
  				if ("src" in (t = n[i]) && /ideogram/.test(t.src.split("/").slice(-1))) return (e = t.src.split("//"))[0] + "//" + (e = "/" + e[1].split("/").slice(0, -2).join("/")) + "/data/bands/native/";
  			return "../data/bands/native/"
  		}
  
  		function p(t) {
  			var e, n, r, o, i, a, s, c, u, l;
  			if (e = t.bands, n = this.config.chrHeight, r = 0, s = this.coordinateSystem, o = void 0 !== e, i = this.maxLength, l = t.length, o)
  				for (var f = 0; f < e.length; f++) c = (a = e[f])[s].stop - a[s].start, u = this._layout._isRotated ? n * c / l : n * t.length / i[s] * c / l, e[f].px = {
  					start: r,
  					stop: r + u,
  					width: u
  				}, r = e[f].px.stop, o && "acen" === a.stain && "p" === a.name[0] && (t.pcenIndex = f);
  			else r = n * t.length / i[s];
  			return t.width = r, t.scale = {}, !0 === this.config.multiorganism ? (t.scale.bp = 1, t.scale.iscn = n * l / i.bp) : (t.scale.bp = n / i.bp, o && (t.scale.iscn = n / i.iscn)), t.bands = e, t
  		}
  
  		function m(t, e, n, r) {
  			var o, i, a = {};
  			if (o = this.coordinateSystem, (i = void 0 !== t) ? (a.name = e, a.length = t[t.length - 1][o].stop, a.type = "nuclear") : a = e, a.chrIndex = r, a.id = "chr" + a.name + "-" + n, !0 === this.config.fullChromosomeLabels) {
  				var s = this.organisms[n].scientificNameAbbr;
  				a.name = s + " chr" + a.name
  			}
  			return a.bands = t, (a = this.getChromosomePixels(a)).centromerePosition = "", i && "p" === t[0].name[0] && "q" === t[1].name[0] && t[0].bp.stop - t[0].bp.start < 2e6 && (a.centromerePosition = "telocentric"), i && 1 === a.bands.length && delete a.bands, a
  		}
  
  		function _() {
  			var t = this,
  				e = t._layout.getChromosomeLabelClass(),
  				n = t._layout.getChromosomeSetLabelXPosition(),
  				r = t._layout.getChromosomeSetLabelTranslate();
  			h.selectAll(t.selector + " .chromosome-set-container").insert("text", ":first-child").data(t.chromosomesArray).attr("class", e).attr("transform", r).attr("x", n).attr("y", function (e, n) {
  				return t._layout.getChromosomeSetLabelYPosition(n)
  			}).attr("text-anchor", t._layout.getChromosomeSetLabelAnchor()).each(function (e, n) {
  				var r;
  				r = -1 === e.name.indexOf(" ") ? [e.name] : e.name.match(/^(.*)\s+([^\s]+)$/).slice(1).reverse(), "sex" in t.config && 2 === t.config.ploidy && n === t.sexChromosomes.index && (r = "male" === t.config.sex ? ["XY"] : ["XX"]), h.select(this).selectAll("tspan").data(r).enter().append("tspan").attr("dy", function (t, e) {
  					return -1.2 * e + "em"
  				}).attr("x", t._layout.getChromosomeSetLabelXPosition()).attr("class", function (e, n) {
  					var r = t.config.fullChromosomeLabels;
  					return 1 === n && r ? "italic" : null
  				}).text(String)
  			});
  			var o = t._layout.getChromosomeSetLabelTranslate();
  			h.selectAll(t.selector + " .chromosome-set-container").each(function (e, n) {
  				h.select(this).selectAll(".chromosome").append("text").attr("class", "chrLabel").attr("transform", o).attr("x", function (e, n) {
  					return t._layout.getChromosomeLabelXPosition(n)
  				}).attr("y", function (e, n) {
  					return t._layout.getChromosomeLabelYPosition(n)
  				}).text(function (e, r) {
  					return t._ploidy.getAncestor(n, r)
  				}).attr("text-anchor", "middle")
  			})
  		}
  
  		function b(t, e, n, r) {
  			var o, i, a, s, c, u, l, f;
  			if (i = this.config.chrWidth, o = this.config.chrMargin * e, c = this.config.numAnnotTracks, this, void 0 === r || !r.hasOwnProperty("x") || 1 === r.x && 1 === r.y ? (a = -8, s = -16, r = {
  				x: 1,
  				y: 1
  			}, u = "") : (u = "scale(" + r.x + "," + r.y + ")", a = -6, s = "" === r ? -16 : -14), "vertical" === n || "" === n) {
  				var h = e - 1;
  				(c > 1 || "" === n) && (h -= 1), f = -4, !0 === this.config.showBandLabels && (f = this.config.chrMargin + i + 26), o = this.config.chrMargin * h, c > 1 == !1 && (o += 1), s = o + f, t.selectAll("text.chrLabel").attr("transform", u).selectAll("tspan").attr("x", a).attr("y", s)
  			} else e -= 1, f = -i - 2, !0 === this.config.showBandLabels && (f = this.config.chrMargin + 8), l = this.config.annotTracksHeight, "overlay" !== this.config.annotationsLayout && (l *= 2), a = 3 - ((o = this.config.chrMargin * e) + f) + l, a /= r.x, t.selectAll("text.chrLabel").attr("transform", "rotate(-90)" + u).selectAll("tspan").attr("x", a).attr("y", s)
  		}
  
  		function v(t) {
  			return Math.round(100 * t) / 100
  		}
  
  		function y(t, e, n, r) {
  			var i, a, s, c, l;
  			c = h.select(this.selector + " defs"), l = o.getInstance(t), i = n * this.config.chrMargin, a = r.append("g").attr("id", t.id).attr("class", "chromosome " + l.getCssClass()).attr("transform", "translate(0, " + i + ")"), s = u.getInstance(l, this.config, this).render(a, e, n), h.select("#" + t.id + "-chromosome-set-clippath").remove(), c.append("clipPath").attr("id", t.id + "-chromosome-set-clippath").selectAll("path").data(s).enter().append("path").attr("d", function (t) {
  				return t.path
  			}).attr("class", function (t) {
  				return t.class
  			})
  		}
  
  		function w(t) {
  			var e, n, r, o, i, a;
  			if (e = t.chrIndex, o = this._layout.getChromosomeSetTranslate(e), a = this.selector + " #" + t.id + "-chromosome-set", h.selectAll(a + " g").remove(), 0 === (n = h.select(a)).nodes().length && (n = h.select(this.selector).append("g").attr("class", "chromosome-set-container").attr("data-set-number", e).attr("transform", o).attr("id", t.id + "-chromosome-set")), "sex" in this.config && 2 === this.config.ploidy && this.sexChromosomes.index === e) this.drawSexChromosomes(n, e);
  			else
  				for (r = 1, this.config.ploidy > 1 && (r = this._ploidy.getChromosomesNumber(e)), i = 0; i < r; i++) this.appendHomolog(t, e, i, n)
  		}
  
  		function x(t) {
  			var e, n, r;
  			this.config.taxid && (e = t.id.split("-")[0].replace("chr", ""), n = this.chromosomes[this.config.taxid][e].chrIndex, r = Number(h.select(t.parentNode).attr("data-set-number")), this._layout.rotate(r, n, t))
  		}
  
  		function A(t) {
  			call(this.onDidRotateCallback, t)
  		}
  
  		function C() {
  			return h.select(this.selector).node()
  		}
  	}, function (t, e, n) {
  		"use strict";
  		n.r(e);
  		var r = {
  			value: function () { }
  		};
  
  		function o() {
  			for (var t, e = 0, n = arguments.length, r = {}; e < n; ++e) {
  				if (!(t = arguments[e] + "") || t in r) throw new Error("illegal type: " + t);
  				r[t] = []
  			}
  			return new i(r)
  		}
  
  		function i(t) {
  			this._ = t
  		}
  
  		function a(t, e) {
  			for (var n, r = 0, o = t.length; r < o; ++r)
  				if ((n = t[r]).name === e) return n.value
  		}
  
  		function s(t, e, n) {
  			for (var o = 0, i = t.length; o < i; ++o)
  				if (t[o].name === e) {
  					t[o] = r, t = t.slice(0, o).concat(t.slice(o + 1));
  					break
  				}
  			return null != n && t.push({
  				name: e,
  				value: n
  			}), t
  		}
  		i.prototype = o.prototype = {
  			constructor: i,
  			on: function (t, e) {
  				var n, r = this._,
  					o = function (t, e) {
  						return t.trim().split(/^|\s+/).map(function (t) {
  							var n = "",
  								r = t.indexOf(".");
  							if (r >= 0 && (n = t.slice(r + 1), t = t.slice(0, r)), t && !e.hasOwnProperty(t)) throw new Error("unknown type: " + t);
  							return {
  								type: t,
  								name: n
  							}
  						})
  					}(t + "", r),
  					i = -1,
  					c = o.length;
  				if (!(arguments.length < 2)) {
  					if (null != e && "function" != typeof e) throw new Error("invalid callback: " + e);
  					for (; ++i < c;)
  						if (n = (t = o[i]).type) r[n] = s(r[n], t.name, e);
  						else if (null == e)
  							for (n in r) r[n] = s(r[n], t.name, null);
  					return this
  				}
  				for (; ++i < c;)
  					if ((n = (t = o[i]).type) && (n = a(r[n], t.name))) return n
  			},
  			copy: function () {
  				var t = {},
  					e = this._;
  				for (var n in e) t[n] = e[n].slice();
  				return new i(t)
  			},
  			call: function (t, e) {
  				if ((n = arguments.length - 2) > 0)
  					for (var n, r, o = new Array(n), i = 0; i < n; ++i) o[i] = arguments[i + 2];
  				if (!this._.hasOwnProperty(t)) throw new Error("unknown type: " + t);
  				for (i = 0, n = (r = this._[t]).length; i < n; ++i) r[i].value.apply(e, o)
  			},
  			apply: function (t, e, n) {
  				if (!this._.hasOwnProperty(t)) throw new Error("unknown type: " + t);
  				for (var r = this._[t], o = 0, i = r.length; o < i; ++o) r[o].value.apply(e, n)
  			}
  		};
  		var c = o;
  		n.d(e, "dispatch", function () {
  			return c
  		})
  	}, function (module, __webpack_exports__, __webpack_require__) {
  		"use strict";
  		__webpack_require__.d(__webpack_exports__, "d", function () {
  			return eutils
  		}), __webpack_require__.d(__webpack_exports__, "b", function () {
  			return esearch
  		}), __webpack_require__.d(__webpack_exports__, "c", function () {
  			return esummary
  		}), __webpack_require__.d(__webpack_exports__, "a", function () {
  			return elink
  		}), __webpack_require__.d(__webpack_exports__, "g", function () {
  			return getTaxidFromEutils
  		}), __webpack_require__.d(__webpack_exports__, "f", function () {
  			return getOrganismFromEutils
  		}), __webpack_require__.d(__webpack_exports__, "h", function () {
  			return getTaxids
  		}), __webpack_require__.d(__webpack_exports__, "e", function () {
  			return getAssemblyAndChromosomesFromEutils
  		});
  		var d3_fetch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4),
  			d3_dispatch__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2),
  			_lib_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1),
  			d3 = _lib_js__WEBPACK_IMPORTED_MODULE_2__.a.assign({}, d3_fetch__WEBPACK_IMPORTED_MODULE_0__, d3_dispatch__WEBPACK_IMPORTED_MODULE_1__),
  			eutils = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/",
  			esearch = eutils + "esearch.fcgi?retmode=json",
  			esummary = eutils + "esummary.fcgi?retmode=json",
  			elink = eutils + "elink.fcgi?retmode=json";
  
  		function getTaxidFromEutils(t) {
  			var e, n, r;
  			e = this.config.organism, n = this.esearch + "&db=taxonomy&term=" + e, d3.json(n).then(function (e) {
  				return r = e.esearchresult.idlist[0], t(r)
  			})
  		}
  
  		function getOrganismFromEutils(t) {
  			var e, n, r, o = this;
  			r = o.config.organism, n = o.esummary + "&db=taxonomy&id=" + r, d3.json(n).then(function (n) {
  				return e = n.result[String(r)].commonname, o.config.organism = e, t(e)
  			})
  		}
  
  		function getTaxids(callback) {
  			var ideo = this,
  				taxid, taxids, org, orgs, i, taxidInit, tmpChrs, assembly, chromosomes, multiorganism, promise;
  			if (taxidInit = "taxid" in ideo.config, ideo.config.multiorganism = "organism" in ideo.config && ideo.config.organism instanceof Array || taxidInit && ideo.config.taxid instanceof Array, multiorganism = ideo.config.multiorganism, "organism" in ideo.config) {
  				for (orgs = multiorganism ? ideo.config.organism : [ideo.config.organism], taxids = [], tmpChrs = {}, i = 0; i < orgs.length; i++)
  					for (taxid in org = orgs[i], ideo.organisms) ideo.organisms[taxid].commonName.toLowerCase() === org && (taxids.push(taxid), multiorganism && (tmpChrs[taxid] = ideo.config.chromosomes[org]));
  				0 === taxids.length || ideo.assemblyIsAccession() && /GCA_/.test(ideo.config.assembly) ? (promise = new Promise(function (t) {
  					ideo.getTaxidFromEutils(t)
  				}), promise.then(function (data) {
  					var organism = ideo.config.organism,
  						dataDir = ideo.config.dataDir,
  						urlOrg = organism.replace(" ", "-");
  					taxid = data, -1 === taxids.indexOf(taxid) && taxids.push(taxid), ideo.config.taxids = taxids, ideo.organisms[taxid] = {
  						commonName: "",
  						scientificName: ideo.config.organism,
  						scientificNameAbbr: ""
  					};
  					var fullyBandedTaxids = ["9606", "10090", "10116"]; - 1 !== fullyBandedTaxids.indexOf(taxid) && !1 === ideo.config.showFullyBanded && (urlOrg += "-no-bands");
  					var chromosomesUrl = dataDir + urlOrg + ".js",
  						promise2 = new Promise(function (t, e) {
  							fetch(chromosomesUrl).then(function (n) {
  								if (!1 !== n.ok) return n.text().then(function (e) {
  									t(e)
  								});
  								e(Error("Fetch failed for " + chromosomesUrl))
  							})
  						});
  					return promise2.then(function (data) {
  						var asmAndChrArray = [],
  							chromosomes = [],
  							seenChrs = {},
  							chr;
  						eval(data), asmAndChrArray.push("");
  						for (var i = 0; i < chrBands.length; i++) chr = chrBands[i].split(" ")[0], chr in seenChrs || (chromosomes.push({
  							name: chr,
  							type: "nuclear"
  						}), seenChrs[chr] = 1);
  						return chromosomes = chromosomes.sort(Ideogram.sortChromosomes), asmAndChrArray.push(chromosomes), ideo.coordinateSystem = "iscn", asmAndChrArray
  					}, function () {
  						return new Promise(function (t) {
  							ideo.coordinateSystem = "bp", ideo.getAssemblyAndChromosomesFromEutils(t)
  						})
  					})
  				}).then(function (t) {
  					assembly = t[0], chromosomes = t[1], ideo.config.chromosomes = chromosomes, ideo.organisms[taxid].assemblies = {
  						default: assembly
  					}, callback(taxids)
  				})) : (ideo.config.taxids = taxids, multiorganism && (ideo.config.chromosomes = tmpChrs), callback(taxids))
  			} else multiorganism ? (ideo.coordinateSystem = "bp", taxidInit && (taxids = ideo.config.taxid)) : (taxidInit && (taxids = [ideo.config.taxid]), ideo.config.taxids = taxids), callback(taxids)
  		}
  
  		function getAssemblyAndChromosomesFromEutils(t, e) {
  			var n, r, o, i, a, s, c, u, l, f, h, d, g, p, m, _, b, v, y, w, x, A = this;
  			o = A.config.organism, n = [], a = [], s = A.assemblyIsAccession() ? A.config.assembly + "%22[Assembly%20Accession]" : o + "%22[organism]AND%20(%22latest%20refseq%22[filter])%20", c = A.esearch + "&db=assembly&term=%22" + s + "AND%20(%22chromosome%20level%22[filter]%20OR%20%22complete%20genome%22[filter])", d3.json(c).then(function (t) {
  				return u = t.esearchresult.idlist[0], l = A.esummary + "&db=assembly&id=" + u, d3.json(l)
  			}).then(function (t) {
  				return r = t.result[u], r.rsuid, f = r.gbuid, i = r.assemblyaccession, n.push(i), p = "assembly" in A.config && /GCA_/.test(A.config.assembly) || void 0 !== e ? "&db=nuccore&linkname=gencoll_nuccore_chr&from_uid=" + f : "&db=nuccore&linkname=assembly_nuccore_refseq&from_uid=" + u, h = A.elink + p, d3.json(h)
  			}).then(function (n) {
  				if (n.linksets[0].linksetdbs[0].links.length > 100) {
  					if (void 0 === e) return A.getAssemblyAndChromosomesFromEutils(t, !0), Promise.reject("Unexpectedly found genomic scaffolds instead of chromosomes while querying RefSeq.  Recovering.");
  					throw Error("Failed to find chromosomes for genome " + i)
  				}
  				return d = n.linksets[0].linksetdbs[0].links.join(","), g = A.esummary + "&db=nucleotide&id=" + d, d3.json(g)
  			}).then(function (e) {
  				for (var r in m = e.result)
  					if (_ = m[r], "uids" !== r) {
  						if ("mitochondrion" === _.genome) {
  							if (!A.config.showNonNuclearChromosomes) continue;
  							x = _.genome, b = _.subtype.split("|").indexOf("plasmid"), v = -1 === b ? "MT" : _.subname.split("|")[b]
  						} else if ("chloroplast" === _.genome || "plastid" === _.genome) {
  							if (x = "chloroplast", !A.config.showNonNuclearChromosomes) continue;
  							v = "CP"
  						} else if ("apicoplast" === _.genome) {
  							if (x = "apicoplast", !A.config.showNonNuclearChromosomes) continue;
  							v = "AP"
  						} else x = "nuclear", b = _.subtype.split("|").indexOf("chromosome"), void 0 !== (v = _.subname.split("|")[b]) && "chr" === v.substr(0, 3) && (v = v.substr(3));
  						y = _.slen, w = {
  							name: v,
  							length: y,
  							type: x
  						}, a.push(w)
  					}
  				return a = a.sort(Ideogram.sortChromosomes), n.push(a), A.coordinateSystem = "bp", t(n)
  			}, function (t) {
  				console.warn(t)
  			})
  		}
  	}, function (t, e, n) {
  		"use strict";
  
  		function r(t) {
  			if (!t.ok) throw new Error(t.status + " " + t.statusText);
  			return t.blob()
  		}
  		n.r(e);
  		var o = function (t, e) {
  			return fetch(t, e).then(r)
  		};
  
  		function i(t) {
  			if (!t.ok) throw new Error(t.status + " " + t.statusText);
  			return t.arrayBuffer()
  		}
  		var a = function (t, e) {
  			return fetch(t, e).then(i)
  		},
  			s = {},
  			c = {},
  			u = 34,
  			l = 10,
  			f = 13;
  
  		function h(t) {
  			return new Function("d", "return {" + t.map(function (t, e) {
  				return JSON.stringify(t) + ": d[" + e + "]"
  			}).join(",") + "}")
  		}
  		var d = function (t) {
  			var e = new RegExp('["' + t + "\n\r]"),
  				n = t.charCodeAt(0);
  
  			function r(t, e) {
  				var r, o = [],
  					i = t.length,
  					a = 0,
  					h = 0,
  					d = i <= 0,
  					g = !1;
  
  				function p() {
  					if (d) return c;
  					if (g) return g = !1, s;
  					var e, r, o = a;
  					if (t.charCodeAt(o) === u) {
  						for (; a++ < i && t.charCodeAt(a) !== u || t.charCodeAt(++a) === u;);
  						return (e = a) >= i ? d = !0 : (r = t.charCodeAt(a++)) === l ? g = !0 : r === f && (g = !0, t.charCodeAt(a) === l && ++a), t.slice(o + 1, e - 1).replace(/""/g, '"')
  					}
  					for (; a < i;) {
  						if ((r = t.charCodeAt(e = a++)) === l) g = !0;
  						else if (r === f) g = !0, t.charCodeAt(a) === l && ++a;
  						else if (r !== n) continue;
  						return t.slice(o, e)
  					}
  					return d = !0, t.slice(o, i)
  				}
  				for (t.charCodeAt(i - 1) === l && --i, t.charCodeAt(i - 1) === f && --i;
  					(r = p()) !== c;) {
  					for (var m = []; r !== s && r !== c;) m.push(r), r = p();
  					e && null == (m = e(m, h++)) || o.push(m)
  				}
  				return o
  			}
  
  			function o(e) {
  				return e.map(i).join(t)
  			}
  
  			function i(t) {
  				return null == t ? "" : e.test(t += "") ? '"' + t.replace(/"/g, '""') + '"' : t
  			}
  			return {
  				parse: function (t, e) {
  					var n, o, i = r(t, function (t, r) {
  						if (n) return n(t, r - 1);
  						o = t, n = e ? function (t, e) {
  							var n = h(t);
  							return function (r, o) {
  								return e(n(r), o, t)
  							}
  						}(t, e) : h(t)
  					});
  					return i.columns = o || [], i
  				},
  				parseRows: r,
  				format: function (e, n) {
  					return null == n && (n = function (t) {
  						var e = Object.create(null),
  							n = [];
  						return t.forEach(function (t) {
  							for (var r in t) r in e || n.push(e[r] = r)
  						}), n
  					}(e)), [n.map(i).join(t)].concat(e.map(function (e) {
  						return n.map(function (t) {
  							return i(e[t])
  						}).join(t)
  					})).join("\n")
  				},
  				formatRows: function (t) {
  					return t.map(o).join("\n")
  				}
  			}
  		},
  			g = d(","),
  			p = g.parse,
  			m = (g.parseRows, g.format, g.formatRows, d("\t")),
  			_ = m.parse;
  		m.parseRows, m.format, m.formatRows;
  
  		function b(t) {
  			if (!t.ok) throw new Error(t.status + " " + t.statusText);
  			return t.text()
  		}
  		var v = function (t, e) {
  			return fetch(t, e).then(b)
  		};
  
  		function y(t) {
  			return function (e, n, r) {
  				return 2 === arguments.length && "function" == typeof n && (r = n, n = void 0), v(e, n).then(function (e) {
  					return t(e, r)
  				})
  			}
  		}
  
  		function w(t, e, n, r) {
  			3 === arguments.length && "function" == typeof n && (r = n, n = void 0);
  			var o = d(t);
  			return v(e, n).then(function (t) {
  				return o.parse(t, r)
  			})
  		}
  		var x = y(p),
  			A = y(_),
  			C = function (t, e) {
  				return new Promise(function (n, r) {
  					var o = new Image;
  					for (var i in e) o[i] = e[i];
  					o.onerror = r, o.onload = function () {
  						n(o)
  					}, o.src = t
  				})
  			};
  
  		function M(t) {
  			if (!t.ok) throw new Error(t.status + " " + t.statusText);
  			return t.json()
  		}
  		var k = function (t, e) {
  			return fetch(t, e).then(M)
  		};
  
  		function T(t) {
  			return function (e, n) {
  				return v(e, n).then(function (e) {
  					return (new DOMParser).parseFromString(e, t)
  				})
  			}
  		}
  		var S = T("application/xml"),
  			D = T("text/html"),
  			L = T("image/svg+xml");
  		n.d(e, "blob", function () {
  			return o
  		}), n.d(e, "buffer", function () {
  			return a
  		}), n.d(e, "dsv", function () {
  			return w
  		}), n.d(e, "csv", function () {
  			return x
  		}), n.d(e, "tsv", function () {
  			return A
  		}), n.d(e, "image", function () {
  			return C
  		}), n.d(e, "json", function () {
  			return k
  		}), n.d(e, "text", function () {
  			return v
  		}), n.d(e, "xml", function () {
  			return S
  		}), n.d(e, "html", function () {
  			return D
  		}), n.d(e, "svg", function () {
  			return L
  		})
  	}, function (module, __webpack_exports__, __webpack_require__) {
  		"use strict";
  		__webpack_require__.d(__webpack_exports__, "a", function () {
  			return configure
  		}), __webpack_require__.d(__webpack_exports__, "d", function () {
  			return initDrawChromosomes
  		}), __webpack_require__.d(__webpack_exports__, "b", function () {
  			return handleRotateOnClick
  		}), __webpack_require__.d(__webpack_exports__, "f", function () {
  			return setOverflowScroll
  		}), __webpack_require__.d(__webpack_exports__, "e", function () {
  			return onLoad
  		}), __webpack_require__.d(__webpack_exports__, "c", function () {
  			return init
  		});
  		var d3_fetch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4),
  			d3_selection__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(0),
  			_ploidy__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7),
  			_layouts_layout__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9),
  			_lib_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1),
  			d3 = _lib_js__WEBPACK_IMPORTED_MODULE_4__.a.assign({}, d3_fetch__WEBPACK_IMPORTED_MODULE_0__, d3_selection__WEBPACK_IMPORTED_MODULE_1__);
  
  		function configure(t) {
  			var e, n, r, o, i;
  			this.config = JSON.parse(JSON.stringify(t)), this.config.debug || (this.config.debug = !1), this.config.dataDir || (this.config.dataDir = this.getDataDir()), this.config.ploidy || (this.config.ploidy = 1), this.config.ploidy > 1 && (this.sexChromosomes = {}, this.config.sex || (this.config.sex = "male"), 2 !== this.config.ploidy || this.config.ancestors || (this.config.ancestors = {
  				M: "#ffb6c1",
  				P: "#add8e6"
  			}, this.config.ploidyDesc = "MP")), this.config.container || (this.config.container = "body"), this.selector = this.config.container + " #_ideogram", this.config.resolution || (this.config.resolution = ""), "showChromosomeLabels" in this.config == !1 && (this.config.showChromosomeLabels = !0), this.config.orientation || (e = "vertical", this.config.orientation = e), this.config.chrHeight || (o = this.config.container, i = document.querySelector(o).getBoundingClientRect(), r = "vertical" === e ? i.height : i.width, "body" === o && (r = 400), this.config.chrHeight = r), this.config.chrWidth || (n = 10, (r = this.config.chrHeight) < 900 && r > 500 ? n = Math.round(r / 40) : r >= 900 && (n = Math.round(r / 45)), this.config.chrWidth = n), this.config.chrMargin || (1 === this.config.ploidy ? this.config.chrMargin = 10 : this.config.chrMargin = Math.round(this.config.chrWidth / 4)), this.config.showBandLabels || (this.config.showBandLabels = !1), "showFullyBanded" in this.config ? this.config.showFullyBanded = t.showFullyBanded : this.config.showFullyBanded = !0, this.config.brush || (this.config.brush = null), this.config.rows || (this.config.rows = 1), this.bump = Math.round(this.config.chrHeight / 125), this.adjustedBump = !1, this.config.chrHeight < 200 && (this.adjustedBump = !0, this.bump = 4), t.showBandLabels && (this.config.chrMargin += 20), t.chromosome && (this.config.chromosomes = [t.chromosome], "showBandLabels" in t == !1 && (this.config.showBandLabels = !0), "rotatable" in t == !1 && (this.config.rotatable = !1)), this.config.showNonNuclearChromosomes || (this.config.showNonNuclearChromosomes = !1), this.initAnnotSettings(), this.config.chrMargin = this.config.chrMargin + this.config.chrWidth + 2 * this.config.annotTracksHeight, t.onLoad && (this.onLoadCallback = t.onLoad), t.onLoadAnnots && (this.onLoadAnnotsCallback = t.onLoadAnnots), t.onDrawAnnots && (this.onDrawAnnotsCallback = t.onDrawAnnots), t.onBrushMove && (this.onBrushMoveCallback = t.onBrushMove), t.onWillShowAnnotTooltip && (this.onWillShowAnnotTooltipCallback = t.onWillShowAnnotTooltip), t.onDidRotate && (this.onDidRotateCallback = t.onDidRotate), this.coordinateSystem = "iscn", this.maxLength = {
  				bp: 0,
  				iscn: 0
  			}, this.organisms = {
  				9606: {
  					commonName: "Human",
  					scientificName: "Homo sapiens",
  					scientificNameAbbr: "H. sapiens",
  					assemblies: {
  						default: "GCF_000001405.26",
  						GRCh38: "GCF_000001405.26",
  						GRCh37: "GCF_000001405.13"
  					}
  				},
  				10090: {
  					commonName: "Mouse",
  					scientificName: "Mus musculus",
  					scientificNameAbbr: "M. musculus",
  					assemblies: {
  						default: "GCF_000001635.20"
  					}
  				},
  				4641: {
  					commonName: "banana",
  					scientificName: "Musa acuminata",
  					scientificNameAbbr: "M. acuminata",
  					assemblies: {
  						default: "mock"
  					}
  				}
  			}, this.chromosomesArray = [], this.bandsToShow = [], this.chromosomes = {}, this.numChromosomes = 0, this.bandData = {}, this.init()
  		}
  
  		function initDrawChromosomes(t) {
  			var e, n, r, o, i, a, s, c = this.config.taxids,
  				u = this.config.ploidy,
  				l = 0;
  			for (t.length > 0 && (this.bandsArray = {}), r = 0; r < c.length; r++) {
  				e = c[r], i = this.config.chromosomes[e], "undefined" != typeof chrBands && i.length >= chrBands.length / 2 && (this.coordinateSystem = "bp"), this.chromosomes[e] = {}, this.setSexChromosomes(i), "bandsArray" in this && (this.bandsArray[e] = t);
  				for (o = 0; o < i.length; o++) a = i[o], "bandsArray" in this && (n = t[l]), s = this.getChromosomeModel(n, a, e, l), l += 1, "string" != typeof a && (a = a.name), this.chromosomes[e][a] = s, this.chromosomesArray.push(s), "sex" in this.config && (2 === u && this.sexChromosomes.index + 2 === l || "female" === this.config.sex && "Y" === s.name) || this.drawChromosome(s);
  				!0 === this.config.showBandLabels && this.drawBandLabels(this.chromosomes), this.handleRotateOnClick(), this._gotChrModels = !0
  			}
  		}
  
  		function handleRotateOnClick() {
  			var t = this;
  			"rotatable" in t.config && !1 === t.config.rotatable ? d3.selectAll(t.selector + " .chromosome").style("cursor", "default") : d3.selectAll(t.selector + " .chromosome").on("click", function () {
  				t.rotateAndToggleDisplay(this)
  			})
  		}
  
  		function onLoad() {
  			call(this.onLoadCallback)
  		}
  
  		function setOverflowScroll() {
  			var t, e, n, r, o, i, a;
  			t = this.config, o = d3.select(t.container + " svg#_ideogram"), n = d3.select(t.container + " #_ideogramInnerWrap"), r = d3.select(t.container + " #_ideogramOuterWrap"), a = (i = t.ploidy) - 1, "vertical" === t.orientation && "comparative" !== t.perspective && (e = (this.numChromosomes + 2) * (t.chrWidth + t.chrMargin + a), e = Math.round(e * i / t.rows), r.style("height", this._layout.getHeight() + "px"), n.style("max-width", e - 300 + "px").style("overflow-x", "scroll").style("position", "absolute"), o.style("min-width", e - 5 + "px"))
  		}
  
  		function init() {
  			var taxid, i, svgClass, ideo = this,
  				t0 = (new Date).getTime(),
  				bandsArray = [],
  				numBandDataResponses = 0,
  				resolution = this.config.resolution,
  				accession, promise = new Promise(function (t) {
  					"number" == typeof ideo.config.organism ? ideo.getOrganismFromEutils(function () {
  						ideo.getTaxids(t)
  					}) : ideo.getTaxids(t)
  				});
  
  			function writeContainer() {
  				if (ideo.config.annotationsPath && ideo.fetchAnnots(ideo.config.annotationsPath), "ploidyDesc" in ideo.config && "string" == typeof ideo.config.ploidyDesc) {
  					for (var t = [], e = 0; e < ideo.numChromosomes; e++) t.push(ideo.config.ploidyDesc);
  					ideo.config.ploidyDesc = t
  				}
  				ideo._ploidy = new _ploidy__WEBPACK_IMPORTED_MODULE_2__.a(ideo.config), ideo._layout = _layouts_layout__WEBPACK_IMPORTED_MODULE_3__.a.getInstance(ideo.config, ideo), svgClass = "", ideo.config.showChromosomeLabels && ("horizontal" === ideo.config.orientation ? svgClass += "labeledLeft " : svgClass += "labeled "), ideo.config.annotationsLayout && "overlay" === ideo.config.annotationsLayout && (svgClass += "faint");
  				var n = ideo.getBandColorGradients(),
  					r = ideo._layout.getWidth(taxid),
  					o = ideo._layout.getHeight(taxid);
  				d3.select(ideo.config.container).append("div").attr("id", "_ideogramOuterWrap").append("div").attr("id", "_ideogramInnerWrap").append("svg").attr("id", "_ideogram").attr("class", svgClass).attr("width", r).attr("height", o).html(n), ideo.isOnlyIdeogram = 1 === document.querySelectorAll("#_ideogram").length, d3.select(ideo.config.container + " #_ideogramOuterWrap").append("div").attr("class", "tooltip").attr("id", "tooltip").style("opacity", 0).style("position", "absolute").style("text-align", "center").style("padding", "4px").style("font", "12px sans-serif").style("background", "white").style("border", "1px solid black").style("border-radius", "5px"), finishInit()
  			}
  
  			function finishInit() {
  				try {
  					var t, e, n = (new Date).getTime();
  					if (e = ideo.config, ideo.initDrawChromosomes(bandsArray), e.annotationsPath) {
  						function r() {
  							
  							void 0 !== ideo.timeout && window.clearTimeout(ideo.timeout),
  								ideo.rawAnnots = ideo.setOriginalTrackIndexes(ideo.rawAnnots),
  								e.annotationsDisplayedTracks ? ideo.annots = ideo.updateDisplayedTracks(e.annotationsDisplayedTracks) : (ideo.annots = ideo.processAnnotData(ideo.rawAnnots),
  									ideo.config.filterable && ideo.initCrossFilter(),
  									ideo.drawProcessedAnnots(ideo.annots))
  						}
  						ideo.rawAnnots ? r() : function t() {
  							ideo.timeout = setTimeout(function () {
  								ideo.rawAnnots ? r() : t()
  							}, 50)
  						}()
  					}
  					if (!0 === ideo.config.showBandLabels) {
  						ideo.hideUnshownBandLabels();
  						var o, i = (new Date).getTime();
  						if (e.debug && console.log("Time in showing bands: " + (i - t0C) + " ms"), "vertical" === e.orientation)
  							for (t = 0; t < ideo.chromosomesArray.length; t++) o = "#" + ideo.chromosomesArray[t].id, ideo.rotateChromosomeLabels(d3.select(o), t)
  					} !0 === e.showChromosomeLabels && ideo.drawChromosomeLabels(ideo.chromosomes), e.brush && ideo.createBrush(e.brush), e.annotations && ideo.drawAnnots(e.annotations);
  					var a = (new Date).getTime();
  					e.debug && console.log("Time in drawChromosome: " + (a - n) + " ms");
  					var s = (new Date).getTime();
  					e.debug && console.log("Time constructing ideogram: " + (s - t0) + " ms"), ideo.setOverflowScroll(), ideo.onLoadCallback && ideo.onLoadCallback()
  				} catch (t) {
  					throw t
  				}
  			}
  			promise.then(function (taxids) {
  				var assemblies, bandFileName;
  				taxid = taxids[0], ideo.config.taxid = taxid, ideo.config.taxids = taxids;
  				var bandDataFileNames = {
  					9606: "",
  					10090: ""
  				};
  				for (i = 0; i < taxids.length; i++)
  					if (taxid = String(taxids[i]), ideo.config.assembly || (ideo.config.assembly = "default"), assemblies = ideo.organisms[taxid].assemblies, accession = ideo.assemblyIsAccession() ? ideo.config.assembly : assemblies[ideo.config.assembly], bandFileName = [], bandFileName.push(Ideogram.slugify(ideo.organisms[taxid].scientificName)), accession !== assemblies.default && bandFileName.push(accession), "9606" === taxid && (accession in assemblies === "false" && -1 === _lib_js__WEBPACK_IMPORTED_MODULE_4__.a.values(assemblies).indexOf(ideo.config.assembly) || "" !== resolution && 850 !== resolution) && bandFileName.push(resolution), bandFileName = bandFileName.join("-") + ".js", "9606" !== taxid && "10090" !== taxid || (bandDataFileNames[taxid] = bandFileName), void 0 !== accession && !1 === /GCA_/.test(ideo.config.assembly) && "undefined" == typeof chrBands && taxid in bandDataFileNames) {
  						var bandDataUrl = ideo.config.dataDir + bandDataFileNames[taxid];
  						fetch(bandDataUrl).then(function (response) {
  							return response.text().then(function (text) {
  								var fetchedTaxid, tid, bandDataFileName;
  								for (tid in eval(text), bandDataFileNames) bandDataFileName = bandDataFileNames[tid], response.url.includes(bandDataFileName) && "" !== bandDataFileName && (fetchedTaxid = tid);
  								ideo.bandData[fetchedTaxid] = chrBands, numBandDataResponses += 1, numBandDataResponses === taxids.length && (bandsArray = ideo.processBandData(), writeContainer())
  							})
  						})
  					} else "undefined" != typeof chrBands && (ideo.bandData[taxid] = chrBands), bandsArray = ideo.processBandData(), writeContainer()
  			})
  		}
  	}, function (module, __webpack_exports__, __webpack_require__) {
  		"use strict";
  		__webpack_require__.d(__webpack_exports__, "c", function () {
  			return getBands
  		}), __webpack_require__.d(__webpack_exports__, "a", function () {
  			return drawBandLabels
  		}), __webpack_require__.d(__webpack_exports__, "b", function () {
  			return getBandColorGradients
  		}), __webpack_require__.d(__webpack_exports__, "e", function () {
  			return processBandData
  		}), __webpack_require__.d(__webpack_exports__, "f", function () {
  			return setBandsToShow
  		}), __webpack_require__.d(__webpack_exports__, "d", function () {
  			return hideUnshownBandLabels
  		});
  		var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0),
  			_lib_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1),
  			d3 = _lib_js__WEBPACK_IMPORTED_MODULE_1__.a.assign({}, d3_selection__WEBPACK_IMPORTED_MODULE_0__);
  
  		function getBands(content, taxid, chromosomes) {
  			var lines = {},
  				delimiter, tsvLines, columns, line, stain, chr, i, init, tsvLinesLength, source, tmp;
  			if ("window.chrBands" === content.slice(0, 15) && (source = "native"), chromosomes instanceof Array && "object" == typeof chromosomes[0]) {
  				for (tmp = [], i = 0; i < chromosomes.length; i++) tmp.push(chromosomes[i].name);
  				chromosomes = tmp
  			}
  			for ("undefined" == typeof chrBands && "native" !== source ? (delimiter = /\t/, tsvLines = content.split(/\r\n|\n/), init = 1) : (delimiter = / /, tsvLines = "native" === source ? eval(content) : content, init = 0), tsvLinesLength = tsvLines.length, i = init; i < tsvLinesLength; i++) columns = tsvLines[i].split(delimiter), chr = columns[0], void 0 !== chromosomes && -1 === chromosomes.indexOf(chr) || (chr in lines == !1 && (lines[chr] = []), stain = columns[7], columns[8] && (stain += columns[8]), line = {
  				chr: chr,
  				bp: {
  					start: parseInt(columns[5], 10),
  					stop: parseInt(columns[6], 10)
  				},
  				iscn: {
  					start: parseInt(columns[3], 10),
  					stop: parseInt(columns[4], 10)
  				},
  				px: {
  					start: -1,
  					stop: -1,
  					width: -1
  				},
  				name: columns[1] + columns[2],
  				stain: stain,
  				taxid: taxid
  			}, lines[chr].push(line));
  			return lines
  		}
  
  		function setBandsToShow(t, e) {
  			var n, r, o, i, a, s, c, u, l, f, h, d, g;
  			for (this.bandsToShow = [], u = 0; u < t.length; u++) {
  				for (l = [], n = e[(f = t[u]).id].length, r = 0, c = 5, o = 0; o < n; o++)(a = e[f.id][o]) < r + c == !1 ? (l.push(o), i !== o && (s = e[f.id][o] + 36), a < s + c ? (i = o, r = s) : l.push(o)) : (i = o, r = s);
  				for (h = [], d = l.length, g = 0; g < d; g++) o = l[g], h.push("#" + f.id + " .bsbsl-" + o);
  				this.bandsToShow = this.bandsToShow.concat(h)
  			}
  		}
  
  		function hideUnshownBandLabels() {
  			var t = this.bandsToShow.join(",");
  			(new Date).getTime();
  			d3.selectAll(this.selector + " .bandLabel, .bandLabelStalk").style("display", "none"), d3.selectAll(t).style("display", "")
  		}
  
  		function drawBandLabels(t) {
  			var e, n, r, o, i, a, s, c = this,
  				u = c.config.orientation;
  			for (o in r = [], t)
  				for (n in t[o]) r.push(t[o][n]);
  			for (a = {}, 0, e = 0; e < r.length; e++) 1, s = (i = r[e]).bands.filter(t => "pter" !== t.name), n = d3.select(c.selector + " #" + i.id), a[i.id] = [], n.selectAll("text").data(s).enter().append("g").attr("class", function (t, e) {
  				return "bandLabel bsbsl-" + e
  			}).attr("transform", function (t) {
  				var n = c._layout.getChromosomeBandLabelTranslate(t, e);
  				return "horizontal" === u ? a[i.id].push(n.x + 13) : a[i.id].push(n.y + 6), n.translate
  			}).append("text").attr("text-anchor", c._layout.getChromosomeBandLabelAnchor(e)).text(function (t) {
  				return t.name
  			}), n.selectAll("line.bandLabelStalk").data(s).enter().append("g").attr("class", function (t, e) {
  				return "bandLabelStalk bsbsl-" + e
  			}).attr("transform", function (t) {
  				var e;
  				return e = c.round(t.px.start + t.px.width / 2), -10, a[i.id].push(e + 13), "translate(" + e + "," + -10 + ")"
  			}).append("line").attr("x1", 0).attr("y1", function () {
  				return c._layout.getChromosomeBandTickY1(e)
  			}).attr("x2", 0).attr("y2", function () {
  				return c._layout.getChromosomeBandTickY2(e)
  			});
  			c.setBandsToShow(r, a)
  		}
  
  		function getBandColorGradients() {
  			var t, e, n, r, o, i = "";
  			t = [
  				["gneg", "#FFF", "#FFF", "#DDD"],
  				["gpos25", "#C8C8C8", "#DDD", "#BBB"],
  				["gpos33", "#BBB", "#BBB", "#AAA"],
  				["gpos50", "#999", "#AAA", "#888"],
  				["gpos66", "#888", "#888", "#666"],
  				["gpos75", "#777", "#777", "#444"],
  				["gpos100", "#444", "#666", "#000"],
  				["acen", "#FEE", "#FEE", "#FDD"],
  				["noBands", "#BBB", "#BBB", "#AAA"]
  			];
  			for (var a = 0; a < t.length; a++) e = t[a][0], n = t[a][1], r = t[a][2], o = t[a][3], i += '<linearGradient id="' + e + '" x1="0%" y1="0%" x2="0%" y2="100%">', i += "gneg" === e ? '<stop offset="70%" stop-color="' + r + '" /><stop offset="95%" stop-color="' + o + '" /><stop offset="100%" stop-color="' + n + '" />' : '<stop offset="5%" stop-color="' + n + '" /><stop offset="15%" stop-color="' + r + '" /><stop offset="60%" stop-color="' + o + '" />', i += "</linearGradient>";
  			return i = '<style>svg#_ideogram  {padding-left: 5px;} svg#_ideogram .labeled {padding-left: 9px;} svg#_ideogram.labeledLeft {padding-left: 13px; padding-top: 15px;} #_ideogram text {font: 9px Tahoma; fill: #000;} #_ideogram .italic {font-style: italic;} #_ideogram .chromosome {cursor: pointer; fill: #AAA;}#_ideogram .chrSetLabel {font-weight: bolder;}#_ideogram .ghost {opacity: 0.2;}#_ideogram .hidden {display: none;}#_ideogram .bandLabelStalk line {stroke: #AAA; stroke-width: 1;}#_ideogram .syntenyBorder {stroke:#AAA;stroke-width:1;}#_ideogram .brush .selection {  fill: #F00;  stroke: #F00;  fill-opacity: .3;  shape-rendering: crispEdges;}#_ideogram .noBands {fill: #AAA;}#_ideogram .gneg {fill: #FFF}#_ideogram .gpos25 {fill: #BBB}#_ideogram .gpos33 {fill: #AAA}#_ideogram .gpos50 {fill: #888}#_ideogram .gpos66 {fill: #666}#_ideogram .gpos75 {fill: #444}#_ideogram .gpos100 {fill: #000}#_ideogram .gpos {fill: #000}#_ideogram .acen {fill: #FDD}#_ideogram .stalk {fill: #CCE;}#_ideogram .gvar {fill: #DDF}#_ideogram.faint .gneg {fill: #FFF}#_ideogram.faint .gpos25 {fill: #EEE}#_ideogram.faint .gpos33 {fill: #EEE}#_ideogram.faint .gpos50 {fill: #EEE}#_ideogram.faint .gpos66 {fill: #EEE}#_ideogram.faint .gpos75 {fill: #EEE}#_ideogram.faint .gpos100 {fill: #DDD}#_ideogram.faint .gpos {fill: #DDD}#_ideogram.faint .acen {fill: #FEE}#_ideogram.faint .stalk {fill: #EEF;}#_ideogram.faint .gvar {fill: #EEF}#_ideogram .gneg {fill: url("#gneg")} #_ideogram .gpos25 {fill: url("#gpos25")} #_ideogram .gpos33 {fill: url("#gpos33")} #_ideogram .gpos50 {fill: url("#gpos50")} #_ideogram .gpos66 {fill: url("#gpos66")} #_ideogram .gpos75 {fill: url("#gpos75")} #_ideogram .gpos100 {fill: url("#gpos100")} #_ideogram .gpos {fill: url("#gpos100")} #_ideogram .acen {fill: url("#acen")} #_ideogram .stalk {fill: url("#stalk")} #_ideogram .gvar {fill: url("#gvar")} #_ideogram .noBands {fill: url("#noBands")} #_ideogram .chromosome {fill: url("#noBands")} </style>' + (i = "<defs>" + (i += '<pattern id="stalk" width="2" height="1" patternUnits="userSpaceOnUse" patternTransform="rotate(30 0 0)"><rect x="0" y="0" width="8" height="2" fill="#CCE" /> <line x1="0" y1="0" x2="0" y2="100%" style="stroke:#88B; stroke-width:0.7;" /></pattern><pattern id="gvar" width="2" height="1" patternUnits="userSpaceOnUse" patternTransform="rotate(-30 0 0)"><rect x="0" y="0" width="10" height="2" fill="#DDF" /> <line x1="0" y1="0" x2="0" y2="100%" style="stroke:#99C; stroke-width:0.7;" /></pattern>') + "</defs>")
  		}
  
  		function processBandData() {
  			var t, e, n, r, o, i, a, s, c, u, l, f, h;
  			if (t = [], !0 === this.config.multiorganism)
  				for (this.coordinateSystem = "bp", l = this.config.taxids, e = 0; e < l.length; e++) u = l[e];
  			else void 0 === this.config.taxid && (this.config.taxid = this.config.taxids[0]), l = [u = this.config.taxid], this.config.taxids = l;
  			"chromosomes" in this.config && (f = this.config.chromosomes), this.config.multiorganism && (h = f), this.config.chromosomes = {};
  			var d = (new Date).getTime();
  			for (n = 0; n < l.length; n++)
  				if (u = l[n], this.config.multiorganism && (f = h[u]), "iscn" === this.coordinateSystem || this.config.multiorganism)
  					for (s = this.bandData[u], c = this.getBands(s, u, f), f = _lib_js__WEBPACK_IMPORTED_MODULE_1__.a.keys(c).sort(function (t, e) {
  						return Ideogram.naturalSort(t, e)
  					}), this.config.chromosomes[u] = f.slice(), this.numChromosomes += this.config.chromosomes[u].length, r = 0; r < f.length; r++) o = c[f[r]], t.push(o), (i = {
  						iscn: o[o.length - 1].iscn.stop,
  						bp: o[o.length - 1].bp.stop
  					}).iscn > this.maxLength.iscn && (this.maxLength.iscn = i.iscn), i.bp > this.maxLength.bp && (this.maxLength.bp = i.bp);
  				else if ("bp" === this.coordinateSystem)
  					for (this.config.chromosomes[u] = f.slice(), this.numChromosomes += this.config.chromosomes[u].length, r = 0; r < f.length; r++)(a = f[r]).length > this.maxLength.bp && (this.maxLength.bp = a.length);
  			var g = (new Date).getTime();
  			return this.config.debug && console.log("Time in processBandData: " + (g - d) + " ms"), t
  		}
  	}, function (t, e, n) {
  		"use strict";
  		n.d(e, "a", function () {
  			return r
  		});
  		class r {
  			constructor(t) {
  				this._config = t, this._description = this._normalize(this._config.ploidyDesc)
  			}
  			getChromosomesNumber(t) {
  				if (this._config.ploidyDesc) {
  					var e = this._config.ploidyDesc[t];
  					return e instanceof Object ? Object.keys(e)[0].length : e.length
  				}
  				return this._config.ploidy || 1
  			}
  			_normalize(t) {
  				var e, n, r;
  				if (!t) return t;
  				for (n in e = [], t) "string" == typeof (r = t[n]) ? ("vertical" === this._config.orientation && (r = r.split("").reverse()), e.push({
  					ancestors: r,
  					existence: this._getexistenceArray(r.length)
  				})) : e.push({
  					ancestors: Object.keys(r)[0],
  					existence: r[Object.keys(r)[0]]
  				});
  				return e
  			}
  			_getexistenceArray(t) {
  				for (var e = [], n = 0; n < t; n++) e.push("11");
  				return e
  			}
  			getSetSize(t) {
  				return this._description ? this._description[t].ancestors.length : 1
  			}
  			getAncestor(t, e) {
  				return this._description ? this._description[t].ancestors[e] : ""
  			}
  			exists(t, e, n) {
  				if (this._description) {
  					var r = this._description[t].existence[e][n];
  					return Number(r) > 0
  				}
  				return !0
  			}
  		}
  	}, function (t, e, n) {
  		t.exports = n(10).crossfilter
  	}, function (t, e, n) {
  		"use strict";
  		var r = n(0),
  			o = n(1),
  			i = o.a.assign({}, r);
  		class a {
  			constructor(t) {
  				this._node = t
  			}
  			getLabel() {
  				return i.select(this._node.parentNode).select("text.chrLabel").text()
  			}
  			getSetLabel() {
  				return i.select(this._node.parentNode).select("text.chrSetLabel").text()
  			}
  		}
  		n.d(e, "a", function () {
  			return c
  		});
  		var s = o.a.assign({}, r);
  		class c {
  			constructor(t, e) {
  				if (this._config = t, this._ideo = e, this._ploidy = this._ideo._ploidy, this._translate = void 0, "chrSetMargin" in t) this.chrSetMargin = t.chrSetMargin;
  				else {
  					var n = this._config.chrMargin;
  					this.chrSetMargin = this._config.ploidy > 1 ? n : 0
  				}
  				this._tickSize = 8, this._isRotated = !1
  			}
  			static getInstance(t, e) {
  				return "perspective" in t && "comparative" === t.perspective ? new l(t, e) : "rows" in t && t.rows > 1 ? new f(t, e) : "vertical" === t.orientation ? new h(t, e) : "horizontal" === t.orientation ? new u(t, e) : new h(t, e)
  			}
  			_getLeftMargin() {
  				return this.margin.left
  			}
  			_getYScale() {
  				return 20 / this._config.chrWidth
  			}
  			getChromosomeLabels(t) {
  				var e = new a(t),
  					n = [];
  				return this._ideo.config.ploidy > 1 && n.push(e.getSetLabel()), n.push(e.getLabel()), n.filter(function (t) {
  					return t.length > 0
  				})
  			}
  			getChromosomeBandLabelTranslate(t) {
  				var e, n, r, o = this._ideo,
  					i = this._tickSize,
  					a = o.config.orientation;
  				return "vertical" === a ? r = "rotate(-90)translate(" + (e = i) + "," + (n = o.round(2 + t.px.start + t.px.width / 2)) + ")" : "horizontal" === a && (r = "translate(" + (e = o.round(-i + t.px.start + t.px.width / 2)) + "," + (n = -10) + ")"), {
  					x: e,
  					y: n,
  					translate: r
  				}
  			}
  			didRotate(t, e) {
  				var n, r, o, i, a, c, u, l, f;
  				r = (n = this._ideo).config.taxid,
  					o = e.id.split("-")[0].replace("chr", ""),
  					i = (a = n.chromosomes[r][o]).bands,
  					l = (u = s.select(e.parentNode)).attr("transform"),
  					f = /scale\(.*\)/.exec(l),
  					l = l.replace(f, ""), u.attr("transform", l),
  					c = a.width, (a = n.getChromosomeModel(i, o, r, t)).oldWidth = c,
  					n.chromosomes[r][o] = a, n.drawChromosome(a), n.handleRotateOnClick(),
  					n.rawAnnots && (n.displayedTrackIndexes ? n.updateDisplayedTracks(n.displayedTrackIndexes) : (n.annots = n.processAnnotData(n.rawAnnots),
  						n.drawProcessedAnnots(n.annots), n.config.filterable && n.initCrossFilter())),
  					!0 === n.config.showBandLabels && (n.drawBandLabels(n.chromosomes), n.hideUnshownBandLabels()),
  					n.onDidRotateCallback && n.onDidRotateCallback(a)
  			}
  			rotate(t, e, n) {
  				var r, o, i, a;
  				r = this._ideo, a = r.selector + " .chrSetLabel, " + r.selector + " .chrLabel", i = document.querySelector(r.selector).getBoundingClientRect(), o = s.selectAll(r.selector + " g.chromosome").filter(function () {
  					return this !== n
  				}), this._isRotated ? (this._isRotated = !1, r.config.chrHeight = r.config.chrHeightOriginal, r.config.chrWidth = r.config.chrWidthOriginal, r.config.annotationHeight = r.config.annotationHeightOriginal, this.rotateBack(t, e, n, function () {
  					o.style("display", null), s.selectAll(a).style("display", null), r._layout.didRotate(e, n)
  				})) : (this._isRotated = !0, o.style("display", "none"), s.selectAll(a).style("display", "none"), this.rotateForward(t, e, n, function () {
  					var t, o, a;
  					r.config.chrHeightOriginal = r.config.chrHeight, r.config.chrWidthOriginal = r.config.chrWidth, r.config.annotationHeightOriginal = r.config.annotationHeight, "VerticalLayout" === r._layout._class ? (o = i.width, a = window.innerWidth) : (o = i.height - 10, a = window.innerHeight - 10), t = a < o ? a : o, t -= 2 * r.config.chrMargin, r.config.chrHeight = t, r.config.chrWidth *= 2.3, r.config.annotationHeight *= 1.7, r._layout.didRotate(e, n)
  				}))
  			}
  			getChromosomeLabelClass() {
  				return 1 === this._config.ploidy ? "chrLabel" : "chrSetLabel"
  			}
  			_getAdditionalOffset() {
  				return (this._config.annotationHeight || 0) * (this._config.numAnnotTracks || 1)
  			}
  			_getChromosomeSetSize(t) {
  				return this._ploidy.getSetSize(t) * this._config.chrWidth * 2 + this.chrSetMargin
  			}
  			getChromosomeSetLabelAnchor() {
  				return "middle"
  			}
  			getChromosomeLabelYPosition() {
  				return -5.5
  			}
  			getChromosomeSetLabelYPosition(t) {
  				return 1 === this._config.ploidy ? this.getChromosomeLabelYPosition(t) : -2 * this._config.chrWidth
  			}
  		}
  		class u extends c {
  			constructor(t, e) {
  				super(t, e), this._class = "HorizontalLayout", this.margin = {
  					left: 30,
  					top: 30,
  
  				}
  			}
  			_getLeftMargin() {
  				var t = c.prototype._getLeftMargin.call(this);
  				return this._config.ploidy > 1 && (t *= 1.8), t
  			}
  			rotateForward(t, e, n, r) {
  				var o, i;
  				o = "rotate(90) translate(30, -37.5) ", s.select(n.parentNode).transition().attr("transform", o).on("end", r), i = this.getChromosomeLabels(n), s.select(this._ideo.getSvg()).append("g").attr("class", "tmp").selectAll("text").data(i).enter().append("text").attr("class", function (t, e) {
  					return 0 === e && 2 === i.length ? "chrSetLabel" : null
  				}).attr("x", 26).attr("y", function (t, e) {
  					return 12 * (e + 1 + i.length % 2)
  				}).style("text-anchor", "middle").style("opacity", 0).text(String).transition().style("opacity", 1), this._ideo.config.orientation = "vertical"
  			}
  			rotateBack(t, e, n, r) {
  				var o = this.getChromosomeSetTranslate(t);
  				s.select(n.parentNode).transition().attr("transform", o).on("end", r), s.selectAll(this._ideo.selector + " g.tmp").style("opacity", 0).remove(), this._ideo.config.orientation = "horizontal"
  			}
  			getHeight(t) {
  				var e = this._config.chromosomes[t].length,
  					n = this.getChromosomeSetYTranslate(e - 1);
  				return (n += this._getChromosomeSetSize(e - 1)) + 2 * this._getAdditionalOffset()
  			}
  			getWidth() {
  				return this._config.chrHeight + 1.5 * this.margin.top
  			}
  			getChromosomeSetLabelAnchor() {
  				return "end"
  			}
  			getChromosomeBandLabelAnchor() {
  				return null
  			}
  			getChromosomeBandTickY1() {
  				return 2
  			}
  			getChromosomeBandTickY2() {
  				return 10
  			}
  			getChromosomeSetLabelTranslate() {
  				return null
  			}
  			getChromosomeSetTranslate(t) {
  				return "translate(" + this._getLeftMargin() + ", " + this.getChromosomeSetYTranslate(t) + ")"
  			}
  			getChromosomeSetYTranslate(t) {
  				if (!this._config.ploidyDesc) return this._config.chrMargin * (t + 1);
  				if (!this._translate) {
  					this._translate = [1];
  					for (var e = 1; e < this._config.ploidyDesc.length; e++) this._translate[e] = this._translate[e - 1] + this._getChromosomeSetSize(e - 1)
  				}
  				return this._translate[t]
  			}
  			getChromosomeSetLabelXPosition(t) {
  				return 1 === this._config.ploidy ? this.getChromosomeLabelXPosition(t) : -20
  			}
  			getChromosomeSetLabelYPosition(t) {
  				var e = this._ploidy.getSetSize(t),
  					n = this._config,
  					r = n.chrMargin,
  					o = n.chrWidth;
  				return 1 === n.ploidy ? o / 2 + 3 : e * r / 2
  			}
  			getChromosomeLabelXPosition() {
  				return -8
  			}
  			getChromosomeLabelYPosition() {
  				return this._config.chrWidth
  			}
  		}
  		class l extends c {
  			constructor(t, e) {
  				super(t, e), this._class = "PairedLayout", this.margin = {
  					left: 30
  				}
  			}
  			rotateForward(t, e, n, r) {
  				console.warn("rotateForward not implemented for PairedLayout")
  			}
  			rotateBack(t, e, n, r) {
  				console.warn("rotateBack not implemented for PairedLayout")
  			}
  			getHeight() {
  				return this._config.chrHeight + 1.5 * this.margin.left
  			}
  			getWidth() {
  				return "97%"
  			}
  			getChromosomeBandTickY1(t) {
  				return t % 2 ? this._config.chrWidth : 2 * this._config.chrWidth
  			}
  			getChromosomeBandTickY2(t) {
  				var e = this._config.chrWidth;
  				return t % 2 ? e - this._tickSize : 2 * e + this._tickSize
  			}
  			getChromosomeBandLabelAnchor(t) {
  				return t % 2 ? null : "end"
  			}
  			getChromosomeBandLabelTranslate(t, e) {
  				var n = e % 2 ? 10 : -this._config.chrWidth - 10,
  					r = this._ideo.round(t.px.start + t.px.width / 2) + 3;
  				return {
  					x: r,
  					y: r,
  					translate: "rotate(-90) translate(" + n + ", " + r + ")"
  				}
  			}
  			getChromosomeLabelXPosition() {
  				return -this._tickSize
  			}
  			getChromosomeSetLabelXPosition() {
  				return this._config.chrWidth / -2
  			}
  			getChromosomeSetLabelTranslate() {
  				return "rotate(-90)"
  			}
  			getChromosomeSetTranslate(t) {
  				var e = this.getChromosomeSetYTranslate(t);
  				return "rotate(90) translate(" + this.margin.left + ", -" + e + ")"
  			}
  			getChromosomeSetYTranslate(t) {
  				return 200 * (t + 1)
  			}
  		}
  		class f extends c {
  			constructor(t, e) {
  				super(t, e), this._class = "SmallLayout", this.margin = {
  					left: 36.5,
  					top: 10
  				}
  			}
  			getHeight() {
  				var t = this._config.chrHeight;
  				return this._config.rows * (t + 1.5 * this.margin.top)
  			}
  			getWidth() {
  				return "97%"
  			}
  			getChromosomeBandLabelTranslate() { }
  			getChromosomeSetLabelTranslate() {
  				return "rotate(-90)"
  			}
  			getChromosomeSetTranslate(t) {
  				var e = [];
  				this._ideo.getTaxids(function (t) {
  					e = t
  				});
  				var n, r, o = this._ideo.config.chromosomes[e[0]].length / this._config.rows;
  				return t > o - 1 ? (n = this.margin.left + 1.4 * this._config.chrHeight, r = this.getChromosomeSetYTranslate(t - o)) : (n = this.margin.left, r = this.getChromosomeSetYTranslate(t)), "rotate(90) translate(" + n + ", -" + r + ")"
  			}
  			getChromosomeSetYTranslate(t) {
  				var e = this._getAdditionalOffset();
  				return this.margin.left * t + this._config.chrWidth + 2 * e + e * t
  			}
  			getChromosomeSetLabelXPosition(t) {
  				return (this._ploidy.getSetSize(t) * this._config.chrWidth + 20) / -2 + (this._config.ploidy > 1 ? 0 : this._config.chrWidth)
  			}
  			getChromosomeLabelXPosition() {
  				return this._config.chrWidth / -2
  			}
  		}
  		class h extends c {
  			constructor(t, e) {
  				super(t, e), this._class = "VerticalLayout", this.margin = {
  					top: 70,
  					left: 1
  				}
  			}
  			rotateForward(t, e, n, r) {
  				var o = "translate(20, 25) " + this.getChromosomeScale(n);
  				s.select(n.parentNode).transition().attr("transform", o).on("end", r);
  				var i = this.getChromosomeLabels(n),
  					a = 1.3 * (20 + this._config.chrWidth);
  				s.select(this._ideo.getSvg()).append("g").attr("class", "tmp").selectAll("text").data(i).enter().append("text").attr("class", function (t, e) {
  					return 0 === e && 2 === i.length ? "chrSetLabel" : null
  				}).attr("x", 0).attr("y", a).style("opacity", 0).text(String).transition().style("opacity", 1), this._ideo.config.orientation = "horizontal"
  			}
  			rotateBack(t, e, n, r) {
  				var o = this.getChromosomeScaleBack(n),
  					i = this.getChromosomeSetTranslate(t);
  				s.select(n.parentNode).transition().attr("transform", i + " " + o).on("end", r), s.selectAll(this._ideo.selector + " g.tmp").style("opacity", 0).remove(), this._ideo.config.orientation = "vertical"
  			}
  			getHeight() {
  				return this._config.chrHeight + 1.5 * this.margin.top
  			}
  			getWidth() {
  				return "97%"
  			}
  			getChromosomeBandTickY1() {
  				return 2
  			}
  			getChromosomeBandTickY2() {
  				return 10
  			}
  			getChromosomeSetLabelTranslate() {
  				return "rotate(-90)"
  			}
  			getChromosomeBandLabelAnchor() {
  				return null
  			}
  			getChromosomeScale(t) {
  				var e, n;
  				return e = s.select(this._ideo.selector).node().getBoundingClientRect(), n = t.getBoundingClientRect(), "scale(" + e.width / n.height * .97 + ", " + this._getYScale() + ")"
  			}
  			getChromosomeScaleBack(t) {
  				var e, n, r;
  				return n = (r = this._ideo.config).taxid, e = t.id.split("-")[0].replace("chr", ""), "scale(" + this._ideo.chromosomes[n][e].oldWidth / (3 * r.chrHeight) * .97 + ", " + 1 / this._getYScale() + ")"
  			}
  			getChromosomeSetTranslate(t) {
  				return "rotate(90) translate(" + this.margin.top + ", -" + this.getChromosomeSetYTranslate(t) + ")"
  			}
  			getChromosomeSetYTranslate(t) {
  				var e, n = this._getAdditionalOffset(),
  					r = this._config.chrMargin,
  					o = this._config.chrWidth;
  				if (!this._config.ploidyDesc) return "histogram" === this._config.annotationsLayout ? r / 2 + t * (r + o + 2) + 2 * n + 1 : (e = o + t * (r + o) + 2 * n, n > 0 ? e : e + 4 + 2 * t);
  				if (!this._translate) {
  					var i;
  					this._translate = [this._ploidy.getSetSize(0) * o * 2];
  					for (var a = 1; a < this._config.ploidyDesc.length; a++) i = this._translate[a - 1], this._translate[a] = i + this._getChromosomeSetSize(a - 1)
  				}
  				return this._translate[t]
  			}
  			getChromosomeSetLabelXPosition() {
  				return this._config.chrWidth * this._config.ploidy / -2
  			}
  			getChromosomeLabelXPosition() {
  				return this._config.chrWidth / -2
  			}
  		}
  	}, function (t, e) {
  		! function (t) {
  			function e(t) {
  				return t
  			}
  
  			function n(t, e) {
  				for (var n = 0, r = e.length, o = new Array(r); n < r; ++n) o[n] = t[e[n]];
  				return o
  			}
  			A.version = "1.3.12", A.permute = n;
  			var r = A.bisect = o(e);
  
  			function o(t) {
  				function e(e, n, r, o) {
  					for (; r < o;) {
  						var i = r + o >>> 1;
  						n < t(e[i]) ? o = i : r = i + 1
  					}
  					return r
  				}
  				return e.right = e, e.left = function (e, n, r, o) {
  					for (; r < o;) {
  						var i = r + o >>> 1;
  						t(e[i]) < n ? r = i + 1 : o = i
  					}
  					return r
  				}, e
  			}
  
  			function i(t) {
  				function e(t, e, r) {
  					for (var o = r - e, i = 1 + (o >>> 1); --i
  						> 0;) n(t, i, o, e);
  					return t
  				}
  
  				function n(e, n, r, o) {
  					for (var i, a = e[--o + n], s = t(a);
  						(i = n << 1) <= r && (i < r && t(e[o + i]) > t(e[o + i + 1]) && i++ , !(s <= t(e[o + i])));) e[o + n] = e[o + i], n = i;
  					e[o + n] = a
  				}
  				return e.sort = function (t, e, r) {
  					for (var o, i = r - e; --i > 0;) o = t[e], t[e] = t[e + i], t[e + i] = o, n(t, 1, i, e);
  					return t
  				}, e
  			}
  
  			function a(t) {
  				var e = i(t);
  				return function (n, r, o, i) {
  					var a, s, c, u = new Array(i = Math.min(o - r, i));
  					for (s = 0; s < i; ++s) u[s] = n[r++];
  					if (e(u, 0, i), r < o) {
  						a = t(u[0]);
  						do {
  							t(c = n[r]) > a && (u[0] = c, a = t(e(u, 0, i)[0]))
  						} while (++r < o)
  					}
  					return u
  				}
  			}
  
  			function s(t) {
  				return function (e, n, r) {
  					for (var o = n + 1; o < r; ++o) {
  						for (var i = o, a = e[o], s = t(a); i > n && t(e[i - 1]) > s; --i) e[i] = e[i - 1];
  						e[i] = a
  					}
  					return e
  				}
  			}
  
  			function c(t) {
  				var e = s(t);
  
  				function n(r, o, i) {
  					return (i - o < u ? e : function (e, r, o) {
  						var i, a = (o - r) / 6 | 0,
  							s = r + a,
  							c = o - 1 - a,
  							u = r + o - 1 >> 1,
  							l = u - a,
  							f = u + a,
  							h = e[s],
  							d = t(h),
  							g = e[l],
  							p = t(g),
  							m = e[u],
  							_ = t(m),
  							b = e[f],
  							v = t(b),
  							y = e[c],
  							w = t(y);
  						d > p && (i = h, h = g, g = i, i = d, d = p, p = i);
  						v > w && (i = b, b = y, y = i, i = v, v = w, w = i);
  						d > _ && (i = h, h = m, m = i, i = d, d = _, _ = i);
  						p > _ && (i = g, g = m, m = i, i = p, p = _, _ = i);
  						d > v && (i = h, h = b, b = i, i = d, d = v, v = i);
  						_ > v && (i = m, m = b, b = i, i = _, _ = v, v = i);
  						p > w && (i = g, g = y, y = i, i = p, p = w, w = i);
  						p > _ && (i = g, g = m, m = i, i = p, p = _, _ = i);
  						v > w && (i = b, b = y, y = i, i = v, v = w, w = i);
  						var x = g,
  							A = p,
  							C = b,
  							M = v;
  						e[s] = h, e[l] = e[r], e[u] = m, e[f] = e[o - 1], e[c] = y;
  						var k = r + 1,
  							T = o - 2,
  							S = A <= M && A >= M;
  						if (S)
  							for (var D = k; D <= T; ++D) {
  								var L = e[D],
  									B = t(L);
  								if (B < A) D !== k && (e[D] = e[k], e[k] = L), ++k;
  								else if (B > A)
  									for (; ;) {
  										var E = t(e[T]);
  										if (!(E > A)) {
  											if (E < A) {
  												e[D] = e[k], e[k++] = e[T], e[T--] = L;
  												break
  											}
  											e[D] = e[T], e[T--] = L;
  											break
  										}
  										T--
  									}
  							} else
  							for (var D = k; D <= T; D++) {
  								var L = e[D],
  									B = t(L);
  								if (B < A) D !== k && (e[D] = e[k], e[k] = L), ++k;
  								else if (B > M)
  									for (; ;) {
  										var E = t(e[T]);
  										if (!(E > M)) {
  											E < A ? (e[D] = e[k], e[k++] = e[T], e[T--] = L) : (e[D] = e[T], e[T--] = L);
  											break
  										}
  										if (--T < D) break
  									}
  							}
  						if (e[r] = e[k - 1], e[k - 1] = x, e[o - 1] = e[T + 1], e[T + 1] = C, n(e, r, k - 1), n(e, T + 2, o), S) return e;
  						if (k < s && T > c) {
  							for (var O;
  								(O = t(e[k])) <= A && O >= A;)++k;
  							for (;
  								(E = t(e[T])) <= M && E >= M;)--T;
  							for (var D = k; D <= T; D++) {
  								var L = e[D],
  									B = t(L);
  								if (B <= A && B >= A) D !== k && (e[D] = e[k], e[k] = L), k++;
  								else if (B <= M && B >= M)
  									for (; ;) {
  										var E = t(e[T]);
  										if (!(E <= M && E >= M)) {
  											E < A ? (e[D] = e[k], e[k++] = e[T], e[T--] = L) : (e[D] = e[T], e[T--] = L);
  											break
  										}
  										if (--T < D) break
  									}
  							}
  						}
  						return n(e, k, T + 1)
  					})(r, o, i)
  				}
  				return n
  			}
  			r.by = o, (A.heap = i(e)).by = i, (A.heapselect = a(e)).by = a, (A.insertionsort = s(e)).by = s, (A.quicksort = c(e)).by = c;
  			var u = 32,
  				l = p,
  				f = p,
  				h = p,
  				d = function (t, e) {
  					var n = t.length;
  					for (; n < e;) t[n++] = 0;
  					return t
  				},
  				g = function (t, e) {
  					if (e > 32) throw new Error("invalid array width!");
  					return t
  				};
  
  			function p(t) {
  				for (var e = new Array(t), n = -1; ++n < t;) e[n] = 0;
  				return e
  			}
  
  			function m(t) {
  				return [0, t.length]
  			}
  
  			function _() {
  				return null
  			}
  
  			function b() {
  				return 0
  			}
  
  			function v(t) {
  				return t + 1
  			}
  
  			function y(t) {
  				return t - 1
  			}
  
  			function w(t) {
  				return function (e, n) {
  					return e + +t(n)
  				}
  			}
  
  			function x(t) {
  				return function (e, n) {
  					return e - t(n)
  				}
  			}
  
  			function A() {
  				var t = {
  					add: T,
  					remove: function () {
  						for (var t = C(s, s), e = [], n = 0, r = 0; n < s; ++n) h[n] ? t[n] = r++ : e.push(n);
  						p.forEach(function (t) {
  							t(0, [], e)
  						}), k.forEach(function (e) {
  							e(t)
  						});
  						for (var i, n = 0, r = 0; n < s; ++n)(i = h[n]) && (n !== r && (h[r] = i, o[r] = o[n]), ++r);
  						o.length = r;
  						for (; s > r;) h[--s] = 0
  					},
  					dimension: function (t) {
  						var l, T, S, D, L, B = {
  							filter: function (t) {
  								return null == t ? X() : Array.isArray(t) ? z(t) : "function" == typeof t ? $(t) : q(t)
  							},
  							filterExact: q,
  							filterRange: z,
  							filterFunction: $,
  							filterAll: X,
  							top: function (t) {
  								var e, n = [],
  									r = j;
  								for (; --r >= U && t > 0;) h[e = T[r]] || (n.push(o[e]), --t);
  								return n
  							},
  							bottom: function (t) {
  								var e, n = [],
  									r = U;
  								for (; r < j && t > 0;) h[e = T[r]] || (n.push(o[e]), --t), r++;
  								return n
  							},
  							group: V,
  							groupAll: function () {
  								var t = V(_),
  									e = t.all;
  								return delete t.all, delete t.top, delete t.order, delete t.orderNatural, delete t.size, t.value = function () {
  									return e()[0].value
  								}, t
  							},
  							dispose: G,
  							remove: G
  						},
  							E = ~u & -~u,
  							O = ~E,
  							P = c(function (t) {
  								return S[t]
  							}),
  							F = m,
  							N = [],
  							I = [],
  							U = 0,
  							j = 0;
  						A.unshift(H), A.push(W), k.push(R), u |= E, (f >= 32 ? !E : u & -(1 << f)) && (h = g(h, f <<= 1));
  
  						function H(e, r, o) {
  							S = e.map(t), D = P(function (t) {
  								for (var e = C(t, t), n = -1; ++n < t;) e[n] = n;
  								return e
  							}(o), 0, o), S = n(S, D);
  							var i, a = F(S),
  								c = a[0],
  								u = a[1];
  							if (L)
  								for (i = 0; i < o; ++i) L(S[i], i) || (h[D[i] + r] |= E);
  							else {
  								for (i = 0; i < c; ++i) h[D[i] + r] |= E;
  								for (i = u; i < o; ++i) h[D[i] + r] |= E
  							}
  							if (!r) return l = S, T = D, U = c, void (j = u);
  							var f = l,
  								d = T,
  								g = 0,
  								p = 0;
  							for (l = new Array(s), T = C(s, s), i = 0; g < r && p < o; ++i) f[g] < S[p] ? (l[i] = f[g], T[i] = d[g++]) : (l[i] = S[p], T[i] = D[p++] + r);
  							for (; g < r; ++g, ++i) l[i] = f[g], T[i] = d[g];
  							for (; p < o; ++p, ++i) l[i] = S[p], T[i] = D[p] + r;
  							a = F(l), U = a[0], j = a[1]
  						}
  
  						function W(t, e, n) {
  							N.forEach(function (t) {
  								t(S, D, e, n)
  							}), S = D = null
  						}
  
  						function R(t) {
  							for (var e, n = 0, r = 0; n < s; ++n) h[e = T[n]] && (n !== r && (l[r] = l[n]), T[r] = t[e], ++r);
  							for (l.length = r; r < s;) T[r++] = 0;
  							var o = F(l);
  							U = o[0], j = o[1]
  						}
  
  						function Y(t) {
  							var e = t[0],
  								n = t[1];
  							if (L) return L = null, K(function (t, r) {
  								return e <= r && r < n
  							}), U = e, j = n, B;
  							var r, o, i, a = [],
  								s = [];
  							if (e < U)
  								for (r = e, o = Math.min(U, n); r < o; ++r) h[i = T[r]] ^= E, a.push(i);
  							else if (e > U)
  								for (r = U, o = Math.min(e, j); r < o; ++r) h[i = T[r]] ^= E, s.push(i);
  							if (n > j)
  								for (r = Math.max(e, j), o = n; r < o; ++r) h[i = T[r]] ^= E, a.push(i);
  							else if (n < j)
  								for (r = Math.max(U, n), o = j; r < o; ++r) h[i = T[r]] ^= E, s.push(i);
  							return U = e, j = n, p.forEach(function (t) {
  								t(E, a, s)
  							}), B
  						}
  
  						function q(t) {
  							return Y((F = function (t, e) {
  								return function (n) {
  									var r = n.length;
  									return [t.left(n, e, 0, r), t.right(n, e, 0, r)]
  								}
  							}(r, t))(l))
  						}
  
  						function z(t) {
  							return Y((F = function (t, e) {
  								var n = e[0],
  									r = e[1];
  								return function (e) {
  									var o = e.length;
  									return [t.left(e, n, 0, o), t.left(e, r, 0, o)]
  								}
  							}(r, t))(l))
  						}
  
  						function X() {
  							return Y((F = m)(l))
  						}
  
  						function $(t) {
  							return F = m, K(L = t), U = 0, j = s, B
  						}
  
  						function K(t) {
  							var e, n, r, o = [],
  								i = [];
  							for (e = 0; e < s; ++e) !(h[n = T[e]] & E) ^ !!(r = t(l[e], e)) && (r ? (h[n] &= O, o.push(n)) : (h[n] |= E, i.push(n)));
  							p.forEach(function (t) {
  								t(E, o, i)
  							})
  						}
  
  						function V(t) {
  							var n = {
  								top: function (t) {
  									var e = u(X(), 0, r.length, t);
  									return f.sort(e, 0, e.length)
  								},
  								all: X,
  								reduce: $,
  								reduceCount: K,
  								reduceSum: function (t) {
  									return $(w(t), x(t), b)
  								},
  								order: V,
  								orderNatural: function () {
  									return V(e)
  								},
  								size: function () {
  									return B
  								},
  								dispose: G,
  								remove: G
  							};
  							I.push(n);
  							var r, c, u, f, m, A, S, D = 8,
  								L = M(D),
  								B = 0,
  								P = _,
  								F = _,
  								U = !0,
  								j = t === _;
  
  							function H(e, n, i, a) {
  								var u, l, f, b, v, y, w = r,
  									x = C(B, L),
  									A = m,
  									k = S,
  									T = B,
  									E = 0,
  									N = 0;
  								for (U && (A = k = _), r = new Array(B), B = 0, c = T > 1 ? d(c, s) : C(s, L), T && (f = (l = w[0]).key); N < a && !((b = t(e[N])) >= b);)++N;
  								for (; N < a;) {
  									for (l && f <= b ? (v = l, y = f, x[E] = B, (l = w[++E]) && (f = l.key)) : (v = {
  										key: b,
  										value: k()
  									}, y = b), r[B] = v; !(b > y || (c[u = n[N] + i] = B, h[u] & O || (v.value = A(v.value, o[u])), ++N >= a));) b = t(e[N]);
  									I()
  								}
  								for (; E < T;) r[x[E] = B] = w[E++], I();
  								if (B > E)
  									for (E = 0; E < i; ++E) c[E] = x[c[E]];
  
  								function I() {
  									++B === L && (x = g(x, D <<= 1), c = g(c, D), L = M(D))
  								}
  								u = p.indexOf(P), B > 1 ? (P = R, F = q) : (!B && j && (B = 1, r = [{
  									key: null,
  									value: k()
  								}]), 1 === B ? (P = Y, F = z) : (P = _, F = _), c = null), p[u] = P
  							}
  
  							function W() {
  								if (B > 1) {
  									for (var t = B, e = r, n = C(t, t), o = 0, i = 0; o < s; ++o) h[o] && (n[c[i] = c[o]] = 1, ++i);
  									for (r = [], B = 0, o = 0; o < t; ++o) n[o] && (n[o] = B++ , r.push(e[o]));
  									if (B > 1)
  										for (var o = 0; o < i; ++o) c[o] = n[c[o]];
  									else c = null;
  									p[p.indexOf(P)] = B > 1 ? (F = q, P = R) : 1 === B ? (F = z, P = Y) : F = P = _
  								} else if (1 === B) {
  									if (j) return;
  									for (var o = 0; o < s; ++o)
  										if (h[o]) return;
  									r = [], B = 0, p[p.indexOf(P)] = P = F = _
  								}
  							}
  
  							function R(t, e, n) {
  								if (t !== E && !U) {
  									var i, a, s, u;
  									for (i = 0, s = e.length; i < s; ++i) h[a = e[i]] & O || ((u = r[c[a]]).value = m(u.value, o[a]));
  									for (i = 0, s = n.length; i < s; ++i)(h[a = n[i]] & O) === t && ((u = r[c[a]]).value = A(u.value, o[a]))
  								}
  							}
  
  							function Y(t, e, n) {
  								if (t !== E && !U) {
  									var i, a, s, c = r[0];
  									for (i = 0, s = e.length; i < s; ++i) h[a = e[i]] & O || (c.value = m(c.value, o[a]));
  									for (i = 0, s = n.length; i < s; ++i)(h[a = n[i]] & O) === t && (c.value = A(c.value, o[a]))
  								}
  							}
  
  							function q() {
  								var t, e;
  								for (t = 0; t < B; ++t) r[t].value = S();
  								for (t = 0; t < s; ++t) h[t] & O || ((e = r[c[t]]).value = m(e.value, o[t]))
  							}
  
  							function z() {
  								var t, e = r[0];
  								for (e.value = S(), t = 0; t < s; ++t) h[t] & O || (e.value = m(e.value, o[t]))
  							}
  
  							function X() {
  								return U && (F(), U = !1), r
  							}
  
  							function $(t, e, r) {
  								return m = t, A = e, S = r, U = !0, n
  							}
  
  							function K() {
  								return $(v, y, b)
  							}
  
  							function V(t) {
  								function e(e) {
  									return t(e.value)
  								}
  								return u = a(e), f = i(e), n
  							}
  
  							function G() {
  								var t = p.indexOf(P);
  								return t >= 0 && p.splice(t, 1), (t = N.indexOf(H)) >= 0 && N.splice(t, 1), (t = k.indexOf(W)) >= 0 && k.splice(t, 1), n
  							}
  							return arguments.length < 1 && (t = e), p.push(P), N.push(H), k.push(W), H(l, T, 0, s), K().orderNatural()
  						}
  
  						function G() {
  							I.forEach(function (t) {
  								t.dispose()
  							});
  							var t = A.indexOf(H);
  							return t >= 0 && A.splice(t, 1), (t = A.indexOf(W)) >= 0 && A.splice(t, 1), (t = k.indexOf(R)) >= 0 && k.splice(t, 1), u &= O, X()
  						}
  						return H(o, 0, s), W(o, 0, s), B
  					},
  					groupAll: function () {
  						var t, e, n, r, i = {
  							reduce: l,
  							reduceCount: f,
  							reduceSum: function (t) {
  								return l(w(t), x(t), b)
  							},
  							value: function () {
  								a && (function () {
  									var n;
  									for (t = r(), n = 0; n < s; ++n) h[n] || (t = e(t, o[n]))
  								}(), a = !1);
  								return t
  							},
  							dispose: d,
  							remove: d
  						},
  							a = !0;
  
  						function c(n, r) {
  							var i;
  							if (!a)
  								for (i = r; i < s; ++i) h[i] || (t = e(t, o[i]))
  						}
  
  						function u(r, i, s) {
  							var c, u, l;
  							if (!a) {
  								for (c = 0, l = i.length; c < l; ++c) h[u = i[c]] || (t = e(t, o[u]));
  								for (c = 0, l = s.length; c < l; ++c) h[u = s[c]] === r && (t = n(t, o[u]))
  							}
  						}
  
  						function l(t, o, s) {
  							return e = t, n = o, r = s, a = !0, i
  						}
  
  						function f() {
  							return l(v, y, b)
  						}
  
  						function d() {
  							var t = p.indexOf(u);
  							return t >= 0 && p.splice(t), (t = A.indexOf(c)) >= 0 && A.splice(t), i
  						}
  						return p.push(u), A.push(c), c(o, 0), f()
  					},
  					size: function () {
  						return s
  					}
  				},
  					o = [],
  					s = 0,
  					u = 0,
  					f = 8,
  					h = l(0),
  					p = [],
  					A = [],
  					k = [];
  
  				function T(e) {
  					var n = s,
  						r = e.length;
  					return r && (o = o.concat(e), h = d(h, s += r), A.forEach(function (t) {
  						t(e, n, r)
  					})), t
  				}
  				return arguments.length ? T(arguments[0]) : t
  			}
  
  			function C(t, e) {
  				return (e < 257 ? l : e < 65537 ? f : h)(t)
  			}
  
  			function M(t) {
  				return 8 === t ? 256 : 16 === t ? 65536 : 4294967296
  			}
  			"undefined" != typeof Uint8Array && (l = function (t) {
  				return new Uint8Array(t)
  			}, f = function (t) {
  				return new Uint16Array(t)
  			}, h = function (t) {
  				return new Uint32Array(t)
  			}, d = function (t, e) {
  				if (t.length >= e) return t;
  				var n = new t.constructor(e);
  				return n.set(t), n
  			}, g = function (t, e) {
  				var n;
  				switch (e) {
  					case 16:
  						n = f(t.length);
  						break;
  					case 32:
  						n = h(t.length);
  						break;
  					default:
  						throw new Error("invalid array width!")
  				}
  				return n.set(t), n
  			}), t.crossfilter = A
  		}(void 0 !== e && e || this)
  	}, function (t, e, n) {
  		"use strict";
  		n.r(e);
  		var r = {};
  		n.r(r), n.d(r, "brush", function () {
  			return Je
  		}), n.d(r, "brushX", function () {
  			return Qe
  		}), n.d(r, "brushY", function () {
  			return Ze
  		}), n.d(r, "brushSelection", function () {
  			return Ge
  		});
  		var o = n(0),
  			i = n(4),
  			a = n(2);
  		var s = function () {
  			o.event.preventDefault(), o.event.stopImmediatePropagation()
  		},
  			c = function (t) {
  				var e = t.document.documentElement,
  					n = Object(o.select)(t).on("dragstart.drag", s, !0);
  				"onselectstart" in e ? n.on("selectstart.drag", s, !0) : (e.__noselect = e.style.MozUserSelect, e.style.MozUserSelect = "none")
  			};
  
  		function u(t, e) {
  			var n = t.document.documentElement,
  				r = Object(o.select)(t).on("dragstart.drag", null);
  			e && (r.on("click.drag", s, !0), setTimeout(function () {
  				r.on("click.drag", null)
  			}, 0)), "onselectstart" in n ? r.on("selectstart.drag", null) : (n.style.MozUserSelect = n.__noselect, delete n.__noselect)
  		}
  
  		function l(t, e, n, r, o, i, a, s, c, u) {
  			this.target = t, this.type = e, this.subject = n, this.identifier = r, this.active = o, this.x = i, this.y = a, this.dx = s, this.dy = c, this._ = u
  		}
  		l.prototype.on = function () {
  			var t = this._.on.apply(this._, arguments);
  			return t === this._ ? this : t
  		};
  		var f = function (t, e, n) {
  			t.prototype = e.prototype = n, n.constructor = t
  		};
  
  		function h(t, e) {
  			var n = Object.create(t.prototype);
  			for (var r in e) n[r] = e[r];
  			return n
  		}
  
  		function d() { }
  		var g = "\\s*([+-]?\\d+)\\s*",
  			p = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",
  			m = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",
  			_ = /^#([0-9a-f]{3})$/,
  			b = /^#([0-9a-f]{6})$/,
  			v = new RegExp("^rgb\\(" + [g, g, g] + "\\)$"),
  			y = new RegExp("^rgb\\(" + [m, m, m] + "\\)$"),
  			w = new RegExp("^rgba\\(" + [g, g, g, p] + "\\)$"),
  			x = new RegExp("^rgba\\(" + [m, m, m, p] + "\\)$"),
  			A = new RegExp("^hsl\\(" + [p, m, m] + "\\)$"),
  			C = new RegExp("^hsla\\(" + [p, m, m, p] + "\\)$"),
  			M = {
  				aliceblue: 15792383,
  				antiquewhite: 16444375,
  				aqua: 65535,
  				aquamarine: 8388564,
  				azure: 15794175,
  				beige: 16119260,
  				bisque: 16770244,
  				black: 0,
  				blanchedalmond: 16772045,
  				blue: 255,
  				blueviolet: 9055202,
  				brown: 10824234,
  				burlywood: 14596231,
  				cadetblue: 6266528,
  				chartreuse: 8388352,
  				chocolate: 13789470,
  				coral: 16744272,
  				cornflowerblue: 6591981,
  				cornsilk: 16775388,
  				crimson: 14423100,
  				cyan: 65535,
  				darkblue: 139,
  				darkcyan: 35723,
  				darkgoldenrod: 12092939,
  				darkgray: 11119017,
  				darkgreen: 25600,
  				darkgrey: 11119017,
  				darkkhaki: 12433259,
  				darkmagenta: 9109643,
  				darkolivegreen: 5597999,
  				darkorange: 16747520,
  				darkorchid: 10040012,
  				darkred: 9109504,
  				darksalmon: 15308410,
  				darkseagreen: 9419919,
  				darkslateblue: 4734347,
  				darkslategray: 3100495,
  				darkslategrey: 3100495,
  				darkturquoise: 52945,
  				darkviolet: 9699539,
  				deeppink: 16716947,
  				deepskyblue: 49151,
  				dimgray: 6908265,
  				dimgrey: 6908265,
  				dodgerblue: 2003199,
  				firebrick: 11674146,
  				floralwhite: 16775920,
  				forestgreen: 2263842,
  				fuchsia: 16711935,
  				gainsboro: 14474460,
  				ghostwhite: 16316671,
  				gold: 16766720,
  				goldenrod: 14329120,
  				gray: 8421504,
  				green: 32768,
  				greenyellow: 11403055,
  				grey: 8421504,
  				honeydew: 15794160,
  				hotpink: 16738740,
  				indianred: 13458524,
  				indigo: 4915330,
  				ivory: 16777200,
  				khaki: 15787660,
  				lavender: 15132410,
  				lavenderblush: 16773365,
  				lawngreen: 8190976,
  				lemonchiffon: 16775885,
  				lightblue: 11393254,
  				lightcoral: 15761536,
  				lightcyan: 14745599,
  				lightgoldenrodyellow: 16448210,
  				lightgray: 13882323,
  				lightgreen: 9498256,
  				lightgrey: 13882323,
  				lightpink: 16758465,
  				lightsalmon: 16752762,
  				lightseagreen: 2142890,
  				lightskyblue: 8900346,
  				lightslategray: 7833753,
  				lightslategrey: 7833753,
  				lightsteelblue: 11584734,
  				lightyellow: 16777184,
  				lime: 65280,
  				limegreen: 3329330,
  				linen: 16445670,
  				magenta: 16711935,
  				maroon: 8388608,
  				mediumaquamarine: 6737322,
  				mediumblue: 205,
  				mediumorchid: 12211667,
  				mediumpurple: 9662683,
  				mediumseagreen: 3978097,
  				mediumslateblue: 8087790,
  				mediumspringgreen: 64154,
  				mediumturquoise: 4772300,
  				mediumvioletred: 13047173,
  				midnightblue: 1644912,
  				mintcream: 16121850,
  				mistyrose: 16770273,
  				moccasin: 16770229,
  				navajowhite: 16768685,
  				navy: 128,
  				oldlace: 16643558,
  				olive: 8421376,
  				olivedrab: 7048739,
  				orange: 16753920,
  				orangered: 16729344,
  				orchid: 14315734,
  				palegoldenrod: 15657130,
  				palegreen: 10025880,
  				paleturquoise: 11529966,
  				palevioletred: 14381203,
  				papayawhip: 16773077,
  				peachpuff: 16767673,
  				peru: 13468991,
  				pink: 16761035,
  				plum: 14524637,
  				powderblue: 11591910,
  				purple: 8388736,
  				rebeccapurple: 6697881,
  				red: 16711680,
  				rosybrown: 12357519,
  				royalblue: 4286945,
  				saddlebrown: 9127187,
  				salmon: 16416882,
  				sandybrown: 16032864,
  				seagreen: 3050327,
  				seashell: 16774638,
  				sienna: 10506797,
  				silver: 12632256,
  				skyblue: 8900331,
  				slateblue: 6970061,
  				slategray: 7372944,
  				slategrey: 7372944,
  				snow: 16775930,
  				springgreen: 65407,
  				steelblue: 4620980,
  				tan: 13808780,
  				teal: 32896,
  				thistle: 14204888,
  				tomato: 16737095,
  				turquoise: 4251856,
  				violet: 15631086,
  				wheat: 16113331,
  				white: 16777215,
  				whitesmoke: 16119285,
  				yellow: 16776960,
  				yellowgreen: 10145074
  			};
  
  		function k(t) {
  			var e;
  			return t = (t + "").trim().toLowerCase(), (e = _.exec(t)) ? new B((e = parseInt(e[1], 16)) >> 8 & 15 | e >> 4 & 240, e >> 4 & 15 | 240 & e, (15 & e) << 4 | 15 & e, 1) : (e = b.exec(t)) ? T(parseInt(e[1], 16)) : (e = v.exec(t)) ? new B(e[1], e[2], e[3], 1) : (e = y.exec(t)) ? new B(255 * e[1] / 100, 255 * e[2] / 100, 255 * e[3] / 100, 1) : (e = w.exec(t)) ? S(e[1], e[2], e[3], e[4]) : (e = x.exec(t)) ? S(255 * e[1] / 100, 255 * e[2] / 100, 255 * e[3] / 100, e[4]) : (e = A.exec(t)) ? O(e[1], e[2] / 100, e[3] / 100, 1) : (e = C.exec(t)) ? O(e[1], e[2] / 100, e[3] / 100, e[4]) : M.hasOwnProperty(t) ? T(M[t]) : "transparent" === t ? new B(NaN, NaN, NaN, 0) : null
  		}
  
  		function T(t) {
  			return new B(t >> 16 & 255, t >> 8 & 255, 255 & t, 1)
  		}
  
  		function S(t, e, n, r) {
  			return r <= 0 && (t = e = n = NaN), new B(t, e, n, r)
  		}
  
  		function D(t) {
  			return t instanceof d || (t = k(t)), t ? new B((t = t.rgb()).r, t.g, t.b, t.opacity) : new B
  		}
  
  		function L(t, e, n, r) {
  			return 1 === arguments.length ? D(t) : new B(t, e, n, null == r ? 1 : r)
  		}
  
  		function B(t, e, n, r) {
  			this.r = +t, this.g = +e, this.b = +n, this.opacity = +r
  		}
  
  		function E(t) {
  			return ((t = Math.max(0, Math.min(255, Math.round(t) || 0))) < 16 ? "0" : "") + t.toString(16)
  		}
  
  		function O(t, e, n, r) {
  			return r <= 0 ? t = e = n = NaN : n <= 0 || n >= 1 ? t = e = NaN : e <= 0 && (t = NaN), new F(t, e, n, r)
  		}
  
  		function P(t, e, n, r) {
  			return 1 === arguments.length ? function (t) {
  				if (t instanceof F) return new F(t.h, t.s, t.l, t.opacity);
  				if (t instanceof d || (t = k(t)), !t) return new F;
  				if (t instanceof F) return t;
  				var e = (t = t.rgb()).r / 255,
  					n = t.g / 255,
  					r = t.b / 255,
  					o = Math.min(e, n, r),
  					i = Math.max(e, n, r),
  					a = NaN,
  					s = i - o,
  					c = (i + o) / 2;
  				return s ? (a = e === i ? (n - r) / s + 6 * (n < r) : n === i ? (r - e) / s + 2 : (e - n) / s + 4, s /= c < .5 ? i + o : 2 - i - o, a *= 60) : s = c > 0 && c < 1 ? 0 : a, new F(a, s, c, t.opacity)
  			}(t) : new F(t, e, n, null == r ? 1 : r)
  		}
  
  		function F(t, e, n, r) {
  			this.h = +t, this.s = +e, this.l = +n, this.opacity = +r
  		}
  
  		function N(t, e, n) {
  			return 255 * (t < 60 ? e + (n - e) * t / 60 : t < 180 ? n : t < 240 ? e + (n - e) * (240 - t) / 60 : e)
  		}
  		f(d, k, {
  			displayable: function () {
  				return this.rgb().displayable()
  			},
  			hex: function () {
  				return this.rgb().hex()
  			},
  			toString: function () {
  				return this.rgb() + ""
  			}
  		}), f(B, L, h(d, {
  			brighter: function (t) {
  				return t = null == t ? 1 / .7 : Math.pow(1 / .7, t), new B(this.r * t, this.g * t, this.b * t, this.opacity)
  			},
  			darker: function (t) {
  				return t = null == t ? .7 : Math.pow(.7, t), new B(this.r * t, this.g * t, this.b * t, this.opacity)
  			},
  			rgb: function () {
  				return this
  			},
  			displayable: function () {
  				return 0 <= this.r && this.r <= 255 && 0 <= this.g && this.g <= 255 && 0 <= this.b && this.b <= 255 && 0 <= this.opacity && this.opacity <= 1
  			},
  			hex: function () {
  				return "#" + E(this.r) + E(this.g) + E(this.b)
  			},
  			toString: function () {
  				var t = this.opacity;
  				return (1 === (t = isNaN(t) ? 1 : Math.max(0, Math.min(1, t))) ? "rgb(" : "rgba(") + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", " + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", " + Math.max(0, Math.min(255, Math.round(this.b) || 0)) + (1 === t ? ")" : ", " + t + ")")
  			}
  		})), f(F, P, h(d, {
  			brighter: function (t) {
  				return t = null == t ? 1 / .7 : Math.pow(1 / .7, t), new F(this.h, this.s, this.l * t, this.opacity)
  			},
  			darker: function (t) {
  				return t = null == t ? .7 : Math.pow(.7, t), new F(this.h, this.s, this.l * t, this.opacity)
  			},
  			rgb: function () {
  				var t = this.h % 360 + 360 * (this.h < 0),
  					e = isNaN(t) || isNaN(this.s) ? 0 : this.s,
  					n = this.l,
  					r = n + (n < .5 ? n : 1 - n) * e,
  					o = 2 * n - r;
  				return new B(N(t >= 240 ? t - 240 : t + 120, o, r), N(t, o, r), N(t < 120 ? t + 240 : t - 120, o, r), this.opacity)
  			},
  			displayable: function () {
  				return (0 <= this.s && this.s <= 1 || isNaN(this.s)) && 0 <= this.l && this.l <= 1 && 0 <= this.opacity && this.opacity <= 1
  			}
  		}));
  		var I = Math.PI / 180,
  			U = 180 / Math.PI,
  			j = .96422,
  			H = 1,
  			W = .82521,
  			R = 4 / 29,
  			Y = 6 / 29,
  			q = 3 * Y * Y,
  			z = Y * Y * Y;
  
  		function X(t) {
  			if (t instanceof K) return new K(t.l, t.a, t.b, t.opacity);
  			if (t instanceof et) {
  				if (isNaN(t.h)) return new K(t.l, 0, 0, t.opacity);
  				var e = t.h * I;
  				return new K(t.l, Math.cos(e) * t.c, Math.sin(e) * t.c, t.opacity)
  			}
  			t instanceof B || (t = D(t));
  			var n, r, o = Z(t.r),
  				i = Z(t.g),
  				a = Z(t.b),
  				s = V((.2225045 * o + .7168786 * i + .0606169 * a) / H);
  			return o === i && i === a ? n = r = s : (n = V((.4360747 * o + .3850649 * i + .1430804 * a) / j), r = V((.0139322 * o + .0971045 * i + .7141733 * a) / W)), new K(116 * s - 16, 500 * (n - s), 200 * (s - r), t.opacity)
  		}
  
  		function $(t, e, n, r) {
  			return 1 === arguments.length ? X(t) : new K(t, e, n, null == r ? 1 : r)
  		}
  
  		function K(t, e, n, r) {
  			this.l = +t, this.a = +e, this.b = +n, this.opacity = +r
  		}
  
  		function V(t) {
  			return t > z ? Math.pow(t, 1 / 3) : t / q + R
  		}
  
  		function G(t) {
  			return t > Y ? t * t * t : q * (t - R)
  		}
  
  		function Q(t) {
  			return 255 * (t <= .0031308 ? 12.92 * t : 1.055 * Math.pow(t, 1 / 2.4) - .055)
  		}
  
  		function Z(t) {
  			return (t /= 255) <= .04045 ? t / 12.92 : Math.pow((t + .055) / 1.055, 2.4)
  		}
  
  		function J(t) {
  			if (t instanceof et) return new et(t.h, t.c, t.l, t.opacity);
  			if (t instanceof K || (t = X(t)), 0 === t.a && 0 === t.b) return new et(NaN, 0, t.l, t.opacity);
  			var e = Math.atan2(t.b, t.a) * U;
  			return new et(e < 0 ? e + 360 : e, Math.sqrt(t.a * t.a + t.b * t.b), t.l, t.opacity)
  		}
  
  		function tt(t, e, n, r) {
  			return 1 === arguments.length ? J(t) : new et(t, e, n, null == r ? 1 : r)
  		}
  
  		function et(t, e, n, r) {
  			this.h = +t, this.c = +e, this.l = +n, this.opacity = +r
  		}
  		f(K, $, h(d, {
  			brighter: function (t) {
  				return new K(this.l + 18 * (null == t ? 1 : t), this.a, this.b, this.opacity)
  			},
  			darker: function (t) {
  				return new K(this.l - 18 * (null == t ? 1 : t), this.a, this.b, this.opacity)
  			},
  			rgb: function () {
  				var t = (this.l + 16) / 116,
  					e = isNaN(this.a) ? t : t + this.a / 500,
  					n = isNaN(this.b) ? t : t - this.b / 200;
  				return new B(Q(3.1338561 * (e = j * G(e)) - 1.6168667 * (t = H * G(t)) - .4906146 * (n = W * G(n))), Q(-.9787684 * e + 1.9161415 * t + .033454 * n), Q(.0719453 * e - .2289914 * t + 1.4052427 * n), this.opacity)
  			}
  		})), f(et, tt, h(d, {
  			brighter: function (t) {
  				return new et(this.h, this.c, this.l + 18 * (null == t ? 1 : t), this.opacity)
  			},
  			darker: function (t) {
  				return new et(this.h, this.c, this.l - 18 * (null == t ? 1 : t), this.opacity)
  			},
  			rgb: function () {
  				return X(this).rgb()
  			}
  		}));
  		var nt = -.14861,
  			rt = 1.78277,
  			ot = -.29227,
  			it = -.90649,
  			at = 1.97294,
  			st = at * it,
  			ct = at * rt,
  			ut = rt * ot - it * nt;
  
  		function lt(t, e, n, r) {
  			return 1 === arguments.length ? function (t) {
  				if (t instanceof ft) return new ft(t.h, t.s, t.l, t.opacity);
  				t instanceof B || (t = D(t));
  				var e = t.r / 255,
  					n = t.g / 255,
  					r = t.b / 255,
  					o = (ut * r + st * e - ct * n) / (ut + st - ct),
  					i = r - o,
  					a = (at * (n - o) - ot * i) / it,
  					s = Math.sqrt(a * a + i * i) / (at * o * (1 - o)),
  					c = s ? Math.atan2(a, i) * U - 120 : NaN;
  				return new ft(c < 0 ? c + 360 : c, s, o, t.opacity)
  			}(t) : new ft(t, e, n, null == r ? 1 : r)
  		}
  
  		function ft(t, e, n, r) {
  			this.h = +t, this.s = +e, this.l = +n, this.opacity = +r
  		}
  
  		function ht(t, e, n, r, o) {
  			var i = t * t,
  				a = i * t;
  			return ((1 - 3 * t + 3 * i - a) * e + (4 - 6 * i + 3 * a) * n + (1 + 3 * t + 3 * i - 3 * a) * r + a * o) / 6
  		}
  		f(ft, lt, h(d, {
  			brighter: function (t) {
  				return t = null == t ? 1 / .7 : Math.pow(1 / .7, t), new ft(this.h, this.s, this.l * t, this.opacity)
  			},
  			darker: function (t) {
  				return t = null == t ? .7 : Math.pow(.7, t), new ft(this.h, this.s, this.l * t, this.opacity)
  			},
  			rgb: function () {
  				var t = isNaN(this.h) ? 0 : (this.h + 120) * I,
  					e = +this.l,
  					n = isNaN(this.s) ? 0 : this.s * e * (1 - e),
  					r = Math.cos(t),
  					o = Math.sin(t);
  				return new B(255 * (e + n * (nt * r + rt * o)), 255 * (e + n * (ot * r + it * o)), 255 * (e + n * (at * r)), this.opacity)
  			}
  		}));
  		var dt = function (t) {
  			return function () {
  				return t
  			}
  		};
  
  		function gt(t, e) {
  			return function (n) {
  				return t + n * e
  			}
  		}
  
  		function pt(t, e) {
  			var n = e - t;
  			return n ? gt(t, n > 180 || n < -180 ? n - 360 * Math.round(n / 360) : n) : dt(isNaN(t) ? e : t)
  		}
  
  		function mt(t) {
  			return 1 == (t = +t) ? _t : function (e, n) {
  				return n - e ? function (t, e, n) {
  					return t = Math.pow(t, n), e = Math.pow(e, n) - t, n = 1 / n,
  						function (r) {
  							return Math.pow(t + r * e, n)
  						}
  				}(e, n, t) : dt(isNaN(e) ? n : e)
  			}
  		}
  
  		function _t(t, e) {
  			var n = e - t;
  			return n ? gt(t, n) : dt(isNaN(t) ? e : t)
  		}
  		var bt = function t(e) {
  			var n = mt(e);
  
  			function r(t, e) {
  				var r = n((t = L(t)).r, (e = L(e)).r),
  					o = n(t.g, e.g),
  					i = n(t.b, e.b),
  					a = _t(t.opacity, e.opacity);
  				return function (e) {
  					return t.r = r(e), t.g = o(e), t.b = i(e), t.opacity = a(e), t + ""
  				}
  			}
  			return r.gamma = t, r
  		}(1);
  
  		function vt(t) {
  			return function (e) {
  				var n, r, o = e.length,
  					i = new Array(o),
  					a = new Array(o),
  					s = new Array(o);
  				for (n = 0; n < o; ++n) r = L(e[n]), i[n] = r.r || 0, a[n] = r.g || 0, s[n] = r.b || 0;
  				return i = t(i), a = t(a), s = t(s), r.opacity = 1,
  					function (t) {
  						return r.r = i(t), r.g = a(t), r.b = s(t), r + ""
  					}
  			}
  		}
  		vt(function (t) {
  			var e = t.length - 1;
  			return function (n) {
  				var r = n <= 0 ? n = 0 : n >= 1 ? (n = 1, e - 1) : Math.floor(n * e),
  					o = t[r],
  					i = t[r + 1],
  					a = r > 0 ? t[r - 1] : 2 * o - i,
  					s = r < e - 1 ? t[r + 2] : 2 * i - o;
  				return ht((n - r / e) * e, a, o, i, s)
  			}
  		}), vt(function (t) {
  			var e = t.length;
  			return function (n) {
  				var r = Math.floor(((n %= 1) < 0 ? ++n : n) * e),
  					o = t[(r + e - 1) % e],
  					i = t[r % e],
  					a = t[(r + 1) % e],
  					s = t[(r + 2) % e];
  				return ht((n - r / e) * e, o, i, a, s)
  			}
  		});
  		var yt = function (t, e) {
  			return e -= t = +t,
  				function (n) {
  					return t + e * n
  				}
  		},
  			wt = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,
  			xt = new RegExp(wt.source, "g");
  		var At, Ct, Mt, kt, Tt = function (t, e) {
  			var n, r, o, i = wt.lastIndex = xt.lastIndex = 0,
  				a = -1,
  				s = [],
  				c = [];
  			for (t += "", e += "";
  				(n = wt.exec(t)) && (r = xt.exec(e));)(o = r.index) > i && (o = e.slice(i, o), s[a] ? s[a] += o : s[++a] = o), (n = n[0]) === (r = r[0]) ? s[a] ? s[a] += r : s[++a] = r : (s[++a] = null, c.push({
  					i: a,
  					x: yt(n, r)
  				})), i = xt.lastIndex;
  			return i < e.length && (o = e.slice(i), s[a] ? s[a] += o : s[++a] = o), s.length < 2 ? c[0] ? function (t) {
  				return function (e) {
  					return t(e) + ""
  				}
  			}(c[0].x) : function (t) {
  				return function () {
  					return t
  				}
  			}(e) : (e = c.length, function (t) {
  				for (var n, r = 0; r < e; ++r) s[(n = c[r]).i] = n.x(t);
  				return s.join("")
  			})
  		},
  			St = function (t, e) {
  				var n, r = typeof e;
  				return null == e || "boolean" === r ? dt(e) : ("number" === r ? yt : "string" === r ? (n = k(e)) ? (e = n, bt) : Tt : e instanceof k ? bt : e instanceof Date ? function (t, e) {
  					var n = new Date;
  					return e -= t = +t,
  						function (r) {
  							return n.setTime(t + e * r), n
  						}
  				} : Array.isArray(e) ? function (t, e) {
  					var n, r = e ? e.length : 0,
  						o = t ? Math.min(r, t.length) : 0,
  						i = new Array(o),
  						a = new Array(r);
  					for (n = 0; n < o; ++n) i[n] = St(t[n], e[n]);
  					for (; n < r; ++n) a[n] = e[n];
  					return function (t) {
  						for (n = 0; n < o; ++n) a[n] = i[n](t);
  						return a
  					}
  				} : "function" != typeof e.valueOf && "function" != typeof e.toString || isNaN(e) ? function (t, e) {
  					var n, r = {},
  						o = {};
  					for (n in null !== t && "object" == typeof t || (t = {}), null !== e && "object" == typeof e || (e = {}), e) n in t ? r[n] = St(t[n], e[n]) : o[n] = e[n];
  					return function (t) {
  						for (n in r) o[n] = r[n](t);
  						return o
  					}
  				} : yt)(t, e)
  			},
  			Dt = function (t, e) {
  				return e -= t = +t,
  					function (n) {
  						return Math.round(t + e * n)
  					}
  			},
  			Lt = 180 / Math.PI,
  			Bt = {
  				translateX: 0,
  				translateY: 0,
  				rotate: 0,
  				skewX: 0,
  				scaleX: 1,
  				scaleY: 1
  			},
  			Et = function (t, e, n, r, o, i) {
  				var a, s, c;
  				return (a = Math.sqrt(t * t + e * e)) && (t /= a, e /= a), (c = t * n + e * r) && (n -= t * c, r -= e * c), (s = Math.sqrt(n * n + r * r)) && (n /= s, r /= s, c /= s), t * r < e * n && (t = -t, e = -e, c = -c, a = -a), {
  					translateX: o,
  					translateY: i,
  					rotate: Math.atan2(e, t) * Lt,
  					skewX: Math.atan(c) * Lt,
  					scaleX: a,
  					scaleY: s
  				}
  			};
  
  		function Ot(t, e, n, r) {
  			function o(t) {
  				return t.length ? t.pop() + " " : ""
  			}
  			return function (i, a) {
  				var s = [],
  					c = [];
  				return i = t(i), a = t(a),
  					function (t, r, o, i, a, s) {
  						if (t !== o || r !== i) {
  							var c = a.push("translate(", null, e, null, n);
  							s.push({
  								i: c - 4,
  								x: yt(t, o)
  							}, {
  									i: c - 2,
  									x: yt(r, i)
  								})
  						} else (o || i) && a.push("translate(" + o + e + i + n)
  					}(i.translateX, i.translateY, a.translateX, a.translateY, s, c),
  					function (t, e, n, i) {
  						t !== e ? (t - e > 180 ? e += 360 : e - t > 180 && (t += 360), i.push({
  							i: n.push(o(n) + "rotate(", null, r) - 2,
  							x: yt(t, e)
  						})) : e && n.push(o(n) + "rotate(" + e + r)
  					}(i.rotate, a.rotate, s, c),
  					function (t, e, n, i) {
  						t !== e ? i.push({
  							i: n.push(o(n) + "skewX(", null, r) - 2,
  							x: yt(t, e)
  						}) : e && n.push(o(n) + "skewX(" + e + r)
  					}(i.skewX, a.skewX, s, c),
  					function (t, e, n, r, i, a) {
  						if (t !== n || e !== r) {
  							var s = i.push(o(i) + "scale(", null, ",", null, ")");
  							a.push({
  								i: s - 4,
  								x: yt(t, n)
  							}, {
  									i: s - 2,
  									x: yt(e, r)
  								})
  						} else 1 === n && 1 === r || i.push(o(i) + "scale(" + n + "," + r + ")")
  					}(i.scaleX, i.scaleY, a.scaleX, a.scaleY, s, c), i = a = null,
  					function (t) {
  						for (var e, n = -1, r = c.length; ++n < r;) s[(e = c[n]).i] = e.x(t);
  						return s.join("")
  					}
  			}
  		}
  		var Pt = Ot(function (t) {
  			return "none" === t ? Bt : (At || (At = document.createElement("DIV"), Ct = document.documentElement, Mt = document.defaultView), At.style.transform = t, t = Mt.getComputedStyle(Ct.appendChild(At), null).getPropertyValue("transform"), Ct.removeChild(At), t = t.slice(7, -1).split(","), Et(+t[0], +t[1], +t[2], +t[3], +t[4], +t[5]))
  		}, "px, ", "px)", "deg)"),
  			Ft = Ot(function (t) {
  				return null == t ? Bt : (kt || (kt = document.createElementNS("http://www.w3.org/2000/svg", "g")), kt.setAttribute("transform", t), (t = kt.transform.baseVal.consolidate()) ? (t = t.matrix, Et(t.a, t.b, t.c, t.d, t.e, t.f)) : Bt)
  			}, ", ", ")", ")");
  		Math.SQRT2;
  
  		function Nt(t) {
  			return function (e, n) {
  				var r = t((e = P(e)).h, (n = P(n)).h),
  					o = _t(e.s, n.s),
  					i = _t(e.l, n.l),
  					a = _t(e.opacity, n.opacity);
  				return function (t) {
  					return e.h = r(t), e.s = o(t), e.l = i(t), e.opacity = a(t), e + ""
  				}
  			}
  		}
  		Nt(pt), Nt(_t);
  
  		function It(t) {
  			return function (e, n) {
  				var r = t((e = tt(e)).h, (n = tt(n)).h),
  					o = _t(e.c, n.c),
  					i = _t(e.l, n.l),
  					a = _t(e.opacity, n.opacity);
  				return function (t) {
  					return e.h = r(t), e.c = o(t), e.l = i(t), e.opacity = a(t), e + ""
  				}
  			}
  		}
  		It(pt), It(_t);
  
  		function Ut(t) {
  			return function e(n) {
  				function r(e, r) {
  					var o = t((e = lt(e)).h, (r = lt(r)).h),
  						i = _t(e.s, r.s),
  						a = _t(e.l, r.l),
  						s = _t(e.opacity, r.opacity);
  					return function (t) {
  						return e.h = o(t), e.s = i(t), e.l = a(Math.pow(t, n)), e.opacity = s(t), e + ""
  					}
  				}
  				return n = +n, r.gamma = e, r
  			}(1)
  		}
  		Ut(pt);
  		var jt = Ut(_t);
  		var Ht, Wt, Rt = 0,
  			Yt = 0,
  			qt = 0,
  			zt = 1e3,
  			Xt = 0,
  			$t = 0,
  			Kt = 0,
  			Vt = "object" == typeof performance && performance.now ? performance : Date,
  			Gt = "object" == typeof window && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function (t) {
  				setTimeout(t, 17)
  			};
  
  		function Qt() {
  			return $t || (Gt(Zt), $t = Vt.now() + Kt)
  		}
  
  		function Zt() {
  			$t = 0
  		}
  
  		function Jt() {
  			this._call = this._time = this._next = null
  		}
  
  		function te(t, e, n) {
  			var r = new Jt;
  			return r.restart(t, e, n), r
  		}
  
  		function ee() {
  			$t = (Xt = Vt.now()) + Kt, Rt = Yt = 0;
  			try {
  				! function () {
  					Qt(), ++Rt;
  					for (var t, e = Ht; e;)(t = $t - e._time) >= 0 && e._call.call(null, t), e = e._next;
  					--Rt
  				}()
  			} finally {
  				Rt = 0,
  					function () {
  						var t, e, n = Ht,
  							r = 1 / 0;
  						for (; n;) n._call ? (r > n._time && (r = n._time), t = n, n = n._next) : (e = n._next, n._next = null, n = t ? t._next = e : Ht = e);
  						Wt = t, re(r)
  					}(), $t = 0
  			}
  		}
  
  		function ne() {
  			var t = Vt.now(),
  				e = t - Xt;
  			e > zt && (Kt -= e, Xt = t)
  		}
  
  		function re(t) {
  			Rt || (Yt && (Yt = clearTimeout(Yt)), t - $t > 24 ? (t < 1 / 0 && (Yt = setTimeout(ee, t - Vt.now() - Kt)), qt && (qt = clearInterval(qt))) : (qt || (Xt = Vt.now(), qt = setInterval(ne, zt)), Rt = 1, Gt(ee)))
  		}
  		Jt.prototype = te.prototype = {
  			constructor: Jt,
  			restart: function (t, e, n) {
  				if ("function" != typeof t) throw new TypeError("callback is not a function");
  				n = (null == n ? Qt() : +n) + (null == e ? 0 : +e), this._next || Wt === this || (Wt ? Wt._next = this : Ht = this, Wt = this), this._call = t, this._time = n, re()
  			},
  			stop: function () {
  				this._call && (this._call = null, this._time = 1 / 0, re())
  			}
  		};
  		var oe = function (t, e, n) {
  			var r = new Jt;
  			return e = null == e ? 0 : +e, r.restart(function (n) {
  				r.stop(), t(n + e)
  			}, e, n), r
  		},
  			ie = Object(a.dispatch)("start", "end", "interrupt"),
  			ae = [],
  			se = 0,
  			ce = 1,
  			ue = 2,
  			le = 3,
  			fe = 4,
  			he = 5,
  			de = 6,
  			ge = function (t, e, n, r, o, i) {
  				var a = t.__transition;
  				if (a) {
  					if (n in a) return
  				} else t.__transition = {};
  				! function (t, e, n) {
  					var r, o = t.__transition;
  
  					function i(c) {
  						var u, l, f, h;
  						if (n.state !== ce) return s();
  						for (u in o)
  							if ((h = o[u]).name === n.name) {
  								if (h.state === le) return oe(i);
  								h.state === fe ? (h.state = de, h.timer.stop(), h.on.call("interrupt", t, t.__data__, h.index, h.group), delete o[u]) : +u < e && (h.state = de, h.timer.stop(), delete o[u])
  							}
  						if (oe(function () {
  							n.state === le && (n.state = fe, n.timer.restart(a, n.delay, n.time), a(c))
  						}), n.state = ue, n.on.call("start", t, t.__data__, n.index, n.group), n.state === ue) {
  							for (n.state = le, r = new Array(f = n.tween.length), u = 0, l = -1; u < f; ++u)(h = n.tween[u].value.call(t, t.__data__, n.index, n.group)) && (r[++l] = h);
  							r.length = l + 1
  						}
  					}
  
  					function a(e) {
  						for (var o = e < n.duration ? n.ease.call(null, e / n.duration) : (n.timer.restart(s), n.state = he, 1), i = -1, a = r.length; ++i < a;) r[i].call(null, o);
  						n.state === he && (n.on.call("end", t, t.__data__, n.index, n.group), s())
  					}
  
  					function s() {
  						for (var r in n.state = de, n.timer.stop(), delete o[e], o) return;
  						delete t.__transition
  					}
  					o[e] = n, n.timer = te(function (t) {
  						n.state = ce, n.timer.restart(i, n.delay, n.time), n.delay <= t && i(t - n.delay)
  					}, 0, n.time)
  				}(t, n, {
  					name: e,
  					index: r,
  					group: o,
  					on: ie,
  					tween: ae,
  					time: i.time,
  					delay: i.delay,
  					duration: i.duration,
  					ease: i.ease,
  					timer: null,
  					state: se
  				})
  			};
  
  		function pe(t, e) {
  			var n = _e(t, e);
  			if (n.state > se) throw new Error("too late; already scheduled");
  			return n
  		}
  
  		function me(t, e) {
  			var n = _e(t, e);
  			if (n.state > ue) throw new Error("too late; already started");
  			return n
  		}
  
  		function _e(t, e) {
  			var n = t.__transition;
  			if (!n || !(n = n[e])) throw new Error("transition not found");
  			return n
  		}
  		var be = function (t, e) {
  			var n, r, o, i = t.__transition,
  				a = !0;
  			if (i) {
  				for (o in e = null == e ? null : e + "", i) (n = i[o]).name === e ? (r = n.state > ue && n.state < he, n.state = de, n.timer.stop(), r && n.on.call("interrupt", t, t.__data__, n.index, n.group), delete i[o]) : a = !1;
  				a && delete t.__transition
  			}
  		};
  
  		function ve(t, e, n) {
  			var r = t._id;
  			return t.each(function () {
  				var t = me(this, r);
  				(t.value || (t.value = {}))[e] = n.apply(this, arguments)
  			}),
  				function (t) {
  					return _e(t, r).value[e]
  				}
  		}
  		var ye = function (t, e) {
  			var n;
  			return ("number" == typeof e ? yt : e instanceof k ? bt : (n = k(e)) ? (e = n, bt) : Tt)(t, e)
  		};
  		var we = o.selection.prototype.constructor;
  		var xe = 0;
  
  		function Ae(t, e, n, r) {
  			this._groups = t, this._parents = e, this._name = n, this._id = r
  		}
  
  		function Ce() {
  			return ++xe
  		}
  		var Me = o.selection.prototype;
  		Ae.prototype = function (t) {
  			return Object(o.selection)().transition(t)
  		}.prototype = {
  				constructor: Ae,
  				select: function (t) {
  					var e = this._name,
  						n = this._id;
  					"function" != typeof t && (t = Object(o.selector)(t));
  					for (var r = this._groups, i = r.length, a = new Array(i), s = 0; s < i; ++s)
  						for (var c, u, l = r[s], f = l.length, h = a[s] = new Array(f), d = 0; d < f; ++d)(c = l[d]) && (u = t.call(c, c.__data__, d, l)) && ("__data__" in c && (u.__data__ = c.__data__), h[d] = u, ge(h[d], e, n, d, h, _e(c, n)));
  					return new Ae(a, this._parents, e, n)
  				},
  				selectAll: function (t) {
  					var e = this._name,
  						n = this._id;
  					"function" != typeof t && (t = Object(o.selectorAll)(t));
  					for (var r = this._groups, i = r.length, a = [], s = [], c = 0; c < i; ++c)
  						for (var u, l = r[c], f = l.length, h = 0; h < f; ++h)
  							if (u = l[h]) {
  								for (var d, g = t.call(u, u.__data__, h, l), p = _e(u, n), m = 0, _ = g.length; m < _; ++m)(d = g[m]) && ge(d, e, n, m, g, p);
  								a.push(g), s.push(u)
  							}
  					return new Ae(a, s, e, n)
  				},
  				filter: function (t) {
  					"function" != typeof t && (t = Object(o.matcher)(t));
  					for (var e = this._groups, n = e.length, r = new Array(n), i = 0; i < n; ++i)
  						for (var a, s = e[i], c = s.length, u = r[i] = [], l = 0; l < c; ++l)(a = s[l]) && t.call(a, a.__data__, l, s) && u.push(a);
  					return new Ae(r, this._parents, this._name, this._id)
  				},
  				merge: function (t) {
  					if (t._id !== this._id) throw new Error;
  					for (var e = this._groups, n = t._groups, r = e.length, o = n.length, i = Math.min(r, o), a = new Array(r), s = 0; s < i; ++s)
  						for (var c, u = e[s], l = n[s], f = u.length, h = a[s] = new Array(f), d = 0; d < f; ++d)(c = u[d] || l[d]) && (h[d] = c);
  					for (; s < r; ++s) a[s] = e[s];
  					return new Ae(a, this._parents, this._name, this._id)
  				},
  				selection: function () {
  					return new we(this._groups, this._parents)
  				},
  				transition: function () {
  					for (var t = this._name, e = this._id, n = Ce(), r = this._groups, o = r.length, i = 0; i < o; ++i)
  						for (var a, s = r[i], c = s.length, u = 0; u < c; ++u)
  							if (a = s[u]) {
  								var l = _e(a, e);
  								ge(a, t, n, u, s, {
  									time: l.time + l.delay + l.duration,
  									delay: 0,
  									duration: l.duration,
  									ease: l.ease
  								})
  							}
  					return new Ae(r, this._parents, t, n)
  				},
  				call: Me.call,
  				nodes: Me.nodes,
  				node: Me.node,
  				size: Me.size,
  				empty: Me.empty,
  				each: Me.each,
  				on: function (t, e) {
  					var n = this._id;
  					return arguments.length < 2 ? _e(this.node(), n).on.on(t) : this.each(function (t, e, n) {
  						var r, o, i = function (t) {
  							return (t + "").trim().split(/^|\s+/).every(function (t) {
  								var e = t.indexOf(".");
  								return e >= 0 && (t = t.slice(0, e)), !t || "start" === t
  							})
  						}(e) ? pe : me;
  						return function () {
  							var a = i(this, t),
  								s = a.on;
  							s !== r && (o = (r = s).copy()).on(e, n), a.on = o
  						}
  					}(n, t, e))
  				},
  				attr: function (t, e) {
  					var n = Object(o.namespace)(t),
  						r = "transform" === n ? Ft : ye;
  					return this.attrTween(t, "function" == typeof e ? (n.local ? function (t, e, n) {
  						var r, o, i;
  						return function () {
  							var a, s = n(this);
  							if (null != s) return (a = this.getAttributeNS(t.space, t.local)) === s ? null : a === r && s === o ? i : i = e(r = a, o = s);
  							this.removeAttributeNS(t.space, t.local)
  						}
  					} : function (t, e, n) {
  						var r, o, i;
  						return function () {
  							var a, s = n(this);
  							if (null != s) return (a = this.getAttribute(t)) === s ? null : a === r && s === o ? i : i = e(r = a, o = s);
  							this.removeAttribute(t)
  						}
  					})(n, r, ve(this, "attr." + t, e)) : null == e ? (n.local ? function (t) {
  						return function () {
  							this.removeAttributeNS(t.space, t.local)
  						}
  					} : function (t) {
  						return function () {
  							this.removeAttribute(t)
  						}
  					})(n) : (n.local ? function (t, e, n) {
  						var r, o;
  						return function () {
  							var i = this.getAttributeNS(t.space, t.local);
  							return i === n ? null : i === r ? o : o = e(r = i, n)
  						}
  					} : function (t, e, n) {
  						var r, o;
  						return function () {
  							var i = this.getAttribute(t);
  							return i === n ? null : i === r ? o : o = e(r = i, n)
  						}
  					})(n, r, e + ""))
  				},
  				attrTween: function (t, e) {
  					var n = "attr." + t;
  					if (arguments.length < 2) return (n = this.tween(n)) && n._value;
  					if (null == e) return this.tween(n, null);
  					if ("function" != typeof e) throw new Error;
  					var r = Object(o.namespace)(t);
  					return this.tween(n, (r.local ? function (t, e) {
  						function n() {
  							var n = this,
  								r = e.apply(n, arguments);
  							return r && function (e) {
  								n.setAttributeNS(t.space, t.local, r(e))
  							}
  						}
  						return n._value = e, n
  					} : function (t, e) {
  						function n() {
  							var n = this,
  								r = e.apply(n, arguments);
  							return r && function (e) {
  								n.setAttribute(t, r(e))
  							}
  						}
  						return n._value = e, n
  					})(r, e))
  				},
  				style: function (t, e, n) {
  					var r = "transform" == (t += "") ? Pt : ye;
  					return null == e ? this.styleTween(t, function (t, e) {
  						var n, r, i;
  						return function () {
  							var a = Object(o.style)(this, t),
  								s = (this.style.removeProperty(t), Object(o.style)(this, t));
  							return a === s ? null : a === n && s === r ? i : i = e(n = a, r = s)
  						}
  					}(t, r)).on("end.style." + t, function (t) {
  						return function () {
  							this.style.removeProperty(t)
  						}
  					}(t)) : this.styleTween(t, "function" == typeof e ? function (t, e, n) {
  						var r, i, a;
  						return function () {
  							var s = Object(o.style)(this, t),
  								c = n(this);
  							return null == c && (this.style.removeProperty(t), c = Object(o.style)(this, t)), s === c ? null : s === r && c === i ? a : a = e(r = s, i = c)
  						}
  					}(t, r, ve(this, "style." + t, e)) : function (t, e, n) {
  						var r, i;
  						return function () {
  							var a = Object(o.style)(this, t);
  							return a === n ? null : a === r ? i : i = e(r = a, n)
  						}
  					}(t, r, e + ""), n)
  				},
  				styleTween: function (t, e, n) {
  					var r = "style." + (t += "");
  					if (arguments.length < 2) return (r = this.tween(r)) && r._value;
  					if (null == e) return this.tween(r, null);
  					if ("function" != typeof e) throw new Error;
  					return this.tween(r, function (t, e, n) {
  						function r() {
  							var r = this,
  								o = e.apply(r, arguments);
  							return o && function (e) {
  								r.style.setProperty(t, o(e), n)
  							}
  						}
  						return r._value = e, r
  					}(t, e, null == n ? "" : n))
  				},
  				text: function (t) {
  					return this.tween("text", "function" == typeof t ? function (t) {
  						return function () {
  							var e = t(this);
  							this.textContent = null == e ? "" : e
  						}
  					}(ve(this, "text", t)) : function (t) {
  						return function () {
  							this.textContent = t
  						}
  					}(null == t ? "" : t + ""))
  				},
  				remove: function () {
  					return this.on("end.remove", function (t) {
  						return function () {
  							var e = this.parentNode;
  							for (var n in this.__transition)
  								if (+n !== t) return;
  							e && e.removeChild(this)
  						}
  					}(this._id))
  				},
  				tween: function (t, e) {
  					var n = this._id;
  					if (t += "", arguments.length < 2) {
  						for (var r, o = _e(this.node(), n).tween, i = 0, a = o.length; i < a; ++i)
  							if ((r = o[i]).name === t) return r.value;
  						return null
  					}
  					return this.each((null == e ? function (t, e) {
  						var n, r;
  						return function () {
  							var o = me(this, t),
  								i = o.tween;
  							if (i !== n)
  								for (var a = 0, s = (r = n = i).length; a < s; ++a)
  									if (r[a].name === e) {
  										(r = r.slice()).splice(a, 1);
  										break
  									}
  							o.tween = r
  						}
  					} : function (t, e, n) {
  						var r, o;
  						if ("function" != typeof n) throw new Error;
  						return function () {
  							var i = me(this, t),
  								a = i.tween;
  							if (a !== r) {
  								o = (r = a).slice();
  								for (var s = {
  									name: e,
  									value: n
  								}, c = 0, u = o.length; c < u; ++c)
  									if (o[c].name === e) {
  										o[c] = s;
  										break
  									}
  								c === u && o.push(s)
  							}
  							i.tween = o
  						}
  					})(n, t, e))
  				},
  				delay: function (t) {
  					var e = this._id;
  					return arguments.length ? this.each(("function" == typeof t ? function (t, e) {
  						return function () {
  							pe(this, t).delay = +e.apply(this, arguments)
  						}
  					} : function (t, e) {
  						return e = +e,
  							function () {
  								pe(this, t).delay = e
  							}
  					})(e, t)) : _e(this.node(), e).delay
  				},
  				duration: function (t) {
  					var e = this._id;
  					return arguments.length ? this.each(("function" == typeof t ? function (t, e) {
  						return function () {
  							me(this, t).duration = +e.apply(this, arguments)
  						}
  					} : function (t, e) {
  						return e = +e,
  							function () {
  								me(this, t).duration = e
  							}
  					})(e, t)) : _e(this.node(), e).duration
  				},
  				ease: function (t) {
  					var e = this._id;
  					return arguments.length ? this.each(function (t, e) {
  						if ("function" != typeof e) throw new Error;
  						return function () {
  							me(this, t).ease = e
  						}
  					}(e, t)) : _e(this.node(), e).ease
  				}
  			};
  		(function t(e) {
  			function n(t) {
  				return Math.pow(t, e)
  			}
  			return e = +e, n.exponent = t, n
  		})(3),
  			function t(e) {
  				function n(t) {
  					return 1 - Math.pow(1 - t, e)
  				}
  				return e = +e, n.exponent = t, n
  			}(3),
  			function t(e) {
  				function n(t) {
  					return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2
  				}
  				return e = +e, n.exponent = t, n
  			}(3), Math.PI;
  		(function t(e) {
  			function n(t) {
  				return t * t * ((e + 1) * t - e)
  			}
  			return e = +e, n.overshoot = t, n
  		})(1.70158),
  			function t(e) {
  				function n(t) {
  					return --t * t * ((e + 1) * t + e) + 1
  				}
  				return e = +e, n.overshoot = t, n
  			}(1.70158),
  			function t(e) {
  				function n(t) {
  					return ((t *= 2) < 1 ? t * t * ((e + 1) * t - e) : (t -= 2) * t * ((e + 1) * t + e) + 2) / 2
  				}
  				return e = +e, n.overshoot = t, n
  			}(1.70158);
  		var ke = 2 * Math.PI,
  			Te = (function t(e, n) {
  				var r = Math.asin(1 / (e = Math.max(1, e))) * (n /= ke);
  
  				function o(t) {
  					return e * Math.pow(2, 10 * --t) * Math.sin((r - t) / n)
  				}
  				return o.amplitude = function (e) {
  					return t(e, n * ke)
  				}, o.period = function (n) {
  					return t(e, n)
  				}, o
  			}(1, .3), function t(e, n) {
  				var r = Math.asin(1 / (e = Math.max(1, e))) * (n /= ke);
  
  				function o(t) {
  					return 1 - e * Math.pow(2, -10 * (t = +t)) * Math.sin((t + r) / n)
  				}
  				return o.amplitude = function (e) {
  					return t(e, n * ke)
  				}, o.period = function (n) {
  					return t(e, n)
  				}, o
  			}(1, .3), function t(e, n) {
  				var r = Math.asin(1 / (e = Math.max(1, e))) * (n /= ke);
  
  				function o(t) {
  					return ((t = 2 * t - 1) < 0 ? e * Math.pow(2, 10 * t) * Math.sin((r - t) / n) : 2 - e * Math.pow(2, -10 * t) * Math.sin((r + t) / n)) / 2
  				}
  				return o.amplitude = function (e) {
  					return t(e, n * ke)
  				}, o.period = function (n) {
  					return t(e, n)
  				}, o
  			}(1, .3), {
  					time: null,
  					delay: 0,
  					duration: 250,
  					ease: function (t) {
  						return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2
  					}
  				});
  
  		function Se(t, e) {
  			for (var n; !(n = t.__transition) || !(n = n[e]);)
  				if (!(t = t.parentNode)) return Te.time = Qt(), Te;
  			return n
  		}
  		o.selection.prototype.interrupt = function (t) {
  			return this.each(function () {
  				be(this, t)
  			})
  		}, o.selection.prototype.transition = function (t) {
  			var e, n;
  			t instanceof Ae ? (e = t._id, t = t._name) : (e = Ce(), (n = Te).time = Qt(), t = null == t ? null : t + "");
  			for (var r = this._groups, o = r.length, i = 0; i < o; ++i)
  				for (var a, s = r[i], c = s.length, u = 0; u < c; ++u)(a = s[u]) && ge(a, t, e, u, s, n || Se(a, e));
  			return new Ae(r, this._parents, t, e)
  		};
  		var De = function (t) {
  			return function () {
  				return t
  			}
  		},
  			Le = function (t, e, n) {
  				this.target = t, this.type = e, this.selection = n
  			};
  
  		function Be() {
  			o.event.stopImmediatePropagation()
  		}
  		var Ee = function () {
  			o.event.preventDefault(), o.event.stopImmediatePropagation()
  		},
  			Oe = {
  				name: "drag"
  			},
  			Pe = {
  				name: "space"
  			},
  			Fe = {
  				name: "handle"
  			},
  			Ne = {
  				name: "center"
  			},
  			Ie = {
  				name: "x",
  				handles: ["e", "w"].map(ze),
  				input: function (t, e) {
  					return t && [
  						[t[0], e[0][1]],
  						[t[1], e[1][1]]
  					]
  				},
  				output: function (t) {
  					return t && [t[0][0], t[1][0]]
  				}
  			},
  			Ue = {
  				name: "y",
  				handles: ["n", "s"].map(ze),
  				input: function (t, e) {
  					return t && [
  						[e[0][0], t[0]],
  						[e[1][0], t[1]]
  					]
  				},
  				output: function (t) {
  					return t && [t[0][1], t[1][1]]
  				}
  			},
  			je = {
  				name: "xy",
  				handles: ["n", "e", "s", "w", "nw", "ne", "se", "sw"].map(ze),
  				input: function (t) {
  					return t
  				},
  				output: function (t) {
  					return t
  				}
  			},
  			He = {
  				overlay: "crosshair",
  				selection: "move",
  				n: "ns-resize",
  				e: "ew-resize",
  				s: "ns-resize",
  				w: "ew-resize",
  				nw: "nwse-resize",
  				ne: "nesw-resize",
  				se: "nwse-resize",
  				sw: "nesw-resize"
  			},
  			We = {
  				e: "w",
  				w: "e",
  				nw: "ne",
  				ne: "nw",
  				se: "sw",
  				sw: "se"
  			},
  			Re = {
  				n: "s",
  				s: "n",
  				nw: "sw",
  				ne: "se",
  				se: "ne",
  				sw: "nw"
  			},
  			Ye = {
  				overlay: 1,
  				selection: 1,
  				n: null,
  				e: 1,
  				s: null,
  				w: -1,
  				nw: -1,
  				ne: 1,
  				se: 1,
  				sw: -1
  			},
  			qe = {
  				overlay: 1,
  				selection: 1,
  				n: -1,
  				e: null,
  				s: 1,
  				w: null,
  				nw: -1,
  				ne: -1,
  				se: 1,
  				sw: 1
  			};
  
  		function ze(t) {
  			return {
  				type: t
  			}
  		}
  
  		function Xe() {
  			return !o.event.button
  		}
  
  		function $e() {
  			var t = this.ownerSVGElement || this;
  			return [
  				[0, 0],
  				[t.width.baseVal.value, t.height.baseVal.value]
  			]
  		}
  
  		function Ke(t) {
  			for (; !t.__brush;)
  				if (!(t = t.parentNode)) return;
  			return t.__brush
  		}
  
  		function Ve(t) {
  			return t[0][0] === t[1][0] || t[0][1] === t[1][1]
  		}
  
  		function Ge(t) {
  			var e = t.__brush;
  			return e ? e.dim.output(e.selection) : null
  		}
  
  		function Qe() {
  			return tn(Ie)
  		}
  
  		function Ze() {
  			return tn(Ue)
  		}
  		var Je = function () {
  			return tn(je)
  		};
  
  		function tn(t) {
  			var e, n = $e,
  				r = Xe,
  				i = Object(a.dispatch)(l, "start", "brush", "end"),
  				s = 6;
  
  			function l(e) {
  				var n = e.property("__brush", p).selectAll(".overlay").data([ze("overlay")]);
  				n.enter().append("rect").attr("class", "overlay").attr("pointer-events", "all").attr("cursor", He.overlay).merge(n).each(function () {
  					var t = Ke(this).extent;
  					Object(o.select)(this).attr("x", t[0][0]).attr("y", t[0][1]).attr("width", t[1][0] - t[0][0]).attr("height", t[1][1] - t[0][1])
  				}), e.selectAll(".selection").data([ze("selection")]).enter().append("rect").attr("class", "selection").attr("cursor", He.selection).attr("fill", "#777").attr("fill-opacity", .3).attr("stroke", "#fff").attr("shape-rendering", "crispEdges");
  				var r = e.selectAll(".handle").data(t.handles, function (t) {
  					return t.type
  				});
  				r.exit().remove(), r.enter().append("rect").attr("class", function (t) {
  					return "handle handle--" + t.type
  				}).attr("cursor", function (t) {
  					return He[t.type]
  				}), e.each(f).attr("fill", "none").attr("pointer-events", "all").style("-webkit-tap-highlight-color", "rgba(0,0,0,0)").on("mousedown.brush touchstart.brush", g)
  			}
  
  			function f() {
  				var t = Object(o.select)(this),
  					e = Ke(this).selection;
  				e ? (t.selectAll(".selection").style("display", null).attr("x", e[0][0]).attr("y", e[0][1]).attr("width", e[1][0] - e[0][0]).attr("height", e[1][1] - e[0][1]), t.selectAll(".handle").style("display", null).attr("x", function (t) {
  					return "e" === t.type[t.type.length - 1] ? e[1][0] - s / 2 : e[0][0] - s / 2
  				}).attr("y", function (t) {
  					return "s" === t.type[0] ? e[1][1] - s / 2 : e[0][1] - s / 2
  				}).attr("width", function (t) {
  					return "n" === t.type || "s" === t.type ? e[1][0] - e[0][0] + s : s
  				}).attr("height", function (t) {
  					return "e" === t.type || "w" === t.type ? e[1][1] - e[0][1] + s : s
  				})) : t.selectAll(".selection,.handle").style("display", "none").attr("x", null).attr("y", null).attr("width", null).attr("height", null)
  			}
  
  			function h(t, e) {
  				return t.__brush.emitter || new d(t, e)
  			}
  
  			function d(t, e) {
  				this.that = t, this.args = e, this.state = t.__brush, this.active = 0
  			}
  
  			function g() {
  				if (o.event.touches) {
  					if (o.event.changedTouches.length < o.event.touches.length) return Ee()
  				} else if (e) return;
  				if (r.apply(this, arguments)) {
  					var n, i, a, s, l, d, g, p, m, _, b, v, y, w = this,
  						x = o.event.target.__data__.type,
  						A = "selection" === (o.event.metaKey ? x = "overlay" : x) ? Oe : o.event.altKey ? Ne : Fe,
  						C = t === Ue ? null : Ye[x],
  						M = t === Ie ? null : qe[x],
  						k = Ke(w),
  						T = k.extent,
  						S = k.selection,
  						D = T[0][0],
  						L = T[0][1],
  						B = T[1][0],
  						E = T[1][1],
  						O = C && M && o.event.shiftKey,
  						P = Object(o.mouse)(w),
  						F = P,
  						N = h(w, arguments).beforestart();
  					"overlay" === x ? k.selection = S = [
  						[n = t === Ue ? D : P[0], a = t === Ie ? L : P[1]],
  						[l = t === Ue ? B : n, g = t === Ie ? E : a]
  					] : (n = S[0][0], a = S[0][1], l = S[1][0], g = S[1][1]), i = n, s = a, d = l, p = g;
  					var I = Object(o.select)(w).attr("pointer-events", "none"),
  						U = I.selectAll(".overlay").attr("cursor", He[x]);
  					if (o.event.touches) I.on("touchmove.brush", H, !0).on("touchend.brush touchcancel.brush", R, !0);
  					else {
  						var j = Object(o.select)(o.event.view).on("keydown.brush", function () {
  							switch (o.event.keyCode) {
  								case 16:
  									O = C && M;
  									break;
  								case 18:
  									A === Fe && (C && (l = d - m * C, n = i + m * C), M && (g = p - _ * M, a = s + _ * M), A = Ne, W());
  									break;
  								case 32:
  									A !== Fe && A !== Ne || (C < 0 ? l = d - m : C > 0 && (n = i - m), M < 0 ? g = p - _ : M > 0 && (a = s - _), A = Pe, U.attr("cursor", He.selection), W());
  									break;
  								default:
  									return
  							}
  							Ee()
  						}, !0).on("keyup.brush", function () {
  							switch (o.event.keyCode) {
  								case 16:
  									O && (v = y = O = !1, W());
  									break;
  								case 18:
  									A === Ne && (C < 0 ? l = d : C > 0 && (n = i), M < 0 ? g = p : M > 0 && (a = s), A = Fe, W());
  									break;
  								case 32:
  									A === Pe && (o.event.altKey ? (C && (l = d - m * C, n = i + m * C), M && (g = p - _ * M, a = s + _ * M), A = Ne) : (C < 0 ? l = d : C > 0 && (n = i), M < 0 ? g = p : M > 0 && (a = s), A = Fe), U.attr("cursor", He[x]), W());
  									break;
  								default:
  									return
  							}
  							Ee()
  						}, !0).on("mousemove.brush", H, !0).on("mouseup.brush", R, !0);
  						c(o.event.view)
  					}
  					Be(), be(w), f.call(w), N.start()
  				}
  
  				function H() {
  					var t = Object(o.mouse)(w);
  					!O || v || y || (Math.abs(t[0] - F[0]) > Math.abs(t[1] - F[1]) ? y = !0 : v = !0), F = t, b = !0, Ee(), W()
  				}
  
  				function W() {
  					var t;
  					switch (m = F[0] - P[0], _ = F[1] - P[1], A) {
  						case Pe:
  						case Oe:
  							C && (m = Math.max(D - n, Math.min(B - l, m)), i = n + m, d = l + m), M && (_ = Math.max(L - a, Math.min(E - g, _)), s = a + _, p = g + _);
  							break;
  						case Fe:
  							C < 0 ? (m = Math.max(D - n, Math.min(B - n, m)), i = n + m, d = l) : C > 0 && (m = Math.max(D - l, Math.min(B - l, m)), i = n, d = l + m), M < 0 ? (_ = Math.max(L - a, Math.min(E - a, _)), s = a + _, p = g) : M > 0 && (_ = Math.max(L - g, Math.min(E - g, _)), s = a, p = g + _);
  							break;
  						case Ne:
  							C && (i = Math.max(D, Math.min(B, n - m * C)), d = Math.max(D, Math.min(B, l + m * C))), M && (s = Math.max(L, Math.min(E, a - _ * M)), p = Math.max(L, Math.min(E, g + _ * M)))
  					}
  					d < i && (C *= -1, t = n, n = l, l = t, t = i, i = d, d = t, x in We && U.attr("cursor", He[x = We[x]])), p < s && (M *= -1, t = a, a = g, g = t, t = s, s = p, p = t, x in Re && U.attr("cursor", He[x = Re[x]])), k.selection && (S = k.selection), v && (i = S[0][0], d = S[1][0]), y && (s = S[0][1], p = S[1][1]), S[0][0] === i && S[0][1] === s && S[1][0] === d && S[1][1] === p || (k.selection = [
  						[i, s],
  						[d, p]
  					], f.call(w), N.brush())
  				}
  
  				function R() {
  					if (Be(), o.event.touches) {
  						if (o.event.touches.length) return;
  						e && clearTimeout(e), e = setTimeout(function () {
  							e = null
  						}, 500), I.on("touchmove.brush touchend.brush touchcancel.brush", null)
  					} else u(o.event.view, b), j.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null);
  					I.attr("pointer-events", "all"), U.attr("cursor", He.overlay), k.selection && (S = k.selection), Ve(S) && (k.selection = null, f.call(w)), N.end()
  				}
  			}
  
  			function p() {
  				var e = this.__brush || {
  					selection: null
  				};
  				return e.extent = n.apply(this, arguments), e.dim = t, e
  			}
  			return l.move = function (e, n) {
  				e.selection ? e.on("start.brush", function () {
  					h(this, arguments).beforestart().start()
  				}).on("interrupt.brush end.brush", function () {
  					h(this, arguments).end()
  				}).tween("brush", function () {
  					var e = this,
  						r = e.__brush,
  						o = h(e, arguments),
  						i = r.selection,
  						a = t.input("function" == typeof n ? n.apply(this, arguments) : n, r.extent),
  						s = St(i, a);
  
  					function c(t) {
  						r.selection = 1 === t && Ve(a) ? null : s(t), f.call(e), o.brush()
  					}
  					return i && a ? c : c(1)
  				}) : e.each(function () {
  					var e = arguments,
  						r = this.__brush,
  						o = t.input("function" == typeof n ? n.apply(this, e) : n, r.extent),
  						i = h(this, e).beforestart();
  					be(this), r.selection = null == o || Ve(o) ? null : o, f.call(this), i.start().brush().end()
  				})
  			}, d.prototype = {
  				beforestart: function () {
  					return 1 == ++this.active && (this.state.emitter = this, this.starting = !0), this
  				},
  				start: function () {
  					return this.starting && (this.starting = !1, this.emit("start")), this
  				},
  				brush: function () {
  					return this.emit("brush"), this
  				},
  				end: function () {
  					return 0 == --this.active && (delete this.state.emitter, this.emit("end")), this
  				},
  				emit: function (e) {
  					Object(o.customEvent)(new Le(l, e, t.output(this.state.selection)), i.apply, i, [e, this.that, this.args])
  				}
  			}, l.extent = function (t) {
  				return arguments.length ? (n = "function" == typeof t ? t : De([
  					[+t[0][0], +t[0][1]],
  					[+t[1][0], +t[1][1]]
  				]), l) : n
  			}, l.filter = function (t) {
  				return arguments.length ? (r = "function" == typeof t ? t : De(!!t), l) : r
  			}, l.handleSize = function (t) {
  				return arguments.length ? (s = +t, l) : s
  			}, l.on = function () {
  				var t = i.on.apply(i, arguments);
  				return t === i ? l : t
  			}, l
  		}
  		var en = function (t, e) {
  			return t < e ? -1 : t > e ? 1 : t >= e ? 0 : NaN
  		},
  			nn = function (t) {
  				return 1 === t.length && (t = function (t) {
  					return function (e, n) {
  						return en(t(e), n)
  					}
  				}(t)), {
  						left: function (e, n, r, o) {
  							for (null == r && (r = 0), null == o && (o = e.length); r < o;) {
  								var i = r + o >>> 1;
  								t(e[i], n) < 0 ? r = i + 1 : o = i
  							}
  							return r
  						},
  						right: function (e, n, r, o) {
  							for (null == r && (r = 0), null == o && (o = e.length); r < o;) {
  								var i = r + o >>> 1;
  								t(e[i], n) > 0 ? o = i : r = i + 1
  							}
  							return r
  						}
  					}
  			};
  		var rn = nn(en),
  			on = rn.right,
  			an = (rn.left, on);
  		var sn = Array.prototype,
  			cn = (sn.slice, sn.map, Math.sqrt(50)),
  			un = Math.sqrt(10),
  			ln = Math.sqrt(2),
  			fn = function (t, e, n) {
  				var r, o, i, a, s = -1;
  				if (n = +n, (t = +t) === (e = +e) && n > 0) return [t];
  				if ((r = e < t) && (o = t, t = e, e = o), 0 === (a = hn(t, e, n)) || !isFinite(a)) return [];
  				if (a > 0)
  					for (t = Math.ceil(t / a), e = Math.floor(e / a), i = new Array(o = Math.ceil(e - t + 1)); ++s < o;) i[s] = (t + s) * a;
  				else
  					for (t = Math.floor(t * a), e = Math.ceil(e * a), i = new Array(o = Math.ceil(t - e + 1)); ++s < o;) i[s] = (t - s) / a;
  				return r && i.reverse(), i
  			};
  
  		function hn(t, e, n) {
  			var r = (e - t) / Math.max(0, n),
  				o = Math.floor(Math.log(r) / Math.LN10),
  				i = r / Math.pow(10, o);
  			return o >= 0 ? (i >= cn ? 10 : i >= un ? 5 : i >= ln ? 2 : 1) * Math.pow(10, o) : -Math.pow(10, -o) / (i >= cn ? 10 : i >= un ? 5 : i >= ln ? 2 : 1)
  		}
  
  		function dn(t, e, n) {
  			var r = Math.abs(e - t) / Math.max(0, n),
  				o = Math.pow(10, Math.floor(Math.log(r) / Math.LN10)),
  				i = r / o;
  			return i >= cn ? o *= 10 : i >= un ? o *= 5 : i >= ln && (o *= 2), e < t ? -o : o
  		}
  		var gn = function (t, e) {
  			var n, r, o = t.length,
  				i = -1;
  			if (null == e) {
  				for (; ++i < o;)
  					if (null != (n = t[i]) && n >= n)
  						for (r = n; ++i < o;) null != (n = t[i]) && n > r && (r = n)
  			} else
  				for (; ++i < o;)
  					if (null != (n = e(t[i], i, t)) && n >= n)
  						for (r = n; ++i < o;) null != (n = e(t[i], i, t)) && n > r && (r = n);
  			return r
  		};
  
  		function pn() { }
  
  		function mn(t, e) {
  			var n = new pn;
  			if (t instanceof pn) t.each(function (t, e) {
  				n.set(e, t)
  			});
  			else if (Array.isArray(t)) {
  				var r, o = -1,
  					i = t.length;
  				if (null == e)
  					for (; ++o < i;) n.set(o, t[o]);
  				else
  					for (; ++o < i;) n.set(e(r = t[o], o, t), r)
  			} else if (t)
  				for (var a in t) n.set(a, t[a]);
  			return n
  		}
  		pn.prototype = mn.prototype = {
  			constructor: pn,
  			has: function (t) {
  				return "$" + t in this
  			},
  			get: function (t) {
  				return this["$" + t]
  			},
  			set: function (t, e) {
  				return this["$" + t] = e, this
  			},
  			remove: function (t) {
  				var e = "$" + t;
  				return e in this && delete this[e]
  			},
  			clear: function () {
  				for (var t in this) "$" === t[0] && delete this[t]
  			},
  			keys: function () {
  				var t = [];
  				for (var e in this) "$" === e[0] && t.push(e.slice(1));
  				return t
  			},
  			values: function () {
  				var t = [];
  				for (var e in this) "$" === e[0] && t.push(this[e]);
  				return t
  			},
  			entries: function () {
  				var t = [];
  				for (var e in this) "$" === e[0] && t.push({
  					key: e.slice(1),
  					value: this[e]
  				});
  				return t
  			},
  			size: function () {
  				var t = 0;
  				for (var e in this) "$" === e[0] && ++t;
  				return t
  			},
  			empty: function () {
  				for (var t in this)
  					if ("$" === t[0]) return !1;
  				return !0
  			},
  			each: function (t) {
  				for (var e in this) "$" === e[0] && t(this[e], e.slice(1), this)
  			}
  		};
  		var _n = mn;
  
  		function bn() { }
  		var vn = _n.prototype;
  
  		function yn(t, e) {
  			var n = new bn;
  			if (t instanceof bn) t.each(function (t) {
  				n.add(t)
  			});
  			else if (t) {
  				var r = -1,
  					o = t.length;
  				if (null == e)
  					for (; ++r < o;) n.add(t[r]);
  				else
  					for (; ++r < o;) n.add(e(t[r], r, t))
  			}
  			return n
  		}
  		bn.prototype = yn.prototype = {
  			constructor: bn,
  			has: vn.has,
  			add: function (t) {
  				return this["$" + (t += "")] = t, this
  			},
  			remove: vn.remove,
  			clear: vn.clear,
  			values: vn.keys,
  			size: vn.size,
  			empty: vn.empty,
  			each: vn.each
  		};
  		var wn = Array.prototype,
  			xn = wn.map,
  			An = wn.slice;
  		var Cn = function (t) {
  			return function () {
  				return t
  			}
  		},
  			Mn = function (t) {
  				return +t
  			},
  			kn = [0, 1];
  
  		function Tn(t, e) {
  			return (e -= t = +t) ? function (n) {
  				return (n - t) / e
  			} : Cn(e)
  		}
  
  		function Sn(t, e, n, r) {
  			var o = t[0],
  				i = t[1],
  				a = e[0],
  				s = e[1];
  			return i < o ? (o = n(i, o), a = r(s, a)) : (o = n(o, i), a = r(a, s)),
  				function (t) {
  					return a(o(t))
  				}
  		}
  
  		function Dn(t, e, n, r) {
  			var o = Math.min(t.length, e.length) - 1,
  				i = new Array(o),
  				a = new Array(o),
  				s = -1;
  			for (t[o] < t[0] && (t = t.slice().reverse(), e = e.slice().reverse()); ++s < o;) i[s] = n(t[s], t[s + 1]), a[s] = r(e[s], e[s + 1]);
  			return function (e) {
  				var n = an(t, e, 1, o) - 1;
  				return a[n](i[n](e))
  			}
  		}
  
  		function Ln(t, e) {
  			return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp())
  		}
  
  		function Bn(t, e) {
  			var n, r, o, i = kn,
  				a = kn,
  				s = St,
  				c = !1;
  
  			function u() {
  				return n = Math.min(i.length, a.length) > 2 ? Dn : Sn, r = o = null, l
  			}
  
  			function l(e) {
  				return (r || (r = n(i, a, c ? function (t) {
  					return function (e, n) {
  						var r = t(e = +e, n = +n);
  						return function (t) {
  							return t <= e ? 0 : t >= n ? 1 : r(t)
  						}
  					}
  				}(t) : t, s)))(+e)
  			}
  			return l.invert = function (t) {
  				return (o || (o = n(a, i, Tn, c ? function (t) {
  					return function (e, n) {
  						var r = t(e = +e, n = +n);
  						return function (t) {
  							return t <= 0 ? e : t >= 1 ? n : r(t)
  						}
  					}
  				}(e) : e)))(+t)
  			}, l.domain = function (t) {
  				return arguments.length ? (i = xn.call(t, Mn), u()) : i.slice()
  			}, l.range = function (t) {
  				return arguments.length ? (a = An.call(t), u()) : a.slice()
  			}, l.rangeRound = function (t) {
  				return a = An.call(t), s = Dt, u()
  			}, l.clamp = function (t) {
  				return arguments.length ? (c = !!t, u()) : c
  			}, l.interpolate = function (t) {
  				return arguments.length ? (s = t, u()) : s
  			}, u()
  		}
  		var En = function (t, e) {
  			if ((n = (t = e ? t.toExponential(e - 1) : t.toExponential()).indexOf("e")) < 0) return null;
  			var n, r = t.slice(0, n);
  			return [r.length > 1 ? r[0] + r.slice(2) : r, +t.slice(n + 1)]
  		},
  			On = function (t) {
  				return (t = En(Math.abs(t))) ? t[1] : NaN
  			},
  			Pn = /^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;
  
  		function Fn(t) {
  			return new Nn(t)
  		}
  
  		function Nn(t) {
  			if (!(e = Pn.exec(t))) throw new Error("invalid format: " + t);
  			var e;
  			this.fill = e[1] || " ", this.align = e[2] || ">", this.sign = e[3] || "-", this.symbol = e[4] || "", this.zero = !!e[5], this.width = e[6] && +e[6], this.comma = !!e[7], this.precision = e[8] && +e[8].slice(1), this.trim = !!e[9], this.type = e[10] || ""
  		}
  		Fn.prototype = Nn.prototype, Nn.prototype.toString = function () {
  			return this.fill + this.align + this.sign + this.symbol + (this.zero ? "0" : "") + (null == this.width ? "" : Math.max(1, 0 | this.width)) + (this.comma ? "," : "") + (null == this.precision ? "" : "." + Math.max(0, 0 | this.precision)) + (this.trim ? "~" : "") + this.type
  		};
  		var In, Un, jn, Hn, Wn = function (t) {
  			t: for (var e, n = t.length, r = 1, o = -1; r < n; ++r) switch (t[r]) {
  				case ".":
  					o = e = r;
  					break;
  				case "0":
  					0 === o && (o = r), e = r;
  					break;
  				default:
  					if (o > 0) {
  						if (!+t[r]) break t;
  						o = 0
  					}
  			}
  			return o > 0 ? t.slice(0, o) + t.slice(e + 1) : t
  		},
  			Rn = function (t, e) {
  				var n = En(t, e);
  				if (!n) return t + "";
  				var r = n[0],
  					o = n[1];
  				return o < 0 ? "0." + new Array(-o).join("0") + r : r.length > o + 1 ? r.slice(0, o + 1) + "." + r.slice(o + 1) : r + new Array(o - r.length + 2).join("0")
  			},
  			Yn = {
  				"%": function (t, e) {
  					return (100 * t).toFixed(e)
  				},
  				b: function (t) {
  					return Math.round(t).toString(2)
  				},
  				c: function (t) {
  					return t + ""
  				},
  				d: function (t) {
  					return Math.round(t).toString(10)
  				},
  				e: function (t, e) {
  					return t.toExponential(e)
  				},
  				f: function (t, e) {
  					return t.toFixed(e)
  				},
  				g: function (t, e) {
  					return t.toPrecision(e)
  				},
  				o: function (t) {
  					return Math.round(t).toString(8)
  				},
  				p: function (t, e) {
  					return Rn(100 * t, e)
  				},
  				r: Rn,
  				s: function (t, e) {
  					var n = En(t, e);
  					if (!n) return t + "";
  					var r = n[0],
  						o = n[1],
  						i = o - (In = 3 * Math.max(-8, Math.min(8, Math.floor(o / 3)))) + 1,
  						a = r.length;
  					return i === a ? r : i > a ? r + new Array(i - a + 1).join("0") : i > 0 ? r.slice(0, i) + "." + r.slice(i) : "0." + new Array(1 - i).join("0") + En(t, Math.max(0, e + i - 1))[0]
  				},
  				X: function (t) {
  					return Math.round(t).toString(16).toUpperCase()
  				},
  				x: function (t) {
  					return Math.round(t).toString(16)
  				}
  			},
  			qn = function (t) {
  				return t
  			},
  			zn = ["y", "z", "a", "f", "p", "n", "µ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y"],
  			Xn = function (t) {
  				var e = t.grouping && t.thousands ? function (t, e) {
  					return function (n, r) {
  						for (var o = n.length, i = [], a = 0, s = t[0], c = 0; o > 0 && s > 0 && (c + s + 1 > r && (s = Math.max(1, r - c)), i.push(n.substring(o -= s, o + s)), !((c += s + 1) > r));) s = t[a = (a + 1) % t.length];
  						return i.reverse().join(e)
  					}
  				}(t.grouping, t.thousands) : qn,
  					n = t.currency,
  					r = t.decimal,
  					o = t.numerals ? function (t) {
  						return function (e) {
  							return e.replace(/[0-9]/g, function (e) {
  								return t[+e]
  							})
  						}
  					}(t.numerals) : qn,
  					i = t.percent || "%";
  
  				function a(t) {
  					var a = (t = Fn(t)).fill,
  						s = t.align,
  						c = t.sign,
  						u = t.symbol,
  						l = t.zero,
  						f = t.width,
  						h = t.comma,
  						d = t.precision,
  						g = t.trim,
  						p = t.type;
  					"n" === p ? (h = !0, p = "g") : Yn[p] || (null == d && (d = 12), g = !0, p = "g"), (l || "0" === a && "=" === s) && (l = !0, a = "0", s = "=");
  					var m = "$" === u ? n[0] : "#" === u && /[boxX]/.test(p) ? "0" + p.toLowerCase() : "",
  						_ = "$" === u ? n[1] : /[%p]/.test(p) ? i : "",
  						b = Yn[p],
  						v = /[defgprs%]/.test(p);
  
  					function y(t) {
  						var n, i, u, y = m,
  							w = _;
  						if ("c" === p) w = b(t) + w, t = "";
  						else {
  							var x = (t = +t) < 0;
  							if (t = b(Math.abs(t), d), g && (t = Wn(t)), x && 0 == +t && (x = !1), y = (x ? "(" === c ? c : "-" : "-" === c || "(" === c ? "" : c) + y, w = ("s" === p ? zn[8 + In / 3] : "") + w + (x && "(" === c ? ")" : ""), v)
  								for (n = -1, i = t.length; ++n < i;)
  									if (48 > (u = t.charCodeAt(n)) || u > 57) {
  										w = (46 === u ? r + t.slice(n + 1) : t.slice(n)) + w, t = t.slice(0, n);
  										break
  									}
  						}
  						h && !l && (t = e(t, 1 / 0));
  						var A = y.length + t.length + w.length,
  							C = A < f ? new Array(f - A + 1).join(a) : "";
  						switch (h && l && (t = e(C + t, C.length ? f - w.length : 1 / 0), C = ""), s) {
  							case "<":
  								t = y + t + w + C;
  								break;
  							case "=":
  								t = y + C + t + w;
  								break;
  							case "^":
  								t = C.slice(0, A = C.length >> 1) + y + t + w + C.slice(A);
  								break;
  							default:
  								t = C + y + t + w
  						}
  						return o(t)
  					}
  					return d = null == d ? 6 : /[gprs]/.test(p) ? Math.max(1, Math.min(21, d)) : Math.max(0, Math.min(20, d)), y.toString = function () {
  						return t + ""
  					}, y
  				}
  				return {
  					format: a,
  					formatPrefix: function (t, e) {
  						var n = a(((t = Fn(t)).type = "f", t)),
  							r = 3 * Math.max(-8, Math.min(8, Math.floor(On(e) / 3))),
  							o = Math.pow(10, -r),
  							i = zn[8 + r / 3];
  						return function (t) {
  							return n(o * t) + i
  						}
  					}
  				}
  			};
  		! function (t) {
  			Un = Xn(t), jn = Un.format, Hn = Un.formatPrefix
  		}({
  			decimal: ".",
  			thousands: ",",
  			grouping: [3],
  			currency: ["$", ""]
  		});
  		var $n = function (t, e, n) {
  			var r, o = t[0],
  				i = t[t.length - 1],
  				a = dn(o, i, null == e ? 10 : e);
  			switch ((n = Fn(null == n ? ",f" : n)).type) {
  				case "s":
  					var s = Math.max(Math.abs(o), Math.abs(i));
  					return null != n.precision || isNaN(r = function (t, e) {
  						return Math.max(0, 3 * Math.max(-8, Math.min(8, Math.floor(On(e) / 3))) - On(Math.abs(t)))
  					}(a, s)) || (n.precision = r), Hn(n, s);
  				case "":
  				case "e":
  				case "g":
  				case "p":
  				case "r":
  					null != n.precision || isNaN(r = function (t, e) {
  						return t = Math.abs(t), e = Math.abs(e) - t, Math.max(0, On(e) - On(t)) + 1
  					}(a, Math.max(Math.abs(o), Math.abs(i)))) || (n.precision = r - ("e" === n.type));
  					break;
  				case "f":
  				case "%":
  					null != n.precision || isNaN(r = function (t) {
  						return Math.max(0, -On(Math.abs(t)))
  					}(a)) || (n.precision = r - 2 * ("%" === n.type))
  			}
  			return jn(n)
  		};
  
  		function Kn(t) {
  			var e = t.domain;
  			return t.ticks = function (t) {
  				var n = e();
  				return fn(n[0], n[n.length - 1], null == t ? 10 : t)
  			}, t.tickFormat = function (t, n) {
  				return $n(e(), t, n)
  			}, t.nice = function (n) {
  				null == n && (n = 10);
  				var r, o = e(),
  					i = 0,
  					a = o.length - 1,
  					s = o[i],
  					c = o[a];
  				return c < s && (r = s, s = c, c = r, r = i, i = a, a = r), (r = hn(s, c, n)) > 0 ? r = hn(s = Math.floor(s / r) * r, c = Math.ceil(c / r) * r, n) : r < 0 && (r = hn(s = Math.ceil(s * r) / r, c = Math.floor(c * r) / r, n)), r > 0 ? (o[i] = Math.floor(s / r) * r, o[a] = Math.ceil(c / r) * r, e(o)) : r < 0 && (o[i] = Math.ceil(s * r) / r, o[a] = Math.floor(c * r) / r, e(o)), t
  			}, t
  		}
  
  		function Vn() {
  			var t = Bn(Tn, yt);
  			return t.copy = function () {
  				return Ln(t, Vn())
  			}, Kn(t)
  		}
  		var Gn = new Date,
  			Qn = new Date;
  
  		function Zn(t, e, n, r) {
  			function o(e) {
  				return t(e = new Date(+e)), e
  			}
  			return o.floor = o, o.ceil = function (n) {
  				return t(n = new Date(n - 1)), e(n, 1), t(n), n
  			}, o.round = function (t) {
  				var e = o(t),
  					n = o.ceil(t);
  				return t - e < n - t ? e : n
  			}, o.offset = function (t, n) {
  				return e(t = new Date(+t), null == n ? 1 : Math.floor(n)), t
  			}, o.range = function (n, r, i) {
  				var a, s = [];
  				if (n = o.ceil(n), i = null == i ? 1 : Math.floor(i), !(n < r && i > 0)) return s;
  				do {
  					s.push(a = new Date(+n)), e(n, i), t(n)
  				} while (a < n && n < r);
  				return s
  			}, o.filter = function (n) {
  				return Zn(function (e) {
  					if (e >= e)
  						for (; t(e), !n(e);) e.setTime(e - 1)
  				}, function (t, r) {
  					if (t >= t)
  						if (r < 0)
  							for (; ++r <= 0;)
  								for (; e(t, -1), !n(t););
  						else
  							for (; --r >= 0;)
  								for (; e(t, 1), !n(t););
  				})
  			}, n && (o.count = function (e, r) {
  				return Gn.setTime(+e), Qn.setTime(+r), t(Gn), t(Qn), Math.floor(n(Gn, Qn))
  			}, o.every = function (t) {
  				return t = Math.floor(t), isFinite(t) && t > 0 ? t > 1 ? o.filter(r ? function (e) {
  					return r(e) % t == 0
  				} : function (e) {
  					return o.count(0, e) % t == 0
  				}) : o : null
  			}), o
  		}
  		var Jn = Zn(function () { }, function (t, e) {
  			t.setTime(+t + e)
  		}, function (t, e) {
  			return e - t
  		});
  		Jn.every = function (t) {
  			return t = Math.floor(t), isFinite(t) && t > 0 ? t > 1 ? Zn(function (e) {
  				e.setTime(Math.floor(e / t) * t)
  			}, function (e, n) {
  				e.setTime(+e + n * t)
  			}, function (e, n) {
  				return (n - e) / t
  			}) : Jn : null
  		};
  		Jn.range;
  		var tr = 6e4,
  			er = 6048e5,
  			nr = Zn(function (t) {
  				t.setTime(1e3 * Math.floor(t / 1e3))
  			}, function (t, e) {
  				t.setTime(+t + 1e3 * e)
  			}, function (t, e) {
  				return (e - t) / 1e3
  			}, function (t) {
  				return t.getUTCSeconds()
  			}),
  			rr = (nr.range, Zn(function (t) {
  				t.setTime(Math.floor(t / tr) * tr)
  			}, function (t, e) {
  				t.setTime(+t + e * tr)
  			}, function (t, e) {
  				return (e - t) / tr
  			}, function (t) {
  				return t.getMinutes()
  			})),
  			or = (rr.range, Zn(function (t) {
  				var e = t.getTimezoneOffset() * tr % 36e5;
  				e < 0 && (e += 36e5), t.setTime(36e5 * Math.floor((+t - e) / 36e5) + e)
  			}, function (t, e) {
  				t.setTime(+t + 36e5 * e)
  			}, function (t, e) {
  				return (e - t) / 36e5
  			}, function (t) {
  				return t.getHours()
  			})),
  			ir = (or.range, Zn(function (t) {
  				t.setHours(0, 0, 0, 0)
  			}, function (t, e) {
  				t.setDate(t.getDate() + e)
  			}, function (t, e) {
  				return (e - t - (e.getTimezoneOffset() - t.getTimezoneOffset()) * tr) / 864e5
  			}, function (t) {
  				return t.getDate() - 1
  			})),
  			ar = ir;
  		ir.range;
  
  		function sr(t) {
  			return Zn(function (e) {
  				e.setDate(e.getDate() - (e.getDay() + 7 - t) % 7), e.setHours(0, 0, 0, 0)
  			}, function (t, e) {
  				t.setDate(t.getDate() + 7 * e)
  			}, function (t, e) {
  				return (e - t - (e.getTimezoneOffset() - t.getTimezoneOffset()) * tr) / er
  			})
  		}
  		var cr = sr(0),
  			ur = sr(1),
  			lr = sr(2),
  			fr = sr(3),
  			hr = sr(4),
  			dr = sr(5),
  			gr = sr(6),
  			pr = (cr.range, ur.range, lr.range, fr.range, hr.range, dr.range, gr.range, Zn(function (t) {
  				t.setDate(1), t.setHours(0, 0, 0, 0)
  			}, function (t, e) {
  				t.setMonth(t.getMonth() + e)
  			}, function (t, e) {
  				return e.getMonth() - t.getMonth() + 12 * (e.getFullYear() - t.getFullYear())
  			}, function (t) {
  				return t.getMonth()
  			})),
  			mr = (pr.range, Zn(function (t) {
  				t.setMonth(0, 1), t.setHours(0, 0, 0, 0)
  			}, function (t, e) {
  				t.setFullYear(t.getFullYear() + e)
  			}, function (t, e) {
  				return e.getFullYear() - t.getFullYear()
  			}, function (t) {
  				return t.getFullYear()
  			}));
  		mr.every = function (t) {
  			return isFinite(t = Math.floor(t)) && t > 0 ? Zn(function (e) {
  				e.setFullYear(Math.floor(e.getFullYear() / t) * t), e.setMonth(0, 1), e.setHours(0, 0, 0, 0)
  			}, function (e, n) {
  				e.setFullYear(e.getFullYear() + n * t)
  			}) : null
  		};
  		var _r = mr,
  			br = (mr.range, Zn(function (t) {
  				t.setUTCSeconds(0, 0)
  			}, function (t, e) {
  				t.setTime(+t + e * tr)
  			}, function (t, e) {
  				return (e - t) / tr
  			}, function (t) {
  				return t.getUTCMinutes()
  			})),
  			vr = (br.range, Zn(function (t) {
  				t.setUTCMinutes(0, 0, 0)
  			}, function (t, e) {
  				t.setTime(+t + 36e5 * e)
  			}, function (t, e) {
  				return (e - t) / 36e5
  			}, function (t) {
  				return t.getUTCHours()
  			})),
  			yr = (vr.range, Zn(function (t) {
  				t.setUTCHours(0, 0, 0, 0)
  			}, function (t, e) {
  				t.setUTCDate(t.getUTCDate() + e)
  			}, function (t, e) {
  				return (e - t) / 864e5
  			}, function (t) {
  				return t.getUTCDate() - 1
  			})),
  			wr = yr;
  		yr.range;
  
  		function xr(t) {
  			return Zn(function (e) {
  				e.setUTCDate(e.getUTCDate() - (e.getUTCDay() + 7 - t) % 7), e.setUTCHours(0, 0, 0, 0)
  			}, function (t, e) {
  				t.setUTCDate(t.getUTCDate() + 7 * e)
  			}, function (t, e) {
  				return (e - t) / er
  			})
  		}
  		var Ar = xr(0),
  			Cr = xr(1),
  			Mr = xr(2),
  			kr = xr(3),
  			Tr = xr(4),
  			Sr = xr(5),
  			Dr = xr(6),
  			Lr = (Ar.range, Cr.range, Mr.range, kr.range, Tr.range, Sr.range, Dr.range, Zn(function (t) {
  				t.setUTCDate(1), t.setUTCHours(0, 0, 0, 0)
  			}, function (t, e) {
  				t.setUTCMonth(t.getUTCMonth() + e)
  			}, function (t, e) {
  				return e.getUTCMonth() - t.getUTCMonth() + 12 * (e.getUTCFullYear() - t.getUTCFullYear())
  			}, function (t) {
  				return t.getUTCMonth()
  			})),
  			Br = (Lr.range, Zn(function (t) {
  				t.setUTCMonth(0, 1), t.setUTCHours(0, 0, 0, 0)
  			}, function (t, e) {
  				t.setUTCFullYear(t.getUTCFullYear() + e)
  			}, function (t, e) {
  				return e.getUTCFullYear() - t.getUTCFullYear()
  			}, function (t) {
  				return t.getUTCFullYear()
  			}));
  		Br.every = function (t) {
  			return isFinite(t = Math.floor(t)) && t > 0 ? Zn(function (e) {
  				e.setUTCFullYear(Math.floor(e.getUTCFullYear() / t) * t), e.setUTCMonth(0, 1), e.setUTCHours(0, 0, 0, 0)
  			}, function (e, n) {
  				e.setUTCFullYear(e.getUTCFullYear() + n * t)
  			}) : null
  		};
  		var Er = Br;
  		Br.range;
  
  		function Or(t) {
  			if (0 <= t.y && t.y < 100) {
  				var e = new Date(-1, t.m, t.d, t.H, t.M, t.S, t.L);
  				return e.setFullYear(t.y), e
  			}
  			return new Date(t.y, t.m, t.d, t.H, t.M, t.S, t.L)
  		}
  
  		function Pr(t) {
  			if (0 <= t.y && t.y < 100) {
  				var e = new Date(Date.UTC(-1, t.m, t.d, t.H, t.M, t.S, t.L));
  				return e.setUTCFullYear(t.y), e
  			}
  			return new Date(Date.UTC(t.y, t.m, t.d, t.H, t.M, t.S, t.L))
  		}
  
  		function Fr(t) {
  			return {
  				y: t,
  				m: 0,
  				d: 1,
  				H: 0,
  				M: 0,
  				S: 0,
  				L: 0
  			}
  		}
  		var Nr, Ir, Ur, jr = {
  			"-": "",
  			_: " ",
  			0: "0"
  		},
  			Hr = /^\s*\d+/,
  			Wr = /^%/,
  			Rr = /[\\^$*+?|[\]().{}]/g;
  
  		function Yr(t, e, n) {
  			var r = t < 0 ? "-" : "",
  				o = (r ? -t : t) + "",
  				i = o.length;
  			return r + (i < n ? new Array(n - i + 1).join(e) + o : o)
  		}
  
  		function qr(t) {
  			return t.replace(Rr, "\\$&")
  		}
  
  		function zr(t) {
  			return new RegExp("^(?:" + t.map(qr).join("|") + ")", "i")
  		}
  
  		function Xr(t) {
  			for (var e = {}, n = -1, r = t.length; ++n < r;) e[t[n].toLowerCase()] = n;
  			return e
  		}
  
  		function $r(t, e, n) {
  			var r = Hr.exec(e.slice(n, n + 1));
  			return r ? (t.w = +r[0], n + r[0].length) : -1
  		}
  
  		function Kr(t, e, n) {
  			var r = Hr.exec(e.slice(n, n + 1));
  			return r ? (t.u = +r[0], n + r[0].length) : -1
  		}
  
  		function Vr(t, e, n) {
  			var r = Hr.exec(e.slice(n, n + 2));
  			return r ? (t.U = +r[0], n + r[0].length) : -1
  		}
  
  		function Gr(t, e, n) {
  			var r = Hr.exec(e.slice(n, n + 2));
  			return r ? (t.V = +r[0], n + r[0].length) : -1
  		}
  
  		function Qr(t, e, n) {
  			var r = Hr.exec(e.slice(n, n + 2));
  			return r ? (t.W = +r[0], n + r[0].length) : -1
  		}
  
  		function Zr(t, e, n) {
  			var r = Hr.exec(e.slice(n, n + 4));
  			return r ? (t.y = +r[0], n + r[0].length) : -1
  		}
  
  		function Jr(t, e, n) {
  			var r = Hr.exec(e.slice(n, n + 2));
  			return r ? (t.y = +r[0] + (+r[0] > 68 ? 1900 : 2e3), n + r[0].length) : -1
  		}
  
  		function to(t, e, n) {
  			var r = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n, n + 6));
  			return r ? (t.Z = r[1] ? 0 : -(r[2] + (r[3] || "00")), n + r[0].length) : -1
  		}
  
  		function eo(t, e, n) {
  			var r = Hr.exec(e.slice(n, n + 2));
  			return r ? (t.m = r[0] - 1, n + r[0].length) : -1
  		}
  
  		function no(t, e, n) {
  			var r = Hr.exec(e.slice(n, n + 2));
  			return r ? (t.d = +r[0], n + r[0].length) : -1
  		}
  
  		function ro(t, e, n) {
  			var r = Hr.exec(e.slice(n, n + 3));
  			return r ? (t.m = 0, t.d = +r[0], n + r[0].length) : -1
  		}
  
  		function oo(t, e, n) {
  			var r = Hr.exec(e.slice(n, n + 2));
  			return r ? (t.H = +r[0], n + r[0].length) : -1
  		}
  
  		function io(t, e, n) {
  			var r = Hr.exec(e.slice(n, n + 2));
  			return r ? (t.M = +r[0], n + r[0].length) : -1
  		}
  
  		function ao(t, e, n) {
  			var r = Hr.exec(e.slice(n, n + 2));
  			return r ? (t.S = +r[0], n + r[0].length) : -1
  		}
  
  		function so(t, e, n) {
  			var r = Hr.exec(e.slice(n, n + 3));
  			return r ? (t.L = +r[0], n + r[0].length) : -1
  		}
  
  		function co(t, e, n) {
  			var r = Hr.exec(e.slice(n, n + 6));
  			return r ? (t.L = Math.floor(r[0] / 1e3), n + r[0].length) : -1
  		}
  
  		function uo(t, e, n) {
  			var r = Wr.exec(e.slice(n, n + 1));
  			return r ? n + r[0].length : -1
  		}
  
  		function lo(t, e, n) {
  			var r = Hr.exec(e.slice(n));
  			return r ? (t.Q = +r[0], n + r[0].length) : -1
  		}
  
  		function fo(t, e, n) {
  			var r = Hr.exec(e.slice(n));
  			return r ? (t.Q = 1e3 * +r[0], n + r[0].length) : -1
  		}
  
  		function ho(t, e) {
  			return Yr(t.getDate(), e, 2)
  		}
  
  		function go(t, e) {
  			return Yr(t.getHours(), e, 2)
  		}
  
  		function po(t, e) {
  			return Yr(t.getHours() % 12 || 12, e, 2)
  		}
  
  		function mo(t, e) {
  			return Yr(1 + ar.count(_r(t), t), e, 3)
  		}
  
  		function _o(t, e) {
  			return Yr(t.getMilliseconds(), e, 3)
  		}
  
  		function bo(t, e) {
  			return _o(t, e) + "000"
  		}
  
  		function vo(t, e) {
  			return Yr(t.getMonth() + 1, e, 2)
  		}
  
  		function yo(t, e) {
  			return Yr(t.getMinutes(), e, 2)
  		}
  
  		function wo(t, e) {
  			return Yr(t.getSeconds(), e, 2)
  		}
  
  		function xo(t) {
  			var e = t.getDay();
  			return 0 === e ? 7 : e
  		}
  
  		function Ao(t, e) {
  			return Yr(cr.count(_r(t), t), e, 2)
  		}
  
  		function Co(t, e) {
  			var n = t.getDay();
  			return t = n >= 4 || 0 === n ? hr(t) : hr.ceil(t), Yr(hr.count(_r(t), t) + (4 === _r(t).getDay()), e, 2)
  		}
  
  		function Mo(t) {
  			return t.getDay()
  		}
  
  		function ko(t, e) {
  			return Yr(ur.count(_r(t), t), e, 2)
  		}
  
  		function To(t, e) {
  			return Yr(t.getFullYear() % 100, e, 2)
  		}
  
  		function So(t, e) {
  			return Yr(t.getFullYear() % 1e4, e, 4)
  		}
  
  		function Do(t) {
  			var e = t.getTimezoneOffset();
  			return (e > 0 ? "-" : (e *= -1, "+")) + Yr(e / 60 | 0, "0", 2) + Yr(e % 60, "0", 2)
  		}
  
  		function Lo(t, e) {
  			return Yr(t.getUTCDate(), e, 2)
  		}
  
  		function Bo(t, e) {
  			return Yr(t.getUTCHours(), e, 2)
  		}
  
  		function Eo(t, e) {
  			return Yr(t.getUTCHours() % 12 || 12, e, 2)
  		}
  
  		function Oo(t, e) {
  			return Yr(1 + wr.count(Er(t), t), e, 3)
  		}
  
  		function Po(t, e) {
  			return Yr(t.getUTCMilliseconds(), e, 3)
  		}
  
  		function Fo(t, e) {
  			return Po(t, e) + "000"
  		}
  
  		function No(t, e) {
  			return Yr(t.getUTCMonth() + 1, e, 2)
  		}
  
  		function Io(t, e) {
  			return Yr(t.getUTCMinutes(), e, 2)
  		}
  
  		function Uo(t, e) {
  			return Yr(t.getUTCSeconds(), e, 2)
  		}
  
  		function jo(t) {
  			var e = t.getUTCDay();
  			return 0 === e ? 7 : e
  		}
  
  		function Ho(t, e) {
  			return Yr(Ar.count(Er(t), t), e, 2)
  		}
  
  		function Wo(t, e) {
  			var n = t.getUTCDay();
  			return t = n >= 4 || 0 === n ? Tr(t) : Tr.ceil(t), Yr(Tr.count(Er(t), t) + (4 === Er(t).getUTCDay()), e, 2)
  		}
  
  		function Ro(t) {
  			return t.getUTCDay()
  		}
  
  		function Yo(t, e) {
  			return Yr(Cr.count(Er(t), t), e, 2)
  		}
  
  		function qo(t, e) {
  			return Yr(t.getUTCFullYear() % 100, e, 2)
  		}
  
  		function zo(t, e) {
  			return Yr(t.getUTCFullYear() % 1e4, e, 4)
  		}
  
  		function Xo() {
  			return "+0000"
  		}
  
  		function $o() {
  			return "%"
  		}
  
  		function Ko(t) {
  			return +t
  		}
  
  		function Vo(t) {
  			return Math.floor(+t / 1e3)
  		} ! function (t) {
  			Nr = function (t) {
  				var e = t.dateTime,
  					n = t.date,
  					r = t.time,
  					o = t.periods,
  					i = t.days,
  					a = t.shortDays,
  					s = t.months,
  					c = t.shortMonths,
  					u = zr(o),
  					l = Xr(o),
  					f = zr(i),
  					h = Xr(i),
  					d = zr(a),
  					g = Xr(a),
  					p = zr(s),
  					m = Xr(s),
  					_ = zr(c),
  					b = Xr(c),
  					v = {
  						a: function (t) {
  							return a[t.getDay()]
  						},
  						A: function (t) {
  							return i[t.getDay()]
  						},
  						b: function (t) {
  							return c[t.getMonth()]
  						},
  						B: function (t) {
  							return s[t.getMonth()]
  						},
  						c: null,
  						d: ho,
  						e: ho,
  						f: bo,
  						H: go,
  						I: po,
  						j: mo,
  						L: _o,
  						m: vo,
  						M: yo,
  						p: function (t) {
  							return o[+(t.getHours() >= 12)]
  						},
  						Q: Ko,
  						s: Vo,
  						S: wo,
  						u: xo,
  						U: Ao,
  						V: Co,
  						w: Mo,
  						W: ko,
  						x: null,
  						X: null,
  						y: To,
  						Y: So,
  						Z: Do,
  						"%": $o
  					},
  					y = {
  						a: function (t) {
  							return a[t.getUTCDay()]
  						},
  						A: function (t) {
  							return i[t.getUTCDay()]
  						},
  						b: function (t) {
  							return c[t.getUTCMonth()]
  						},
  						B: function (t) {
  							return s[t.getUTCMonth()]
  						},
  						c: null,
  						d: Lo,
  						e: Lo,
  						f: Fo,
  						H: Bo,
  						I: Eo,
  						j: Oo,
  						L: Po,
  						m: No,
  						M: Io,
  						p: function (t) {
  							return o[+(t.getUTCHours() >= 12)]
  						},
  						Q: Ko,
  						s: Vo,
  						S: Uo,
  						u: jo,
  						U: Ho,
  						V: Wo,
  						w: Ro,
  						W: Yo,
  						x: null,
  						X: null,
  						y: qo,
  						Y: zo,
  						Z: Xo,
  						"%": $o
  					},
  					w = {
  						a: function (t, e, n) {
  							var r = d.exec(e.slice(n));
  							return r ? (t.w = g[r[0].toLowerCase()], n + r[0].length) : -1
  						},
  						A: function (t, e, n) {
  							var r = f.exec(e.slice(n));
  							return r ? (t.w = h[r[0].toLowerCase()], n + r[0].length) : -1
  						},
  						b: function (t, e, n) {
  							var r = _.exec(e.slice(n));
  							return r ? (t.m = b[r[0].toLowerCase()], n + r[0].length) : -1
  						},
  						B: function (t, e, n) {
  							var r = p.exec(e.slice(n));
  							return r ? (t.m = m[r[0].toLowerCase()], n + r[0].length) : -1
  						},
  						c: function (t, n, r) {
  							return C(t, e, n, r)
  						},
  						d: no,
  						e: no,
  						f: co,
  						H: oo,
  						I: oo,
  						j: ro,
  						L: so,
  						m: eo,
  						M: io,
  						p: function (t, e, n) {
  							var r = u.exec(e.slice(n));
  							return r ? (t.p = l[r[0].toLowerCase()], n + r[0].length) : -1
  						},
  						Q: lo,
  						s: fo,
  						S: ao,
  						u: Kr,
  						U: Vr,
  						V: Gr,
  						w: $r,
  						W: Qr,
  						x: function (t, e, r) {
  							return C(t, n, e, r)
  						},
  						X: function (t, e, n) {
  							return C(t, r, e, n)
  						},
  						y: Jr,
  						Y: Zr,
  						Z: to,
  						"%": uo
  					};
  
  				function x(t, e) {
  					return function (n) {
  						var r, o, i, a = [],
  							s = -1,
  							c = 0,
  							u = t.length;
  						for (n instanceof Date || (n = new Date(+n)); ++s < u;) 37 === t.charCodeAt(s) && (a.push(t.slice(c, s)), null != (o = jr[r = t.charAt(++s)]) ? r = t.charAt(++s) : o = "e" === r ? " " : "0", (i = e[r]) && (r = i(n, o)), a.push(r), c = s + 1);
  						return a.push(t.slice(c, s)), a.join("")
  					}
  				}
  
  				function A(t, e) {
  					return function (n) {
  						var r, o, i = Fr(1900);
  						if (C(i, t, n += "", 0) != n.length) return null;
  						if ("Q" in i) return new Date(i.Q);
  						if ("p" in i && (i.H = i.H % 12 + 12 * i.p), "V" in i) {
  							if (i.V < 1 || i.V > 53) return null;
  							"w" in i || (i.w = 1), "Z" in i ? (r = (o = (r = Pr(Fr(i.y))).getUTCDay()) > 4 || 0 === o ? Cr.ceil(r) : Cr(r), r = wr.offset(r, 7 * (i.V - 1)), i.y = r.getUTCFullYear(), i.m = r.getUTCMonth(), i.d = r.getUTCDate() + (i.w + 6) % 7) : (r = (o = (r = e(Fr(i.y))).getDay()) > 4 || 0 === o ? ur.ceil(r) : ur(r), r = ar.offset(r, 7 * (i.V - 1)), i.y = r.getFullYear(), i.m = r.getMonth(), i.d = r.getDate() + (i.w + 6) % 7)
  						} else ("W" in i || "U" in i) && ("w" in i || (i.w = "u" in i ? i.u % 7 : "W" in i ? 1 : 0), o = "Z" in i ? Pr(Fr(i.y)).getUTCDay() : e(Fr(i.y)).getDay(), i.m = 0, i.d = "W" in i ? (i.w + 6) % 7 + 7 * i.W - (o + 5) % 7 : i.w + 7 * i.U - (o + 6) % 7);
  						return "Z" in i ? (i.H += i.Z / 100 | 0, i.M += i.Z % 100, Pr(i)) : e(i)
  					}
  				}
  
  				function C(t, e, n, r) {
  					for (var o, i, a = 0, s = e.length, c = n.length; a < s;) {
  						if (r >= c) return -1;
  						if (37 === (o = e.charCodeAt(a++))) {
  							if (o = e.charAt(a++), !(i = w[o in jr ? e.charAt(a++) : o]) || (r = i(t, n, r)) < 0) return -1
  						} else if (o != n.charCodeAt(r++)) return -1
  					}
  					return r
  				}
  				return v.x = x(n, v), v.X = x(r, v), v.c = x(e, v), y.x = x(n, y), y.X = x(r, y), y.c = x(e, y), {
  					format: function (t) {
  						var e = x(t += "", v);
  						return e.toString = function () {
  							return t
  						}, e
  					},
  					parse: function (t) {
  						var e = A(t += "", Or);
  						return e.toString = function () {
  							return t
  						}, e
  					},
  					utcFormat: function (t) {
  						var e = x(t += "", y);
  						return e.toString = function () {
  							return t
  						}, e
  					},
  					utcParse: function (t) {
  						var e = A(t, Pr);
  						return e.toString = function () {
  							return t
  						}, e
  					}
  				}
  			}(t), Nr.format, Nr.parse, Ir = Nr.utcFormat, Ur = Nr.utcParse
  		}({
  			dateTime: "%x, %X",
  			date: "%-m/%-d/%Y",
  			time: "%-I:%M:%S %p",
  			periods: ["AM", "PM"],
  			days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
  			shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
  			months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
  			shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
  		});
  		Date.prototype.toISOString || Ir("%Y-%m-%dT%H:%M:%S.%LZ"); + new Date("2000-01-01T00:00:00.000Z") || Ur("%Y-%m-%dT%H:%M:%S.%LZ");
  		var Go = function (t) {
  			return t.match(/.{6}/g).map(function (t) {
  				return "#" + t
  			})
  		};
  		Go("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"), Go("393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6"), Go("3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9"), Go("1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5"), jt(lt(300, .5, 0), lt(-240, .5, 1)), jt(lt(-100, .75, .35), lt(80, 1.5, .8)), jt(lt(260, .75, .35), lt(80, 1.5, .8)), lt();
  
  		function Qo(t) {
  			var e = t.length;
  			return function (n) {
  				return t[Math.max(0, Math.min(e - 1, Math.floor(n * e)))]
  			}
  		}
  		Qo(Go("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")), Qo(Go("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")), Qo(Go("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")), Qo(Go("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));
  		var Zo = "1.3.0",
  			Jo = n(5);
  		class ti {
  			constructor(t, e) {
  				this.rawAnnots = this.parseBed(t, e)
  			}
  			static componentToHex(t) {
  				var e = parseInt(t, 10).toString(16);
  				return 1 === e.length ? "0" + e : e
  			}
  			static rgbToHex(t, e, n) {
  				return "#" + ti.componentToHex(t) + ti.componentToHex(e) + ti.componentToHex(n)
  			}
  			parseBed(t, e) {
  				var n, r, o, i, a, s, c, u, l, f, h, d, g, p, m, _;
  				for (l = [], i = Object.keys(e.chromosomes[e.config.taxid]), r = 0; r < i.length; r++) a = i[r], l.push({
  					chr: a,
  					annots: []
  				});
  				for (h = 0, d = !0, ("chr" === (n = t.split(/\r\n|\n/))[0].slice(0, 3) || isNaN(parseInt(n[0], 10))) && (h = 1), !1 === isNaN(parseInt(n[h], 10)) && (d = !1), r = h; r < n.length; r++) a = (o = n[r].split(/\s/g))[0], s = parseInt(o[1], 10), c = parseInt(o[2], 10), length = c - s, d && (a = a.slice(3)), -1 !== (u = i.indexOf(a)) && (f = ["", s, length, 0], o.length >= 4 && (m = o[3], f[0] = m), o.length >= 8 && (g = o[8].split(","), p = ti.rgbToHex(g[0], g[1], g[2]), f.push(p)), l[u].annots.push(f));
  				return _ = ["name", "start", "length", "trackIndex"], n[h].length >= 8 && _.push("color"), {
  					keys: _,
  					annots: l
  				}
  			}
  		}
  		var ei = n(1),
  			ni = Object.assign({}, o);
  
  		function ri(t) {
  			var e, n, r, o, i, a, s, c, u, l, f, h = this._layout.margin.top,
  				d = this.config.chrHeight + h,
  				g = this.config.numAnnotTracks;
  			for (ni.selectAll(this.config.container + " canvas").remove(), l = 0; l < t.length; l++) {
  				for (e = t[l].annots, n = this.chromosomesArray[l], a = this.config.chrWidth, r = this._layout.getChromosomeSetYTranslate(l), i = [], f = 0; f < g; f++) o = r + f * a - (a - 1) * g, s = ni.select(this.config.container + " #_ideogramOuterWrap").append("canvas").attr("id", n.id + "-canvas-" + f).attr("width", a - 1).attr("height", d).style("position", "absolute").style("left", o + "px").nodes()[0].getContext("2d"), i.push(s);
  				for (f = 0; f < e.length; f++)(s = i[(c = e[f]).trackIndex]).fillStyle = c.color, u = c.trackIndex - 1, s.fillRect(u, c.startPx + h, a, .5)
  			}
  			this.onDrawAnnotsCallback && this.onDrawAnnotsCallback()
  		}
  
  		function oi(t) {
  			var e, n, r, o, i, a, s, c, u, l, f, h, d, g, p, m, _, b, v, y, w, x, A, C = (new Date).getTime(),
  				M = t.keys,
  				k = t.annots;
  			for (l = [], p = [], o = 0; o < this.config.heatmaps.length; o++) g = this.config.heatmaps[o].key, p.push(M.indexOf(g));
  			for (o = 0; o < k.length; o++) {
  				for (n = (e = k[o]).chr, u = e.annots, h = [], i = 0; i < u.length; i++)
  					for (r = u[i], a = 0; a < p.length; a++) {
  						for (f = r.slice(0, 3), m = r[p[a]], _ = this.config.heatmaps[a].thresholds, s = 0; s < _.length; s++) A = _.length - 1, y = (b = _[s])[0], x = parseInt(y), !1 === isNaN(x) && (y = x), 0 !== s && (w = parseInt(_[s - 1][0])), v = b[1], (s === A && "+" === y && m > w || m === y || 0 !== s && s !== A && m <= y && m > w || 0 === s && m <= y) && (d = v);
  						c = a, f.push(c, d, m), h.push(f)
  					}
  				l.push({
  					chr: n,
  					annots: h
  				})
  			}
  			M.splice(3, 0, "trackIndex"), M.splice(4, 0, "color"), this.rawAnnots.keys = M, this.rawAnnots.annots = l;
  			var T = (new Date).getTime();
  			ideogram.config.debug && console.log("Time in deserializeAnnotsForHeatmap: " + (T - C) + " ms")
  		}
  		var ii = Object.assign({}, o);
  
  		function ai() {
  			call(this.onLoadAnnotsCallback)
  		}
  
  		function si() {
  			call(this.onDrawAnnotsCallback)
  		}
  
  		function ci() {
  			!1 !== this.config.showAnnotTooltip && (this.hideAnnotTooltipTimeout = window.setTimeout(function () {
  				ii.select(".tooltip").transition().duration(500).style("opacity", 0).style("pointer-events", "none")
  			}, 250))
  		}
  
  		function ui(t) {
  			call(this.onWillShowAnnotTooltipCallback, t)
  		}
  
  		function li(t, e) {
  			var n, r, o, i, a, s = this;
  			!1 !== s.config.showAnnotTooltip && (clearTimeout(s.hideAnnotTooltipTimeout), s.onWillShowAnnotTooltipCallback && (t = s.onWillShowAnnotTooltipCallback(t)), (a = ii.select(".tooltip")).interrupt(), n = e.getScreenCTM().translate(+e.getAttribute("cx"), +e.getAttribute("cy")), r = "chr" + t.chr + ":" + t.start.toLocaleString(), t.length > 0 && (r += "-" + t.stop.toLocaleString()), o = r, i = 24, t.name && (o = (t.displayName ? t.displayName : t.name) + "<br/>" + o, i += 8), a.html(o).style("opacity", 1).style("left", window.pageXOffset + n.e + "px").style("top", window.pageYOffset + n.f - i + "px").style("pointer-events", null).on("mouseover", function () {
  				clearTimeout(s.hideAnnotTooltipTimeout)
  			}).on("mouseout", function () {
  				s.startHideAnnotTooltipTimeout()
  			}))
  		}
  		var fi = Object.assign({}, o);
  
  		function hi(t) {
  			var e, n, r, o, i, a, s = [],
  				c = this.chromosomes[this.config.taxid];
  			if ("annots" in t[0]) return this.drawProcessedAnnots(t);
  			for (a in c) s.push({
  				chr: a,
  				annots: []
  			});
  			for (e = 0; e < t.length; e++)
  				for (r = t[e], n = 0; n < s.length; n++)
  					if (r.chr === s[n].chr) {
  						o = [r.name, r.start, r.stop - r.start], "color" in r && o.push(r.color), "shape" in r && o.push(r.shape), s[n].annots.push(o);
  						break
  					}
  			i = ["name", "start", "length"], "color" in t[0] && i.push("color"), "shape" in t[0] && i.push("shape"), this.rawAnnots = {
  				keys: i,
  				annots: s
  			}, this.annots = this.processAnnotData(this.rawAnnots), this.drawProcessedAnnots(this.annots)
  		}
  
  		function di(t) {
  			var e, n, r, o, i, a, s, c, u, l, f, h, d, g, p, m, _, b, v = this;
  			for (c in fi.selectAll(v.selector + " .annot").remove(), e = this.config.chrWidth, n = {}, u = v.chromosomes[v.config.taxid]) n[c] = u[c].width;
  			if (r = "tracks", this.config.annotationsLayout && (r = this.config.annotationsLayout), "histogram" === r && (t = v.getHistogramBars(t)), "heatmap" !== r) {
  				if ("heatmap" !== r && "histogram" !== r) {
  					for (d = 0, h = 0; h < t.length; h++) d += t[h].annots.length;
  					d > 2e3 && console.warn('Rendering more than 2000 annotations in Ideogram?\nTry setting "annotationsLayout" to "heatmap" or "histogram" in your Ideogram configuration object for better layout and performance.')
  				}
  				o = v.config.annotationHeight, i = "m0,0 l -" + o + " " + 2 * o + " l " + 2 * o + " 0 z", a = "m -" + (l = o) + ", " + l + "a " + l + "," + l + " 0 1,0 " + 2 * l + ",0a " + l + "," + l + " 0 1,0 -" + 2 * l + ",0", s = "m0,0 l 0 " + 2 * o + "l " + o + " 0l 0 -" + 2 * o + "z", b = v.fillAnnots(t), f = fi.selectAll(v.selector + " .chromosome").data(b).selectAll("path.annot").data(function (t) {
  					return t.annots
  				}).enter(), "tracks" === r ? f.append("g").attr("id", function (t) {
  					return t.id
  				}).attr("class", "annot").attr("transform", function (t) {
  					var e = v.config.chrWidth + t.trackIndex * o * 2;
  					return "translate(" + t.px + "," + e + ")"
  				}).append("path").attr("d", function (t) {
  					return t.shape && "triangle" !== t.shape ? "circle" === t.shape ? a : "rectangle" === t.shape ? s : t.shape : i
  				}).attr("fill", function (t) {
  					return t.color
  				}).on("mouseover", function (t) {
  					v.showAnnotTooltip(t, this)
  				}).on("mouseout", function () {
  					v.startHideAnnotTooltipTimeout()
  				}) : "overlay" === r ? f.append("polygon").attr("id", function (t) {
  					return t.id
  				}).attr("class", "annot").attr("points", function (t) {
  					return t.stopPx - t.startPx > 1 ? (g = t.startPx, p = t.stopPx) : (g = t.px - .5, p = t.px + .5), g + "," + (m = e) + " " + p + "," + m + " " + p + "," + (_ = 0) + " " + g + "," + _
  				}).attr("fill", function (t) {
  					return t.color
  				}).on("mouseover", function (t) {
  					v.showAnnotTooltip(t, this)
  				}).on("mouseout", function () {
  					v.startHideAnnotTooltipTimeout()
  				}) : "histogram" === r && f.append("polygon").attr("class", "annot").attr("points", function (t) {
  					g = t.px + v.bump, p = t.px + v.config.barWidth + v.bump, m = e, _ = e + t.height;
  					var r = n[t.chrName].width;
  					return p > r && (p = r), g + "," + m + " " + p + "," + m + " " + p + "," + _ + " " + g + "," + _
  				}).attr("fill", function (t) {
  					return t.color
  				}), v.onDrawAnnotsCallback && v.onDrawAnnotsCallback()
  			} else v.drawHeatmaps(t)
  		}
  
  		function gi(t) {
  			var e, n, r, o, i, a, s, c, u, l, f, h, d, g, p, m, _, b, v, y, w, x, A, C, M, k, T = (new Date).getTime(),
  				S = !1;
  			for (r in h = [], m = this.config.barWidth, i = this.chromosomes[this.config.taxid], v = this.config.annotationsColor, M = this._layout._isRotated, k = "histogramScaling" in this.config ? this.config.histogramScaling : "absolute", void 0 === this.maxAnnotsPerBar && (this.maxAnnotsPerBar = {}, S = !0), i) {
  				for (l = (o = i[r]).chrIndex, a = o.bands[o.bands.length - 1].px.stop, y = Math.round(a / m), d = {
  					chr: r,
  					annots: []
  				}, e = 0; e < y; e++) s = e * m - this.bump, c = this.convertPxToBp(o, s + this.bump), d.annots.push({
  					bp: c,
  					px: s,
  					count: 0,
  					chrIndex: l,
  					chrName: r,
  					color: v,
  					annots: []
  				});
  				h.push(d)
  			}
  			for (r in t)
  				for (u = t[r].annots, w = h[l = (o = i[t[r].chr]).chrIndex].annots, e = 0; e < u.length; e++)
  					for (s = (f = u[e]).px - this.bump, n = 0; n < w.length; n++)
  						if (p = (g = w[n].px) + m, n === w.length - 1 && (p += m), s >= g && s < p) {
  							h[l].annots[n].count += 1, h[l].annots[n].annots.push(f);
  							break
  						}
  			if (!0 === S || "relative" === k) {
  				for (b = 0, e = 0; e < h.length; e++) {
  					for (_ = 0, t = h[e].annots, r = h[e].chr, n = 0; n < t.length; n++)(x = t[n].count) > _ && (_ = x), x > b && (b = x);
  					this.maxAnnotsPerBar[r] = _
  				}
  				this.maxAnnotsPerBarAllChrs = b
  			}
  			for (e = 0; e < h.length; e++)
  				for (t = h[e].annots, r = h[e].chr, n = 0; n < t.length; n++) x = t[n].count, A = "relative" === k ? x / this.maxAnnotsPerBar[r] : x / this.maxAnnotsPerBarAllChrs, C = !1 === M ? A * this.config.chrMargin : A * this.config.chrHeightOriginal * 3, h[e].annots[n].height = C;
  			var D = (new Date).getTime();
  			return this.config.debug && console.log("Time spent in getHistogramBars: " + (D - T) + " ms"), this.bars = h, h
  		}
  		var pi = Object.assign({}, o);
  
  		function mi(t) {
  			var e, n, r, o, i, a, s, c, u, l, f = (new Date).getTime(),
  				h = this;
  			for (r = pi.select(h.selector).insert("g", ":first-child").attr("class", "synteny"), s = h._layout.margin.left, o = 0; o < t.length; o++) {
  				e = (u = t[o]).r1, n = u.r2, i = "#CFC", "color" in u && (i = u.color), a = 1, "opacity" in u && (a = u.opacity), e.startPx = this.convertBpToPx(e.chr, e.start) + s, e.stopPx = this.convertBpToPx(e.chr, e.stop) + s, n.startPx = this.convertBpToPx(n.chr, n.start) + s, n.stopPx = this.convertBpToPx(n.chr, n.stop) + s, c = e.chr.id + "_" + e.start + "_" + e.stop + "___" + n.chr.id + "_" + n.start + "_" + n.stop, l = r.append("g").attr("class", "syntenicRegion").attr("id", c).on("click", function () {
  					var t = this,
  						e = pi.selectAll(h.selector + " .syntenicRegion").filter(function () {
  							return this !== t
  						});
  					e.classed("hidden", !e.classed("hidden"))
  				}).on("mouseover", function () {
  					var t = this;
  					pi.selectAll(h.selector + " .syntenicRegion").filter(function () {
  						return this !== t
  					}).classed("ghost", !0)
  				}).on("mouseout", function () {
  					pi.selectAll(h.selector + " .syntenicRegion").classed("ghost", !1)
  				});
  				var d = h.config.chrWidth,
  					g = this._layout.getChromosomeSetYTranslate(0),
  					p = this._layout.getChromosomeSetYTranslate(1) - d;
  				l.append("polygon").attr("points", g + ", " + e.startPx + " " + g + ", " + e.stopPx + " " + p + ", " + n.stopPx + " " + p + ", " + n.startPx).attr("style", "fill: " + i + "; fill-opacity: " + a), l.append("line").attr("class", "syntenyBorder").attr("x1", g).attr("x2", p).attr("y1", e.startPx).attr("y2", n.startPx), l.append("line").attr("class", "syntenyBorder").attr("x1", g).attr("x2", p).attr("y1", e.stopPx).attr("y2", n.stopPx)
  			}
  			var m = (new Date).getTime();
  			h.config.debug && console.log("Time in drawSyntenicRegions: " + (m - f) + " ms")
  		}
  		var _i = ei.a.assign({}, o, i);
  
  		function bi(t) {
  			var e, n, r, o, i, a, s, c, u, l;
  			if ((e = t.keys).length < 4 || "trackIndex" !== e[3] || "trackIndexOriginal" === e[4]) return t;
  			for (l = 1, n = t.annots, c = [], i = 0; i < n.length; i++) {
  				for (r = n[i], u = [], a = 0; a < r.annots.length; a++)(s = (o = r.annots[a].slice())[3]) + 1 > l && (l = s + 1), o.splice(4, 0, s), u.push(o);
  				c.push({
  					chr: r.chr,
  					annots: u
  				})
  			}
  			return e.splice(4, 0, "trackIndexOriginal"), t = {
  				keys: e,
  				annots: c
  			}, this.numAvailTracks = l, t
  		}
  
  		function vi(t) {
  			var e, n, r, o, i, a, s, c, u, l, f, h, d, g, p, m, _, b, v, y, w, x, A, C, M, k = this.config;
  			for (A = {}, w = [
  				["F00"],
  				["F00", "88F"],
  				["F00", "CCC", "88F"],
  				["F00", "FA0", "0AF", "88F"],
  				["F00", "FA0", "CCC", "0AF", "88F"],
  				["F00", "FA0", "875", "578", "0AF", "88F"],
  				["F00", "FA0", "875", "CCC", "578", "0AF", "88F"],
  				["F00", "FA0", "7A0", "875", "0A7", "578", "0AF", "88F"],
  				["F00", "FA0", "7A0", "875", "CCC", "0A7", "578", "0AF", "88F"],
  				["F00", "FA0", "7A0", "875", "552", "255", "0A7", "578", "0AF", "88F"]
  			], e = t.keys, t = t.annots, n = k.numAnnotTracks, x = w[(M = this.numAvailTracks) - 1], n > 10 && console.error("Ideogram only displays up to 10 tracks at a time.  You specified " + n + " tracks.  Perhaps consider a different way to visualize your data."), u = [], a = -1, r = 0; r < t.length; r++)
  				if (h = (f = t[r]).chr, void 0 !== (g = this.chromosomes[k.taxid][h]))
  					for (a++ , u.push({
  						chr: f.chr,
  						annots: []
  					}), o = 0; o < f.annots.length; o++) {
  						for (p = f.annots[o], c = {}, i = 0; i < e.length; i++) c[e[i]] = p[i];
  						if (c.stop = c.start + c.length, m = this.convertBpToPx(g, c.start), _ = this.convertBpToPx(g, c.stop), b = Math.round((m + _) / 2), c.chr = h, c.chrIndex = r, c.px = b, c.startPx = m, c.stopPx = _, k.annotationTracks) c.trackIndex = p[3], (v = k.annotationTracks[c.trackIndex]).color && (c.color = v.color), v.shape && (c.shape = v.shape), u[a].annots.push(c);
  						else if ("trackIndex" === e[3] && 1 !== M) {
  							if (c.trackIndex = p[3], c.trackIndexOriginal = p[4], c.color = "#" + x[c.trackIndexOriginal], c.trackIndex > n - 1) {
  								c.trackIndex in A ? A[c.trackIndex].push(c) : A[c.trackIndex] = [c];
  								continue
  							}
  							u[a].annots.push(c)
  						} else if (e.length > 3 && e[3] in {
  							trackIndex: 1,
  							color: 1,
  							shape: 1
  						} == !1 && "trackIndexOriginal" === e[4])
  							for (s = 4; s < e.length; s++)(l = ei.a.assign({}, c)).trackIndex = s - 4, l.trackIndexOriginal = s - 3, l.color = "#" + x[l.trackIndexOriginal], u[a].annots.push(l);
  						else c.trackIndex = 0, c.color || (c.color = k.annotationsColor), c.shape || (c.shape = "triangle"), u[a].annots.push(c)
  					} else console.warn('Chromosome "' + h + '" undefined in ideogram; ' + f.annots.length + " annotations not shown");
  			for ((C = ei.a.keys(A).length) && console.warn("Ideogram configuration specified " + n + " tracks, but loaded annotations contain " + C + " extra tracks."), y = u, u = [], d = this.chromosomesArray, r = 0; r < d.length; r++)
  				for (h = d[r].name, o = 0; o < y.length; o++)(c = y[o]).chr === h && u.push(c);
  			return u
  		}
  
  		function yi() {
  			this.config.numAnnotTracks = this.config.annotationsNumTracks, _i.selectAll(this.selector + " .annot").remove(), this.drawAnnots(this.processAnnotData(this.rawAnnots))
  		}
  
  		function wi(t) {
  			var e, n, r, o, i, a, s, c, u = this.rawAnnots.annots;
  			for (e = [], this.config.numAnnotTracks = t.length, r = 0; r < u.length; r++) {
  				for (a = u[r], n = [], o = 0; o < a.annots.length; o++) {
  					c = (s = a.annots[o].slice())[3] + 1, t.includes(c) && (s[3] = t.indexOf(c), n.push(s));
  				}
  
  				//alert(JSON.stringify(n))
  				e.push({
  					chr: a.chr,
  					annots: n
  				})
  
  			}
  			//alert(JSON.stringify(n))
  			//alert(e)
  			return i = {
  				keys: this.rawAnnots.keys,
  				annots: e
  			}, n = this.processAnnotData(i), _i.selectAll(this.selector + " .annot").remove(), this.drawAnnots(n), ideogram.displayedTrackIndexes = t, n
  
  		}
  
  		function wi2(t, value) {
  			var e, n, r, o, i, a, s, c, u = this.rawAnnots.annots;
  			for (e = [], this.config.numAnnotTracks = t.length, r = 0; r < u.length; r++) {
  				for (a = u[r], n = [], o = 0; o < a.annots.length; o++) {
  					c = (s = a.annots[o].slice())[3] + 1, t.includes(c) && s[5] <= value[s[3]] && (s[3] = t.indexOf(c), n.push(s));
  
  
  				}
  				e.push({
  					chr: a.chr,
  					annots: n
  				})
  
  			}
  			// alert(n)
  			return i = {
  				keys: this.rawAnnots.keys,
  				annots: e
  			}, n = this.processAnnotData(i), _i.selectAll(this.selector + " .annot").remove(), this.drawAnnots(n), ideogram.displayedTrackIndexes = t, n
  
  		}
  
  		function xi() {
  			var t = this.config;
  			if (t.annotationsPath || t.localAnnotationsPath || this.annots || t.annotations) {
  				if (!t.annotationHeight) {
  					var e = Math.round(t.chrHeight / 100);
  					this.config.annotationHeight = e
  				}
  				t.annotationTracks ? this.config.numAnnotTracks = t.annotationTracks.length : t.annotationsNumTracks ? this.config.numAnnotTracks = t.annotationsNumTracks : this.config.numAnnotTracks = 1, this.config.annotTracksHeight = t.annotationHeight * t.numAnnotTracks, void 0 === t.barWidth && (this.config.barWidth = 3)
  			} else this.config.annotTracksHeight = 0;
  			void 0 === t.annotationsColor && (this.config.annotationsColor = "#F00"), !1 !== t.showAnnotTooltip && (this.config.showAnnotTooltip = !0), t.onWillShowAnnotTooltip && (this.onWillShowAnnotTooltipCallback = t.onWillShowAnnotTooltip), t.annotationsLayout
  		}
  
  		function Ai(t) {
  			var e, n, r = this;
  
  			function o(t) {
  				r.rawAnnots.annots = t.annots.sort(function (t, e) {
  					return Ideogram.naturalSort(t.chr, e.chr)
  				}), r.config.heatmaps && r.deserializeAnnotsForHeatmap(t), r.onLoadAnnotsCallback && r.onLoadAnnotsCallback()
  			}
  			if ("http" === t.slice(0, 4)) {
  				if (e = t.split("?")[0].split("."), "bed" !== (n = e[e.length - 1]) && "json" !== n) return n = n.toUpperCase(), void alert("Ideogram.js only supports BED and Ideogram JSON at the moment.  Sorry, check back soon for " + n + " support!");
  				_i.text(t).then(function (t) {
  					r.rawAnnots = "bed" === n ? new ti(t, r).rawAnnots : JSON.parse(t), o(r.rawAnnots)
  				})
  			} else _i.json(r.config.annotationsPath).then(function (t) {
  				r.rawAnnots = t, o(r.rawAnnots)
  			})
  		}
  
  		function Ci(t) {
  			var e, n, r, o, i, a, s;
  			for (e = [], n = [], r = this.chromosomesArray, o = 0; o < r.length; o++) i = r[o].name, n.push(i), e.push({
  				chr: i,
  				annots: []
  			});
  			for (o = 0; o < t.length; o++) a = t[o], -1 !== (s = n.indexOf(a.chr)) && (e[s] = a);
  			return e
  		}
  		var Mi = n(3),
  			ki = n(6),
  			Ti = ei.a.assign({}, r, o);
  
  		function Si() {
  			call(this.onBrushMoveCallback)
  		}
  
  		function Di(t, e, n) {
  			var r, i, a, s, c, u, l, f, h, d, g, p = this,
  				m = p.config.chrWidth + 6.5,
  				_ = p.config.chrHeight,
  				b = this._layout.margin.left,
  				v = [1],
  				y = [1];
  			for (s = t.split(":"), c = t.split("-"), s.length > 1 && c.length > 1 && (t = s[0].replace("chr", ""), c = s[1].split("-"), e = parseInt(c[0]), n = parseInt(c[1] - 1)), d = 0; d < p.chromosomesArray.length; d++)
  				if ((i = p.chromosomesArray[d]).name === t) {
  					r = i;
  					break
  				}
  			for (a = (u = r.bands.slice(-1)[0]).bp.stop, d = 0; d < r.bands.length; d++) h = r.bands[d], v.push(h.bp.start), y.push(h.px.start + b);
  			v.push(u.bp.stop - 1), y.push(u.px.stop + b), g = Ti.scaleLinear().domain(v).range(y), void 0 === e && (e = Math.floor(a / 10)), void 0 === n && (n = Math.ceil(2 * e));
  			var w = n - e + 1;
  			p.selectedRegion = {
  				from: e,
  				to: n,
  				extent: w
  			}, l = p.convertBpToPx(r, e) + b, f = p.convertBpToPx(r, n) + b, p.brush = Ti.brushX().extent([
  				[b, 0],
  				[_ + b, m]
  			]).on("brush", function () {
  				var t = o.event.selection.map(g.invert),
  					e = Math.floor(t[0]),
  					n = Math.ceil(t[1]);
  				p.selectedRegion = {
  					from: e,
  					to: n,
  					extent: n - e
  				}, p.onBrushMove && p.onBrushMoveCallback()
  			});
  			var x = this._layout.getChromosomeSetYTranslate(0) + (p.config.chrWidth - m) / 2;
  			Ti.select(p.selector).append("g").attr("class", "brush").attr("transform", "translate(0, " + x + ")").call(p.brush).call(p.brush.move, [l, f])
  		}
  
  		function Li(t, e) {
  			var n, r, o, i, a, s, c, u, l, f;
  			for (n = this.bandsArray, r = this.config.taxid, o = this.config.chromosomes[r], a = (i = "male" === this.config.sex ? [1, 0] : [0, 0]).length, f = 0; f < a; f++) s = o[l = i[f] + e], c = n[r][l], u = this.getChromosomeModel(c, s, r, l), this.appendHomolog(u, e, f, t)
  		}
  
  		function Bi(t) {
  			if (2 === this.config.ploidy && this.config.sex) {
  				var e, n, r = {
  					X: 1,
  					Y: 1
  				};
  				for (this.sexChromosomes.list = [], n = 0; n < t.length; n++) e = t[n], "male" === this.config.sex && e in r ? (this.sexChromosomes.list.push(e), this.sexChromosomes.index || (this.sexChromosomes.index = n)) : "X" === e && (this.sexChromosomes.list.push(e, e), this.sexChromosomes.index = n)
  			}
  		}
  
  		function Ei(t, e) {
  			var n, r, o, i, a, s, c, u, l;
  			if (t.bands.length > 1) {
  				for (n = 0; n < t.bands.length; n++)
  					if (c = (r = t.bands[n]).bp.start, l = (u = r.bp.stop) - c, a = r.iscn.start, s = r.iscn.stop - a, o = r.px.start, i = r.px.width, e >= c && e <= u) return o + i * (a + (e - c) * (s / l) - a) / s
  			} else if (i = t.width, e >= 1 && e <= t.length) return t.scale.bp * e;
  			throw new Error("Base pair out of range.  bp: " + e + "; length of chr" + t.name + ": " + r.bp.stop)
  		}
  
  		function Oi(t, e) {
  			var n, r, o, i, a, s, c, u, l, f, h;
  			for (0 === e && (e = t.bands[0].px.start), n = 0; n < t.bands.length; n++)
  				if (s = (r = t.bands[n]).px.start, c = r.px.stop, u = r.iscn.start, l = r.iscn.stop, e >= s && e <= c) return h = l - u, a = c - s, f = r.bp.stop - r.bp.start, o = u + (e - s) * (h / a), i = r.bp.start + f * (o - u) / h, Math.round(i);
  			throw new Error("Pixel out of range.  px: " + e + "; length of chr" + t.name + ": " + c)
  		}
  		Ti.scaleLinear = Vn, Ti.max = gn;
  		var Pi = n(8),
  			Fi = Object.assign({}, o);
  
  		function Ni() {
  			var t, e, n = [],
  				r = this.annots;
  			for (e = 0; e < r.length; e++) t = r[e].annots, n = n.concat(t);
  			return n
  		}
  
  		function Ii(t) {
  			var e, n, r, o = [],
  				i = this.annots;
  			for (e in i) o.push({
  				chr: i[e].chr,
  				annots: []
  			});
  			for (r = 0; r < t.length; r++) o[(n = t[r]).chrIndex].annots.push(n);
  			return o
  		}
  
  		function Ui() {
  			var t, e, n = this.rawAnnots.keys;
  			for (this.unpackedAnnots = this.unpackAnnots(), this.crossfilter = Pi(this.unpackedAnnots), this.annotsByFacet = {}, this.facets = n.slice(3, n.length), t = 0; t < this.facets.length; t++) e = this.facets[t], this.annotsByFacet[e] = this.crossfilter.dimension(function (t) {
  				return t[e]
  			});
  			"filterSelections" in this && this.filterAnnots(this.filterSelections)
  		}
  
  		function ji(t) {
  			var e, n, r, o, i = Date.now(),
  				a = {};
  			if (this.filterSelections = t, 0 === Object.keys(t).length) r = this.unpackedAnnots;
  			else {
  				for (e = 0; e < this.facets.length; e++) o = (n = this.facets[e]) in t ? function (e) {
  					if (e in t[n]) return !0
  				} : null, this.annotsByFacet[n].filter(o), a[n] = this.annotsByFacet[n].group().top(1 / 0);
  				r = this.annotsByFacet[n].top(1 / 0)
  			}
  			for (; e < this.facets.length; e++) this.annotsByFacet[n].filterAll();
  			return r = this.packAnnots(r), delete this.maxAnnotsPerBar, delete this.maxAnnotsPerBarAllChrs, Fi.selectAll(this.selector + " polygon.annot").remove(), this.drawAnnots(r), console.log("Time in filterAnnots: " + (Date.now() - i) + " ms"), a
  		}
  		var Hi = ei.a.assign({}, o, i, r, a);
  		Hi.scaleLinear = Vn, Hi.max = gn;
  		class Wi {
  			constructor(t) {
  				this.configure = Jo.a,
  					this.initDrawChromosomes = Jo.d,
  					this.onLoad = Jo.e,
  					this.handleRotateOnClick = Jo.b,
  					this.setOverflowScroll = Jo.f,
  					this.init = Jo.c,
  					this.onLoadAnnots = ai,
  					this.onDrawAnnots = si,
  					this.processAnnotData = vi,
  					this.restoreDefaultTracks = yi,
  					this.updateDisplayedTracks = wi,
  					this.updateDisplayedTracks2 = wi2,
  
  					this.initAnnotSettings = xi,
  					this.fetchAnnots = Ai,
  					this.drawAnnots = hi,
  					this.getHistogramBars = gi,
  					this.drawHeatmaps = ri,
  					this.deserializeAnnotsForHeatmap = oi,
  					this.fillAnnots = Ci,
  					this.drawProcessedAnnots = di,
  					this.drawSynteny = mi, this.startHideAnnotTooltipTimeout = ci, this.showAnnotTooltip = li, this.onWillShowAnnotTooltip = ui, this.setOriginalTrackIndexes = bi, this.eutils = Mi.d, this.esearch = Mi.b, this.esummary = Mi.c, this.elink = Mi.a, this.getTaxidFromEutils = Mi.g, this.getOrganismFromEutils = Mi.f, this.getTaxids = Mi.h, this.getAssemblyAndChromosomesFromEutils = Mi.e, this.getBands = ki.c, this.drawBandLabels = ki.a, this.getBandColorGradients = ki.b, this.processBandData = ki.e, this.setBandsToShow = ki.f, this.hideUnshownBandLabels = ki.d, this.onBrushMove = Si, this.createBrush = Di, this.drawSexChromosomes = Li, this.setSexChromosomes = Bi, this.convertBpToPx = Ei, this.convertPxToBp = Oi, this.unpackAnnots = Ni, this.packAnnots = Ii, this.initCrossFilter = Ui, this.filterAnnots = ji, this.assemblyIsAccession = ei.c, this.getDataDir = ei.h, this.getChromosomeModel = ei.f, this.getChromosomePixels = ei.g, this.drawChromosomeLabels = ei.e, this.rotateChromosomeLabels = ei.l, this.round = ei.m, this.appendHomolog = ei.b, this.drawChromosome = ei.d, this.rotateAndToggleDisplay = ei.k, this.onDidRotate = ei.j, this.getSvg = ei.i, this.configure(t)
  			}
  			static get version() {
  				return Zo
  			}
  			static get d3() {
  				return Hi
  			}
  			static slugify(t) {
  				return t.toLowerCase().replace(" ", "-")
  			}
  			static naturalSort(t, e) {
  				var n, r, o = /(^([+\-]?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?(?=\D|\s|$))|^0x[\da-fA-F]+$|\d+)/g,
  					i = /^\s+|\s+$/g,
  					a = /\s+/g,
  					s = /^0x[0-9a-f]+$/i,
  					c = /^0/,
  					u = function (t) {
  						return (Wi.naturalSort.insensitive && String(t).toLowerCase() || String(t)).replace(i, "")
  					},
  					l = u(t),
  					f = u(e),
  					h = l.replace(o, "\0$1\0").replace(/\0$/, "").replace(/^\0/, "").split("\0"),
  					d = f.replace(o, "\0$1\0").replace(/\0$/, "").replace(/^\0/, "").split("\0"),
  					g = parseInt(l.match(s), 16) || 1 !== h.length && Date.parse(l),
  					p = parseInt(f.match(s), 16) || g && f.match(/(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/) && Date.parse(f) || null,
  					m = function (t, e) {
  						return (!t.match(c) || 1 == e) && parseFloat(t) || t.replace(a, " ").replace(i, "") || 0
  					};
  				if (p) {
  					if (g < p) return -1;
  					if (g > p) return 1
  				}
  				for (var _ = 0, b = h.length, v = d.length, y = Math.max(b, v); _ < y; _++) {
  					if (n = m(h[_] || "", b), r = m(d[_] || "", v), isNaN(n) !== isNaN(r)) return isNaN(n) ? 1 : -1;
  					if (/[^\x00-\x80]/.test(n + r) && n.localeCompare) {
  						var w = n.localeCompare(r);
  						return w / Math.abs(w)
  					}
  					if (n < r) return -1;
  					if (n > r) return 1
  				}
  			}
  			static sortChromosomes(t, e) {
  				var n = "nuclear" === t.type,
  					r = "nuclear" === e.type,
  					o = "chloroplast" === t.type,
  					i = "chloroplast" === e.type,
  					a = "mitochondrion" === t.type,
  					s = "mitochondrion" === e.type;
  				return n && r ? Wi.naturalSort(t.name, e.name) : !n && r ? 1 : a && i ? 1 : o && s ? -1 : a || o || !s && !i ? void 0 : -1
  			}
  		}
  		window.Ideogram = Wi;
  		e.default = Wi
  	}])
  });
  //# sourceMappingURL=ideogram.min.js.map
  