Skip to content

Instantly share code, notes, and snippets.

@arrayjam
Forked from mbostock/.block
Last active March 7, 2023 01:40
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save arrayjam/6548197 to your computer and use it in GitHub Desktop.
Save arrayjam/6548197 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
var width = 1960,
height = 1000;
var ausCenter = [132.5, -26.5];
var parallels = [-36, -18];
var projection = d3.geo.albers()
.translate([width / 2, height / 2])
.scale(1100)
.rotate([-ausCenter[0], 0])
.center([0, ausCenter[1]])
.parallels(parallels)
.precision(0);
var path = d3.geo.path()
.projection(projection)
.pointRadius(1.5);
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
var zoom = d3.behavior.zoom()
.translate(projection.translate())
.scale(projection.scale())
//.scaleExtent([height, 8 * height])
.on("zoom", zoomed);
var g = svg.append("g")
.call(zoom);
var voronoi = d3.geom.voronoi();
//.clipExtent([[0,0],[width, height]]);
queue()
.defer(d3.json, "australia.json")
.defer(d3.csv, "pollingbooths1.csv")
.await(ready);
var aus, polls, vpath, voronoi, booths, geo;
function ready(error, us, airports) {
airports.forEach(function(coord) {
coord[0] = +coord[0];
coord[1] = +coord[1];
});
geo = us;
booths = airports;
aus = g.selectAll("path.land")
.data(topojson.feature(us, us.objects.SED_2011_AUST).features)
.enter().append("path")
.attr("class", "land")
.attr("d", path);
polls = g.append("path")
.datum({type: "MultiPoint", coordinates: airports})
.attr("class", "points")
.attr("d", path);
vpath = g.selectAll("path.voronoi")
.data(voronoi(booths.map(projection)))
.enter().append("path")
.attr("class", "voronoi");
//.datum(d3.geom.voronoi(airports.map(projection)))
//.attr("d", function(d) { return "M" + d.map(function(d) { return d.join("L"); }).join("ZM") + "Z"; });
}
function zoomed() {
projection
.translate(d3.event.translate)
.scale(d3.event.scale);
aus.attr("d", path);
polls.attr("d", path);
//vpath.datum(d3.geom.voronoi(booths.map(projection)))
//.attr("d", function(d) { return "M" + d.map(function(d) { return d.join("L"); }).join("ZM") + "Z"; });
}
function v() {
console.log("map", booths.map(projection));
console.log("vor", vor = voronoi(booths.map(projection)));
vpath.data(voronoi(booths.map(projection)))
.attr("d", function(d) { return "M" + d.join("L") + "Z"; })//return "M" + d.map(function(d) { return d.join("L"); }).join("ZM") + "Z"; });
//.attr("d", function(d) { return "M" + d.map(function(d) { return d.join("L"); }).join("ZM") + "Z"; });
}
function pp() {
var selection = d3.selectAll("path.voronoi");
booths.forEach(function(booth) {
selection.style("fill", function(d) { return pointInPolygon(booth, d.map(function(d) { return projection.invert(d); })) ? "red" : "yellow"; });
});
}
function pointInPolygon (point, vs) {
// ray-casting algorithm based on
// http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html
var xi, xj, yi, yj, i, j, intersect,
x = point[0],
y = point[1],
inside = false;
for (i = 0, j = vs.length - 1; i < vs.length; j = i++) {
xi = vs[i][0],
yi = vs[i][1],
xj = vs[j][0],
yj = vs[j][1],
intersect = ((yi > y) !== (yj > y))
&& (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
if (intersect) inside = !inside;
}
return inside;
}
d3 = function() {
var d3 = {
version: "3.3.3"
};
if (!Date.now) Date.now = function() {
return +new Date();
};
var d3_arraySlice = [].slice, d3_array = function(list) {
return d3_arraySlice.call(list);
};
var d3_document = document, d3_documentElement = d3_document.documentElement, d3_window = window;
try {
d3_array(d3_documentElement.childNodes)[0].nodeType;
} catch (e) {
d3_array = function(list) {
var i = list.length, array = new Array(i);
while (i--) array[i] = list[i];
return array;
};
}
try {
d3_document.createElement("div").style.setProperty("opacity", 0, "");
} catch (error) {
var d3_element_prototype = d3_window.Element.prototype, d3_element_setAttribute = d3_element_prototype.setAttribute, d3_element_setAttributeNS = d3_element_prototype.setAttributeNS, d3_style_prototype = d3_window.CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty;
d3_element_prototype.setAttribute = function(name, value) {
d3_element_setAttribute.call(this, name, value + "");
};
d3_element_prototype.setAttributeNS = function(space, local, value) {
d3_element_setAttributeNS.call(this, space, local, value + "");
};
d3_style_prototype.setProperty = function(name, value, priority) {
d3_style_setProperty.call(this, name, value + "", priority);
};
}
d3.ascending = function(a, b) {
return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
};
d3.descending = function(a, b) {
return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
};
d3.min = function(array, f) {
var i = -1, n = array.length, a, b;
if (arguments.length === 1) {
while (++i < n && !((a = array[i]) != null && a <= a)) a = undefined;
while (++i < n) if ((b = array[i]) != null && a > b) a = b;
} else {
while (++i < n && !((a = f.call(array, array[i], i)) != null && a <= a)) a = undefined;
while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;
}
return a;
};
d3.max = function(array, f) {
var i = -1, n = array.length, a, b;
if (arguments.length === 1) {
while (++i < n && !((a = array[i]) != null && a <= a)) a = undefined;
while (++i < n) if ((b = array[i]) != null && b > a) a = b;
} else {
while (++i < n && !((a = f.call(array, array[i], i)) != null && a <= a)) a = undefined;
while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;
}
return a;
};
d3.extent = function(array, f) {
var i = -1, n = array.length, a, b, c;
if (arguments.length === 1) {
while (++i < n && !((a = c = array[i]) != null && a <= a)) a = c = undefined;
while (++i < n) if ((b = array[i]) != null) {
if (a > b) a = b;
if (c < b) c = b;
}
} else {
while (++i < n && !((a = c = f.call(array, array[i], i)) != null && a <= a)) a = undefined;
while (++i < n) if ((b = f.call(array, array[i], i)) != null) {
if (a > b) a = b;
if (c < b) c = b;
}
}
return [ a, c ];
};
d3.sum = function(array, f) {
var s = 0, n = array.length, a, i = -1;
if (arguments.length === 1) {
while (++i < n) if (!isNaN(a = +array[i])) s += a;
} else {
while (++i < n) if (!isNaN(a = +f.call(array, array[i], i))) s += a;
}
return s;
};
function d3_number(x) {
return x != null && !isNaN(x);
}
d3.mean = function(array, f) {
var n = array.length, a, m = 0, i = -1, j = 0;
if (arguments.length === 1) {
while (++i < n) if (d3_number(a = array[i])) m += (a - m) / ++j;
} else {
while (++i < n) if (d3_number(a = f.call(array, array[i], i))) m += (a - m) / ++j;
}
return j ? m : undefined;
};
d3.quantile = function(values, p) {
var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h;
return e ? v + e * (values[h] - v) : v;
};
d3.median = function(array, f) {
if (arguments.length > 1) array = array.map(f);
array = array.filter(d3_number);
return array.length ? d3.quantile(array.sort(d3.ascending), .5) : undefined;
};
d3.bisector = function(f) {
return {
left: function(a, x, lo, hi) {
if (arguments.length < 3) lo = 0;
if (arguments.length < 4) hi = a.length;
while (lo < hi) {
var mid = lo + hi >>> 1;
if (f.call(a, a[mid], mid) < x) lo = mid + 1; else hi = mid;
}
return lo;
},
right: function(a, x, lo, hi) {
if (arguments.length < 3) lo = 0;
if (arguments.length < 4) hi = a.length;
while (lo < hi) {
var mid = lo + hi >>> 1;
if (x < f.call(a, a[mid], mid)) hi = mid; else lo = mid + 1;
}
return lo;
}
};
};
var d3_bisector = d3.bisector(function(d) {
return d;
});
d3.bisectLeft = d3_bisector.left;
d3.bisect = d3.bisectRight = d3_bisector.right;
d3.shuffle = function(array) {
var m = array.length, t, i;
while (m) {
i = Math.random() * m-- | 0;
t = array[m], array[m] = array[i], array[i] = t;
}
return array;
};
d3.permute = function(array, indexes) {
var i = indexes.length, permutes = new Array(i);
while (i--) permutes[i] = array[indexes[i]];
return permutes;
};
d3.pairs = function(array) {
var i = 0, n = array.length - 1, p0, p1 = array[0], pairs = new Array(n < 0 ? 0 : n);
while (i < n) pairs[i] = [ p0 = p1, p1 = array[++i] ];
return pairs;
};
d3.zip = function() {
if (!(n = arguments.length)) return [];
for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m; ) {
for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n; ) {
zip[j] = arguments[j][i];
}
}
return zips;
};
function d3_zipLength(d) {
return d.length;
}
d3.transpose = function(matrix) {
return d3.zip.apply(d3, matrix);
};
d3.keys = function(map) {
var keys = [];
for (var key in map) keys.push(key);
return keys;
};
d3.values = function(map) {
var values = [];
for (var key in map) values.push(map[key]);
return values;
};
d3.entries = function(map) {
var entries = [];
for (var key in map) entries.push({
key: key,
value: map[key]
});
return entries;
};
d3.merge = function(arrays) {
return Array.prototype.concat.apply([], arrays);
};
d3.range = function(start, stop, step) {
if (arguments.length < 3) {
step = 1;
if (arguments.length < 2) {
stop = start;
start = 0;
}
}
if ((stop - start) / step === Infinity) throw new Error("infinite range");
var range = [], k = d3_range_integerScale(Math.abs(step)), i = -1, j;
start *= k, stop *= k, step *= k;
if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k);
return range;
};
function d3_range_integerScale(x) {
var k = 1;
while (x * k % 1) k *= 10;
return k;
}
function d3_class(ctor, properties) {
try {
for (var key in properties) {
Object.defineProperty(ctor.prototype, key, {
value: properties[key],
enumerable: false
});
}
} catch (e) {
ctor.prototype = properties;
}
}
d3.map = function(object) {
var map = new d3_Map();
if (object instanceof d3_Map) object.forEach(function(key, value) {
map.set(key, value);
}); else for (var key in object) map.set(key, object[key]);
return map;
};
function d3_Map() {}
d3_class(d3_Map, {
has: function(key) {
return d3_map_prefix + key in this;
},
get: function(key) {
return this[d3_map_prefix + key];
},
set: function(key, value) {
return this[d3_map_prefix + key] = value;
},
remove: function(key) {
key = d3_map_prefix + key;
return key in this && delete this[key];
},
keys: function() {
var keys = [];
this.forEach(function(key) {
keys.push(key);
});
return keys;
},
values: function() {
var values = [];
this.forEach(function(key, value) {
values.push(value);
});
return values;
},
entries: function() {
var entries = [];
this.forEach(function(key, value) {
entries.push({
key: key,
value: value
});
});
return entries;
},
forEach: function(f) {
for (var key in this) {
if (key.charCodeAt(0) === d3_map_prefixCode) {
f.call(this, key.substring(1), this[key]);
}
}
}
});
var d3_map_prefix = "\0", d3_map_prefixCode = d3_map_prefix.charCodeAt(0);
d3.nest = function() {
var nest = {}, keys = [], sortKeys = [], sortValues, rollup;
function map(mapType, array, depth) {
if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array;
var i = -1, n = array.length, key = keys[depth++], keyValue, object, setter, valuesByKey = new d3_Map(), values;
while (++i < n) {
if (values = valuesByKey.get(keyValue = key(object = array[i]))) {
values.push(object);
} else {
valuesByKey.set(keyValue, [ object ]);
}
}
if (mapType) {
object = mapType();
setter = function(keyValue, values) {
object.set(keyValue, map(mapType, values, depth));
};
} else {
object = {};
setter = function(keyValue, values) {
object[keyValue] = map(mapType, values, depth);
};
}
valuesByKey.forEach(setter);
return object;
}
function entries(map, depth) {
if (depth >= keys.length) return map;
var array = [], sortKey = sortKeys[depth++];
map.forEach(function(key, keyMap) {
array.push({
key: key,
values: entries(keyMap, depth)
});
});
return sortKey ? array.sort(function(a, b) {
return sortKey(a.key, b.key);
}) : array;
}
nest.map = function(array, mapType) {
return map(mapType, array, 0);
};
nest.entries = function(array) {
return entries(map(d3.map, array, 0), 0);
};
nest.key = function(d) {
keys.push(d);
return nest;
};
nest.sortKeys = function(order) {
sortKeys[keys.length - 1] = order;
return nest;
};
nest.sortValues = function(order) {
sortValues = order;
return nest;
};
nest.rollup = function(f) {
rollup = f;
return nest;
};
return nest;
};
d3.set = function(array) {
var set = new d3_Set();
if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]);
return set;
};
function d3_Set() {}
d3_class(d3_Set, {
has: function(value) {
return d3_map_prefix + value in this;
},
add: function(value) {
this[d3_map_prefix + value] = true;
return value;
},
remove: function(value) {
value = d3_map_prefix + value;
return value in this && delete this[value];
},
values: function() {
var values = [];
this.forEach(function(value) {
values.push(value);
});
return values;
},
forEach: function(f) {
for (var value in this) {
if (value.charCodeAt(0) === d3_map_prefixCode) {
f.call(this, value.substring(1));
}
}
}
});
d3.behavior = {};
d3.rebind = function(target, source) {
var i = 1, n = arguments.length, method;
while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]);
return target;
};
function d3_rebind(target, source, method) {
return function() {
var value = method.apply(source, arguments);
return value === source ? target : value;
};
}
function d3_vendorSymbol(object, name) {
if (name in object) return name;
name = name.charAt(0).toUpperCase() + name.substring(1);
for (var i = 0, n = d3_vendorPrefixes.length; i < n; ++i) {
var prefixName = d3_vendorPrefixes[i] + name;
if (prefixName in object) return prefixName;
}
}
var d3_vendorPrefixes = [ "webkit", "ms", "moz", "Moz", "o", "O" ];
function d3_noop() {}
d3.dispatch = function() {
var dispatch = new d3_dispatch(), i = -1, n = arguments.length;
while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);
return dispatch;
};
function d3_dispatch() {}
d3_dispatch.prototype.on = function(type, listener) {
var i = type.indexOf("."), name = "";
if (i >= 0) {
name = type.substring(i + 1);
type = type.substring(0, i);
}
if (type) return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener);
if (arguments.length === 2) {
if (listener == null) for (type in this) {
if (this.hasOwnProperty(type)) this[type].on(name, null);
}
return this;
}
};
function d3_dispatch_event(dispatch) {
var listeners = [], listenerByName = new d3_Map();
function event() {
var z = listeners, i = -1, n = z.length, l;
while (++i < n) if (l = z[i].on) l.apply(this, arguments);
return dispatch;
}
event.on = function(name, listener) {
var l = listenerByName.get(name), i;
if (arguments.length < 2) return l && l.on;
if (l) {
l.on = null;
listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1));
listenerByName.remove(name);
}
if (listener) listeners.push(listenerByName.set(name, {
on: listener
}));
return dispatch;
};
return event;
}
d3.event = null;
function d3_eventPreventDefault() {
d3.event.preventDefault();
}
function d3_eventSource() {
var e = d3.event, s;
while (s = e.sourceEvent) e = s;
return e;
}
function d3_eventDispatch(target) {
var dispatch = new d3_dispatch(), i = 0, n = arguments.length;
while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);
dispatch.of = function(thiz, argumentz) {
return function(e1) {
try {
var e0 = e1.sourceEvent = d3.event;
e1.target = target;
d3.event = e1;
dispatch[e1.type].apply(thiz, argumentz);
} finally {
d3.event = e0;
}
};
};
return dispatch;
}
d3.requote = function(s) {
return s.replace(d3_requote_re, "\\$&");
};
var d3_requote_re = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;
var d3_subclass = {}.__proto__ ? function(object, prototype) {
object.__proto__ = prototype;
} : function(object, prototype) {
for (var property in prototype) object[property] = prototype[property];
};
function d3_selection(groups) {
d3_subclass(groups, d3_selectionPrototype);
return groups;
}
var d3_select = function(s, n) {
return n.querySelector(s);
}, d3_selectAll = function(s, n) {
return n.querySelectorAll(s);
}, d3_selectMatcher = d3_documentElement[d3_vendorSymbol(d3_documentElement, "matchesSelector")], d3_selectMatches = function(n, s) {
return d3_selectMatcher.call(n, s);
};
if (typeof Sizzle === "function") {
d3_select = function(s, n) {
return Sizzle(s, n)[0] || null;
};
d3_selectAll = function(s, n) {
return Sizzle.uniqueSort(Sizzle(s, n));
};
d3_selectMatches = Sizzle.matchesSelector;
}
d3.selection = function() {
return d3_selectionRoot;
};
var d3_selectionPrototype = d3.selection.prototype = [];
d3_selectionPrototype.select = function(selector) {
var subgroups = [], subgroup, subnode, group, node;
selector = d3_selection_selector(selector);
for (var j = -1, m = this.length; ++j < m; ) {
subgroups.push(subgroup = []);
subgroup.parentNode = (group = this[j]).parentNode;
for (var i = -1, n = group.length; ++i < n; ) {
if (node = group[i]) {
subgroup.push(subnode = selector.call(node, node.__data__, i, j));
if (subnode && "__data__" in node) subnode.__data__ = node.__data__;
} else {
subgroup.push(null);
}
}
}
return d3_selection(subgroups);
};
function d3_selection_selector(selector) {
return typeof selector === "function" ? selector : function() {
return d3_select(selector, this);
};
}
d3_selectionPrototype.selectAll = function(selector) {
var subgroups = [], subgroup, node;
selector = d3_selection_selectorAll(selector);
for (var j = -1, m = this.length; ++j < m; ) {
for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
if (node = group[i]) {
subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i, j)));
subgroup.parentNode = node;
}
}
}
return d3_selection(subgroups);
};
function d3_selection_selectorAll(selector) {
return typeof selector === "function" ? selector : function() {
return d3_selectAll(selector, this);
};
}
var d3_nsPrefix = {
svg: "http://www.w3.org/2000/svg",
xhtml: "http://www.w3.org/1999/xhtml",
xlink: "http://www.w3.org/1999/xlink",
xml: "http://www.w3.org/XML/1998/namespace",
xmlns: "http://www.w3.org/2000/xmlns/"
};
d3.ns = {
prefix: d3_nsPrefix,
qualify: function(name) {
var i = name.indexOf(":"), prefix = name;
if (i >= 0) {
prefix = name.substring(0, i);
name = name.substring(i + 1);
}
return d3_nsPrefix.hasOwnProperty(prefix) ? {
space: d3_nsPrefix[prefix],
local: name
} : name;
}
};
d3_selectionPrototype.attr = function(name, value) {
if (arguments.length < 2) {
if (typeof name === "string") {
var node = this.node();
name = d3.ns.qualify(name);
return name.local ? node.getAttributeNS(name.space, name.local) : node.getAttribute(name);
}
for (value in name) this.each(d3_selection_attr(value, name[value]));
return this;
}
return this.each(d3_selection_attr(name, value));
};
function d3_selection_attr(name, value) {
name = d3.ns.qualify(name);
function attrNull() {
this.removeAttribute(name);
}
function attrNullNS() {
this.removeAttributeNS(name.space, name.local);
}
function attrConstant() {
this.setAttribute(name, value);
}
function attrConstantNS() {
this.setAttributeNS(name.space, name.local, value);
}
function attrFunction() {
var x = value.apply(this, arguments);
if (x == null) this.removeAttribute(name); else this.setAttribute(name, x);
}
function attrFunctionNS() {
var x = value.apply(this, arguments);
if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x);
}
return value == null ? name.local ? attrNullNS : attrNull : typeof value === "function" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant;
}
function d3_collapse(s) {
return s.trim().replace(/\s+/g, " ");
}
d3_selectionPrototype.classed = function(name, value) {
if (arguments.length < 2) {
if (typeof name === "string") {
var node = this.node(), n = (name = name.trim().split(/^|\s+/g)).length, i = -1;
if (value = node.classList) {
while (++i < n) if (!value.contains(name[i])) return false;
} else {
value = node.getAttribute("class");
while (++i < n) if (!d3_selection_classedRe(name[i]).test(value)) return false;
}
return true;
}
for (value in name) this.each(d3_selection_classed(value, name[value]));
return this;
}
return this.each(d3_selection_classed(name, value));
};
function d3_selection_classedRe(name) {
return new RegExp("(?:^|\\s+)" + d3.requote(name) + "(?:\\s+|$)", "g");
}
function d3_selection_classed(name, value) {
name = name.trim().split(/\s+/).map(d3_selection_classedName);
var n = name.length;
function classedConstant() {
var i = -1;
while (++i < n) name[i](this, value);
}
function classedFunction() {
var i = -1, x = value.apply(this, arguments);
while (++i < n) name[i](this, x);
}
return typeof value === "function" ? classedFunction : classedConstant;
}
function d3_selection_classedName(name) {
var re = d3_selection_classedRe(name);
return function(node, value) {
if (c = node.classList) return value ? c.add(name) : c.remove(name);
var c = node.getAttribute("class") || "";
if (value) {
re.lastIndex = 0;
if (!re.test(c)) node.setAttribute("class", d3_collapse(c + " " + name));
} else {
node.setAttribute("class", d3_collapse(c.replace(re, " ")));
}
};
}
d3_selectionPrototype.style = function(name, value, priority) {
var n = arguments.length;
if (n < 3) {
if (typeof name !== "string") {
if (n < 2) value = "";
for (priority in name) this.each(d3_selection_style(priority, name[priority], value));
return this;
}
if (n < 2) return d3_window.getComputedStyle(this.node(), null).getPropertyValue(name);
priority = "";
}
return this.each(d3_selection_style(name, value, priority));
};
function d3_selection_style(name, value, priority) {
function styleNull() {
this.style.removeProperty(name);
}
function styleConstant() {
this.style.setProperty(name, value, priority);
}
function styleFunction() {
var x = value.apply(this, arguments);
if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority);
}
return value == null ? styleNull : typeof value === "function" ? styleFunction : styleConstant;
}
d3_selectionPrototype.property = function(name, value) {
if (arguments.length < 2) {
if (typeof name === "string") return this.node()[name];
for (value in name) this.each(d3_selection_property(value, name[value]));
return this;
}
return this.each(d3_selection_property(name, value));
};
function d3_selection_property(name, value) {
function propertyNull() {
delete this[name];
}
function propertyConstant() {
this[name] = value;
}
function propertyFunction() {
var x = value.apply(this, arguments);
if (x == null) delete this[name]; else this[name] = x;
}
return value == null ? propertyNull : typeof value === "function" ? propertyFunction : propertyConstant;
}
d3_selectionPrototype.text = function(value) {
return arguments.length ? this.each(typeof value === "function" ? function() {
var v = value.apply(this, arguments);
this.textContent = v == null ? "" : v;
} : value == null ? function() {
this.textContent = "";
} : function() {
this.textContent = value;
}) : this.node().textContent;
};
d3_selectionPrototype.html = function(value) {
return arguments.length ? this.each(typeof value === "function" ? function() {
var v = value.apply(this, arguments);
this.innerHTML = v == null ? "" : v;
} : value == null ? function() {
this.innerHTML = "";
} : function() {
this.innerHTML = value;
}) : this.node().innerHTML;
};
d3_selectionPrototype.append = function(name) {
name = d3_selection_creator(name);
return this.select(function() {
return this.appendChild(name.apply(this, arguments));
});
};
function d3_selection_creator(name) {
return typeof name === "function" ? name : (name = d3.ns.qualify(name)).local ? function() {
return d3_document.createElementNS(name.space, name.local);
} : function() {
return d3_document.createElementNS(this.namespaceURI, name);
};
}
d3_selectionPrototype.insert = function(name, before) {
name = d3_selection_creator(name);
before = d3_selection_selector(before);
return this.select(function() {
return this.insertBefore(name.apply(this, arguments), before.apply(this, arguments));
});
};
d3_selectionPrototype.remove = function() {
return this.each(function() {
var parent = this.parentNode;
if (parent) parent.removeChild(this);
});
};
d3_selectionPrototype.data = function(value, key) {
var i = -1, n = this.length, group, node;
if (!arguments.length) {
value = new Array(n = (group = this[0]).length);
while (++i < n) {
if (node = group[i]) {
value[i] = node.__data__;
}
}
return value;
}
function bind(group, groupData) {
var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData;
if (key) {
var nodeByKeyValue = new d3_Map(), dataByKeyValue = new d3_Map(), keyValues = [], keyValue;
for (i = -1; ++i < n; ) {
keyValue = key.call(node = group[i], node.__data__, i);
if (nodeByKeyValue.has(keyValue)) {
exitNodes[i] = node;
} else {
nodeByKeyValue.set(keyValue, node);
}
keyValues.push(keyValue);
}
for (i = -1; ++i < m; ) {
keyValue = key.call(groupData, nodeData = groupData[i], i);
if (node = nodeByKeyValue.get(keyValue)) {
updateNodes[i] = node;
node.__data__ = nodeData;
} else if (!dataByKeyValue.has(keyValue)) {
enterNodes[i] = d3_selection_dataNode(nodeData);
}
dataByKeyValue.set(keyValue, nodeData);
nodeByKeyValue.remove(keyValue);
}
for (i = -1; ++i < n; ) {
if (nodeByKeyValue.has(keyValues[i])) {
exitNodes[i] = group[i];
}
}
} else {
for (i = -1; ++i < n0; ) {
node = group[i];
nodeData = groupData[i];
if (node) {
node.__data__ = nodeData;
updateNodes[i] = node;
} else {
enterNodes[i] = d3_selection_dataNode(nodeData);
}
}
for (;i < m; ++i) {
enterNodes[i] = d3_selection_dataNode(groupData[i]);
}
for (;i < n; ++i) {
exitNodes[i] = group[i];
}
}
enterNodes.update = updateNodes;
enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode;
enter.push(enterNodes);
update.push(updateNodes);
exit.push(exitNodes);
}
var enter = d3_selection_enter([]), update = d3_selection([]), exit = d3_selection([]);
if (typeof value === "function") {
while (++i < n) {
bind(group = this[i], value.call(group, group.parentNode.__data__, i));
}
} else {
while (++i < n) {
bind(group = this[i], value);
}
}
update.enter = function() {
return enter;
};
update.exit = function() {
return exit;
};
return update;
};
function d3_selection_dataNode(data) {
return {
__data__: data
};
}
d3_selectionPrototype.datum = function(value) {
return arguments.length ? this.property("__data__", value) : this.property("__data__");
};
d3_selectionPrototype.filter = function(filter) {
var subgroups = [], subgroup, group, node;
if (typeof filter !== "function") filter = d3_selection_filter(filter);
for (var j = 0, m = this.length; j < m; j++) {
subgroups.push(subgroup = []);
subgroup.parentNode = (group = this[j]).parentNode;
for (var i = 0, n = group.length; i < n; i++) {
if ((node = group[i]) && filter.call(node, node.__data__, i)) {
subgroup.push(node);
}
}
}
return d3_selection(subgroups);
};
function d3_selection_filter(selector) {
return function() {
return d3_selectMatches(this, selector);
};
}
d3_selectionPrototype.order = function() {
for (var j = -1, m = this.length; ++j < m; ) {
for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0; ) {
if (node = group[i]) {
if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);
next = node;
}
}
}
return this;
};
d3_selectionPrototype.sort = function(comparator) {
comparator = d3_selection_sortComparator.apply(this, arguments);
for (var j = -1, m = this.length; ++j < m; ) this[j].sort(comparator);
return this.order();
};
function d3_selection_sortComparator(comparator) {
if (!arguments.length) comparator = d3.ascending;
return function(a, b) {
return a && b ? comparator(a.__data__, b.__data__) : !a - !b;
};
}
d3_selectionPrototype.each = function(callback) {
return d3_selection_each(this, function(node, i, j) {
callback.call(node, node.__data__, i, j);
});
};
function d3_selection_each(groups, callback) {
for (var j = 0, m = groups.length; j < m; j++) {
for (var group = groups[j], i = 0, n = group.length, node; i < n; i++) {
if (node = group[i]) callback(node, i, j);
}
}
return groups;
}
d3_selectionPrototype.call = function(callback) {
var args = d3_array(arguments);
callback.apply(args[0] = this, args);
return this;
};
d3_selectionPrototype.empty = function() {
return !this.node();
};
d3_selectionPrototype.node = function() {
for (var j = 0, m = this.length; j < m; j++) {
for (var group = this[j], i = 0, n = group.length; i < n; i++) {
var node = group[i];
if (node) return node;
}
}
return null;
};
d3_selectionPrototype.size = function() {
var n = 0;
this.each(function() {
++n;
});
return n;
};
function d3_selection_enter(selection) {
d3_subclass(selection, d3_selection_enterPrototype);
return selection;
}
var d3_selection_enterPrototype = [];
d3.selection.enter = d3_selection_enter;
d3.selection.enter.prototype = d3_selection_enterPrototype;
d3_selection_enterPrototype.append = d3_selectionPrototype.append;
d3_selection_enterPrototype.empty = d3_selectionPrototype.empty;
d3_selection_enterPrototype.node = d3_selectionPrototype.node;
d3_selection_enterPrototype.call = d3_selectionPrototype.call;
d3_selection_enterPrototype.size = d3_selectionPrototype.size;
d3_selection_enterPrototype.select = function(selector) {
var subgroups = [], subgroup, subnode, upgroup, group, node;
for (var j = -1, m = this.length; ++j < m; ) {
upgroup = (group = this[j]).update;
subgroups.push(subgroup = []);
subgroup.parentNode = group.parentNode;
for (var i = -1, n = group.length; ++i < n; ) {
if (node = group[i]) {
subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i, j));
subnode.__data__ = node.__data__;
} else {
subgroup.push(null);
}
}
}
return d3_selection(subgroups);
};
d3_selection_enterPrototype.insert = function(name, before) {
if (arguments.length < 2) before = d3_selection_enterInsertBefore(this);
return d3_selectionPrototype.insert.call(this, name, before);
};
function d3_selection_enterInsertBefore(enter) {
var i0, j0;
return function(d, i, j) {
var group = enter[j].update, n = group.length, node;
if (j != j0) j0 = j, i0 = 0;
if (i >= i0) i0 = i + 1;
while (!(node = group[i0]) && ++i0 < n) ;
return node;
};
}
d3_selectionPrototype.transition = function() {
var id = d3_transitionInheritId || ++d3_transitionId, subgroups = [], subgroup, node, transition = d3_transitionInherit || {
time: Date.now(),
ease: d3_ease_cubicInOut,
delay: 0,
duration: 250
};
for (var j = -1, m = this.length; ++j < m; ) {
subgroups.push(subgroup = []);
for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
if (node = group[i]) d3_transitionNode(node, i, id, transition);
subgroup.push(node);
}
}
return d3_transition(subgroups, id);
};
d3_selectionPrototype.interrupt = function() {
return this.each(d3_selection_interrupt);
};
function d3_selection_interrupt() {
var lock = this.__transition__;
if (lock) ++lock.active;
}
d3.select = function(node) {
var group = [ typeof node === "string" ? d3_select(node, d3_document) : node ];
group.parentNode = d3_documentElement;
return d3_selection([ group ]);
};
d3.selectAll = function(nodes) {
var group = d3_array(typeof nodes === "string" ? d3_selectAll(nodes, d3_document) : nodes);
group.parentNode = d3_documentElement;
return d3_selection([ group ]);
};
var d3_selectionRoot = d3.select(d3_documentElement);
d3_selectionPrototype.on = function(type, listener, capture) {
var n = arguments.length;
if (n < 3) {
if (typeof type !== "string") {
if (n < 2) listener = false;
for (capture in type) this.each(d3_selection_on(capture, type[capture], listener));
return this;
}
if (n < 2) return (n = this.node()["__on" + type]) && n._;
capture = false;
}
return this.each(d3_selection_on(type, listener, capture));
};
function d3_selection_on(type, listener, capture) {
var name = "__on" + type, i = type.indexOf("."), wrap = d3_selection_onListener;
if (i > 0) type = type.substring(0, i);
var filter = d3_selection_onFilters.get(type);
if (filter) type = filter, wrap = d3_selection_onFilter;
function onRemove() {
var l = this[name];
if (l) {
this.removeEventListener(type, l, l.$);
delete this[name];
}
}
function onAdd() {
var l = wrap(listener, d3_array(arguments));
onRemove.call(this);
this.addEventListener(type, this[name] = l, l.$ = capture);
l._ = listener;
}
function removeAll() {
var re = new RegExp("^__on([^.]+)" + d3.requote(type) + "$"), match;
for (var name in this) {
if (match = name.match(re)) {
var l = this[name];
this.removeEventListener(match[1], l, l.$);
delete this[name];
}
}
}
return i ? listener ? onAdd : onRemove : listener ? d3_noop : removeAll;
}
var d3_selection_onFilters = d3.map({
mouseenter: "mouseover",
mouseleave: "mouseout"
});
d3_selection_onFilters.forEach(function(k) {
if ("on" + k in d3_document) d3_selection_onFilters.remove(k);
});
function d3_selection_onListener(listener, argumentz) {
return function(e) {
var o = d3.event;
d3.event = e;
argumentz[0] = this.__data__;
try {
listener.apply(this, argumentz);
} finally {
d3.event = o;
}
};
}
function d3_selection_onFilter(listener, argumentz) {
var l = d3_selection_onListener(listener, argumentz);
return function(e) {
var target = this, related = e.relatedTarget;
if (!related || related !== target && !(related.compareDocumentPosition(target) & 8)) {
l.call(target, e);
}
};
}
var d3_event_dragSelect = d3_vendorSymbol(d3_documentElement.style, "userSelect"), d3_event_dragId = 0;
function d3_event_dragSuppress() {
var name = ".dragsuppress-" + ++d3_event_dragId, touchmove = "touchmove" + name, selectstart = "selectstart" + name, dragstart = "dragstart" + name, click = "click" + name, w = d3.select(d3_window).on(touchmove, d3_eventPreventDefault).on(selectstart, d3_eventPreventDefault).on(dragstart, d3_eventPreventDefault), style = d3_documentElement.style, select = style[d3_event_dragSelect];
style[d3_event_dragSelect] = "none";
return function(suppressClick) {
w.on(name, null);
style[d3_event_dragSelect] = select;
if (suppressClick) {
function off() {
w.on(click, null);
}
w.on(click, function() {
d3_eventPreventDefault();
off();
}, true);
setTimeout(off, 0);
}
};
}
d3.mouse = function(container) {
return d3_mousePoint(container, d3_eventSource());
};
var d3_mouse_bug44083 = /WebKit/.test(d3_window.navigator.userAgent) ? -1 : 0;
function d3_mousePoint(container, e) {
if (e.changedTouches) e = e.changedTouches[0];
var svg = container.ownerSVGElement || container;
if (svg.createSVGPoint) {
var point = svg.createSVGPoint();
if (d3_mouse_bug44083 < 0 && (d3_window.scrollX || d3_window.scrollY)) {
svg = d3.select("body").append("svg").style({
position: "absolute",
top: 0,
left: 0,
margin: 0,
padding: 0,
border: "none"
}, "important");
var ctm = svg[0][0].getScreenCTM();
d3_mouse_bug44083 = !(ctm.f || ctm.e);
svg.remove();
}
if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY; else point.x = e.clientX,
point.y = e.clientY;
point = point.matrixTransform(container.getScreenCTM().inverse());
return [ point.x, point.y ];
}
var rect = container.getBoundingClientRect();
return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ];
}
d3.touches = function(container, touches) {
if (arguments.length < 2) touches = d3_eventSource().touches;
return touches ? d3_array(touches).map(function(touch) {
var point = d3_mousePoint(container, touch);
point.identifier = touch.identifier;
return point;
}) : [];
};
d3.behavior.drag = function() {
var event = d3_eventDispatch(drag, "drag", "dragstart", "dragend"), origin = null, mousedown = dragstart(d3_noop, d3.mouse, "mousemove", "mouseup"), touchstart = dragstart(touchid, touchposition, "touchmove", "touchend");
function drag() {
this.on("mousedown.drag", mousedown).on("touchstart.drag", touchstart);
}
function touchid() {
return d3.event.changedTouches[0].identifier;
}
function touchposition(parent, id) {
return d3.touches(parent).filter(function(p) {
return p.identifier === id;
})[0];
}
function dragstart(id, position, move, end) {
return function() {
var target = this, parent = target.parentNode, event_ = event.of(target, arguments), eventTarget = d3.event.target, eventId = id(), drag = eventId == null ? "drag" : "drag-" + eventId, origin_ = position(parent, eventId), dragged = 0, offset, w = d3.select(d3_window).on(move + "." + drag, moved).on(end + "." + drag, ended), dragRestore = d3_event_dragSuppress();
if (origin) {
offset = origin.apply(target, arguments);
offset = [ offset.x - origin_[0], offset.y - origin_[1] ];
} else {
offset = [ 0, 0 ];
}
event_({
type: "dragstart"
});
function moved() {
if (!parent) return ended();
var p = position(parent, eventId), dx = p[0] - origin_[0], dy = p[1] - origin_[1];
dragged |= dx | dy;
origin_ = p;
event_({
type: "drag",
x: p[0] + offset[0],
y: p[1] + offset[1],
dx: dx,
dy: dy
});
}
function ended() {
w.on(move + "." + drag, null).on(end + "." + drag, null);
dragRestore(dragged && d3.event.target === eventTarget);
event_({
type: "dragend"
});
}
};
}
drag.origin = function(x) {
if (!arguments.length) return origin;
origin = x;
return drag;
};
return d3.rebind(drag, event, "on");
};
var π = Math.PI, ε = 1e-6, ε2 = ε * ε, d3_radians = π / 180, d3_degrees = 180 / π;
function d3_sgn(x) {
return x > 0 ? 1 : x < 0 ? -1 : 0;
}
function d3_acos(x) {
return x > 1 ? 0 : x < -1 ? π : Math.acos(x);
}
function d3_asin(x) {
return x > 1 ? π / 2 : x < -1 ? -π / 2 : Math.asin(x);
}
function d3_sinh(x) {
return (Math.exp(x) - Math.exp(-x)) / 2;
}
function d3_cosh(x) {
return (Math.exp(x) + Math.exp(-x)) / 2;
}
function d3_tanh(x) {
return d3_sinh(x) / d3_cosh(x);
}
function d3_haversin(x) {
return (x = Math.sin(x / 2)) * x;
}
var ρ = Math.SQRT2, ρ2 = 2, ρ4 = 4;
d3.interpolateZoom = function(p0, p1) {
var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2];
var dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + ρ4 * d2) / (2 * w0 * ρ2 * d1), b1 = (w1 * w1 - w0 * w0 - ρ4 * d2) / (2 * w1 * ρ2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1), dr = r1 - r0, S = (dr || Math.log(w1 / w0)) / ρ;
function interpolate(t) {
var s = t * S;
if (dr) {
var coshr0 = d3_cosh(r0), u = w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0));
return [ ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / d3_cosh(ρ * s + r0) ];
}
return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(ρ * s) ];
}
interpolate.duration = S * 1e3;
return interpolate;
};
d3.behavior.zoom = function() {
var view = {
x: 0,
y: 0,
k: 1
}, translate0, center, size = [ 960, 500 ], scaleExtent = d3_behavior_zoomInfinity, mousedown = "mousedown.zoom", mousemove = "mousemove.zoom", mouseup = "mouseup.zoom", mousewheelTimer, touchstart = "touchstart.zoom", touchtime, event = d3_eventDispatch(zoom, "zoomstart", "zoom", "zoomend"), x0, x1, y0, y1;
function zoom(g) {
g.on(mousedown, mousedowned).on(d3_behavior_zoomWheel + ".zoom", mousewheeled).on(mousemove, mousewheelreset).on("dblclick.zoom", dblclicked).on(touchstart, touchstarted);
}
zoom.event = function(g) {
g.each(function() {
var event_ = event.of(this, arguments), view1 = view;
if (d3_transitionInheritId) {
d3.select(this).transition().each("start.zoom", function() {
view = this.__chart__ || {
x: 0,
y: 0,
k: 1
};
zoomstarted(event_);
}).tween("zoom:zoom", function() {
var dx = size[0], dy = size[1], cx = dx / 2, cy = dy / 2, i = d3.interpolateZoom([ (cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k ], [ (cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k ]);
return function(t) {
var l = i(t), k = dx / l[2];
this.__chart__ = view = {
x: cx - l[0] * k,
y: cy - l[1] * k,
k: k
};
zoomed(event_);
};
}).each("end.zoom", function() {
zoomended(event_);
});
} else {
this.__chart__ = view;
zoomstarted(event_);
zoomed(event_);
zoomended(event_);
}
});
};
zoom.translate = function(_) {
if (!arguments.length) return [ view.x, view.y ];
view = {
x: +_[0],
y: +_[1],
k: view.k
};
rescale();
return zoom;
};
zoom.scale = function(_) {
if (!arguments.length) return view.k;
view = {
x: view.x,
y: view.y,
k: +_
};
rescale();
return zoom;
};
zoom.scaleExtent = function(_) {
if (!arguments.length) return scaleExtent;
scaleExtent = _ == null ? d3_behavior_zoomInfinity : [ +_[0], +_[1] ];
return zoom;
};
zoom.center = function(_) {
if (!arguments.length) return center;
center = _ && [ +_[0], +_[1] ];
return zoom;
};
zoom.size = function(_) {
if (!arguments.length) return size;
size = _ && [ +_[0], +_[1] ];
return zoom;
};
zoom.x = function(z) {
if (!arguments.length) return x1;
x1 = z;
x0 = z.copy();
view = {
x: 0,
y: 0,
k: 1
};
return zoom;
};
zoom.y = function(z) {
if (!arguments.length) return y1;
y1 = z;
y0 = z.copy();
view = {
x: 0,
y: 0,
k: 1
};
return zoom;
};
function location(p) {
return [ (p[0] - view.x) / view.k, (p[1] - view.y) / view.k ];
}
function point(l) {
return [ l[0] * view.k + view.x, l[1] * view.k + view.y ];
}
function scaleTo(s) {
view.k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s));
}
function translateTo(p, l) {
l = point(l);
view.x += p[0] - l[0];
view.y += p[1] - l[1];
}
function rescale() {
if (x1) x1.domain(x0.range().map(function(x) {
return (x - view.x) / view.k;
}).map(x0.invert));
if (y1) y1.domain(y0.range().map(function(y) {
return (y - view.y) / view.k;
}).map(y0.invert));
}
function zoomstarted(event) {
event({
type: "zoomstart"
});
}
function zoomed(event) {
rescale();
event({
type: "zoom",
scale: view.k,
translate: [ view.x, view.y ]
});
}
function zoomended(event) {
event({
type: "zoomend"
});
}
function mousedowned() {
var target = this, event_ = event.of(target, arguments), eventTarget = d3.event.target, dragged = 0, w = d3.select(d3_window).on(mousemove, moved).on(mouseup, ended), l = location(d3.mouse(target)), dragRestore = d3_event_dragSuppress();
d3_selection_interrupt.call(target);
zoomstarted(event_);
function moved() {
dragged = 1;
translateTo(d3.mouse(target), l);
zoomed(event_);
}
function ended() {
w.on(mousemove, d3_window === target ? mousewheelreset : null).on(mouseup, null);
dragRestore(dragged && d3.event.target === eventTarget);
zoomended(event_);
}
}
function touchstarted() {
var target = this, event_ = event.of(target, arguments), locations0 = {}, distance0 = 0, scale0, eventId = d3.event.changedTouches[0].identifier, touchmove = "touchmove.zoom-" + eventId, touchend = "touchend.zoom-" + eventId, w = d3.select(d3_window).on(touchmove, moved).on(touchend, ended), t = d3.select(target).on(mousedown, null).on(touchstart, started), dragRestore = d3_event_dragSuppress();
d3_selection_interrupt.call(target);
started();
zoomstarted(event_);
function relocate() {
var touches = d3.touches(target);
scale0 = view.k;
touches.forEach(function(t) {
if (t.identifier in locations0) locations0[t.identifier] = location(t);
});
return touches;
}
function started() {
var changed = d3.event.changedTouches;
for (var i = 0, n = changed.length; i < n; ++i) {
locations0[changed[i].identifier] = null;
}
var touches = relocate(), now = Date.now();
if (touches.length === 1) {
if (now - touchtime < 500) {
var p = touches[0], l = locations0[p.identifier];
scaleTo(view.k * 2);
translateTo(p, l);
d3_eventPreventDefault();
zoomed(event_);
}
touchtime = now;
} else if (touches.length > 1) {
var p = touches[0], q = touches[1], dx = p[0] - q[0], dy = p[1] - q[1];
distance0 = dx * dx + dy * dy;
}
}
function moved() {
var touches = d3.touches(target), p0, l0, p1, l1;
for (var i = 0, n = touches.length; i < n; ++i, l1 = null) {
p1 = touches[i];
if (l1 = locations0[p1.identifier]) {
if (l0) break;
p0 = p1, l0 = l1;
}
}
if (l1) {
var distance1 = (distance1 = p1[0] - p0[0]) * distance1 + (distance1 = p1[1] - p0[1]) * distance1, scale1 = distance0 && Math.sqrt(distance1 / distance0);
p0 = [ (p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2 ];
l0 = [ (l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2 ];
scaleTo(scale1 * scale0);
}
touchtime = null;
translateTo(p0, l0);
zoomed(event_);
}
function ended() {
if (d3.event.touches.length) {
var changed = d3.event.changedTouches;
for (var i = 0, n = changed.length; i < n; ++i) {
delete locations0[changed[i].identifier];
}
for (var identifier in locations0) {
return void relocate();
}
}
w.on(touchmove, null).on(touchend, null);
t.on(mousedown, mousedowned).on(touchstart, touchstarted);
dragRestore();
zoomended(event_);
}
}
function mousewheeled() {
var event_ = event.of(this, arguments);
if (mousewheelTimer) clearTimeout(mousewheelTimer); else d3_selection_interrupt.call(this),
zoomstarted(event_);
mousewheelTimer = setTimeout(function() {
mousewheelTimer = null;
zoomended(event_);
}, 50);
d3_eventPreventDefault();
var point = center || d3.mouse(this);
if (!translate0) translate0 = location(point);
scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * view.k);
translateTo(point, translate0);
zoomed(event_);
}
function mousewheelreset() {
translate0 = null;
}
function dblclicked() {
var event_ = event.of(this, arguments), p = d3.mouse(this), l = location(p), k = Math.log(view.k) / Math.LN2;
zoomstarted(event_);
scaleTo(Math.pow(2, d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1));
translateTo(p, l);
zoomed(event_);
zoomended(event_);
}
return d3.rebind(zoom, event, "on");
};
var d3_behavior_zoomInfinity = [ 0, Infinity ];
var d3_behavior_zoomDelta, d3_behavior_zoomWheel = "onwheel" in d3_document ? (d3_behavior_zoomDelta = function() {
return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1);
}, "wheel") : "onmousewheel" in d3_document ? (d3_behavior_zoomDelta = function() {
return d3.event.wheelDelta;
}, "mousewheel") : (d3_behavior_zoomDelta = function() {
return -d3.event.detail;
}, "MozMousePixelScroll");
function d3_Color() {}
d3_Color.prototype.toString = function() {
return this.rgb() + "";
};
d3.hsl = function(h, s, l) {
return arguments.length === 1 ? h instanceof d3_Hsl ? d3_hsl(h.h, h.s, h.l) : d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl) : d3_hsl(+h, +s, +l);
};
function d3_hsl(h, s, l) {
return new d3_Hsl(h, s, l);
}
function d3_Hsl(h, s, l) {
this.h = h;
this.s = s;
this.l = l;
}
var d3_hslPrototype = d3_Hsl.prototype = new d3_Color();
d3_hslPrototype.brighter = function(k) {
k = Math.pow(.7, arguments.length ? k : 1);
return d3_hsl(this.h, this.s, this.l / k);
};
d3_hslPrototype.darker = function(k) {
k = Math.pow(.7, arguments.length ? k : 1);
return d3_hsl(this.h, this.s, k * this.l);
};
d3_hslPrototype.rgb = function() {
return d3_hsl_rgb(this.h, this.s, this.l);
};
function d3_hsl_rgb(h, s, l) {
var m1, m2;
h = isNaN(h) ? 0 : (h %= 360) < 0 ? h + 360 : h;
s = isNaN(s) ? 0 : s < 0 ? 0 : s > 1 ? 1 : s;
l = l < 0 ? 0 : l > 1 ? 1 : l;
m2 = l <= .5 ? l * (1 + s) : l + s - l * s;
m1 = 2 * l - m2;
function v(h) {
if (h > 360) h -= 360; else if (h < 0) h += 360;
if (h < 60) return m1 + (m2 - m1) * h / 60;
if (h < 180) return m2;
if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60;
return m1;
}
function vv(h) {
return Math.round(v(h) * 255);
}
return d3_rgb(vv(h + 120), vv(h), vv(h - 120));
}
d3.hcl = function(h, c, l) {
return arguments.length === 1 ? h instanceof d3_Hcl ? d3_hcl(h.h, h.c, h.l) : h instanceof d3_Lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : d3_hcl(+h, +c, +l);
};
function d3_hcl(h, c, l) {
return new d3_Hcl(h, c, l);
}
function d3_Hcl(h, c, l) {
this.h = h;
this.c = c;
this.l = l;
}
var d3_hclPrototype = d3_Hcl.prototype = new d3_Color();
d3_hclPrototype.brighter = function(k) {
return d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)));
};
d3_hclPrototype.darker = function(k) {
return d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)));
};
d3_hclPrototype.rgb = function() {
return d3_hcl_lab(this.h, this.c, this.l).rgb();
};
function d3_hcl_lab(h, c, l) {
if (isNaN(h)) h = 0;
if (isNaN(c)) c = 0;
return d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c);
}
d3.lab = function(l, a, b) {
return arguments.length === 1 ? l instanceof d3_Lab ? d3_lab(l.l, l.a, l.b) : l instanceof d3_Hcl ? d3_hcl_lab(l.l, l.c, l.h) : d3_rgb_lab((l = d3.rgb(l)).r, l.g, l.b) : d3_lab(+l, +a, +b);
};
function d3_lab(l, a, b) {
return new d3_Lab(l, a, b);
}
function d3_Lab(l, a, b) {
this.l = l;
this.a = a;
this.b = b;
}
var d3_lab_K = 18;
var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883;
var d3_labPrototype = d3_Lab.prototype = new d3_Color();
d3_labPrototype.brighter = function(k) {
return d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);
};
d3_labPrototype.darker = function(k) {
return d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);
};
d3_labPrototype.rgb = function() {
return d3_lab_rgb(this.l, this.a, this.b);
};
function d3_lab_rgb(l, a, b) {
var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200;
x = d3_lab_xyz(x) * d3_lab_X;
y = d3_lab_xyz(y) * d3_lab_Y;
z = d3_lab_xyz(z) * d3_lab_Z;
return d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z));
}
function d3_lab_hcl(l, a, b) {
return l > 0 ? d3_hcl(Math.atan2(b, a) * d3_degrees, Math.sqrt(a * a + b * b), l) : d3_hcl(NaN, NaN, l);
}
function d3_lab_xyz(x) {
return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037;
}
function d3_xyz_lab(x) {
return x > .008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29;
}
function d3_xyz_rgb(r) {
return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055));
}
d3.rgb = function(r, g, b) {
return arguments.length === 1 ? r instanceof d3_Rgb ? d3_rgb(r.r, r.g, r.b) : d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb) : d3_rgb(~~r, ~~g, ~~b);
};
function d3_rgbNumber(value) {
return d3_rgb(value >> 16, value >> 8 & 255, value & 255);
}
function d3_rgbString(value) {
return d3_rgbNumber(value) + "";
}
function d3_rgb(r, g, b) {
return new d3_Rgb(r, g, b);
}
function d3_Rgb(r, g, b) {
this.r = r;
this.g = g;
this.b = b;
}
var d3_rgbPrototype = d3_Rgb.prototype = new d3_Color();
d3_rgbPrototype.brighter = function(k) {
k = Math.pow(.7, arguments.length ? k : 1);
var r = this.r, g = this.g, b = this.b, i = 30;
if (!r && !g && !b) return d3_rgb(i, i, i);
if (r && r < i) r = i;
if (g && g < i) g = i;
if (b && b < i) b = i;
return d3_rgb(Math.min(255, ~~(r / k)), Math.min(255, ~~(g / k)), Math.min(255, ~~(b / k)));
};
d3_rgbPrototype.darker = function(k) {
k = Math.pow(.7, arguments.length ? k : 1);
return d3_rgb(~~(k * this.r), ~~(k * this.g), ~~(k * this.b));
};
d3_rgbPrototype.hsl = function() {
return d3_rgb_hsl(this.r, this.g, this.b);
};
d3_rgbPrototype.toString = function() {
return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);
};
function d3_rgb_hex(v) {
return v < 16 ? "0" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16);
}
function d3_rgb_parse(format, rgb, hsl) {
var r = 0, g = 0, b = 0, m1, m2, name;
m1 = /([a-z]+)\((.*)\)/i.exec(format);
if (m1) {
m2 = m1[2].split(",");
switch (m1[1]) {
case "hsl":
{
return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100);
}
case "rgb":
{
return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2]));
}
}
}
if (name = d3_rgb_names.get(format)) return rgb(name.r, name.g, name.b);
if (format != null && format.charAt(0) === "#") {
if (format.length === 4) {
r = format.charAt(1);
r += r;
g = format.charAt(2);
g += g;
b = format.charAt(3);
b += b;
} else if (format.length === 7) {
r = format.substring(1, 3);
g = format.substring(3, 5);
b = format.substring(5, 7);
}
r = parseInt(r, 16);
g = parseInt(g, 16);
b = parseInt(b, 16);
}
return rgb(r, g, b);
}
function d3_rgb_hsl(r, g, b) {
var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2;
if (d) {
s = l < .5 ? d / (max + min) : d / (2 - max - min);
if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4;
h *= 60;
} else {
h = NaN;
s = l > 0 && l < 1 ? 0 : h;
}
return d3_hsl(h, s, l);
}
function d3_rgb_lab(r, g, b) {
r = d3_rgb_xyz(r);
g = d3_rgb_xyz(g);
b = d3_rgb_xyz(b);
var x = d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X), y = d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y), z = d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z);
return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z));
}
function d3_rgb_xyz(r) {
return (r /= 255) <= .04045 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4);
}
function d3_rgb_parseNumber(c) {
var f = parseFloat(c);
return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f;
}
var d3_rgb_names = d3.map({
aliceblue: 15792383,
antiquewhite: 16444375,
aqua: 65535,
aquamarine: 8388564,
azure: 15794175,
beige: 16119260,
bisque: 16770244,
black: 0,
blanchedalmond: 16772045,
blue: 255,
blueviolet: 9055202,
brown: 10824234,
burlywood: 14596231,
cadetblue: 6266528,
chartreuse: 8388352,
chocolate: 13789470,
coral: 16744272,
cornflowerblue: 6591981,
cornsilk: 16775388,
crimson: 14423100,
cyan: 65535,
darkblue: 139,
darkcyan: 35723,
darkgoldenrod: 12092939,
darkgray: 11119017,
darkgreen: 25600,
darkgrey: 11119017,
darkkhaki: 12433259,
darkmagenta: 9109643,
darkolivegreen: 5597999,
darkorange: 16747520,
darkorchid: 10040012,
darkred: 9109504,
darksalmon: 15308410,
darkseagreen: 9419919,
darkslateblue: 4734347,
darkslategray: 3100495,
darkslategrey: 3100495,
darkturquoise: 52945,
darkviolet: 9699539,
deeppink: 16716947,
deepskyblue: 49151,
dimgray: 6908265,
dimgrey: 6908265,
dodgerblue: 2003199,
firebrick: 11674146,
floralwhite: 16775920,
forestgreen: 2263842,
fuchsia: 16711935,
gainsboro: 14474460,
ghostwhite: 16316671,
gold: 16766720,
goldenrod: 14329120,
gray: 8421504,
green: 32768,
greenyellow: 11403055,
grey: 8421504,
honeydew: 15794160,
hotpink: 16738740,
indianred: 13458524,
indigo: 4915330,
ivory: 16777200,
khaki: 15787660,
lavender: 15132410,
lavenderblush: 16773365,
lawngreen: 8190976,
lemonchiffon: 16775885,
lightblue: 11393254,
lightcoral: 15761536,
lightcyan: 14745599,
lightgoldenrodyellow: 16448210,
lightgray: 13882323,
lightgreen: 9498256,
lightgrey: 13882323,
lightpink: 16758465,
lightsalmon: 16752762,
lightseagreen: 2142890,
lightskyblue: 8900346,
lightslategray: 7833753,
lightslategrey: 7833753,
lightsteelblue: 11584734,
lightyellow: 16777184,
lime: 65280,
limegreen: 3329330,
linen: 16445670,
magenta: 16711935,
maroon: 8388608,
mediumaquamarine: 6737322,
mediumblue: 205,
mediumorchid: 12211667,
mediumpurple: 9662683,
mediumseagreen: 3978097,
mediumslateblue: 8087790,
mediumspringgreen: 64154,
mediumturquoise: 4772300,
mediumvioletred: 13047173,
midnightblue: 1644912,
mintcream: 16121850,
mistyrose: 16770273,
moccasin: 16770229,
navajowhite: 16768685,
navy: 128,
oldlace: 16643558,
olive: 8421376,
olivedrab: 7048739,
orange: 16753920,
orangered: 16729344,
orchid: 14315734,
palegoldenrod: 15657130,
palegreen: 10025880,
paleturquoise: 11529966,
palevioletred: 14381203,
papayawhip: 16773077,
peachpuff: 16767673,
peru: 13468991,
pink: 16761035,
plum: 14524637,
powderblue: 11591910,
purple: 8388736,
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
});
d3_rgb_names.forEach(function(key, value) {
d3_rgb_names.set(key, d3_rgbNumber(value));
});
function d3_functor(v) {
return typeof v === "function" ? v : function() {
return v;
};
}
d3.functor = d3_functor;
function d3_identity(d) {
return d;
}
d3.xhr = d3_xhrType(d3_identity);
function d3_xhrType(response) {
return function(url, mimeType, callback) {
if (arguments.length === 2 && typeof mimeType === "function") callback = mimeType,
mimeType = null;
return d3_xhr(url, mimeType, response, callback);
};
}
function d3_xhr(url, mimeType, response, callback) {
var xhr = {}, dispatch = d3.dispatch("beforesend", "progress", "load", "error"), headers = {}, request = new XMLHttpRequest(), responseType = null;
if (d3_window.XDomainRequest && !("withCredentials" in request) && /^(http(s)?:)?\/\//.test(url)) request = new XDomainRequest();
"onload" in request ? request.onload = request.onerror = respond : request.onreadystatechange = function() {
request.readyState > 3 && respond();
};
function respond() {
var status = request.status, result;
if (!status && request.responseText || status >= 200 && status < 300 || status === 304) {
try {
result = response.call(xhr, request);
} catch (e) {
dispatch.error.call(xhr, e);
return;
}
dispatch.load.call(xhr, result);
} else {
dispatch.error.call(xhr, request);
}
}
request.onprogress = function(event) {
var o = d3.event;
d3.event = event;
try {
dispatch.progress.call(xhr, request);
} finally {
d3.event = o;
}
};
xhr.header = function(name, value) {
name = (name + "").toLowerCase();
if (arguments.length < 2) return headers[name];
if (value == null) delete headers[name]; else headers[name] = value + "";
return xhr;
};
xhr.mimeType = function(value) {
if (!arguments.length) return mimeType;
mimeType = value == null ? null : value + "";
return xhr;
};
xhr.responseType = function(value) {
if (!arguments.length) return responseType;
responseType = value;
return xhr;
};
xhr.response = function(value) {
response = value;
return xhr;
};
[ "get", "post" ].forEach(function(method) {
xhr[method] = function() {
return xhr.send.apply(xhr, [ method ].concat(d3_array(arguments)));
};
});
xhr.send = function(method, data, callback) {
if (arguments.length === 2 && typeof data === "function") callback = data, data = null;
request.open(method, url, true);
if (mimeType != null && !("accept" in headers)) headers["accept"] = mimeType + ",*/*";
if (request.setRequestHeader) for (var name in headers) request.setRequestHeader(name, headers[name]);
if (mimeType != null && request.overrideMimeType) request.overrideMimeType(mimeType);
if (responseType != null) request.responseType = responseType;
if (callback != null) xhr.on("error", callback).on("load", function(request) {
callback(null, request);
});
dispatch.beforesend.call(xhr, request);
request.send(data == null ? null : data);
return xhr;
};
xhr.abort = function() {
request.abort();
return xhr;
};
d3.rebind(xhr, dispatch, "on");
return callback == null ? xhr : xhr.get(d3_xhr_fixCallback(callback));
}
function d3_xhr_fixCallback(callback) {
return callback.length === 1 ? function(error, request) {
callback(error == null ? request : null);
} : callback;
}
d3.dsv = function(delimiter, mimeType) {
var reFormat = new RegExp('["' + delimiter + "\n]"), delimiterCode = delimiter.charCodeAt(0);
function dsv(url, row, callback) {
if (arguments.length < 3) callback = row, row = null;
var xhr = d3.xhr(url, mimeType, callback);
xhr.row = function(_) {
return arguments.length ? xhr.response((row = _) == null ? response : typedResponse(_)) : row;
};
return xhr.row(row);
}
function response(request) {
return dsv.parse(request.responseText);
}
function typedResponse(f) {
return function(request) {
return dsv.parse(request.responseText, f);
};
}
dsv.parse = function(text, f) {
var o;
return dsv.parseRows(text, function(row, i) {
if (o) return o(row, i - 1);
var a = new Function("d", "return {" + row.map(function(name, i) {
return JSON.stringify(name) + ": d[" + i + "]";
}).join(",") + "}");
o = f ? function(row, i) {
return f(a(row), i);
} : a;
});
};
dsv.parseRows = function(text, f) {
var EOL = {}, EOF = {}, rows = [], N = text.length, I = 0, n = 0, t, eol;
function token() {
if (I >= N) return EOF;
if (eol) return eol = false, EOL;
var j = I;
if (text.charCodeAt(j) === 34) {
var i = j;
while (i++ < N) {
if (text.charCodeAt(i) === 34) {
if (text.charCodeAt(i + 1) !== 34) break;
++i;
}
}
I = i + 2;
var c = text.charCodeAt(i + 1);
if (c === 13) {
eol = true;
if (text.charCodeAt(i + 2) === 10) ++I;
} else if (c === 10) {
eol = true;
}
return text.substring(j + 1, i).replace(/""/g, '"');
}
while (I < N) {
var c = text.charCodeAt(I++), k = 1;
if (c === 10) eol = true; else if (c === 13) {
eol = true;
if (text.charCodeAt(I) === 10) ++I, ++k;
} else if (c !== delimiterCode) continue;
return text.substring(j, I - k);
}
return text.substring(j);
}
while ((t = token()) !== EOF) {
var a = [];
while (t !== EOL && t !== EOF) {
a.push(t);
t = token();
}
if (f && !(a = f(a, n++))) continue;
rows.push(a);
}
return rows;
};
dsv.format = function(rows) {
if (Array.isArray(rows[0])) return dsv.formatRows(rows);
var fieldSet = new d3_Set(), fields = [];
rows.forEach(function(row) {
for (var field in row) {
if (!fieldSet.has(field)) {
fields.push(fieldSet.add(field));
}
}
});
return [ fields.map(formatValue).join(delimiter) ].concat(rows.map(function(row) {
return fields.map(function(field) {
return formatValue(row[field]);
}).join(delimiter);
})).join("\n");
};
dsv.formatRows = function(rows) {
return rows.map(formatRow).join("\n");
};
function formatRow(row) {
return row.map(formatValue).join(delimiter);
}
function formatValue(text) {
return reFormat.test(text) ? '"' + text.replace(/\"/g, '""') + '"' : text;
}
return dsv;
};
d3.csv = d3.dsv(",", "text/csv");
d3.tsv = d3.dsv(" ", "text/tab-separated-values");
var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, d3_timer_timeout, d3_timer_active, d3_timer_frame = d3_window[d3_vendorSymbol(d3_window, "requestAnimationFrame")] || function(callback) {
setTimeout(callback, 17);
};
d3.timer = function(callback, delay, then) {
var n = arguments.length;
if (n < 2) delay = 0;
if (n < 3) then = Date.now();
var time = then + delay, timer = {
callback: callback,
time: time,
next: null
};
if (d3_timer_queueTail) d3_timer_queueTail.next = timer; else d3_timer_queueHead = timer;
d3_timer_queueTail = timer;
if (!d3_timer_interval) {
d3_timer_timeout = clearTimeout(d3_timer_timeout);
d3_timer_interval = 1;
d3_timer_frame(d3_timer_step);
}
};
function d3_timer_step() {
var now = d3_timer_mark(), delay = d3_timer_sweep() - now;
if (delay > 24) {
if (isFinite(delay)) {
clearTimeout(d3_timer_timeout);
d3_timer_timeout = setTimeout(d3_timer_step, delay);
}
d3_timer_interval = 0;
} else {
d3_timer_interval = 1;
d3_timer_frame(d3_timer_step);
}
}
d3.timer.flush = function() {
d3_timer_mark();
d3_timer_sweep();
};
function d3_timer_replace(callback, delay, then) {
var n = arguments.length;
if (n < 2) delay = 0;
if (n < 3) then = Date.now();
d3_timer_active.callback = callback;
d3_timer_active.time = then + delay;
}
function d3_timer_mark() {
var now = Date.now();
d3_timer_active = d3_timer_queueHead;
while (d3_timer_active) {
if (now >= d3_timer_active.time) d3_timer_active.flush = d3_timer_active.callback(now - d3_timer_active.time);
d3_timer_active = d3_timer_active.next;
}
return now;
}
function d3_timer_sweep() {
var t0, t1 = d3_timer_queueHead, time = Infinity;
while (t1) {
if (t1.flush) {
t1 = t0 ? t0.next = t1.next : d3_timer_queueHead = t1.next;
} else {
if (t1.time < time) time = t1.time;
t1 = (t0 = t1).next;
}
}
d3_timer_queueTail = t0;
return time;
}
var d3_format_decimalPoint = ".", d3_format_thousandsSeparator = ",", d3_format_grouping = [ 3, 3 ], d3_format_currencySymbol = "$";
var d3_formatPrefixes = [ "y", "z", "a", "f", "p", "n", "µ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y" ].map(d3_formatPrefix);
d3.formatPrefix = function(value, precision) {
var i = 0;
if (value) {
if (value < 0) value *= -1;
if (precision) value = d3.round(value, d3_format_precision(value, precision));
i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10);
i = Math.max(-24, Math.min(24, Math.floor((i <= 0 ? i + 1 : i - 1) / 3) * 3));
}
return d3_formatPrefixes[8 + i / 3];
};
function d3_formatPrefix(d, i) {
var k = Math.pow(10, Math.abs(8 - i) * 3);
return {
scale: i > 8 ? function(d) {
return d / k;
} : function(d) {
return d * k;
},
symbol: d
};
}
d3.round = function(x, n) {
return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x);
};
d3.format = function(specifier) {
var match = d3_format_re.exec(specifier), fill = match[1] || " ", align = match[2] || ">", sign = match[3] || "", symbol = match[4] || "", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, suffix = "", integer = false;
if (precision) precision = +precision.substring(1);
if (zfill || fill === "0" && align === "=") {
zfill = fill = "0";
align = "=";
if (comma) width -= Math.floor((width - 1) / 4);
}
switch (type) {
case "n":
comma = true;
type = "g";
break;
case "%":
scale = 100;
suffix = "%";
type = "f";
break;
case "p":
scale = 100;
suffix = "%";
type = "r";
break;
case "b":
case "o":
case "x":
case "X":
if (symbol === "#") symbol = "0" + type.toLowerCase();
case "c":
case "d":
integer = true;
precision = 0;
break;
case "s":
scale = -1;
type = "r";
break;
}
if (symbol === "#") symbol = ""; else if (symbol === "$") symbol = d3_format_currencySymbol;
if (type == "r" && !precision) type = "g";
if (precision != null) {
if (type == "g") precision = Math.max(1, Math.min(21, precision)); else if (type == "e" || type == "f") precision = Math.max(0, Math.min(20, precision));
}
type = d3_format_types.get(type) || d3_format_typeDefault;
var zcomma = zfill && comma;
return function(value) {
if (integer && value % 1) return "";
var negative = value < 0 || value === 0 && 1 / value < 0 ? (value = -value, "-") : sign;
if (scale < 0) {
var prefix = d3.formatPrefix(value, precision);
value = prefix.scale(value);
suffix = prefix.symbol;
} else {
value *= scale;
}
value = type(value, precision);
var i = value.lastIndexOf("."), before = i < 0 ? value : value.substring(0, i), after = i < 0 ? "" : d3_format_decimalPoint + value.substring(i + 1);
if (!zfill && comma) before = d3_format_group(before);
var length = symbol.length + before.length + after.length + (zcomma ? 0 : negative.length), padding = length < width ? new Array(length = width - length + 1).join(fill) : "";
if (zcomma) before = d3_format_group(padding + before);
negative += symbol;
value = before + after;
return (align === "<" ? negative + value + padding : align === ">" ? padding + negative + value : align === "^" ? padding.substring(0, length >>= 1) + negative + value + padding.substring(length) : negative + (zcomma ? value : padding + value)) + suffix;
};
};
var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i;
var d3_format_types = d3.map({
b: function(x) {
return x.toString(2);
},
c: function(x) {
return String.fromCharCode(x);
},
o: function(x) {
return x.toString(8);
},
x: function(x) {
return x.toString(16);
},
X: function(x) {
return x.toString(16).toUpperCase();
},
g: function(x, p) {
return x.toPrecision(p);
},
e: function(x, p) {
return x.toExponential(p);
},
f: function(x, p) {
return x.toFixed(p);
},
r: function(x, p) {
return (x = d3.round(x, d3_format_precision(x, p))).toFixed(Math.max(0, Math.min(20, d3_format_precision(x * (1 + 1e-15), p))));
}
});
function d3_format_precision(x, p) {
return p - (x ? Math.ceil(Math.log(x) / Math.LN10) : 1);
}
function d3_format_typeDefault(x) {
return x + "";
}
var d3_format_group = d3_identity;
if (d3_format_grouping) {
var d3_format_groupingLength = d3_format_grouping.length;
d3_format_group = function(value) {
var i = value.length, t = [], j = 0, g = d3_format_grouping[0];
while (i > 0 && g > 0) {
t.push(value.substring(i -= g, i + g));
g = d3_format_grouping[j = (j + 1) % d3_format_groupingLength];
}
return t.reverse().join(d3_format_thousandsSeparator);
};
}
d3.geo = {};
function d3_adder() {}
d3_adder.prototype = {
s: 0,
t: 0,
add: function(y) {
d3_adderSum(y, this.t, d3_adderTemp);
d3_adderSum(d3_adderTemp.s, this.s, this);
if (this.s) this.t += d3_adderTemp.t; else this.s = d3_adderTemp.t;
},
reset: function() {
this.s = this.t = 0;
},
valueOf: function() {
return this.s;
}
};
var d3_adderTemp = new d3_adder();
function d3_adderSum(a, b, o) {
var x = o.s = a + b, bv = x - a, av = x - bv;
o.t = a - av + (b - bv);
}
d3.geo.stream = function(object, listener) {
if (object && d3_geo_streamObjectType.hasOwnProperty(object.type)) {
d3_geo_streamObjectType[object.type](object, listener);
} else {
d3_geo_streamGeometry(object, listener);
}
};
function d3_geo_streamGeometry(geometry, listener) {
if (geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)) {
d3_geo_streamGeometryType[geometry.type](geometry, listener);
}
}
var d3_geo_streamObjectType = {
Feature: function(feature, listener) {
d3_geo_streamGeometry(feature.geometry, listener);
},
FeatureCollection: function(object, listener) {
var features = object.features, i = -1, n = features.length;
while (++i < n) d3_geo_streamGeometry(features[i].geometry, listener);
}
};
var d3_geo_streamGeometryType = {
Sphere: function(object, listener) {
listener.sphere();
},
Point: function(object, listener) {
object = object.coordinates;
listener.point(object[0], object[1], object[2]);
},
MultiPoint: function(object, listener) {
var coordinates = object.coordinates, i = -1, n = coordinates.length;
while (++i < n) object = coordinates[i], listener.point(object[0], object[1], object[2]);
},
LineString: function(object, listener) {
d3_geo_streamLine(object.coordinates, listener, 0);
},
MultiLineString: function(object, listener) {
var coordinates = object.coordinates, i = -1, n = coordinates.length;
while (++i < n) d3_geo_streamLine(coordinates[i], listener, 0);
},
Polygon: function(object, listener) {
d3_geo_streamPolygon(object.coordinates, listener);
},
MultiPolygon: function(object, listener) {
var coordinates = object.coordinates, i = -1, n = coordinates.length;
while (++i < n) d3_geo_streamPolygon(coordinates[i], listener);
},
GeometryCollection: function(object, listener) {
var geometries = object.geometries, i = -1, n = geometries.length;
while (++i < n) d3_geo_streamGeometry(geometries[i], listener);
}
};
function d3_geo_streamLine(coordinates, listener, closed) {
var i = -1, n = coordinates.length - closed, coordinate;
listener.lineStart();
while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1], coordinate[2]);
listener.lineEnd();
}
function d3_geo_streamPolygon(coordinates, listener) {
var i = -1, n = coordinates.length;
listener.polygonStart();
while (++i < n) d3_geo_streamLine(coordinates[i], listener, 1);
listener.polygonEnd();
}
d3.geo.area = function(object) {
d3_geo_areaSum = 0;
d3.geo.stream(object, d3_geo_area);
return d3_geo_areaSum;
};
var d3_geo_areaSum, d3_geo_areaRingSum = new d3_adder();
var d3_geo_area = {
sphere: function() {
d3_geo_areaSum += 4 * π;
},
point: d3_noop,
lineStart: d3_noop,
lineEnd: d3_noop,
polygonStart: function() {
d3_geo_areaRingSum.reset();
d3_geo_area.lineStart = d3_geo_areaRingStart;
},
polygonEnd: function() {
var area = 2 * d3_geo_areaRingSum;
d3_geo_areaSum += area < 0 ? 4 * π + area : area;
d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop;
}
};
function d3_geo_areaRingStart() {
var λ00, φ00, λ0, cosφ0, sinφ0;
d3_geo_area.point = function(λ, φ) {
d3_geo_area.point = nextPoint;
λ0 = (λ00 = λ) * d3_radians, cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4),
sinφ0 = Math.sin(φ);
};
function nextPoint(λ, φ) {
λ *= d3_radians;
φ = φ * d3_radians / 2 + π / 4;
var dλ = λ - λ0, cosφ = Math.cos(φ), sinφ = Math.sin(φ), k = sinφ0 * sinφ, u = cosφ0 * cosφ + k * Math.cos(dλ), v = k * Math.sin(dλ);
d3_geo_areaRingSum.add(Math.atan2(v, u));
λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ;
}
d3_geo_area.lineEnd = function() {
nextPoint(λ00, φ00);
};
}
function d3_geo_cartesian(spherical) {
var λ = spherical[0], φ = spherical[1], cosφ = Math.cos(φ);
return [ cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ) ];
}
function d3_geo_cartesianDot(a, b) {
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
}
function d3_geo_cartesianCross(a, b) {
return [ a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0] ];
}
function d3_geo_cartesianAdd(a, b) {
a[0] += b[0];
a[1] += b[1];
a[2] += b[2];
}
function d3_geo_cartesianScale(vector, k) {
return [ vector[0] * k, vector[1] * k, vector[2] * k ];
}
function d3_geo_cartesianNormalize(d) {
var l = Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
d[0] /= l;
d[1] /= l;
d[2] /= l;
}
function d3_geo_spherical(cartesian) {
return [ Math.atan2(cartesian[1], cartesian[0]), d3_asin(cartesian[2]) ];
}
function d3_geo_sphericalEqual(a, b) {
return Math.abs(a[0] - b[0]) < ε && Math.abs(a[1] - b[1]) < ε;
}
d3.geo.bounds = function() {
var λ0, φ0, λ1, φ1, λ_, λ__, φ__, p0, dλSum, ranges, range;
var bound = {
point: point,
lineStart: lineStart,
lineEnd: lineEnd,
polygonStart: function() {
bound.point = ringPoint;
bound.lineStart = ringStart;
bound.lineEnd = ringEnd;
dλSum = 0;
d3_geo_area.polygonStart();
},
polygonEnd: function() {
d3_geo_area.polygonEnd();
bound.point = point;
bound.lineStart = lineStart;
bound.lineEnd = lineEnd;
if (d3_geo_areaRingSum < 0) λ0 = -(λ1 = 180), φ0 = -(φ1 = 90); else if (dλSum > ε) φ1 = 90; else if (dλSum < -ε) φ0 = -90;
range[0] = λ0, range[1] = λ1;
}
};
function point(λ, φ) {
ranges.push(range = [ λ0 = λ, λ1 = λ ]);
if (φ < φ0) φ0 = φ;
if (φ > φ1) φ1 = φ;
}
function linePoint(λ, φ) {
var p = d3_geo_cartesian([ λ * d3_radians, φ * d3_radians ]);
if (p0) {
var normal = d3_geo_cartesianCross(p0, p), equatorial = [ normal[1], -normal[0], 0 ], inflection = d3_geo_cartesianCross(equatorial, normal);
d3_geo_cartesianNormalize(inflection);
inflection = d3_geo_spherical(inflection);
var dλ = λ - λ_, s = dλ > 0 ? 1 : -1, λi = inflection[0] * d3_degrees * s, antimeridian = Math.abs(dλ) > 180;
if (antimeridian ^ (s * λ_ < λi && λi < s * λ)) {
var φi = inflection[1] * d3_degrees;
if (φi > φ1) φ1 = φi;
} else if (λi = (λi + 360) % 360 - 180, antimeridian ^ (s * λ_ < λi && λi < s * λ)) {
var φi = -inflection[1] * d3_degrees;
if (φi < φ0) φ0 = φi;
} else {
if (φ < φ0) φ0 = φ;
if (φ > φ1) φ1 = φ;
}
if (antimeridian) {
if (λ < λ_) {
if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;
} else {
if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;
}
} else {
if (λ1 >= λ0) {
if (λ < λ0) λ0 = λ;
if (λ > λ1) λ1 = λ;
} else {
if (λ > λ_) {
if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;
} else {
if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;
}
}
}
} else {
point(λ, φ);
}
p0 = p, λ_ = λ;
}
function lineStart() {
bound.point = linePoint;
}
function lineEnd() {
range[0] = λ0, range[1] = λ1;
bound.point = point;
p0 = null;
}
function ringPoint(λ, φ) {
if (p0) {
var dλ = λ - λ_;
dλSum += Math.abs(dλ) > 180 ? dλ + (dλ > 0 ? 360 : -360) : dλ;
} else λ__ = λ, φ__ = φ;
d3_geo_area.point(λ, φ);
linePoint(λ, φ);
}
function ringStart() {
d3_geo_area.lineStart();
}
function ringEnd() {
ringPoint(λ__, φ__);
d3_geo_area.lineEnd();
if (Math.abs(dλSum) > ε) λ0 = -(λ1 = 180);
range[0] = λ0, range[1] = λ1;
p0 = null;
}
function angle(λ0, λ1) {
return (λ1 -= λ0) < 0 ? λ1 + 360 : λ1;
}
function compareRanges(a, b) {
return a[0] - b[0];
}
function withinRange(x, range) {
return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;
}
return function(feature) {
φ1 = λ1 = -(λ0 = φ0 = Infinity);
ranges = [];
d3.geo.stream(feature, bound);
var n = ranges.length;
if (n) {
ranges.sort(compareRanges);
for (var i = 1, a = ranges[0], b, merged = [ a ]; i < n; ++i) {
b = ranges[i];
if (withinRange(b[0], a) || withinRange(b[1], a)) {
if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];
if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];
} else {
merged.push(a = b);
}
}
var best = -Infinity, dλ;
for (var n = merged.length - 1, i = 0, a = merged[n], b; i <= n; a = b, ++i) {
b = merged[i];
if ((dλ = angle(a[1], b[0])) > best) best = dλ, λ0 = b[0], λ1 = a[1];
}
}
ranges = range = null;
return λ0 === Infinity || φ0 === Infinity ? [ [ NaN, NaN ], [ NaN, NaN ] ] : [ [ λ0, φ0 ], [ λ1, φ1 ] ];
};
}();
d3.geo.centroid = function(object) {
d3_geo_centroidW0 = d3_geo_centroidW1 = d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;
d3.geo.stream(object, d3_geo_centroid);
var x = d3_geo_centroidX2, y = d3_geo_centroidY2, z = d3_geo_centroidZ2, m = x * x + y * y + z * z;
if (m < ε2) {
x = d3_geo_centroidX1, y = d3_geo_centroidY1, z = d3_geo_centroidZ1;
if (d3_geo_centroidW1 < ε) x = d3_geo_centroidX0, y = d3_geo_centroidY0, z = d3_geo_centroidZ0;
m = x * x + y * y + z * z;
if (m < ε2) return [ NaN, NaN ];
}
return [ Math.atan2(y, x) * d3_degrees, d3_asin(z / Math.sqrt(m)) * d3_degrees ];
};
var d3_geo_centroidW0, d3_geo_centroidW1, d3_geo_centroidX0, d3_geo_centroidY0, d3_geo_centroidZ0, d3_geo_centroidX1, d3_geo_centroidY1, d3_geo_centroidZ1, d3_geo_centroidX2, d3_geo_centroidY2, d3_geo_centroidZ2;
var d3_geo_centroid = {
sphere: d3_noop,
point: d3_geo_centroidPoint,
lineStart: d3_geo_centroidLineStart,
lineEnd: d3_geo_centroidLineEnd,
polygonStart: function() {
d3_geo_centroid.lineStart = d3_geo_centroidRingStart;
},
polygonEnd: function() {
d3_geo_centroid.lineStart = d3_geo_centroidLineStart;
}
};
function d3_geo_centroidPoint(λ, φ) {
λ *= d3_radians;
var cosφ = Math.cos(φ *= d3_radians);
d3_geo_centroidPointXYZ(cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ));
}
function d3_geo_centroidPointXYZ(x, y, z) {
++d3_geo_centroidW0;
d3_geo_centroidX0 += (x - d3_geo_centroidX0) / d3_geo_centroidW0;
d3_geo_centroidY0 += (y - d3_geo_centroidY0) / d3_geo_centroidW0;
d3_geo_centroidZ0 += (z - d3_geo_centroidZ0) / d3_geo_centroidW0;
}
function d3_geo_centroidLineStart() {
var x0, y0, z0;
d3_geo_centroid.point = function(λ, φ) {
λ *= d3_radians;
var cosφ = Math.cos(φ *= d3_radians);
x0 = cosφ * Math.cos(λ);
y0 = cosφ * Math.sin(λ);
z0 = Math.sin(φ);
d3_geo_centroid.point = nextPoint;
d3_geo_centroidPointXYZ(x0, y0, z0);
};
function nextPoint(λ, φ) {
λ *= d3_radians;
var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), w = Math.atan2(Math.sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);
d3_geo_centroidW1 += w;
d3_geo_centroidX1 += w * (x0 + (x0 = x));
d3_geo_centroidY1 += w * (y0 + (y0 = y));
d3_geo_centroidZ1 += w * (z0 + (z0 = z));
d3_geo_centroidPointXYZ(x0, y0, z0);
}
}
function d3_geo_centroidLineEnd() {
d3_geo_centroid.point = d3_geo_centroidPoint;
}
function d3_geo_centroidRingStart() {
var λ00, φ00, x0, y0, z0;
d3_geo_centroid.point = function(λ, φ) {
λ00 = λ, φ00 = φ;
d3_geo_centroid.point = nextPoint;
λ *= d3_radians;
var cosφ = Math.cos(φ *= d3_radians);
x0 = cosφ * Math.cos(λ);
y0 = cosφ * Math.sin(λ);
z0 = Math.sin(φ);
d3_geo_centroidPointXYZ(x0, y0, z0);
};
d3_geo_centroid.lineEnd = function() {
nextPoint(λ00, φ00);
d3_geo_centroid.lineEnd = d3_geo_centroidLineEnd;
d3_geo_centroid.point = d3_geo_centroidPoint;
};
function nextPoint(λ, φ) {
λ *= d3_radians;
var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), cx = y0 * z - z0 * y, cy = z0 * x - x0 * z, cz = x0 * y - y0 * x, m = Math.sqrt(cx * cx + cy * cy + cz * cz), u = x0 * x + y0 * y + z0 * z, v = m && -d3_acos(u) / m, w = Math.atan2(m, u);
d3_geo_centroidX2 += v * cx;
d3_geo_centroidY2 += v * cy;
d3_geo_centroidZ2 += v * cz;
d3_geo_centroidW1 += w;
d3_geo_centroidX1 += w * (x0 + (x0 = x));
d3_geo_centroidY1 += w * (y0 + (y0 = y));
d3_geo_centroidZ1 += w * (z0 + (z0 = z));
d3_geo_centroidPointXYZ(x0, y0, z0);
}
}
function d3_true() {
return true;
}
function d3_geo_clipPolygon(segments, compare, inside, interpolate, listener) {
var subject = [], clip = [];
segments.forEach(function(segment) {
if ((n = segment.length - 1) <= 0) return;
var n, p0 = segment[0], p1 = segment[n];
if (d3_geo_sphericalEqual(p0, p1)) {
listener.lineStart();
for (var i = 0; i < n; ++i) listener.point((p0 = segment[i])[0], p0[1]);
listener.lineEnd();
return;
}
var a = {
point: p0,
points: segment,
other: null,
visited: false,
entry: true,
subject: true
}, b = {
point: p0,
points: [ p0 ],
other: a,
visited: false,
entry: false,
subject: false
};
a.other = b;
subject.push(a);
clip.push(b);
a = {
point: p1,
points: [ p1 ],
other: null,
visited: false,
entry: false,
subject: true
};
b = {
point: p1,
points: [ p1 ],
other: a,
visited: false,
entry: true,
subject: false
};
a.other = b;
subject.push(a);
clip.push(b);
});
clip.sort(compare);
d3_geo_clipPolygonLinkCircular(subject);
d3_geo_clipPolygonLinkCircular(clip);
if (!subject.length) return;
if (inside) for (var i = 1, e = !inside(clip[0].point), n = clip.length; i < n; ++i) {
clip[i].entry = e = !e;
}
var start = subject[0], current, points, point;
while (1) {
current = start;
while (current.visited) if ((current = current.next) === start) return;
points = current.points;
listener.lineStart();
do {
current.visited = current.other.visited = true;
if (current.entry) {
if (current.subject) {
for (var i = 0; i < points.length; i++) listener.point((point = points[i])[0], point[1]);
} else {
interpolate(current.point, current.next.point, 1, listener);
}
current = current.next;
} else {
if (current.subject) {
points = current.prev.points;
for (var i = points.length; --i >= 0; ) listener.point((point = points[i])[0], point[1]);
} else {
interpolate(current.point, current.prev.point, -1, listener);
}
current = current.prev;
}
current = current.other;
points = current.points;
} while (!current.visited);
listener.lineEnd();
}
}
function d3_geo_clipPolygonLinkCircular(array) {
if (!(n = array.length)) return;
var n, i = 0, a = array[0], b;
while (++i < n) {
a.next = b = array[i];
b.prev = a;
a = b;
}
a.next = b = array[0];
b.prev = a;
}
function d3_geo_clip(pointVisible, clipLine, interpolate, polygonContains) {
return function(listener) {
var line = clipLine(listener);
var clip = {
point: point,
lineStart: lineStart,
lineEnd: lineEnd,
polygonStart: function() {
clip.point = pointRing;
clip.lineStart = ringStart;
clip.lineEnd = ringEnd;
segments = [];
polygon = [];
listener.polygonStart();
},
polygonEnd: function() {
clip.point = point;
clip.lineStart = lineStart;
clip.lineEnd = lineEnd;
segments = d3.merge(segments);
if (segments.length) {
d3_geo_clipPolygon(segments, d3_geo_clipSort, null, interpolate, listener);
} else if (polygonContains(polygon)) {
listener.lineStart();
interpolate(null, null, 1, listener);
listener.lineEnd();
}
listener.polygonEnd();
segments = polygon = null;
},
sphere: function() {
listener.polygonStart();
listener.lineStart();
interpolate(null, null, 1, listener);
listener.lineEnd();
listener.polygonEnd();
}
};
function point(λ, φ) {
if (pointVisible(λ, φ)) listener.point(λ, φ);
}
function pointLine(λ, φ) {
line.point(λ, φ);
}
function lineStart() {
clip.point = pointLine;
line.lineStart();
}
function lineEnd() {
clip.point = point;
line.lineEnd();
}
var segments;
var buffer = d3_geo_clipBufferListener(), ringListener = clipLine(buffer), polygon, ring;
function pointRing(λ, φ) {
ringListener.point(λ, φ);
ring.push([ λ, φ ]);
}
function ringStart() {
ringListener.lineStart();
ring = [];
}
function ringEnd() {
pointRing(ring[0][0], ring[0][1]);
ringListener.lineEnd();
var clean = ringListener.clean(), ringSegments = buffer.buffer(), segment, n = ringSegments.length;
ring.pop();
polygon.push(ring);
ring = null;
if (!n) return;
if (clean & 1) {
segment = ringSegments[0];
var n = segment.length - 1, i = -1, point;
listener.lineStart();
while (++i < n) listener.point((point = segment[i])[0], point[1]);
listener.lineEnd();
return;
}
if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));
segments.push(ringSegments.filter(d3_geo_clipSegmentLength1));
}
return clip;
};
}
function d3_geo_clipSegmentLength1(segment) {
return segment.length > 1;
}
function d3_geo_clipBufferListener() {
var lines = [], line;
return {
lineStart: function() {
lines.push(line = []);
},
point: function(λ, φ) {
line.push([ λ, φ ]);
},
lineEnd: d3_noop,
buffer: function() {
var buffer = lines;
lines = [];
line = null;
return buffer;
},
rejoin: function() {
if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));
}
};
}
function d3_geo_clipSort(a, b) {
return ((a = a.point)[0] < 0 ? a[1] - π / 2 - ε : π / 2 - a[1]) - ((b = b.point)[0] < 0 ? b[1] - π / 2 - ε : π / 2 - b[1]);
}
function d3_geo_pointInPolygon(point, polygon) {
var meridian = point[0], parallel = point[1], meridianNormal = [ Math.sin(meridian), -Math.cos(meridian), 0 ], polarAngle = 0, polar = false, southPole = false, winding = 0;
d3_geo_areaRingSum.reset();
for (var i = 0, n = polygon.length; i < n; ++i) {
var ring = polygon[i], m = ring.length;
if (!m) continue;
var point0 = ring[0], λ0 = point0[0], φ0 = point0[1] / 2 + π / 4, sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), j = 1;
while (true) {
if (j === m) j = 0;
point = ring[j];
var λ = point[0], φ = point[1] / 2 + π / 4, sinφ = Math.sin(φ), cosφ = Math.cos(φ), dλ = λ - λ0, antimeridian = Math.abs(dλ) > π, k = sinφ0 * sinφ;
d3_geo_areaRingSum.add(Math.atan2(k * Math.sin(dλ), cosφ0 * cosφ + k * Math.cos(dλ)));
if (Math.abs(φ) < ε) southPole = true;
polarAngle += antimeridian ? dλ + (dλ >= 0 ? 2 : -2) * π : dλ;
if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) {
var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point));
d3_geo_cartesianNormalize(arc);
var intersection = d3_geo_cartesianCross(meridianNormal, arc);
d3_geo_cartesianNormalize(intersection);
var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]);
if (parallel > φarc) {
winding += antimeridian ^ dλ >= 0 ? 1 : -1;
}
}
if (!j++) break;
λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point;
}
if (Math.abs(polarAngle) > ε) polar = true;
}
return (!southPole && !polar && d3_geo_areaRingSum < 0 || polarAngle < -ε) ^ winding & 1;
}
var d3_geo_clipAntimeridian = d3_geo_clip(d3_true, d3_geo_clipAntimeridianLine, d3_geo_clipAntimeridianInterpolate, d3_geo_clipAntimeridianPolygonContains);
function d3_geo_clipAntimeridianLine(listener) {
var λ0 = NaN, φ0 = NaN, sλ0 = NaN, clean;
return {
lineStart: function() {
listener.lineStart();
clean = 1;
},
point: function(λ1, φ1) {
var sλ1 = λ1 > 0 ? π : -π, dλ = Math.abs(λ1 - λ0);
if (Math.abs(dλ - π) < ε) {
listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? π / 2 : -π / 2);
listener.point(sλ0, φ0);
listener.lineEnd();
listener.lineStart();
listener.point(sλ1, φ0);
listener.point(λ1, φ0);
clean = 0;
} else if (sλ0 !== sλ1 && dλ >= π) {
if (Math.abs(λ0 - sλ0) < ε) λ0 -= sλ0 * ε;
if (Math.abs(λ1 - sλ1) < ε) λ1 -= sλ1 * ε;
φ0 = d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1);
listener.point(sλ0, φ0);
listener.lineEnd();
listener.lineStart();
listener.point(sλ1, φ0);
clean = 0;
}
listener.point(λ0 = λ1, φ0 = φ1);
sλ0 = sλ1;
},
lineEnd: function() {
listener.lineEnd();
λ0 = φ0 = NaN;
},
clean: function() {
return 2 - clean;
}
};
}
function d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1) {
var cosφ0, cosφ1, sinλ0_λ1 = Math.sin(λ0 - λ1);
return Math.abs(sinλ0_λ1) > ε ? Math.atan((Math.sin(φ0) * (cosφ1 = Math.cos(φ1)) * Math.sin(λ1) - Math.sin(φ1) * (cosφ0 = Math.cos(φ0)) * Math.sin(λ0)) / (cosφ0 * cosφ1 * sinλ0_λ1)) : (φ0 + φ1) / 2;
}
function d3_geo_clipAntimeridianInterpolate(from, to, direction, listener) {
var φ;
if (from == null) {
φ = direction * π / 2;
listener.point(-π, φ);
listener.point(0, φ);
listener.point(π, φ);
listener.point(π, 0);
listener.point(π, -φ);
listener.point(0, -φ);
listener.point(-π, -φ);
listener.point(-π, 0);
listener.point(-π, φ);
} else if (Math.abs(from[0] - to[0]) > ε) {
var s = (from[0] < to[0] ? 1 : -1) * π;
φ = direction * s / 2;
listener.point(-s, φ);
listener.point(0, φ);
listener.point(s, φ);
} else {
listener.point(to[0], to[1]);
}
}
var d3_geo_clipAntimeridianPoint = [ -π, 0 ];
function d3_geo_clipAntimeridianPolygonContains(polygon) {
return d3_geo_pointInPolygon(d3_geo_clipAntimeridianPoint, polygon);
}
function d3_geo_clipCircle(radius) {
var cr = Math.cos(radius), smallRadius = cr > 0, point = [ radius, 0 ], notHemisphere = Math.abs(cr) > ε, interpolate = d3_geo_circleInterpolate(radius, 6 * d3_radians);
return d3_geo_clip(visible, clipLine, interpolate, polygonContains);
function visible(λ, φ) {
return Math.cos(λ) * Math.cos(φ) > cr;
}
function clipLine(listener) {
var point0, c0, v0, v00, clean;
return {
lineStart: function() {
v00 = v0 = false;
clean = 1;
},
point: function(λ, φ) {
var point1 = [ λ, φ ], point2, v = visible(λ, φ), c = smallRadius ? v ? 0 : code(λ, φ) : v ? code(λ + (λ < 0 ? π : -π), φ) : 0;
if (!point0 && (v00 = v0 = v)) listener.lineStart();
if (v !== v0) {
point2 = intersect(point0, point1);
if (d3_geo_sphericalEqual(point0, point2) || d3_geo_sphericalEqual(point1, point2)) {
point1[0] += ε;
point1[1] += ε;
v = visible(point1[0], point1[1]);
}
}
if (v !== v0) {
clean = 0;
if (v) {
listener.lineStart();
point2 = intersect(point1, point0);
listener.point(point2[0], point2[1]);
} else {
point2 = intersect(point0, point1);
listener.point(point2[0], point2[1]);
listener.lineEnd();
}
point0 = point2;
} else if (notHemisphere && point0 && smallRadius ^ v) {
var t;
if (!(c & c0) && (t = intersect(point1, point0, true))) {
clean = 0;
if (smallRadius) {
listener.lineStart();
listener.point(t[0][0], t[0][1]);
listener.point(t[1][0], t[1][1]);
listener.lineEnd();
} else {
listener.point(t[1][0], t[1][1]);
listener.lineEnd();
listener.lineStart();
listener.point(t[0][0], t[0][1]);
}
}
}
if (v && (!point0 || !d3_geo_sphericalEqual(point0, point1))) {
listener.point(point1[0], point1[1]);
}
point0 = point1, v0 = v, c0 = c;
},
lineEnd: function() {
if (v0) listener.lineEnd();
point0 = null;
},
clean: function() {
return clean | (v00 && v0) << 1;
}
};
}
function intersect(a, b, two) {
var pa = d3_geo_cartesian(a), pb = d3_geo_cartesian(b);
var n1 = [ 1, 0, 0 ], n2 = d3_geo_cartesianCross(pa, pb), n2n2 = d3_geo_cartesianDot(n2, n2), n1n2 = n2[0], determinant = n2n2 - n1n2 * n1n2;
if (!determinant) return !two && a;
var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = d3_geo_cartesianCross(n1, n2), A = d3_geo_cartesianScale(n1, c1), B = d3_geo_cartesianScale(n2, c2);
d3_geo_cartesianAdd(A, B);
var u = n1xn2, w = d3_geo_cartesianDot(A, u), uu = d3_geo_cartesianDot(u, u), t2 = w * w - uu * (d3_geo_cartesianDot(A, A) - 1);
if (t2 < 0) return;
var t = Math.sqrt(t2), q = d3_geo_cartesianScale(u, (-w - t) / uu);
d3_geo_cartesianAdd(q, A);
q = d3_geo_spherical(q);
if (!two) return q;
var λ0 = a[0], λ1 = b[0], φ0 = a[1], φ1 = b[1], z;
if (λ1 < λ0) z = λ0, λ0 = λ1, λ1 = z;
var δλ = λ1 - λ0, polar = Math.abs(δλ - π) < ε, meridian = polar || δλ < ε;
if (!polar && φ1 < φ0) z = φ0, φ0 = φ1, φ1 = z;
if (meridian ? polar ? φ0 + φ1 > 0 ^ q[1] < (Math.abs(q[0] - λ0) < ε ? φ0 : φ1) : φ0 <= q[1] && q[1] <= φ1 : δλ > π ^ (λ0 <= q[0] && q[0] <= λ1)) {
var q1 = d3_geo_cartesianScale(u, (-w + t) / uu);
d3_geo_cartesianAdd(q1, A);
return [ q, d3_geo_spherical(q1) ];
}
}
function code(λ, φ) {
var r = smallRadius ? radius : π - radius, code = 0;
if (λ < -r) code |= 1; else if (λ > r) code |= 2;
if (φ < -r) code |= 4; else if (φ > r) code |= 8;
return code;
}
function polygonContains(polygon) {
return d3_geo_pointInPolygon(point, polygon);
}
}
var d3_geo_clipExtentMAX = 1e9;
d3.geo.clipExtent = function() {
var x0, y0, x1, y1, stream, clip, clipExtent = {
stream: function(output) {
if (stream) stream.valid = false;
stream = clip(output);
stream.valid = true;
return stream;
},
extent: function(_) {
if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ];
clip = d3_geo_clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]);
if (stream) stream.valid = false, stream = null;
return clipExtent;
}
};
return clipExtent.extent([ [ 0, 0 ], [ 960, 500 ] ]);
};
function d3_geo_clipExtent(x0, y0, x1, y1) {
return function(listener) {
var listener_ = listener, bufferListener = d3_geo_clipBufferListener(), segments, polygon, ring;
var clip = {
point: point,
lineStart: lineStart,
lineEnd: lineEnd,
polygonStart: function() {
listener = bufferListener;
segments = [];
polygon = [];
},
polygonEnd: function() {
listener = listener_;
if ((segments = d3.merge(segments)).length) {
listener.polygonStart();
d3_geo_clipPolygon(segments, compare, inside, interpolate, listener);
listener.polygonEnd();
} else if (insidePolygon([ x0, y0 ])) {
listener.polygonStart(), listener.lineStart();
interpolate(null, null, 1, listener);
listener.lineEnd(), listener.polygonEnd();
}
segments = polygon = ring = null;
}
};
function inside(point) {
var a = corner(point, -1), i = insidePolygon([ a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0 ]);
return i;
}
function insidePolygon(p) {
var wn = 0, n = polygon.length, y = p[1];
for (var i = 0; i < n; ++i) {
for (var j = 1, v = polygon[i], m = v.length, a = v[0], b; j < m; ++j) {
b = v[j];
if (a[1] <= y) {
if (b[1] > y && isLeft(a, b, p) > 0) ++wn;
} else {
if (b[1] <= y && isLeft(a, b, p) < 0) --wn;
}
a = b;
}
}
return wn !== 0;
}
function isLeft(a, b, c) {
return (b[0] - a[0]) * (c[1] - a[1]) - (c[0] - a[0]) * (b[1] - a[1]);
}
function interpolate(from, to, direction, listener) {
var a = 0, a1 = 0;
if (from == null || (a = corner(from, direction)) !== (a1 = corner(to, direction)) || comparePoints(from, to) < 0 ^ direction > 0) {
do {
listener.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);
} while ((a = (a + direction + 4) % 4) !== a1);
} else {
listener.point(to[0], to[1]);
}
}
function visible(x, y) {
return x0 <= x && x <= x1 && y0 <= y && y <= y1;
}
function point(x, y) {
if (visible(x, y)) listener.point(x, y);
}
var x__, y__, v__, x_, y_, v_, first;
function lineStart() {
clip.point = linePoint;
if (polygon) polygon.push(ring = []);
first = true;
v_ = false;
x_ = y_ = NaN;
}
function lineEnd() {
if (segments) {
linePoint(x__, y__);
if (v__ && v_) bufferListener.rejoin();
segments.push(bufferListener.buffer());
}
clip.point = point;
if (v_) listener.lineEnd();
}
function linePoint(x, y) {
x = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, x));
y = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, y));
var v = visible(x, y);
if (polygon) ring.push([ x, y ]);
if (first) {
x__ = x, y__ = y, v__ = v;
first = false;
if (v) {
listener.lineStart();
listener.point(x, y);
}
} else {
if (v && v_) listener.point(x, y); else {
var a = [ x_, y_ ], b = [ x, y ];
if (clipLine(a, b)) {
if (!v_) {
listener.lineStart();
listener.point(a[0], a[1]);
}
listener.point(b[0], b[1]);
if (!v) listener.lineEnd();
} else if (v) {
listener.lineStart();
listener.point(x, y);
}
}
}
x_ = x, y_ = y, v_ = v;
}
return clip;
};
function corner(p, direction) {
return Math.abs(p[0] - x0) < ε ? direction > 0 ? 0 : 3 : Math.abs(p[0] - x1) < ε ? direction > 0 ? 2 : 1 : Math.abs(p[1] - y0) < ε ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2;
}
function compare(a, b) {
return comparePoints(a.point, b.point);
}
function comparePoints(a, b) {
var ca = corner(a, 1), cb = corner(b, 1);
return ca !== cb ? ca - cb : ca === 0 ? b[1] - a[1] : ca === 1 ? a[0] - b[0] : ca === 2 ? a[1] - b[1] : b[0] - a[0];
}
function clipLine(a, b) {
var dx = b[0] - a[0], dy = b[1] - a[1], t = [ 0, 1 ];
if (Math.abs(dx) < ε && Math.abs(dy) < ε) return x0 <= a[0] && a[0] <= x1 && y0 <= a[1] && a[1] <= y1;
if (d3_geo_clipExtentT(x0 - a[0], dx, t) && d3_geo_clipExtentT(a[0] - x1, -dx, t) && d3_geo_clipExtentT(y0 - a[1], dy, t) && d3_geo_clipExtentT(a[1] - y1, -dy, t)) {
if (t[1] < 1) {
b[0] = a[0] + t[1] * dx;
b[1] = a[1] + t[1] * dy;
}
if (t[0] > 0) {
a[0] += t[0] * dx;
a[1] += t[0] * dy;
}
return true;
}
return false;
}
}
function d3_geo_clipExtentT(num, denominator, t) {
if (Math.abs(denominator) < ε) return num <= 0;
var u = num / denominator;
if (denominator > 0) {
if (u > t[1]) return false;
if (u > t[0]) t[0] = u;
} else {
if (u < t[0]) return false;
if (u < t[1]) t[1] = u;
}
return true;
}
function d3_geo_compose(a, b) {
function compose(x, y) {
return x = a(x, y), b(x[0], x[1]);
}
if (a.invert && b.invert) compose.invert = function(x, y) {
return x = b.invert(x, y), x && a.invert(x[0], x[1]);
};
return compose;
}
function d3_geo_conic(projectAt) {
var φ0 = 0, φ1 = π / 3, m = d3_geo_projectionMutator(projectAt), p = m(φ0, φ1);
p.parallels = function(_) {
if (!arguments.length) return [ φ0 / π * 180, φ1 / π * 180 ];
return m(φ0 = _[0] * π / 180, φ1 = _[1] * π / 180);
};
return p;
}
function d3_geo_conicEqualArea(φ0, φ1) {
var sinφ0 = Math.sin(φ0), n = (sinφ0 + Math.sin(φ1)) / 2, C = 1 + sinφ0 * (2 * n - sinφ0), ρ0 = Math.sqrt(C) / n;
function forward(λ, φ) {
var ρ = Math.sqrt(C - 2 * n * Math.sin(φ)) / n;
return [ ρ * Math.sin(λ *= n), ρ0 - ρ * Math.cos(λ) ];
}
forward.invert = function(x, y) {
var ρ0_y = ρ0 - y;
return [ Math.atan2(x, ρ0_y) / n, d3_asin((C - (x * x + ρ0_y * ρ0_y) * n * n) / (2 * n)) ];
};
return forward;
}
(d3.geo.conicEqualArea = function() {
return d3_geo_conic(d3_geo_conicEqualArea);
}).raw = d3_geo_conicEqualArea;
d3.geo.albers = function() {
return d3.geo.conicEqualArea().rotate([ 96, 0 ]).center([ -.6, 38.7 ]).parallels([ 29.5, 45.5 ]).scale(1070);
};
d3.geo.albersUsa = function() {
var lower48 = d3.geo.albers();
var alaska = d3.geo.conicEqualArea().rotate([ 154, 0 ]).center([ -2, 58.5 ]).parallels([ 55, 65 ]);
var hawaii = d3.geo.conicEqualArea().rotate([ 157, 0 ]).center([ -3, 19.9 ]).parallels([ 8, 18 ]);
var point, pointStream = {
point: function(x, y) {
point = [ x, y ];
}
}, lower48Point, alaskaPoint, hawaiiPoint;
function albersUsa(coordinates) {
var x = coordinates[0], y = coordinates[1];
point = null;
(lower48Point(x, y), point) || (alaskaPoint(x, y), point) || hawaiiPoint(x, y);
return point;
}
albersUsa.invert = function(coordinates) {
var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;
return (y >= .12 && y < .234 && x >= -.425 && x < -.214 ? alaska : y >= .166 && y < .234 && x >= -.214 && x < -.115 ? hawaii : lower48).invert(coordinates);
};
albersUsa.stream = function(stream) {
var lower48Stream = lower48.stream(stream), alaskaStream = alaska.stream(stream), hawaiiStream = hawaii.stream(stream);
return {
point: function(x, y) {
lower48Stream.point(x, y);
alaskaStream.point(x, y);
hawaiiStream.point(x, y);
},
sphere: function() {
lower48Stream.sphere();
alaskaStream.sphere();
hawaiiStream.sphere();
},
lineStart: function() {
lower48Stream.lineStart();
alaskaStream.lineStart();
hawaiiStream.lineStart();
},
lineEnd: function() {
lower48Stream.lineEnd();
alaskaStream.lineEnd();
hawaiiStream.lineEnd();
},
polygonStart: function() {
lower48Stream.polygonStart();
alaskaStream.polygonStart();
hawaiiStream.polygonStart();
},
polygonEnd: function() {
lower48Stream.polygonEnd();
alaskaStream.polygonEnd();
hawaiiStream.polygonEnd();
}
};
};
albersUsa.precision = function(_) {
if (!arguments.length) return lower48.precision();
lower48.precision(_);
alaska.precision(_);
hawaii.precision(_);
return albersUsa;
};
albersUsa.scale = function(_) {
if (!arguments.length) return lower48.scale();
lower48.scale(_);
alaska.scale(_ * .35);
hawaii.scale(_);
return albersUsa.translate(lower48.translate());
};
albersUsa.translate = function(_) {
if (!arguments.length) return lower48.translate();
var k = lower48.scale(), x = +_[0], y = +_[1];
lower48Point = lower48.translate(_).clipExtent([ [ x - .455 * k, y - .238 * k ], [ x + .455 * k, y + .238 * k ] ]).stream(pointStream).point;
alaskaPoint = alaska.translate([ x - .307 * k, y + .201 * k ]).clipExtent([ [ x - .425 * k + ε, y + .12 * k + ε ], [ x - .214 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point;
hawaiiPoint = hawaii.translate([ x - .205 * k, y + .212 * k ]).clipExtent([ [ x - .214 * k + ε, y + .166 * k + ε ], [ x - .115 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point;
return albersUsa;
};
return albersUsa.scale(1070);
};
var d3_geo_pathAreaSum, d3_geo_pathAreaPolygon, d3_geo_pathArea = {
point: d3_noop,
lineStart: d3_noop,
lineEnd: d3_noop,
polygonStart: function() {
d3_geo_pathAreaPolygon = 0;
d3_geo_pathArea.lineStart = d3_geo_pathAreaRingStart;
},
polygonEnd: function() {
d3_geo_pathArea.lineStart = d3_geo_pathArea.lineEnd = d3_geo_pathArea.point = d3_noop;
d3_geo_pathAreaSum += Math.abs(d3_geo_pathAreaPolygon / 2);
}
};
function d3_geo_pathAreaRingStart() {
var x00, y00, x0, y0;
d3_geo_pathArea.point = function(x, y) {
d3_geo_pathArea.point = nextPoint;
x00 = x0 = x, y00 = y0 = y;
};
function nextPoint(x, y) {
d3_geo_pathAreaPolygon += y0 * x - x0 * y;
x0 = x, y0 = y;
}
d3_geo_pathArea.lineEnd = function() {
nextPoint(x00, y00);
};
}
var d3_geo_pathBoundsX0, d3_geo_pathBoundsY0, d3_geo_pathBoundsX1, d3_geo_pathBoundsY1;
var d3_geo_pathBounds = {
point: d3_geo_pathBoundsPoint,
lineStart: d3_noop,
lineEnd: d3_noop,
polygonStart: d3_noop,
polygonEnd: d3_noop
};
function d3_geo_pathBoundsPoint(x, y) {
if (x < d3_geo_pathBoundsX0) d3_geo_pathBoundsX0 = x;
if (x > d3_geo_pathBoundsX1) d3_geo_pathBoundsX1 = x;
if (y < d3_geo_pathBoundsY0) d3_geo_pathBoundsY0 = y;
if (y > d3_geo_pathBoundsY1) d3_geo_pathBoundsY1 = y;
}
function d3_geo_pathBuffer() {
var pointCircle = d3_geo_pathBufferCircle(4.5), buffer = [];
var stream = {
point: point,
lineStart: function() {
stream.point = pointLineStart;
},
lineEnd: lineEnd,
polygonStart: function() {
stream.lineEnd = lineEndPolygon;
},
polygonEnd: function() {
stream.lineEnd = lineEnd;
stream.point = point;
},
pointRadius: function(_) {
pointCircle = d3_geo_pathBufferCircle(_);
return stream;
},
result: function() {
if (buffer.length) {
var result = buffer.join("");
buffer = [];
return result;
}
}
};
function point(x, y) {
buffer.push("M", x, ",", y, pointCircle);
}
function pointLineStart(x, y) {
buffer.push("M", x, ",", y);
stream.point = pointLine;
}
function pointLine(x, y) {
buffer.push("L", x, ",", y);
}
function lineEnd() {
stream.point = point;
}
function lineEndPolygon() {
buffer.push("Z");
}
return stream;
}
function d3_geo_pathBufferCircle(radius) {
return "m0," + radius + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius + "z";
}
var d3_geo_pathCentroid = {
point: d3_geo_pathCentroidPoint,
lineStart: d3_geo_pathCentroidLineStart,
lineEnd: d3_geo_pathCentroidLineEnd,
polygonStart: function() {
d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidRingStart;
},
polygonEnd: function() {
d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;
d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidLineStart;
d3_geo_pathCentroid.lineEnd = d3_geo_pathCentroidLineEnd;
}
};
function d3_geo_pathCentroidPoint(x, y) {
d3_geo_centroidX0 += x;
d3_geo_centroidY0 += y;
++d3_geo_centroidZ0;
}
function d3_geo_pathCentroidLineStart() {
var x0, y0;
d3_geo_pathCentroid.point = function(x, y) {
d3_geo_pathCentroid.point = nextPoint;
d3_geo_pathCentroidPoint(x0 = x, y0 = y);
};
function nextPoint(x, y) {
var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);
d3_geo_centroidX1 += z * (x0 + x) / 2;
d3_geo_centroidY1 += z * (y0 + y) / 2;
d3_geo_centroidZ1 += z;
d3_geo_pathCentroidPoint(x0 = x, y0 = y);
}
}
function d3_geo_pathCentroidLineEnd() {
d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;
}
function d3_geo_pathCentroidRingStart() {
var x00, y00, x0, y0;
d3_geo_pathCentroid.point = function(x, y) {
d3_geo_pathCentroid.point = nextPoint;
d3_geo_pathCentroidPoint(x00 = x0 = x, y00 = y0 = y);
};
function nextPoint(x, y) {
var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);
d3_geo_centroidX1 += z * (x0 + x) / 2;
d3_geo_centroidY1 += z * (y0 + y) / 2;
d3_geo_centroidZ1 += z;
z = y0 * x - x0 * y;
d3_geo_centroidX2 += z * (x0 + x);
d3_geo_centroidY2 += z * (y0 + y);
d3_geo_centroidZ2 += z * 3;
d3_geo_pathCentroidPoint(x0 = x, y0 = y);
}
d3_geo_pathCentroid.lineEnd = function() {
nextPoint(x00, y00);
};
}
function d3_geo_pathContext(context) {
var pointRadius = 4.5;
var stream = {
point: point,
lineStart: function() {
stream.point = pointLineStart;
},
lineEnd: lineEnd,
polygonStart: function() {
stream.lineEnd = lineEndPolygon;
},
polygonEnd: function() {
stream.lineEnd = lineEnd;
stream.point = point;
},
pointRadius: function(_) {
pointRadius = _;
return stream;
},
result: d3_noop
};
function point(x, y) {
context.moveTo(x, y);
context.arc(x, y, pointRadius, 0, 2 * π);
}
function pointLineStart(x, y) {
context.moveTo(x, y);
stream.point = pointLine;
}
function pointLine(x, y) {
context.lineTo(x, y);
}
function lineEnd() {
stream.point = point;
}
function lineEndPolygon() {
context.closePath();
}
return stream;
}
function d3_geo_resample(project) {
var δ2 = .5, cosMinDistance = Math.cos(30 * d3_radians), maxDepth = 16;
function resample(stream) {
var λ00, φ00, x00, y00, a00, b00, c00, λ0, x0, y0, a0, b0, c0;
var resample = {
point: point,
lineStart: lineStart,
lineEnd: lineEnd,
polygonStart: function() {
stream.polygonStart();
resample.lineStart = ringStart;
},
polygonEnd: function() {
stream.polygonEnd();
resample.lineStart = lineStart;
}
};
function point(x, y) {
x = project(x, y);
stream.point(x[0], x[1]);
}
function lineStart() {
x0 = NaN;
resample.point = linePoint;
stream.lineStart();
}
function linePoint(λ, φ) {
var c = d3_geo_cartesian([ λ, φ ]), p = project(λ, φ);
resampleLineTo(x0, y0, λ0, a0, b0, c0, x0 = p[0], y0 = p[1], λ0 = λ, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);
stream.point(x0, y0);
}
function lineEnd() {
resample.point = point;
stream.lineEnd();
}
function ringStart() {
lineStart();
resample.point = ringPoint;
resample.lineEnd = ringEnd;
}
function ringPoint(λ, φ) {
linePoint(λ00 = λ, φ00 = φ), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;
resample.point = linePoint;
}
function ringEnd() {
resampleLineTo(x0, y0, λ0, a0, b0, c0, x00, y00, λ00, a00, b00, c00, maxDepth, stream);
resample.lineEnd = lineEnd;
lineEnd();
}
return resample;
}
function resampleLineTo(x0, y0, λ0, a0, b0, c0, x1, y1, λ1, a1, b1, c1, depth, stream) {
var dx = x1 - x0, dy = y1 - y0, d2 = dx * dx + dy * dy;
if (d2 > 4 * δ2 && depth--) {
var a = a0 + a1, b = b0 + b1, c = c0 + c1, m = Math.sqrt(a * a + b * b + c * c), φ2 = Math.asin(c /= m), λ2 = Math.abs(Math.abs(c) - 1) < ε ? (λ0 + λ1) / 2 : Math.atan2(b, a), p = project(λ2, φ2), x2 = p[0], y2 = p[1], dx2 = x2 - x0, dy2 = y2 - y0, dz = dy * dx2 - dx * dy2;
if (dz * dz / d2 > δ2 || Math.abs((dx * dx2 + dy * dy2) / d2 - .5) > .3 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) {
resampleLineTo(x0, y0, λ0, a0, b0, c0, x2, y2, λ2, a /= m, b /= m, c, depth, stream);
stream.point(x2, y2);
resampleLineTo(x2, y2, λ2, a, b, c, x1, y1, λ1, a1, b1, c1, depth, stream);
}
}
}
resample.precision = function(_) {
if (!arguments.length) return Math.sqrt(δ2);
maxDepth = (δ2 = _ * _) > 0 && 16;
return resample;
};
return resample;
}
d3.geo.transform = function(methods) {
return {
stream: function(stream) {
var transform = new d3_geo_transform(stream);
for (var k in methods) transform[k] = methods[k];
return transform;
}
};
};
function d3_geo_transform(stream) {
this.stream = stream;
}
d3_geo_transform.prototype = {
point: function(x, y) {
this.stream.point(x, y);
},
sphere: function() {
this.stream.sphere();
},
lineStart: function() {
this.stream.lineStart();
},
lineEnd: function() {
this.stream.lineEnd();
},
polygonStart: function() {
this.stream.polygonStart();
},
polygonEnd: function() {
this.stream.polygonEnd();
}
};
d3.geo.path = function() {
var pointRadius = 4.5, projection, context, projectStream, contextStream, cacheStream;
function path(object) {
if (object) {
if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments));
if (!cacheStream || !cacheStream.valid) cacheStream = projectStream(contextStream);
d3.geo.stream(object, cacheStream);
}
return contextStream.result();
}
path.area = function(object) {
d3_geo_pathAreaSum = 0;
d3.geo.stream(object, projectStream(d3_geo_pathArea));
return d3_geo_pathAreaSum;
};
path.centroid = function(object) {
d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;
d3.geo.stream(object, projectStream(d3_geo_pathCentroid));
return d3_geo_centroidZ2 ? [ d3_geo_centroidX2 / d3_geo_centroidZ2, d3_geo_centroidY2 / d3_geo_centroidZ2 ] : d3_geo_centroidZ1 ? [ d3_geo_centroidX1 / d3_geo_centroidZ1, d3_geo_centroidY1 / d3_geo_centroidZ1 ] : d3_geo_centroidZ0 ? [ d3_geo_centroidX0 / d3_geo_centroidZ0, d3_geo_centroidY0 / d3_geo_centroidZ0 ] : [ NaN, NaN ];
};
path.bounds = function(object) {
d3_geo_pathBoundsX1 = d3_geo_pathBoundsY1 = -(d3_geo_pathBoundsX0 = d3_geo_pathBoundsY0 = Infinity);
d3.geo.stream(object, projectStream(d3_geo_pathBounds));
return [ [ d3_geo_pathBoundsX0, d3_geo_pathBoundsY0 ], [ d3_geo_pathBoundsX1, d3_geo_pathBoundsY1 ] ];
};
path.projection = function(_) {
if (!arguments.length) return projection;
projectStream = (projection = _) ? _.stream || d3_geo_pathProjectStream(_) : d3_identity;
return reset();
};
path.context = function(_) {
if (!arguments.length) return context;
contextStream = (context = _) == null ? new d3_geo_pathBuffer() : new d3_geo_pathContext(_);
if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius);
return reset();
};
path.pointRadius = function(_) {
if (!arguments.length) return pointRadius;
pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_);
return path;
};
function reset() {
cacheStream = null;
return path;
}
return path.projection(d3.geo.albersUsa()).context(null);
};
function d3_geo_pathProjectStream(project) {
var resample = d3_geo_resample(function(x, y) {
return project([ x * d3_degrees, y * d3_degrees ]);
});
return function(stream) {
var transform = new d3_geo_transform(stream = resample(stream));
transform.point = function(x, y) {
stream.point(x * d3_radians, y * d3_radians);
};
return transform;
};
}
d3.geo.projection = d3_geo_projection;
d3.geo.projectionMutator = d3_geo_projectionMutator;
function d3_geo_projection(project) {
return d3_geo_projectionMutator(function() {
return project;
})();
}
function d3_geo_projectionMutator(projectAt) {
var project, rotate, projectRotate, projectResample = d3_geo_resample(function(x, y) {
x = project(x, y);
return [ x[0] * k + δx, δy - x[1] * k ];
}), k = 150, x = 480, y = 250, λ = 0, φ = 0, δλ = 0, δφ = 0, δγ = 0, δx, δy, preclip = d3_geo_clipAntimeridian, postclip = d3_identity, clipAngle = null, clipExtent = null, stream;
function projection(point) {
point = projectRotate(point[0] * d3_radians, point[1] * d3_radians);
return [ point[0] * k + δx, δy - point[1] * k ];
}
function invert(point) {
point = projectRotate.invert((point[0] - δx) / k, (δy - point[1]) / k);
return point && [ point[0] * d3_degrees, point[1] * d3_degrees ];
}
projection.stream = function(output) {
if (stream) stream.valid = false;
stream = d3_geo_projectionRadiansRotate(rotate, preclip(projectResample(postclip(output))));
stream.valid = true;
return stream;
};
projection.clipAngle = function(_) {
if (!arguments.length) return clipAngle;
preclip = _ == null ? (clipAngle = _, d3_geo_clipAntimeridian) : d3_geo_clipCircle((clipAngle = +_) * d3_radians);
return invalidate();
};
projection.clipExtent = function(_) {
if (!arguments.length) return clipExtent;
clipExtent = _;
postclip = _ ? d3_geo_clipExtent(_[0][0], _[0][1], _[1][0], _[1][1]) : d3_identity;
return invalidate();
};
projection.scale = function(_) {
if (!arguments.length) return k;
k = +_;
return reset();
};
projection.translate = function(_) {
if (!arguments.length) return [ x, y ];
x = +_[0];
y = +_[1];
return reset();
};
projection.center = function(_) {
if (!arguments.length) return [ λ * d3_degrees, φ * d3_degrees ];
λ = _[0] % 360 * d3_radians;
φ = _[1] % 360 * d3_radians;
return reset();
};
projection.rotate = function(_) {
if (!arguments.length) return [ δλ * d3_degrees, δφ * d3_degrees, δγ * d3_degrees ];
δλ = _[0] % 360 * d3_radians;
δφ = _[1] % 360 * d3_radians;
δγ = _.length > 2 ? _[2] % 360 * d3_radians : 0;
return reset();
};
d3.rebind(projection, projectResample, "precision");
function reset() {
projectRotate = d3_geo_compose(rotate = d3_geo_rotation(δλ, δφ, δγ), project);
var center = project(λ, φ);
δx = x - center[0] * k;
δy = y + center[1] * k;
return invalidate();
}
function invalidate() {
if (stream) stream.valid = false, stream = null;
return projection;
}
return function() {
project = projectAt.apply(this, arguments);
projection.invert = project.invert && invert;
return reset();
};
}
function d3_geo_projectionRadiansRotate(rotate, stream) {
var transform = new d3_geo_transform(stream);
transform.point = function(x, y) {
y = rotate(x * d3_radians, y * d3_radians), x = y[0];
stream.point(x > π ? x - 2 * π : x < -π ? x + 2 * π : x, y[1]);
};
return transform;
}
function d3_geo_equirectangular(λ, φ) {
return [ λ, φ ];
}
(d3.geo.equirectangular = function() {
return d3_geo_projection(d3_geo_equirectangular);
}).raw = d3_geo_equirectangular.invert = d3_geo_equirectangular;
d3.geo.rotation = function(rotate) {
rotate = d3_geo_rotation(rotate[0] % 360 * d3_radians, rotate[1] * d3_radians, rotate.length > 2 ? rotate[2] * d3_radians : 0);
function forward(coordinates) {
coordinates = rotate(coordinates[0] * d3_radians, coordinates[1] * d3_radians);
return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates;
}
forward.invert = function(coordinates) {
coordinates = rotate.invert(coordinates[0] * d3_radians, coordinates[1] * d3_radians);
return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates;
};
return forward;
};
function d3_geo_rotation(δλ, δφ, δγ) {
return δλ ? δφ || δγ ? d3_geo_compose(d3_geo_rotationλ(δλ), d3_geo_rotationφγ(δφ, δγ)) : d3_geo_rotationλ(δλ) : δφ || δγ ? d3_geo_rotationφγ(δφ, δγ) : d3_geo_equirectangular;
}
function d3_geo_forwardRotationλ(δλ) {
return function(λ, φ) {
return λ += δλ, [ λ > π ? λ - 2 * π : λ < -π ? λ + 2 * π : λ, φ ];
};
}
function d3_geo_rotationλ(δλ) {
var rotation = d3_geo_forwardRotationλ(δλ);
rotation.invert = d3_geo_forwardRotationλ(-δλ);
return rotation;
}
function d3_geo_rotationφγ(δφ, δγ) {
var cosδφ = Math.cos(δφ), sinδφ = Math.sin(δφ), cosδγ = Math.cos(δγ), sinδγ = Math.sin(δγ);
function rotation(λ, φ) {
var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδφ + x * sinδφ;
return [ Math.atan2(y * cosδγ - k * sinδγ, x * cosδφ - z * sinδφ), d3_asin(k * cosδγ + y * sinδγ) ];
}
rotation.invert = function(λ, φ) {
var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδγ - y * sinδγ;
return [ Math.atan2(y * cosδγ + z * sinδγ, x * cosδφ + k * sinδφ), d3_asin(k * cosδφ - x * sinδφ) ];
};
return rotation;
}
d3.geo.circle = function() {
var origin = [ 0, 0 ], angle, precision = 6, interpolate;
function circle() {
var center = typeof origin === "function" ? origin.apply(this, arguments) : origin, rotate = d3_geo_rotation(-center[0] * d3_radians, -center[1] * d3_radians, 0).invert, ring = [];
interpolate(null, null, 1, {
point: function(x, y) {
ring.push(x = rotate(x, y));
x[0] *= d3_degrees, x[1] *= d3_degrees;
}
});
return {
type: "Polygon",
coordinates: [ ring ]
};
}
circle.origin = function(x) {
if (!arguments.length) return origin;
origin = x;
return circle;
};
circle.angle = function(x) {
if (!arguments.length) return angle;
interpolate = d3_geo_circleInterpolate((angle = +x) * d3_radians, precision * d3_radians);
return circle;
};
circle.precision = function(_) {
if (!arguments.length) return precision;
interpolate = d3_geo_circleInterpolate(angle * d3_radians, (precision = +_) * d3_radians);
return circle;
};
return circle.angle(90);
};
function d3_geo_circleInterpolate(radius, precision) {
var cr = Math.cos(radius), sr = Math.sin(radius);
return function(from, to, direction, listener) {
var step = direction * precision;
if (from != null) {
from = d3_geo_circleAngle(cr, from);
to = d3_geo_circleAngle(cr, to);
if (direction > 0 ? from < to : from > to) from += direction * 2 * π;
} else {
from = radius + direction * 2 * π;
to = radius - .5 * step;
}
for (var point, t = from; direction > 0 ? t > to : t < to; t -= step) {
listener.point((point = d3_geo_spherical([ cr, -sr * Math.cos(t), -sr * Math.sin(t) ]))[0], point[1]);
}
};
}
function d3_geo_circleAngle(cr, point) {
var a = d3_geo_cartesian(point);
a[0] -= cr;
d3_geo_cartesianNormalize(a);
var angle = d3_acos(-a[1]);
return ((-a[2] < 0 ? -angle : angle) + 2 * Math.PI - ε) % (2 * Math.PI);
}
d3.geo.distance = function(a, b) {
var Δλ = (b[0] - a[0]) * d3_radians, φ0 = a[1] * d3_radians, φ1 = b[1] * d3_radians, sinΔλ = Math.sin(Δλ), cosΔλ = Math.cos(Δλ), sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), sinφ1 = Math.sin(φ1), cosφ1 = Math.cos(φ1), t;
return Math.atan2(Math.sqrt((t = cosφ1 * sinΔλ) * t + (t = cosφ0 * sinφ1 - sinφ0 * cosφ1 * cosΔλ) * t), sinφ0 * sinφ1 + cosφ0 * cosφ1 * cosΔλ);
};
d3.geo.graticule = function() {
var x1, x0, X1, X0, y1, y0, Y1, Y0, dx = 10, dy = dx, DX = 90, DY = 360, x, y, X, Y, precision = 2.5;
function graticule() {
return {
type: "MultiLineString",
coordinates: lines()
};
}
function lines() {
return d3.range(Math.ceil(X0 / DX) * DX, X1, DX).map(X).concat(d3.range(Math.ceil(Y0 / DY) * DY, Y1, DY).map(Y)).concat(d3.range(Math.ceil(x0 / dx) * dx, x1, dx).filter(function(x) {
return Math.abs(x % DX) > ε;
}).map(x)).concat(d3.range(Math.ceil(y0 / dy) * dy, y1, dy).filter(function(y) {
return Math.abs(y % DY) > ε;
}).map(y));
}
graticule.lines = function() {
return lines().map(function(coordinates) {
return {
type: "LineString",
coordinates: coordinates
};
});
};
graticule.outline = function() {
return {
type: "Polygon",
coordinates: [ X(X0).concat(Y(Y1).slice(1), X(X1).reverse().slice(1), Y(Y0).reverse().slice(1)) ]
};
};
graticule.extent = function(_) {
if (!arguments.length) return graticule.minorExtent();
return graticule.majorExtent(_).minorExtent(_);
};
graticule.majorExtent = function(_) {
if (!arguments.length) return [ [ X0, Y0 ], [ X1, Y1 ] ];
X0 = +_[0][0], X1 = +_[1][0];
Y0 = +_[0][1], Y1 = +_[1][1];
if (X0 > X1) _ = X0, X0 = X1, X1 = _;
if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;
return graticule.precision(precision);
};
graticule.minorExtent = function(_) {
if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ];
x0 = +_[0][0], x1 = +_[1][0];
y0 = +_[0][1], y1 = +_[1][1];
if (x0 > x1) _ = x0, x0 = x1, x1 = _;
if (y0 > y1) _ = y0, y0 = y1, y1 = _;
return graticule.precision(precision);
};
graticule.step = function(_) {
if (!arguments.length) return graticule.minorStep();
return graticule.majorStep(_).minorStep(_);
};
graticule.majorStep = function(_) {
if (!arguments.length) return [ DX, DY ];
DX = +_[0], DY = +_[1];
return graticule;
};
graticule.minorStep = function(_) {
if (!arguments.length) return [ dx, dy ];
dx = +_[0], dy = +_[1];
return graticule;
};
graticule.precision = function(_) {
if (!arguments.length) return precision;
precision = +_;
x = d3_geo_graticuleX(y0, y1, 90);
y = d3_geo_graticuleY(x0, x1, precision);
X = d3_geo_graticuleX(Y0, Y1, 90);
Y = d3_geo_graticuleY(X0, X1, precision);
return graticule;
};
return graticule.majorExtent([ [ -180, -90 + ε ], [ 180, 90 - ε ] ]).minorExtent([ [ -180, -80 - ε ], [ 180, 80 + ε ] ]);
};
function d3_geo_graticuleX(y0, y1, dy) {
var y = d3.range(y0, y1 - ε, dy).concat(y1);
return function(x) {
return y.map(function(y) {
return [ x, y ];
});
};
}
function d3_geo_graticuleY(x0, x1, dx) {
var x = d3.range(x0, x1 - ε, dx).concat(x1);
return function(y) {
return x.map(function(x) {
return [ x, y ];
});
};
}
function d3_source(d) {
return d.source;
}
function d3_target(d) {
return d.target;
}
d3.geo.greatArc = function() {
var source = d3_source, source_, target = d3_target, target_;
function greatArc() {
return {
type: "LineString",
coordinates: [ source_ || source.apply(this, arguments), target_ || target.apply(this, arguments) ]
};
}
greatArc.distance = function() {
return d3.geo.distance(source_ || source.apply(this, arguments), target_ || target.apply(this, arguments));
};
greatArc.source = function(_) {
if (!arguments.length) return source;
source = _, source_ = typeof _ === "function" ? null : _;
return greatArc;
};
greatArc.target = function(_) {
if (!arguments.length) return target;
target = _, target_ = typeof _ === "function" ? null : _;
return greatArc;
};
greatArc.precision = function() {
return arguments.length ? greatArc : 0;
};
return greatArc;
};
d3.geo.interpolate = function(source, target) {
return d3_geo_interpolate(source[0] * d3_radians, source[1] * d3_radians, target[0] * d3_radians, target[1] * d3_radians);
};
function d3_geo_interpolate(x0, y0, x1, y1) {
var cy0 = Math.cos(y0), sy0 = Math.sin(y0), cy1 = Math.cos(y1), sy1 = Math.sin(y1), kx0 = cy0 * Math.cos(x0), ky0 = cy0 * Math.sin(x0), kx1 = cy1 * Math.cos(x1), ky1 = cy1 * Math.sin(x1), d = 2 * Math.asin(Math.sqrt(d3_haversin(y1 - y0) + cy0 * cy1 * d3_haversin(x1 - x0))), k = 1 / Math.sin(d);
var interpolate = d ? function(t) {
var B = Math.sin(t *= d) * k, A = Math.sin(d - t) * k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1;
return [ Math.atan2(y, x) * d3_degrees, Math.atan2(z, Math.sqrt(x * x + y * y)) * d3_degrees ];
} : function() {
return [ x0 * d3_degrees, y0 * d3_degrees ];
};
interpolate.distance = d;
return interpolate;
}
d3.geo.length = function(object) {
d3_geo_lengthSum = 0;
d3.geo.stream(object, d3_geo_length);
return d3_geo_lengthSum;
};
var d3_geo_lengthSum;
var d3_geo_length = {
sphere: d3_noop,
point: d3_noop,
lineStart: d3_geo_lengthLineStart,
lineEnd: d3_noop,
polygonStart: d3_noop,
polygonEnd: d3_noop
};
function d3_geo_lengthLineStart() {
var λ0, sinφ0, cosφ0;
d3_geo_length.point = function(λ, φ) {
λ0 = λ * d3_radians, sinφ0 = Math.sin(φ *= d3_radians), cosφ0 = Math.cos(φ);
d3_geo_length.point = nextPoint;
};
d3_geo_length.lineEnd = function() {
d3_geo_length.point = d3_geo_length.lineEnd = d3_noop;
};
function nextPoint(λ, φ) {
var sinφ = Math.sin(φ *= d3_radians), cosφ = Math.cos(φ), t = Math.abs((λ *= d3_radians) - λ0), cosΔλ = Math.cos(t);
d3_geo_lengthSum += Math.atan2(Math.sqrt((t = cosφ * Math.sin(t)) * t + (t = cosφ0 * sinφ - sinφ0 * cosφ * cosΔλ) * t), sinφ0 * sinφ + cosφ0 * cosφ * cosΔλ);
λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ;
}
}
function d3_geo_azimuthal(scale, angle) {
function azimuthal(λ, φ) {
var cosλ = Math.cos(λ), cosφ = Math.cos(φ), k = scale(cosλ * cosφ);
return [ k * cosφ * Math.sin(λ), k * Math.sin(φ) ];
}
azimuthal.invert = function(x, y) {
var ρ = Math.sqrt(x * x + y * y), c = angle(ρ), sinc = Math.sin(c), cosc = Math.cos(c);
return [ Math.atan2(x * sinc, ρ * cosc), Math.asin(ρ && y * sinc / ρ) ];
};
return azimuthal;
}
var d3_geo_azimuthalEqualArea = d3_geo_azimuthal(function(cosλcosφ) {
return Math.sqrt(2 / (1 + cosλcosφ));
}, function(ρ) {
return 2 * Math.asin(ρ / 2);
});
(d3.geo.azimuthalEqualArea = function() {
return d3_geo_projection(d3_geo_azimuthalEqualArea);
}).raw = d3_geo_azimuthalEqualArea;
var d3_geo_azimuthalEquidistant = d3_geo_azimuthal(function(cosλcosφ) {
var c = Math.acos(cosλcosφ);
return c && c / Math.sin(c);
}, d3_identity);
(d3.geo.azimuthalEquidistant = function() {
return d3_geo_projection(d3_geo_azimuthalEquidistant);
}).raw = d3_geo_azimuthalEquidistant;
function d3_geo_conicConformal(φ0, φ1) {
var cosφ0 = Math.cos(φ0), t = function(φ) {
return Math.tan(π / 4 + φ / 2);
}, n = φ0 === φ1 ? Math.sin(φ0) : Math.log(cosφ0 / Math.cos(φ1)) / Math.log(t(φ1) / t(φ0)), F = cosφ0 * Math.pow(t(φ0), n) / n;
if (!n) return d3_geo_mercator;
function forward(λ, φ) {
var ρ = Math.abs(Math.abs(φ) - π / 2) < ε ? 0 : F / Math.pow(t(φ), n);
return [ ρ * Math.sin(n * λ), F - ρ * Math.cos(n * λ) ];
}
forward.invert = function(x, y) {
var ρ0_y = F - y, ρ = d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y);
return [ Math.atan2(x, ρ0_y) / n, 2 * Math.atan(Math.pow(F / ρ, 1 / n)) - π / 2 ];
};
return forward;
}
(d3.geo.conicConformal = function() {
return d3_geo_conic(d3_geo_conicConformal);
}).raw = d3_geo_conicConformal;
function d3_geo_conicEquidistant(φ0, φ1) {
var cosφ0 = Math.cos(φ0), n = φ0 === φ1 ? Math.sin(φ0) : (cosφ0 - Math.cos(φ1)) / (φ1 - φ0), G = cosφ0 / n + φ0;
if (Math.abs(n) < ε) return d3_geo_equirectangular;
function forward(λ, φ) {
var ρ = G - φ;
return [ ρ * Math.sin(n * λ), G - ρ * Math.cos(n * λ) ];
}
forward.invert = function(x, y) {
var ρ0_y = G - y;
return [ Math.atan2(x, ρ0_y) / n, G - d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y) ];
};
return forward;
}
(d3.geo.conicEquidistant = function() {
return d3_geo_conic(d3_geo_conicEquidistant);
}).raw = d3_geo_conicEquidistant;
var d3_geo_gnomonic = d3_geo_azimuthal(function(cosλcosφ) {
return 1 / cosλcosφ;
}, Math.atan);
(d3.geo.gnomonic = function() {
return d3_geo_projection(d3_geo_gnomonic);
}).raw = d3_geo_gnomonic;
function d3_geo_mercator(λ, φ) {
return [ λ, Math.log(Math.tan(π / 4 + φ / 2)) ];
}
d3_geo_mercator.invert = function(x, y) {
return [ x, 2 * Math.atan(Math.exp(y)) - π / 2 ];
};
function d3_geo_mercatorProjection(project) {
var m = d3_geo_projection(project), scale = m.scale, translate = m.translate, clipExtent = m.clipExtent, clipAuto;
m.scale = function() {
var v = scale.apply(m, arguments);
return v === m ? clipAuto ? m.clipExtent(null) : m : v;
};
m.translate = function() {
var v = translate.apply(m, arguments);
return v === m ? clipAuto ? m.clipExtent(null) : m : v;
};
m.clipExtent = function(_) {
var v = clipExtent.apply(m, arguments);
if (v === m) {
if (clipAuto = _ == null) {
var k = π * scale(), t = translate();
clipExtent([ [ t[0] - k, t[1] - k ], [ t[0] + k, t[1] + k ] ]);
}
} else if (clipAuto) {
v = null;
}
return v;
};
return m.clipExtent(null);
}
(d3.geo.mercator = function() {
return d3_geo_mercatorProjection(d3_geo_mercator);
}).raw = d3_geo_mercator;
var d3_geo_orthographic = d3_geo_azimuthal(function() {
return 1;
}, Math.asin);
(d3.geo.orthographic = function() {
return d3_geo_projection(d3_geo_orthographic);
}).raw = d3_geo_orthographic;
var d3_geo_stereographic = d3_geo_azimuthal(function(cosλcosφ) {
return 1 / (1 + cosλcosφ);
}, function(ρ) {
return 2 * Math.atan(ρ);
});
(d3.geo.stereographic = function() {
return d3_geo_projection(d3_geo_stereographic);
}).raw = d3_geo_stereographic;
function d3_geo_transverseMercator(λ, φ) {
var B = Math.cos(φ) * Math.sin(λ);
return [ Math.log((1 + B) / (1 - B)) / 2, Math.atan2(Math.tan(φ), Math.cos(λ)) ];
}
d3_geo_transverseMercator.invert = function(x, y) {
return [ Math.atan2(d3_sinh(x), Math.cos(y)), d3_asin(Math.sin(y) / d3_cosh(x)) ];
};
(d3.geo.transverseMercator = function() {
return d3_geo_mercatorProjection(d3_geo_transverseMercator);
}).raw = d3_geo_transverseMercator;
d3.geom = {};
d3.svg = {};
function d3_svg_line(projection) {
var x = d3_svg_lineX, y = d3_svg_lineY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7;
function line(data) {
var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y);
function segment() {
segments.push("M", interpolate(projection(points), tension));
}
while (++i < n) {
if (defined.call(this, d = data[i], i)) {
points.push([ +fx.call(this, d, i), +fy.call(this, d, i) ]);
} else if (points.length) {
segment();
points = [];
}
}
if (points.length) segment();
return segments.length ? segments.join("") : null;
}
line.x = function(_) {
if (!arguments.length) return x;
x = _;
return line;
};
line.y = function(_) {
if (!arguments.length) return y;
y = _;
return line;
};
line.defined = function(_) {
if (!arguments.length) return defined;
defined = _;
return line;
};
line.interpolate = function(_) {
if (!arguments.length) return interpolateKey;
if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;
return line;
};
line.tension = function(_) {
if (!arguments.length) return tension;
tension = _;
return line;
};
return line;
}
d3.svg.line = function() {
return d3_svg_line(d3_identity);
};
function d3_svg_lineX(d) {
return d[0];
}
function d3_svg_lineY(d) {
return d[1];
}
var d3_svg_lineInterpolators = d3.map({
linear: d3_svg_lineLinear,
"linear-closed": d3_svg_lineLinearClosed,
step: d3_svg_lineStep,
"step-before": d3_svg_lineStepBefore,
"step-after": d3_svg_lineStepAfter,
basis: d3_svg_lineBasis,
"basis-open": d3_svg_lineBasisOpen,
"basis-closed": d3_svg_lineBasisClosed,
bundle: d3_svg_lineBundle,
cardinal: d3_svg_lineCardinal,
"cardinal-open": d3_svg_lineCardinalOpen,
"cardinal-closed": d3_svg_lineCardinalClosed,
monotone: d3_svg_lineMonotone
});
d3_svg_lineInterpolators.forEach(function(key, value) {
value.key = key;
value.closed = /-closed$/.test(key);
});
function d3_svg_lineLinear(points) {
return points.join("L");
}
function d3_svg_lineLinearClosed(points) {
return d3_svg_lineLinear(points) + "Z";
}
function d3_svg_lineStep(points) {
var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ];
while (++i < n) path.push("H", (p[0] + (p = points[i])[0]) / 2, "V", p[1]);
if (n > 1) path.push("H", p[0]);
return path.join("");
}
function d3_svg_lineStepBefore(points) {
var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ];
while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]);
return path.join("");
}
function d3_svg_lineStepAfter(points) {
var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ];
while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]);
return path.join("");
}
function d3_svg_lineCardinalOpen(points, tension) {
return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, points.length - 1), d3_svg_lineCardinalTangents(points, tension));
}
function d3_svg_lineCardinalClosed(points, tension) {
return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite((points.push(points[0]),
points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension));
}
function d3_svg_lineCardinal(points, tension) {
return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension));
}
function d3_svg_lineHermite(points, tangents) {
if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) {
return d3_svg_lineLinear(points);
}
var quad = points.length != tangents.length, path = "", p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1;
if (quad) {
path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3) + "," + p[0] + "," + p[1];
p0 = points[1];
pi = 2;
}
if (tangents.length > 1) {
t = tangents[1];
p = points[pi];
pi++;
path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1]) + "," + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1];
for (var i = 2; i < tangents.length; i++, pi++) {
p = points[pi];
t = tangents[i];
path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1];
}
}
if (quad) {
var lp = points[pi];
path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3) + "," + lp[0] + "," + lp[1];
}
return path;
}
function d3_svg_lineCardinalTangents(points, tension) {
var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length;
while (++i < n) {
p0 = p1;
p1 = p2;
p2 = points[i];
tangents.push([ a * (p2[0] - p0[0]), a * (p2[1] - p0[1]) ]);
}
return tangents;
}
function d3_svg_lineBasis(points) {
if (points.length < 3) return d3_svg_lineLinear(points);
var i = 1, n = points.length, pi = points[0], x0 = pi[0], y0 = pi[1], px = [ x0, x0, x0, (pi = points[1])[0] ], py = [ y0, y0, y0, pi[1] ], path = [ x0, ",", y0, "L", d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];
points.push(points[n - 1]);
while (++i <= n) {
pi = points[i];
px.shift();
px.push(pi[0]);
py.shift();
py.push(pi[1]);
d3_svg_lineBasisBezier(path, px, py);
}
points.pop();
path.push("L", pi);
return path.join("");
}
function d3_svg_lineBasisOpen(points) {
if (points.length < 4) return d3_svg_lineLinear(points);
var path = [], i = -1, n = points.length, pi, px = [ 0 ], py = [ 0 ];
while (++i < 3) {
pi = points[i];
px.push(pi[0]);
py.push(pi[1]);
}
path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py));
--i;
while (++i < n) {
pi = points[i];
px.shift();
px.push(pi[0]);
py.shift();
py.push(pi[1]);
d3_svg_lineBasisBezier(path, px, py);
}
return path.join("");
}
function d3_svg_lineBasisClosed(points) {
var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = [];
while (++i < 4) {
pi = points[i % n];
px.push(pi[0]);
py.push(pi[1]);
}
path = [ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];
--i;
while (++i < m) {
pi = points[i % n];
px.shift();
px.push(pi[0]);
py.shift();
py.push(pi[1]);
d3_svg_lineBasisBezier(path, px, py);
}
return path.join("");
}
function d3_svg_lineBundle(points, tension) {
var n = points.length - 1;
if (n) {
var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t;
while (++i <= n) {
p = points[i];
t = i / n;
p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);
p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);
}
}
return d3_svg_lineBasis(points);
}
function d3_svg_lineDot4(a, b) {
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
}
var d3_svg_lineBasisBezier1 = [ 0, 2 / 3, 1 / 3, 0 ], d3_svg_lineBasisBezier2 = [ 0, 1 / 3, 2 / 3, 0 ], d3_svg_lineBasisBezier3 = [ 0, 1 / 6, 2 / 3, 1 / 6 ];
function d3_svg_lineBasisBezier(path, x, y) {
path.push("C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y));
}
function d3_svg_lineSlope(p0, p1) {
return (p1[1] - p0[1]) / (p1[0] - p0[0]);
}
function d3_svg_lineFiniteDifferences(points) {
var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1);
while (++i < j) {
m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2;
}
m[i] = d;
return m;
}
function d3_svg_lineMonotoneTangents(points) {
var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1;
while (++i < j) {
d = d3_svg_lineSlope(points[i], points[i + 1]);
if (Math.abs(d) < 1e-6) {
m[i] = m[i + 1] = 0;
} else {
a = m[i] / d;
b = m[i + 1] / d;
s = a * a + b * b;
if (s > 9) {
s = d * 3 / Math.sqrt(s);
m[i] = s * a;
m[i + 1] = s * b;
}
}
}
i = -1;
while (++i <= j) {
s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i]));
tangents.push([ s || 0, m[i] * s || 0 ]);
}
return tangents;
}
function d3_svg_lineMonotone(points) {
return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points));
}
d3.geom.hull = function(vertices) {
var x = d3_svg_lineX, y = d3_svg_lineY;
if (arguments.length) return hull(vertices);
function hull(data) {
if (data.length < 3) return [];
var fx = d3_functor(x), fy = d3_functor(y), n = data.length, vertices, plen = n - 1, points = [], stack = [], d, i, j, h = 0, x1, y1, x2, y2, u, v, a, sp;
if (fx === d3_svg_lineX && y === d3_svg_lineY) vertices = data; else for (i = 0,
vertices = []; i < n; ++i) {
vertices.push([ +fx.call(this, d = data[i], i), +fy.call(this, d, i) ]);
}
for (i = 1; i < n; ++i) {
if (vertices[i][1] < vertices[h][1] || vertices[i][1] == vertices[h][1] && vertices[i][0] < vertices[h][0]) h = i;
}
for (i = 0; i < n; ++i) {
if (i === h) continue;
y1 = vertices[i][1] - vertices[h][1];
x1 = vertices[i][0] - vertices[h][0];
points.push({
angle: Math.atan2(y1, x1),
index: i
});
}
points.sort(function(a, b) {
return a.angle - b.angle;
});
a = points[0].angle;
v = points[0].index;
u = 0;
for (i = 1; i < plen; ++i) {
j = points[i].index;
if (a == points[i].angle) {
x1 = vertices[v][0] - vertices[h][0];
y1 = vertices[v][1] - vertices[h][1];
x2 = vertices[j][0] - vertices[h][0];
y2 = vertices[j][1] - vertices[h][1];
if (x1 * x1 + y1 * y1 >= x2 * x2 + y2 * y2) {
points[i].index = -1;
continue;
} else {
points[u].index = -1;
}
}
a = points[i].angle;
u = i;
v = j;
}
stack.push(h);
for (i = 0, j = 0; i < 2; ++j) {
if (points[j].index > -1) {
stack.push(points[j].index);
i++;
}
}
sp = stack.length;
for (;j < plen; ++j) {
if (points[j].index < 0) continue;
while (!d3_geom_hullCCW(stack[sp - 2], stack[sp - 1], points[j].index, vertices)) {
--sp;
}
stack[sp++] = points[j].index;
}
var poly = [];
for (i = sp - 1; i >= 0; --i) poly.push(data[stack[i]]);
return poly;
}
hull.x = function(_) {
return arguments.length ? (x = _, hull) : x;
};
hull.y = function(_) {
return arguments.length ? (y = _, hull) : y;
};
return hull;
};
function d3_geom_hullCCW(i1, i2, i3, v) {
var t, a, b, c, d, e, f;
t = v[i1];
a = t[0];
b = t[1];
t = v[i2];
c = t[0];
d = t[1];
t = v[i3];
e = t[0];
f = t[1];
return (f - b) * (c - a) - (d - b) * (e - a) > 0;
}
d3.geom.polygon = function(coordinates) {
d3_subclass(coordinates, d3_geom_polygonPrototype);
return coordinates;
};
var d3_geom_polygonPrototype = d3.geom.polygon.prototype = [];
d3_geom_polygonPrototype.area = function() {
var i = -1, n = this.length, a, b = this[n - 1], area = 0;
while (++i < n) {
a = b;
b = this[i];
area += a[1] * b[0] - a[0] * b[1];
}
return area * .5;
};
d3_geom_polygonPrototype.centroid = function(k) {
var i = -1, n = this.length, x = 0, y = 0, a, b = this[n - 1], c;
if (!arguments.length) k = -1 / (6 * this.area());
while (++i < n) {
a = b;
b = this[i];
c = a[0] * b[1] - b[0] * a[1];
x += (a[0] + b[0]) * c;
y += (a[1] + b[1]) * c;
}
return [ x * k, y * k ];
};
d3_geom_polygonPrototype.clip = function(subject) {
var input, closed = d3_geom_polygonClosed(subject), i = -1, n = this.length - d3_geom_polygonClosed(this), j, m, a = this[n - 1], b, c, d;
while (++i < n) {
input = subject.slice();
subject.length = 0;
b = this[i];
c = input[(m = input.length - closed) - 1];
j = -1;
while (++j < m) {
d = input[j];
if (d3_geom_polygonInside(d, a, b)) {
if (!d3_geom_polygonInside(c, a, b)) {
subject.push(d3_geom_polygonIntersect(c, d, a, b));
}
subject.push(d);
} else if (d3_geom_polygonInside(c, a, b)) {
subject.push(d3_geom_polygonIntersect(c, d, a, b));
}
c = d;
}
if (closed) subject.push(subject[0]);
a = b;
}
return subject;
};
function d3_geom_polygonInside(p, a, b) {
return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]);
}
function d3_geom_polygonIntersect(c, d, a, b) {
var x1 = c[0], x3 = a[0], x21 = d[0] - x1, x43 = b[0] - x3, y1 = c[1], y3 = a[1], y21 = d[1] - y1, y43 = b[1] - y3, ua = (x43 * (y1 - y3) - y43 * (x1 - x3)) / (y43 * x21 - x43 * y21);
return [ x1 + ua * x21, y1 + ua * y21 ];
}
function d3_geom_polygonClosed(coordinates) {
var a = coordinates[0], b = coordinates[coordinates.length - 1];
return !(a[0] - b[0] || a[1] - b[1]);
}
d3.geom.delaunay = function(vertices) {
var edges = vertices.map(function() {
return [];
}), triangles = [];
d3_geom_voronoiTessellate(vertices, function(e) {
edges[e.region.l.index].push(vertices[e.region.r.index]);
});
edges.forEach(function(edge, i) {
var v = vertices[i], cx = v[0], cy = v[1];
edge.forEach(function(v) {
v.angle = Math.atan2(v[0] - cx, v[1] - cy);
});
edge.sort(function(a, b) {
return a.angle - b.angle;
});
for (var j = 0, m = edge.length - 1; j < m; j++) {
triangles.push([ v, edge[j], edge[j + 1] ]);
}
});
return triangles;
};
d3.geom.voronoi = function(points) {
var x = d3_svg_lineX, y = d3_svg_lineY, clipPolygon = null;
if (arguments.length) return voronoi(points);
function voronoi(data) {
var points, polygons = data.map(function() {
return [];
}), fx = d3_functor(x), fy = d3_functor(y), d, i, n = data.length, Z = 1e6;
if (fx === d3_svg_lineX && fy === d3_svg_lineY) points = data; else for (points = new Array(n),
i = 0; i < n; ++i) {
points[i] = [ +fx.call(this, d = data[i], i), +fy.call(this, d, i) ];
}
d3_geom_voronoiTessellate(points, function(e) {
var s1, s2, x1, x2, y1, y2;
if (e.a === 1 && e.b >= 0) {
s1 = e.ep.r;
s2 = e.ep.l;
} else {
s1 = e.ep.l;
s2 = e.ep.r;
}
if (e.a === 1) {
y1 = s1 ? s1.y : -Z;
x1 = e.c - e.b * y1;
y2 = s2 ? s2.y : Z;
x2 = e.c - e.b * y2;
} else {
x1 = s1 ? s1.x : -Z;
y1 = e.c - e.a * x1;
x2 = s2 ? s2.x : Z;
y2 = e.c - e.a * x2;
}
var v1 = [ x1, y1 ], v2 = [ x2, y2 ];
polygons[e.region.l.index].push(v1, v2);
polygons[e.region.r.index].push(v1, v2);
});
polygons = polygons.map(function(polygon, i) {
var cx = points[i][0], cy = points[i][1], angle = polygon.map(function(v) {
return Math.atan2(v[0] - cx, v[1] - cy);
}), order = d3.range(polygon.length).sort(function(a, b) {
return angle[a] - angle[b];
});
return order.filter(function(d, i) {
return !i || angle[d] - angle[order[i - 1]] > ε;
}).map(function(d) {
return polygon[d];
});
});
polygons.forEach(function(polygon, i) {
var n = polygon.length;
if (!n) return polygon.push([ -Z, -Z ], [ -Z, Z ], [ Z, Z ], [ Z, -Z ]);
if (n > 2) return;
var p0 = points[i], p1 = polygon[0], p2 = polygon[1], x0 = p0[0], y0 = p0[1], x1 = p1[0], y1 = p1[1], x2 = p2[0], y2 = p2[1], dx = Math.abs(x2 - x1), dy = y2 - y1;
if (Math.abs(dy) < ε) {
var y = y0 < y1 ? -Z : Z;
polygon.push([ -Z, y ], [ Z, y ]);
} else if (dx < ε) {
var x = x0 < x1 ? -Z : Z;
polygon.push([ x, -Z ], [ x, Z ]);
} else {
var y = (x2 - x1) * (y1 - y0) < (x1 - x0) * (y2 - y1) ? Z : -Z, z = Math.abs(dy) - dx;
if (Math.abs(z) < ε) {
polygon.push([ dy < 0 ? y : -y, y ]);
} else {
if (z > 0) y *= -1;
polygon.push([ -Z, y ], [ Z, y ]);
}
}
});
if (clipPolygon) for (i = 0; i < n; ++i) clipPolygon.clip(polygons[i]);
for (i = 0; i < n; ++i) polygons[i].point = data[i];
return polygons;
}
voronoi.x = function(_) {
return arguments.length ? (x = _, voronoi) : x;
};
voronoi.y = function(_) {
return arguments.length ? (y = _, voronoi) : y;
};
voronoi.clipExtent = function(_) {
if (!arguments.length) return clipPolygon && [ clipPolygon[0], clipPolygon[2] ];
if (_ == null) clipPolygon = null; else {
var x1 = +_[0][0], y1 = +_[0][1], x2 = +_[1][0], y2 = +_[1][1];
clipPolygon = d3.geom.polygon([ [ x1, y1 ], [ x1, y2 ], [ x2, y2 ], [ x2, y1 ] ]);
}
return voronoi;
};
voronoi.size = function(_) {
if (!arguments.length) return clipPolygon && clipPolygon[2];
return voronoi.clipExtent(_ && [ [ 0, 0 ], _ ]);
};
voronoi.links = function(data) {
var points, graph = data.map(function() {
return [];
}), links = [], fx = d3_functor(x), fy = d3_functor(y), d, i, n = data.length;
if (fx === d3_svg_lineX && fy === d3_svg_lineY) points = data; else for (points = new Array(n),
i = 0; i < n; ++i) {
points[i] = [ +fx.call(this, d = data[i], i), +fy.call(this, d, i) ];
}
d3_geom_voronoiTessellate(points, function(e) {
var l = e.region.l.index, r = e.region.r.index;
if (graph[l][r]) return;
graph[l][r] = graph[r][l] = true;
links.push({
source: data[l],
target: data[r]
});
});
return links;
};
voronoi.triangles = function(data) {
if (x === d3_svg_lineX && y === d3_svg_lineY) return d3.geom.delaunay(data);
var points = new Array(n), fx = d3_functor(x), fy = d3_functor(y), d, i = -1, n = data.length;
while (++i < n) {
(points[i] = [ +fx.call(this, d = data[i], i), +fy.call(this, d, i) ]).data = d;
}
return d3.geom.delaunay(points).map(function(triangle) {
return triangle.map(function(point) {
return point.data;
});
});
};
return voronoi;
};
var d3_geom_voronoiOpposite = {
l: "r",
r: "l"
};
function d3_geom_voronoiTessellate(points, callback) {
var Sites = {
list: points.map(function(v, i) {
return {
index: i,
x: v[0],
y: v[1]
};
}).sort(function(a, b) {
return a.y < b.y ? -1 : a.y > b.y ? 1 : a.x < b.x ? -1 : a.x > b.x ? 1 : 0;
}),
bottomSite: null
};
var EdgeList = {
list: [],
leftEnd: null,
rightEnd: null,
init: function() {
EdgeList.leftEnd = EdgeList.createHalfEdge(null, "l");
EdgeList.rightEnd = EdgeList.createHalfEdge(null, "l");
EdgeList.leftEnd.r = EdgeList.rightEnd;
EdgeList.rightEnd.l = EdgeList.leftEnd;
EdgeList.list.unshift(EdgeList.leftEnd, EdgeList.rightEnd);
},
createHalfEdge: function(edge, side) {
return {
edge: edge,
side: side,
vertex: null,
l: null,
r: null
};
},
insert: function(lb, he) {
he.l = lb;
he.r = lb.r;
lb.r.l = he;
lb.r = he;
},
leftBound: function(p) {
var he = EdgeList.leftEnd;
do {
he = he.r;
} while (he != EdgeList.rightEnd && Geom.rightOf(he, p));
he = he.l;
return he;
},
del: function(he) {
he.l.r = he.r;
he.r.l = he.l;
he.edge = null;
},
right: function(he) {
return he.r;
},
left: function(he) {
return he.l;
},
leftRegion: function(he) {
return he.edge == null ? Sites.bottomSite : he.edge.region[he.side];
},
rightRegion: function(he) {
return he.edge == null ? Sites.bottomSite : he.edge.region[d3_geom_voronoiOpposite[he.side]];
}
};
var Geom = {
bisect: function(s1, s2) {
var newEdge = {
region: {
l: s1,
r: s2
},
ep: {
l: null,
r: null
}
};
var dx = s2.x - s1.x, dy = s2.y - s1.y, adx = dx > 0 ? dx : -dx, ady = dy > 0 ? dy : -dy;
newEdge.c = s1.x * dx + s1.y * dy + (dx * dx + dy * dy) * .5;
if (adx > ady) {
newEdge.a = 1;
newEdge.b = dy / dx;
newEdge.c /= dx;
} else {
newEdge.b = 1;
newEdge.a = dx / dy;
newEdge.c /= dy;
}
return newEdge;
},
intersect: function(el1, el2) {
var e1 = el1.edge, e2 = el2.edge;
if (!e1 || !e2 || e1.region.r == e2.region.r) {
return null;
}
var d = e1.a * e2.b - e1.b * e2.a;
if (Math.abs(d) < 1e-10) {
return null;
}
var xint = (e1.c * e2.b - e2.c * e1.b) / d, yint = (e2.c * e1.a - e1.c * e2.a) / d, e1r = e1.region.r, e2r = e2.region.r, el, e;
if (e1r.y < e2r.y || e1r.y == e2r.y && e1r.x < e2r.x) {
el = el1;
e = e1;
} else {
el = el2;
e = e2;
}
var rightOfSite = xint >= e.region.r.x;
if (rightOfSite && el.side === "l" || !rightOfSite && el.side === "r") {
return null;
}
return {
x: xint,
y: yint
};
},
rightOf: function(he, p) {
var e = he.edge, topsite = e.region.r, rightOfSite = p.x > topsite.x;
if (rightOfSite && he.side === "l") {
return 1;
}
if (!rightOfSite && he.side === "r") {
return 0;
}
if (e.a === 1) {
var dyp = p.y - topsite.y, dxp = p.x - topsite.x, fast = 0, above = 0;
if (!rightOfSite && e.b < 0 || rightOfSite && e.b >= 0) {
above = fast = dyp >= e.b * dxp;
} else {
above = p.x + p.y * e.b > e.c;
if (e.b < 0) {
above = !above;
}
if (!above) {
fast = 1;
}
}
if (!fast) {
var dxs = topsite.x - e.region.l.x;
above = e.b * (dxp * dxp - dyp * dyp) < dxs * dyp * (1 + 2 * dxp / dxs + e.b * e.b);
if (e.b < 0) {
above = !above;
}
}
} else {
var yl = e.c - e.a * p.x, t1 = p.y - yl, t2 = p.x - topsite.x, t3 = yl - topsite.y;
above = t1 * t1 > t2 * t2 + t3 * t3;
}
return he.side === "l" ? above : !above;
},
endPoint: function(edge, side, site) {
edge.ep[side] = site;
if (!edge.ep[d3_geom_voronoiOpposite[side]]) return;
callback(edge);
},
distance: function(s, t) {
var dx = s.x - t.x, dy = s.y - t.y;
return Math.sqrt(dx * dx + dy * dy);
}
};
var EventQueue = {
list: [],
insert: function(he, site, offset) {
he.vertex = site;
he.ystar = site.y + offset;
for (var i = 0, list = EventQueue.list, l = list.length; i < l; i++) {
var next = list[i];
if (he.ystar > next.ystar || he.ystar == next.ystar && site.x > next.vertex.x) {
continue;
} else {
break;
}
}
list.splice(i, 0, he);
},
del: function(he) {
for (var i = 0, ls = EventQueue.list, l = ls.length; i < l && ls[i] != he; ++i) {}
ls.splice(i, 1);
},
empty: function() {
return EventQueue.list.length === 0;
},
nextEvent: function(he) {
for (var i = 0, ls = EventQueue.list, l = ls.length; i < l; ++i) {
if (ls[i] == he) return ls[i + 1];
}
return null;
},
min: function() {
var elem = EventQueue.list[0];
return {
x: elem.vertex.x,
y: elem.ystar
};
},
extractMin: function() {
return EventQueue.list.shift();
}
};
EdgeList.init();
Sites.bottomSite = Sites.list.shift();
var newSite = Sites.list.shift(), newIntStar;
var lbnd, rbnd, llbnd, rrbnd, bisector;
var bot, top, temp, p, v;
var e, pm;
while (true) {
if (!EventQueue.empty()) {
newIntStar = EventQueue.min();
}
if (newSite && (EventQueue.empty() || newSite.y < newIntStar.y || newSite.y == newIntStar.y && newSite.x < newIntStar.x)) {
lbnd = EdgeList.leftBound(newSite);
rbnd = EdgeList.right(lbnd);
bot = EdgeList.rightRegion(lbnd);
e = Geom.bisect(bot, newSite);
bisector = EdgeList.createHalfEdge(e, "l");
EdgeList.insert(lbnd, bisector);
p = Geom.intersect(lbnd, bisector);
if (p) {
EventQueue.del(lbnd);
EventQueue.insert(lbnd, p, Geom.distance(p, newSite));
}
lbnd = bisector;
bisector = EdgeList.createHalfEdge(e, "r");
EdgeList.insert(lbnd, bisector);
p = Geom.intersect(bisector, rbnd);
if (p) {
EventQueue.insert(bisector, p, Geom.distance(p, newSite));
}
newSite = Sites.list.shift();
} else if (!EventQueue.empty()) {
lbnd = EventQueue.extractMin();
llbnd = EdgeList.left(lbnd);
rbnd = EdgeList.right(lbnd);
rrbnd = EdgeList.right(rbnd);
bot = EdgeList.leftRegion(lbnd);
top = EdgeList.rightRegion(rbnd);
v = lbnd.vertex;
Geom.endPoint(lbnd.edge, lbnd.side, v);
Geom.endPoint(rbnd.edge, rbnd.side, v);
EdgeList.del(lbnd);
EventQueue.del(rbnd);
EdgeList.del(rbnd);
pm = "l";
if (bot.y > top.y) {
temp = bot;
bot = top;
top = temp;
pm = "r";
}
e = Geom.bisect(bot, top);
bisector = EdgeList.createHalfEdge(e, pm);
EdgeList.insert(llbnd, bisector);
Geom.endPoint(e, d3_geom_voronoiOpposite[pm], v);
p = Geom.intersect(llbnd, bisector);
if (p) {
EventQueue.del(llbnd);
EventQueue.insert(llbnd, p, Geom.distance(p, bot));
}
p = Geom.intersect(bisector, rrbnd);
if (p) {
EventQueue.insert(bisector, p, Geom.distance(p, bot));
}
} else {
break;
}
}
for (lbnd = EdgeList.right(EdgeList.leftEnd); lbnd != EdgeList.rightEnd; lbnd = EdgeList.right(lbnd)) {
callback(lbnd.edge);
}
}
d3.geom.quadtree = function(points, x1, y1, x2, y2) {
var x = d3_svg_lineX, y = d3_svg_lineY, compat;
if (compat = arguments.length) {
x = d3_geom_quadtreeCompatX;
y = d3_geom_quadtreeCompatY;
if (compat === 3) {
y2 = y1;
x2 = x1;
y1 = x1 = 0;
}
return quadtree(points);
}
function quadtree(data) {
var d, fx = d3_functor(x), fy = d3_functor(y), xs, ys, i, n, x1_, y1_, x2_, y2_;
if (x1 != null) {
x1_ = x1, y1_ = y1, x2_ = x2, y2_ = y2;
} else {
x2_ = y2_ = -(x1_ = y1_ = Infinity);
xs = [], ys = [];
n = data.length;
if (compat) for (i = 0; i < n; ++i) {
d = data[i];
if (d.x < x1_) x1_ = d.x;
if (d.y < y1_) y1_ = d.y;
if (d.x > x2_) x2_ = d.x;
if (d.y > y2_) y2_ = d.y;
xs.push(d.x);
ys.push(d.y);
} else for (i = 0; i < n; ++i) {
var x_ = +fx(d = data[i], i), y_ = +fy(d, i);
if (x_ < x1_) x1_ = x_;
if (y_ < y1_) y1_ = y_;
if (x_ > x2_) x2_ = x_;
if (y_ > y2_) y2_ = y_;
xs.push(x_);
ys.push(y_);
}
}
var dx = x2_ - x1_, dy = y2_ - y1_;
if (dx > dy) y2_ = y1_ + dx; else x2_ = x1_ + dy;
function insert(n, d, x, y, x1, y1, x2, y2) {
if (isNaN(x) || isNaN(y)) return;
if (n.leaf) {
var nx = n.x, ny = n.y;
if (nx != null) {
if (Math.abs(nx - x) + Math.abs(ny - y) < .01) {
insertChild(n, d, x, y, x1, y1, x2, y2);
} else {
var nPoint = n.point;
n.x = n.y = n.point = null;
insertChild(n, nPoint, nx, ny, x1, y1, x2, y2);
insertChild(n, d, x, y, x1, y1, x2, y2);
}
} else {
n.x = x, n.y = y, n.point = d;
}
} else {
insertChild(n, d, x, y, x1, y1, x2, y2);
}
}
function insertChild(n, d, x, y, x1, y1, x2, y2) {
var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, right = x >= sx, bottom = y >= sy, i = (bottom << 1) + right;
n.leaf = false;
n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode());
if (right) x1 = sx; else x2 = sx;
if (bottom) y1 = sy; else y2 = sy;
insert(n, d, x, y, x1, y1, x2, y2);
}
var root = d3_geom_quadtreeNode();
root.add = function(d) {
insert(root, d, +fx(d, ++i), +fy(d, i), x1_, y1_, x2_, y2_);
};
root.visit = function(f) {
d3_geom_quadtreeVisit(f, root, x1_, y1_, x2_, y2_);
};
i = -1;
if (x1 == null) {
while (++i < n) {
insert(root, data[i], xs[i], ys[i], x1_, y1_, x2_, y2_);
}
--i;
} else data.forEach(root.add);
xs = ys = data = d = null;
return root;
}
quadtree.x = function(_) {
return arguments.length ? (x = _, quadtree) : x;
};
quadtree.y = function(_) {
return arguments.length ? (y = _, quadtree) : y;
};
quadtree.extent = function(_) {
if (!arguments.length) return x1 == null ? null : [ [ x1, y1 ], [ x2, y2 ] ];
if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = +_[0][0], y1 = +_[0][1], x2 = +_[1][0],
y2 = +_[1][1];
return quadtree;
};
quadtree.size = function(_) {
if (!arguments.length) return x1 == null ? null : [ x2 - x1, y2 - y1 ];
if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = y1 = 0, x2 = +_[0], y2 = +_[1];
return quadtree;
};
return quadtree;
};
function d3_geom_quadtreeCompatX(d) {
return d.x;
}
function d3_geom_quadtreeCompatY(d) {
return d.y;
}
function d3_geom_quadtreeNode() {
return {
leaf: true,
nodes: [],
point: null,
x: null,
y: null
};
}
function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) {
if (!f(node, x1, y1, x2, y2)) {
var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, children = node.nodes;
if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy);
if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy);
if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2);
if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2);
}
}
d3.interpolateRgb = d3_interpolateRgb;
function d3_interpolateRgb(a, b) {
a = d3.rgb(a);
b = d3.rgb(b);
var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab;
return function(t) {
return "#" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t));
};
}
d3.interpolateObject = d3_interpolateObject;
function d3_interpolateObject(a, b) {
var i = {}, c = {}, k;
for (k in a) {
if (k in b) {
i[k] = d3_interpolate(a[k], b[k]);
} else {
c[k] = a[k];
}
}
for (k in b) {
if (!(k in a)) {
c[k] = b[k];
}
}
return function(t) {
for (k in i) c[k] = i[k](t);
return c;
};
}
d3.interpolateNumber = d3_interpolateNumber;
function d3_interpolateNumber(a, b) {
b -= a = +a;
return function(t) {
return a + b * t;
};
}
d3.interpolateString = d3_interpolateString;
function d3_interpolateString(a, b) {
var m, i, j, s0 = 0, s1 = 0, s = [], q = [], n, o;
a = a + "", b = b + "";
d3_interpolate_number.lastIndex = 0;
for (i = 0; m = d3_interpolate_number.exec(b); ++i) {
if (m.index) s.push(b.substring(s0, s1 = m.index));
q.push({
i: s.length,
x: m[0]
});
s.push(null);
s0 = d3_interpolate_number.lastIndex;
}
if (s0 < b.length) s.push(b.substring(s0));
for (i = 0, n = q.length; (m = d3_interpolate_number.exec(a)) && i < n; ++i) {
o = q[i];
if (o.x == m[0]) {
if (o.i) {
if (s[o.i + 1] == null) {
s[o.i - 1] += o.x;
s.splice(o.i, 1);
for (j = i + 1; j < n; ++j) q[j].i--;
} else {
s[o.i - 1] += o.x + s[o.i + 1];
s.splice(o.i, 2);
for (j = i + 1; j < n; ++j) q[j].i -= 2;
}
} else {
if (s[o.i + 1] == null) {
s[o.i] = o.x;
} else {
s[o.i] = o.x + s[o.i + 1];
s.splice(o.i + 1, 1);
for (j = i + 1; j < n; ++j) q[j].i--;
}
}
q.splice(i, 1);
n--;
i--;
} else {
o.x = d3_interpolateNumber(parseFloat(m[0]), parseFloat(o.x));
}
}
while (i < n) {
o = q.pop();
if (s[o.i + 1] == null) {
s[o.i] = o.x;
} else {
s[o.i] = o.x + s[o.i + 1];
s.splice(o.i + 1, 1);
}
n--;
}
if (s.length === 1) {
return s[0] == null ? (o = q[0].x, function(t) {
return o(t) + "";
}) : function() {
return b;
};
}
return function(t) {
for (i = 0; i < n; ++i) s[(o = q[i]).i] = o.x(t);
return s.join("");
};
}
var d3_interpolate_number = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g;
d3.interpolate = d3_interpolate;
function d3_interpolate(a, b) {
var i = d3.interpolators.length, f;
while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ;
return f;
}
d3.interpolators = [ function(a, b) {
var t = typeof b;
return (t === "string" ? d3_rgb_names.has(b) || /^(#|rgb\(|hsl\()/.test(b) ? d3_interpolateRgb : d3_interpolateString : b instanceof d3_Color ? d3_interpolateRgb : t === "object" ? Array.isArray(b) ? d3_interpolateArray : d3_interpolateObject : d3_interpolateNumber)(a, b);
} ];
d3.interpolateArray = d3_interpolateArray;
function d3_interpolateArray(a, b) {
var x = [], c = [], na = a.length, nb = b.length, n0 = Math.min(a.length, b.length), i;
for (i = 0; i < n0; ++i) x.push(d3_interpolate(a[i], b[i]));
for (;i < na; ++i) c[i] = a[i];
for (;i < nb; ++i) c[i] = b[i];
return function(t) {
for (i = 0; i < n0; ++i) c[i] = x[i](t);
return c;
};
}
var d3_ease_default = function() {
return d3_identity;
};
var d3_ease = d3.map({
linear: d3_ease_default,
poly: d3_ease_poly,
quad: function() {
return d3_ease_quad;
},
cubic: function() {
return d3_ease_cubic;
},
sin: function() {
return d3_ease_sin;
},
exp: function() {
return d3_ease_exp;
},
circle: function() {
return d3_ease_circle;
},
elastic: d3_ease_elastic,
back: d3_ease_back,
bounce: function() {
return d3_ease_bounce;
}
});
var d3_ease_mode = d3.map({
"in": d3_identity,
out: d3_ease_reverse,
"in-out": d3_ease_reflect,
"out-in": function(f) {
return d3_ease_reflect(d3_ease_reverse(f));
}
});
d3.ease = function(name) {
var i = name.indexOf("-"), t = i >= 0 ? name.substring(0, i) : name, m = i >= 0 ? name.substring(i + 1) : "in";
t = d3_ease.get(t) || d3_ease_default;
m = d3_ease_mode.get(m) || d3_identity;
return d3_ease_clamp(m(t.apply(null, Array.prototype.slice.call(arguments, 1))));
};
function d3_ease_clamp(f) {
return function(t) {
return t <= 0 ? 0 : t >= 1 ? 1 : f(t);
};
}
function d3_ease_reverse(f) {
return function(t) {
return 1 - f(1 - t);
};
}
function d3_ease_reflect(f) {
return function(t) {
return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t));
};
}
function d3_ease_quad(t) {
return t * t;
}
function d3_ease_cubic(t) {
return t * t * t;
}
function d3_ease_cubicInOut(t) {
if (t <= 0) return 0;
if (t >= 1) return 1;
var t2 = t * t, t3 = t2 * t;
return 4 * (t < .5 ? t3 : 3 * (t - t2) + t3 - .75);
}
function d3_ease_poly(e) {
return function(t) {
return Math.pow(t, e);
};
}
function d3_ease_sin(t) {
return 1 - Math.cos(t * π / 2);
}
function d3_ease_exp(t) {
return Math.pow(2, 10 * (t - 1));
}
function d3_ease_circle(t) {
return 1 - Math.sqrt(1 - t * t);
}
function d3_ease_elastic(a, p) {
var s;
if (arguments.length < 2) p = .45;
if (arguments.length) s = p / (2 * π) * Math.asin(1 / a); else a = 1, s = p / 4;
return function(t) {
return 1 + a * Math.pow(2, 10 * -t) * Math.sin((t - s) * 2 * π / p);
};
}
function d3_ease_back(s) {
if (!s) s = 1.70158;
return function(t) {
return t * t * ((s + 1) * t - s);
};
}
function d3_ease_bounce(t) {
return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;
}
d3.interpolateHcl = d3_interpolateHcl;
function d3_interpolateHcl(a, b) {
a = d3.hcl(a);
b = d3.hcl(b);
var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al;
if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac;
if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;
return function(t) {
return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + "";
};
}
d3.interpolateHsl = d3_interpolateHsl;
function d3_interpolateHsl(a, b) {
a = d3.hsl(a);
b = d3.hsl(b);
var ah = a.h, as = a.s, al = a.l, bh = b.h - ah, bs = b.s - as, bl = b.l - al;
if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as;
if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;
return function(t) {
return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + "";
};
}
d3.interpolateLab = d3_interpolateLab;
function d3_interpolateLab(a, b) {
a = d3.lab(a);
b = d3.lab(b);
var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab;
return function(t) {
return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + "";
};
}
d3.interpolateRound = d3_interpolateRound;
function d3_interpolateRound(a, b) {
b -= a;
return function(t) {
return Math.round(a + b * t);
};
}
d3.transform = function(string) {
var g = d3_document.createElementNS(d3.ns.prefix.svg, "g");
return (d3.transform = function(string) {
if (string != null) {
g.setAttribute("transform", string);
var t = g.transform.baseVal.consolidate();
}
return new d3_transform(t ? t.matrix : d3_transformIdentity);
})(string);
};
function d3_transform(m) {
var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0;
if (r0[0] * r1[1] < r1[0] * r0[1]) {
r0[0] *= -1;
r0[1] *= -1;
kx *= -1;
kz *= -1;
}
this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_degrees;
this.translate = [ m.e, m.f ];
this.scale = [ kx, ky ];
this.skew = ky ? Math.atan2(kz, ky) * d3_degrees : 0;
}
d3_transform.prototype.toString = function() {
return "translate(" + this.translate + ")rotate(" + this.rotate + ")skewX(" + this.skew + ")scale(" + this.scale + ")";
};
function d3_transformDot(a, b) {
return a[0] * b[0] + a[1] * b[1];
}
function d3_transformNormalize(a) {
var k = Math.sqrt(d3_transformDot(a, a));
if (k) {
a[0] /= k;
a[1] /= k;
}
return k;
}
function d3_transformCombine(a, b, k) {
a[0] += k * b[0];
a[1] += k * b[1];
return a;
}
var d3_transformIdentity = {
a: 1,
b: 0,
c: 0,
d: 1,
e: 0,
f: 0
};
d3.interpolateTransform = d3_interpolateTransform;
function d3_interpolateTransform(a, b) {
var s = [], q = [], n, A = d3.transform(a), B = d3.transform(b), ta = A.translate, tb = B.translate, ra = A.rotate, rb = B.rotate, wa = A.skew, wb = B.skew, ka = A.scale, kb = B.scale;
if (ta[0] != tb[0] || ta[1] != tb[1]) {
s.push("translate(", null, ",", null, ")");
q.push({
i: 1,
x: d3_interpolateNumber(ta[0], tb[0])
}, {
i: 3,
x: d3_interpolateNumber(ta[1], tb[1])
});
} else if (tb[0] || tb[1]) {
s.push("translate(" + tb + ")");
} else {
s.push("");
}
if (ra != rb) {
if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360;
q.push({
i: s.push(s.pop() + "rotate(", null, ")") - 2,
x: d3_interpolateNumber(ra, rb)
});
} else if (rb) {
s.push(s.pop() + "rotate(" + rb + ")");
}
if (wa != wb) {
q.push({
i: s.push(s.pop() + "skewX(", null, ")") - 2,
x: d3_interpolateNumber(wa, wb)
});
} else if (wb) {
s.push(s.pop() + "skewX(" + wb + ")");
}
if (ka[0] != kb[0] || ka[1] != kb[1]) {
n = s.push(s.pop() + "scale(", null, ",", null, ")");
q.push({
i: n - 4,
x: d3_interpolateNumber(ka[0], kb[0])
}, {
i: n - 2,
x: d3_interpolateNumber(ka[1], kb[1])
});
} else if (kb[0] != 1 || kb[1] != 1) {
s.push(s.pop() + "scale(" + kb + ")");
}
n = q.length;
return function(t) {
var i = -1, o;
while (++i < n) s[(o = q[i]).i] = o.x(t);
return s.join("");
};
}
function d3_uninterpolateNumber(a, b) {
b = b - (a = +a) ? 1 / (b - a) : 0;
return function(x) {
return (x - a) * b;
};
}
function d3_uninterpolateClamp(a, b) {
b = b - (a = +a) ? 1 / (b - a) : 0;
return function(x) {
return Math.max(0, Math.min(1, (x - a) * b));
};
}
d3.layout = {};
d3.layout.bundle = function() {
return function(links) {
var paths = [], i = -1, n = links.length;
while (++i < n) paths.push(d3_layout_bundlePath(links[i]));
return paths;
};
};
function d3_layout_bundlePath(link) {
var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [ start ];
while (start !== lca) {
start = start.parent;
points.push(start);
}
var k = points.length;
while (end !== lca) {
points.splice(k, 0, end);
end = end.parent;
}
return points;
}
function d3_layout_bundleAncestors(node) {
var ancestors = [], parent = node.parent;
while (parent != null) {
ancestors.push(node);
node = parent;
parent = parent.parent;
}
ancestors.push(node);
return ancestors;
}
function d3_layout_bundleLeastCommonAncestor(a, b) {
if (a === b) return a;
var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null;
while (aNode === bNode) {
sharedNode = aNode;
aNode = aNodes.pop();
bNode = bNodes.pop();
}
return sharedNode;
}
d3.layout.chord = function() {
var chord = {}, chords, groups, matrix, n, padding = 0, sortGroups, sortSubgroups, sortChords;
function relayout() {
var subgroups = {}, groupSums = [], groupIndex = d3.range(n), subgroupIndex = [], k, x, x0, i, j;
chords = [];
groups = [];
k = 0, i = -1;
while (++i < n) {
x = 0, j = -1;
while (++j < n) {
x += matrix[i][j];
}
groupSums.push(x);
subgroupIndex.push(d3.range(n));
k += x;
}
if (sortGroups) {
groupIndex.sort(function(a, b) {
return sortGroups(groupSums[a], groupSums[b]);
});
}
if (sortSubgroups) {
subgroupIndex.forEach(function(d, i) {
d.sort(function(a, b) {
return sortSubgroups(matrix[i][a], matrix[i][b]);
});
});
}
k = (2 * π - padding * n) / k;
x = 0, i = -1;
while (++i < n) {
x0 = x, j = -1;
while (++j < n) {
var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k;
subgroups[di + "-" + dj] = {
index: di,
subindex: dj,
startAngle: a0,
endAngle: a1,
value: v
};
}
groups[di] = {
index: di,
startAngle: x0,
endAngle: x,
value: (x - x0) / k
};
x += padding;
}
i = -1;
while (++i < n) {
j = i - 1;
while (++j < n) {
var source = subgroups[i + "-" + j], target = subgroups[j + "-" + i];
if (source.value || target.value) {
chords.push(source.value < target.value ? {
source: target,
target: source
} : {
source: source,
target: target
});
}
}
}
if (sortChords) resort();
}
function resort() {
chords.sort(function(a, b) {
return sortChords((a.source.value + a.target.value) / 2, (b.source.value + b.target.value) / 2);
});
}
chord.matrix = function(x) {
if (!arguments.length) return matrix;
n = (matrix = x) && matrix.length;
chords = groups = null;
return chord;
};
chord.padding = function(x) {
if (!arguments.length) return padding;
padding = x;
chords = groups = null;
return chord;
};
chord.sortGroups = function(x) {
if (!arguments.length) return sortGroups;
sortGroups = x;
chords = groups = null;
return chord;
};
chord.sortSubgroups = function(x) {
if (!arguments.length) return sortSubgroups;
sortSubgroups = x;
chords = null;
return chord;
};
chord.sortChords = function(x) {
if (!arguments.length) return sortChords;
sortChords = x;
if (chords) resort();
return chord;
};
chord.chords = function() {
if (!chords) relayout();
return chords;
};
chord.groups = function() {
if (!groups) relayout();
return groups;
};
return chord;
};
d3.layout.force = function() {
var force = {}, event = d3.dispatch("start", "tick", "end"), size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, gravity = .1, theta = .8, nodes = [], links = [], distances, strengths, charges;
function repulse(node) {
return function(quad, x1, _, x2) {
if (quad.point !== node) {
var dx = quad.cx - node.x, dy = quad.cy - node.y, dn = 1 / Math.sqrt(dx * dx + dy * dy);
if ((x2 - x1) * dn < theta) {
var k = quad.charge * dn * dn;
node.px -= dx * k;
node.py -= dy * k;
return true;
}
if (quad.point && isFinite(dn)) {
var k = quad.pointCharge * dn * dn;
node.px -= dx * k;
node.py -= dy * k;
}
}
return !quad.charge;
};
}
force.tick = function() {
if ((alpha *= .99) < .005) {
event.end({
type: "end",
alpha: alpha = 0
});
return true;
}
var n = nodes.length, m = links.length, q, i, o, s, t, l, k, x, y;
for (i = 0; i < m; ++i) {
o = links[i];
s = o.source;
t = o.target;
x = t.x - s.x;
y = t.y - s.y;
if (l = x * x + y * y) {
l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;
x *= l;
y *= l;
t.x -= x * (k = s.weight / (t.weight + s.weight));
t.y -= y * k;
s.x += x * (k = 1 - k);
s.y += y * k;
}
}
if (k = alpha * gravity) {
x = size[0] / 2;
y = size[1] / 2;
i = -1;
if (k) while (++i < n) {
o = nodes[i];
o.x += (x - o.x) * k;
o.y += (y - o.y) * k;
}
}
if (charge) {
d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges);
i = -1;
while (++i < n) {
if (!(o = nodes[i]).fixed) {
q.visit(repulse(o));
}
}
}
i = -1;
while (++i < n) {
o = nodes[i];
if (o.fixed) {
o.x = o.px;
o.y = o.py;
} else {
o.x -= (o.px - (o.px = o.x)) * friction;
o.y -= (o.py - (o.py = o.y)) * friction;
}
}
event.tick({
type: "tick",
alpha: alpha
});
};
force.nodes = function(x) {
if (!arguments.length) return nodes;
nodes = x;
return force;
};
force.links = function(x) {
if (!arguments.length) return links;
links = x;
return force;
};
force.size = function(x) {
if (!arguments.length) return size;
size = x;
return force;
};
force.linkDistance = function(x) {
if (!arguments.length) return linkDistance;
linkDistance = typeof x === "function" ? x : +x;
return force;
};
force.distance = force.linkDistance;
force.linkStrength = function(x) {
if (!arguments.length) return linkStrength;
linkStrength = typeof x === "function" ? x : +x;
return force;
};
force.friction = function(x) {
if (!arguments.length) return friction;
friction = +x;
return force;
};
force.charge = function(x) {
if (!arguments.length) return charge;
charge = typeof x === "function" ? x : +x;
return force;
};
force.gravity = function(x) {
if (!arguments.length) return gravity;
gravity = +x;
return force;
};
force.theta = function(x) {
if (!arguments.length) return theta;
theta = +x;
return force;
};
force.alpha = function(x) {
if (!arguments.length) return alpha;
x = +x;
if (alpha) {
if (x > 0) alpha = x; else alpha = 0;
} else if (x > 0) {
event.start({
type: "start",
alpha: alpha = x
});
d3.timer(force.tick);
}
return force;
};
force.start = function() {
var i, j, n = nodes.length, m = links.length, w = size[0], h = size[1], neighbors, o;
for (i = 0; i < n; ++i) {
(o = nodes[i]).index = i;
o.weight = 0;
}
for (i = 0; i < m; ++i) {
o = links[i];
if (typeof o.source == "number") o.source = nodes[o.source];
if (typeof o.target == "number") o.target = nodes[o.target];
++o.source.weight;
++o.target.weight;
}
for (i = 0; i < n; ++i) {
o = nodes[i];
if (isNaN(o.x)) o.x = position("x", w);
if (isNaN(o.y)) o.y = position("y", h);
if (isNaN(o.px)) o.px = o.x;
if (isNaN(o.py)) o.py = o.y;
}
distances = [];
if (typeof linkDistance === "function") for (i = 0; i < m; ++i) distances[i] = +linkDistance.call(this, links[i], i); else for (i = 0; i < m; ++i) distances[i] = linkDistance;
strengths = [];
if (typeof linkStrength === "function") for (i = 0; i < m; ++i) strengths[i] = +linkStrength.call(this, links[i], i); else for (i = 0; i < m; ++i) strengths[i] = linkStrength;
charges = [];
if (typeof charge === "function") for (i = 0; i < n; ++i) charges[i] = +charge.call(this, nodes[i], i); else for (i = 0; i < n; ++i) charges[i] = charge;
function position(dimension, size) {
var neighbors = neighbor(i), j = -1, m = neighbors.length, x;
while (++j < m) if (!isNaN(x = neighbors[j][dimension])) return x;
return Math.random() * size;
}
function neighbor() {
if (!neighbors) {
neighbors = [];
for (j = 0; j < n; ++j) {
neighbors[j] = [];
}
for (j = 0; j < m; ++j) {
var o = links[j];
neighbors[o.source.index].push(o.target);
neighbors[o.target.index].push(o.source);
}
}
return neighbors[i];
}
return force.resume();
};
force.resume = function() {
return force.alpha(.1);
};
force.stop = function() {
return force.alpha(0);
};
force.drag = function() {
if (!drag) drag = d3.behavior.drag().origin(d3_identity).on("dragstart.force", d3_layout_forceDragstart).on("drag.force", dragmove).on("dragend.force", d3_layout_forceDragend);
if (!arguments.length) return drag;
this.on("mouseover.force", d3_layout_forceMouseover).on("mouseout.force", d3_layout_forceMouseout).call(drag);
};
function dragmove(d) {
d.px = d3.event.x, d.py = d3.event.y;
force.resume();
}
return d3.rebind(force, event, "on");
};
function d3_layout_forceDragstart(d) {
d.fixed |= 2;
}
function d3_layout_forceDragend(d) {
d.fixed &= ~6;
}
function d3_layout_forceMouseover(d) {
d.fixed |= 4;
d.px = d.x, d.py = d.y;
}
function d3_layout_forceMouseout(d) {
d.fixed &= ~4;
}
function d3_layout_forceAccumulate(quad, alpha, charges) {
var cx = 0, cy = 0;
quad.charge = 0;
if (!quad.leaf) {
var nodes = quad.nodes, n = nodes.length, i = -1, c;
while (++i < n) {
c = nodes[i];
if (c == null) continue;
d3_layout_forceAccumulate(c, alpha, charges);
quad.charge += c.charge;
cx += c.charge * c.cx;
cy += c.charge * c.cy;
}
}
if (quad.point) {
if (!quad.leaf) {
quad.point.x += Math.random() - .5;
quad.point.y += Math.random() - .5;
}
var k = alpha * charges[quad.point.index];
quad.charge += quad.pointCharge = k;
cx += k * quad.point.x;
cy += k * quad.point.y;
}
quad.cx = cx / quad.charge;
quad.cy = cy / quad.charge;
}
var d3_layout_forceLinkDistance = 20, d3_layout_forceLinkStrength = 1;
d3.layout.hierarchy = function() {
var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue;
function recurse(node, depth, nodes) {
var childs = children.call(hierarchy, node, depth);
node.depth = depth;
nodes.push(node);
if (childs && (n = childs.length)) {
var i = -1, n, c = node.children = [], v = 0, j = depth + 1, d;
while (++i < n) {
d = recurse(childs[i], j, nodes);
d.parent = node;
c.push(d);
v += d.value;
}
if (sort) c.sort(sort);
if (value) node.value = v;
} else if (value) {
node.value = +value.call(hierarchy, node, depth) || 0;
}
return node;
}
function revalue(node, depth) {
var children = node.children, v = 0;
if (children && (n = children.length)) {
var i = -1, n, j = depth + 1;
while (++i < n) v += revalue(children[i], j);
} else if (value) {
v = +value.call(hierarchy, node, depth) || 0;
}
if (value) node.value = v;
return v;
}
function hierarchy(d) {
var nodes = [];
recurse(d, 0, nodes);
return nodes;
}
hierarchy.sort = function(x) {
if (!arguments.length) return sort;
sort = x;
return hierarchy;
};
hierarchy.children = function(x) {
if (!arguments.length) return children;
children = x;
return hierarchy;
};
hierarchy.value = function(x) {
if (!arguments.length) return value;
value = x;
return hierarchy;
};
hierarchy.revalue = function(root) {
revalue(root, 0);
return root;
};
return hierarchy;
};
function d3_layout_hierarchyRebind(object, hierarchy) {
d3.rebind(object, hierarchy, "sort", "children", "value");
object.nodes = object;
object.links = d3_layout_hierarchyLinks;
return object;
}
function d3_layout_hierarchyChildren(d) {
return d.children;
}
function d3_layout_hierarchyValue(d) {
return d.value;
}
function d3_layout_hierarchySort(a, b) {
return b.value - a.value;
}
function d3_layout_hierarchyLinks(nodes) {
return d3.merge(nodes.map(function(parent) {
return (parent.children || []).map(function(child) {
return {
source: parent,
target: child
};
});
}));
}
d3.layout.partition = function() {
var hierarchy = d3.layout.hierarchy(), size = [ 1, 1 ];
function position(node, x, dx, dy) {
var children = node.children;
node.x = x;
node.y = node.depth * dy;
node.dx = dx;
node.dy = dy;
if (children && (n = children.length)) {
var i = -1, n, c, d;
dx = node.value ? dx / node.value : 0;
while (++i < n) {
position(c = children[i], x, d = c.value * dx, dy);
x += d;
}
}
}
function depth(node) {
var children = node.children, d = 0;
if (children && (n = children.length)) {
var i = -1, n;
while (++i < n) d = Math.max(d, depth(children[i]));
}
return 1 + d;
}
function partition(d, i) {
var nodes = hierarchy.call(this, d, i);
position(nodes[0], 0, size[0], size[1] / depth(nodes[0]));
return nodes;
}
partition.size = function(x) {
if (!arguments.length) return size;
size = x;
return partition;
};
return d3_layout_hierarchyRebind(partition, hierarchy);
};
d3.layout.pie = function() {
var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = 2 * π;
function pie(data) {
var values = data.map(function(d, i) {
return +value.call(pie, d, i);
});
var a = +(typeof startAngle === "function" ? startAngle.apply(this, arguments) : startAngle);
var k = ((typeof endAngle === "function" ? endAngle.apply(this, arguments) : endAngle) - a) / d3.sum(values);
var index = d3.range(data.length);
if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function(i, j) {
return values[j] - values[i];
} : function(i, j) {
return sort(data[i], data[j]);
});
var arcs = [];
index.forEach(function(i) {
var d;
arcs[i] = {
data: data[i],
value: d = values[i],
startAngle: a,
endAngle: a += d * k
};
});
return arcs;
}
pie.value = function(x) {
if (!arguments.length) return value;
value = x;
return pie;
};
pie.sort = function(x) {
if (!arguments.length) return sort;
sort = x;
return pie;
};
pie.startAngle = function(x) {
if (!arguments.length) return startAngle;
startAngle = x;
return pie;
};
pie.endAngle = function(x) {
if (!arguments.length) return endAngle;
endAngle = x;
return pie;
};
return pie;
};
var d3_layout_pieSortByValue = {};
d3.layout.stack = function() {
var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY;
function stack(data, index) {
var series = data.map(function(d, i) {
return values.call(stack, d, i);
});
var points = series.map(function(d) {
return d.map(function(v, i) {
return [ x.call(stack, v, i), y.call(stack, v, i) ];
});
});
var orders = order.call(stack, points, index);
series = d3.permute(series, orders);
points = d3.permute(points, orders);
var offsets = offset.call(stack, points, index);
var n = series.length, m = series[0].length, i, j, o;
for (j = 0; j < m; ++j) {
out.call(stack, series[0][j], o = offsets[j], points[0][j][1]);
for (i = 1; i < n; ++i) {
out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]);
}
}
return data;
}
stack.values = function(x) {
if (!arguments.length) return values;
values = x;
return stack;
};
stack.order = function(x) {
if (!arguments.length) return order;
order = typeof x === "function" ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault;
return stack;
};
stack.offset = function(x) {
if (!arguments.length) return offset;
offset = typeof x === "function" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero;
return stack;
};
stack.x = function(z) {
if (!arguments.length) return x;
x = z;
return stack;
};
stack.y = function(z) {
if (!arguments.length) return y;
y = z;
return stack;
};
stack.out = function(z) {
if (!arguments.length) return out;
out = z;
return stack;
};
return stack;
};
function d3_layout_stackX(d) {
return d.x;
}
function d3_layout_stackY(d) {
return d.y;
}
function d3_layout_stackOut(d, y0, y) {
d.y0 = y0;
d.y = y;
}
var d3_layout_stackOrders = d3.map({
"inside-out": function(data) {
var n = data.length, i, j, max = data.map(d3_layout_stackMaxIndex), sums = data.map(d3_layout_stackReduceSum), index = d3.range(n).sort(function(a, b) {
return max[a] - max[b];
}), top = 0, bottom = 0, tops = [], bottoms = [];
for (i = 0; i < n; ++i) {
j = index[i];
if (top < bottom) {
top += sums[j];
tops.push(j);
} else {
bottom += sums[j];
bottoms.push(j);
}
}
return bottoms.reverse().concat(tops);
},
reverse: function(data) {
return d3.range(data.length).reverse();
},
"default": d3_layout_stackOrderDefault
});
var d3_layout_stackOffsets = d3.map({
silhouette: function(data) {
var n = data.length, m = data[0].length, sums = [], max = 0, i, j, o, y0 = [];
for (j = 0; j < m; ++j) {
for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
if (o > max) max = o;
sums.push(o);
}
for (j = 0; j < m; ++j) {
y0[j] = (max - sums[j]) / 2;
}
return y0;
},
wiggle: function(data) {
var n = data.length, x = data[0], m = x.length, i, j, k, s1, s2, s3, dx, o, o0, y0 = [];
y0[0] = o = o0 = 0;
for (j = 1; j < m; ++j) {
for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1];
for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) {
for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) {
s3 += (data[k][j][1] - data[k][j - 1][1]) / dx;
}
s2 += s3 * data[i][j][1];
}
y0[j] = o -= s1 ? s2 / s1 * dx : 0;
if (o < o0) o0 = o;
}
for (j = 0; j < m; ++j) y0[j] -= o0;
return y0;
},
expand: function(data) {
var n = data.length, m = data[0].length, k = 1 / n, i, j, o, y0 = [];
for (j = 0; j < m; ++j) {
for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; else for (i = 0; i < n; i++) data[i][j][1] = k;
}
for (j = 0; j < m; ++j) y0[j] = 0;
return y0;
},
zero: d3_layout_stackOffsetZero
});
function d3_layout_stackOrderDefault(data) {
return d3.range(data.length);
}
function d3_layout_stackOffsetZero(data) {
var j = -1, m = data[0].length, y0 = [];
while (++j < m) y0[j] = 0;
return y0;
}
function d3_layout_stackMaxIndex(array) {
var i = 1, j = 0, v = array[0][1], k, n = array.length;
for (;i < n; ++i) {
if ((k = array[i][1]) > v) {
j = i;
v = k;
}
}
return j;
}
function d3_layout_stackReduceSum(d) {
return d.reduce(d3_layout_stackSum, 0);
}
function d3_layout_stackSum(p, d) {
return p + d[1];
}
d3.layout.histogram = function() {
var frequency = true, valuer = Number, ranger = d3_layout_histogramRange, binner = d3_layout_histogramBinSturges;
function histogram(data, i) {
var bins = [], values = data.map(valuer, this), range = ranger.call(this, values, i), thresholds = binner.call(this, range, values, i), bin, i = -1, n = values.length, m = thresholds.length - 1, k = frequency ? 1 : 1 / n, x;
while (++i < m) {
bin = bins[i] = [];
bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]);
bin.y = 0;
}
if (m > 0) {
i = -1;
while (++i < n) {
x = values[i];
if (x >= range[0] && x <= range[1]) {
bin = bins[d3.bisect(thresholds, x, 1, m) - 1];
bin.y += k;
bin.push(data[i]);
}
}
}
return bins;
}
histogram.value = function(x) {
if (!arguments.length) return valuer;
valuer = x;
return histogram;
};
histogram.range = function(x) {
if (!arguments.length) return ranger;
ranger = d3_functor(x);
return histogram;
};
histogram.bins = function(x) {
if (!arguments.length) return binner;
binner = typeof x === "number" ? function(range) {
return d3_layout_histogramBinFixed(range, x);
} : d3_functor(x);
return histogram;
};
histogram.frequency = function(x) {
if (!arguments.length) return frequency;
frequency = !!x;
return histogram;
};
return histogram;
};
function d3_layout_histogramBinSturges(range, values) {
return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1));
}
function d3_layout_histogramBinFixed(range, n) {
var x = -1, b = +range[0], m = (range[1] - b) / n, f = [];
while (++x <= n) f[x] = m * x + b;
return f;
}
function d3_layout_histogramRange(values) {
return [ d3.min(values), d3.max(values) ];
}
d3.layout.tree = function() {
var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = false;
function tree(d, i) {
var nodes = hierarchy.call(this, d, i), root = nodes[0];
function firstWalk(node, previousSibling) {
var children = node.children, layout = node._tree;
if (children && (n = children.length)) {
var n, firstChild = children[0], previousChild, ancestor = firstChild, child, i = -1;
while (++i < n) {
child = children[i];
firstWalk(child, previousChild);
ancestor = apportion(child, previousChild, ancestor);
previousChild = child;
}
d3_layout_treeShift(node);
var midpoint = .5 * (firstChild._tree.prelim + child._tree.prelim);
if (previousSibling) {
layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling);
layout.mod = layout.prelim - midpoint;
} else {
layout.prelim = midpoint;
}
} else {
if (previousSibling) {
layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling);
}
}
}
function secondWalk(node, x) {
node.x = node._tree.prelim + x;
var children = node.children;
if (children && (n = children.length)) {
var i = -1, n;
x += node._tree.mod;
while (++i < n) {
secondWalk(children[i], x);
}
}
}
function apportion(node, previousSibling, ancestor) {
if (previousSibling) {
var vip = node, vop = node, vim = previousSibling, vom = node.parent.children[0], sip = vip._tree.mod, sop = vop._tree.mod, sim = vim._tree.mod, som = vom._tree.mod, shift;
while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) {
vom = d3_layout_treeLeft(vom);
vop = d3_layout_treeRight(vop);
vop._tree.ancestor = node;
shift = vim._tree.prelim + sim - vip._tree.prelim - sip + separation(vim, vip);
if (shift > 0) {
d3_layout_treeMove(d3_layout_treeAncestor(vim, node, ancestor), node, shift);
sip += shift;
sop += shift;
}
sim += vim._tree.mod;
sip += vip._tree.mod;
som += vom._tree.mod;
sop += vop._tree.mod;
}
if (vim && !d3_layout_treeRight(vop)) {
vop._tree.thread = vim;
vop._tree.mod += sim - sop;
}
if (vip && !d3_layout_treeLeft(vom)) {
vom._tree.thread = vip;
vom._tree.mod += sip - som;
ancestor = node;
}
}
return ancestor;
}
d3_layout_treeVisitAfter(root, function(node, previousSibling) {
node._tree = {
ancestor: node,
prelim: 0,
mod: 0,
change: 0,
shift: 0,
number: previousSibling ? previousSibling._tree.number + 1 : 0
};
});
firstWalk(root);
secondWalk(root, -root._tree.prelim);
var left = d3_layout_treeSearch(root, d3_layout_treeLeftmost), right = d3_layout_treeSearch(root, d3_layout_treeRightmost), deep = d3_layout_treeSearch(root, d3_layout_treeDeepest), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2, y1 = deep.depth || 1;
d3_layout_treeVisitAfter(root, nodeSize ? function(node) {
node.x *= size[0];
node.y = node.depth * size[1];
delete node._tree;
} : function(node) {
node.x = (node.x - x0) / (x1 - x0) * size[0];
node.y = node.depth / y1 * size[1];
delete node._tree;
});
return nodes;
}
tree.separation = function(x) {
if (!arguments.length) return separation;
separation = x;
return tree;
};
tree.size = function(x) {
if (!arguments.length) return nodeSize ? null : size;
nodeSize = (size = x) == null;
return tree;
};
tree.nodeSize = function(x) {
if (!arguments.length) return nodeSize ? size : null;
nodeSize = (size = x) != null;
return tree;
};
return d3_layout_hierarchyRebind(tree, hierarchy);
};
function d3_layout_treeSeparation(a, b) {
return a.parent == b.parent ? 1 : 2;
}
function d3_layout_treeLeft(node) {
var children = node.children;
return children && children.length ? children[0] : node._tree.thread;
}
function d3_layout_treeRight(node) {
var children = node.children, n;
return children && (n = children.length) ? children[n - 1] : node._tree.thread;
}
function d3_layout_treeSearch(node, compare) {
var children = node.children;
if (children && (n = children.length)) {
var child, n, i = -1;
while (++i < n) {
if (compare(child = d3_layout_treeSearch(children[i], compare), node) > 0) {
node = child;
}
}
}
return node;
}
function d3_layout_treeRightmost(a, b) {
return a.x - b.x;
}
function d3_layout_treeLeftmost(a, b) {
return b.x - a.x;
}
function d3_layout_treeDeepest(a, b) {
return a.depth - b.depth;
}
function d3_layout_treeVisitAfter(node, callback) {
function visit(node, previousSibling) {
var children = node.children;
if (children && (n = children.length)) {
var child, previousChild = null, i = -1, n;
while (++i < n) {
child = children[i];
visit(child, previousChild);
previousChild = child;
}
}
callback(node, previousSibling);
}
visit(node, null);
}
function d3_layout_treeShift(node) {
var shift = 0, change = 0, children = node.children, i = children.length, child;
while (--i >= 0) {
child = children[i]._tree;
child.prelim += shift;
child.mod += shift;
shift += child.shift + (change += child.change);
}
}
function d3_layout_treeMove(ancestor, node, shift) {
ancestor = ancestor._tree;
node = node._tree;
var change = shift / (node.number - ancestor.number);
ancestor.change += change;
node.change -= change;
node.shift += shift;
node.prelim += shift;
node.mod += shift;
}
function d3_layout_treeAncestor(vim, node, ancestor) {
return vim._tree.ancestor.parent == node.parent ? vim._tree.ancestor : ancestor;
}
d3.layout.pack = function() {
var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [ 1, 1 ], radius;
function pack(d, i) {
var nodes = hierarchy.call(this, d, i), root = nodes[0], w = size[0], h = size[1], r = radius == null ? Math.sqrt : typeof radius === "function" ? radius : function() {
return radius;
};
root.x = root.y = 0;
d3_layout_treeVisitAfter(root, function(d) {
d.r = +r(d.value);
});
d3_layout_treeVisitAfter(root, d3_layout_packSiblings);
if (padding) {
var dr = padding * (radius ? 1 : Math.max(2 * root.r / w, 2 * root.r / h)) / 2;
d3_layout_treeVisitAfter(root, function(d) {
d.r += dr;
});
d3_layout_treeVisitAfter(root, d3_layout_packSiblings);
d3_layout_treeVisitAfter(root, function(d) {
d.r -= dr;
});
}
d3_layout_packTransform(root, w / 2, h / 2, radius ? 1 : 1 / Math.max(2 * root.r / w, 2 * root.r / h));
return nodes;
}
pack.size = function(_) {
if (!arguments.length) return size;
size = _;
return pack;
};
pack.radius = function(_) {
if (!arguments.length) return radius;
radius = _ == null || typeof _ === "function" ? _ : +_;
return pack;
};
pack.padding = function(_) {
if (!arguments.length) return padding;
padding = +_;
return pack;
};
return d3_layout_hierarchyRebind(pack, hierarchy);
};
function d3_layout_packSort(a, b) {
return a.value - b.value;
}
function d3_layout_packInsert(a, b) {
var c = a._pack_next;
a._pack_next = b;
b._pack_prev = a;
b._pack_next = c;
c._pack_prev = b;
}
function d3_layout_packSplice(a, b) {
a._pack_next = b;
b._pack_prev = a;
}
function d3_layout_packIntersects(a, b) {
var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r;
return .999 * dr * dr > dx * dx + dy * dy;
}
function d3_layout_packSiblings(node) {
if (!(nodes = node.children) || !(n = nodes.length)) return;
var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n;
function bound(node) {
xMin = Math.min(node.x - node.r, xMin);
xMax = Math.max(node.x + node.r, xMax);
yMin = Math.min(node.y - node.r, yMin);
yMax = Math.max(node.y + node.r, yMax);
}
nodes.forEach(d3_layout_packLink);
a = nodes[0];
a.x = -a.r;
a.y = 0;
bound(a);
if (n > 1) {
b = nodes[1];
b.x = b.r;
b.y = 0;
bound(b);
if (n > 2) {
c = nodes[2];
d3_layout_packPlace(a, b, c);
bound(c);
d3_layout_packInsert(a, c);
a._pack_prev = c;
d3_layout_packInsert(c, b);
b = a._pack_next;
for (i = 3; i < n; i++) {
d3_layout_packPlace(a, b, c = nodes[i]);
var isect = 0, s1 = 1, s2 = 1;
for (j = b._pack_next; j !== b; j = j._pack_next, s1++) {
if (d3_layout_packIntersects(j, c)) {
isect = 1;
break;
}
}
if (isect == 1) {
for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {
if (d3_layout_packIntersects(k, c)) {
break;
}
}
}
if (isect) {
if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b);
i--;
} else {
d3_layout_packInsert(a, c);
b = c;
bound(c);
}
}
}
}
var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0;
for (i = 0; i < n; i++) {
c = nodes[i];
c.x -= cx;
c.y -= cy;
cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y));
}
node.r = cr;
nodes.forEach(d3_layout_packUnlink);
}
function d3_layout_packLink(node) {
node._pack_next = node._pack_prev = node;
}
function d3_layout_packUnlink(node) {
delete node._pack_next;
delete node._pack_prev;
}
function d3_layout_packTransform(node, x, y, k) {
var children = node.children;
node.x = x += k * node.x;
node.y = y += k * node.y;
node.r *= k;
if (children) {
var i = -1, n = children.length;
while (++i < n) d3_layout_packTransform(children[i], x, y, k);
}
}
function d3_layout_packPlace(a, b, c) {
var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y;
if (db && (dx || dy)) {
var da = b.r + c.r, dc = dx * dx + dy * dy;
da *= da;
db *= db;
var x = .5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);
c.x = a.x + x * dx + y * dy;
c.y = a.y + x * dy - y * dx;
} else {
c.x = a.x + db;
c.y = a.y;
}
}
d3.layout.cluster = function() {
var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = false;
function cluster(d, i) {
var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0;
d3_layout_treeVisitAfter(root, function(node) {
var children = node.children;
if (children && children.length) {
node.x = d3_layout_clusterX(children);
node.y = d3_layout_clusterY(children);
} else {
node.x = previousNode ? x += separation(node, previousNode) : 0;
node.y = 0;
previousNode = node;
}
});
var left = d3_layout_clusterLeft(root), right = d3_layout_clusterRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2;
d3_layout_treeVisitAfter(root, nodeSize ? function(node) {
node.x = (node.x - root.x) * size[0];
node.y = (root.y - node.y) * size[1];
} : function(node) {
node.x = (node.x - x0) / (x1 - x0) * size[0];
node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1];
});
return nodes;
}
cluster.separation = function(x) {
if (!arguments.length) return separation;
separation = x;
return cluster;
};
cluster.size = function(x) {
if (!arguments.length) return nodeSize ? null : size;
nodeSize = (size = x) == null;
return cluster;
};
cluster.nodeSize = function(x) {
if (!arguments.length) return nodeSize ? size : null;
nodeSize = (size = x) != null;
return cluster;
};
return d3_layout_hierarchyRebind(cluster, hierarchy);
};
function d3_layout_clusterY(children) {
return 1 + d3.max(children, function(child) {
return child.y;
});
}
function d3_layout_clusterX(children) {
return children.reduce(function(x, child) {
return x + child.x;
}, 0) / children.length;
}
function d3_layout_clusterLeft(node) {
var children = node.children;
return children && children.length ? d3_layout_clusterLeft(children[0]) : node;
}
function d3_layout_clusterRight(node) {
var children = node.children, n;
return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node;
}
d3.layout.treemap = function() {
var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [ 1, 1 ], padding = null, pad = d3_layout_treemapPadNull, sticky = false, stickies, mode = "squarify", ratio = .5 * (1 + Math.sqrt(5));
function scale(children, k) {
var i = -1, n = children.length, child, area;
while (++i < n) {
area = (child = children[i]).value * (k < 0 ? 0 : k);
child.area = isNaN(area) || area <= 0 ? 0 : area;
}
}
function squarify(node) {
var children = node.children;
if (children && children.length) {
var rect = pad(node), row = [], remaining = children.slice(), child, best = Infinity, score, u = mode === "slice" ? rect.dx : mode === "dice" ? rect.dy : mode === "slice-dice" ? node.depth & 1 ? rect.dy : rect.dx : Math.min(rect.dx, rect.dy), n;
scale(remaining, rect.dx * rect.dy / node.value);
row.area = 0;
while ((n = remaining.length) > 0) {
row.push(child = remaining[n - 1]);
row.area += child.area;
if (mode !== "squarify" || (score = worst(row, u)) <= best) {
remaining.pop();
best = score;
} else {
row.area -= row.pop().area;
position(row, u, rect, false);
u = Math.min(rect.dx, rect.dy);
row.length = row.area = 0;
best = Infinity;
}
}
if (row.length) {
position(row, u, rect, true);
row.length = row.area = 0;
}
children.forEach(squarify);
}
}
function stickify(node) {
var children = node.children;
if (children && children.length) {
var rect = pad(node), remaining = children.slice(), child, row = [];
scale(remaining, rect.dx * rect.dy / node.value);
row.area = 0;
while (child = remaining.pop()) {
row.push(child);
row.area += child.area;
if (child.z != null) {
position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length);
row.length = row.area = 0;
}
}
children.forEach(stickify);
}
}
function worst(row, u) {
var s = row.area, r, rmax = 0, rmin = Infinity, i = -1, n = row.length;
while (++i < n) {
if (!(r = row[i].area)) continue;
if (r < rmin) rmin = r;
if (r > rmax) rmax = r;
}
s *= s;
u *= u;
return s ? Math.max(u * rmax * ratio / s, s / (u * rmin * ratio)) : Infinity;
}
function position(row, u, rect, flush) {
var i = -1, n = row.length, x = rect.x, y = rect.y, v = u ? round(row.area / u) : 0, o;
if (u == rect.dx) {
if (flush || v > rect.dy) v = rect.dy;
while (++i < n) {
o = row[i];
o.x = x;
o.y = y;
o.dy = v;
x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0);
}
o.z = true;
o.dx += rect.x + rect.dx - x;
rect.y += v;
rect.dy -= v;
} else {
if (flush || v > rect.dx) v = rect.dx;
while (++i < n) {
o = row[i];
o.x = x;
o.y = y;
o.dx = v;
y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0);
}
o.z = false;
o.dy += rect.y + rect.dy - y;
rect.x += v;
rect.dx -= v;
}
}
function treemap(d) {
var nodes = stickies || hierarchy(d), root = nodes[0];
root.x = 0;
root.y = 0;
root.dx = size[0];
root.dy = size[1];
if (stickies) hierarchy.revalue(root);
scale([ root ], root.dx * root.dy / root.value);
(stickies ? stickify : squarify)(root);
if (sticky) stickies = nodes;
return nodes;
}
treemap.size = function(x) {
if (!arguments.length) return size;
size = x;
return treemap;
};
treemap.padding = function(x) {
if (!arguments.length) return padding;
function padFunction(node) {
var p = x.call(treemap, node, node.depth);
return p == null ? d3_layout_treemapPadNull(node) : d3_layout_treemapPad(node, typeof p === "number" ? [ p, p, p, p ] : p);
}
function padConstant(node) {
return d3_layout_treemapPad(node, x);
}
var type;
pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === "function" ? padFunction : type === "number" ? (x = [ x, x, x, x ],
padConstant) : padConstant;
return treemap;
};
treemap.round = function(x) {
if (!arguments.length) return round != Number;
round = x ? Math.round : Number;
return treemap;
};
treemap.sticky = function(x) {
if (!arguments.length) return sticky;
sticky = x;
stickies = null;
return treemap;
};
treemap.ratio = function(x) {
if (!arguments.length) return ratio;
ratio = x;
return treemap;
};
treemap.mode = function(x) {
if (!arguments.length) return mode;
mode = x + "";
return treemap;
};
return d3_layout_hierarchyRebind(treemap, hierarchy);
};
function d3_layout_treemapPadNull(node) {
return {
x: node.x,
y: node.y,
dx: node.dx,
dy: node.dy
};
}
function d3_layout_treemapPad(node, padding) {
var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2];
if (dx < 0) {
x += dx / 2;
dx = 0;
}
if (dy < 0) {
y += dy / 2;
dy = 0;
}
return {
x: x,
y: y,
dx: dx,
dy: dy
};
}
d3.random = {
normal: function(µ, σ) {
var n = arguments.length;
if (n < 2) σ = 1;
if (n < 1) µ = 0;
return function() {
var x, y, r;
do {
x = Math.random() * 2 - 1;
y = Math.random() * 2 - 1;
r = x * x + y * y;
} while (!r || r > 1);
return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r);
};
},
logNormal: function() {
var random = d3.random.normal.apply(d3, arguments);
return function() {
return Math.exp(random());
};
},
irwinHall: function(m) {
return function() {
for (var s = 0, j = 0; j < m; j++) s += Math.random();
return s / m;
};
}
};
d3.scale = {};
function d3_scaleExtent(domain) {
var start = domain[0], stop = domain[domain.length - 1];
return start < stop ? [ start, stop ] : [ stop, start ];
}
function d3_scaleRange(scale) {
return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range());
}
function d3_scale_bilinear(domain, range, uninterpolate, interpolate) {
var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]);
return function(x) {
return i(u(x));
};
}
function d3_scale_nice(domain, nice) {
var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx;
if (x1 < x0) {
dx = i0, i0 = i1, i1 = dx;
dx = x0, x0 = x1, x1 = dx;
}
domain[i0] = nice.floor(x0);
domain[i1] = nice.ceil(x1);
return domain;
}
function d3_scale_niceStep(step) {
return step ? {
floor: function(x) {
return Math.floor(x / step) * step;
},
ceil: function(x) {
return Math.ceil(x / step) * step;
}
} : d3_scale_niceIdentity;
}
var d3_scale_niceIdentity = {
floor: d3_identity,
ceil: d3_identity
};
function d3_scale_polylinear(domain, range, uninterpolate, interpolate) {
var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1;
if (domain[k] < domain[0]) {
domain = domain.slice().reverse();
range = range.slice().reverse();
}
while (++j <= k) {
u.push(uninterpolate(domain[j - 1], domain[j]));
i.push(interpolate(range[j - 1], range[j]));
}
return function(x) {
var j = d3.bisect(domain, x, 1, k) - 1;
return i[j](u[j](x));
};
}
d3.scale.linear = function() {
return d3_scale_linear([ 0, 1 ], [ 0, 1 ], d3_interpolate, false);
};
function d3_scale_linear(domain, range, interpolate, clamp) {
var output, input;
function rescale() {
var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber;
output = linear(domain, range, uninterpolate, interpolate);
input = linear(range, domain, uninterpolate, d3_interpolate);
return scale;
}
function scale(x) {
return output(x);
}
scale.invert = function(y) {
return input(y);
};
scale.domain = function(x) {
if (!arguments.length) return domain;
domain = x.map(Number);
return rescale();
};
scale.range = function(x) {
if (!arguments.length) return range;
range = x;
return rescale();
};
scale.rangeRound = function(x) {
return scale.range(x).interpolate(d3_interpolateRound);
};
scale.clamp = function(x) {
if (!arguments.length) return clamp;
clamp = x;
return rescale();
};
scale.interpolate = function(x) {
if (!arguments.length) return interpolate;
interpolate = x;
return rescale();
};
scale.ticks = function(m) {
return d3_scale_linearTicks(domain, m);
};
scale.tickFormat = function(m, format) {
return d3_scale_linearTickFormat(domain, m, format);
};
scale.nice = function(m) {
d3_scale_linearNice(domain, m);
return rescale();
};
scale.copy = function() {
return d3_scale_linear(domain, range, interpolate, clamp);
};
return rescale();
}
function d3_scale_linearRebind(scale, linear) {
return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp");
}
function d3_scale_linearNice(domain, m) {
return d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));
}
function d3_scale_linearTickRange(domain, m) {
if (m == null) m = 10;
var extent = d3_scaleExtent(domain), span = extent[1] - extent[0], step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), err = m / span * step;
if (err <= .15) step *= 10; else if (err <= .35) step *= 5; else if (err <= .75) step *= 2;
extent[0] = Math.ceil(extent[0] / step) * step;
extent[1] = Math.floor(extent[1] / step) * step + step * .5;
extent[2] = step;
return extent;
}
function d3_scale_linearTicks(domain, m) {
return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));
}
function d3_scale_linearTickFormat(domain, m, format) {
var precision = -Math.floor(Math.log(d3_scale_linearTickRange(domain, m)[2]) / Math.LN10 + .01);
return d3.format(format ? format.replace(d3_format_re, function(a, b, c, d, e, f, g, h, i, j) {
return [ b, c, d, e, f, g, h, i || "." + (precision - (j === "%") * 2), j ].join("");
}) : ",." + precision + "f");
}
d3.scale.log = function() {
return d3_scale_log(d3.scale.linear().domain([ 0, 1 ]), 10, true, [ 1, 10 ]);
};
function d3_scale_log(linear, base, positive, domain) {
function log(x) {
return (positive ? Math.log(x < 0 ? 0 : x) : -Math.log(x > 0 ? 0 : -x)) / Math.log(base);
}
function pow(x) {
return positive ? Math.pow(base, x) : -Math.pow(base, -x);
}
function scale(x) {
return linear(log(x));
}
scale.invert = function(x) {
return pow(linear.invert(x));
};
scale.domain = function(x) {
if (!arguments.length) return domain;
positive = x[0] >= 0;
linear.domain((domain = x.map(Number)).map(log));
return scale;
};
scale.base = function(_) {
if (!arguments.length) return base;
base = +_;
linear.domain(domain.map(log));
return scale;
};
scale.nice = function() {
var niced = d3_scale_nice(domain.map(log), positive ? Math : d3_scale_logNiceNegative);
linear.domain(niced);
domain = niced.map(pow);
return scale;
};
scale.ticks = function() {
var extent = d3_scaleExtent(domain), ticks = [], u = extent[0], v = extent[1], i = Math.floor(log(u)), j = Math.ceil(log(v)), n = base % 1 ? 2 : base;
if (isFinite(j - i)) {
if (positive) {
for (;i < j; i++) for (var k = 1; k < n; k++) ticks.push(pow(i) * k);
ticks.push(pow(i));
} else {
ticks.push(pow(i));
for (;i++ < j; ) for (var k = n - 1; k > 0; k--) ticks.push(pow(i) * k);
}
for (i = 0; ticks[i] < u; i++) {}
for (j = ticks.length; ticks[j - 1] > v; j--) {}
ticks = ticks.slice(i, j);
}
return ticks;
};
scale.tickFormat = function(n, format) {
if (!arguments.length) return d3_scale_logFormat;
if (arguments.length < 2) format = d3_scale_logFormat; else if (typeof format !== "function") format = d3.format(format);
var k = Math.max(.1, n / scale.ticks().length), f = positive ? (e = 1e-12, Math.ceil) : (e = -1e-12,
Math.floor), e;
return function(d) {
return d / pow(f(log(d) + e)) <= k ? format(d) : "";
};
};
scale.copy = function() {
return d3_scale_log(linear.copy(), base, positive, domain);
};
return d3_scale_linearRebind(scale, linear);
}
var d3_scale_logFormat = d3.format(".0e"), d3_scale_logNiceNegative = {
floor: function(x) {
return -Math.ceil(-x);
},
ceil: function(x) {
return -Math.floor(-x);
}
};
d3.scale.pow = function() {
return d3_scale_pow(d3.scale.linear(), 1, [ 0, 1 ]);
};
function d3_scale_pow(linear, exponent, domain) {
var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent);
function scale(x) {
return linear(powp(x));
}
scale.invert = function(x) {
return powb(linear.invert(x));
};
scale.domain = function(x) {
if (!arguments.length) return domain;
linear.domain((domain = x.map(Number)).map(powp));
return scale;
};
scale.ticks = function(m) {
return d3_scale_linearTicks(domain, m);
};
scale.tickFormat = function(m, format) {
return d3_scale_linearTickFormat(domain, m, format);
};
scale.nice = function(m) {
return scale.domain(d3_scale_linearNice(domain, m));
};
scale.exponent = function(x) {
if (!arguments.length) return exponent;
powp = d3_scale_powPow(exponent = x);
powb = d3_scale_powPow(1 / exponent);
linear.domain(domain.map(powp));
return scale;
};
scale.copy = function() {
return d3_scale_pow(linear.copy(), exponent, domain);
};
return d3_scale_linearRebind(scale, linear);
}
function d3_scale_powPow(e) {
return function(x) {
return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);
};
}
d3.scale.sqrt = function() {
return d3.scale.pow().exponent(.5);
};
d3.scale.ordinal = function() {
return d3_scale_ordinal([], {
t: "range",
a: [ [] ]
});
};
function d3_scale_ordinal(domain, ranger) {
var index, range, rangeBand;
function scale(x) {
return range[((index.get(x) || index.set(x, domain.push(x))) - 1) % range.length];
}
function steps(start, step) {
return d3.range(domain.length).map(function(i) {
return start + step * i;
});
}
scale.domain = function(x) {
if (!arguments.length) return domain;
domain = [];
index = new d3_Map();
var i = -1, n = x.length, xi;
while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi));
return scale[ranger.t].apply(scale, ranger.a);
};
scale.range = function(x) {
if (!arguments.length) return range;
range = x;
rangeBand = 0;
ranger = {
t: "range",
a: arguments
};
return scale;
};
scale.rangePoints = function(x, padding) {
if (arguments.length < 2) padding = 0;
var start = x[0], stop = x[1], step = (stop - start) / (Math.max(1, domain.length - 1) + padding);
range = steps(domain.length < 2 ? (start + stop) / 2 : start + step * padding / 2, step);
rangeBand = 0;
ranger = {
t: "rangePoints",
a: arguments
};
return scale;
};
scale.rangeBands = function(x, padding, outerPadding) {
if (arguments.length < 2) padding = 0;
if (arguments.length < 3) outerPadding = padding;
var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding);
range = steps(start + step * outerPadding, step);
if (reverse) range.reverse();
rangeBand = step * (1 - padding);
ranger = {
t: "rangeBands",
a: arguments
};
return scale;
};
scale.rangeRoundBands = function(x, padding, outerPadding) {
if (arguments.length < 2) padding = 0;
if (arguments.length < 3) outerPadding = padding;
var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding)), error = stop - start - (domain.length - padding) * step;
range = steps(start + Math.round(error / 2), step);
if (reverse) range.reverse();
rangeBand = Math.round(step * (1 - padding));
ranger = {
t: "rangeRoundBands",
a: arguments
};
return scale;
};
scale.rangeBand = function() {
return rangeBand;
};
scale.rangeExtent = function() {
return d3_scaleExtent(ranger.a[0]);
};
scale.copy = function() {
return d3_scale_ordinal(domain, ranger);
};
return scale.domain(domain);
}
d3.scale.category10 = function() {
return d3.scale.ordinal().range(d3_category10);
};
d3.scale.category20 = function() {
return d3.scale.ordinal().range(d3_category20);
};
d3.scale.category20b = function() {
return d3.scale.ordinal().range(d3_category20b);
};
d3.scale.category20c = function() {
return d3.scale.ordinal().range(d3_category20c);
};
var d3_category10 = [ 2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175 ].map(d3_rgbString);
var d3_category20 = [ 2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725 ].map(d3_rgbString);
var d3_category20b = [ 3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654 ].map(d3_rgbString);
var d3_category20c = [ 3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081 ].map(d3_rgbString);
d3.scale.quantile = function() {
return d3_scale_quantile([], []);
};
function d3_scale_quantile(domain, range) {
var thresholds;
function rescale() {
var k = 0, q = range.length;
thresholds = [];
while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q);
return scale;
}
function scale(x) {
if (!isNaN(x = +x)) return range[d3.bisect(thresholds, x)];
}
scale.domain = function(x) {
if (!arguments.length) return domain;
domain = x.filter(function(d) {
return !isNaN(d);
}).sort(d3.ascending);
return rescale();
};
scale.range = function(x) {
if (!arguments.length) return range;
range = x;
return rescale();
};
scale.quantiles = function() {
return thresholds;
};
scale.invertExtent = function(y) {
y = range.indexOf(y);
return y < 0 ? [ NaN, NaN ] : [ y > 0 ? thresholds[y - 1] : domain[0], y < thresholds.length ? thresholds[y] : domain[domain.length - 1] ];
};
scale.copy = function() {
return d3_scale_quantile(domain, range);
};
return rescale();
}
d3.scale.quantize = function() {
return d3_scale_quantize(0, 1, [ 0, 1 ]);
};
function d3_scale_quantize(x0, x1, range) {
var kx, i;
function scale(x) {
return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))];
}
function rescale() {
kx = range.length / (x1 - x0);
i = range.length - 1;
return scale;
}
scale.domain = function(x) {
if (!arguments.length) return [ x0, x1 ];
x0 = +x[0];
x1 = +x[x.length - 1];
return rescale();
};
scale.range = function(x) {
if (!arguments.length) return range;
range = x;
return rescale();
};
scale.invertExtent = function(y) {
y = range.indexOf(y);
y = y < 0 ? NaN : y / kx + x0;
return [ y, y + 1 / kx ];
};
scale.copy = function() {
return d3_scale_quantize(x0, x1, range);
};
return rescale();
}
d3.scale.threshold = function() {
return d3_scale_threshold([ .5 ], [ 0, 1 ]);
};
function d3_scale_threshold(domain, range) {
function scale(x) {
if (x <= x) return range[d3.bisect(domain, x)];
}
scale.domain = function(_) {
if (!arguments.length) return domain;
domain = _;
return scale;
};
scale.range = function(_) {
if (!arguments.length) return range;
range = _;
return scale;
};
scale.invertExtent = function(y) {
y = range.indexOf(y);
return [ domain[y - 1], domain[y] ];
};
scale.copy = function() {
return d3_scale_threshold(domain, range);
};
return scale;
}
d3.scale.identity = function() {
return d3_scale_identity([ 0, 1 ]);
};
function d3_scale_identity(domain) {
function identity(x) {
return +x;
}
identity.invert = identity;
identity.domain = identity.range = function(x) {
if (!arguments.length) return domain;
domain = x.map(identity);
return identity;
};
identity.ticks = function(m) {
return d3_scale_linearTicks(domain, m);
};
identity.tickFormat = function(m, format) {
return d3_scale_linearTickFormat(domain, m, format);
};
identity.copy = function() {
return d3_scale_identity(domain);
};
return identity;
}
d3.svg.arc = function() {
var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle;
function arc() {
var r0 = innerRadius.apply(this, arguments), r1 = outerRadius.apply(this, arguments), a0 = startAngle.apply(this, arguments) + d3_svg_arcOffset, a1 = endAngle.apply(this, arguments) + d3_svg_arcOffset, da = (a1 < a0 && (da = a0,
a0 = a1, a1 = da), a1 - a0), df = da < π ? "0" : "1", c0 = Math.cos(a0), s0 = Math.sin(a0), c1 = Math.cos(a1), s1 = Math.sin(a1);
return da >= d3_svg_arcMax ? r0 ? "M0," + r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + -r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 + "M0," + r0 + "A" + r0 + "," + r0 + " 0 1,0 0," + -r0 + "A" + r0 + "," + r0 + " 0 1,0 0," + r0 + "Z" : "M0," + r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + -r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 + "Z" : r0 ? "M" + r1 * c0 + "," + r1 * s0 + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1 + "L" + r0 * c1 + "," + r0 * s1 + "A" + r0 + "," + r0 + " 0 " + df + ",0 " + r0 * c0 + "," + r0 * s0 + "Z" : "M" + r1 * c0 + "," + r1 * s0 + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1 + "L0,0" + "Z";
}
arc.innerRadius = function(v) {
if (!arguments.length) return innerRadius;
innerRadius = d3_functor(v);
return arc;
};
arc.outerRadius = function(v) {
if (!arguments.length) return outerRadius;
outerRadius = d3_functor(v);
return arc;
};
arc.startAngle = function(v) {
if (!arguments.length) return startAngle;
startAngle = d3_functor(v);
return arc;
};
arc.endAngle = function(v) {
if (!arguments.length) return endAngle;
endAngle = d3_functor(v);
return arc;
};
arc.centroid = function() {
var r = (innerRadius.apply(this, arguments) + outerRadius.apply(this, arguments)) / 2, a = (startAngle.apply(this, arguments) + endAngle.apply(this, arguments)) / 2 + d3_svg_arcOffset;
return [ Math.cos(a) * r, Math.sin(a) * r ];
};
return arc;
};
var d3_svg_arcOffset = -π / 2, d3_svg_arcMax = 2 * π - 1e-6;
function d3_svg_arcInnerRadius(d) {
return d.innerRadius;
}
function d3_svg_arcOuterRadius(d) {
return d.outerRadius;
}
function d3_svg_arcStartAngle(d) {
return d.startAngle;
}
function d3_svg_arcEndAngle(d) {
return d.endAngle;
}
d3.svg.line.radial = function() {
var line = d3_svg_line(d3_svg_lineRadial);
line.radius = line.x, delete line.x;
line.angle = line.y, delete line.y;
return line;
};
function d3_svg_lineRadial(points) {
var point, i = -1, n = points.length, r, a;
while (++i < n) {
point = points[i];
r = point[0];
a = point[1] + d3_svg_arcOffset;
point[0] = r * Math.cos(a);
point[1] = r * Math.sin(a);
}
return points;
}
function d3_svg_area(projection) {
var x0 = d3_svg_lineX, x1 = d3_svg_lineX, y0 = 0, y1 = d3_svg_lineY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, interpolateReverse = interpolate, L = "L", tension = .7;
function area(data) {
var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function() {
return x;
} : d3_functor(x1), fy1 = y0 === y1 ? function() {
return y;
} : d3_functor(y1), x, y;
function segment() {
segments.push("M", interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), "Z");
}
while (++i < n) {
if (defined.call(this, d = data[i], i)) {
points0.push([ x = +fx0.call(this, d, i), y = +fy0.call(this, d, i) ]);
points1.push([ +fx1.call(this, d, i), +fy1.call(this, d, i) ]);
} else if (points0.length) {
segment();
points0 = [];
points1 = [];
}
}
if (points0.length) segment();
return segments.length ? segments.join("") : null;
}
area.x = function(_) {
if (!arguments.length) return x1;
x0 = x1 = _;
return area;
};
area.x0 = function(_) {
if (!arguments.length) return x0;
x0 = _;
return area;
};
area.x1 = function(_) {
if (!arguments.length) return x1;
x1 = _;
return area;
};
area.y = function(_) {
if (!arguments.length) return y1;
y0 = y1 = _;
return area;
};
area.y0 = function(_) {
if (!arguments.length) return y0;
y0 = _;
return area;
};
area.y1 = function(_) {
if (!arguments.length) return y1;
y1 = _;
return area;
};
area.defined = function(_) {
if (!arguments.length) return defined;
defined = _;
return area;
};
area.interpolate = function(_) {
if (!arguments.length) return interpolateKey;
if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;
interpolateReverse = interpolate.reverse || interpolate;
L = interpolate.closed ? "M" : "L";
return area;
};
area.tension = function(_) {
if (!arguments.length) return tension;
tension = _;
return area;
};
return area;
}
d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter;
d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore;
d3.svg.area = function() {
return d3_svg_area(d3_identity);
};
d3.svg.area.radial = function() {
var area = d3_svg_area(d3_svg_lineRadial);
area.radius = area.x, delete area.x;
area.innerRadius = area.x0, delete area.x0;
area.outerRadius = area.x1, delete area.x1;
area.angle = area.y, delete area.y;
area.startAngle = area.y0, delete area.y0;
area.endAngle = area.y1, delete area.y1;
return area;
};
d3.svg.chord = function() {
var source = d3_source, target = d3_target, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle;
function chord(d, i) {
var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i);
return "M" + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + "Z";
}
function subgroup(self, f, d, i) {
var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) + d3_svg_arcOffset, a1 = endAngle.call(self, subgroup, i) + d3_svg_arcOffset;
return {
r: r,
a0: a0,
a1: a1,
p0: [ r * Math.cos(a0), r * Math.sin(a0) ],
p1: [ r * Math.cos(a1), r * Math.sin(a1) ]
};
}
function equals(a, b) {
return a.a0 == b.a0 && a.a1 == b.a1;
}
function arc(r, p, a) {
return "A" + r + "," + r + " 0 " + +(a > π) + ",1 " + p;
}
function curve(r0, p0, r1, p1) {
return "Q 0,0 " + p1;
}
chord.radius = function(v) {
if (!arguments.length) return radius;
radius = d3_functor(v);
return chord;
};
chord.source = function(v) {
if (!arguments.length) return source;
source = d3_functor(v);
return chord;
};
chord.target = function(v) {
if (!arguments.length) return target;
target = d3_functor(v);
return chord;
};
chord.startAngle = function(v) {
if (!arguments.length) return startAngle;
startAngle = d3_functor(v);
return chord;
};
chord.endAngle = function(v) {
if (!arguments.length) return endAngle;
endAngle = d3_functor(v);
return chord;
};
return chord;
};
function d3_svg_chordRadius(d) {
return d.radius;
}
d3.svg.diagonal = function() {
var source = d3_source, target = d3_target, projection = d3_svg_diagonalProjection;
function diagonal(d, i) {
var p0 = source.call(this, d, i), p3 = target.call(this, d, i), m = (p0.y + p3.y) / 2, p = [ p0, {
x: p0.x,
y: m
}, {
x: p3.x,
y: m
}, p3 ];
p = p.map(projection);
return "M" + p[0] + "C" + p[1] + " " + p[2] + " " + p[3];
}
diagonal.source = function(x) {
if (!arguments.length) return source;
source = d3_functor(x);
return diagonal;
};
diagonal.target = function(x) {
if (!arguments.length) return target;
target = d3_functor(x);
return diagonal;
};
diagonal.projection = function(x) {
if (!arguments.length) return projection;
projection = x;
return diagonal;
};
return diagonal;
};
function d3_svg_diagonalProjection(d) {
return [ d.x, d.y ];
}
d3.svg.diagonal.radial = function() {
var diagonal = d3.svg.diagonal(), projection = d3_svg_diagonalProjection, projection_ = diagonal.projection;
diagonal.projection = function(x) {
return arguments.length ? projection_(d3_svg_diagonalRadialProjection(projection = x)) : projection;
};
return diagonal;
};
function d3_svg_diagonalRadialProjection(projection) {
return function() {
var d = projection.apply(this, arguments), r = d[0], a = d[1] + d3_svg_arcOffset;
return [ r * Math.cos(a), r * Math.sin(a) ];
};
}
d3.svg.symbol = function() {
var type = d3_svg_symbolType, size = d3_svg_symbolSize;
function symbol(d, i) {
return (d3_svg_symbols.get(type.call(this, d, i)) || d3_svg_symbolCircle)(size.call(this, d, i));
}
symbol.type = function(x) {
if (!arguments.length) return type;
type = d3_functor(x);
return symbol;
};
symbol.size = function(x) {
if (!arguments.length) return size;
size = d3_functor(x);
return symbol;
};
return symbol;
};
function d3_svg_symbolSize() {
return 64;
}
function d3_svg_symbolType() {
return "circle";
}
function d3_svg_symbolCircle(size) {
var r = Math.sqrt(size / π);
return "M0," + r + "A" + r + "," + r + " 0 1,1 0," + -r + "A" + r + "," + r + " 0 1,1 0," + r + "Z";
}
var d3_svg_symbols = d3.map({
circle: d3_svg_symbolCircle,
cross: function(size) {
var r = Math.sqrt(size / 5) / 2;
return "M" + -3 * r + "," + -r + "H" + -r + "V" + -3 * r + "H" + r + "V" + -r + "H" + 3 * r + "V" + r + "H" + r + "V" + 3 * r + "H" + -r + "V" + r + "H" + -3 * r + "Z";
},
diamond: function(size) {
var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), rx = ry * d3_svg_symbolTan30;
return "M0," + -ry + "L" + rx + ",0" + " 0," + ry + " " + -rx + ",0" + "Z";
},
square: function(size) {
var r = Math.sqrt(size) / 2;
return "M" + -r + "," + -r + "L" + r + "," + -r + " " + r + "," + r + " " + -r + "," + r + "Z";
},
"triangle-down": function(size) {
var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;
return "M0," + ry + "L" + rx + "," + -ry + " " + -rx + "," + -ry + "Z";
},
"triangle-up": function(size) {
var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;
return "M0," + -ry + "L" + rx + "," + ry + " " + -rx + "," + ry + "Z";
}
});
d3.svg.symbolTypes = d3_svg_symbols.keys();
var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * d3_radians);
function d3_transition(groups, id) {
d3_subclass(groups, d3_transitionPrototype);
groups.id = id;
return groups;
}
var d3_transitionPrototype = [], d3_transitionId = 0, d3_transitionInheritId, d3_transitionInherit;
d3_transitionPrototype.call = d3_selectionPrototype.call;
d3_transitionPrototype.empty = d3_selectionPrototype.empty;
d3_transitionPrototype.node = d3_selectionPrototype.node;
d3_transitionPrototype.size = d3_selectionPrototype.size;
d3.transition = function(selection) {
return arguments.length ? d3_transitionInheritId ? selection.transition() : selection : d3_selectionRoot.transition();
};
d3.transition.prototype = d3_transitionPrototype;
d3_transitionPrototype.select = function(selector) {
var id = this.id, subgroups = [], subgroup, subnode, node;
selector = d3_selection_selector(selector);
for (var j = -1, m = this.length; ++j < m; ) {
subgroups.push(subgroup = []);
for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i, j))) {
if ("__data__" in node) subnode.__data__ = node.__data__;
d3_transitionNode(subnode, i, id, node.__transition__[id]);
subgroup.push(subnode);
} else {
subgroup.push(null);
}
}
}
return d3_transition(subgroups, id);
};
d3_transitionPrototype.selectAll = function(selector) {
var id = this.id, subgroups = [], subgroup, subnodes, node, subnode, transition;
selector = d3_selection_selectorAll(selector);
for (var j = -1, m = this.length; ++j < m; ) {
for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
if (node = group[i]) {
transition = node.__transition__[id];
subnodes = selector.call(node, node.__data__, i, j);
subgroups.push(subgroup = []);
for (var k = -1, o = subnodes.length; ++k < o; ) {
if (subnode = subnodes[k]) d3_transitionNode(subnode, k, id, transition);
subgroup.push(subnode);
}
}
}
}
return d3_transition(subgroups, id);
};
d3_transitionPrototype.filter = function(filter) {
var subgroups = [], subgroup, group, node;
if (typeof filter !== "function") filter = d3_selection_filter(filter);
for (var j = 0, m = this.length; j < m; j++) {
subgroups.push(subgroup = []);
for (var group = this[j], i = 0, n = group.length; i < n; i++) {
if ((node = group[i]) && filter.call(node, node.__data__, i)) {
subgroup.push(node);
}
}
}
return d3_transition(subgroups, this.id);
};
d3_transitionPrototype.tween = function(name, tween) {
var id = this.id;
if (arguments.length < 2) return this.node().__transition__[id].tween.get(name);
return d3_selection_each(this, tween == null ? function(node) {
node.__transition__[id].tween.remove(name);
} : function(node) {
node.__transition__[id].tween.set(name, tween);
});
};
function d3_transition_tween(groups, name, value, tween) {
var id = groups.id;
return d3_selection_each(groups, typeof value === "function" ? function(node, i, j) {
node.__transition__[id].tween.set(name, tween(value.call(node, node.__data__, i, j)));
} : (value = tween(value), function(node) {
node.__transition__[id].tween.set(name, value);
}));
}
d3_transitionPrototype.attr = function(nameNS, value) {
if (arguments.length < 2) {
for (value in nameNS) this.attr(value, nameNS[value]);
return this;
}
var interpolate = nameNS == "transform" ? d3_interpolateTransform : d3_interpolate, name = d3.ns.qualify(nameNS);
function attrNull() {
this.removeAttribute(name);
}
function attrNullNS() {
this.removeAttributeNS(name.space, name.local);
}
function attrTween(b) {
return b == null ? attrNull : (b += "", function() {
var a = this.getAttribute(name), i;
return a !== b && (i = interpolate(a, b), function(t) {
this.setAttribute(name, i(t));
});
});
}
function attrTweenNS(b) {
return b == null ? attrNullNS : (b += "", function() {
var a = this.getAttributeNS(name.space, name.local), i;
return a !== b && (i = interpolate(a, b), function(t) {
this.setAttributeNS(name.space, name.local, i(t));
});
});
}
return d3_transition_tween(this, "attr." + nameNS, value, name.local ? attrTweenNS : attrTween);
};
d3_transitionPrototype.attrTween = function(nameNS, tween) {
var name = d3.ns.qualify(nameNS);
function attrTween(d, i) {
var f = tween.call(this, d, i, this.getAttribute(name));
return f && function(t) {
this.setAttribute(name, f(t));
};
}
function attrTweenNS(d, i) {
var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local));
return f && function(t) {
this.setAttributeNS(name.space, name.local, f(t));
};
}
return this.tween("attr." + nameNS, name.local ? attrTweenNS : attrTween);
};
d3_transitionPrototype.style = function(name, value, priority) {
var n = arguments.length;
if (n < 3) {
if (typeof name !== "string") {
if (n < 2) value = "";
for (priority in name) this.style(priority, name[priority], value);
return this;
}
priority = "";
}
function styleNull() {
this.style.removeProperty(name);
}
function styleString(b) {
return b == null ? styleNull : (b += "", function() {
var a = d3_window.getComputedStyle(this, null).getPropertyValue(name), i;
return a !== b && (i = d3_interpolate(a, b), function(t) {
this.style.setProperty(name, i(t), priority);
});
});
}
return d3_transition_tween(this, "style." + name, value, styleString);
};
d3_transitionPrototype.styleTween = function(name, tween, priority) {
if (arguments.length < 3) priority = "";
function styleTween(d, i) {
var f = tween.call(this, d, i, d3_window.getComputedStyle(this, null).getPropertyValue(name));
return f && function(t) {
this.style.setProperty(name, f(t), priority);
};
}
return this.tween("style." + name, styleTween);
};
d3_transitionPrototype.text = function(value) {
return d3_transition_tween(this, "text", value, d3_transition_text);
};
function d3_transition_text(b) {
if (b == null) b = "";
return function() {
this.textContent = b;
};
}
d3_transitionPrototype.remove = function() {
return this.each("end.transition", function() {
var p;
if (this.__transition__.count < 2 && (p = this.parentNode)) p.removeChild(this);
});
};
d3_transitionPrototype.ease = function(value) {
var id = this.id;
if (arguments.length < 1) return this.node().__transition__[id].ease;
if (typeof value !== "function") value = d3.ease.apply(d3, arguments);
return d3_selection_each(this, function(node) {
node.__transition__[id].ease = value;
});
};
d3_transitionPrototype.delay = function(value) {
var id = this.id;
return d3_selection_each(this, typeof value === "function" ? function(node, i, j) {
node.__transition__[id].delay = +value.call(node, node.__data__, i, j);
} : (value = +value, function(node) {
node.__transition__[id].delay = value;
}));
};
d3_transitionPrototype.duration = function(value) {
var id = this.id;
return d3_selection_each(this, typeof value === "function" ? function(node, i, j) {
node.__transition__[id].duration = Math.max(1, value.call(node, node.__data__, i, j));
} : (value = Math.max(1, value), function(node) {
node.__transition__[id].duration = value;
}));
};
d3_transitionPrototype.each = function(type, listener) {
var id = this.id;
if (arguments.length < 2) {
var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId;
d3_transitionInheritId = id;
d3_selection_each(this, function(node, i, j) {
d3_transitionInherit = node.__transition__[id];
type.call(node, node.__data__, i, j);
});
d3_transitionInherit = inherit;
d3_transitionInheritId = inheritId;
} else {
d3_selection_each(this, function(node) {
var transition = node.__transition__[id];
(transition.event || (transition.event = d3.dispatch("start", "end"))).on(type, listener);
});
}
return this;
};
d3_transitionPrototype.transition = function() {
var id0 = this.id, id1 = ++d3_transitionId, subgroups = [], subgroup, group, node, transition;
for (var j = 0, m = this.length; j < m; j++) {
subgroups.push(subgroup = []);
for (var group = this[j], i = 0, n = group.length; i < n; i++) {
if (node = group[i]) {
transition = Object.create(node.__transition__[id0]);
transition.delay += transition.duration;
d3_transitionNode(node, i, id1, transition);
}
subgroup.push(node);
}
}
return d3_transition(subgroups, id1);
};
function d3_transitionNode(node, i, id, inherit) {
var lock = node.__transition__ || (node.__transition__ = {
active: 0,
count: 0
}), transition = lock[id];
if (!transition) {
var time = inherit.time;
transition = lock[id] = {
tween: new d3_Map(),
time: time,
ease: inherit.ease,
delay: inherit.delay,
duration: inherit.duration
};
++lock.count;
d3.timer(function(elapsed) {
var d = node.__data__, ease = transition.ease, delay = transition.delay, duration = transition.duration, tweened = [];
if (delay <= elapsed) return start(elapsed);
d3_timer_replace(start, delay, time);
function start(elapsed) {
if (lock.active > id) return stop();
lock.active = id;
transition.event && transition.event.start.call(node, d, i);
transition.tween.forEach(function(key, value) {
if (value = value.call(node, d, i)) {
tweened.push(value);
}
});
if (tick(elapsed)) return 1;
d3_timer_replace(tick, 0, time);
}
function tick(elapsed) {
if (lock.active !== id) return stop();
var t = (elapsed - delay) / duration, e = ease(t), n = tweened.length;
while (n > 0) {
tweened[--n].call(node, e);
}
if (t >= 1) {
transition.event && transition.event.end.call(node, d, i);
return stop();
}
}
function stop() {
if (--lock.count) delete lock[id]; else delete node.__transition__;
return 1;
}
}, 0, time);
}
}
d3.svg.axis = function() {
var scale = d3.scale.linear(), orient = d3_svg_axisDefaultOrient, innerTickSize = 6, outerTickSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_;
function axis(g) {
g.each(function() {
var g = d3.select(this);
var ticks = tickValues == null ? scale.ticks ? scale.ticks.apply(scale, tickArguments_) : scale.domain() : tickValues, tickFormat = tickFormat_ == null ? scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(".tick").data(ticks, d3_identity), tickEnter = tick.enter().insert("g", ".domain").attr("class", "tick").style("opacity", 1e-6), tickExit = d3.transition(tick.exit()).style("opacity", 1e-6).remove(), tickUpdate = d3.transition(tick).style("opacity", 1), tickTransform;
var range = d3_scaleRange(scale), path = g.selectAll(".domain").data([ 0 ]), pathUpdate = (path.enter().append("path").attr("class", "domain"),
d3.transition(path));
var scale1 = scale.copy(), scale0 = this.__chart__ || scale1;
this.__chart__ = scale1;
tickEnter.append("line");
tickEnter.append("text");
var lineEnter = tickEnter.select("line"), lineUpdate = tickUpdate.select("line"), text = tick.select("text").text(tickFormat), textEnter = tickEnter.select("text"), textUpdate = tickUpdate.select("text");
switch (orient) {
case "bottom":
{
tickTransform = d3_svg_axisX;
lineEnter.attr("y2", innerTickSize);
textEnter.attr("y", Math.max(innerTickSize, 0) + tickPadding);
lineUpdate.attr("x2", 0).attr("y2", innerTickSize);
textUpdate.attr("x", 0).attr("y", Math.max(innerTickSize, 0) + tickPadding);
text.attr("dy", ".71em").style("text-anchor", "middle");
pathUpdate.attr("d", "M" + range[0] + "," + outerTickSize + "V0H" + range[1] + "V" + outerTickSize);
break;
}
case "top":
{
tickTransform = d3_svg_axisX;
lineEnter.attr("y2", -innerTickSize);
textEnter.attr("y", -(Math.max(innerTickSize, 0) + tickPadding));
lineUpdate.attr("x2", 0).attr("y2", -innerTickSize);
textUpdate.attr("x", 0).attr("y", -(Math.max(innerTickSize, 0) + tickPadding));
text.attr("dy", "0em").style("text-anchor", "middle");
pathUpdate.attr("d", "M" + range[0] + "," + -outerTickSize + "V0H" + range[1] + "V" + -outerTickSize);
break;
}
case "left":
{
tickTransform = d3_svg_axisY;
lineEnter.attr("x2", -innerTickSize);
textEnter.attr("x", -(Math.max(innerTickSize, 0) + tickPadding));
lineUpdate.attr("x2", -innerTickSize).attr("y2", 0);
textUpdate.attr("x", -(Math.max(innerTickSize, 0) + tickPadding)).attr("y", 0);
text.attr("dy", ".32em").style("text-anchor", "end");
pathUpdate.attr("d", "M" + -outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + -outerTickSize);
break;
}
case "right":
{
tickTransform = d3_svg_axisY;
lineEnter.attr("x2", innerTickSize);
textEnter.attr("x", Math.max(innerTickSize, 0) + tickPadding);
lineUpdate.attr("x2", innerTickSize).attr("y2", 0);
textUpdate.attr("x", Math.max(innerTickSize, 0) + tickPadding).attr("y", 0);
text.attr("dy", ".32em").style("text-anchor", "start");
pathUpdate.attr("d", "M" + outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + outerTickSize);
break;
}
}
if (scale.rangeBand) {
var dx = scale1.rangeBand() / 2, x = function(d) {
return scale1(d) + dx;
};
tickEnter.call(tickTransform, x);
tickUpdate.call(tickTransform, x);
} else {
tickEnter.call(tickTransform, scale0);
tickUpdate.call(tickTransform, scale1);
tickExit.call(tickTransform, scale1);
}
});
}
axis.scale = function(x) {
if (!arguments.length) return scale;
scale = x;
return axis;
};
axis.orient = function(x) {
if (!arguments.length) return orient;
orient = x in d3_svg_axisOrients ? x + "" : d3_svg_axisDefaultOrient;
return axis;
};
axis.ticks = function() {
if (!arguments.length) return tickArguments_;
tickArguments_ = arguments;
return axis;
};
axis.tickValues = function(x) {
if (!arguments.length) return tickValues;
tickValues = x;
return axis;
};
axis.tickFormat = function(x) {
if (!arguments.length) return tickFormat_;
tickFormat_ = x;
return axis;
};
axis.tickSize = function(x) {
var n = arguments.length;
if (!n) return innerTickSize;
innerTickSize = +x;
outerTickSize = +arguments[n - 1];
return axis;
};
axis.innerTickSize = function(x) {
if (!arguments.length) return innerTickSize;
innerTickSize = +x;
return axis;
};
axis.outerTickSize = function(x) {
if (!arguments.length) return outerTickSize;
outerTickSize = +x;
return axis;
};
axis.tickPadding = function(x) {
if (!arguments.length) return tickPadding;
tickPadding = +x;
return axis;
};
axis.tickSubdivide = function() {
return arguments.length && axis;
};
return axis;
};
var d3_svg_axisDefaultOrient = "bottom", d3_svg_axisOrients = {
top: 1,
right: 1,
bottom: 1,
left: 1
};
function d3_svg_axisX(selection, x) {
selection.attr("transform", function(d) {
return "translate(" + x(d) + ",0)";
});
}
function d3_svg_axisY(selection, y) {
selection.attr("transform", function(d) {
return "translate(0," + y(d) + ")";
});
}
d3.svg.brush = function() {
var event = d3_eventDispatch(brush, "brushstart", "brush", "brushend"), x = null, y = null, xExtent = [ 0, 0 ], yExtent = [ 0, 0 ], xExtentDomain, yExtentDomain, xClamp = true, yClamp = true, resizes = d3_svg_brushResizes[0];
function brush(g) {
g.each(function() {
var g = d3.select(this).style("pointer-events", "all").style("-webkit-tap-highlight-color", "rgba(0,0,0,0)").on("mousedown.brush", brushstart).on("touchstart.brush", brushstart);
var background = g.selectAll(".background").data([ 0 ]);
background.enter().append("rect").attr("class", "background").style("visibility", "hidden").style("cursor", "crosshair");
g.selectAll(".extent").data([ 0 ]).enter().append("rect").attr("class", "extent").style("cursor", "move");
var resize = g.selectAll(".resize").data(resizes, d3_identity);
resize.exit().remove();
resize.enter().append("g").attr("class", function(d) {
return "resize " + d;
}).style("cursor", function(d) {
return d3_svg_brushCursor[d];
}).append("rect").attr("x", function(d) {
return /[ew]$/.test(d) ? -3 : null;
}).attr("y", function(d) {
return /^[ns]/.test(d) ? -3 : null;
}).attr("width", 6).attr("height", 6).style("visibility", "hidden");
resize.style("display", brush.empty() ? "none" : null);
var gUpdate = d3.transition(g), backgroundUpdate = d3.transition(background), range;
if (x) {
range = d3_scaleRange(x);
backgroundUpdate.attr("x", range[0]).attr("width", range[1] - range[0]);
redrawX(gUpdate);
}
if (y) {
range = d3_scaleRange(y);
backgroundUpdate.attr("y", range[0]).attr("height", range[1] - range[0]);
redrawY(gUpdate);
}
redraw(gUpdate);
});
}
brush.event = function(g) {
g.each(function() {
var event_ = event.of(this, arguments), extent1 = {
x: xExtent,
y: yExtent,
i: xExtentDomain,
j: yExtentDomain
}, extent0 = this.__chart__ || extent1;
this.__chart__ = extent1;
if (d3_transitionInheritId) {
d3.select(this).transition().each("start.brush", function() {
xExtentDomain = extent0.i;
yExtentDomain = extent0.j;
xExtent = extent0.x;
yExtent = extent0.y;
event_({
type: "brushstart"
});
}).tween("brush:brush", function() {
var xi = d3_interpolateArray(xExtent, extent1.x), yi = d3_interpolateArray(yExtent, extent1.y);
xExtentDomain = yExtentDomain = null;
return function(t) {
xExtent = extent1.x = xi(t);
yExtent = extent1.y = yi(t);
event_({
type: "brush",
mode: "resize"
});
};
}).each("end.brush", function() {
xExtentDomain = extent1.i;
yExtentDomain = extent1.j;
event_({
type: "brush",
mode: "resize"
});
event_({
type: "brushend"
});
});
} else {
event_({
type: "brushstart"
});
event_({
type: "brush",
mode: "resize"
});
event_({
type: "brushend"
});
}
});
};
function redraw(g) {
g.selectAll(".resize").attr("transform", function(d) {
return "translate(" + xExtent[+/e$/.test(d)] + "," + yExtent[+/^s/.test(d)] + ")";
});
}
function redrawX(g) {
g.select(".extent").attr("x", xExtent[0]);
g.selectAll(".extent,.n>rect,.s>rect").attr("width", xExtent[1] - xExtent[0]);
}
function redrawY(g) {
g.select(".extent").attr("y", yExtent[0]);
g.selectAll(".extent,.e>rect,.w>rect").attr("height", yExtent[1] - yExtent[0]);
}
function brushstart() {
var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed("extent"), dragRestore = d3_event_dragSuppress(), center, origin = d3.mouse(target), offset;
var w = d3.select(d3_window).on("keydown.brush", keydown).on("keyup.brush", keyup);
if (d3.event.changedTouches) {
w.on("touchmove.brush", brushmove).on("touchend.brush", brushend);
} else {
w.on("mousemove.brush", brushmove).on("mouseup.brush", brushend);
}
g.interrupt().selectAll("*").interrupt();
if (dragging) {
origin[0] = xExtent[0] - origin[0];
origin[1] = yExtent[0] - origin[1];
} else if (resizing) {
var ex = +/w$/.test(resizing), ey = +/^n/.test(resizing);
offset = [ xExtent[1 - ex] - origin[0], yExtent[1 - ey] - origin[1] ];
origin[0] = xExtent[ex];
origin[1] = yExtent[ey];
} else if (d3.event.altKey) center = origin.slice();
g.style("pointer-events", "none").selectAll(".resize").style("display", null);
d3.select("body").style("cursor", eventTarget.style("cursor"));
event_({
type: "brushstart"
});
brushmove();
function keydown() {
if (d3.event.keyCode == 32) {
if (!dragging) {
center = null;
origin[0] -= xExtent[1];
origin[1] -= yExtent[1];
dragging = 2;
}
d3_eventPreventDefault();
}
}
function keyup() {
if (d3.event.keyCode == 32 && dragging == 2) {
origin[0] += xExtent[1];
origin[1] += yExtent[1];
dragging = 0;
d3_eventPreventDefault();
}
}
function brushmove() {
var point = d3.mouse(target), moved = false;
if (offset) {
point[0] += offset[0];
point[1] += offset[1];
}
if (!dragging) {
if (d3.event.altKey) {
if (!center) center = [ (xExtent[0] + xExtent[1]) / 2, (yExtent[0] + yExtent[1]) / 2 ];
origin[0] = xExtent[+(point[0] < center[0])];
origin[1] = yExtent[+(point[1] < center[1])];
} else center = null;
}
if (resizingX && move1(point, x, 0)) {
redrawX(g);
moved = true;
}
if (resizingY && move1(point, y, 1)) {
redrawY(g);
moved = true;
}
if (moved) {
redraw(g);
event_({
type: "brush",
mode: dragging ? "move" : "resize"
});
}
}
function move1(point, scale, i) {
var range = d3_scaleRange(scale), r0 = range[0], r1 = range[1], position = origin[i], extent = i ? yExtent : xExtent, size = extent[1] - extent[0], min, max;
if (dragging) {
r0 -= position;
r1 -= size + position;
}
min = (i ? yClamp : xClamp) ? Math.max(r0, Math.min(r1, point[i])) : point[i];
if (dragging) {
max = (min += position) + size;
} else {
if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min));
if (position < min) {
max = min;
min = position;
} else {
max = position;
}
}
if (extent[0] != min || extent[1] != max) {
if (i) yExtentDomain = null; else xExtentDomain = null;
extent[0] = min;
extent[1] = max;
return true;
}
}
function brushend() {
brushmove();
g.style("pointer-events", "all").selectAll(".resize").style("display", brush.empty() ? "none" : null);
d3.select("body").style("cursor", null);
w.on("mousemove.brush", null).on("mouseup.brush", null).on("touchmove.brush", null).on("touchend.brush", null).on("keydown.brush", null).on("keyup.brush", null);
dragRestore();
event_({
type: "brushend"
});
}
}
brush.x = function(z) {
if (!arguments.length) return x;
x = z;
resizes = d3_svg_brushResizes[!x << 1 | !y];
return brush;
};
brush.y = function(z) {
if (!arguments.length) return y;
y = z;
resizes = d3_svg_brushResizes[!x << 1 | !y];
return brush;
};
brush.clamp = function(z) {
if (!arguments.length) return x && y ? [ xClamp, yClamp ] : x ? xClamp : y ? yClamp : null;
if (x && y) xClamp = !!z[0], yClamp = !!z[1]; else if (x) xClamp = !!z; else if (y) yClamp = !!z;
return brush;
};
brush.extent = function(z) {
var x0, x1, y0, y1, t;
if (!arguments.length) {
if (x) {
if (xExtentDomain) {
x0 = xExtentDomain[0], x1 = xExtentDomain[1];
} else {
x0 = xExtent[0], x1 = xExtent[1];
if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1);
if (x1 < x0) t = x0, x0 = x1, x1 = t;
}
}
if (y) {
if (yExtentDomain) {
y0 = yExtentDomain[0], y1 = yExtentDomain[1];
} else {
y0 = yExtent[0], y1 = yExtent[1];
if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1);
if (y1 < y0) t = y0, y0 = y1, y1 = t;
}
}
return x && y ? [ [ x0, y0 ], [ x1, y1 ] ] : x ? [ x0, x1 ] : y && [ y0, y1 ];
}
if (x) {
x0 = z[0], x1 = z[1];
if (y) x0 = x0[0], x1 = x1[0];
xExtentDomain = [ x0, x1 ];
if (x.invert) x0 = x(x0), x1 = x(x1);
if (x1 < x0) t = x0, x0 = x1, x1 = t;
if (x0 != xExtent[0] || x1 != xExtent[1]) xExtent = [ x0, x1 ];
}
if (y) {
y0 = z[0], y1 = z[1];
if (x) y0 = y0[1], y1 = y1[1];
yExtentDomain = [ y0, y1 ];
if (y.invert) y0 = y(y0), y1 = y(y1);
if (y1 < y0) t = y0, y0 = y1, y1 = t;
if (y0 != yExtent[0] || y1 != yExtent[1]) yExtent = [ y0, y1 ];
}
return brush;
};
brush.clear = function() {
if (!brush.empty()) {
xExtent = [ 0, 0 ], yExtent = [ 0, 0 ];
xExtentDomain = yExtentDomain = null;
}
return brush;
};
brush.empty = function() {
return !!x && xExtent[0] == xExtent[1] || !!y && yExtent[0] == yExtent[1];
};
return d3.rebind(brush, event, "on");
};
var d3_svg_brushCursor = {
n: "ns-resize",
e: "ew-resize",
s: "ns-resize",
w: "ew-resize",
nw: "nwse-resize",
ne: "nesw-resize",
se: "nwse-resize",
sw: "nesw-resize"
};
var d3_svg_brushResizes = [ [ "n", "e", "s", "w", "nw", "ne", "se", "sw" ], [ "e", "w" ], [ "n", "s" ], [] ];
var d3_time = d3.time = {}, d3_date = Date, d3_time_daySymbols = [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ];
function d3_date_utc() {
this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0]);
}
d3_date_utc.prototype = {
getDate: function() {
return this._.getUTCDate();
},
getDay: function() {
return this._.getUTCDay();
},
getFullYear: function() {
return this._.getUTCFullYear();
},
getHours: function() {
return this._.getUTCHours();
},
getMilliseconds: function() {
return this._.getUTCMilliseconds();
},
getMinutes: function() {
return this._.getUTCMinutes();
},
getMonth: function() {
return this._.getUTCMonth();
},
getSeconds: function() {
return this._.getUTCSeconds();
},
getTime: function() {
return this._.getTime();
},
getTimezoneOffset: function() {
return 0;
},
valueOf: function() {
return this._.valueOf();
},
setDate: function() {
d3_time_prototype.setUTCDate.apply(this._, arguments);
},
setDay: function() {
d3_time_prototype.setUTCDay.apply(this._, arguments);
},
setFullYear: function() {
d3_time_prototype.setUTCFullYear.apply(this._, arguments);
},
setHours: function() {
d3_time_prototype.setUTCHours.apply(this._, arguments);
},
setMilliseconds: function() {
d3_time_prototype.setUTCMilliseconds.apply(this._, arguments);
},
setMinutes: function() {
d3_time_prototype.setUTCMinutes.apply(this._, arguments);
},
setMonth: function() {
d3_time_prototype.setUTCMonth.apply(this._, arguments);
},
setSeconds: function() {
d3_time_prototype.setUTCSeconds.apply(this._, arguments);
},
setTime: function() {
d3_time_prototype.setTime.apply(this._, arguments);
}
};
var d3_time_prototype = Date.prototype;
var d3_time_formatDateTime = "%a %b %e %X %Y", d3_time_formatDate = "%m/%d/%Y", d3_time_formatTime = "%H:%M:%S";
var d3_time_days = [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], d3_time_dayAbbreviations = [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], d3_time_months = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ], d3_time_monthAbbreviations = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ];
function d3_time_interval(local, step, number) {
function round(date) {
var d0 = local(date), d1 = offset(d0, 1);
return date - d0 < d1 - date ? d0 : d1;
}
function ceil(date) {
step(date = local(new d3_date(date - 1)), 1);
return date;
}
function offset(date, k) {
step(date = new d3_date(+date), k);
return date;
}
function range(t0, t1, dt) {
var time = ceil(t0), times = [];
if (dt > 1) {
while (time < t1) {
if (!(number(time) % dt)) times.push(new Date(+time));
step(time, 1);
}
} else {
while (time < t1) times.push(new Date(+time)), step(time, 1);
}
return times;
}
function range_utc(t0, t1, dt) {
try {
d3_date = d3_date_utc;
var utc = new d3_date_utc();
utc._ = t0;
return range(utc, t1, dt);
} finally {
d3_date = Date;
}
}
local.floor = local;
local.round = round;
local.ceil = ceil;
local.offset = offset;
local.range = range;
var utc = local.utc = d3_time_interval_utc(local);
utc.floor = utc;
utc.round = d3_time_interval_utc(round);
utc.ceil = d3_time_interval_utc(ceil);
utc.offset = d3_time_interval_utc(offset);
utc.range = range_utc;
return local;
}
function d3_time_interval_utc(method) {
return function(date, k) {
try {
d3_date = d3_date_utc;
var utc = new d3_date_utc();
utc._ = date;
return method(utc, k)._;
} finally {
d3_date = Date;
}
};
}
d3_time.year = d3_time_interval(function(date) {
date = d3_time.day(date);
date.setMonth(0, 1);
return date;
}, function(date, offset) {
date.setFullYear(date.getFullYear() + offset);
}, function(date) {
return date.getFullYear();
});
d3_time.years = d3_time.year.range;
d3_time.years.utc = d3_time.year.utc.range;
d3_time.day = d3_time_interval(function(date) {
var day = new d3_date(2e3, 0);
day.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());
return day;
}, function(date, offset) {
date.setDate(date.getDate() + offset);
}, function(date) {
return date.getDate() - 1;
});
d3_time.days = d3_time.day.range;
d3_time.days.utc = d3_time.day.utc.range;
d3_time.dayOfYear = function(date) {
var year = d3_time.year(date);
return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5);
};
d3_time_daySymbols.forEach(function(day, i) {
day = day.toLowerCase();
i = 7 - i;
var interval = d3_time[day] = d3_time_interval(function(date) {
(date = d3_time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7);
return date;
}, function(date, offset) {
date.setDate(date.getDate() + Math.floor(offset) * 7);
}, function(date) {
var day = d3_time.year(date).getDay();
return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i);
});
d3_time[day + "s"] = interval.range;
d3_time[day + "s"].utc = interval.utc.range;
d3_time[day + "OfYear"] = function(date) {
var day = d3_time.year(date).getDay();
return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7);
};
});
d3_time.week = d3_time.sunday;
d3_time.weeks = d3_time.sunday.range;
d3_time.weeks.utc = d3_time.sunday.utc.range;
d3_time.weekOfYear = d3_time.sundayOfYear;
d3_time.format = d3_time_format;
function d3_time_format(template) {
var n = template.length;
function format(date) {
var string = [], i = -1, j = 0, c, p, f;
while (++i < n) {
if (template.charCodeAt(i) === 37) {
string.push(template.substring(j, i));
if ((p = d3_time_formatPads[c = template.charAt(++i)]) != null) c = template.charAt(++i);
if (f = d3_time_formats[c]) c = f(date, p == null ? c === "e" ? " " : "0" : p);
string.push(c);
j = i + 1;
}
}
string.push(template.substring(j, i));
return string.join("");
}
format.parse = function(string) {
var d = {
y: 1900,
m: 0,
d: 1,
H: 0,
M: 0,
S: 0,
L: 0,
Z: null
}, i = d3_time_parse(d, template, string, 0);
if (i != string.length) return null;
if ("p" in d) d.H = d.H % 12 + d.p * 12;
var localZ = d.Z != null && d3_date !== d3_date_utc, date = new (localZ ? d3_date_utc : d3_date)();
if ("j" in d) date.setFullYear(d.y, 0, d.j); else if ("w" in d && ("W" in d || "U" in d)) {
date.setFullYear(d.y, 0, 1);
date.setFullYear(d.y, 0, "W" in d ? (d.w + 6) % 7 + d.W * 7 - (date.getDay() + 5) % 7 : d.w + d.U * 7 - (date.getDay() + 6) % 7);
} else date.setFullYear(d.y, d.m, d.d);
date.setHours(d.H + Math.floor(d.Z / 100), d.M + d.Z % 100, d.S, d.L);
return localZ ? date._ : date;
};
format.toString = function() {
return template;
};
return format;
}
function d3_time_parse(date, template, string, j) {
var c, p, t, i = 0, n = template.length, m = string.length;
while (i < n) {
if (j >= m) return -1;
c = template.charCodeAt(i++);
if (c === 37) {
t = template.charAt(i++);
p = d3_time_parsers[t in d3_time_formatPads ? template.charAt(i++) : t];
if (!p || (j = p(date, string, j)) < 0) return -1;
} else if (c != string.charCodeAt(j++)) {
return -1;
}
}
return j;
}
function d3_time_formatRe(names) {
return new RegExp("^(?:" + names.map(d3.requote).join("|") + ")", "i");
}
function d3_time_formatLookup(names) {
var map = new d3_Map(), i = -1, n = names.length;
while (++i < n) map.set(names[i].toLowerCase(), i);
return map;
}
function d3_time_formatPad(value, fill, width) {
var sign = value < 0 ? "-" : "", string = (sign ? -value : value) + "", length = string.length;
return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);
}
var d3_time_dayRe = d3_time_formatRe(d3_time_days), d3_time_dayLookup = d3_time_formatLookup(d3_time_days), d3_time_dayAbbrevRe = d3_time_formatRe(d3_time_dayAbbreviations), d3_time_dayAbbrevLookup = d3_time_formatLookup(d3_time_dayAbbreviations), d3_time_monthRe = d3_time_formatRe(d3_time_months), d3_time_monthLookup = d3_time_formatLookup(d3_time_months), d3_time_monthAbbrevRe = d3_time_formatRe(d3_time_monthAbbreviations), d3_time_monthAbbrevLookup = d3_time_formatLookup(d3_time_monthAbbreviations), d3_time_percentRe = /^%/;
var d3_time_formatPads = {
"-": "",
_: " ",
"0": "0"
};
var d3_time_formats = {
a: function(d) {
return d3_time_dayAbbreviations[d.getDay()];
},
A: function(d) {
return d3_time_days[d.getDay()];
},
b: function(d) {
return d3_time_monthAbbreviations[d.getMonth()];
},
B: function(d) {
return d3_time_months[d.getMonth()];
},
c: d3_time_format(d3_time_formatDateTime),
d: function(d, p) {
return d3_time_formatPad(d.getDate(), p, 2);
},
e: function(d, p) {
return d3_time_formatPad(d.getDate(), p, 2);
},
H: function(d, p) {
return d3_time_formatPad(d.getHours(), p, 2);
},
I: function(d, p) {
return d3_time_formatPad(d.getHours() % 12 || 12, p, 2);
},
j: function(d, p) {
return d3_time_formatPad(1 + d3_time.dayOfYear(d), p, 3);
},
L: function(d, p) {
return d3_time_formatPad(d.getMilliseconds(), p, 3);
},
m: function(d, p) {
return d3_time_formatPad(d.getMonth() + 1, p, 2);
},
M: function(d, p) {
return d3_time_formatPad(d.getMinutes(), p, 2);
},
p: function(d) {
return d.getHours() >= 12 ? "PM" : "AM";
},
S: function(d, p) {
return d3_time_formatPad(d.getSeconds(), p, 2);
},
U: function(d, p) {
return d3_time_formatPad(d3_time.sundayOfYear(d), p, 2);
},
w: function(d) {
return d.getDay();
},
W: function(d, p) {
return d3_time_formatPad(d3_time.mondayOfYear(d), p, 2);
},
x: d3_time_format(d3_time_formatDate),
X: d3_time_format(d3_time_formatTime),
y: function(d, p) {
return d3_time_formatPad(d.getFullYear() % 100, p, 2);
},
Y: function(d, p) {
return d3_time_formatPad(d.getFullYear() % 1e4, p, 4);
},
Z: d3_time_zone,
"%": function() {
return "%";
}
};
var d3_time_parsers = {
a: d3_time_parseWeekdayAbbrev,
A: d3_time_parseWeekday,
b: d3_time_parseMonthAbbrev,
B: d3_time_parseMonth,
c: d3_time_parseLocaleFull,
d: d3_time_parseDay,
e: d3_time_parseDay,
H: d3_time_parseHour24,
I: d3_time_parseHour24,
j: d3_time_parseDayOfYear,
L: d3_time_parseMilliseconds,
m: d3_time_parseMonthNumber,
M: d3_time_parseMinutes,
p: d3_time_parseAmPm,
S: d3_time_parseSeconds,
U: d3_time_parseWeekNumberSunday,
w: d3_time_parseWeekdayNumber,
W: d3_time_parseWeekNumberMonday,
x: d3_time_parseLocaleDate,
X: d3_time_parseLocaleTime,
y: d3_time_parseYear,
Y: d3_time_parseFullYear,
Z: d3_time_parseZone,
"%": d3_time_parseLiteralPercent
};
function d3_time_parseWeekdayAbbrev(date, string, i) {
d3_time_dayAbbrevRe.lastIndex = 0;
var n = d3_time_dayAbbrevRe.exec(string.substring(i));
return n ? (date.w = d3_time_dayAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
}
function d3_time_parseWeekday(date, string, i) {
d3_time_dayRe.lastIndex = 0;
var n = d3_time_dayRe.exec(string.substring(i));
return n ? (date.w = d3_time_dayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
}
function d3_time_parseWeekdayNumber(date, string, i) {
d3_time_numberRe.lastIndex = 0;
var n = d3_time_numberRe.exec(string.substring(i, i + 1));
return n ? (date.w = +n[0], i + n[0].length) : -1;
}
function d3_time_parseWeekNumberSunday(date, string, i) {
d3_time_numberRe.lastIndex = 0;
var n = d3_time_numberRe.exec(string.substring(i));
return n ? (date.U = +n[0], i + n[0].length) : -1;
}
function d3_time_parseWeekNumberMonday(date, string, i) {
d3_time_numberRe.lastIndex = 0;
var n = d3_time_numberRe.exec(string.substring(i));
return n ? (date.W = +n[0], i + n[0].length) : -1;
}
function d3_time_parseMonthAbbrev(date, string, i) {
d3_time_monthAbbrevRe.lastIndex = 0;
var n = d3_time_monthAbbrevRe.exec(string.substring(i));
return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
}
function d3_time_parseMonth(date, string, i) {
d3_time_monthRe.lastIndex = 0;
var n = d3_time_monthRe.exec(string.substring(i));
return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
}
function d3_time_parseLocaleFull(date, string, i) {
return d3_time_parse(date, d3_time_formats.c.toString(), string, i);
}
function d3_time_parseLocaleDate(date, string, i) {
return d3_time_parse(date, d3_time_formats.x.toString(), string, i);
}
function d3_time_parseLocaleTime(date, string, i) {
return d3_time_parse(date, d3_time_formats.X.toString(), string, i);
}
function d3_time_parseFullYear(date, string, i) {
d3_time_numberRe.lastIndex = 0;
var n = d3_time_numberRe.exec(string.substring(i, i + 4));
return n ? (date.y = +n[0], i + n[0].length) : -1;
}
function d3_time_parseYear(date, string, i) {
d3_time_numberRe.lastIndex = 0;
var n = d3_time_numberRe.exec(string.substring(i, i + 2));
return n ? (date.y = d3_time_expandYear(+n[0]), i + n[0].length) : -1;
}
function d3_time_parseZone(date, string, i) {
return /^[+-]\d{4}$/.test(string = string.substring(i, i + 5)) ? (date.Z = +string,
i + 5) : -1;
}
function d3_time_expandYear(d) {
return d + (d > 68 ? 1900 : 2e3);
}
function d3_time_parseMonthNumber(date, string, i) {
d3_time_numberRe.lastIndex = 0;
var n = d3_time_numberRe.exec(string.substring(i, i + 2));
return n ? (date.m = n[0] - 1, i + n[0].length) : -1;
}
function d3_time_parseDay(date, string, i) {
d3_time_numberRe.lastIndex = 0;
var n = d3_time_numberRe.exec(string.substring(i, i + 2));
return n ? (date.d = +n[0], i + n[0].length) : -1;
}
function d3_time_parseDayOfYear(date, string, i) {
d3_time_numberRe.lastIndex = 0;
var n = d3_time_numberRe.exec(string.substring(i, i + 3));
return n ? (date.j = +n[0], i + n[0].length) : -1;
}
function d3_time_parseHour24(date, string, i) {
d3_time_numberRe.lastIndex = 0;
var n = d3_time_numberRe.exec(string.substring(i, i + 2));
return n ? (date.H = +n[0], i + n[0].length) : -1;
}
function d3_time_parseMinutes(date, string, i) {
d3_time_numberRe.lastIndex = 0;
var n = d3_time_numberRe.exec(string.substring(i, i + 2));
return n ? (date.M = +n[0], i + n[0].length) : -1;
}
function d3_time_parseSeconds(date, string, i) {
d3_time_numberRe.lastIndex = 0;
var n = d3_time_numberRe.exec(string.substring(i, i + 2));
return n ? (date.S = +n[0], i + n[0].length) : -1;
}
function d3_time_parseMilliseconds(date, string, i) {
d3_time_numberRe.lastIndex = 0;
var n = d3_time_numberRe.exec(string.substring(i, i + 3));
return n ? (date.L = +n[0], i + n[0].length) : -1;
}
var d3_time_numberRe = /^\s*\d+/;
function d3_time_parseAmPm(date, string, i) {
var n = d3_time_amPmLookup.get(string.substring(i, i += 2).toLowerCase());
return n == null ? -1 : (date.p = n, i);
}
var d3_time_amPmLookup = d3.map({
am: 0,
pm: 1
});
function d3_time_zone(d) {
var z = d.getTimezoneOffset(), zs = z > 0 ? "-" : "+", zh = ~~(Math.abs(z) / 60), zm = Math.abs(z) % 60;
return zs + d3_time_formatPad(zh, "0", 2) + d3_time_formatPad(zm, "0", 2);
}
function d3_time_parseLiteralPercent(date, string, i) {
d3_time_percentRe.lastIndex = 0;
var n = d3_time_percentRe.exec(string.substring(i, i + 1));
return n ? i + n[0].length : -1;
}
d3_time_format.utc = d3_time_formatUtc;
function d3_time_formatUtc(template) {
var local = d3_time_format(template);
function format(date) {
try {
d3_date = d3_date_utc;
var utc = new d3_date();
utc._ = date;
return local(utc);
} finally {
d3_date = Date;
}
}
format.parse = function(string) {
try {
d3_date = d3_date_utc;
var date = local.parse(string);
return date && date._;
} finally {
d3_date = Date;
}
};
format.toString = local.toString;
return format;
}
var d3_time_formatIso = d3_time_formatUtc("%Y-%m-%dT%H:%M:%S.%LZ");
d3_time_format.iso = Date.prototype.toISOString && +new Date("2000-01-01T00:00:00.000Z") ? d3_time_formatIsoNative : d3_time_formatIso;
function d3_time_formatIsoNative(date) {
return date.toISOString();
}
d3_time_formatIsoNative.parse = function(string) {
var date = new Date(string);
return isNaN(date) ? null : date;
};
d3_time_formatIsoNative.toString = d3_time_formatIso.toString;
d3_time.second = d3_time_interval(function(date) {
return new d3_date(Math.floor(date / 1e3) * 1e3);
}, function(date, offset) {
date.setTime(date.getTime() + Math.floor(offset) * 1e3);
}, function(date) {
return date.getSeconds();
});
d3_time.seconds = d3_time.second.range;
d3_time.seconds.utc = d3_time.second.utc.range;
d3_time.minute = d3_time_interval(function(date) {
return new d3_date(Math.floor(date / 6e4) * 6e4);
}, function(date, offset) {
date.setTime(date.getTime() + Math.floor(offset) * 6e4);
}, function(date) {
return date.getMinutes();
});
d3_time.minutes = d3_time.minute.range;
d3_time.minutes.utc = d3_time.minute.utc.range;
d3_time.hour = d3_time_interval(function(date) {
var timezone = date.getTimezoneOffset() / 60;
return new d3_date((Math.floor(date / 36e5 - timezone) + timezone) * 36e5);
}, function(date, offset) {
date.setTime(date.getTime() + Math.floor(offset) * 36e5);
}, function(date) {
return date.getHours();
});
d3_time.hours = d3_time.hour.range;
d3_time.hours.utc = d3_time.hour.utc.range;
d3_time.month = d3_time_interval(function(date) {
date = d3_time.day(date);
date.setDate(1);
return date;
}, function(date, offset) {
date.setMonth(date.getMonth() + offset);
}, function(date) {
return date.getMonth();
});
d3_time.months = d3_time.month.range;
d3_time.months.utc = d3_time.month.utc.range;
function d3_time_scale(linear, methods, format) {
function scale(x) {
return linear(x);
}
scale.invert = function(x) {
return d3_time_scaleDate(linear.invert(x));
};
scale.domain = function(x) {
if (!arguments.length) return linear.domain().map(d3_time_scaleDate);
linear.domain(x);
return scale;
};
function tickMethod(extent, count) {
var span = extent[1] - extent[0], target = span / count, i = d3.bisect(d3_time_scaleSteps, target);
return i == d3_time_scaleSteps.length ? [ methods.year, d3_scale_linearTickRange(extent.map(function(d) {
return d / 31536e6;
}), count)[2] ] : !i ? [ d3_time_scaleMilliseconds, d3_scale_linearTickRange(extent, count)[2] ] : methods[target / d3_time_scaleSteps[i - 1] < d3_time_scaleSteps[i] / target ? i - 1 : i];
}
scale.nice = function(interval, skip) {
var domain = scale.domain(), extent = d3_scaleExtent(domain), method = interval == null ? tickMethod(extent, 10) : typeof interval === "number" && tickMethod(extent, interval);
if (method) interval = method[0], skip = method[1];
function skipped(date) {
return !isNaN(date) && !interval.range(date, d3_time_scaleDate(+date + 1), skip).length;
}
return scale.domain(d3_scale_nice(domain, skip > 1 ? {
floor: function(date) {
while (skipped(date = interval.floor(date))) date = d3_time_scaleDate(date - 1);
return date;
},
ceil: function(date) {
while (skipped(date = interval.ceil(date))) date = d3_time_scaleDate(+date + 1);
return date;
}
} : interval));
};
scale.ticks = function(interval, skip) {
var extent = d3_scaleExtent(scale.domain()), method = interval == null ? tickMethod(extent, 10) : typeof interval === "number" ? tickMethod(extent, interval) : !interval.range && [ {
range: interval
}, skip ];
if (method) interval = method[0], skip = method[1];
return interval.range(extent[0], d3_time_scaleDate(+extent[1] + 1), skip);
};
scale.tickFormat = function() {
return format;
};
scale.copy = function() {
return d3_time_scale(linear.copy(), methods, format);
};
return d3_scale_linearRebind(scale, linear);
}
function d3_time_scaleDate(t) {
return new Date(t);
}
function d3_time_scaleFormat(formats) {
return function(date) {
var i = formats.length - 1, f = formats[i];
while (!f[1](date)) f = formats[--i];
return f[0](date);
};
}
var d3_time_scaleSteps = [ 1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6 ];
var d3_time_scaleLocalMethods = [ [ d3_time.second, 1 ], [ d3_time.second, 5 ], [ d3_time.second, 15 ], [ d3_time.second, 30 ], [ d3_time.minute, 1 ], [ d3_time.minute, 5 ], [ d3_time.minute, 15 ], [ d3_time.minute, 30 ], [ d3_time.hour, 1 ], [ d3_time.hour, 3 ], [ d3_time.hour, 6 ], [ d3_time.hour, 12 ], [ d3_time.day, 1 ], [ d3_time.day, 2 ], [ d3_time.week, 1 ], [ d3_time.month, 1 ], [ d3_time.month, 3 ], [ d3_time.year, 1 ] ];
var d3_time_scaleLocalFormats = [ [ d3_time_format("%Y"), d3_true ], [ d3_time_format("%B"), function(d) {
return d.getMonth();
} ], [ d3_time_format("%b %d"), function(d) {
return d.getDate() != 1;
} ], [ d3_time_format("%a %d"), function(d) {
return d.getDay() && d.getDate() != 1;
} ], [ d3_time_format("%I %p"), function(d) {
return d.getHours();
} ], [ d3_time_format("%I:%M"), function(d) {
return d.getMinutes();
} ], [ d3_time_format(":%S"), function(d) {
return d.getSeconds();
} ], [ d3_time_format(".%L"), function(d) {
return d.getMilliseconds();
} ] ];
var d3_time_scaleLocalFormat = d3_time_scaleFormat(d3_time_scaleLocalFormats);
d3_time_scaleLocalMethods.year = d3_time.year;
d3_time.scale = function() {
return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat);
};
var d3_time_scaleMilliseconds = {
range: function(start, stop, step) {
return d3.range(+start, +stop, step).map(d3_time_scaleDate);
}
};
var d3_time_scaleUTCMethods = d3_time_scaleLocalMethods.map(function(m) {
return [ m[0].utc, m[1] ];
});
var d3_time_scaleUTCFormats = [ [ d3_time_formatUtc("%Y"), d3_true ], [ d3_time_formatUtc("%B"), function(d) {
return d.getUTCMonth();
} ], [ d3_time_formatUtc("%b %d"), function(d) {
return d.getUTCDate() != 1;
} ], [ d3_time_formatUtc("%a %d"), function(d) {
return d.getUTCDay() && d.getUTCDate() != 1;
} ], [ d3_time_formatUtc("%I %p"), function(d) {
return d.getUTCHours();
} ], [ d3_time_formatUtc("%I:%M"), function(d) {
return d.getUTCMinutes();
} ], [ d3_time_formatUtc(":%S"), function(d) {
return d.getUTCSeconds();
} ], [ d3_time_formatUtc(".%L"), function(d) {
return d.getUTCMilliseconds();
} ] ];
var d3_time_scaleUTCFormat = d3_time_scaleFormat(d3_time_scaleUTCFormats);
d3_time_scaleUTCMethods.year = d3_time.year.utc;
d3_time.scale.utc = function() {
return d3_time_scale(d3.scale.linear(), d3_time_scaleUTCMethods, d3_time_scaleUTCFormat);
};
d3.text = d3_xhrType(function(request) {
return request.responseText;
});
d3.json = function(url, callback) {
return d3_xhr(url, "application/json", d3_json, callback);
};
function d3_json(request) {
return JSON.parse(request.responseText);
}
d3.html = function(url, callback) {
return d3_xhr(url, "text/html", d3_html, callback);
};
function d3_html(request) {
var range = d3_document.createRange();
range.selectNode(d3_document.body);
return range.createContextualFragment(request.responseText);
}
d3.xml = d3_xhrType(function(request) {
return request.responseXML;
});
return d3;
}();
<!DOCTYPE html>
<meta charset="utf-8">
<style>
path {
stroke-linejoin: round;
}
.land {
fill: #ddd;
stroke: white;
}
.states {
fill: none;
stroke: #fff;
}
.voronoi {
fill: none;
stroke: brown;
stroke-width: .5px;
}
</style>
<body>
<script src="d3.js"></script>
<script src="queue.js"></script>
<script src="topojson.js"></script>
<script src="booths.js"></script>
1 0
-10.4178286 105.6757622
-10.4234763 105.679929
-10.578426 142.213254
-10.5834 142.22
-10.5844917 142.214983
-10.5938841 142.2498837
-10.8944 142.387
-12.1174471 96.8965481
-12.1174471 96.8965481
-12.1832 136.784
-12.1837583 136.7863834
-12.1903489 96.8308927
-12.3671 130.883
-12.3699 130.886
-12.3709002 130.8819275
-12.37149 130.88231
-12.372 130.878
-12.3744 130.9
-12.3788 130.852
-12.3811 130.896
-12.3839 130.879
-12.3859 130.858
-12.3887 130.899
-12.3911 130.893
-12.3931 130.912
-12.4031 130.919
-12.40841 130.87772
-12.4245 130.855
-12.4298 130.844
-12.4334501 130.7480508
-12.4354 130.924
-12.4407 130.845
-12.4496 130.945
-12.4583 130.83
-12.4589 130.836
-12.460556 130.837716
-12.460556 130.837716
-12.46058 130.83761
-12.4612123 130.835933
-12.4612123 130.835933
-12.4757 130.974
-12.4806 130.984
-12.4806 130.984
-12.489693 130.980196
-12.4949 130.973
-12.4951 130.995
-12.4952 131.047
-12.5062 130.982
-12.5065 130.971
-12.5091617 130.9909296
-12.53999 131.05443
-12.54001 131.056502
-12.5799 131.102
-12.6273 141.881
-12.6292 141.879
-12.672135 132.833269
-12.6738 132.833
-12.6824 141.89
-12.7178 130.985
-12.787 143.346
-13.5593 142.032
-13.9453 143.197
-14.4632 132.282
-14.4633 132.261
-14.465 132.263
-14.5024 132.394
-14.8973 141.62
-15.2952 145.108
-15.461 145.25
-15.476245 141.742971
-15.481231 145.250661
-15.4877 128.121
-15.5597 144.445
-15.7736244 128.7382982
-15.7847885 128.7356663
-15.945 145.319
-16.202 145.412
-16.2497 145.32
-16.3416 145.413
-16.3811 145.375
-16.462 145.374
-16.4855 145.463
-16.4859 145.465
-16.6076 145.342
-16.6659 139.182
-16.6714 145.342
-16.7091 128.295
-16.769 145.676
-16.7952 145.691
-16.809 145.72
-16.8124 145.697
-16.8208 145.637
-16.8444 145.739
-16.8514 145.694
-16.8537 145.745
-16.875945 145.732395
-16.8794 145.758
-16.8811 145.715
-16.898113 145.714263
-16.8999 145.757
-16.9063 145.867
-16.9064 145.743
-16.9093 145.695
-16.9112 145.73
-16.9122 145.769
-16.9154 145.42
-16.9178 145.772
-16.9214129 145.7753827
-16.9218 145.752
-16.9220612 145.7741574
-16.9220612 145.7741574
-16.9225 145.743
-16.9249 145.763
-16.9265 145.763
-16.9268358 145.7620992
-16.9379 145.745
-16.9427 145.738
-16.9606 145.741
-16.9703 145.742
-16.9847 145.475
-16.9866 145.745
-16.9871 145.425
-16.9925 145.425
-16.9952 145.424
-16.996 145.417
-17.0074 145.731
-17.0187933 145.7284396
-17.0214 145.736
-17.0214 145.736
-17.0866586 145.7809901
-17.0902 145.784
-17.1094 145.831
-17.1282 145.427
-17.1378 145.207
-17.1504 145.113
-17.1562 144.521
-17.1958 145.897
-17.2153 145.546
-17.2231 145.477
-17.2582 145.488
-17.2646 145.926
-17.2664 145.475
-17.2694 145.483
-17.2742 145.587
-17.3082 123.633
-17.343426 145.920981
-17.3491 145.595
-17.3562 146.025
-17.361 145.692
-17.382152 145.386141
-17.4027 145.91
-17.430989 145.392347
-17.4616 145.996
-17.4837 140.84
-17.5036 146.076
-17.5125 145.611
-17.5187 146.03
-17.5229 146.01
-17.5238 146.032
-17.5275 146.03
-17.5354 146.032
-17.5761 146.01
-17.5851 146.044
-17.5934 145.998
-17.6027492 145.8479706
-17.6103 145.489
-17.6548 145.956
-17.6676 145.238
-17.6683 141.079
-17.677 145.116
-17.683624 141.0753042
-17.7367 146.001
-17.7737 146.102
-17.8078 146.003
-17.8637 146.109
-17.8805 145.965
-17.9258 146.087
-17.9271 145.924
-17.9352968 145.9229616
-17.9364 145.923
-17.9364 145.923
-17.939742 122.2331844
-17.9416667 138.8283333
-17.9563 122.24194
-17.9611751 122.2152727
-17.9615181 122.2383482
-18.0046 146.056
-18.0903 145.851
-18.1899349 125.5646249
-18.2035 142.249
-18.2095 145.943
-18.2240919 127.668591
-18.2259152 127.6687447
-18.2525883 146.0168644
-18.2688 146.031
-18.2948 143.547
-18.4736 145.884
-18.5212 146.003
-18.530103 146.334194
-18.5773 146.251
-18.5836 146.285
-18.6301 146.075
-18.6469 146.202
-18.651 146.157
-18.6518 146.163
-18.6567097 146.1579223
-18.7126 146.293
-18.7126 146.148
-18.7382 146.58
-18.8683 146.191
-19.0442 146.392
-19.1512 146.863
-19.1567 146.851
-19.1754 146.556
-19.2453 146.655
-19.2473 146.674
-19.2516 146.793
-19.2518 146.811
-19.2576223 146.8178787
-19.2593 146.813
-19.25937 146.81375
-19.25937 146.81375
-19.2603644 146.8132707
-19.26071 146.701166
-19.2621 146.775
-19.2625 146.792
-19.2631 146.827
-19.2673 146.804
-19.271 146.748
-19.2748 146.816
-19.2769 146.782
-19.2794 146.797
-19.2811 146.773
-19.2856 146.8
-19.2872 146.783
-19.2876 146.765
-19.2935 146.763
-19.2938 146.75
-19.2941 146.789
-19.2984 146.733
-19.3028 146.778
-19.3037 146.813
-19.3049 146.722
-19.30513 146.734197
-19.3076 146.755
-19.3101 146.733
-19.3141 146.778
-19.3141 146.778
-19.3154 146.735
-19.3165 146.794
-19.3165 146.794
-19.3166 146.752
-19.317633 146.792937
-19.3204 146.762
-19.3245 146.813
-19.3269 146.756
-19.3287 146.601
-19.3287 146.601
-19.336 146.718
-19.3475 146.842
-19.3475 146.842
-19.3647 146.729
-19.3879 146.954
-19.3888 146.727
-19.3965 147.107
-19.515 147.104
-19.5185 147.418
-19.5535316 147.3489145
-19.5624 147.416
-19.576 147.402
-19.5771 147.404
-19.5793 147.414
-19.597 146.834
-19.6001 147.46
-19.6463 134.193
-19.6466 134.196
-19.6593 147.346
-19.6648 147.416
-19.7013 147.346
-19.7842 147.226
-19.8781 147.684
-19.9218 138.12
-19.9766009 148.2270022
-19.9892 148.24
-19.9914 148.238
-20.0068 148.24
-20.0094 148.245
-20.0113 148.245
-20.0208 148.164
-20.0581 147.28
-20.062 146.264
-20.0704241 146.266017
-20.0728 146.258
-20.078 146.26
-20.0799 146.263
-20.0815 146.269
-20.0941 148.497
-20.104 146.889
-20.2685 148.718
-20.2773 148.696
-20.2775 148.727
-20.304 118.634
-20.3082 118.615
-20.3637 148.972
-20.3999 148.586
-20.4014 148.581
-20.4022 148.587
-20.4048262 118.6132253
-20.4061175 118.5944983
-20.4116 118.602
-20.479678 148.738038
-20.5235 145.4
-20.5480169 147.8453563
-20.5493 147.842
-20.6571 141.749
-20.6647 116.707
-20.676597 117.1431051
-20.7025 140.507
-20.7056 148.596
-20.7069 140.505
-20.7089 139.51
-20.709 139.49
-20.7223 139.51
-20.722556 139.492769
-20.722556 139.492769
-20.7229 139.492
-20.729342 143.141244
-20.733 139.508
-20.7333568 116.8498154
-20.7342 139.487
-20.7417 139.499
-20.7426 116.801
-20.7427 116.817
-20.7458 139.492
-20.746277 116.8217664
-20.7725 117.145
-20.8423 144.2
-20.8423 144.2
-20.899 148.77
-20.9023 148.967
-20.9597 148.832
-21.0319 149.158
-21.0419 149.079
-21.0585 148.93
-21.0602 149.161
-21.0742 149.215
-21.0853 149.187
-21.0916 149.068
-21.0931 149.17
-21.0968 149.18
-21.1065 149.102
-21.1108903 149.1569647
-21.1147773 149.1738383
-21.1148852 149.1683585
-21.1197 149.148
-21.121845 149.183869
-21.1223 149.187
-21.1319 148.492
-21.1395297 148.6388324
-21.141001 149.1846611
-21.1410387 149.1846184
-21.1431401 149.1843824
-21.1431401 149.1843824
-21.1458 148.958
-21.146 149.182
-21.1477 149.194
-21.1502 149.178
-21.1525 149.164
-21.1548 149.184
-21.1554 148.741
-21.1609 148.863
-21.1616 149.069
-21.162 149.159
-21.1627059 149.1872731
-21.1644 149.117
-21.1727 119.746
-21.1735 149.149
-21.2016228 149.1488829
-21.229845 148.9564013
-21.2606 149.146
-21.2606 149.146
-21.264368 148.9764296
-21.2763 149.05
-21.3277 149.211
-21.3533635 148.1160546
-21.3882554 149.3127344
-21.4154 149.219
-21.4206 149.217
-21.4213377 149.2172319
-21.448 149.282
-21.4726304 149.1443591
-21.5949 149.07
-21.6068 149.245
-21.6365017 115.1127062
-21.6367885 116.3246548
-21.6884 148.691
-21.695 139.514
-21.6959 148.697
-21.8872 120.106
-21.9071 148.365
-21.9126445 149.4041421
-21.9281 148.325
-21.9323844 114.1239893
-22.0004 148.047
-22.0004 148.048
-22.0061866 148.0652861
-22.349 149.524
-22.3877 143.038
-22.3883 143.038
-22.5867 148.349
-22.5877571 148.3447059
-22.5946293 144.542983
-22.6868 117.793
-22.8135 149.888
-22.8140262 148.6971577
-22.8242 147.64
-22.8382824 147.6290331
-22.907 139.908
-22.9744548 145.2429678
-23.0329 148.344
-23.0751 150.737
-23.0879199 148.0302597
-23.1179196 150.7285967
-23.128 150.746
-23.13 150.744
-23.1352 150.726
-23.135228 150.725607
-23.1444652 113.7735839
-23.1544 150.754
-23.1765 150.459
-23.1967 117.673
-23.2497458 150.2799586
-23.2542 150.726
-23.259737 150.8207301
-23.2969 150.513
-23.3028199 150.3561552
-23.3278 150.786
-23.3292 150.534
-23.3361 150.516
-23.3414 150.544
-23.3463 150.524
-23.3535 150.532
-23.3542 119.732
-23.3587 150.546
-23.3597 150.508
-23.3617 119.734
-23.3637 150.523
-23.3650967 150.4840188
-23.3662 150.531
-23.3667 150.552
-23.3696368 150.4996182
-23.3726038 150.4938507
-23.3757 150.56
-23.3784758 150.5150311
-23.3784758 150.5150311
-23.379 150.51279
-23.37903 150.512878
-23.3797722 150.5149472
-23.3837 150.488
-23.3868 150.506
-23.3918 150.504
-23.3961031 150.5177242
-23.3986 150.501
-23.4129 150.513
-23.4202 147.7
-23.4340301 144.2579918
-23.4363891 150.4499298
-23.4410362 144.2506887
-23.4415 144.251
-23.4455472 150.4594346
-23.449499 150.4518985
-23.4644098 147.7224399
-23.4847 150.321
-23.4892677 144.5050674
-23.5130396 148.1646835
-23.5235754 148.1608091
-23.5263555 148.161159
-23.5322082 148.1518775
-23.554 147.745
-23.55924 145.2945916
-23.5642638 150.4715964
-23.566003 148.8865494
-23.57631 148.88972
-23.5820853 149.0687823
-23.583977 148.8778606
-23.6041573 146.1292209
-23.6063913 148.5458136
-23.6172576 150.1544314
-23.6204896 150.3907371
-23.6454548 149.330131
-23.64589 150.388146
-23.6501029 146.6419741
-23.6525 150.648
-23.6788 133.867
-23.6976 133.833
-23.6985 133.898
-23.6999 133.88
-23.7012614 133.8831476
-23.7018 133.882
-23.7084 133.868
-23.7159919 149.6686182
-23.7244036 148.1415472
-23.7376647 147.5381641
-23.7868335 150.92196
-23.8073485 150.9742493
-23.8444957 151.2567762
-23.8444957 151.2567762
-23.8444957 151.2567762
-23.8468 151.126
-23.8472944 151.2609923
-23.8473277 151.2607452
-23.8477411 150.2613263
-23.8598404 151.2516106
-23.8619 151.27
-23.86782 151.242366
-23.8792 151.252
-23.879437 151.219077
-23.8800399 151.2225364
-23.9110032 150.1939808
-23.9142 133.757
-23.9458927 151.3534613
-23.9601914 151.3646302
-24.0038412 151.3242297
-24.0043578 151.2033267
-24.1161 148.088
-24.1314 149.456
-24.1462357 150.2852678
-24.1743 150.374
-24.1814 149.809
-24.2120103 151.9026119
-24.2126792 151.9101933
-24.2441 151.492
-24.260329 144.438682
-24.3301 151.561
-24.3608902 139.4705065
-24.396237 150.513791
-24.3986093 150.51804
-24.4003152 150.5134131
-24.4067172 151.3212704
-24.4229535 145.4609007
-24.4229535 145.4609007
-24.462443 148.6241189
-24.4692 150.131
-24.4863116 150.5732436
-24.5086 151.949
-24.5246052 151.7451985
-24.5664127 149.2962941
-24.5679562 150.6612449
-24.57018 149.97332
-24.5740234 149.9754883
-24.623 151.915
-24.7178 152.277
-24.7249 152.112
-24.7363339 152.1611694
-24.7629097 151.0359049
-24.7718141 152.4147233
-24.7862821 151.2310727
-24.8165 152.461
-24.8239 152.306
-24.8313 143.061
-24.844 152.302
-24.8457 152.396
-24.849805 152.461916
-24.8523 152.339
-24.8566 152.345
-24.8614 152.373
-24.8649137 151.1244528
-24.8649137 151.1244528
-24.8649629 152.348653
-24.8682 113.677
-24.8704 152.36
-24.87061 152.33705
-24.872985 152.3485988
-24.872985 152.3485988
-24.8730409 152.3484349
-24.8737 152.263
-24.8748 152.377
-24.8753 152.334
-24.8771 152.324
-24.8815 152.407
-24.8832 113.656
-24.8858193 146.253603
-24.8863 152.36
-24.8869329 152.3207831
-24.8879 113.66
-24.888338 152.3150385
-24.8889 152.346
-24.8979 152.364
-24.8998 152.284
-24.9079 152.475
-24.9333139 152.1760081
-24.9456237 150.075545
-24.9498 152.061
-24.9538 152.378
-24.9631 151.134
-24.9857 152.157
-24.9925745 151.9551158
-25.0731495 151.9969464
-25.0989 152.558
-25.1467 152.385
-25.1586 152.213
-25.1799738 151.6451693
-25.1845 152.615
-25.194797 152.334474
-25.2096 152.032
-25.217 152.23763
-25.2589 152.668
-25.2820336 152.8412379
-25.28292 152.83244
-25.2865392 152.8349388
-25.2874 152.861
-25.28929 152.80444
-25.2907 152.903
-25.29569 152.87626
-25.2977 152.851
-25.2996 152.815
-25.30101 152.83055
-25.3178 152.563
-25.3463465 152.5966393
-25.372625 151.122228
-25.4012 153.018
-25.4152901 152.9145536
-25.42045 142.65416
-25.5022858 152.7101846
-25.5101 153.125
-25.5105 152.047
-25.5157 152.689
-25.515814 151.4563777
-25.5225 152.694
-25.5246 152.679
-25.5390928 152.7011422
-25.541819 152.701645
-25.541819 152.701645
-25.5442097 152.7216406
-25.5591 152.668
-25.5906 151.298
-25.591174 151.299571
-25.5988929 152.2612106
-25.6039 152.591
-25.6124441 151.8904935
-25.6251259 151.6091287
-25.6251259 151.6091287
-25.639 149.801
-25.641 149.795
-25.6723807 152.8881328
-25.7283171 152.5826523
-25.7972 146.582
-25.8122571 152.6227501
-25.8422352 152.5469039
-25.8461 148.564
-25.9015913 139.3521621
-25.9016492 139.352248
-25.9085 153.079
-25.9219201 113.529936
-25.9261 152.996
-25.9494 152.603
-25.97097 152.98479
-25.9925964 152.5601051
-26.0346204 152.0453021
-26.0484301 152.3961373
-26.0769034 152.7794421
-26.0836 152.579
-26.0875366 152.241603
-26.0908019 152.4845098
-26.108 151.846
-26.1191126 149.9567033
-26.1347 113.414
-26.1357 152.701
-26.1410941 152.6153758
-26.1497071 152.8174582
-26.1610485 151.5995655
-26.1752 152.656
-26.1794969 152.0650854
-26.1795131 152.7328605
-26.1810597 151.7747076
-26.1826105 152.6713409
-26.1883904 152.6668328
-26.1883904 152.6668328
-26.1901 152.678
-26.199 152.648
-26.2038058 152.4432885
-26.2068117 148.7173009
-26.2140251 152.6862231
-26.2283102 152.6678373
-26.241087 152.6194689
-26.2454235 152.7502641
-26.2460018 151.9400474
-26.2574168 150.043764
-26.2625595 152.8717362
-26.2853744 152.996764
-26.292 151.955
-26.2938959 152.7110666
-26.3185597 151.8728171
-26.3412 152.824
-26.3465259 152.6730076
-26.365525 152.855392
-26.3865917 152.6805029
-26.3898 153.032
-26.3924544 152.7938038
-26.3958929 151.2452804
-26.3982751 146.2579415
-26.39941 146.241653
-26.4009 146.241
-26.4016 153.103
-26.4042 153.075
-26.407803 153.049014
-26.4086 153.029
-26.40878 151.81238
-26.4116844 153.039094
-26.4116844 153.039094
-26.4116844 153.039094
-26.4161342 147.1093115
-26.4169 152.9971
-26.41816 152.91055
-26.4448 147.545
-26.4599189 152.6792682
-26.4734 152.952
-26.478438 153.095045
-26.4886628 147.9781959
-26.489473 147.976604
-26.4951 153.075
-26.5095 151.023
-26.5239 152.966
-26.5286 153.089
-26.5286565 153.0877724
-26.5343 153.077
-26.5364 151.856
-26.5400713 151.8378411
-26.5427 151.829
-26.5482 148.188
-26.556 151.839
-26.56 152.957
-26.5663 153.091
-26.56711 148.77882
-26.5688 148.788
-26.570521 148.784628
-26.5745 148.787
-26.5843 149.186
-26.58532 148.38592
-26.5891 151.904
-26.593 118.496
-26.5941 151.718
-26.59428 152.72794
-26.597468 120.226502
-26.6083 152.904
-26.6119 153.081
-26.6142 144.271
-26.61424 149.38372
-26.6151 153.032
-26.6185 153.096
-26.6230125 152.9624029
-26.6237 152.94
-26.6257729 152.8656808
-26.6259772 152.9590808
-26.6313 152.964
-26.6338 152.952
-26.6424056 149.7561395
-26.6445492 149.9816176
-26.6473 153.025
-26.6517662 153.0871508
-26.6521998 153.0869822
-26.6522454 153.0870858
-26.6522454 153.0870858
-26.6522454 153.0870858
-26.6522454 153.0870858
-26.6545716 153.0755038
-26.6554274 153.0836813
-26.6554274 153.0836813
-26.6554274 153.0836813
-26.6569 153.101
-26.657 150.185
-26.65816 150.18739
-26.6592 153.058
-26.6661 153.102
-26.6662 153.064
-26.6666 152.972
-26.6675 151.992
-26.670863 152.002416
-26.672 152.00521
-26.6725 153.081
-26.677578 153.0926219
-26.6783 153.11
-26.6785 153.115
-26.6785 153.115
-26.6846595 153.0542302
-26.685 153.053
-26.6871 153.006
-26.6889 153.085
-26.689306 152.893622
-26.6905 153.043
-26.6912693 153.1042622
-26.6935 151.652
-26.6951 152.947
-26.6951 152.947
-26.6983 153.06
-26.69872 153.12359
-26.6993 153.133
-26.7064 152.825
-26.71648 153.0574
-26.72074 153.12873
-26.72074 153.12873
-26.72605 152.95844
-26.7287 151.8033
-26.7293 152.719
-26.73847 153.12644
-26.74018 150.62487
-26.7401941 150.633764
-26.7438 150.627
-26.765 152.858
-26.7658 153.014
-26.7663028 151.4057555
-26.7681 152.958
-26.7728 153.118
-26.77305 153.10227
-26.77691 153.13562
-26.779741 153.120383
-26.77978 151.11171
-26.78671 153.08152
-26.7949 153.12725
-26.7972 153.143
-26.80155 153.08979
-26.802833 153.129637
-26.8034 152.965
-26.8044992 153.1296501
-26.814 153.116
-26.8243 153.104
-26.8365681 150.7790145
-26.841 151.977
-26.8442 152.883
-26.8471654 151.8000703
-26.85684 152.94117
-26.8732 152.588
-26.8898 152.104
-26.8934 152.29
-26.8999 152.955
-26.9249 150.135
-26.9303165 150.9174497
-26.9387 151.452
-26.9406 152.565
-26.9544 152.778
-26.9593 152.957
-26.9629 151.2162575
-26.9853106 151.8321117
-27.004578 153.069638
-27.0134 152.942
-27.0274 153.092
-27.0392 150.76
-27.0400942 152.8646553
-27.045 153.148
-27.0456 151.079
-27.0596 151.432
-27.0633 153.144
-27.0652383 153.1584336
-27.0658 153.099
-27.069 152.929
-27.0698 153.205
-27.0791 152.773
-27.07946 153.12572
-27.0812699 153.1759164
-27.0833 152.962
-27.0841 151.635
-27.08433 152.94902
-27.0844 152.951
-27.0887508 152.3794897
-27.096836 152.945189
-27.0979912 152.9489153
-27.1065 151.622
-27.1078 152.954
-27.1104 152.924
-27.1159 152.967
-27.1176 152.552
-27.11999 152.8866
-27.1297 153.051
-27.154 149.067
-27.1556 152.967
-27.1579 152.99
-27.1579 152.99
-27.1583 152.96
-27.16009 152.94011
-27.1686 152.964
-27.1717 151.26762
-27.1730725 152.9428396
-27.1785 153.374
-27.182832 151.264833
-27.182832 151.264833
-27.1843471 153.0253992
-27.1849 151.252
-27.184941 151.2616726
-27.1857 151.264
-27.1865 151.7
-27.1911481 153.0292124
-27.1944 152.82
-27.1949 151.271
-27.1967358 153.1105311
-27.2002 153.031
-27.2003 153.017
-27.2031 153.103
-27.20359 152.962891
-27.2152578 153.1095494
-27.2155198 153.0076307
-27.2182 153.058
-27.2185 153.03
-27.2209042 153.0792209
-27.223061 153.098083
-27.2233 153.11
-27.2240374 151.8891676
-27.2270277 153.090023
-27.2299869 153.0871319
-27.2301 152.981
-27.235191 153.1083245
-27.237557 153.021943
-27.237557 153.021943
-27.237557 153.021943
-27.2383076 153.0212346
-27.2383076 153.0212346
-27.2383076 153.0212346
-27.2383076 153.0212346
-27.2398104 153.0174791
-27.2442754 153.0351509
-27.2461324 152.9904998
-27.2461324 152.9904998
-27.2461936 152.4266911
-27.2462 145.977
-27.2466 153.11
-27.2487 153
-27.2487 153
-27.2492 152.992
-27.2492 152.992
-27.25024 153.09834
-27.2535858 153.0811265
-27.2541979 153.089852
-27.2554 152.97
-27.2600964 153.1036138
-27.2602851 152.0552004
-27.26268 153.00766
-27.26268 153.00766
-27.2695 152.978
-27.2798 150.456
-27.2809 152.975
-27.2883 152.953
-27.2918 153.063
-27.2927 152.976
-27.2941 153.052
-27.2964 152.989
-27.301 152.963
-27.301567 152.988456
-27.3016308 152.9884461
-27.3017006 152.9892675
-27.304 151.493
-27.3065 152.97
-27.3066 151.852
-27.3073 153.051
-27.3119 153.062
-27.3142 153.004
-27.316686 153.0382897
-27.3175 153.025
-27.3183578 153.069397
-27.3183578 153.069397
-27.3188603 153.0654145
-27.3207 153.006
-27.3239 153.081
-27.3246 153.042
-27.3247 149.882
-27.3276 152.866
-27.3277 153.056
-27.3352 152.959
-27.33556 152.95634
-27.3390039 153.0278234
-27.3462 152.97
-27.3465 150.196
-27.3473 153.105
-27.3479905 153.0399539
-27.3479905 153.0399539
-27.3481 153.06
-27.3523435 153.0040644
-27.3523435 153.0040644
-27.354099 152.179775
-27.3564 153.023
-27.3564 153.023
-27.3569 152.969
-27.357599 153.038255
-27.3608 152.973
-27.3638673 153.0248498
-27.3638673 153.0248498
-27.3642 153.038
-27.3653 153.085
-27.367439 152.888334
-27.3691 153.014
-27.3691 153.014
-27.371426 152.882101
-27.3747 153.046
-27.3757 151.587
-27.3768754 152.8802062
-27.3777881 153.071894
-27.3779 153.018
-27.3782 153.082
-27.3831 153.017
-27.3833 153.061
-27.3854233 153.1200434
-27.3855957 151.2677299
-27.3872 153.117
-27.3881 153.043
-27.3888 152.989
-27.3895793 152.9654235
-27.3918 152.501
-27.3923 153.023
-27.3931985 153.0306772
-27.3932461 153.0307952
-27.393389 153.031042
-27.393389 153.031042
-27.3934 152.934
-27.3947 153.061
-27.396028 153.050441
-27.3964 152.964
-27.3965 152.784
-27.3971 153.018
-27.3981 153.071
-27.3983095 153.4420557
-27.3984 152.986
-27.401 152.944
-27.4016 153.003
-27.4019 152.962
-27.4019 152.962
-27.4023 153.057
-27.4037144 152.9862697
-27.4039 152.93
-27.4041 152.965
-27.4049 153.008
-27.4067 151.997
-27.4067 153.037
-27.4077 152.998
-27.4077 152.998
-27.4082 153.025
-27.40907 152.92604
-27.4118 152.967
-27.4121 153.018
-27.4121 153.018
-27.4139 153.039
-27.4148 152.956
-27.4163073 152.9773718
-27.4163073 152.9773718
-27.4176 153.025
-27.4189 153.058
-27.4192 153.069
-27.4208 117.897
-27.4215 153.074
-27.4222 153.048
-27.4233395 152.9939931
-27.4241 153.04
-27.425 153.519
-27.4281 153.015
-27.4293467 153.0294751
-27.4293467 153.0294751
-27.4294 152.99
-27.4314 153.004
-27.4315 153.031
-27.4323 153.074
-27.4329 153.057
-27.4359 152.984
-27.437 153.064
-27.4374 152.936
-27.438623 153.149685
-27.4398 151.911
-27.441 153.008
-27.4419249 153.1614697
-27.4425 152.944
-27.4432068 153.1712609
-27.4433 153.171
-27.4442 151.718
-27.444423 153.018925
-27.4457 153.176
-27.446 152.994
-27.4467 153.02875
-27.4471 152.644
-27.4476 152.977
-27.4476 152.977
-27.4482 152.952
-27.4494 153.125
-27.4505 153.012
-27.4505709 153.0007514
-27.451463 153.059854
-27.4516 152.992
-27.45214 153.0646
-27.45219 151.94156
-27.4528 153.036
-27.4544 153.184
-27.4551 153.154
-27.4553252 152.4898681
-27.4557 153.002
-27.4566 153.174
-27.4573 153.074
-27.4584 153.183
-27.4585 152.981
-27.4586 153.027
-27.4588 152.996
-27.4594 152.053
-27.4603 153.046
-27.4604 153.01
-27.4619 151.958
-27.4638578 152.9993134
-27.4638578 152.9993134
-27.4641 153.105
-27.4641 153.105
-27.464229 153.031035
-27.464229 153.031035
-27.464229 153.031035
-27.464229 153.031035
-27.464229 153.031035
-27.464229 153.031035
-27.4642953 153.0313852
-27.4642953 153.0313852
-27.4642953 153.0313852
-27.4643376 153.0311187
-27.4643376 153.0311187
-27.4643376 153.0311187
-27.4643376 153.0311187
-27.4643376 153.0311187
-27.4644 153.16
-27.4644 153.066
-27.4644068 153.0312175
-27.465 153.045
-27.4668 152.583
-27.4673 153.19
-27.4675792 153.0201292
-27.4675792 153.0201292
-27.4675792 153.0201292
-27.4676 153.175
-27.4677 152.985
-27.4678 153.071
-27.4686 153.044
-27.4699 153.084
-27.4709331 153.0235024
-27.4709331 153.0235024
-27.4709331 153.0235024
-27.4715 151.815
-27.4721658 153.0256348
-27.472422 153.026004
-27.472422 153.026004
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.473419 153.02599
-27.4743 153.063
-27.474574 153.126448
-27.4774 152.995
-27.4785 152.869
-27.4791406 152.4272731
-27.47938 153.07605
-27.4801 153.201
-27.4803 153.008
-27.4814 153.018
-27.482262 153.128932
-27.48288 153.03346
-27.4837 153.027
-27.4851 153.092
-27.4853 152.989
-27.4855 153.045
-27.486958 153.059852
-27.4872 152.981
-27.4873 153.009
-27.49038 153.23011
-27.4907 152.546
-27.4908 151.892
-27.4909 153.079
-27.49179 153.21614
-27.4921 153.152
-27.4921104 153.0487041
-27.4933 153.103
-27.4933 153.103
-27.49407 153.061203
-27.4946 153.023
-27.4955 152.997
-27.495881 153.015915
-27.4959 152.912
-27.4968 153.404
-27.49837 153.23365
-27.4991 153.062
-27.4992 153.034
-27.4994 153.052
-27.4997 152.966
-27.5 152.945
-27.500068 152.9980586
-27.5005804 153.0589126
-27.5015 153.082
-27.5017 152.972
-27.5028 153.037
-27.5031 153.114
-27.5032 152.98
-27.5049 153.061
-27.5057 153.093
-27.5057 153.093
-27.5061 153.213
-27.5068 153.049
-27.5076 152.953
-27.5088 152.94
-27.5092 153.032
-27.5099064 152.9452781
-27.51 153.037
-27.5108 153.048
-27.5113 152.97
-27.5122 153.023
-27.5137 153.011
-27.5142 153.062
-27.5158 153.072
-27.5163 153.031
-27.5163 153.031
-27.5165 153.096
-27.5165 153.096
-27.5166 153.257
-27.5177 152.944
-27.5178 153.057
-27.5181 153.22
-27.5183059 152.6377595
-27.5186 152.979
-27.5194 151.846
-27.5199 153.02
-27.5223 152.974
-27.5223 152.357
-27.5234 153.029
-27.5249 153.073
-27.5249 151.958
-27.5254 153.059
-27.5254 153.059
-27.5254 153.059
-27.526 153.047
-27.526 153.047
-27.526119 153.265533
-27.5264 153.23
-27.5265 152.965
-27.5279 153.003
-27.5282 153.278
-27.5288243 153.2668258
-27.5291765 153.0446269
-27.5292 153.27
-27.5298 152.408
-27.5305 153.261
-27.5307 153.029
-27.530974 153.054616
-27.531 152.935
-27.5315 151.935
-27.5325 151.193
-27.5326 152.983
-27.5328058 152.9423319
-27.5336 153.095
-27.5336 153.095
-27.5336 152.895
-27.5339686 153.1133598
-27.5340299 153.0642326
-27.5341 153.21
-27.5343 153.081
-27.5343 151.91
-27.5355 153.19
-27.5359 153.195
-27.5367 153.023
-27.537951 152.983597
-27.5384 153.018
-27.5393 151.931
-27.54 151.956
-27.5401 152.941
-27.5418 153.231
-27.5418 151.922
-27.5424 153.106
-27.5435 152.711
-27.544772 153.081751
-27.5459 152.492
-27.5463 153.124
-27.5465 151.958
-27.5467 153.011
-27.5472 153.203
-27.5475 153.262
-27.5492 152.982
-27.5499 152.958
-27.5503 153.096
-27.5504 152.889
-27.5518 153.086
-27.5519 151.946
-27.5519 152.808
-27.5538 153.033
-27.5543 151.696
-27.5545 152.126
-27.5546 152.93
-27.5548 152.544
-27.5549 152.975
-27.5549 152.975
-27.5562 151.978
-27.5562 151.949
-27.5564 153.08
-27.5564 153.08
-27.5580166 151.9561963
-27.5580888 151.9562003
-27.5592 151.935
-27.5592 151.955
-27.5595 152.024
-27.559835 152.279183
-27.5602 151.965
-27.5604 152.918
-27.5621 152.595
-27.563 152.825
-27.5634 151.903
-27.56341 153.26219
-27.564 153.075
-27.564 152.98
-27.5645 153.056
-27.5652 151.929
-27.5653 151.953
-27.5678 153.04
-27.5686 152.278
-27.568633 152.419402
-27.5691 152.876
-27.5692 153.329
-27.5708 153.067
-27.5714 152.953
-27.5721 152.629
-27.5724 151.97
-27.5728 152.203
-27.5731 151.932
-27.5733 151.941
-27.5735695 153.0640757
-27.5738 153.269
-27.5746345 152.7873104
-27.5747 151.569
-27.5766 153.058
-27.5767 151.956
-27.5777038 149.7583619
-27.58 152.987
-27.5805 153.015
-27.583 153.296
-27.5834 151.98
-27.5835 152.777
-27.5859 152.977
-27.5864 153.084
-27.5865059 153.2795906
-27.587 153.062
-27.587 153.062
-27.587367 153.111701
-27.587367 153.111701
-27.5877 152.967
-27.5878 151.961
-27.5897 152.744
-27.5908 152.757
-27.5909 153.129
-27.591 152.355
-27.591341 151.952571
-27.593 153.109
-27.593 153.109
-27.5931 153.017
-27.5931 153.077
-27.593578 152.95053
-27.5942 152.739
-27.5947 153.056
-27.5947 153.056
-27.5951 153.287
-27.5957 151.969
-27.5961 151.932
-27.5974 152.981
-27.5985 152.968
-27.6005 151.956
-27.6016 152.763
-27.6018 151.912
-27.6031829 152.8644166
-27.6043 152.811
-27.6044 151.93
-27.6046 152.847
-27.6055038 153.0765497
-27.6055038 153.0765497
-27.606 152.778
-27.6065 151.833
-27.6066 152.663
-27.6068 153.096
-27.6068 152.935
-27.6068 152.977
-27.6068 153.096
-27.608 153.129
-27.6080322 152.7852356
-27.6085382 152.7599301
-27.6085382 152.7599301
-27.6085382 152.7599301
-27.6085382 152.7599301
-27.6085382 152.7599301
-27.6091003 152.7633315
-27.6091003 152.7633315
-27.6091003 152.7633315
-27.6091003 152.7633315
-27.611 152.9
-27.6121 152.805
-27.61263 153.1368
-27.6127 152.749
-27.6128 152.916
-27.6136 152.959
-27.614491 153.305954
-27.6146 152.864
-27.6146 152.864
-27.6146 153.031
-27.61503 152.75764
-27.6154 153.003
-27.6157 152.116
-27.6158 152.777
-27.6178 152.784
-27.61864 153.0289
-27.6187 153.129
-27.6191 153.292
-27.6206 152.752
-27.6209 152.768
-27.621 153.236
-27.6217 152.915
-27.62236 152.8754
-27.62346 153.04954
-27.6237 152.738
-27.6238 152.396
-27.624 152.96904
-27.6243 153.384
-27.6244 152.971
-27.6256867 152.9595109
-27.6262 153.106
-27.626896 152.800169
-27.6277 152.876
-27.6285 152.775
-27.6285 153.139
-27.629 152.191
-27.629208 152.852448
-27.6293 152.739
-27.6301 153.116
-27.631 153.366
-27.633089 153.1091
-27.6339 152.22
-27.63438 153.1468
-27.6358725 152.5855816
-27.638384 153.059418
-27.6394373 153.0553968
-27.6401 152.784
-27.64024 152.76867
-27.6408454 153.1086569
-27.6408454 153.1086569
-27.6428 152.751
-27.643 153.098
-27.6431135 153.1246972
-27.6432 153.153
-27.6432 153.153
-27.6472 153.177
-27.6484 152.851
-27.6484 152.851
-27.6491 152.331
-27.6514 153.381
-27.6518 153.098
-27.65282 152.86952
-27.6556 152.917
-27.65731 152.74995
-27.65779 152.78059
-27.6593 151.855
-27.659616 153.1115901
-27.66057 152.88733
-27.6625196 153.049708
-27.6625196 153.049708
-27.663 153.187
-27.663231 153.047363
-27.6643 153.02685
-27.6643 153.02685
-27.6646 153.151
-27.6656 153.204
-27.6661205 152.465274
-27.668 153.054
-27.668 153.054
-27.6685 152.057
-27.6699529 152.9222391
-27.6736 153.143
-27.6763 153.091
-27.677 151.704
-27.6772 153.049
-27.6783 153.235
-27.6813 153.034
-27.6843002 153.0182789
-27.6843002 153.0182789
-27.6860978 153.1574036
-27.6866 153.182
-27.6866 153.11
-27.6866 153.11
-27.6878 153.09
-27.6891 153.132
-27.69128 153.08053
-27.6914416 152.9159856
-27.6945 153.214
-27.6953 153.145
-27.701 153.036
-27.701 153.036
-27.7032 153.214
-27.7036 153.257
-27.7053 153.17
-27.7074 114.168
-27.7093 151.867
-27.7103 152.975
-27.7146 153.114
-27.7151 153.204
-27.71654 153.2060459
-27.71654 153.2060459
-27.71654 153.2060459
-27.71654 153.2060459
-27.7168 150.372
-27.71683 153.20566
-27.717208 153.205199
-27.717208 153.205199
-27.717208 153.205199
-27.717208 153.205199
-27.717543 151.639189
-27.7186 153.201
-27.7227 152.224
-27.7266 153.204
-27.73049 152.98329
-27.7334 153.196
-27.7396 153.189
-27.7445 153.318
-27.7592 151.453
-27.7648 153.105
-27.7648 153.105
-27.77056 153.26408
-27.7713486 152.6507144
-27.77284 153.24468
-27.7789 153.362
-27.7798024 152.7311546
-27.7798024 152.7311546
-27.7831 151.945
-27.797 151.775
-27.7982 152.372
-27.8005 153.276
-27.8005 153.276
-27.808439 152.9550988
-27.8119 152.667
-27.8165 153.277
-27.8239 152.617
-27.827 153.179
-27.8296 153.028
-27.835126 153.030566
-27.8352 153.034
-27.844431 153.328079
-27.84796 153.30017
-27.8519 151.905
-27.8678 153.316
-27.8678 153.316
-27.868 152.049
-27.8688 153.298
-27.8733 153.376
-27.8763 153.125
-27.8769 151.266
-27.8813629 153.3345096
-27.8813629 153.3345096
-27.88583 153.39425
-27.8865502 153.3185665
-27.89212 153.282715
-27.8939 152.973
-27.8942 153.388
-27.8968 153.326
-27.8988 153.379
-27.8991 153.304
-27.8991 153.304
-27.8991 153.304
-27.912 153.393
-27.9148 120.699
-27.9156 153.329
-27.918243 153.336217
-27.9185 153.307
-27.9185 153.307
-27.9190461 153.3880733
-27.9196 152.705
-27.92431 153.37785
-27.92735 153.31566
-27.9283 153.397
-27.9317868 151.9041417
-27.933 153.19
-27.93751 153.30399
-27.93751 153.30399
-27.9396 151.812
-27.9407 153.407
-27.9424 153.386
-27.9424 152.623
-27.9429 153.403
-27.94355 153.32011
-27.94355 153.32011
-27.9443 153.364
-27.9619 153.404
-27.9619 153.404
-27.964464 152.995733
-27.96987 153.416641
-27.96987 153.416641
-27.9703956 153.1985794
-27.9706 153.4
-27.9709 153.414
-27.9709 153.414
-27.970901 153.414138
-27.970901 153.414138
-27.970901 153.414138
-27.970901 153.414138
-27.9738 153.404
-27.975 153.382
-27.9804 153.429
-27.9807 152.547
-27.9844 153.34
-27.9844 153.34
-27.9848 153.401
-27.985 153.376
-27.985 153.376
-27.9877 119.297
-27.9888 153.381
-27.9888 153.381
-27.9913 152.999
-27.9961 143.819
-27.9964 153.344
-27.9972 152.68
-27.9982563 153.4286941
-27.9986197 153.428584
-28.0018 153.416
-28.0018 153.328
-28.0018 153.328
-28.0046 153.339
-28.004611 153.388839
-28.0115 151.579
-28.01243 153.416855
-28.0135 153.334
-28.0158 153.37
-28.016844 153.162641
-28.0185 153.412
-28.0225 153.343
-28.0258 153.416
-28.0317 147.475
-28.033 148.592
-28.0334 151.983
-28.0355 153.435
-28.0355 153.435
-28.0359 153.424
-28.0359 153.424
-28.0361 148.576
-28.0393 153.313
-28.0405447 153.4340946
-28.0408 153.376
-28.0408 153.376
-28.0411 153.417
-28.0411 153.417
-28.0424247 152.1200322
-28.0464 153.436
-28.050327 153.4360415
-28.0598 153.425
-28.0598 153.425
-28.064 153.439
-28.0655201 117.8480988
-28.0675788 152.2422557
-28.0687 145.682
-28.070762 145.683657
-28.0713 153.4
-28.0741 153.376
-28.0741 153.376
-28.0746 153.354
-28.0746 153.354
-28.0758891 153.381106
-28.0758891 153.381106
-28.0759374 153.3810112
-28.0767089 153.4462199
-28.0767089 153.4462199
-28.0782365 153.3837363
-28.07849 153.41167
-28.0785 153.363
-28.0785 153.363
-28.0799734 153.3879433
-28.0799734 153.3879433
-28.0799734 153.3879433
-28.0800631 150.7395896
-28.0844 153.431
-28.0865 151.785
-28.0868 153.409
-28.0869 153.449
-28.0869 153.449
-28.0906354 153.4523304
-28.0906354 153.4523304
-28.0906354 153.4523304
-28.093292 152.843555
-28.0975 153.357
-28.0975 153.357
-28.0978 153.397
-28.098 153.419
-28.1002 153.443
-28.1009 151.164
-28.1045 152.916
-28.104683 153.0278877
-28.1097 153.463
-28.1176 153.468
-28.121517 153.4691323
-28.1237 153.187
-28.1295 153.466
-28.1299 153.449
-28.1315 153.476
-28.1374 153.477
-28.1396 153.462
-28.1408 153.429
-28.1487 151.953
-28.1499 153.499
-28.1526 153.402
-28.1574 145.05
-28.1651 152.668
-28.1664283 153.5130509
-28.1664283 153.5130509
-28.1696 153.54
-28.1718 153.53
-28.1725966 153.5419909
-28.1725966 153.5419909
-28.1730138 153.5427073
-28.1730138 153.5427073
-28.1755567 153.537485
-28.1767 153.544
-28.1869 153.463
-28.1896 153.265
-28.1952 153.54
-28.1965 152.209
-28.1971 153.565
-28.1976 153.506
-28.2006 152.029
-28.2034 151.565
-28.2058 153.396
-28.2102248 153.5364813
-28.2116 152.033
-28.2145 152.04
-28.2152 153.007
-28.2159811 153.5262101
-28.2176 152.03
-28.2184 152.858
-28.2205 152.014
-28.2225 153.545
-28.224 153.468
-28.2303 153.429
-28.2305 152.018
-28.2407 153.498
-28.2417459 153.5514329
-28.2568977 153.5768637
-28.2632 153.556
-28.26538 153.56835
-28.2745 153.463
-28.2853306 153.3755577
-28.2934 152.116
-28.2942 153.521
-28.3072 153.307
-28.3136 153.277
-28.3138449 153.4356286
-28.327 153.402
-28.32966 153.4026459
-28.3316 153.4
-28.333 153.359
-28.3340425 152.2954323
-28.3389 153.572
-28.3401 116.68
-28.3478403 114.6309821
-28.3544596 153.2045364
-28.3562 153.573
-28.3776 153.568
-28.3812 114.43
-28.3894 152.61
-28.3939344 153.4040183
-28.4101344 152.2952657
-28.4129 151.0808
-28.41437 153.3351524
-28.4145517 149.8720206
-28.4357851 153.4669016
-28.44 152.827
-28.4572 153.497
-28.4703 153.253
-28.4733 152.545
-28.4867 149.47
-28.49038 151.97293
-28.4966 114.81
-28.4987106 153.4127002
-28.5045 153.525
-28.5103 152.964
-28.5232178 153.4445306
-28.5251248 153.5456567
-28.5357 153.03
-28.5374 150.29616
-28.5378 115.512
-28.541239 153.550842
-28.5434 150.305
-28.5448 150.307
-28.5486 153.496
-28.5714812 153.4255172
-28.5744 150.754
-28.5765 148.23
-28.5791954 151.9547813
-28.5939551 153.220189
-28.5947 151.812
-28.5997166 153.098625
-28.6053 150.36
-28.6093958 153.4393004
-28.6134 151.955
-28.6153 150.363
-28.6217024 153.0035789
-28.6254511 153.0028683
-28.625717 122.4042813
-28.6262791 153.4884761
-28.6337 148.867
-28.644489 153.612885
-28.6469 152.085
-28.6475 153.614
-28.650302 153.4550773
-28.6527 151.938
-28.6527 151.934
-28.655369 153.5676872
-28.6555 151.879
-28.6607 151.926
-28.6632 151.935
-28.6671 153.616
-28.6716094 114.612612
-28.6730389 153.2791341
-28.6780146 153.1816304
-28.6802137 153.3903467
-28.6859 153.526
-28.6869 153.316
-28.6878 153.439
-28.6906 153.613
-28.7129307 153.3628886
-28.7178 153.532
-28.719 114.637
-28.7246 149.577
-28.7253581 153.4087595
-28.7313511 153.2974935
-28.7367 152.622
-28.7389 151.873
-28.7397794 114.6227318
-28.7415493 114.6298788
-28.7461 153.225
-28.7519153 153.0810318
-28.7633368 153.4077559
-28.7644 114.624
-28.7661941 153.3450152
-28.7667271 114.6130123
-28.76686 114.612936
-28.7675087 153.4985623
-28.7751 152.989
-28.7754487 151.9737448
-28.775827 114.607942
-28.776078 114.6080716
-28.777764 114.7511878
-28.7789 114.608
-28.7794 114.629
-28.7821 114.612
-28.7844371 114.6162812
-28.7879 114.604
-28.7943 153.591
-28.794984 153.5006459
-28.7974 153.384
-28.7986667 153.2782919
-28.7993 151.842
-28.8001756 114.6285945
-28.8051 153.285
-28.8058403 153.2997523
-28.8095 153.291
-28.8096 153.262
-28.8108 153.278
-28.811 114.686
-28.813739 153.277279
-28.81378 153.27763
-28.8145 153.291
-28.8182885 153.3223076
-28.8205 153.288
-28.8214 153.296
-28.8247 153.326
-28.8276 153.42
-28.83031 153.60096
-28.8375621 153.2051129
-28.8398519 153.4339079
-28.8455 153.043
-28.8464649 153.4386134
-28.850835 153.5869075
-28.855 153.037
-28.855056 151.16938
-28.8550578 151.1682496
-28.8578 153.355
-28.8591615 114.6409863
-28.8598 153.037
-28.8622085 153.5308355
-28.8627839 153.0453607
-28.8638 153.565
-28.8676 153.565
-28.8681633 153.5587135
-28.871783 153.561912
-28.8727849 153.044616
-28.8742539 153.4248302
-28.8747551 153.1686889
-28.881 121.331
-28.8910142 152.5671717
-28.8911 153.305
-28.9021172 150.7762038
-28.9061914 152.7202288
-28.9089 153.485
-28.9127 153.509
-28.9186 151.931
-28.9201 153.007
-28.926 150.393
-28.9272952 151.9341328
-28.9286 152.375
-28.9353368 153.2782623
-28.9394253 114.7989808
-28.9525502 153.465405
-28.9710782 148.9885928
-28.972 147.791
-28.978775 149.000782
-28.9921 153.283
-29.0025614 151.9473187
-29.0052308 151.542439
-29.0117 134.754
-29.0137 153.434
-29.0483 151.276
-29.0512464 152.01901
-29.0513024 152.0186576
-29.0554565 167.9583398
-29.0554757 167.9582119
-29.0714 153.342
-29.0759 149.634
-29.086 152.955
-29.1125 153.426
-29.1144 147.454
-29.1243 150.305
-29.1943 115.441
-29.2100007 116.0081073
-29.2234984 152.6064637
-29.2447 146.92
-29.251 114.931
-29.2514 150.751
-29.2831 152.989
-29.315 149.806
-29.3172 145.847
-29.3215 151.095
-29.3601 153.283
-29.3879674 153.2313816
-29.4058971 153.3506053
-29.4196 153.288
-29.4255402 153.2400612
-29.4260252 147.9792875
-29.4284 153.328
-29.4324404 142.0100988
-29.4406 153.353
-29.4434 151.848
-29.4437406 116.2861508
-29.4471382 151.6011641
-29.4537 153.201
-29.4584807 153.1969763
-29.4584807 153.1969763
-29.4585574 153.1969164
-29.4586322 153.1970595
-29.4597171 149.1259057
-29.462238 149.842605
-29.4648 149.843
-29.4732 150.141
-29.4785 149.839
-29.4791 149.839
-29.489 153.234
-29.4912 153.1
-29.5345 115.761
-29.54092 150.57606
-29.5437 148.578
-29.5703 153.078
-29.5703 153.078
-29.5852 150.334
-29.5863893 152.7755195
-29.6090539 153.3384619
-29.6237267 153.0057161
-29.6292 153.031
-29.6441 152.921
-29.6545 150.828
-29.661 153.106
-29.6714239 152.9213053
-29.6720097 152.9362119
-29.6750832 152.9417466
-29.6818682 152.9332865
-29.6869 115.894
-29.6891 152.937
-29.689593 152.933411
-29.689593 152.933411
-29.689593 152.933411
-29.6896 152.933
-29.6948 121.029
-29.7055 152.936
-29.7096 152.937
-29.7096 152.937
-29.7244781 152.9324977
-29.7327 151.732
-29.73446 149.79592
-29.7356 151.739
-29.7379068 151.7295387
-29.744 147.77
-29.7708 151.103
-29.7731886 151.1221498
-29.7737829 151.8983601
-29.7741092 151.1150531
-29.7741325 151.1149995
-29.7796124 150.9801643
-29.8024 151.266
-29.8139 148.912
-29.8193278 115.2687403
-29.8278507 152.8914689
-29.8542 151.118
-29.8667813 153.2662597
-29.8692269 150.5709132
-29.8789 116.023
-29.9177 149.796
-29.9275 151.725
-29.9481 152.727
-29.948243 114.9783629
-29.9584202 151.2134837
-29.9616 146.856
-29.9861 153.226
-30.0172 151.661
-30.0221 153.194
-30.0263 148.119
-30.0516 152.978
-30.0779672 153.1893818
-30.0908 145.939
-30.0908 145.939
-30.1031 148.967
-30.1068465 116.6320359
-30.1128 153.196
-30.1129 149.799
-30.1360235 153.005384
-30.1408 150.444
-30.1536713 153.1854721
-30.1679145 151.0760407
-30.19 152.542
-30.2063 152.899
-30.2094 153.157
-30.2214803 153.0114883
-30.2225 151.676
-30.226062 149.440491
-30.2427571 152.8844928
-30.252937 153.0471828
-30.25398 153.13145
-30.2712 116.662
-30.2747 152.629
-30.2828 153.112
-30.288844 153.0134512
-30.2917485 153.1192336
-30.2926 153.104
-30.2968792 153.1176557
-30.2992384 116.0597917
-30.301705 153.113512
-30.30212 153.1211517
-30.3055 153.136
-30.3068 115.04
-30.3086014 151.6577425
-30.3168 153.093
-30.3233131 149.7808631
-30.3245 149.785
-30.3346 153.077
-30.33491 149.77399
-30.3367 149.754
-30.3393389 152.7117264
-30.3512 153.085
-30.3522 148.889
-30.3628682 153.0979486
-30.3637 153.08
-30.3659 117.118
-30.3734498 150.6095579
-30.3847392 153.0506212
-30.3868124 115.4986776
-30.388274 152.8842079
-30.4028528 152.3497061
-30.4256403 152.7776996
-30.4461 153.029
-30.4478 137.168
-30.4497149 153.0126023
-30.4501 117.866
-30.4516 152.895
-30.4622 147.693
-30.4673192 153.0443606
-30.479 138.419
-30.492263 116.3616267
-30.4950764 153.0208529
-30.4961473 151.6407546
-30.4999 115.07
-30.5031067 151.6744162
-30.5047 151.659
-30.5073827 151.1149288
-30.5108727 151.6507081
-30.5127 151.655
-30.513288 151.667668
-30.513288 151.667668
-30.5134 151.6675
-30.5146 151.666
-30.5175911 152.0540444
-30.5193 151.664
-30.5231 151.677
-30.5245 151.637
-30.5643 136.896
-30.5646 136.896
-30.5670072 152.8104603
-30.5690275 151.9049378
-30.5889452 151.5250773
-30.5916721 153.0024636
-30.5945 116.771
-30.599 149.953
-30.6022132 151.6796911
-30.6096682 148.9735267
-30.6130803 151.4914677
-30.6327859 116.0037196
-30.6403 152.984
-30.6405046 153.0022105
-30.6420732 153.0054562
-30.6432754 151.4965708
-30.6436 152.854
-30.6765 115.681
-30.7059 150.043
-30.7095 152.919
-30.7231 121.451
-30.7371 121.463
-30.739 152.829
-30.7409 121.47
-30.744342 121.474515
-30.744342 121.474515
-30.7464 150.72
-30.7469 121.486
-30.74939 152.9955033
-30.7501 121.4755
-30.7564873 152.9053259
-30.7612 121.487
-30.763 151.449
-30.7637 121.479
-30.7649994 152.7194329
-30.7775 121.468
-30.7815 121.485
-30.7909 121.481
-30.8098897 117.8598234
-30.8188 152.509
-30.8206975 152.9944399
-30.8256011 150.3462418
-30.8257984 117.4842155
-30.831 152.882
-30.8503974 143.0895923
-30.8842762 151.1539419
-30.8880205 153.0404882
-30.8911488 153.0391993
-30.8997385 116.716172
-30.916 118.208
-30.9258568 152.6248927
-30.9301543 150.8465307
-30.9314 147.872
-30.9359417 144.4180303
-30.9384 150.642
-30.9511 149.07
-30.9534 121.164
-30.9558 148.392
-30.9687037 116.2159871
-30.9695 151.342
-30.9765377 150.2516696
-30.9783 150.256
-30.9802871 151.6033968
-30.9818 150.25
-30.9860912 150.4474055
-30.9915 150.251
-30.9952988 150.9227835
-31.0036045 150.8756589
-31.0143037 115.3297686
-31.0175654 152.941539
-31.0189618 151.0747725
-31.0247 146.715
-31.0262943 152.9461395
-31.0327 152.88
-31.0541 151.054
-31.0545346 153.0523992
-31.0554733 152.786424
-31.059 150.895
-31.0692762 152.8261994
-31.0757076 150.9175923
-31.0777572 152.829924
-31.07985 152.84166
-31.0807034 152.828489
-31.0807034 152.828489
-31.0816597 152.8403755
-31.0833982 152.8467429
-31.0846637 150.9364162
-31.0874133 150.9259008
-31.0891815 150.9320805
-31.0901 116.449
-31.0904964 152.825232
-31.092 150.921
-31.0945 150.873
-31.0989013 149.9068246
-31.1 150.893
-31.1045 150.917
-31.1094 115.377
-31.1105102 150.8954636
-31.114202 150.908466
-31.1145265 117.7938905
-31.1175 150.263
-31.1271941 151.0042734
-31.1288 150.94
-31.1304153 150.9198037
-31.1745 117.386
-31.1875329 118.1013089
-31.1898 152.971
-31.1933979 117.0325472
-31.1993 136.825
-31.2037 150.916
-31.2048 121.665
-31.206 121.619
-31.2124 152.835
-31.2183536 150.8169057
-31.2275 119.325
-31.2349851 151.0205212
-31.2469581 150.4680477
-31.250798 151.9482403
-31.2517507 151.1809597
-31.2633 150.735
-31.2737 116.51
-31.2761427 149.2784126
-31.2777 115.444
-31.2788 152.679
-31.298 151.408
-31.3009 118.697
-31.3018734 151.1484895
-31.3019763 116.8256674
-31.3338 152.794
-31.3338 148.474
-31.3379 115.597
-31.3463 149.502
-31.3478507 115.9047277
-31.3486815 149.8281946
-31.3489 115.504
-31.3492 150.651
-31.3803 152.757
-31.386192 116.097473
-31.3911988 150.256667
-31.393 152.543
-31.4047 152.874
-31.4065443 150.4255942
-31.4288468 152.9076433
-31.429 152.883
-31.4293 152.914
-31.4304075 152.903282
-31.4308492 152.9084532
-31.4341 152.921
-31.4355 152.896
-31.4356 148.911
-31.4366 152.681
-31.4369 152.49
-31.451989 152.73124
-31.4534546 152.9185203
-31.454 149.901
-31.4599 151.127
-31.46 119.49
-31.4632754 152.8774247
-31.469258 152.731795
-31.4721 152.756
-31.4726 152.922
-31.4781 152.915
-31.4783443 152.6605369
-31.4807 118.28
-31.4894431 118.2776409
-31.496137 115.58892
-31.5002 145.839
-31.5011 145.836
-31.5018 150.68
-31.5140323 151.7163777
-31.5367 148.643
-31.5379058 152.5160075
-31.540796 150.8281404
-31.5453518 116.0689015
-31.5501 146.726
-31.5506492 116.4698561
-31.5522 115.636
-31.5533 149.379
-31.5543 152.851
-31.5578823 143.3774131
-31.5584981 143.3778202
-31.5612 147.189
-31.5625 159.088
-31.5846 115.962
-31.5884 152.729
-31.5911 152.839
-31.6051 152.472
-31.6274357 117.0101524
-31.6323 152.703
-31.6334 117.722
-31.6335 152.296
-31.63413 152.82151
-31.6368 116.796
-31.6393 152.734
-31.6407177 150.2378306
-31.641478 117.486766
-31.6428 152.794
-31.643766 115.711758
-31.6452454 150.7261717
-31.6457 152.816
-31.64573 115.70206
-31.6461 116.662
-31.6503 116.676
-31.6514251 152.7968396
-31.6515136 116.6814654
-31.6554 117.245
-31.657328 115.70805
-31.6582 116.666
-31.65848 115.695618
-31.6616 152.61
-31.6654 148.297
-31.6659 116.031
-31.6679 115.713
-31.6730745 115.7023689
-31.677655 115.709371
-31.6788 115.726
-31.6788 115.726
-31.697 115.716
-31.7026205 115.809456
-31.7049 147.837
-31.7062 152.4681
-31.70827 148.660785
-31.71148 115.78495
-31.712 152.594
-31.716048 115.792812
-31.7189 115.737
-31.7233 115.762
-31.7303 115.721
-31.7314 115.735
-31.7331 152.697
-31.7331 115.749
-31.7363 152.401
-31.7422728 115.7702722
-31.7422728 115.7702722
-31.742706 115.769378
-31.742706 115.769378
-31.742706 115.769378
-31.744 115.773
-31.7463 115.757
-31.7467 116.453
-31.7484 115.735
-31.7492106 115.8042897
-31.7518 115.795
-31.7571 115.815
-31.7599 115.739
-31.7612 115.751
-31.762 115.78
-31.7621998 116.3827286
-31.763 150.835
-31.7664 115.769
-31.7691 115.964
-31.76926 115.8162
-31.7706 152.652
-31.7709 152.316
-31.771333 115.9734253
-31.7737 115.757
-31.7783 115.748
-31.7784 150.892
-31.7792756 115.8076781
-31.7800986 115.8137317
-31.7835 152.228
-31.783703 152.532633
-31.783732 115.965326
-31.7842 115.789
-31.785552 115.964287
-31.7881 116.024
-31.79 115.759
-31.7916 115.801
-31.7921 115.75
-31.79374 115.98519
-31.801754 115.742924
-31.8036 115.788
-31.8036938 116.3104648
-31.8037 115.863
-31.80658 115.82954
-31.8075 115.767
-31.807667 115.790025
-31.807667 115.790025
-31.8078 116
-31.8082 115.802
-31.8092 115.844
-31.8114816 116.2088242
-31.8123 115.764
-31.8137 115.754
-31.8156 115.802
-31.8186 149.123
-31.8214 149.724
-31.8236103 152.6136616
-31.827 115.782
-31.8273 115.748
-31.8275 115.791
-31.8277 115.844
-31.828 115.882
-31.8284 115.853
-31.8287129 115.8085296
-31.8292 115.827
-31.8297 116.024
-31.8303 115.87
-31.8304965 115.8394636
-31.8305 115.761
-31.8329 115.771
-31.8355 115.893
-31.8372 147.719
-31.8381 115.862
-31.83968 115.83701
-31.8402 115.789
-31.8407 115.798
-31.8407579 115.8529854
-31.8418 115.809
-31.8418 115.775
-31.8423 152.751
-31.8437 115.758
-31.8441506 115.8930022
-31.8481 115.818
-31.8497 115.808
-31.8502 115.911
-31.8518 115.777
-31.8521 115.834
-31.8546 115.862
-31.8562 115.755
-31.8572 115.874
-31.8575921 115.9333705
-31.8576 116.269
-31.8604238 115.7611374
-31.8608 115.845
-31.8621842 116.0458372
-31.8684 115.936
-31.8693 115.822
-31.8694 116.035
-31.8698 116.167
-31.8698 115.838
-31.87 152.37
-31.8701 152.377
-31.8705312 115.7762682
-31.8708 115.875
-31.8708 115.797
-31.8716 115.951
-31.8718 115.924
-31.8719 152.69
-31.8728686 116.2150164
-31.8739 118.148
-31.8742 115.812
-31.8743 115.9766951
-31.8754993 115.7763909
-31.87577 115.77655
-31.8761 115.934
-31.8767 115.908
-31.8769 115.89
-31.8771 115.854
-31.8787 115.879
-31.8787 115.879
-31.8788478 116.0182875
-31.8813 116.138
-31.8817 152.18
-31.8817 115.826
-31.8827 115.767
-31.8827 115.866
-31.8832 115.951
-31.884918 115.840706
-31.8852731 115.7815519
-31.8856723 115.9040432
-31.8859 115.805
-31.8868 116.043
-31.8868 116.043
-31.887 115.917
-31.888235 116.000738
-31.888235 116.000738
-31.888477 116.001622
-31.8886 150.878
-31.888855 138.422448
-31.8892 115.926
-31.8898 116.01058
-31.8898 116.01058
-31.8898 116.01058
-31.8905 115.886
-31.8906 115.772
-31.8915826 115.7901524
-31.8916 115.894
-31.892 152.461
-31.8933 115.946
-31.8934 116.76
-31.8938 115.865
-31.894608 115.895279
-31.8962 115.829
-31.8963 115.766
-31.8963 115.766
-31.8966 152.48
-31.8970263 115.8746276
-31.897062 115.779069
-31.897062 115.779069
-31.8971 152.6112
-31.8972 115.846
-31.8975 116.046
-31.8982 115.937
-31.8988 115.825
-31.8995266 116.027633
-31.8999 152.522
-31.9007 115.859
-31.9016953 115.9682579
-31.9018 115.852
-31.9019588 115.8407144
-31.9025 115.909
-31.9026 116.203
-31.9031601 115.9946932
-31.9032 115.875
-31.9033 116.165
-31.9057 116.137
-31.9069 116.043
-31.9071173 152.44497
-31.9073 116.098
-31.9077611 115.953831
-31.9087 115.903
-31.9097 115.77
-31.90975 152.46338
-31.9101 115.844
-31.9103 115.79
-31.9109863 152.568131
-31.9114989 152.4605728
-31.9114989 152.4605728
-31.9126 115.885
-31.9137408 152.4593048
-31.9138 152.456
-31.9144 115.86
-31.9146 115.941
-31.9150965 115.8962016
-31.9162 115.865
-31.917 115.886
-31.9183 115.836
-31.9192 115.851
-31.9197 115.835
-31.9198 115.914
-31.9214227 115.8704853
-31.9214475 116.0781338
-31.9216 115.842
-31.92286 151.23353
-31.9234 115.822
-31.9241 116.048
-31.9241 116.048
-31.9246911 115.9601728
-31.9247183 115.9635188
-31.9249007 115.8888422
-31.9252678 115.958129
-31.925681 115.7627557
-31.9257 115.864
-31.9272 115.793
-31.9273 115.842
-31.9286821 116.9389918
-31.9300907 115.8562812
-31.93186 115.891151
-31.932642 152.414473
-31.9332085 115.9606822
-31.9332111 115.9606793
-31.9333 115.905
-31.9337 115.842
-31.9338266 115.9555277
-31.9347 115.81
-31.9348 115.88
-31.93494 115.96021
-31.9350939 115.945338
-31.9353 115.815
-31.9355 115.765
-31.9369 115.792
-31.9391 115.833
-31.9392 115.802
-31.9397 115.876
-31.9403 115.852
-31.9403 115.852
-31.9406 115.8667027
-31.941 152.469
-31.94107 116.002133
-31.94138 115.97417
-31.9415 115.975
-31.9425 141.46
-31.9443 115.923
-31.9448 115.839
-31.946218 115.9703184
-31.9463 141.471
-31.94656 116.004775
-31.9466724 115.8218399
-31.94688 115.82141
-31.947 141.455
-31.9482 115.861
-31.9487 115.946
-31.9488 115.809
-31.9489008 116.026916
-31.9504 115.844
-31.95043 115.822892
-31.9504507 115.824754
-31.9507 115.825
-31.951 148.621
-31.9526 152.296
-31.953473 115.79105
-31.9535634 115.8532948
-31.9535634 115.8532948
-31.9535634 115.8532948
-31.9535634 115.8532948
-31.9535634 115.8532948
-31.9535634 115.8532948
-31.9535634 115.8532948
-31.9535634 115.8532948
-31.9535634 115.8532948
-31.9535634 115.8532948
-31.9544714 115.8558955
-31.9544714 115.8558955
-31.9544714 115.8558955
-31.9544714 115.8558955
-31.9544714 115.8558955
-31.9544714 115.8558955
-31.9544714 115.8558955
-31.9544714 115.8558955
-31.9544714 115.8558955
-31.9544714 115.8558955
-31.9544714 115.8558955
-31.9544714 115.8558955
-31.9544714 115.8558955
-31.9544714 115.8558955
-31.9544714 115.8558955
-31.9547 115.866
-31.956469 116.05602
-31.9566339 115.8049468
-31.9583 115.819
-31.958373 141.468434
-31.9584 115.934
-31.958706 115.87471
-31.9588 115.92
-31.9595 115.906
-31.9596817 141.4621341
-31.960494 115.81085
-31.9605684 141.4400997
-31.9678233 115.816259
-31.9686 115.782
-31.9693109 141.446713
-31.9696 115.909
-31.97 115.808
-31.9707 115.945
-31.9713 116.051
-31.9714 151.911
-31.9721338 115.8936357
-31.9722 152.588
-31.9728 115.922
-31.9757 115.944
-31.9761917 116.0094099
-31.9771 115.812
-31.977879 116.056178
-31.9786256 115.999205
-31.9791318 115.859835
-31.9792 115.908
-31.9805 115.794
-31.9809 115.883
-31.9812 115.809
-31.9812322 115.9122758
-31.9813194 115.8597381
-31.9815849 115.8676512
-31.98196 141.46428
-31.9837 115.77
-31.9838451 115.8988476
-31.9844 115.813
-31.9856 115.782
-31.9863096 115.867435
-31.9896 115.765
-31.9915 116.009
-31.992162 116.047019
-31.9933 115.756
-31.9965 115.797
-31.9966296 115.8618605
-31.9969253 115.5400441
-31.9969253 115.5400441
-31.9969253 115.5400441
-31.9969253 115.5400441
-31.9969253 115.5400441
-31.9969253 115.5400441
-31.9969253 115.5400441
-31.9969253 115.5400441
-31.9969253 115.5400441
-31.9969253 115.5400441
-31.9969253 115.5400441
-31.9969253 115.5400441
-31.9969253 115.5400441
-31.9969253 115.5400441
-31.9969253 115.5400441
-31.9977145 115.9022843
-31.9986 116.069
-31.9986 116.069
-32.0004 115.871
-32.0019 115.761
-32.0033 115.902
-32.0034 115.897
-32.004057 116.0457773
-32.0042896 115.938971
-32.0053 149.978
-32.0069 115.874
-32.0075292 115.9919063
-32.008019 115.916031
-32.0084 115.954
-32.00918 151.95872
-32.0094 115.763
-32.0097 115.902
-32.0101634 115.9096455
-32.0114 115.84
-32.0121767 117.399331
-32.0134 115.943
-32.0140378 151.000014
-32.0153185 115.9137939
-32.0156 115.863
-32.0160764 115.8740025
-32.0163 149.545
-32.0173 151.96
-32.0174124 115.9353691
-32.0174124 115.9353691
-32.0174124 115.9353691
-32.0181 149.392
-32.0185 116.088
-32.0187 115.839
-32.0206 115.774
-32.0263 115.962
-32.0263 115.803
-32.028274 115.768767
-32.0289593 115.8333573
-32.0290829 115.9300292
-32.0296 115.845
-32.0316 115.886
-32.031703 115.979548
-32.0326 147.979
-32.0329 115.78605
-32.0342 115.9
-32.0346 115.794
-32.0346 115.826
-32.0346 115.794
-32.03467 115.7573
-32.0350572 115.8337198
-32.0351 116.131
-32.03653 115.92035
-32.0374 115.939
-32.039 115.928
-32.0391 115.889
-32.0395 115.777
-32.0397101 115.8060344
-32.0401 115.866
-32.0421 115.848
-32.0425879 115.9133849
-32.0425879 115.9133849
-32.0448 115.785
-32.0465 115.806
-32.046728 115.9959271
-32.0484 115.76
-32.0485 115.882
-32.0492 116.009
-32.0495 152.266
-32.0497 115.846
-32.0498453 115.8584882
-32.05 150.863
-32.0501 150.874
-32.0502 115.952
-32.0511 115.899
-32.05166 115.80527
-32.05218 115.74979
-32.052377 115.74661
-32.0536 115.81498
-32.0536384 115.9649564
-32.0541 115.833
-32.055 116.004
-32.0561859 150.8712771
-32.0583357 115.753452
-32.05845 115.75351
-32.05859 115.76528
-32.0592 115.869
-32.0593 115.861
-32.0618 115.824
-32.0618 115.824
-32.0623 115.88
-32.0636 118.391
-32.0647 115.96
-32.0649 152.527
-32.0654 146.314
-32.06727 115.78238
-32.06905 115.75975
-32.0705 115.854
-32.0708 115.876
-32.0714 152.543
-32.0718408 116.0043311
-32.07207 115.77388
-32.0725 115.802
-32.07432 115.81448
-32.0747 115.98
-32.0751 115.863
-32.0754 115.95
-32.07574 115.93353
-32.0759 115.912
-32.0766 115.973
-32.0768 115.789
-32.0771 116.004
-32.081 115.808
-32.08313 115.921684
-32.0851274 116.1170622
-32.0858 115.984
-32.0881 115.931
-32.08993 115.78415
-32.0928 115.779
-32.0939 152.301
-32.094 115.911
-32.0947859 115.9607077
-32.0952 115.839
-32.0996 152.381
-32.10116 115.78776
-32.1018303 115.9472331
-32.1023 116.938
-32.10559 115.83465
-32.10788 115.84585
-32.1099 116.022
-32.1103 116.006
-32.1110272 115.9341599
-32.1114 115.788
-32.1124819 116.0692865
-32.1174 151.939
-32.1195 116.021
-32.1197 115.999
-32.11985 115.81941
-32.1206 116.011
-32.1253 115.826
-32.1255 133.673
-32.1262 115.772
-32.1283853 115.8561033
-32.1283853 115.8561033
-32.1283853 115.8561033
-32.1283853 115.8561033
-32.12946 115.79791
-32.130186 115.853445
-32.13325 115.8213
-32.1339824 116.0162371
-32.13607 115.86845
-32.139 115.84719
-32.1392 116.001
-32.1415 150.353
-32.1418 115.994
-32.1488 116.026
-32.15063 115.86472
-32.151764 116.0005977
-32.1529129 116.0139561
-32.1533 115.84982
-32.1542 115.949
-32.155479 116.014893
-32.1583134 116.0136545
-32.1598 152.487
-32.1604375 152.494091
-32.1662 150.888
-32.1682 115.998
-32.1792 116.05
-32.1794 152.51
-32.1802102 152.5103918
-32.1827139 152.5172988
-32.1896095 115.9230259
-32.1928345 115.8899488
-32.1937 148.899
-32.197 121.779
-32.2015435 152.5195431
-32.2137 152.538
-32.2147 152.321
-32.2252326 116.0035557
-32.2299 148.242
-32.2356 115.803
-32.2359 115.835
-32.2388 148.627
-32.2405 152.464
-32.2408 148.616
-32.2423 115.875
-32.2426 148.624
-32.2452 115.811
-32.2466 148.587
-32.2471 148.605
-32.2471 115.844
-32.2491102 148.6010367
-32.2504956 148.6120634
-32.2504956 148.6120634
-32.2509 148.583
-32.2511 152.52
-32.2533 148.628
-32.2559 115.873
-32.2581 147.351
-32.2586 150.895
-32.26 148.611
-32.26 115.805
-32.2620003 150.8892242
-32.2667 150.8926
-32.2685798 148.6116393
-32.2729 150.886
-32.2772 148.591
-32.2818 150.896
-32.2822 149.743
-32.283 115.722
-32.2837 115.762
-32.285 115.736
-32.287144 115.742282
-32.2872177 115.7422887
-32.2901323 115.9842571
-32.2911 115.738
-32.2972 152.3
-32.2984 115.755
-32.299 115.715
-32.3043 115.741
-32.3078662 115.8177282
-32.3144 115.757
-32.3171 115.751
-32.3259202 117.8762078
-32.3338 148.759
-32.3339 150.566
-32.3362 116.616
-32.3388 116.062
-32.34008 115.80123
-32.3402 152.521
-32.3418 115.766
-32.345111 115.8174955
-32.3455 115.759
-32.3459 138.042
-32.3464 151.931
-32.3563 147.505
-32.357 149.95
-32.3574 115.768
-32.3584 115.755
-32.3616 149.534
-32.3661 115.98
-32.3724 117.007
-32.3741 133.936
-32.3745 149.289
-32.3895 152.448
-32.39193 150.687912
-32.3923 142.417
-32.3961 148.829
-32.4037 151.965
-32.40522 115.75835
-32.4055 151.758
-32.4056 134.534
-32.408695 151.1877507
-32.4127 152.212
-32.4226 116.046
-32.424 115.757
-32.4310261 151.5531073
-32.44032 115.75738
-32.4481 118.861
-32.46209 150.66647
-32.4663 151.961
-32.4727 137.753
-32.47297 115.75211
-32.4772301 115.7605434
-32.4902756 137.7632451
-32.4924399 137.7628176
-32.494 118.264
-32.4944 137.764
-32.49441 137.7722
-32.494535 137.763715
-32.4967 150.906
-32.5033 115.754
-32.5045 151.713
-32.50803 137.77895
-32.508682 115.75306
-32.5131833 137.839248
-32.51521 115.7388
-32.5183 115.972
-32.524 151.335
-32.5284 115.725
-32.530874 115.761678
-32.5309974 115.7619176
-32.5309974 115.7619176
-32.5309974 115.7619176
-32.532 115.768
-32.5323236 115.7401502
-32.5346 117.084
-32.539 148.93
-32.5397 115.694
-32.5412 115.735
-32.5421112 151.5771074
-32.5428 115.703
-32.5472395 115.7499227
-32.5489 151.162
-32.5505 115.695
-32.5551 148.952
-32.5576237 148.9420174
-32.5584824 115.786899
-32.5596978 151.178851
-32.5633 151.174
-32.563337 151.177206
-32.566 151.624
-32.5678 148.222
-32.5684 151.177
-32.5796 115.66
-32.5799 115.788
-32.5836 115.79
-32.5896 151.288
-32.58969 151.77679
-32.5901 151.332
-32.5914 149.592
-32.5984 149.583
-32.6022 149.587
-32.6054 115.893
-32.6062 151.6
-32.6066 149.584
-32.6097 151.302
-32.6097638 115.6426866
-32.6334 115.873
-32.6356 147.565
-32.6508 138.099
-32.652206 117.598509
-32.6542 151.966
-32.6566633 149.8455213
-32.6594 151.349
-32.6606 117.123
-32.6627 151.729
-32.6651 152.041
-32.6652 151.604
-32.6678 152.158
-32.6711 118.154
-32.673 152.179
-32.677 151.39
-32.6794 116.677
-32.6797 151.349
-32.695 151.01
-32.7002 151.606
-32.7011 151.462
-32.7065212 152.0645852
-32.7074 151.573
-32.7121 151.532
-32.7152 116.063
-32.7158 152.158
-32.7166 151.651
-32.7177 152.112
-32.7199 151.515
-32.7207 151.53
-32.7213 134.84
-32.7216 152.135
-32.7218 152.154
-32.7219 149.051
-32.7223 152.139
-32.724 151.699
-32.7255 151.532
-32.7262 151.627
-32.7271 152.087
-32.7273 151.56
-32.7281 152.174
-32.7292 152.002
-32.7311849 148.193582
-32.7318 137.15
-32.7322639 152.0118252
-32.7336 138.613
-32.7337223 152.1094532
-32.734 152.034
-32.734679 151.552249
-32.7368211 151.5603957
-32.739 152.105
-32.7392331 151.8543005
-32.7398296 115.8747545
-32.7422 151.6055
-32.7439223 151.8769867
-32.744 151.591
-32.7449996 152.167521
-32.7451 151.104
-32.7474 151.597
-32.749 151.585
-32.749 151.585
-32.7497 151.704
-32.7523198 151.5339626
-32.752794 151.586456
-32.752794 151.586456
-32.7549609 148.6500868
-32.757 151.597
-32.7577648 118.7686727
-32.7582 151.758
-32.7593 151.775
-32.76 151.592
-32.7606044 151.591829
-32.7606044 151.591829
-32.7606044 151.591829
-32.760872 151.590652
-32.7608795 151.5906782
-32.7622276 151.5888004
-32.7622276 151.5888004
-32.7627 151.767
-32.7628113 151.7480457
-32.7629 151.744
-32.7653556 151.6134399
-32.76657 152.01203
-32.7668 151.74
-32.7687 151.597
-32.7769 152.09
-32.7793 149.546
-32.7796495 151.6533607
-32.7797 151.641
-32.7854 149.462
-32.7865 117.498
-32.7878 151.904
-32.7917 151.672
-32.7944 151.284
-32.7984 149.971
-32.7993 134.211
-32.8003 115.691
-32.8008 116.467
-32.8023 149.069
-32.8038 151.654
-32.805923 151.864825
-32.8073 147.459
-32.81 151.428
-32.8106 151.348
-32.811 151.663
-32.8131141 151.4808307
-32.8133 151.459
-32.8168633 151.4847433
-32.8187912 151.4806116
-32.8209 117.173
-32.8234 151.353
-32.8237235 151.4957769
-32.824 138.188
-32.8276 151.407
-32.8282 151.37
-32.8293 151.361
-32.8295839 151.3554963
-32.83054 151.33847
-32.8319 151.485
-32.8387 151.345
-32.8393 151.617
-32.8406 151.363
-32.8421 151.369
-32.8449 115.923
-32.8542 135.155
-32.856 149.975
-32.8569 151.396
-32.8598 151.316
-32.8718 151.795
-32.8737 151.651
-32.8769 151.369
-32.8804275 115.6571185
-32.8818 138.351
-32.882 151.659
-32.8827 151.696
-32.8838 151.614
-32.8867 151.718
-32.8876 151.695
-32.8894 151.248
-32.8894 151.731
-32.8921027 151.6680192
-32.8954 151.693
-32.8959 151.748
-32.8980225 151.7414935
-32.8989 144.301
-32.8993 151.716
-32.8997 151.678
-32.9 151.734
-32.9000437 151.6642575
-32.9013657 151.6960568
-32.9015 151.287
-32.9023 151.484
-32.9024 151.683
-32.9037676 151.6952338
-32.9039 151.729
-32.9047523 151.6699732
-32.9058 151.722
-32.9067 151.683
-32.9082 151.752
-32.9083 151.672
-32.9096 151.72
-32.909808 151.61079
-32.9112051 151.5822231
-32.9115 151.744
-32.9120555 151.783126
-32.9122 151.765
-32.9144 151.31
-32.9147 151.709
-32.9147 151.709
-32.9147 151.785
-32.9149 151.666
-32.916 151.752
-32.917469 151.734085
-32.9175 151.722
-32.9206289 151.6753603
-32.9227 151.713
-32.923776 151.622072
-32.9238 151.748
-32.924 151.744
-32.924199 151.748403
-32.9255 147.71
-32.9260171 151.6057703
-32.9266 151.714
-32.926605 151.642866
-32.9272507 151.6539173
-32.92905 148.748647
-32.929263 151.768023
-32.9304 151.777
-32.931127 151.728308
-32.9314303 151.7175065
-32.9324 151.594
-32.9328 148.24
-32.9338 151.768
-32.9339409 151.7257479
-32.9341 151.754
-32.9347209 151.6889388
-32.9348691 151.725834
-32.9348691 151.7258394
-32.9348691 151.7258448
-32.9353 151.739
-32.93571 151.63139
-32.93576 117.17542
-32.9359 117.168
-32.93612 117.86163
-32.9372 151.665
-32.9373 151.759
-32.937316 151.726387
-32.9377 149.091
-32.9377159 151.6830912
-32.9378 151.752
-32.9381 151.705
-32.9386 151.146
-32.9431952 151.6626115
-32.9440547 151.6782166
-32.945909 151.694912
-32.945909 151.694912
-32.9464 151.707
-32.9464 151.707
-32.9465 151.658
-32.9469 151.739
-32.9484767 151.7541281
-32.9526 151.666
-32.956 115.899
-32.9595234 151.6805364
-32.9595234 151.6805364
-32.960172 151.623426
-32.9627 151.606
-32.9635037 151.6958026
-32.9635037 151.6958026
-32.9635037 151.6958026
-32.9635037 151.6958026
-32.96411 151.6951063
-32.9641235 151.6950956
-32.964155 151.6951251
-32.964543 151.7121739
-32.9652039 151.6970675
-32.9656758 151.6487577
-32.9668 149.856
-32.9679 151.689
-32.96822 151.6523955
-32.96822 151.6523955
-32.9707 151.705
-32.972253 151.7129956
-32.9735 138.838
-32.9736935 151.6110609
-32.9756105 151.6823938
-32.9766 151.669
-32.9798 151.648
-32.9815 121.642
-32.981997 151.606809
-32.9832256 151.5832629
-32.9855 151.691
-32.9895 151.719
-32.9902 151.643
-32.9923 151.602
-32.9933 151.682
-32.9983 151.577
-33.0015119 151.6075882
-33.0063 151.641
-33.0081 151.575
-33.0083851 151.6425349
-33.0085866 151.5950805
-33.0111 151.538
-33.0114 151.712
-33.0115 151.592
-33.01442 151.59643
-33.0144964 151.5964426
-33.0149 151.664
-33.0153 137.517
-33.0154 151.687
-33.0165 137.534
-33.018 137.999
-33.0195 151.669
-33.0197 137.546
-33.02354 151.60382
-33.0256148 151.5939034
-33.0258 116.881
-33.0263047 151.660156
-33.0284 137.5408
-33.0286 137.55
-33.0306 151.663
-33.034 137.568
-33.0349 149.416
-33.0357 138.27
-33.0361 137.585
-33.036751 151.662582
-33.0391 137.532
-33.0416 151.61
-33.0426996 150.2143916
-33.04295 151.58944
-33.0483 135.467
-33.0553 146.397
-33.0571843 151.6471261
-33.0579 117.237
-33.0608 151.58
-33.0724 151.583
-33.074338 151.648235
-33.0743974 151.4575124
-33.0789224 151.4411654
-33.0804 151.657
-33.0805 149.691
-33.0824 115.892
-33.0835855 151.6359335
-33.0845 147.151
-33.0845438 151.5020451
-33.0881 119.687
-33.092 151.637
-33.0934 119.022
-33.0948742 148.865605
-33.1029 151.489
-33.1035 118.464
-33.1036 151.639
-33.1054887 147.7979378
-33.1116124 151.5644421
-33.1136 151.516
-33.1274566 148.1688176
-33.1303 148.18
-33.1336143 151.6045708
-33.1351 148.17
-33.1354 148.19
-33.1357 148.173
-33.1379099 151.5655096
-33.1383 151.587
-33.1386 148.173
-33.13884 136.41878
-33.1391 149.121
-33.1422 149.692
-33.1465683 149.9867103
-33.1478 148.173
-33.1479 138.921
-33.1508 115.694
-33.1510018 151.523603
-33.1525 151.539
-33.15288 138.11361
-33.1673 134.684
-33.1758744 138.0066017
-33.1763429 151.4813612
-33.17948 151.56313
-33.1837915 148.691797
-33.1838 138.006
-33.1857 138.301
-33.187556 118.084068
-33.1896 138.02
-33.1899 151.576
-33.198 138.004
-33.2044 138.004
-33.2052414 138.6017993
-33.20943 137.989674
-33.2123 151.504
-33.214524 146.371282
-33.2153238 151.515207
-33.223272 151.277577
-33.2261 151.224
-33.2263 151.549
-33.228 151.504
-33.2283 121.715
-33.2302 151.537
-33.23133 115.72419
-33.2331493 151.5537479
-33.2399 151.38
-33.2408 151.484
-33.2413 135.597
-33.2426 151.509
-33.25055 151.46752
-33.251 148.984
-33.2518 151.51
-33.2518 151.51
-33.2527 115.834
-33.2543673 151.4951197
-33.2583532 149.0726671
-33.2626 151.484
-33.2634239 151.5350809
-33.2634439 151.5350175
-33.2657 151.54
-33.2658 115.727
-33.2658799 151.4674752
-33.2675 151.55
-33.2676 151.348
-33.2690827 138.3516596
-33.2693 149.103
-33.2712 151.426
-33.2731 115.735
-33.27906 115.7165
-33.27947 151.4863
-33.2796 151.566
-33.2798185 149.0946465
-33.2801754 151.425751
-33.2802 149.118
-33.2809 149.086
-33.2838 151.458
-33.2848161 149.1078578
-33.2854901 149.0968798
-33.2861219 149.1010431
-33.2861219 149.1010431
-33.2865041 151.4242053
-33.2865041 151.4242053
-33.2865141 151.4243638
-33.2872 149.08
-33.2873619 148.7403241
-33.287916 149.10187
-33.288 151.427
-33.293091 149.0970536
-33.2940709 149.0123866
-33.2942 146.374
-33.2946 150.971
-33.2972043 149.1117993
-33.2995 150.033
-33.3006 151.192
-33.3062 149.047
-33.3068 151.418
-33.3083 115.712
-33.3093 115.815
-33.3094 149.635
-33.3104 117.342
-33.3127 117.739
-33.313 115.701
-33.3133 151.415
-33.3169716 149.0936057
-33.3195 115.722
-33.3208518 115.6379529
-33.3227 115.637
-33.3229068 115.6369501
-33.3229068 115.6369501
-33.3237 151.441
-33.3255 151.432
-33.3257 151.232
-33.3335 115.638
-33.3349 115.652
-33.3351 116.098
-33.3353 151.505
-33.3366 116.739
-33.34 151.434
-33.3402306 115.6882727
-33.3404 115.642
-33.3410114 151.4975638
-33.34295 116.16113
-33.3433 115.663
-33.3445 149.161
-33.3463 151.493
-33.3481 117.038
-33.34867 116.16793
-33.3487 115.651
-33.3502 151.436
-33.35163 138.20723
-33.3551735 149.9792727
-33.3558 151.368
-33.356 151.494
-33.3571 151.485
-33.35755 115.63392
-33.3584 151.291
-33.3586 116.152
-33.3591 115.657
-33.3599 138.393
-33.3616721 116.1542253
-33.3623 147.678
-33.3629226 148.0115409
-33.3636 116.157
-33.3651 151.456
-33.3655 151.452
-33.3655 115.647
-33.3664934 116.1386756
-33.3693 115.628
-33.3716 151.476
-33.3728 150.739
-33.3763 151.465
-33.3778328 149.5401417
-33.3811 151.478
-33.3814544 151.3761694
-33.3825 151.353
-33.3825 151.353
-33.3828 151.459
-33.3846458 142.5694166
-33.3857061 148.0080762
-33.3857356 148.007941
-33.3862 151.462
-33.3913 151.475
-33.3916521 148.0122682
-33.3940137 149.0967575
-33.3954535 150.9849427
-33.3956 151.453
-33.3961181 148.0140322
-33.397 151.346
-33.39859 115.75687
-33.39913 115.62466
-33.3997 149.151
-33.4002 151.362
-33.4008 151.356
-33.4051161 151.408237
-33.406 149.571
-33.4073 151.336
-33.409 151.356
-33.409 151.356
-33.4099167 151.3661851
-33.4101 115.64197
-33.4118 149.559
-33.4118 151.449
-33.4126 138.892
-33.4129 149.569
-33.4163 149.58
-33.4176 149.604
-33.4196 150.071
-33.42 149.577
-33.4214677 149.5801194
-33.4215 151.334
-33.4217 149.571
-33.4224611 146.7242264
-33.4235 151.441
-33.4237 148.369
-33.4242712 151.3425127
-33.4274383 151.3416449
-33.4274383 151.3416449
-33.4277553 148.8078627
-33.4281 151.414
-33.4281 151.414
-33.4283 149.648
-33.4294 151.369
-33.4302 151.34
-33.4319 115.839
-33.4320208 149.559717
-33.4337 149.569
-33.4344484 149.9201679
-33.4359015 151.3225231
-33.4369 151.349
-33.4376597 136.1986891
-33.4379 151.439
-33.4403 151.423
-33.4406 151.381
-33.4412 151.29
-33.4415 151.438
-33.4415 151.438
-33.4439 151.328
-33.4454758 149.1857157
-33.4478 149.817
-33.45019 151.44419
-33.4508 151.377
-33.4558 151.198
-33.4593 151.147
-33.45935 150.99446
-33.4653 151.383
-33.466 150.183
-33.469 151.394
-33.470255 151.406608
-33.471 151.431
-33.4749 151.35
-33.4798 145.54
-33.4799 150.149
-33.4810092 150.1565069
-33.4818 150.16
-33.4821 150.175
-33.4839494 150.141751
-33.4842 151.437
-33.4843 151.314
-33.4848816 150.1348122
-33.4858 115.73
-33.4862 151.361
-33.4870763 151.3252122
-33.4912774 149.5491994
-33.4925 151.325
-33.4955 150.133
-33.4958 151.309
-33.4963 151.424
-33.4979864 150.5122648
-33.4981 138.608
-33.499053 150.127397
-33.503 151.321
-33.5041 151.363
-33.5056 151.308
-33.5057118 150.3677381
-33.50676 150.69826
-33.511 150.778
-33.5131 115.632
-33.5137 151.332
-33.5145 151.318
-33.5152 150.120477
-33.5155 151.347
-33.5161 116.803
-33.52144 151.364
-33.52179 151.31615
-33.5234 150.944
-33.5235 151.204
-33.5245 149.72
-33.5245 151.315
-33.52541 151.3562975
-33.529 149.252
-33.5307 150.877
-33.5318 150.631
-33.53421 150.7663138
-33.5344 118.504
-33.5350331 150.7373648
-33.537 116.007
-33.5371646 151.2411149
-33.5393 138.223
-33.541 118.153
-33.5451 151.306
-33.54813 151.21538
-33.5499 150.693
-33.551 150.188
-33.5515 151.27
-33.5536 115.563
-33.5555 150.662
-33.5577156 148.6706656
-33.55852 150.83947
-33.5588 150.907
-33.5594 150.797
-33.56 138.76
-33.5634 117.441
-33.5664 135.757
-33.5713 138.446
-33.5759 115.823
-33.580928 150.717126
-33.5824 120.053
-33.584 150.861
-33.5885 151.169
-33.5916 150.254
-33.5931 150.916
-33.5948055 150.7504223
-33.5957 150.666
-33.596604 150.750464
-33.597303 150.7497707
-33.5987 151.008
-33.5993 150.757
-33.5995109 151.1204538
-33.5998 137.931
-33.6025577 151.3189969
-33.6033 150.742
-33.6054902 150.9788283
-33.6091899 150.8171314
-33.6094008 151.1427318
-33.6123 149.142
-33.6134 148.433
-33.6156 150.835
-33.6181 151.147
-33.6185 150.804
-33.6207 150.872
-33.6213 115.105
-33.6231223 151.0520461
-33.6303 151.334
-33.6359 150.66
-33.6359511 151.3293514
-33.6367 146.977
-33.6376 151.292
-33.6392 150.286
-33.6393 150.794
-33.63931 115.37652
-33.6413 150.814
-33.6444 151.023
-33.6448 151.314
-33.6464839 149.2717135
-33.6467 115.034
-33.6472 150.736
-33.648 151.045
-33.6481 150.858
-33.6481 150.858
-33.64811 134.89018
-33.6487525 150.0490689
-33.6488 121.806
-33.649841 115.343468
-33.6518 149.07
-33.653509 151.322793
-33.6535808 115.3439505
-33.6549 115.315
-33.6565 115.325
-33.6575 151.136
-33.6575 151.295
-33.6605851 151.3133272
-33.6654 151.004
-33.6675182 150.6770237
-33.6681375 147.8084084
-33.6687322 150.9522275
-33.6687322 150.9522275
-33.6693768 151.3028793
-33.670187 151.0966482
-33.6726 151.117
-33.6738179 149.0445601
-33.6742 150.282
-33.6751 150.615
-33.6759 150.863
-33.6765 151.304
-33.6769 150.781
-33.6771476 151.3022498
-33.677928 151.30152
-33.6781476 151.3014398
-33.6782 151.315
-33.6787 115.249
-33.67905 150.92002
-33.6792 150.875
-33.6809 148.616
-33.681271 138.937607
-33.6833 151.098
-33.683894 117.566257
-33.684 136.9264
-33.6853625 151.223182
-33.6855 151.112
-33.6855 151.112
-33.6857 151.026
-33.6857 151.307
-33.6858 150.549
-33.68757 150.93382
-33.689775 117.544053
-33.6902 150.586
-33.6916382 151.151591
-33.69226 149.56285
-33.6923163 150.8749195
-33.6923163 150.8749195
-33.6949 138.403
-33.696 150.834
-33.6969 151.299
-33.698 150.947
-33.6984 115.189
-33.6991 150.566
-33.6992 150.316
-33.69961 150.56845
-33.7 151.097
-33.7 151.097
-33.7005 121.565
-33.7007979 151.2975472
-33.701 151.004
-33.7021 149.859
-33.702481 150.5675
-33.702635 136.494448
-33.7027 151.284
-33.7031 151.10312
-33.7033 120.861
-33.7038712 150.5806866
-33.7041743 151.1111134
-33.7043094 151.0974229
-33.70446 151.097122
-33.7049 150.924
-33.7055 150.573
-33.7058 115.893
-33.70624 150.91331
-33.7064 151.102
-33.7064 151.102
-33.7071 150.752
-33.7072 150.976
-33.7081 151.111
-33.7084749 151.1632003
-33.709 149.217
-33.70909 150.96702
-33.71131 150.33586
-33.7119846 150.9579173
-33.7127637 151.0955118
-33.7128 150.708
-33.7128 151.299
-33.7133693 151.1034831
-33.7139 150.344
-33.7142 150.993
-33.7142 150.993
-33.71436 150.37255
-33.714679 150.971626
-33.7147 151.147
-33.7155 151.128
-33.71576 150.31166
-33.716189 151.1182789
-33.7169 150.887
-33.717294 150.310921
-33.71824 150.92127
-33.7187 151.164
-33.7190356 151.0376017
-33.7195074 150.3139445
-33.71953 115.43405
-33.7203 151.298
-33.7205638 151.0459716
-33.720967 150.597835
-33.721 150.709
-33.7214 151.103
-33.721514 151.0232634
-33.721514 151.0232634
-33.7216261 150.4284891
-33.72177 151.08808
-33.7227 151.286
-33.7237 151.098
-33.7237 151.098
-33.7242 151.072
-33.72443 151.17794
-33.7256 150.794
-33.7262 150.935
-33.7262 150.892
-33.7269 150.459
-33.7271 151.024
-33.7272 150.999
-33.7277 151.216
-33.7277 150.314
-33.7278 150.807
-33.7279291 150.9806724
-33.7280915 151.2861959
-33.7281 151.299
-33.7282 151.085
-33.7282 151.085
-33.7282 151.005
-33.7285 151.025
-33.7291 151.1604
-33.7292 151.128
-33.7292 150.896
-33.7292 150.896
-33.7298 150.633
-33.73 151.123
-33.730845 151.007737
-33.7309994 151.0079324
-33.731025 151.008018
-33.7314 151.042
-33.731839 151.1411654
-33.7321594 151.1305515
-33.7325 150.914
-33.7328992 151.0614421
-33.7329483 151.293289
-33.733 150.937
-33.733381 150.983194
-33.7339 150.826
-33.7339 150.858
-33.7341 150.47
-33.7361 150.84
-33.7361 150.65
-33.7362 150.927
-33.737332 150.7229665
-33.7377 150.885
-33.7378 151.274
-33.7380934 151.0509109
-33.7381 151.284
-33.7381603 150.8008757
-33.7384 151.003
-33.7389 151.218
-33.7395 151.137
-33.7395 150.816
-33.7398 151.195
-33.7403 151.167
-33.7408 150.991
-33.7411 150.901
-33.7413 150.711
-33.7425 150.852
-33.7429 150.896
-33.74293 150.95871
-33.7438 150.925
-33.7439 151.204
-33.7440822 150.9746808
-33.7446 151.113
-33.7447 151.03
-33.7447 151.03
-33.7452466 150.8058686
-33.7453707 150.7948779
-33.7454 150.747
-33.7456 150.924
-33.7459033 151.0501363
-33.7459209 151.1574345
-33.746 148.849
-33.7468 150.623
-33.7475 150.817
-33.7477 150.825
-33.7477183 151.0270559
-33.7477183 151.0270559
-33.7478 151.242
-33.748 150.726
-33.74809 150.97142
-33.7486 151.286
-33.7486716 150.6702912
-33.7491 150.838
-33.7493 150.889
-33.7493 151.273
-33.7496 150.882
-33.7499 151.231
-33.7519545 151.2242559
-33.7519545 151.2242559
-33.7519685 150.9899785
-33.752017 150.690599
-33.752017 150.690599
-33.752017 150.690599
-33.752017 150.690599
-33.752017 150.690599
-33.7520637 150.6902745
-33.7521 122.528
-33.7521785 150.6910467
-33.7523 150.734
-33.7523233 151.0651663
-33.7523967 150.9995923
-33.7526 150.81
-33.7531832 150.7023992
-33.7534 151.262
-33.7534 151.262
-33.7535 150.714
-33.7543 151.29
-33.7543 151.29
-33.7544 150.926
-33.7544758 150.746012
-33.7545812 151.2922257
-33.7545812 151.2922257
-33.7548 150.605
-33.754841 150.694366
-33.7549856 151.1523454
-33.7559934 150.6582736
-33.7560824 151.1740076
-33.7563 150.875
-33.7565 150.895
-33.7565262 151.1131977
-33.7566411 150.7831265
-33.75679 151.15251
-33.7575 151
-33.75752 150.9625
-33.7576 151.096
-33.7578 151.074
-33.7595 150.955
-33.7598 150.713
-33.7601 151.139
-33.7602 150.805
-33.7606 150.885
-33.7609 150.932
-33.7609002 151.2166974
-33.7611 150.982
-33.761129 150.9907762
-33.7614 151.271
-33.7615289 151.2115291
-33.7615289 151.2115291
-33.7619 150.911
-33.7626 150.945
-33.76284 151.07377
-33.7637561 150.6812575
-33.7639 150.812
-33.76394 151.12354
-33.7642 150.726
-33.7642 150.701
-33.7645384 151.2885494
-33.7647 150.651
-33.765 150.872
-33.7654 151.053
-33.7655696 150.9097993
-33.7655919 150.909794
-33.76575 151.02222
-33.7658 151.039
-33.7660503 150.8240319
-33.7660503 150.8240319
-33.7662135 151.1645279
-33.7663 150.922
-33.7663 150.617
-33.7665169 151.2490921
-33.7672611 150.825511
-33.7672745 150.8254788
-33.7675 115.381
-33.7681 151.184
-33.768408 151.0871472
-33.7684193 150.7705767
-33.7688 151.026
-33.7688 151.026
-33.769 150.841
-33.7697 150.712
-33.7703911 151.0996223
-33.7704 150.972
-33.7705 150.893
-33.7708 150.938
-33.7708 151.263
-33.7709329 150.7892231
-33.77108 150.90931
-33.7710889 151.080071
-33.7711626 150.9040383
-33.7711626 150.9040383
-33.7717 150.631
-33.77224 151.03701
-33.7724 150.683
-33.7727 151.286
-33.7728471 151.0684506
-33.7735 150.981
-33.7737517 150.746131
-33.7741802 151.0817992
-33.77448 151.17282
-33.7745 151.079
-33.77468 151.14553
-33.7746877 150.6985579
-33.7749 150.814
-33.7754 150.968
-33.7756842 151.2161341
-33.77585 150.84702
-33.7767 150.668
-33.7768 150.976
-33.7773 150.925
-33.7778274 151.2838176
-33.7795 151.195
-33.7795 150.776
-33.77955 151.00289
-33.7797606 151.1149218
-33.7800229 151.0553219
-33.7800229 151.0553219
-33.78035 150.9058
-33.78035 150.9058
-33.7806 151.29
-33.78106 151.16972
-33.7813 150.939
-33.7815 138.215
-33.7817 151.096
-33.782 151.188
-33.7820076 151.2675172
-33.782165 151.2016115
-33.7826146 151.2465749
-33.782625 151.103196
-33.7836 150.72
-33.7836 150.977
-33.7838 150.791
-33.7847 150.681
-33.7853 150.915
-33.7853513 151.1793831
-33.78554 151.03774
-33.786 150.934
-33.7862122 151.2810522
-33.7864 151.109
-33.78647 115.98212
-33.786608 151.1895499
-33.786608 151.1895499
-33.7867 150.853
-33.7867 150.991
-33.7867 150.991
-33.787 150.966
-33.787 150.966
-33.78707 150.89061
-33.7875 150.831
-33.7885 151
-33.7885 151
-33.79014 150.90159
-33.7906 151.067
-33.7909 151.051
-33.7919868 150.6721976
-33.792 151.269
-33.79244 151.08353
-33.7925 150.957
-33.7928 151.078
-33.7935 151.097
-33.7937 151.251
-33.7937771 150.7732597
-33.7939 151.12
-33.7941 150.934
-33.7943477 151.109308
-33.7944 150.912
-33.79447 151.17519
-33.7947 151.13
-33.7950236 151.2670724
-33.7951579 151.2860912
-33.7953226 151.2763755
-33.7958337 151.2056701
-33.7959 151.255
-33.7960028 151.0909419
-33.79613 151.00446
-33.7962789 150.7997394
-33.7963 151.058
-33.7965 150.786
-33.7966 150.919
-33.7966 151.043
-33.79717 150.96296
-33.79717 150.96296
-33.7975 150.979
-33.7981824 151.1818539
-33.7981824 151.1818539
-33.7981824 151.1818539
-33.7981824 151.1818539
-33.7981824 151.1818539
-33.7981824 151.1818539
-33.7981824 151.1818539
-33.7981824 151.1818539
-33.7982897 151.1819191
-33.7982897 151.1819191
-33.7982897 151.1819191
-33.7982897 151.1819191
-33.7982897 151.1819191
-33.7983058 151.1781717
-33.7983058 151.1781717
-33.7984533 151.182266
-33.7985209 151.2861201
-33.7991 150.951
-33.7994 151.18719
-33.7997334 151.2868711
-33.7997649 151.2873777
-33.7997983 151.2870436
-33.7997983 151.2870436
-33.800179 117.149134
-33.8002 151.023
-33.803316 150.9732425
-33.803316 150.9732425
-33.8036 151.07
-33.8037358 151.2009268
-33.8038 151.037
-33.80395 151.21199
-33.8039765 151.1033893
-33.804 151.005
-33.8041 151.155
-33.8044 151.171
-33.8051163 151.1319848
-33.8053667 151.293929
-33.8054 150.988
-33.8055 151.258
-33.8057 150.803
-33.8057 151.179
-33.8059 150.783
-33.8059 151.018
-33.8060761 151.1117662
-33.8061 151.058
-33.8061 151.058
-33.8063669 151.1268905
-33.8064 150.973
-33.8066124 150.9881917
-33.8068 150.954
-33.8070067 151.1857375
-33.8085 151.1
-33.8087 151.085
-33.80955 150.98637
-33.8096 150.954
-33.8096 150.954
-33.8097225 151.1517103
-33.8109 151.21
-33.81142 151.18593
-33.8117986 151.2425735
-33.8118 151.108
-33.8123172 151.2188096
-33.8128 151.105
-33.8128 150.952
-33.8128 151.01329
-33.81292 151.17136
-33.8133913 151.1200494
-33.8135 151.159
-33.8142 151.045
-33.8142 150.969
-33.8143612 151.0006048
-33.8143612 151.0006048
-33.8147819 150.9418413
-33.8148423 151.0924377
-33.8149253 151.0062625
-33.8149253 151.0062625
-33.8149253 151.0062625
-33.8149253 151.0062625
-33.8149253 151.0062625
-33.8151 151.073
-33.81564 137.82189
-33.8159 151.17
-33.8159 151.004
-33.816 151.202
-33.8161262 151.0534399
-33.8165 145.625
-33.816527 151.0572843
-33.8175 151.011
-33.8178 151.098
-33.8187 150.967
-33.819043 150.991991
-33.819208 151.1701635
-33.819378 151.2004555
-33.8203 150.959
-33.8206739 151.105219
-33.8210755 151.2117081
-33.8212708 151.135236
-33.8212708 151.135236
-33.8222481 149.3288065
-33.8223 151.191
-33.8224262 151.2325467
-33.8226 151.004
-33.8228 151.128
-33.824 151.106
-33.8243 151.019
-33.8247838 151.1978636
-33.82479 138.79629
-33.82482 150.9916
-33.8249 151.111
-33.8257 151.234
-33.8257163 151.2022661
-33.826 150.973
-33.826 150.973
-33.8263431 151.2407403
-33.8266 151.183
-33.8269 151.089
-33.8277117 151.1201395
-33.8278 148.688
-33.8278312 151.1695145
-33.828 151.199
-33.8281535 150.9417595
-33.8283 150.964
-33.828459 151.2403994
-33.8285 151.225
-33.8289 151.255
-33.82899 151.2076696
-33.8291705 151.1883862
-33.8294 151.012
-33.8294 151.244
-33.8295217 151.2279379
-33.82994 151.12699
-33.8299529 151.2026352
-33.8308599 151.2255955
-33.8314 121.909
-33.831535 116.386376
-33.8316 151.143
-33.8319 151.074
-33.8323301 151.1259218
-33.8323301 151.1259218
-33.8324891 151.2199092
-33.8324891 151.2199092
-33.833338 151.2159249
-33.833338 151.2159249
-33.8334 151.24
-33.8337 150.94
-33.8341 150.951
-33.8344 148.692
-33.83446 151.00512
-33.8346 150.968
-33.8346 150.968
-33.8348 151.204
-33.8349224 151.155844
-33.8361 148.659
-33.836369 148.69371
-33.836665 150.653532
-33.83764 150.98918
-33.8377356 151.1964648
-33.83902 150.97157
-33.8394 151.167
-33.8397 151.086
-33.8399 116.98
-33.8408535 151.1359276
-33.8409 150.976
-33.8409 150.976
-33.8409 151.055
-33.8409 151.039
-33.841203 150.8525923
-33.8418 146.262
-33.8421 150.989
-33.8431 151.205
-33.8433 150.999
-33.8433 150.999
-33.8433 151.034
-33.8445487 117.6385753
-33.845 116.055
-33.8456 151.089
-33.8459 147.74
-33.8459 151.284
-33.8463 149.742
-33.8464379 151.2134797
-33.8468 138.489
-33.8471 150.967
-33.8481385 151.0106418
-33.8481385 151.0106418
-33.8485458 151.2140751
-33.8488183 150.9961068
-33.8488183 150.9961068
-33.8495 151.104
-33.8497514 138.6195088
-33.8499 151.154
-33.851238 151.15271
-33.8513554 115.1069539
-33.8523 121.861
-33.8528 151.13
-33.8533 151.177
-33.8538 151.032
-33.8541 151.139
-33.8542 150.934
-33.8545 150.906
-33.8545749 151.103993
-33.8546727 150.9884935
-33.8548 151.092
-33.8553985 150.9813992
-33.8558 151.193
-33.8561 151.153
-33.8564 150.939
-33.85672 151.0301
-33.8572671 150.9171256
-33.8577 151.171
-33.8577 151.279
-33.8579 151.007
-33.8579 151.007
-33.8589 151.208
-33.859 151.184
-33.8593 151.182
-33.8594 150.883
-33.8598 151.102
-33.8602 121.889
-33.860208 121.889291
-33.8603 151.02
-33.8603 151.02
-33.860768 151.0453138
-33.8608949 150.9962856
-33.861043 151.133484
-33.8612 151.271
-33.8613 151.142
-33.8622 151.085
-33.8624 150.642
-33.8632 151.17
-33.8634 151.107
-33.864 151.0945
-33.8652 151.025
-33.8652 151.025
-33.8652196 151.1785612
-33.8654 151.045
-33.865409 151.044503
-33.865409 151.044503
-33.8658 151.067
-33.8658 138.006
-33.8667 151.128
-33.867 150.971
-33.867 150.89
-33.867 150.948
-33.8671 150.957
-33.8673591 151.0851029
-33.86774 150.95541
-33.867898 150.955939
-33.867898 150.955939
-33.8679 151.192
-33.8681563 150.9560517
-33.8683 151.134
-33.8683473 150.9555234
-33.8683473 150.9555234
-33.86856 150.92455
-33.8686272 150.9563599
-33.8695695 150.9559644
-33.8698 151.165
-33.8699846 150.866
-33.8701973 151.206944
-33.8701973 151.206944
-33.8705 151.028
-33.8705 151.028
-33.8708 150.952
-33.8709 151.271
-33.871 150.874
-33.8719 151.227
-33.87198 151.10402
-33.8720248 151.2197478
-33.8723 151.159
-33.872798 151.094104
-33.8728 151.24977
-33.872818 151.204894
-33.872964 151.094207
-33.873 151.271
-33.873043 151.094037
-33.87309 151.20546
-33.8731632 151.205254
-33.8731632 151.205254
-33.8731632 151.205254
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 150.891
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8735 151.207
-33.8737 150.996
-33.8741 151.076
-33.8742 151.14
-33.8744 151.083
-33.8744 151.083
-33.8744644 150.9299808
-33.8745 150.879
-33.8747 151.236
-33.8748 151.241
-33.8751 150.961
-33.8751 150.961
-33.8753 151.226
-33.8754 151.188
-33.8754209 151.265623
-33.8755 151.219
-33.8757 151.113
-33.8757 151.113
-33.8759 151.181
-33.8761 151.213
-33.8766 150.972
-33.8767019 150.941291
-33.8770154 151.0704345
-33.8770154 151.0704345
-33.8773365 151.0996115
-33.8773365 151.0996115
-33.8774 151.221
-33.8779286 151.20633
-33.8779686 151.2063515
-33.8779909 151.206389
-33.878 151.172
-33.8781171 151.2064057
-33.8781171 151.2064057
-33.8781171 151.2064057
-33.8781171 151.2064057
-33.8781202 151.206574
-33.8781202 151.206574
-33.8783 151.029
-33.8787 151.223
-33.8788 151.277
-33.8789 151.129
-33.8791516 150.9116976
-33.8791668 151.2067135
-33.8791668 151.2067135
-33.8795 151.135
-33.8795 151.159
-33.8795903 151.0818069
-33.8795903 151.0818069
-33.8796 151.221
-33.8801 146.619
-33.8801008 151.1394421
-33.8805 151.104
-33.8807038 151.1873469
-33.8809 151.239
-33.8813 151.2
-33.8816 150.692
-33.8821 151.182
-33.8823 151.128
-33.8823 151.229
-33.882301 151.215195
-33.8824409 150.8757845
-33.8833 151.157
-33.8833 150.742
-33.8837 151.217
-33.8837 151.191
-33.8837 151.217
-33.8838 151.118
-33.8838 151.118
-33.8839497 150.7899021
-33.8839497 150.7899021
-33.884 150.923
-33.8844 151.276
-33.8846 151.161
-33.8846 151.112
-33.8847514 151.198426
-33.8847939 151.0008561
-33.8853 150.952
-33.8854807 150.9698132
-33.885711 151.023368
-33.8858 151.17
-33.8858 151.17
-33.8859 151.253
-33.886 151.234
-33.8861593 151.2082967
-33.8863 151.238
-33.8865 151.242
-33.8866 150.937
-33.8866 151.147
-33.8867 151.26
-33.887 151.114
-33.8871 151.216
-33.8872 151.009
-33.8873 151.001
-33.8874 150.898
-33.8874 151.175
-33.8875 151.23
-33.8884 150.888
-33.8884 151.194
-33.8885 151.278
-33.8886 151.181
-33.8888 151.126
-33.889 151.157
-33.8891 150.851
-33.8893 151.094
-33.8895 150.986
-33.8896 151.159
-33.8897 150.908
-33.8897 151.128
-33.8898 150.868
-33.8901 151.277
-33.8901139 151.2515941
-33.8901557 151.1277132
-33.8903 151.128
-33.8905 151.216
-33.89087 151.16252
-33.8909 150.605
-33.8915 150.953
-33.8916436 151.0844989
-33.8919 151.135
-33.8921185 150.9392877
-33.8923 151.204
-33.8926 151.246
-33.8928 151.19
-33.8928 151.086
-33.8931 151.265
-33.8937 151.267
-33.8938053 151.2515359
-33.8945 148.155
-33.8945397 151.1089173
-33.8946581 150.8918914
-33.8947 151.21
-33.894749 151.201324
-33.8947675 151.0556857
-33.89514 151.05995
-33.8954 150.942
-33.8956 151.178
-33.8957 150.851
-33.8957217 151.1579732
-33.8958 151.02
-33.8958534 151.1364872
-33.895855 150.929709
-33.8960907 151.1808713
-33.8960907 151.1808713
-33.8962 151.148
-33.8966 151.168
-33.8967591 151.2040753
-33.8967685 150.9229637
-33.8969 151.256
-33.8982 150.964
-33.8983 151.252
-33.8985 151.254
-33.8989 150.929
-33.8989 151.119
-33.8994 151.091
-33.8996 150.99
-33.8999393 151.1793755
-33.9004 150.9
-33.9004589 151.1862392
-33.9008 151.262
-33.9013 151.196
-33.902 150.869
-33.9023 151.13
-33.9023 151.155
-33.90276 151.17258
-33.9029206 151.1422146
-33.9035194 151.1442151
-33.9038 151.203
-33.9038774 151.1006545
-33.9047 151.006
-33.9049 150.912
-33.9053 151.131
-33.9054 151.14
-33.9054791 151.0386724
-33.90558 151.05699
-33.9056 151.025
-33.9057 151.247
-33.9057 151.247
-33.9058 151.176
-33.9060028 151.0855257
-33.9062 151.162
-33.9064 151.021
-33.9069 151.049
-33.9071 151.26
-33.908 151.259
-33.908 151.259
-33.9082 150.866
-33.9088 151.123
-33.9088 151.206
-33.909 151.154
-33.9093 150.891
-33.9095644 151.0954828
-33.9096 150.874
-33.9098 151.225
-33.90984 151.21944
-33.9099606 151.1542796
-33.91 151.243
-33.91 151.243
-33.9102 150.619
-33.9104282 151.1544823
-33.9105 151.084
-33.9106 150.929
-33.9108 136.567
-33.9113 150.88
-33.9115 151.243
-33.9120311 150.9598224
-33.9120805 150.9925655
-33.9122 151.057
-33.9124609 151.1051073
-33.9125655 151.0998054
-33.9125868 151.2003836
-33.9126406 151.2396486
-33.9128 150.86
-33.913 151.176
-33.9132406 151.1041038
-33.9133 151.035
-33.913688 151.161852
-33.913688 151.161852
-33.9144 151.146
-33.9146113 151.1034957
-33.915 151.267
-33.915 151.267
-33.9154042 151.073498
-33.9154803 151.1503777
-33.9156308 151.167481
-33.9161612 150.8972807
-33.9162518 151.0502012
-33.9164 151.02
-33.9164 151.208
-33.9164 151.078
-33.9165 150.891
-33.9166519 150.8420227
-33.916802 151.030899
-33.916802 151.030899
-33.9168342 151.0894184
-33.9169232 151.0310646
-33.9171119 150.9143894
-33.9174263 151.0345525
-33.9175 151.116
-33.9182 151.123
-33.9182 151.245
-33.9183975 150.8679573
-33.9191 151.255
-33.91913 151.23869
-33.91927 151.03662
-33.91927 151.03662
-33.919911 151.253026
-33.919948 151.1610947
-33.92 151.099
-33.9204 150.863
-33.9204 150.929
-33.9207 151.152
-33.9209 151.034
-33.9209 151.224
-33.9209 151.034
-33.9213 151.198
-33.9213 151.198
-33.9214081 150.9248777
-33.92143 150.92487
-33.9218 151.24
-33.9222 151.253
-33.9228609 151.0129563
-33.9229 150.881
-33.9235 151.052
-33.9235182 151.0699012
-33.923606 151.002972
-33.92374 150.8318762
-33.9238 150.926
-33.9238 150.926
-33.9238 150.926
-33.924 151.068
-33.924351 151.0915311
-33.9244 151.139
-33.9246 147.206
-33.9249 151.224
-33.9250157 151.2370548
-33.925107 147.241556
-33.9253793 150.8904935
-33.9255 151.013
-33.9256 151.194
-33.9258798 151.2145494
-33.926 147.243
-33.926 150.842
-33.9265 150.924
-33.9266 150.952
-33.9266 151.232
-33.9271 150.907
-33.9271 150.907
-33.9273602 151.0795579
-33.9274 151.123
-33.9277457 151.2008842
-33.9278 138.161
-33.9281 151.127
-33.9283 151.124
-33.9290665 151.2280782
-33.9291 151.193
-33.9294513 151.2264582
-33.92951 151.10897
-33.92951 151.10897
-33.9307 151.056
-33.9307 151.056
-33.9309294 151.0385816
-33.9309294 151.0385816
-33.931105 151.0216557
-33.9316 151.208
-33.9316982 150.8485706
-33.9319 151.145
-33.932 137.629
-33.9324 150.893
-33.9326419 151.1794363
-33.9333587 151.2536459
-33.9334 150.952
-33.9337 151.18
-33.9338 151.125
-33.9338 151.166
-33.93385 151.09621
-33.9339415 151.1796723
-33.934 151.182
-33.9344 150.813
-33.9352 151.085
-33.9352 151.085
-33.935971 151.1659394
-33.9362604 151.2396809
-33.9363 118.007
-33.9374 151.138
-33.9379 150.838
-33.938 151.144
-33.9383 151.109
-33.9394 150.731
-33.9396 151.256
-33.9401 151.103
-33.9404 115.199
-33.9406 151.147
-33.9407 151.121
-33.9413 151.075
-33.9413 151.075
-33.94161 151.242506
-33.9418 150.98
-33.942 151.214
-33.9422 151.195
-33.9422618 151.2391886
-33.9425 118.918
-33.9433 151.249
-33.9437 150.909
-33.9447 151.017
-33.9447 151.017
-33.9447 151.253
-33.9447995 151.2352682
-33.944837 151.225373
-33.944837 151.225373
-33.9451 150.999
-33.94518 151.22569
-33.9458 150.843
-33.9458 150.891
-33.9459 151.058
-33.9461 120.126
-33.9467 151.128
-33.9468 150.772
-33.9468 150.772
-33.9469 150.871
-33.947 151.079
-33.947343 151.0258927
-33.9473927 151.2519195
-33.9476795 151.047088
-33.9478 150.954
-33.9479 151.122
-33.9482 151.069
-33.9482366 149.5295923
-33.949 151.03
-33.9492 151.083
-33.9493204 150.8514828
-33.9494 151.102
-33.9497 151.161
-33.9504 151.136
-33.9507 151.149
-33.951328 151.015244
-33.9515 151.125
-33.9518528 151.0153472
-33.9519 150.998
-33.9519 150.894
-33.9522 151.114
-33.9524734 151.0532173
-33.9527 151.142
-33.9527404 151.1390926
-33.9527866 151.1392016
-33.9527866 151.1392016
-33.9528 151.085
-33.9537 151.139
-33.9537 151.206
-33.9539187 115.0674743
-33.9542 151.031
-33.9542157 151.0166996
-33.9542157 151.0166996
-33.9544 151.096
-33.9546 150.945
-33.9551 150.999
-33.9553 151.061
-33.9553 115.073
-33.9554 151.23
-33.9558 150.955
-33.958 116.138
-33.9583 151.24
-33.9584 151.232
-33.9586 150.937
-33.9596 150.81
-33.9605 151.154
-33.9605 151.017
-33.9605 138.645
-33.9607 151.142
-33.9611817 150.982054
-33.9615619 151.0731878
-33.9616 151.136
-33.9616492 151.0489593
-33.9617 137.715
-33.9624 151.124
-33.96243 151.24858
-33.9625 151.113
-33.9625909 151.0875342
-33.9627 151.148
-33.9636 118.487
-33.9641 151.111
-33.9641 151.087
-33.9641 151.131
-33.9642 151.102
-33.9649 151.01
-33.9659 151.134
-33.9661 151
-33.966178 137.698404
-33.96619 151.24251
-33.9664348 151.0305364
-33.9666 151.132
-33.9674459 151.1065776
-33.9674459 151.1065776
-33.9674486 151.1065459
-33.9674648 151.1064743
-33.9681 148.947
-33.9687 151.137
-33.9705 151.067
-33.9705 150.896
-33.9726 151.099
-33.9727 151.128
-33.9727 151.081
-33.9727 151.128
-33.9728147 151.0555257
-33.9729046 151.0773353
-33.973 151.145
-33.9744 151.092
-33.9746 150.902
-33.9748 150.859
-33.9756 151.111
-33.9763447 151.1206652
-33.9767897 151.1148974
-33.9769 145.709
-33.9788257 150.8996558
-33.979 150.993
-33.9792 151.236
-33.97955 115.76565
-33.9796 151.065
-33.9797 151.106
-33.9814 151.113
-33.982 151.144
-33.9834 151.116
-33.9839 151.123
-33.9847 151.081
-33.9847 151.138
-33.985015 151.0454806
-33.9855 151.1
-33.9869 150.896
-33.9898 150.881
-33.99 151.133
-33.99 139.08
-33.992 146.876
-33.9920907 151.0243465
-33.9929 150.898
-33.993 150.765
-33.9951 151.13
-33.9952 148.405
-33.9957 150.885
-33.996455 151.1066889
-33.9985 151.043
-33.9991 151.139
-33.999335 150.867746
-33.9999 150.867
-34.0005 138.816
-34.0027 150.641
-34.0029 151.027
-34.0035493 151.0682789
-34.0044 150.872
-34.0048 151.061
-34.0080767 151.0776226
-34.0084 151.112
-34.0107 147.791
-34.0108 151.204
-34.011 150.863
-34.0114156 151.0064935
-34.0124 151.098
-34.0127882 151.0561757
-34.0131 151.083
-34.0149048 151.0172897
-34.0157 150.818
-34.0159 150.686
-34.0163 149.328
-34.0172 116.514
-34.018 151.073
-34.0189 151.123
-34.0192867 151.0289173
-34.0196 151.105
-34.022 150.832
-34.0227 151.062
-34.0227 151.062
-34.0228 150.857
-34.0256386 115.0999661
-34.0264 150.738
-34.0265 151.088
-34.0266 151.042
-34.027 151.067
-34.02778 138.68562
-34.02811 151.05907
-34.0287 150.811
-34.02906 150.73494
-34.0291 151.042
-34.0296 150.828
-34.0298 150.847
-34.0303981 151.0627035
-34.0314 151.113
-34.03186 135.73046
-34.0318856 151.0595959
-34.0318856 151.0595959
-34.03234 151.06361
-34.032492 151.05588
-34.0331 151.078
-34.03313 151.101818
-34.03313 151.101818
-34.03313 151.101818
-34.0332 151.098
-34.0332427 151.1027053
-34.0334 151.026
-34.0334 139.669
-34.03343 151.121
-34.0339 150.815
-34.0341692 151.1036437
-34.0341692 151.1036437
-34.0343221 151.0968145
-34.0347 150.572
-34.036 148.558
-34.0361776 151.0064578
-34.036371 151.1008735
-34.0366 151.115
-34.037073 151.052857
-34.0371 151.084
-34.0383 137.901
-34.0389 151.158
-34.0389 150.847
-34.0393 139.764
-34.041713 150.7333716
-34.042 148.729
-34.0426 117.641
-34.043 150.807
-34.0436 151.075
-34.0456 151.146
-34.0459 151.113
-34.0462315 151.1230705
-34.0468 151.083
-34.0468 151.026
-34.0479 151.103
-34.048 150.769
-34.0484 150.803
-34.0484 150.803
-34.0484489 151.1515928
-34.0487 150.84
-34.0487 150.84
-34.0490199 150.8200568
-34.0507 151.133
-34.052 150.672
-34.0526 150.694
-34.0531 150.694
-34.0531598 150.6936379
-34.0537 151.123
-34.0538 151.148
-34.054 116.169
-34.0545 150.828
-34.0569 151.027
-34.0569622 150.7397917
-34.0573311 151.1530107
-34.0574 150.762
-34.058653 151.072202
-34.059 151.003
-34.0606 150.712
-34.0608 150.761
-34.0613 150.823
-34.0624 150.693
-34.0632 151.019
-34.0636292 151.1189871
-34.0639 151.012
-34.0651084 151.0079057
-34.0653 151.154
-34.0660956 150.8149677
-34.0660956 150.8149677
-34.0660959 150.8149675
-34.0663631 150.814811
-34.0663631 150.814811
-34.0663631 150.814811
-34.067 150.842
-34.0672 137.59
-34.0691391 150.6943294
-34.0703 150.816
-34.0717 150.636
-34.0723 150.831
-34.0733 150.859
-34.0741 118.263
-34.0758 139.05
-34.0779 150.806
-34.0781034 151.1307412
-34.0788 150.571
-34.0797 150.508
-34.080953 138.78258
-34.0824 151.012
-34.0826 150.834
-34.0842 150.691
-34.0845 149.149
-34.08456 151.14637
-34.086 150.813
-34.0860956 150.6748594
-34.0860956 150.6748594
-34.08648 151.00712
-34.0866 150.798
-34.0866002 150.7882789
-34.0874603 150.8280827
-34.0915 142.041
-34.0942 150.79
-34.0943339 141.9657292
-34.0977 150.816
-34.103 141.919
-34.1048 150.795
-34.1082141 150.7514907
-34.1109 150.803
-34.1183 136.348
-34.119592 147.875631
-34.1274 149.013
-34.1275 140.71
-34.13 150.814
-34.1373 150.996
-34.1453 138.877
-34.1457 147.387
-34.1526 138.417
-34.1563 138.744
-34.16306 148.44949
-34.1639 115.22
-34.1668 140.71
-34.1679038 142.0585905
-34.1694 139.084
-34.1698 139.933
-34.17 142.182
-34.17 150.613
-34.178738 140.749134
-34.178738 140.749134
-34.1789621 142.2217349
-34.1790932 150.712912
-34.1807 140.784
-34.181 136.049
-34.18395 150.98865
-34.184 139.982
-34.1851306 142.1589469
-34.1853 138.146
-34.1862754 142.1643592
-34.1863607 142.1642742
-34.1870763 142.1616999
-34.1870763 142.1616999
-34.1878 142.159
-34.1924 150.98146
-34.1927 148.344
-34.1939 142.134
-34.1956 150.785
-34.1960813 142.1486781
-34.2043 150.569
-34.2063 142.156
-34.2064 142.094
-34.2086626 142.2040568
-34.2123 151.002
-34.2130283 142.1272836
-34.2177 115.0953
-34.2242 138.019
-34.2285 146.353
-34.2287239 150.6848574
-34.2291488 150.984638
-34.2293 150.591
-34.2343 142.169
-34.2379 140.558
-34.2409 116.145
-34.2426 116.144
-34.2431 140.407
-34.2441 116.152
-34.24598 150.97372
-34.2482 150.548
-34.2482 146.033
-34.2496 146.195
-34.252 140.453
-34.253 146.101
-34.2551038 140.6465667
-34.25948 137.75665
-34.2605645 145.9842136
-34.2645 135.728
-34.2651 148.841
-34.266 150.966
-34.27066 138.54685
-34.2726 138.769
-34.27447 150.95805
-34.2747 140.535
-34.277762 142.0845579
-34.2793819 142.192545
-34.2803 146.048
-34.282 146.07
-34.28213 146.0437
-34.2848 140.598
-34.2864 146.041
-34.2864 146.041
-34.287 146.062
-34.2875 140.367
-34.2878 146.572
-34.2882 142.146
-34.289 150.579
-34.28947 150.94687
-34.2917303 146.0432498
-34.2988382 142.1939375
-34.2999 146.086
-34.3014545 117.5468989
-34.3057 147.088
-34.3069 150.931
-34.3084 116.165
-34.3112 148.306
-34.3116 148.292
-34.3138 140.526
-34.31449 115.15628
-34.31451 148.298899
-34.31689 150.91829
-34.31722 150.92182
-34.3208873 150.5709571
-34.3215 148.291
-34.32677 150.91214
-34.3273 146.963
-34.33 146.042
-34.3309 149.367
-34.33465 150.9134
-34.3377 138.918
-34.3412038 150.9063809
-34.3465 150.906
-34.3477 147.22
-34.35151 150.91563
-34.353646 150.4882203
-34.3554489 139.6084117
-34.3564 146.902
-34.3574 138.682
-34.3593 150.905
-34.3627 117.077
-34.3652 150.917
-34.3689 137.672
-34.3697 150.542
-34.37532 150.91062
-34.37543 150.89813
-34.3803 150.889
-34.3813 136.103
-34.3845 150.894
-34.3862062 150.9090545
-34.3877 150.872
-34.3889467 150.8795144
-34.389 150.902
-34.3902 150.893
-34.3903145 141.5936911
-34.3926 119.379
-34.39908 150.88966
-34.4005 150.487
-34.4018 149.53
-34.4025 149.82
-34.4064 150.89
-34.4084 145.433
-34.4087 139.127
-34.4138 140.625
-34.4147 150.873
-34.4180794 150.879339
-34.4192 150.895
-34.4199799 150.8630174
-34.42277 137.91218
-34.4247 150.884
-34.4249 148.242
-34.424984 150.8931239
-34.4258823 150.8952965
-34.4262 146.304
-34.4264903 150.8717532
-34.427135 150.898067
-34.427135 150.898067
-34.427135 150.898067
-34.427135 150.898067
-34.4273 150.894
-34.4296 150.886
-34.4298345 150.8617242
-34.4316 150.856
-34.4326 150.818
-34.4339 139.052
-34.4350276 138.5098747
-34.4362 116.251
-34.4372815 150.8704656
-34.4373 148.726
-34.4386 150.887
-34.43887 150.8537
-34.4409 150.424
-34.4438805 147.5365448
-34.4454 150.835
-34.447 147.524
-34.4474 116.029
-34.448436 150.4443996
-34.448436 150.4443996
-34.4518 150.841
-34.452881 140.57054
-34.4536 138.352
-34.4556265 150.448397
-34.45717 138.810995
-34.45729 138.92706
-34.4599 149.47
-34.4601 150.836
-34.4683 150.872
-34.4711325 139.1178973
-34.4721 138.68
-34.4725 138.996
-34.4725 138.996
-34.4737908 142.3577983
-34.4751 150.841
-34.47969 150.84779
-34.4798 150.856
-34.480018 150.42129
-34.480018 150.42129
-34.481 150.878
-34.4816 150.901
-34.4822 117.628
-34.4824 150.42
-34.4833 150.804
-34.4846 150.886
-34.4864672 150.3385364
-34.4875692 150.9144598
-34.4889 150.424
-34.4902 150.868
-34.491 150.779
-34.4920449 150.8161587
-34.493375 118.605524
-34.49403 150.79361
-34.4942 150.447
-34.4945842 150.7774065
-34.497 150.793
-34.4974 137.484
-34.4977 147.883
-34.5007 144.852
-34.5014 150.882
-34.5023 150.81
-34.5044 150.333
-34.5044 139.045
-34.5048 150.796
-34.5057208 144.8405964
-34.5110795 117.0141118
-34.5158088 150.7850988
-34.5176 148.909
-34.5193 146.181
-34.5197468 138.9658146
-34.5223 150.484
-34.5242 148.161
-34.5259 146.331
-34.5316 150.866
-34.5335 138.748
-34.5415046 150.8511029
-34.542 149.395
-34.54722 146.40608
-34.54724 150.85177
-34.5476 148.346
-34.5495 150.869
-34.5495086 135.481244
-34.5501 150.366
-34.5504009 150.3729915
-34.552274 150.860718
-34.5526 139.132
-34.5528461 150.5296133
-34.5536887 146.4042971
-34.5539735 150.8547567
-34.554 150.845
-34.5544 148.36752
-34.5567457 150.8541073
-34.5567457 150.8541073
-34.559 150.831
-34.5596 150.846
-34.5624 146.397
-34.563 150.817
-34.5632 146.413
-34.5642 150.858
-34.56712 150.84198
-34.56712 150.84198
-34.5682 150.798
-34.568451 145.998993
-34.5694 137.881
-34.5696 139.598
-34.5705 150.772
-34.5713749 150.3161555
-34.5726 139.299
-34.5754486 142.7454238
-34.5756 150.774
-34.5757 138.75
-34.5784 150.865
-34.5819 150.849
-34.5843 150.15
-34.5869 142.772
-34.5890707 150.5929489
-34.5915 150.78
-34.5917 150.479
-34.592484 138.517535
-34.5928 150.516
-34.5962 138.751
-34.5962483 150.8548812
-34.5971247 146.412384
-34.598 138.761
-34.599183 138.745595
-34.60083 148.55752
-34.6033 148.755
-34.604162 138.8866
-34.6066 138.748
-34.6137738 150.3179776
-34.6141 138.829
-34.618114 138.738477
-34.622178 135.469221
-34.62434 138.71933
-34.62489 117.66241
-34.6251 150.853
-34.6262 135.866
-34.6263 117.653
-34.6330796 116.1198513
-34.6331 138.735
-34.6355 148.019
-34.63612 148.02865
-34.6361947 143.5635986
-34.6384 148.027
-34.6412 148.014
-34.642 139.098
-34.6433 150.845
-34.64345 138.64697
-34.6443 150.773
-34.653 117.877
-34.6536 139.283
-34.6544 150.301
-34.6651 138.557
-34.66821 138.70089
-34.668217 138.685226
-34.669658 150.85063
-34.6699 138.891
-34.670821 148.624779
-34.672 138.666
-34.67446 150.85705
-34.68007 138.690356
-34.6806 139.651
-34.6813 150.846
-34.6860752 138.688171
-34.6894 150.1664
-34.689475 138.71443
-34.6919 138.7
-34.6971 138.663
-34.6978 137.712
-34.6995 138.694
-34.70362 138.6746
-34.7068 139.091
-34.7099 138.705
-34.713 138.685
-34.7131 150.006
-34.7135 138.766
-34.714877 138.672352
-34.716944 138.668032
-34.7173471 143.1537242
-34.7184 135.8489
-34.7198743 135.8551423
-34.7198743 135.8551423
-34.7202334 138.671592
-34.7203 150.087
-34.7205 149.18
-34.7212034 138.6689259
-34.7233 149.741
-34.725707 138.678253
-34.7306 138.662
-34.7313 135.867
-34.7318 138.682
-34.7327 138.67
-34.736262 150.536398
-34.7374 150.833
-34.7387845 146.7786091
-34.739743 138.619931
-34.741535 138.596483
-34.7416 135.847
-34.7435 146.566
-34.7449 146.548
-34.745419 146.552963
-34.7461 150.828
-34.7463 138.669
-34.7463978 149.7113803
-34.7469 150.823
-34.747113 146.552423
-34.747113 146.552423
-34.7471232 149.7323433
-34.7494 146.555
-34.7501 149.72
-34.7503262 149.7195945
-34.7503262 149.7195945
-34.751 149.72
-34.7529 138.63447
-34.7535 138.622
-34.7566 138.595
-34.7588 149.712
-34.7589 138.677
-34.7592 149.701
-34.7603 138.67
-34.7617 139.569
-34.7625 149.73
-34.7629 138.648
-34.7629 138.648
-34.76331 147.86155
-34.7674 148.819
-34.767937 138.708998
-34.7681 138.647
-34.7681 138.647
-34.76961 138.7201
-34.7698 146.928
-34.7704 150.817
-34.7705497 137.5960625
-34.771723 138.624287
-34.7723 138.607
-34.7739 138.732
-34.77397 139.053129
-34.774 138.67
-34.7753 138.65
-34.7755231 117.7049932
-34.7769476 150.6905088
-34.7831 138.85
-34.7833 149.266
-34.7836004 142.6354678
-34.7847 138.663
-34.785699 138.615274
-34.78673 138.70932
-34.7908 138.61827
-34.79236 138.66827
-34.7928 137.833
-34.7935 138.656
-34.79381 138.69623
-34.7961495 147.038598
-34.797841 138.898752
-34.7987 138.731
-34.79888 138.71336
-34.799578 138.67594
-34.8 138.654
-34.800043 138.688016
-34.8043 138.496
-34.8052 145.884
-34.8085 138.726
-34.810562 138.620982
-34.811 138.686
-34.811769 138.651356
-34.8122 148.637
-34.8136 147.74
-34.8154 138.701
-34.8173 138.667
-34.8173 138.709
-34.8189 147.202
-34.819 138.645
-34.81977 138.9589
-34.8209 150.557
-34.821907 138.885984
-34.8221 138.727
-34.82346 138.49448
-34.823681 138.622604
-34.8239 148.3343
-34.8246 138.673
-34.8259 138.692
-34.8268 138.642
-34.827322 147.3516169
-34.8285 138.762
-34.8301 117.96
-34.8314 138.719
-34.831402 138.685486
-34.831402 138.685486
-34.831402 138.685486
-34.83318 138.61305
-34.8338 138.676
-34.8342 148.912
-34.8342 138.705
-34.8348 138.66
-34.8369 138.641
-34.8391 138.485
-34.8396985 138.7850795
-34.8397 148.912
-34.8398 138.688
-34.839802 138.495412
-34.8399 138.816
-34.8404 138.696
-34.8413 138.654
-34.8426 148.912
-34.844011 138.618128
-34.84544 138.48565
-34.845508 138.502804
-34.8455577 138.5023436
-34.8481 138.70963
-34.8481931 138.5071111
-34.848419 138.619864
-34.8486 150.608
-34.8487 150.742
-34.8494 138.662
-34.85085 138.49516
-34.8513 138.52726
-34.851301 138.603859
-34.8524 138.486
-34.853 138.701
-34.8532 139.161
-34.854114 138.551808
-34.854189 138.551545
-34.8542 138.599
-34.8544 139.623
-34.8549 138.491
-34.8557 150.577
-34.8559926 150.5990688
-34.85602 138.52197
-34.8561075 149.9440108
-34.8566 138.671
-34.857276 138.693029
-34.857734 138.519114
-34.8585 138.532
-34.8597 150.59
-34.8597 138.657
-34.86131 138.67119
-34.8616 138.599
-34.86216 138.588163
-34.86304 138.51149
-34.8637 138.482
-34.86398 138.55001
-34.8655 138.602
-34.865958 138.638229
-34.8666928 150.6303443
-34.8675 138.699
-34.8686 138.643
-34.8689 150.596
-34.8695 147.592
-34.869875 138.566083
-34.870748 138.660397
-34.8708 138.512
-34.871 138.626
-34.872 138.96
-34.873222 138.538907
-34.87382 138.555193
-34.87382 138.555193
-34.8746 150.6
-34.87485 138.596842
-34.8752382 150.6039757
-34.8752954 150.6039918
-34.8753125 150.604351
-34.875622 138.673355
-34.8767 138.637
-34.87703 138.52157
-34.878151 138.511076
-34.878151 138.511076
-34.8793 138.662
-34.8795 150.601
-34.880086 138.614978
-34.88015 138.56602
-34.8823031 138.6739664
-34.882716 138.603923
-34.8829 150.607
-34.8839 138.551
-34.8841 138.694
-34.8842 138.537
-34.884989 138.590019
-34.88529 138.50648
-34.88529 138.50648
-34.88542 138.62594
-34.88542 138.62594
-34.8855 138.521
-34.8864 117.691
-34.8876 138.616
-34.88927 138.55919
-34.8901 138.602
-34.8901 138.666
-34.8913704 138.6562789
-34.8913704 138.6562789
-34.8921 137.461
-34.8925 138.548
-34.892784 138.644763
-34.89392 138.6851
-34.8944 138.568
-34.8944 138.581
-34.8944 138.568
-34.8953 138.613
-34.89587 138.51985
-34.8959 138.748
-34.8962 150.61
-34.89664 138.63846
-34.89664 138.63846
-34.8979 138.576
-34.898 138.505
-34.899071 138.537155
-34.899114 138.657211
-34.8998 138.527
-34.9013 138.676
-34.901621 138.554324
-34.9025 138.49675
-34.90425 138.56967
-34.905106 138.597604
-34.90526 138.87493
-34.905367 138.6277398
-34.90603 138.608531
-34.90694 138.62487
-34.9071358 138.6624187
-34.9076 138.617
-34.9077056 150.7303796
-34.90785 138.54733
-34.90884 138.64048
-34.9091 137.797
-34.9097 150.748
-34.911186 138.655644
-34.9117 138.524
-34.9129 138.503
-34.91318 138.66634
-34.9141 138.677
-34.9141 138.677
-34.915509 139.305731
-34.9158 138.53
-34.916059 138.902078
-34.9161 149.436
-34.9173 138.563
-34.9179 138.495
-34.9188 138.631
-34.9188 138.666
-34.91925 138.62267
-34.91979 138.53797
-34.91979 138.53797
-34.91979 138.53797
-34.92024 138.82843
-34.9204 138.609
-34.92056 138.6515
-34.9216 138.636
-34.9216 138.636
-34.921667 138.63645
-34.9217572 138.5992614
-34.921832 138.598961
-34.921832 138.598961
-34.921832 138.598961
-34.921832 138.598961
-34.921832 138.598961
-34.921832 138.598961
-34.921832 138.598961
-34.921832 138.598961
-34.921832 138.598961
-34.921982 138.599075
-34.921982 138.599075
-34.921982 138.599075
-34.921982 138.599075
-34.921982 138.599075
-34.9226396 138.5993915
-34.9226396 138.5993915
-34.9226396 138.5993915
-34.9226396 138.5993915
-34.9226396 138.5993915
-34.9226396 138.5993915
-34.9226396 138.5993915
-34.9226396 138.5993915
-34.9226396 138.5993915
-34.9226396 138.5993915
-34.9226396 138.5993915
-34.9226396 138.5993915
-34.9226396 138.5993915
-34.9226396 138.5993915
-34.9226396 138.5993915
-34.9226396 138.5993915
-34.9226396 138.5993915
-34.92491 138.6494
-34.9253 148.165
-34.925536 138.526488
-34.926 138.549
-34.9264 137.083
-34.9267 117.274
-34.9278 138.729
-34.92788 138.60935
-34.9281 138.589
-34.93 138.5
-34.9302 138.535
-34.930503 138.513705
-34.93144 138.62877
-34.9316 138.559
-34.933 150.762
-34.934185 138.604438
-34.9343 117.901
-34.9343721 146.3012727
-34.9345 138.632
-34.9345 138.559
-34.9354 138.66
-34.9361 150.566
-34.9363053 138.6615987
-34.9375 138.509
-34.9375 138.643
-34.9381018 138.5379414
-34.9385 138.766
-34.9399 138.562
-34.94251 138.59601
-34.94303 138.57221
-34.9446 138.62
-34.944939 138.658356
-34.947476 117.970487
-34.9475 138.647
-34.949207 138.63612
-34.949993 139.011083
-34.9508 138.608
-34.9511 139.31
-34.95114 138.56374
-34.9515 138.589
-34.9527 138.879
-34.954324 138.547004
-34.95437 138.59077
-34.9576 138.607
-34.95773 138.62051
-34.9584 138.612
-34.9584 138.745
-34.95898 138.72805
-34.960414 138.573518
-34.9607 138.556
-34.96134 138.5811
-34.96232 138.54768
-34.962643 138.541414
-34.963 138.645
-34.9643 138.59
-34.964636 138.557108
-34.9649 138.626
-34.9661014 150.593852
-34.9675 117.359
-34.9679 138.56
-34.9686515 149.0302719
-34.9694 138.592
-34.9702 138.574
-34.9703 138.555
-34.971578 138.616175
-34.9725 116.888
-34.9726 138.52
-34.9727 138.537
-34.9737 138.6
-34.97453 138.56483
-34.9771085 138.6200826
-34.977703 116.733712
-34.9781 138.558
-34.9784 117.93
-34.978866 138.529173
-34.9795 138.579
-34.9801635 138.5119858
-34.981 138.592
-34.981499 138.514908
-34.982217 138.72606
-34.98337 138.52973
-34.9852 138.522
-34.987482 138.596392
-34.989011 138.835366
-34.989016 138.547452
-34.9896 138.517
-34.9905 138.556
-34.990689 138.562692
-34.9907 137.402
-34.9927 138.59
-34.99365 138.71278
-34.9937 138.603
-34.994 138.527
-34.9941 117.944
-34.99505 138.545076
-34.9952 150.715
-34.9971 117.137
-34.9979 138.558
-34.9981 146.814
-34.999057 138.578249
-35.0015 117.855
-35.0017 117.874
-35.002388 138.942118
-35.002579 138.525681
-35.0026087 145.9753452
-35.0029 138.735
-35.00332 138.53745
-35.003559 138.716476
-35.004 138.521
-35.004216 138.555772
-35.00428 138.76143
-35.0044 138.708
-35.0055 138.626
-35.005642 138.540019
-35.005642 138.540019
-35.0057 117.902
-35.0081 117.73
-35.0108 138.556
-35.0108 138.542
-35.0112 117.882
-35.0127 150.693
-35.0130375 117.5233384
-35.013379 138.5435882
-35.01355 138.5435
-35.014832 138.561411
-35.015 150.824
-35.0153 147.069
-35.0164 138.522
-35.0174227 138.5509801
-35.0174227 138.5509801
-35.0181 138.552
-35.01876 138.74951
-35.01891 138.68462
-35.020174 138.63611
-35.0203 117.89
-35.02158 138.614888
-35.0217 138.568
-35.0221 117.915
-35.0237 117.883
-35.0238188 117.8828324
-35.0249 138.608
-35.025393 138.528156
-35.0269 143.338
-35.0284 137.625
-35.0292 138.548
-35.0294 138.62
-35.0298 138.589
-35.0301 149.271
-35.0317 138.523
-35.033089 138.625939
-35.033089 138.625939
-35.03391 138.81359
-35.0351 150.667
-35.0385 138.903
-35.0401 139.355
-35.040714 138.535645
-35.0424 137.73
-35.0428 138.518
-35.0434 138.76
-35.045712 150.584133
-35.0477 117.828
-35.0501 138.589
-35.051 142.883
-35.0535 147.908
-35.05437 138.85631
-35.0552 143.312
-35.0569 147.349
-35.05708 138.72166
-35.0576 138.616
-35.0577 148.1
-35.0588 147.196
-35.0592 138.6
-35.0635 138.65358
-35.0646725 138.8572751
-35.0668 117.867
-35.0687 142.316
-35.06888 138.853463
-35.06951 149.65367
-35.0709 138.518
-35.07171 138.53124
-35.0733285 150.6703232
-35.0738 138.858
-35.0742 138.594
-35.077628 138.509925
-35.0787 138.594
-35.0791 138.536
-35.080097 148.103449
-35.080896 138.553036
-35.0833 138.504
-35.0845 137.746
-35.0851 148.4
-35.0868 138.584
-35.0868 138.584
-35.0868 138.584
-35.0886 147.127
-35.0887804 150.5110376
-35.089171 144.0335065
-35.09086 138.55491
-35.0913 150.564
-35.093428 139.896074
-35.0964 150.69
-35.0965 147.379
-35.0972 150.5989
-35.0978 138.791
-35.0998564 150.6533213
-35.100495 138.537147
-35.10487 138.52471
-35.1059 150.629
-35.10601 138.55622
-35.1066 146.606
-35.1067 147.372
-35.108851 138.628707
-35.111309 138.516693
-35.1132 138.529
-35.113581 139.039224
-35.11431 138.54443
-35.1152 139.303
-35.1165 139.272
-35.116637 147.355498
-35.1194 147.367
-35.1221 139.272
-35.12268 147.361236
-35.1236 147.365
-35.12489 147.41995
-35.125 147.332
-35.1251 138.48
-35.125507 138.503051
-35.126242 139.264831
-35.1269 138.52
-35.127814 138.534059
-35.1286 147.294
-35.129131 138.478096
-35.1294 150.705
-35.1294 147.357
-35.1319 138.542
-35.1322 148.662
-35.1331 138.494
-35.1344 138.50298
-35.1346 139.285
-35.1351 147.352
-35.1367723 147.3773004
-35.1376 138.478
-35.1392 147.332
-35.1394 138.534
-35.1394449 138.4735855
-35.1398598 142.0239893
-35.1413 149.052
-35.14338 138.516912
-35.1463 147.348
-35.1466 148.228
-35.148 138.66
-35.1482 147.467
-35.1487 147.373
-35.148942 138.472345
-35.15 147.998
-35.1504 138.496
-35.1511 147.296
-35.1529748 138.5164748
-35.154 147.363
-35.1564 143.418
-35.159 150.697
-35.1615786 149.1397655
-35.163 147.277
-35.1648 149.254
-35.1653 149.129
-35.1666 150.585
-35.1692 149.112
-35.1703 141.811
-35.1704 149.072
-35.1708975 149.143181
-35.1733543 143.3763455
-35.1735 138.8375
-35.1738 147.38
-35.174 149.108
-35.175404 138.472742
-35.1802 149.102
-35.18152 138.75848
-35.18322 138.50101
-35.185638 138.480434
-35.1862023 143.3431537
-35.1877185 149.1332841
-35.1885 149.124
-35.1895 147.249
-35.1918 149.043
-35.19206 138.47449
-35.1975 149.12
-35.1979405 150.5586545
-35.19913 149.15129
-35.20019 138.48743
-35.2041 138.967
-35.2051 149.03
-35.20651 138.58701
-35.2071 149.076
-35.2083 149.056
-35.2093 147.511
-35.213 138.531
-35.2131 149.012
-35.2133 149.067
-35.2137 149.094
-35.2196 139.381
-35.2202 149.034
-35.2223896 146.7138306
-35.224 149.041
-35.2248 149.114
-35.2249 138.479
-35.22694 149.02497
-35.2327 143.479
-35.2335 149.03942
-35.2351 149.102
-35.2365 136.981
-35.2385 149.155
-35.2390037 149.069695
-35.2390933 149.0692118
-35.2391 149.074
-35.2398 149.042
-35.2445 149.145
-35.2501 149.059
-35.2515 149.125
-35.2518 149.047
-35.252 149.306
-35.253 149.088
-35.2535 149.139
-35.2543 149.147
-35.254626 138.892
-35.2548 139.455
-35.2552 149.445
-35.2552 149.445
-35.256 149.08
-35.2583 150.511
-35.25886 149.12551
-35.2606 140.909
-35.2625 141.181
-35.265 149.126
-35.2657 139.436
-35.26791 149.14464
-35.2689 138.46138
-35.2698 150.489
-35.2706717 147.1190122
-35.27092 138.55404
-35.273 138.455
-35.27363 149.14001
-35.2767018 149.1290814
-35.2767018 149.1290814
-35.2769 147.737
-35.2784167 149.1294692
-35.2790544 149.1263791
-35.2790544 149.1263791
-35.2790544 149.1263791
-35.279099 149.126404
-35.2794 138.619
-35.2823 149.14
-35.2885 138.768
-35.2903 149.156
-35.2904356 143.453764
-35.296108 139.037089
-35.3006478 148.228054
-35.302346 149.129621
-35.302346 149.129621
-35.3031 148.219
-35.3053 145.179
-35.3069 149.103
-35.3125 149.111
-35.312522 148.063352
-35.3126 148.219
-35.3151 149.135
-35.3166 148.326
-35.3176112 150.4369432
-35.3209 150.465
-35.3222 149.145
-35.3258 138.455
-35.3279 146.267
-35.3286 149.15
-35.329 140.515
-35.3308 139.381
-35.3313 149.094
-35.3317 149.08
-35.3347 149.032
-35.3348 149.05
-35.3395 149.133
-35.3397739 143.5564421
-35.3412 149.054
-35.342 149.076
-35.3424 149.231
-35.343101 143.559238
-35.343976 149.103689
-35.344058 149.086174
-35.3445 149.246
-35.3453611 143.5993074
-35.3470289 143.5437617
-35.34759 149.2327
-35.3478 149.215
-35.3487 149.049
-35.3506 138.621
-35.3521797 149.2320246
-35.35224 149.23229
-35.3522756 149.2320236
-35.35234 149.23094
-35.3527 149.222
-35.353979 149.235256
-35.355 149.06
-35.3553844 145.7255333
-35.3564 149.042
-35.3566693 143.5628147
-35.357 149.237
-35.3585 149.097
-35.3597259 150.4698548
-35.3598743 149.2096098
-35.3637 149.089
-35.36426 150.469311
-35.3655 149.224
-35.3664 139.952
-35.377309 147.254735
-35.3787349 149.0594796
-35.379 149.107
-35.3806 149.053
-35.3831 142.188
-35.3849 150.453
-35.3864 149.199
-35.3868 147.061
-35.392 149.096
-35.3924756 149.067537
-35.3932 138.465
-35.3947 149.086
-35.400795 142.439511
-35.4044 149.118
-35.4055 138.9732
-35.4136 149.111
-35.4147 149.133
-35.4151 149.089
-35.4154414 149.0675718
-35.4189 149.123
-35.4287 149.089
-35.4287 149.114
-35.4318 149.083
-35.44067 149.1176
-35.4413 149.798
-35.4469 138.766
-35.4477 149.124
-35.4534 138.334
-35.4555 149.087
-35.4647 143.631
-35.4649 149.098
-35.4658 145.321
-35.466735 146.799545
-35.4669 144.393
-35.4702 143.268
-35.4722 139.701
-35.4833 147.762
-35.4979 138.78
-35.5044 138.779
-35.5047009 142.8535869
-35.5082 138.706
-35.5088 149.068
-35.5133 139.171
-35.516552 147.031178
-35.518904 144.977951
-35.5215 148.147
-35.5242 144.963
-35.5246 144.952
-35.527773 138.227856
-35.5278448 138.6365121
-35.5282 143.95
-35.5334 138.682
-35.5359 144.961
-35.5377 144.956
-35.5526167 146.1698198
-35.5539676 138.6221196
-35.5539853 138.6221268
-35.55552 138.60287
-35.5569048 150.3771735
-35.569 149.742
-35.57182 138.195069
-35.5803 148.301
-35.5868 149.45
-35.5887 145.348
-35.5955168 146.5791524
-35.6095 143.802
-35.613736 145.4701604
-35.6239 144.131
-35.6354 142.997
-35.6402 145.573
-35.6409888 144.1283893
-35.6424 146.304
-35.6479 150.142
-35.651167 137.63313
-35.6518827 149.8133351
-35.6594 145.815
-35.6642 150.292
-35.6679 147.04
-35.6705 147.862
-35.6727608 143.3762816
-35.681992 142.667313
-35.6846 139.341
-35.6875394 146.7262383
-35.695 150.234
-35.6972 139.859
-35.7056 149.161
-35.71174 150.17821
-35.7121581 150.1771126
-35.7174826 147.3198368
-35.720176 137.931848
-35.7253 143.914
-35.7288913 142.3645521
-35.72951 150.19521
-35.7347 143.917
-35.7409626 150.2104162
-35.7591 146.902
-35.78224 137.771157
-35.7838 144.595
-35.7847 148.017
-35.7852 150.14
-35.7914 137.264
-35.7927 150.231
-35.8108 144.221
-35.8134 144.898
-35.8143 145.568
-35.8214603 146.6804377
-35.8229 150.189
-35.8368001 146.9923219
-35.8378087 146.8000595
-35.8413 146.365
-35.84374 146.5193
-35.8452 150.173
-35.8491 143.521
-35.8548 143.179
-35.8847 140.058
-35.89455 141.9971437
-35.9006 147.164
-35.9089877 144.3020322
-35.9127 150.076
-35.9128804 145.6932745
-35.9186 145.652
-35.9252 145.562
-35.9257 147.697
-35.92591 145.47782
-35.9275 149.35
-35.9277 145.233
-35.9354473 144.0284809
-35.9389 142.421
-35.954 149.148
-35.9578 144.371
-35.9588466 146.8867958
-35.9641633 147.7371291
-35.9648 148.058
-35.967892 147.0069981
-35.9806 146.636
-35.9839 142.917
-35.9880064 146.0063004
-35.9924764 146.3937684
-35.9934 148.777
-35.99418 146.3809
-35.9987 145.453
-35.9993438 145.1085157
-36.0111 146.393
-36.0127 146.005
-36.0128611 146.0052588
-36.0158 144.962
-36.0211 146.007
-36.0212 146.376
-36.0291 146.936
-36.0319 146.95
-36.0323 144.53
-36.0375 146.174
-36.0400161 146.9478591
-36.047 146.983
-36.049829 146.9474613
-36.0514 145.33
-36.0539 144.115
-36.0542 146.934
-36.0556 146.917
-36.0557 146.46
-36.0608 145.207
-36.0641 146.932
-36.06429 150.12893
-36.071 146.945
-36.0732767 146.9167639
-36.0749 143.225
-36.0760255 142.4159678
-36.0769 145.685
-36.0783 146.895
-36.0785986 146.9169595
-36.0785986 146.9169595
-36.0787712 146.9180062
-36.0830081 146.9188145
-36.0899 146.919
-36.0921 145.444
-36.0976 150.053
-36.1007 140.351
-36.105 146.674
-36.114623 144.7623497
-36.1161763 146.8893952
-36.116456 143.7264055
-36.1169 146.848
-36.1235964 146.881328
-36.1237 147.098
-36.1254 146.879
-36.127299 146.863145
-36.128 144.747
-36.128819 146.888626
-36.129805 144.749592
-36.1299 144.75
-36.1313684 144.7321665
-36.1346 144.761
-36.136087 141.4360997
-36.14 144.815
-36.14109 147.005798
-36.1412 144.744
-36.1436 141.988
-36.146 145.611
-36.1489567 142.859249
-36.15028 145.43042
-36.1511 146.612
-36.1609 145.878
-36.1618 150.12
-36.1651 144.71
-36.1768 149.347
-36.1782 146.949
-36.1847 147.779
-36.186 146.467
-36.1951 147.331
-36.1966 147.902
-36.198 145.061
-36.2006 144.618
-36.2111893 144.2319437
-36.215155 146.289839
-36.215889 147.177795
-36.2162185 150.1291596
-36.2162367 150.1291792
-36.2164 148.13
-36.2194 145.343
-36.2199 144.89
-36.2201755 149.1296589
-36.2251 145.562
-36.2324 149.115
-36.2365 149.125
-36.2375 149.125
-36.2386303 145.4360094
-36.2415086 149.1300389
-36.2500649 144.9499664
-36.2503 142.397
-36.252336 147.029439
-36.2594829 145.8940281
-36.262719 144.5887571
-36.2671 143.348
-36.2695 144.536
-36.2768 145.22
-36.2829 145.006
-36.2873 147.39
-36.2903 146.731
-36.2925 147.1
-36.2952724 142.0223195
-36.2984 144.651
-36.2991 144.071
-36.3000129 145.4341029
-36.3084 146.52
-36.3098 145.039
-36.3126 150.076
-36.312958 146.836936
-36.31303 140.7693
-36.3131301 145.1326567
-36.314 144.779
-36.3176 145.056
-36.3236 145.895
-36.3277 147.03
-36.33109 145.6836
-36.3315 146.451
-36.3353 141.649
-36.3392 146.077
-36.3452 146.307
-36.3531749 146.3050759
-36.3539 144.699
-36.3545 146.319
-36.3551373 146.3177604
-36.3553 143.707
-36.356488 146.325526
-36.356488 146.325526
-36.3566 145.463
-36.3571 145.391
-36.3583 145.43
-36.3584 146.688
-36.35851 140.69291
-36.3649 140.906
-36.3666 145.397
-36.3675 145.413
-36.368 150.07
-36.3685 144.232
-36.3689 142.982
-36.369249 145.129824
-36.371929 146.319878
-36.37226 148.82908
-36.3747 145.407
-36.3781 140.988
-36.3784 141.241
-36.3813 145.351
-36.3821 145.399
-36.382167 145.399537
-36.382167 145.399537
-36.3854 145.313
-36.3884 149.89
-36.3895 148.447
-36.3898 145.406
-36.3915 146.446
-36.39182 145.36083
-36.3974 144.98
-36.3986 145.392
-36.3988 145.406
-36.4005 145.48
-36.4017 140.346
-36.405467 146.75506
-36.4073 145.069
-36.4099 145.439
-36.4102 143.974
-36.4122 145.923
-36.4146 148.619
-36.4149 148.623
-36.4196 145.388
-36.4199 143.614
-36.4218 145.171
-36.428896 150.076031
-36.4356 146.545
-36.439782 145.225113
-36.441531 146.360021
-36.4465 144.984
-36.4496 146.431
-36.4509 142.026
-36.4532 145.431
-36.4596 146.223
-36.4599 142.586
-36.4642 149.871
-36.4647 147.25
-36.4661825 145.3894582
-36.4765 147.023
-36.4919 145.347
-36.4937 146.829
-36.493884 144.609847
-36.5028 148.837
-36.5063 148.301
-36.5064 146.587
-36.5107 149.289
-36.5135 146.676
-36.523 140.75
-36.53575 144.20734
-36.5371 147.376
-36.5419 147.057
-36.5438 145.235
-36.5472 145.99
-36.5482 149.828
-36.551237 145.9832629
-36.5542 145.963
-36.5581 146.721
-36.5633345 145.3331215
-36.5738737 143.8704055
-36.5778 146.376
-36.5834453 146.2474639
-36.5837 145.014
-36.5841 142.117
-36.5855 146.131
-36.5899 144.801
-36.5926 145.863
-36.593 140.497
-36.6029 143.945
-36.615 143.257
-36.6167 144.508
-36.6177 145.216
-36.6185004 142.4705426
-36.6302 149.573
-36.6322 142.629
-36.637 145.718
-36.6402 142.259
-36.6408 149.975
-36.6558 144.211
-36.662 144.335
-36.6707 149.841
-36.6731 149.842
-36.6772 142.87
-36.6783 149.839
-36.6916 147.143
-36.6973 142.205
-36.6989344 146.9110461
-36.7012 142.238
-36.7055 144.313
-36.7071 144.238
-36.7096 140.956
-36.7109 142.2
-36.7119 141.177
-36.7133 142.205
-36.7148 142.2028
-36.716671 144.249867
-36.7173 142.18
-36.7183 144.262
-36.7187 141.474
-36.7193 144.684
-36.726234 144.309954
-36.7304 146.962
-36.7308 146.108
-36.7311 146.322
-36.7334304 144.2505658
-36.7335957 149.9787608
-36.7341 144.133
-36.7361 144.269
-36.7383 144.299
-36.7404 143.9
-36.7418014 147.1720827
-36.7427815 147.1702159
-36.7428 144.206
-36.743 141.94
-36.7444 144.272
-36.7456 144.259
-36.7495 144.254
-36.7505 146.001
-36.7524705 145.572781
-36.7526297 144.3030202
-36.7553 142.02564
-36.7574 144.265
-36.758164 142.194158
-36.7605 144.272
-36.7607 144.285
-36.761646 144.27862
-36.761646 144.27862
-36.76204 144.27847
-36.7659966 146.4119502
-36.766319 149.696075
-36.766331 144.31392
-36.767 144.298
-36.7705862 144.2576404
-36.771 143.833
-36.7717 146.982
-36.77269 144.343681
-36.7753038 144.2799445
-36.776728 144.252095
-36.7773 144.291
-36.780371 144.30319
-36.782 145.155
-36.7858 144.5
-36.7897 143.552
-36.790882 144.235796
-36.794515 144.245084
-36.7993 146.431
-36.7997 144.286
-36.8029526 144.351088
-36.8048 144.161
-36.8049 145.427
-36.8051741 143.2865121
-36.8151 149.285
-36.8227 143.887
-36.8263 144.304
-36.83071 144.24221
-36.834 149.81
-36.8371833 141.9637769
-36.8376 139.854
-36.8402 144.388
-36.8571 145.737
-36.8582224 143.7318713
-36.8651 149.916
-36.8675675 147.0642974
-36.8786 142.136
-36.887 149.917
-36.89084 149.91042
-36.8925 149.906
-36.8947 147.063
-36.9017 145.234
-36.9079673 142.6621546
-36.9168 149.232
-36.9186957 142.517768
-36.922326 144.710564
-36.9264058 149.8720612
-36.9292 149.646
-36.9366 146.238
-36.9442 142.324
-36.9555 140.742
-36.9556 147.703
-36.9676 141.082
-36.9716 140.367
-36.9723 140.746
-36.9763 145.709
-36.98309 145.4808078
-36.9854 143.709
-36.989637 144.064205
-36.99 143.321
-36.9911 141.935
-37.0024939 144.2570953
-37.0026 145.039
-37.0091 143.134
-37.0206046 145.1354466
-37.022861 145.135265
-37.022861 145.135265
-37.0229813 144.5310897
-37.0237 145.861
-37.029251 145.1419131
-37.0354 145.154
-37.03604 141.2954345
-37.0415 148.938
-37.043 144.799
-37.0454238 143.7367231
-37.0458308 143.8139044
-37.0494187 142.8223733
-37.0533 143.736
-37.0561 149.907
-37.05627 146.08454
-37.05844 142.77724
-37.0591 144.219
-37.063984 144.216112
-37.0661 142.771
-37.0704 144.207
-37.08051 144.26254
-37.0848 149.695
-37.085 143.473
-37.0914 144.204
-37.0941 145.102
-37.0966 144.352
-37.1003238 145.6178487
-37.100525 147.593322
-37.1056 144.063
-37.1100214 146.315934
-37.1107675 146.3141794
-37.1183 144.857
-37.1389237 142.5174568
-37.1409 144.351
-37.147 148.885
-37.1485 142.851
-37.1495 144.167
-37.163223 139.754878
-37.1663 141.592
-37.167034 143.704393
-37.1794 143.25
-37.1813 146.067
-37.1835 143.399
-37.1874 144.389
-37.1931 145.704
-37.1956 142.61
-37.2046 145.041
-37.213597 145.430948
-37.2138 144.088
-37.2330667 145.9089196
-37.2356367 144.3306053
-37.2479 144.459
-37.2486736 141.8422199
-37.25222 144.458557
-37.257556 145.797194
-37.2641 147.721
-37.2748 144.727
-37.27503 143.5143415
-37.2822 142.933
-37.2853 142.923
-37.2914 140.833
-37.2946902 143.7855364
-37.2955233 144.2450322
-37.2988 145.069
-37.301146 146.139686
-37.3024 142.766
-37.3036 144.947
-37.3098 144.133
-37.3135 144.594
-37.3169 145.291
-37.3209724 145.713547
-37.3248 144.409
-37.3357 143.951
-37.336827 144.153957
-37.3463 144.743
-37.3536 144.521
-37.3538 143.634
-37.3602 145.028
-37.3654 143.175
-37.3795 140.836
-37.3804 147.83042
-37.3884 144.328
-37.3907 143.794
-37.401 144.894
-37.4051 144.583
-37.4085 140.337
-37.4089 143.891
-37.4113 143.984
-37.4122 144.976
-37.4168 145.005
-37.4189 144.563
-37.4194 145.426
-37.41944 144.979515
-37.4204 145.71
-37.421723 143.712945
-37.4238 143.891
-37.4301 143.383
-37.4325 144.743
-37.4584 147.25
-37.4609 144.679
-37.4624 144.596
-37.4700234 143.6576053
-37.4708 144.308
-37.4733 144.976
-37.4763 140.01
-37.4774 143.795
-37.4807 149.583
-37.4811 145.258
-37.4863 144.517
-37.4875 144.592
-37.4965 148.177
-37.4965 145.074
-37.49696 144.58514
-37.5004575 143.9886822
-37.511 145.748
-37.515 145.121
-37.5168 142.942
-37.5228639 143.8348413
-37.523 145.353
-37.52779 143.820219
-37.5281 142.04
-37.5322644 144.0529367
-37.5350648 143.822669
-37.5371 145.473
-37.5376 143.837
-37.5387 143.831
-37.538984 140.457682
-37.54 143.863
-37.5403 144.951
-37.5413 140.825
-37.5441 142.739
-37.5495 143.87
-37.5505708 143.8609464
-37.5508 140.226
-37.551102 145.659901
-37.555 143.801
-37.5559 143.894
-37.5569 143.839
-37.5582742 143.8135923
-37.558491 143.9930396
-37.5587 145.109
-37.55915 149.75038
-37.5607124 143.8531555
-37.560799 143.854567
-37.560799 143.854567
-37.56173 143.87403
-37.5627 144.877
-37.5642 144.704
-37.565 140.696
-37.5651 143.853
-37.5657 144.728
-37.5661943 143.8444196
-37.5666 143.831
-37.5676 140.134
-37.56976 149.15304
-37.5727507 143.8762445
-37.5741 143.927
-37.5752 144.713
-37.5754 144.729
-37.5776 143.858
-37.5779312 143.8374336
-37.5791 145.203
-37.57914 144.92443
-37.5803 144.104
-37.580325 144.730012
-37.580325 144.730012
-37.5809 144.751
-37.5829737 144.7232816
-37.5839 144.705
-37.585 143.818
-37.5851 141.405
-37.58614 145.12733
-37.5875437 143.832616
-37.5882 143.722
-37.5913 145.106
-37.5914 144.922
-37.5927 145.413
-37.5929 140.35019
-37.593184 144.729974
-37.5956 144.942
-37.5968 145.267
-37.5973 143.84
-37.5993 144.934
-37.5993 144.934
-37.601177 144.2242541
-37.602452 141.685308
-37.6052 144.594
-37.6062 145.146
-37.6067 145.031
-37.6084 144.936
-37.6084 144.936
-37.6086 140.362
-37.6108992 143.8695205
-37.6161 143.844
-37.6167 144.9231
-37.6196 144.345
-37.6214 143.586
-37.6236 144.934
-37.6236 144.708
-37.62813 144.10505
-37.62946 145.02536
-37.6321 144.917
-37.6335294 143.7568505
-37.634011 145.07534
-37.63439 144.93118
-37.6358 144.804
-37.6364 145.197
-37.6364 145.197
-37.6364 142.547
-37.6376 145.068
-37.6376 145.068
-37.6402214 145.1325146
-37.6402214 145.1325146
-37.6405 144.886
-37.641553 145.239271
-37.6431 143.683
-37.6435 145.53
-37.6436 145.053
-37.6449 145.033
-37.6454 145.025
-37.64628 145.556454
-37.65 144.923
-37.65082 144.89314
-37.6513912 142.3420858
-37.6522 145.095
-37.6522 145.095
-37.653412 143.8860451
-37.6538 145.515
-37.6540591 144.4372704
-37.6561 145.374
-37.6569 145.051
-37.6598 145.076
-37.659809 145.075897
-37.66 140.561
-37.66 144.918
-37.661 145.035
-37.662 144.93
-37.6638 145.063
-37.66442 145.02796
-37.66596 145.00305
-37.6666 145.051
-37.6680515 145.0102067
-37.6688 145.183
-37.669 144.946
-37.6691 144.852
-37.6698 145.077
-37.6703 145.123
-37.67032 144.84901
-37.67125 144.99769
-37.6718305 145.1579677
-37.67221 144.43515
-37.6727 144.586
-37.6728 145.031
-37.6737 145.167
-37.67438 144.96558
-37.6744339 144.5516525
-37.6747 145.066
-37.6762 144.896
-37.6764 144.555
-37.6765 145.035
-37.677 144.568
-37.6782403 144.5935071
-37.6782403 144.5935071
-37.6788 145.001
-37.679 144.929
-37.679 143.062
-37.6794464 144.9128079
-37.6800621 143.8265819
-37.68044 145.02498
-37.681 144.587
-37.6812 145.532
-37.6825 145.012
-37.6826 144.993
-37.6839 143.561
-37.6842833 144.5870656
-37.6843689 144.4322061
-37.6849437 145.068903
-37.6849437 145.068903
-37.6849788 145.0692803
-37.6862 144.736
-37.686276 145.111153
-37.6877 145.14
-37.6877 145.14
-37.6877 143.364
-37.68826 144.91281
-37.6889 144.898
-37.6891685 144.7749135
-37.68947 144.89003
-37.6914 145.215
-37.6914 145.215
-37.69189 145.11815
-37.69258 144.9289
-37.6949 145.043
-37.6949 145.043
-37.695 144.573
-37.69527 144.88622
-37.696 145.015
-37.6964 145.003
-37.6967 144.967
-37.69832 145.13501
-37.6985 145.062
-37.6986 140.454
-37.6988 145.054
-37.6988 144.743
-37.6996 145.03
-37.6997 145.151
-37.699702 144.921944
-37.7 145.081
-37.701012 144.560364
-37.7011 144.774
-37.7011 144.774
-37.7012 144.943
-37.70209 144.75895
-37.70209 144.75895
-37.7025294 144.8784045
-37.7030412 145.1838166
-37.7032 144.971
-37.7035979 144.9158041
-37.7035979 144.9158041
-37.7036 144.995
-37.7039 145.1
-37.7039803 145.1062827
-37.7039803 145.1062827
-37.704085 144.915646
-37.7050437 144.9159809
-37.705324 144.9275645
-37.7054 144.909
-37.7059 145.021
-37.7064 145.1
-37.7068 145.087
-37.7069867 144.7940442
-37.7072 145.062
-37.7073683 147.8320662
-37.7078 144.945
-37.7081 148.45647
-37.7081 145.168
-37.7082 144.779
-37.7084 145.09
-37.7086 144.574
-37.70888 145.12974
-37.709 141.548
-37.7094 144.794
-37.71031 144.73998
-37.7115 145.007
-37.7117 145.155
-37.712186 145.0787725
-37.7143 145.049
-37.7156 144.914
-37.715667 144.935852
-37.7157 145.038
-37.7157 145.019
-37.7159 144.974
-37.716 145.101
-37.716119 144.90194
-37.71655 144.7595
-37.7166 144.835
-37.71743 144.79185
-37.71767 144.809001
-37.7177 144.777
-37.7177 145.122
-37.7182 145.005
-37.71947 144.77169
-37.7198 144.928
-37.720229 142.839287
-37.72057 144.85805
-37.7207 145.022
-37.7216 144.948
-37.7217 145.102
-37.7217 144.959
-37.7225 144.99
-37.7242 144.636
-37.7248 145.071
-37.7248 144.917
-37.7253 145.148
-37.7253197 145.1296308
-37.7258214 144.8802642
-37.7262 141.995
-37.7264 145.115
-37.7265 144.994
-37.7283 145.698
-37.72885 144.93705
-37.7294 145.018
-37.7294037 145.214912
-37.7299 144.985
-37.7299 144.985
-37.73002 144.73925
-37.7303448 144.966822
-37.7304 145.274
-37.7306 145.01
-37.7309 144.942
-37.731 148.093
-37.7312 142.026
-37.7319 144.801
-37.7325 144.991
-37.7329 145.03
-37.7329 144.772
-37.7336 145.382
-37.734 145.451
-37.7341 144.819473
-37.7343 144.738
-37.7343 145.09
-37.7351 144.916
-37.7351 144.916
-37.7351515 145.0740934
-37.7354 145.064
-37.7358 144.952
-37.73607 144.9813
-37.73607 144.9813
-37.7363 144.781
-37.7365 148.433
-37.7375 144.996
-37.7375 144.867
-37.7378 145.018
-37.7378 144.776
-37.7396 144.218
-37.7402587 145.0406459
-37.7406 144.87
-37.741 144.943
-37.74108 142.02468
-37.74108 142.02468
-37.7411 144.786
-37.7411 144.786
-37.7411 144.923
-37.74144 144.90347
-37.7419 144.97
-37.742 144.811
-37.74227 144.799
-37.7425 145.735
-37.7427 145.214
-37.743 145.077
-37.743 144.954
-37.743168 144.799273
-37.7434 144.889
-37.744 144.557
-37.74408 144.85877
-37.744664 144.795627
-37.7448 145.004
-37.7448 144.775
-37.7457 144.936
-37.746 145.339
-37.746 142.035
-37.7463 144.736
-37.7465 144.978
-37.74736 145.04652
-37.7476 145.007
-37.74767 144.89722
-37.748 144.948
-37.7487 144.99
-37.749 144.809
-37.7493046 145.0519536
-37.7505 145.313
-37.75141 144.91094
-37.751806 145.000602
-37.75285 144.92126
-37.753 145.65
-37.753338 145.35439
-37.7533838 145.3519777
-37.7546 145.015
-37.755 144.804
-37.7551 144.997
-37.7551 144.902
-37.7555 144.966
-37.7556 145.336
-37.7556 145.701
-37.7556 145.13
-37.7558 144.815
-37.7558 145.14
-37.7563 144.775
-37.756367 145.066849
-37.7566 144.896
-37.7566 144.943
-37.7566322 145.0681643
-37.7566322 145.0681643
-37.7566363 145.0688338
-37.7566719 145.0403767
-37.7567 145.024
-37.757 144.919
-37.7581 144.788
-37.7582 144.968
-37.758788 145.0680268
-37.7591 144.766
-37.7591 144.915
-37.7599 144.951
-37.7601 145.18
-37.7602 145.582
-37.7605 145.11
-37.762 145.009
-37.762026 144.999672
-37.762026 144.999672
-37.7621 144.944
-37.7627 144.823
-37.76277 145.03488
-37.763039 145.173721
-37.7634 145.095
-37.7636696 144.9999866
-37.7636702 144.9999907
-37.7636744 144.9999881
-37.764831 144.86136
-37.7649 144.979
-37.76495 144.922642
-37.76495 144.922642
-37.765252 145.170917
-37.7661 144.861
-37.7661383 144.9218184
-37.7661802 144.9217801
-37.7661802 144.9217801
-37.76645 142.09447
-37.7665 145.12
-37.76665 145.04294
-37.7667 145.273
-37.7668 145.329
-37.7676 144.888
-37.7677 145.09
-37.7681 145.233
-37.7683 144.994
-37.7688 144.909
-37.768851 145.295919
-37.768851 145.295919
-37.769 145.647
-37.7697 145.154
-37.77 144.943
-37.7705 145.063
-37.7715 144.96
-37.77158 144.83752
-37.7719 145.31
-37.772 144.765
-37.772 145.096
-37.772072 144.922318
-37.7721 145.104
-37.7724 145.024
-37.77312 144.8819
-37.7734 145.464
-37.7735 144.911
-37.7735328 144.9791956
-37.7742 144.989
-37.7745 144.926
-37.7745 145.178
-37.774587 145.0594828
-37.7746 145.322
-37.7747 144.954
-37.7749 144.997
-37.775 145.248
-37.7752505 145.0440666
-37.7762 145.363
-37.7763 145.272
-37.7763 145.272
-37.7766 145.018
-37.7768 145.534
-37.7771 144.988
-37.7771901 144.0307403
-37.7773 145.007
-37.7781 145.103
-37.7782 144.82
-37.7783 145.021
-37.7785 144.949
-37.77861 144.971786
-37.77861 144.971786
-37.7794 144.919
-37.7794 145.215
-37.7807 144.911
-37.781 140.825
-37.7812 145.612
-37.7814 144.968
-37.7815 144.8
-37.7816 145.57
-37.7819201 144.864212
-37.782 144.933
-37.782 145.148
-37.7822 145.159
-37.7822 145.113
-37.7826 145.079
-37.7828 144.996
-37.78309 144.84533
-37.78309 144.84533
-37.7832 145.373
-37.7836 145.032
-37.7841 145.137
-37.7846 144.984
-37.7846 144.984
-37.7849 144.988
-37.7855 145.316
-37.7867 145.335
-37.786731 145.003427
-37.7868 143.613
-37.7869 144.885
-37.7869 144.885
-37.7870176 145.1328585
-37.787061 145.283182
-37.787061 145.283182
-37.787061 145.283182
-37.7873 144.806
-37.7877 145.166
-37.7878 144.925
-37.788 144.798
-37.7881 145.13
-37.7882 145.074
-37.78835 144.76247
-37.7894 145.088
-37.7899 145.255
-37.7899 145.255
-37.7902 145.436
-37.790251 145.388643
-37.7907 145.153
-37.791 144.831
-37.79107 145.199
-37.7912 144.973
-37.7912235 144.853811
-37.7912235 144.853811
-37.7919 145.04
-37.7923576 144.8613367
-37.7923576 144.8613367
-37.7923576 144.8613367
-37.7924264 144.8611584
-37.7924264 144.8611584
-37.7924264 144.8611584
-37.7925 144.99
-37.7925 144.817
-37.7925 144.99
-37.7928 144.927
-37.793 145.23
-37.793 145.23
-37.7934 145.113
-37.79363 144.944553
-37.7942 145.264
-37.7947 144.971
-37.7948 144.876
-37.7951 144.88
-37.795176 144.928814
-37.796063 144.8802628
-37.7963 145.049
-37.7965 145.327
-37.7965 144.907
-37.7965 145.16
-37.7968 148.534
-37.7975 144.956
-37.798 144.895
-37.798 145.056
-37.7983 145.077
-37.7984 144.951
-37.7985 140.773
-37.7987 145.297
-37.7988 144.814
-37.798823 145.27941
-37.798823 145.27941
-37.7989 144.956
-37.7990746 145.282236
-37.7990746 145.282236
-37.7994 144.982
-37.8001 147.459
-37.8002 145.238
-37.8002 144.965
-37.8002 145.238
-37.8009 145.123
-37.8009 145.174
-37.8014 145.096
-37.8016 144.982
-37.8019 140.729
-37.8019 145.316
-37.8019 144.97
-37.8026 145.117
-37.8026 145.117
-37.8031 144.99
-37.8034688 144.993542
-37.8036 145.135
-37.8036 145.034
-37.80385 144.95512
-37.803963 145.079589
-37.8046 145.217
-37.8048 144.892
-37.8056 145.012
-37.8057 147.618
-37.8063 144.9
-37.8071 145.19
-37.8071 145.19
-37.8074 144.872
-37.8075 145.112
-37.8076 144.974
-37.8079 145.167
-37.80821 147.62056
-37.8084 145.245
-37.8089 145.345
-37.809 145.056
-37.8090836 144.9703862
-37.8094 144.89
-37.809495 144.9706565
-37.809495 144.9706565
-37.809495 144.9706565
-37.809495 144.9706565
-37.8098 145.231
-37.81 147.647
-37.8100278 144.9815267
-37.8106 145.15
-37.8111 145.127
-37.8112 145.063
-37.8114 145.324
-37.8120977 145.2308894
-37.812149 145.2272575
-37.812149 145.2272575
-37.812149 145.2272575
-37.812149 145.2272575
-37.812149 145.2272575
-37.812149 145.2272575
-37.812149 145.2272575
-37.812149 145.2272575
-37.812269 145.031685
-37.8123 145.087
-37.8126 144.874
-37.8126 145.08
-37.81342 145.23318
-37.81342 145.23318
-37.81386 144.965407
-37.8145855 144.9685505
-37.8146 144.885
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8148203 144.9667679
-37.8149 145.007
-37.815 145.176
-37.8153 144.996
-37.8153 144.996
-37.8154014 144.9610939
-37.8155 145.197
-37.81559 145.28129
-37.8156 147.744
-37.81599 145.05972
-37.8160019 144.9570007
-37.8161 145.206
-37.8162011 144.9572582
-37.8163 140.774
-37.8169 145.092
-37.8172 145.252
-37.8172 145.24
-37.8173 145.157
-37.8174 144.887
-37.8181 145.265
-37.8189 145.018
-37.8190874 145.1265346
-37.8190874 145.1265346
-37.8190874 145.1265346
-37.8190874 145.1265346
-37.8191 145.127
-37.8196 145.65
-37.81975 144.94803
-37.819753 144.850408
-37.8198 143.75
-37.8201 145.05
-37.82032 147.83037
-37.8208 144.874
-37.8209 145.152
-37.8209 145.208
-37.8216 145.122
-37.822 144.998
-37.822101 145.03898
-37.8222 145.098
-37.8226048 145.0077592
-37.8236 145.076
-37.8243 145.421
-37.8243 145.033
-37.82466 147.60605
-37.8248314 145.0579703
-37.8252 145.337
-37.8252 145.238
-37.8258367 147.6332644
-37.8259 140.765
-37.826 145.101
-37.8266 145.247
-37.826711 140.793258
-37.8268 145.137
-37.8268 145.137
-37.827 147.655
-37.8272 145.166
-37.8272 147.624
-37.8281 145.09
-37.828289 144.964905
-37.8283 145.295
-37.8285 145.205
-37.8287 145.044
-37.828757 140.783084
-37.828757 140.783084
-37.8288 144.882
-37.8289 145.18
-37.8292 144.87
-37.8297 145
-37.83 145.073
-37.83009 145.11068
-37.8301 145.362
-37.8301 145.362
-37.8305 145.257
-37.8309 144.977
-37.831771 140.7868
-37.832247 145.0563729
-37.832247 145.0563729
-37.832247 145.0563729
-37.8322601 145.0563673
-37.8323838 145.0563633
-37.8326 145.066
-37.832647 144.848013
-37.8328 145.597
-37.8328 145.058
-37.8345 145.273
-37.8348 145.033
-37.8348 144.935
-37.8352 145.125
-37.8353 144.989
-37.8357 145.147
-37.8357 145.196
-37.8359 144.954
-37.8363 144.846
-37.8365 144.958
-37.8366 144.942
-37.837 144.92
-37.8373 145.135
-37.8378 145.194
-37.838 145.208
-37.8382 145.233
-37.8384 144.878
-37.8389 145.084
-37.8392 145.159
-37.839205 145.00932
-37.8394 145.12
-37.839852 145.045938
-37.8401 140.857
-37.8401 144.999
-37.8402 140.794
-37.8412 144.888
-37.8413 144.952
-37.8415 145.019
-37.84151 144.98586
-37.84151 144.98586
-37.84191 144.69401
-37.8421 145.08
-37.8433 145.259
-37.8433 145.2
-37.8433 147.068
-37.8435 144.863
-37.8437 144.993
-37.8438 145.177
-37.844621 140.771838
-37.8447 145.296
-37.845 145.01
-37.8457 144.071
-37.8463 144.998
-37.846532 144.991515
-37.8474 145.163
-37.8477 144.958
-37.8478 145.084
-37.8483 145.062
-37.8483 145.062
-37.8484 144.965
-37.8486 145.148
-37.8489 145.252
-37.84892 144.868326
-37.8493 145.097
-37.8514 145.077
-37.8523 145.018
-37.8524 145.126
-37.8524 145.182
-37.8524 145.01
-37.8524 144.998
-37.8527388 145.2343115
-37.8529 145.311
-37.8529 145.311
-37.8532 145.025
-37.8535 145.068
-37.8542 145.089
-37.8544 145.051
-37.8551 145.367
-37.855273 145.030314
-37.855273 145.030314
-37.855273 145.030314
-37.8556 145.261
-37.8556 145.035
-37.856 144.892
-37.856 144.773
-37.8561 144.997
-37.8563 145.216
-37.85664 145.03094
-37.8571 145.142
-37.8571 145.023
-37.857292 144.898607
-37.8574 145.231
-37.8578 144.886
-37.858 144.675
-37.8582 145.28964
-37.858475 144.992116
-37.8585 141.796
-37.8589 144.997
-37.859 145.178
-37.859 144.691
-37.8594 144.978
-37.8596431 145.1510076
-37.8596431 145.1510076
-37.859659 145.278472
-37.8605 145.286
-37.8605 145.065
-37.860535 145.286106
-37.860535 145.286106
-37.8606464 145.2863663
-37.8609 145.232
-37.8614 145.355
-37.8615 145.256
-37.8617 145.275
-37.8617 145.051
-37.8623 145.084
-37.8625 145.289
-37.8625 145.289
-37.8626 145.031
-37.8627042 148.0701825
-37.862713 144.987035
-37.8628 144.817
-37.8629 144.987
-37.8631 145.115
-37.8632 140.737
-37.864 144.976
-37.86407 144.7255092
-37.8644 144.901
-37.8644694 145.2190303
-37.8652 144.839
-37.8653244 144.6851005
-37.8654 144.994
-37.86547 144.76898
-37.8655 145.104
-37.8656 145.085
-37.8657 145.188
-37.8658 147.88871
-37.8661 145.157
-37.8664 145.176
-37.8675 144.677
-37.8677 145.141
-37.8677 144.823
-37.8685 144.78
-37.8685 144.78
-37.8692 145.133
-37.8697 144.982
-37.8699 145.265
-37.869947 145.2371254
-37.869947 145.2371254
-37.87 144.989
-37.8704999 145.2493185
-37.8705 144.711
-37.8707025 148.011701
-37.8708 145.039
-37.870947 144.771351
-37.870947 144.771351
-37.8712071 144.6952364
-37.8715 145.02
-37.8718812 145.2371674
-37.8721 145.055
-37.873 145.073
-37.8738 145.025
-37.8747 145.299
-37.8747 145.005
-37.87471 145.128174
-37.8751545 142.2938013
-37.8754 145.169
-37.8755 144.602
-37.8757 145.41
-37.8762 145.278
-37.8779 145.162
-37.8781 145.011
-37.8785536 147.9865037
-37.8786 144.758
-37.8786 144.758
-37.879 145.144
-37.879 145.144
-37.8793 144.659
-37.8799 140.829
-37.8801 145.101
-37.8801 145.067
-37.8806 145.081
-37.8816 145.123
-37.8818 144.988
-37.8823 144.982
-37.8827 145.229
-37.883 145.263
-37.8833 145.252
-37.8837 146.989
-37.8837 144.691
-37.883858 144.676887
-37.8841 145.178
-37.8844 145.335
-37.8848 144.677
-37.8849 144.744
-37.885 145.369
-37.885 145.369
-37.8852 145.012
-37.8852 145.07
-37.8852 145.038
-37.8852 145.012
-37.8852938 145.0297889
-37.8853 144.786
-37.886 145.27
-37.8864 145.296
-37.88671 144.73298
-37.88703 145.04702
-37.8874 145.152
-37.8876 145.02
-37.8876 145.02
-37.8885 145.11
-37.889 145.224
-37.8894 145.475
-37.8896 147.852
-37.889931 145.062454
-37.889931 145.062454
-37.89 145.143
-37.89 145.143
-37.890092 145.00896
-37.8907 145.054
-37.8908 145.096
-37.8913 144.998
-37.892 145.247
-37.892185 147.679591
-37.8925 145.393
-37.8925 145.022
-37.8927 145.998
-37.8932 146.783
-37.893384 145.046075
-37.893384 145.046075
-37.8936 144.644
-37.893729 145.0906849
-37.894211 144.725491
-37.8945 144.744
-37.8947852 145.0882414
-37.8947852 145.0882414
-37.8947852 145.0882414
-37.8949 146.75092
-37.8954 145.031
-37.8955 145.289
-37.896 145.314
-37.896 144.629
-37.8963 145.083
-37.8972 145.168
-37.89748 145.090176
-37.898215 145.0882415
-37.898215 145.0882415
-37.8985 145.076
-37.8986 140.561
-37.8986 144.999
-37.8987003 145.0893578
-37.898897 145.089341
-37.898968 144.656357
-37.9002 145.11
-37.9006 145.178
-37.9013931 144.6613629
-37.9013931 144.6613629
-37.902 145.041
-37.902 145.041
-37.9021 145.065
-37.9021 145.065
-37.9026 145.015
-37.9027 145.193
-37.903 145.159
-37.903 145.333
-37.9034 144.637
-37.90364 143.7232
-37.9059 145.264
-37.9062 145.149
-37.906258 144.653226
-37.9065 145.09
-37.9065 144.659
-37.9069 145.035
-37.9071 145.344
-37.9074 145.1
-37.9086 145.353
-37.9087 145.077
-37.9109 145.036
-37.9112 145.367
-37.9117 145.018
-37.91191 147.71522
-37.9121 145.125
-37.9121 145.048
-37.9123 145.276
-37.9123 145.001
-37.9124 144.993
-37.9126305 144.255213
-37.9131 145.173
-37.9136 140.399
-37.9145 145.184
-37.9146 145.058
-37.916 146.895
-37.9171883 145.1541451
-37.9171883 145.1541451
-37.9173 145.394
-37.9175665 145.1528256
-37.9176 145.19
-37.91844 145.26278
-37.9187 145.123
-37.9194 145.254
-37.9201 145.02
-37.9203 145.089
-37.9205 145.026
-37.9207 145.052
-37.9207 145.052
-37.9212 145.104
-37.9212 145.074
-37.9213 145.121
-37.9218 145.015
-37.921967 144.995129
-37.9226 145.166
-37.9231 141.276
-37.9244 145.243
-37.9253 145.04
-37.9254 145.238
-37.92758 147.69283
-37.927732 145.061375
-37.9279 145.103
-37.9282 145.961
-37.9285 145.173
-37.9306 145.422
-37.9309 145.359
-37.9326 145.197
-37.9332 145.049
-37.9332 145.049
-37.9334 145.442
-37.9335 145.003
-37.9338 145.243
-37.9338 145.164
-37.9338 145.013
-37.9345 145.069
-37.9356 145.082
-37.9366 145.491
-37.9393 145.159
-37.9394 145.032
-37.9396 145.005
-37.93982 145.14654
-37.9405 145.117
-37.9414 145.057
-37.9425 145.137
-37.94349 145.18922
-37.944 145.107
-37.9442 145.214
-37.9455 145.047
-37.9472 145.01
-37.94762 145.03827
-37.9481 143.217
-37.9485 145.003
-37.9491 145.193
-37.9509 145.021
-37.9512 145.006
-37.9513 145.546
-37.9519115 145.0047172
-37.9519115 145.0047172
-37.9524 141.957
-37.9529992 144.696467
-37.953869 144.696314
-37.9539 145.069
-37.9542142 145.1505585
-37.9546 145.179
-37.9548 141.748
-37.9548 143.339
-37.9571 145.025
-37.9571 142.52
-37.9577 145.207
-37.9587 145.14
-37.9603 145.217
-37.9619 145.047
-37.9622055 145.055777
-37.9622055 145.055777
-37.9627 145.056
-37.9629 145.079
-37.96297 146.89149
-37.9631 145.159
-37.9635 145.363
-37.9639 145.14
-37.9641217 145.2260125
-37.9649 144.5
-37.96491 145.20488
-37.9652 145.068
-37.9654228 145.0548629
-37.96556 145.05476
-37.96556 145.05476
-37.9661 144.134
-37.9664501 145.157787
-37.96764 146.9785
-37.968121 147.085175
-37.9684 145.267
-37.9688746 145.0546138
-37.9688746 145.0546138
-37.9688746 145.0546138
-37.9696 145.248
-37.9699 145.022
-37.9704 145.191
-37.9706 145.15
-37.9708 145.174
-37.9709 145.071
-37.972998 145.1483108
-37.973 146.394
-37.9732 145.178
-37.9744 145.037
-37.9762 145.022
-37.978 145.034
-37.978 146.371
-37.9785 145.213
-37.9787 145.246
-37.9789 145.317
-37.9789 145.317
-37.9793 145.076
-37.98 145.171
-37.9801 145.083
-37.9802 145.274
-37.9803 145.054
-37.9803 145.054
-37.9808 145.2
-37.98104 145.25856
-37.9827 145.152
-37.9827 145.152
-37.982984 145.136201
-37.9838 145.123
-37.98489 146.784515
-37.98567 145.1857
-37.986 145.068
-37.9876 145.221
-37.9880048 145.2139533
-37.9880048 145.2139533
-37.9885 145.265
-37.9901 145.094
-37.9904 145.244
-37.99072 145.23809
-37.9911 145.037
-37.9922 145.18
-37.9926 145.079
-37.9927 145.083
-37.9954 145.415
-37.9989 145.212
-38.0013693 145.2585043
-38.0015 147.389
-38.0016 145.345
-38.00239 145.28158
-38.0031 145.304
-38.0035254 145.0879898
-38.0036222 146.1444513
-38.0043 145.087
-38.004829 145.161026
-38.0071 145.316
-38.0092 145.295
-38.01 145.511
-38.01 145.511
-38.0116 146.7
-38.0122 145.092
-38.0158 145.955
-38.0176 145.322
-38.0195 145.555
-38.0203 145.1
-38.0212 144.398
-38.0221 144.41
-38.024366 145.114153
-38.0244 145.448
-38.025272 143.645094
-38.0255 145.324
-38.0256842 144.3872133
-38.0286 145.902
-38.0288 147.013
-38.0294 144.05451
-38.0306 145.253
-38.0313 145.366
-38.0314 145.327
-38.0314 142.001
-38.032304 145.346965
-38.0327 145.601
-38.0336 145.279
-38.03409 147.60075
-38.0354 145.259
-38.0372 145.114
-38.0395 145.317
-38.0395 145.317
-38.0425 145.207
-38.043 145.275
-38.0444 145.139
-38.0474 141.006
-38.047463 144.171228
-38.0477 145.806
-38.0486 145.372
-38.0496 145.28681
-38.0496 145.28681
-38.05 145.114
-38.05 145.336
-38.0512 140.7
-38.0529 145.249
-38.0531 145.614
-38.053706 146.874393
-38.054 145.347
-38.0547 145.123
-38.05682 146.62472
-38.0578 145.41
-38.0583 145.495
-38.0629 145.455
-38.0633 145.288
-38.0654 145.308
-38.0654 145.308
-38.0661 145.126
-38.06688 145.34753
-38.0684335 145.4394124
-38.0684335 145.4394124
-38.0704 145.145
-38.0705 145.927
-38.0706 145.472
-38.0706 146.178
-38.071613 144.366927
-38.07181 144.36713
-38.0726 144.344
-38.0731562 145.3089466
-38.0731562 145.3089466
-38.0747 145.269
-38.0750821 145.2541004
-38.076 147.131
-38.0765 145.482
-38.0772 145.482
-38.0779 145.126
-38.078683 142.812579
-38.0792 144.356
-38.0795 145.283
-38.0814554 144.3375675
-38.0826373 145.5733749
-38.0843 145.628
-38.0871 145.872
-38.08759 145.2893
-38.0883 145.277
-38.089 144.34245
-38.09 145.134
-38.0903 144.364
-38.0906 145.674
-38.0923 144.289
-38.09465 145.19765
-38.0951 145.187317
-38.09669 147.08246
-38.0986 145.719
-38.0998 145.938
-38.10094 144.05526
-38.1012939 144.3258656
-38.1027 145.187
-38.102748 145.26827
-38.1042 145.192
-38.1044 145.277
-38.10545 145.30578
-38.1057 145.127
-38.10582 144.33576
-38.10619 146.91341
-38.1069 142.319
-38.1071 147.039
-38.10733 147.089
-38.10947 145.25818
-38.1095 145.147
-38.1095 147.068
-38.1103 146.247
-38.111084 147.065381
-38.111084 147.065381
-38.111084 147.065381
-38.1118227 145.2847599
-38.1118227 145.2847599
-38.1122 145.289
-38.1129954 145.2820894
-38.1131254 145.2821716
-38.11319 145.28214
-38.1132 144.26479
-38.11379 144.33718
-38.1144 145.768
-38.1154581 144.6565174
-38.1174 145.202
-38.1174 145.202
-38.1175 145.162
-38.1239 144.358
-38.1249 145.133
-38.124921 144.337019
-38.12764 146.57135
-38.1278 145.147
-38.129808 144.331883
-38.131 145.508
-38.1312425 141.6323692
-38.1325 145.327
-38.1325 145.327
-38.1325 145.986
-38.1334 145.855
-38.1351 144.346
-38.136 145.203
-38.136036 144.333149
-38.1367 145.139
-38.1412 144.348
-38.1415 145.166
-38.1431 145.127
-38.1438 145.607
-38.14451 145.850712
-38.145 145.423
-38.1456 144.337
-38.1459 145.159
-38.1459 145.145
-38.14599 145.12449
-38.146395 145.1222048
-38.146395 145.1222048
-38.1471 144.348
-38.14735 145.1990846
-38.1475 145.124
-38.1477 145.119
-38.148 145.939
-38.1485 145.245
-38.14873 144.57522
-38.14909 146.478
-38.1496 144.332
-38.1508 145.202
-38.1514982 144.3614639
-38.1514982 144.3614639
-38.1516 146.787
-38.1529 144.374
-38.1529572 144.3611474
-38.1529572 144.3611474
-38.1554 144.345
-38.15675 144.35902
-38.1588 145.9338
-38.16001 144.35469
-38.1601657 145.9324023
-38.1601657 145.9324023
-38.1602 145.932
-38.1607 145.139
-38.161 145.129
-38.1615 145.945
-38.1618 145.147
-38.1624 145.302
-38.1628 146.363
-38.1642 144.377
-38.1651 144.395
-38.1651 145.976
-38.166 144.553
-38.1662 145.188
-38.1663 144.317
-38.1684 145.156
-38.1689 144.31
-38.16933 144.5748
-38.1707 144.394
-38.1708 144.342
-38.1708 144.424
-38.1712 147.088
-38.1721 145.826
-38.1722 144.317
-38.1724 145.094
-38.1727 145.108
-38.1728 144.715
-38.1735 144.267
-38.1740976 144.3835367
-38.1743 145.148
-38.1746 145.121
-38.17466 146.264053
-38.175912 144.329644
-38.1761 146.286
-38.1766 145.566
-38.1783 144.395
-38.179 144.342
-38.1797 146.254
-38.1841 144.389
-38.186 144.325
-38.1867294 146.2916006
-38.1869 144.339
-38.1874 145.076
-38.1875 142.432
-38.1877 146
-38.1879 144.463
-38.1884 145.101
-38.188532 146.5662735
-38.1888 146.552
-38.1898 145.093
-38.1909 146.516
-38.1923 146.256
-38.1923 142.931
-38.193 146.538
-38.193161 145.640854
-38.19391 143.64177
-38.194335 145.093294
-38.1997 145.181
-38.1997 145.181
-38.2003 144.328
-38.2004 145.488
-38.2014 146.552
-38.2032 145.231
-38.20325 142.09929
-38.2051 146.064
-38.2054 144.341
-38.2072 146.534
-38.2076 145.38
-38.209533 144.333163
-38.209533 144.333163
-38.2108 144.328
-38.21094 147.3983
-38.211 145.959
-38.2152994 146.163568
-38.2168 145.34
-38.2171 141.783
-38.2185 144.507
-38.2189 146.419
-38.2217 145.038
-38.2228 143.571
-38.2243 145.179
-38.225822 145.057877
-38.22827 145.03629
-38.2287 146.433
-38.2297 145.169
-38.233534 146.417703
-38.23875 146.3883
-38.2397 143.145
-38.24 145.938
-38.241 144.32
-38.2412 143.993
-38.241367 142.91537
-38.2463 145.061
-38.2463 145.061
-38.2464 144.174
-38.2483 145.106
-38.2534 141.71
-38.25755 145.04055
-38.25755 145.04055
-38.2576 146.227
-38.25793 144.28117
-38.2587 144.541
-38.261009 145.190033
-38.26183 144.54195
-38.2632 145.57
-38.26418 144.52284
-38.2649 144.397
-38.2678 144.65895
-38.2683 146.448
-38.2689 145.893
-38.2735 144.621
-38.2754 145.013
-38.2779 142.624
-38.2817 144.487
-38.2817 147.037
-38.2826 142.479
-38.283 141.614
-38.2842 143.523
-38.2874 146.178
-38.2927 142.368
-38.29466 146.70176
-38.297 146.54
-38.298 145.173
-38.304138 146.41629
-38.3075715 145.1888903
-38.3075715 145.1888903
-38.3078145 145.1929905
-38.3079 145.194
-38.311089 146.415558
-38.3152 141.572
-38.3165 144.01
-38.3166 142.067
-38.3169 142.484
-38.3186 144.704
-38.32046 146.32962
-38.32182 144.31119
-38.322931 144.997895
-38.326192 144.319216
-38.3269 143.077
-38.3297 142.58
-38.334 142.729
-38.33617 143.7863
-38.3363 143.57899
-38.3363 144.958
-38.3366 145.675
-38.3367 141.602
-38.3369 144.262
-38.3373 143.598
-38.337754 143.590017
-38.338282 143.588406
-38.338282 143.588406
-38.3389 144.736
-38.3391 145.171
-38.3409 144.96
-38.3423 145.766
-38.3501 144.93
-38.35172 141.60636
-38.3538 145.075
-38.3547 142.4594
-38.3554 144.909
-38.3565952 144.904109
-38.3569916 144.9005737
-38.3611 145.201
-38.3612 143.584
-38.36181 141.61336
-38.36181 141.61336
-38.3638 144.784
-38.3638 145.977
-38.367 144.996
-38.3677 144.89
-38.3685651 144.9138695
-38.368983 145.704935
-38.3697 144.857
-38.3702336 143.2417954
-38.3716 144.822
-38.3724317 142.4857998
-38.3746 145.124
-38.3747 147.19
-38.3747 142.471
-38.3764 142.5
-38.378 142.457
-38.37868 146.27468
-38.3799 142.474
-38.3812348 142.4826836
-38.3812348 142.4826836
-38.3826 142.481
-38.384121 142.477554
-38.3853 142.521
-38.386 142.232
-38.386177 142.589816
-38.3885 142.91
-38.3895156 142.4977081
-38.3922 145.165
-38.3944 145.87
-38.3956 142.471
-38.3965 142.692
-38.4005 144.97
-38.4008 146.154
-38.4022 143.88
-38.4061 145.532
-38.4066 146.069
-38.40965 144.18414
-38.4113 143.443
-38.4115 145.759
-38.4123 144.887
-38.414 145.431
-38.4218 144.838
-38.4275 145.045
-38.4324 145.596
-38.4349 145.823
-38.4469 143.051
-38.4501 145.236
-38.4513 145.246
-38.4561 144.108
-38.463 145.306
-38.4697 142.756
-38.4729 146.718
-38.4735 145.016
-38.4755 146.111
-38.4773 145.9421
-38.4838 142.977
-38.4843 145.465
-38.4985 143.208
-38.5085 145.995
-38.5133 145.358
-38.5168 143.714
-38.5195 143.538
-38.51984 146.65795
-38.5201 145.701
-38.5241 145.37
-38.5282 146.876
-38.5301 145.881
-38.5323 146.094
-38.53705 143.97296
-38.5479 145.946
-38.54867 145.47513
-38.5539 146.533
-38.5551 146.678
-38.564301 145.542361
-38.5788 146.015
-38.5901 145.583
-38.5982 145.598
-38.6048 145.588
-38.6048 145.588
-38.6078 142.876
-38.6175 146.667
-38.619 142.995
-38.6205 143.153
-38.6335 145.728
-38.6516 146.196
-38.6641 146.325
-38.6654 146.44
-38.6695 145.6217
-38.6724629 146.6923844
-38.6829 143.387
-38.6836 146.278
-38.6919 146.083
-38.6993 145.868
-38.7535 143.661
-38.8308 146.239
-39.7532 143.916
-39.9298 143.855
-40.0484 144.058
-40.1214 148.019
-40.2094 148.246
-40.7603 145.291
-40.7847873 144.9775271
-40.8427 145.127
-40.8486 145.248
-40.905 145.487
-40.9133 145.145
-40.9181 145.565
-40.9229 144.697
-40.9452 145.636
-40.9538 145.37
-40.9601 148.008
-40.9601 144.879
-40.9605 145.586
-40.9705 145.092
-40.981 145.616
-40.9867 145.717
-40.9909 145.729
-41.0026 147.395
-41.0153 147.154
-41.04076 145.86801
-41.043137 145.836367
-41.052445 145.90399
-41.052445 145.90399
-41.0532 145.906
-41.0605 145.898
-41.060997 145.908441
-41.06128 145.88153
-41.0685 145.631
-41.06904 145.93609
-41.07264 145.89229
-41.0751 145.986
-41.0766337 145.8995841
-41.0836 145.911
-41.0922 145.782
-41.0935 146.026
-41.0979 147.824
-41.1006 147.091
-41.1037 146.794
-41.1076 146.8238
-41.112 146.071
-41.1124 146.833
-41.1124 145.929
-41.1237 145.719
-41.1398 145.837
-41.1475 146.815
-41.1482 146.16
-41.14933 147.80236
-41.1546 146.192
-41.1559 146.175
-41.1589 146.244
-41.16201 146.17091
-41.1625 147.515
-41.165606 147.73648
-41.1657 146.556
-41.1667 146.354
-41.1701 145.922
-41.1728 146.337
-41.1737 146.344
-41.1773 147.228
-41.1779 146.372
-41.1789 146.358
-41.1827 146.318
-41.1852 146.16
-41.1864 146.345
-41.1885 146.457
-41.1893 146.349
-41.1904 145.806
-41.192921 146.248975
-41.1946 146.343
-41.1972 146.367
-41.2015 145.999
-41.2024 146.819
-41.20637 146.10937
-41.21207 146.34434
-41.2135 146.174
-41.216812 146.481134
-41.2221 146.887
-41.2345 145.977
-41.236252 146.974945
-41.2365 146.415
-41.2417 146.289
-41.24241 147.73568
-41.2523 147.216
-41.2539 147.148
-41.2627 146.16
-41.2774 146.039
-41.2871 146.503
-41.291 146.291
-41.2924 148.001
-41.2939 146.973
-41.2972 146.062
-41.2996 146.957
-41.3107 147.367
-41.3165 146.732
-41.3222 148.249
-41.3368 147.082
-41.3383 146.871
-41.3526 146.414
-41.3632 147.047
-41.3632 147.047
-41.377716 147.125949
-41.383044 146.327186
-41.3855154 146.1732064
-41.3873 147.128
-41.394 147.296
-41.4081402 147.131059
-41.409693 147.097015
-41.4157 147.132
-41.4162 147.177
-41.421676 147.131233
-41.4301 147.106
-41.4321 147.19
-41.4331 147.161
-41.43438 146.274857
-41.43616 147.14588
-41.4366 147.137
-41.436611 147.141068
-41.4366873 147.1408922
-41.4366873 147.1408922
-41.4366873 147.1408922
-41.4370868 147.1393767
-41.4381 147.115
-41.4399 147.141
-41.44176 147.15253
-41.44422 145.5313
-41.4464 147.143
-41.4472 147.157
-41.4492 147.129
-41.452876 147.144026
-41.4541 148.261
-41.459 147.154
-41.4597 147.2
-41.461287 147.148229
-41.4618 146.563
-41.4621 147.174
-41.4677 147.16
-41.4683 147.13
-41.4719 147.891
-41.472 147.126
-41.4782 147.11
-41.4823 147.505
-41.4823 147.164
-41.5064 147.064
-41.5119 145.219
-41.5267 146.887
-41.528 146.83
-41.52917 146.66111
-41.5311 147.011
-41.5573 146.481
-41.5581 146.405
-41.5672 147.247
-41.5725 147.173
-41.5791 148.186
-41.5825 146.931
-41.5945 147.123
-41.6164 146.995
-41.6377 147.971
-41.6512 146.943
-41.6515 146.612
-41.6892 147.08
-41.7376 145.614
-41.7446 147.335
-41.77853 145.54094
-41.7817 147.726
-41.8729045 148.3064306
-41.888 145.34
-41.927 147.495
-41.9937 146.708
-42.031409 147.492498
-42.078928 145.55643
-42.0802 145.558
-42.1245 148.077
-42.1249 148.286
-42.136 146.492
-42.1497 145.329
-42.3 147.372
-42.3503 147.407
-42.3819 147.006
-42.4464 146.669
-42.4548 147.462
-42.508 147.917
-42.5313 147.361
-42.5313 147.2
-42.5443 147.568
-42.5597 146.83
-42.5629 147.874
-42.6072 147.718
-42.6182 146.716
-42.6249 147.223
-42.6444 146.923
-42.6567 147.126
-42.6672 147.422
-42.6775 146.787
-42.6836 147.266
-42.6903 147.318
-42.6969 146.889
-42.6991 147.258
-42.7282 147.179
-42.73504 147.43846
-42.73831 147.24448
-42.7488 147.276
-42.7498 147.224
-42.7555 146.629
-42.7559 147.054
-42.7728 147.059
-42.77427 147.26576
-42.7744865 147.2511051
-42.7793 147.064
-42.7859 147.561
-42.7861799 147.2405494
-42.7931591 147.2482384
-42.7997 147.533
-42.80013 147.259102
-42.8038 147.157
-42.8057 147.631
-42.8111937 147.2416549
-42.8131 147.354
-42.8194 147.812
-42.8199 147.266
-42.8265 147.276
-42.8297 147.268
-42.8304 147.043
-42.8321544 147.2934743
-42.8322 147.279
-42.8339 147.277
-42.8343535 147.2782331
-42.8358 147.283
-42.8362 147.442
-42.8367 147.198
-42.838 147.296
-42.8383 147.349
-42.8441626 147.3114121
-42.8455 147.265
-42.845951 147.296066
-42.8467 147.356
-42.8474 147.308
-42.8485 147.624
-42.8519 147.363
-42.8526 147.511
-42.8559 147.384
-42.8582 147.401
-42.8611504 147.3825601
-42.8612 147.29
-42.8615 147.304
-42.8624 147.284
-42.8646 147.353
-42.867 147.316
-42.8728 147.314
-42.875 147.299
-42.875227 147.371577
-42.8776 147.318
-42.8778039 147.3100773
-42.8784 147.389
-42.8806 147.324
-42.880739 147.331806
-42.8812157 147.3204475
-42.8815506 147.3295905
-42.8815506 147.3295905
-42.8815506 147.3295905
-42.8815506 147.3295905
-42.8819 147.309
-42.8819 147.404
-42.8819663 147.3295156
-42.8819663 147.3295156
-42.8852 147.812
-42.8873 147.445
-42.8878 147.317
-42.8911 147.409
-42.8912 147.326
-42.8915725 147.3320854
-42.892403 147.671829
-42.8949 147.312
-42.8951454 147.2993026
-42.8959 147.432
-42.8984 147.319
-42.8992 147.327
-42.9087 147.346
-42.9090106 147.3367403
-42.9136 147.323
-42.9136629 147.4862704
-42.9138 147.355
-42.9223 147.262
-42.9402 147.495
-42.9433021 147.3527368
-42.9614 147.109
-42.975528 147.312458
-42.975528 147.312458
-42.975528 147.312458
-42.9815337 147.3235074
-42.985 147.196
-42.985 147.196
-42.9896 147.309
-42.9982 146.9283
-42.9987749 147.3199914
-43.0086 147.039
-43.0191283 147.2915454
-43.0264 147.421
-43.0273 147.727
-43.0278 146.962
-43.029 147.263
-43.0291001 147.0469969
-43.0371 147.868
-43.0664 147.255
-43.0856539 147.0120184
-43.099481 147.743212
-43.1064 147.034
-43.1125 147.373
-43.1257 147.247
-43.142 147.845
-43.1553225 146.9637994
-43.1601 147.239
-43.1625 146.922
-43.1625204 147.0771417
-43.2196 146.998
-43.2311 147.256
-43.3105 147.013
-43.31807 147.244455
-43.360818 147.327957
-43.4341277 146.9795856
View raw

(Sorry about that, but we can’t show files that are this big right now.)

This file has been truncated, but you can view the full file.
1 0
-10.4178286 105.6757622
-10.4234763 105.679929
-10.578426 142.213254
-10.5834 142.22
-10.5844917 142.214983
-10.5938841 142.2498837
-10.8944 142.387
-12.1174471 96.8965481
-12.1832 136.784
-12.1837583 136.7863834
-12.1903489 96.8308927
-12.3671 130.883
-12.3699 130.886
-12.3709002 130.8819275
-12.37149 130.88231
-12.372 130.878
-12.3744 130.9
-12.3788 130.852
-12.3811 130.896
-12.3839 130.879
-12.3859 130.858
-12.3887 130.899
-12.3911 130.893
-12.3931 130.912
-12.4031 130.919
-12.40841 130.87772
-12.4245 130.855
-12.4298 130.844
-12.4334501 130.7480508
-12.4354 130.924
-12.4407 130.845
-12.4496 130.945
-12.4583 130.83
-12.4589 130.836
-12.460556 130.837716
-12.46058 130.83761
-12.4612123 130.835933
-12.4757 130.974
-12.4806 130.984
-12.489693 130.980196
-12.4949 130.973
-12.4951 130.995
-12.4952 131.047
-12.5062 130.982
-12.5065 130.971
-12.5091617 130.9909296
-12.53999 131.05443
-12.54001 131.056502
-12.5799 131.102
-12.6273 141.881
-12.6292 141.879
-12.672135 132.833269
-12.6738 132.833
-12.6824 141.89
-12.7178 130.985
-12.787 143.346
-13.5593 142.032
-13.9453 143.197
-14.4632 132.282
-14.4633 132.261
-14.465 132.263
-14.5024 132.394
-14.8973 141.62
-15.2952 145.108
-15.461 145.25
-15.476245 141.742971
-15.481231 145.250661
-15.4877 128.121
-15.5597 144.445
-15.7736244 128.7382982
-15.7847885 128.7356663
-15.945 145.319
-16.202 145.412
-16.2497 145.32
-16.3416 145.413
-16.3811 145.375
-16.462 145.374
-16.4855 145.463
-16.4859 145.465
-16.6076 145.342
-16.6659 139.182
-16.6714 145.342
-16.7091 128.295
-16.769 145.676
-16.7952 145.691
-16.809 145.72
-16.8124 145.697
-16.8208 145.637
-16.8444 145.739
-16.8514 145.694
-16.8537 145.745
-16.875945 145.732395
-16.8794 145.758
-16.8811 145.715
-16.898113 145.714263
-16.8999 145.757
-16.9063 145.867
-16.9064 145.743
-16.9093 145.695
-16.9112 145.73
-16.9122 145.769
-16.9154 145.42
-16.9178 145.772
-16.9214129 145.7753827
-16.9218 145.752
-16.9220612 145.7741574
-16.9225 145.743
-16.9249 145.763
-16.9265 145.763
-16.9268358 145.7620992
-16.9379 145.745
-16.9427 145.738
-16.9606 145.741
-16.9703 145.742
-16.9847 145.475
-16.9866 145.745
-16.9871 145.425
-16.9925 145.425
-16.9952 145.424
-16.996 145.417
-17.0074 145.731
-17.0187933 145.7284396
-17.0214 145.736
-17.0866586 145.7809901
-17.0902 145.784
-17.1094 145.831
-17.1282 145.427
-17.1378 145.207
-17.1504 145.113
-17.1562 144.521
-17.1958 145.897
-17.2153 145.546
-17.2231 145.477
-17.2582 145.488
-17.2646 145.926
-17.2664 145.475
-17.2694 145.483
-17.2742 145.587
-17.3082 123.633
-17.343426 145.920981
-17.3491 145.595
-17.3562 146.025
-17.361 145.692
-17.382152 145.386141
-17.4027 145.91
-17.430989 145.392347
-17.4616 145.996
-17.4837 140.84
-17.5036 146.076
-17.5125 145.611
-17.5187 146.03
-17.5229 146.01
-17.5238 146.032
-17.5275 146.03
-17.5354 146.032
-17.5761 146.01
-17.5851 146.044
-17.5934 145.998
-17.6027492 145.8479706
-17.6103 145.489
-17.6548 145.956
-17.6676 145.238
-17.6683 141.079
-17.677 145.116
-17.683624 141.0753042
-17.7367 146.001
-17.7737 146.102
-17.8078 146.003
-17.8637 146.109
-17.8805 145.965
-17.9258 146.087
-17.9271 145.924
-17.9352968 145.9229616
-17.9364 145.923
-17.939742 122.2331844
-17.9416667 138.8283333
-17.9563 122.24194
-17.9611751 122.2152727
-17.9615181 122.2383482
-18.0046 146.056
-18.0903 145.851
-18.1899349 125.5646249
-18.2035 142.249
-18.2095 145.943
-18.2240919 127.668591
-18.2259152 127.6687447
-18.2525883 146.0168644
-18.2688 146.031
-18.2948 143.547
-18.4736 145.884
-18.5212 146.003
-18.530103 146.334194
-18.5773 146.251
-18.5836 146.285
-18.6301 146.075
-18.6469 146.202
-18.651 146.157
-18.6518 146.163
-18.6567097 146.1579223
-18.7126 146.293
-18.7126 146.148
-18.7382 146.58
-18.8683 146.191
-19.0442 146.392
-19.1512 146.863
-19.1567 146.851
-19.1754 146.556
-19.2453 146.655
-19.2473 146.674
-19.2516 146.793
-19.2518 146.811
-19.2576223 146.8178787
-19.2593 146.813
-19.25937 146.81375
-19.2603644 146.8132707
-19.26071 146.701166
-19.2621 146.775
-19.2625 146.792
-19.2631 146.827
-19.2673 146.804
-19.271 146.748
-19.2748 146.816
-19.2769 146.782
-19.2794 146.797
-19.2811 146.773
-19.2856 146.8
-19.2872 146.783
-19.2876 146.765
-19.2935 146.763
-19.2938 146.75
-19.2941 146.789
-19.2984 146.733
-19.3028 146.778
-19.3037 146.813
-19.3049 146.722
-19.30513 146.734197
-19.3076 146.755
-19.3101 146.733
-19.3141 146.778
-19.3154 146.735
-19.3165 146.794
-19.3166 146.752
-19.317633 146.792937
-19.3204 146.762
-19.3245 146.813
-19.3269 146.756
-19.3287 146.601
-19.336 146.718
-19.3475 146.842
-19.3647 146.729
-19.3879 146.954
-19.3888 146.727
-19.3965 147.107
-19.515 147.104
-19.5185 147.418
-19.5535316 147.3489145
-19.5624 147.416
-19.576 147.402
-19.5771 147.404
-19.5793 147.414
-19.597 146.834
-19.6001 147.46
-19.6463 134.193
-19.6466 134.196
-19.6593 147.346
-19.6648 147.416
-19.7013 147.346
-19.7842 147.226
-19.8781 147.684
-19.9218 138.12
-19.9766009 148.2270022
-19.9892 148.24
-19.9914 148.238
-20.0068 148.24
-20.0094 148.245
-20.0113 148.245
-20.0208 148.164
-20.0581 147.28
-20.062 146.264
-20.0704241 146.266017
-20.0728 146.258
-20.078 146.26
-20.0799 146.263
-20.0815 146.269
-20.0941 148.497
-20.104 146.889
-20.2685 148.718
-20.2773 148.696
-20.2775 148.727
-20.304 118.634
-20.3082 118.615
-20.3637 148.972
-20.3999 148.586
-20.4014 148.581
-20.4022 148.587
-20.4048262 118.6132253
-20.4061175 118.5944983
-20.4116 118.602
-20.479678 148.738038
-20.5235 145.4
-20.5480169 147.8453563
-20.5493 147.842
-20.6571 141.749
-20.6647 116.707
-20.676597 117.1431051
-20.7025 140.507
-20.7056 148.596
-20.7069 140.505
-20.7089 139.51
-20.709 139
View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment