diff --git a/src/axis.js b/src/axis.js
index 71167e3caa..1682c8d70e 100644
--- a/src/axis.js
+++ b/src/axis.js
@@ -41,7 +41,6 @@ export class AxisX {
render(
index,
{[this.name]: x, fy},
- channels,
{
width,
height,
@@ -49,6 +48,7 @@ export class AxisX {
marginRight,
marginBottom,
marginLeft,
+ offsetLeft = 0,
facetMarginTop,
facetMarginBottom,
labelMarginLeft = 0,
@@ -71,7 +71,7 @@ export class AxisX {
const ty = offsetSign * offset + (axis === "top" ? marginTop : height - marginBottom);
return create("svg:g")
.call(applyAria, this)
- .attr("transform", `translate(0,${ty})`)
+ .attr("transform", `translate(${offsetLeft},${ty})`)
.call(createAxis(axis === "top" ? axisTop : axisBottom, x, this))
.call(maybeTickRotate, tickRotate)
.attr("font-size", null)
@@ -134,7 +134,6 @@ export class AxisY {
render(
index,
{[this.name]: y, fx},
- channels,
{
width,
height,
@@ -142,6 +141,7 @@ export class AxisY {
marginRight,
marginBottom,
marginLeft,
+ offsetTop = 0,
facetMarginLeft,
facetMarginRight
}
@@ -162,7 +162,7 @@ export class AxisY {
const tx = offsetSign * offset + (axis === "right" ? width - marginRight : marginLeft);
return create("svg:g")
.call(applyAria, this)
- .attr("transform", `translate(${tx},0)`)
+ .attr("transform", `translate(${tx},${offsetTop})`)
.call(createAxis(axis === "right" ? axisRight : axisLeft, y, this))
.call(maybeTickRotate, tickRotate)
.attr("font-size", null)
diff --git a/src/legends/ramp.js b/src/legends/ramp.js
index 510a65831e..270a6092a3 100644
--- a/src/legends/ramp.js
+++ b/src/legends/ramp.js
@@ -105,9 +105,10 @@ export function legendRamp(color, {
x = applyRange(scaleLinear().domain([-1, range.length - 1]), [marginLeft, width - marginRight]);
svg.append("g")
- .selectAll("rect")
+ .selectAll()
.data(range)
- .join("rect")
+ .enter()
+ .append("rect")
.attr("x", (d, i) => x(i - 1))
.attr("y", marginTop)
.attr("width", (d, i) => x(i) - x(i - 1))
@@ -123,9 +124,10 @@ export function legendRamp(color, {
x = applyRange(scaleBand().domain(domain), [marginLeft, width - marginRight]);
svg.append("g")
- .selectAll("rect")
+ .selectAll()
.data(domain)
- .join("rect")
+ .enter()
+ .append("rect")
.attr("x", x)
.attr("y", marginTop)
.attr("width", Math.max(0, x.bandwidth() - 1))
diff --git a/src/legends/swatches.js b/src/legends/swatches.js
index 19f8b57424..fc89422fa1 100644
--- a/src/legends/swatches.js
+++ b/src/legends/swatches.js
@@ -117,7 +117,8 @@ function legendItems(scale, {
.style("columns", columns)
.selectAll()
.data(scale.domain)
- .join("div")
+ .enter()
+ .append("div")
.attr("class", `${className}-swatch`)
.call(swatch, scale)
.call(item => item.append("div")
@@ -142,7 +143,8 @@ function legendItems(scale, {
swatches
.selectAll()
.data(scale.domain)
- .join("span")
+ .enter()
+ .append("span")
.attr("class", `${className}-swatch`)
.call(swatch, scale)
.append(function() {
diff --git a/src/marks/area.js b/src/marks/area.js
index cf0a5e4918..7db192b86c 100644
--- a/src/marks/area.js
+++ b/src/marks/area.js
@@ -8,7 +8,6 @@ import {maybeIdentityX, maybeIdentityY} from "../transforms/identity.js";
import {maybeStackX, maybeStackY} from "../transforms/stack.js";
const defaults = {
- filter: null,
ariaLabel: "area",
strokeWidth: 1,
strokeLinecap: "round",
@@ -34,6 +33,9 @@ export class Area extends Mark {
this.z = z;
this.curve = Curve(curve, tension);
}
+ filter(index) {
+ return index;
+ }
render(I, {x, y}, channels, dimensions) {
const {x1: X1, y1: Y1, x2: X2 = X1, y2: Y2 = Y1} = channels;
const {dx, dy} = this;
@@ -42,7 +44,8 @@ export class Area extends Mark {
.call(applyTransform, x, y, dx, dy)
.call(g => g.selectAll()
.data(groupIndex(I, [X1, Y1, X2, Y2], this, channels))
- .join("path")
+ .enter()
+ .append("path")
.call(applyDirectStyles, this)
.call(applyGroupedChannelStyles, this, channels)
.attr("d", shapeArea()
diff --git a/src/marks/arrow.js b/src/marks/arrow.js
index 4aba08d368..7b56f1ccbc 100644
--- a/src/marks/arrow.js
+++ b/src/marks/arrow.js
@@ -69,7 +69,8 @@ export class Arrow extends Mark {
.call(applyTransform, x, y, offset + dx, offset + dy)
.call(g => g.selectAll()
.data(index)
- .join("path")
+ .enter()
+ .append("path")
.call(applyDirectStyles, this)
.attr("d", i => {
// The start ⟨x1,y1⟩ and end ⟨x2,y2⟩ points may be inset, and the
diff --git a/src/marks/bar.js b/src/marks/bar.js
index 0676c79809..ea3c2f343c 100644
--- a/src/marks/bar.js
+++ b/src/marks/bar.js
@@ -25,7 +25,8 @@ export class AbstractBar extends Mark {
.call(this._transform, scales, dx, dy)
.call(g => g.selectAll()
.data(index)
- .join("rect")
+ .enter()
+ .append("rect")
.call(applyDirectStyles, this)
.attr("x", this._x(scales, channels, dimensions))
.attr("width", this._width(scales, channels, dimensions))
diff --git a/src/marks/dot.js b/src/marks/dot.js
index 3d8c3b28b1..b1b06e7321 100644
--- a/src/marks/dot.js
+++ b/src/marks/dot.js
@@ -58,7 +58,8 @@ export class Dot extends Mark {
.call(applyTransform, x, y, offset + dx, offset + dy)
.call(g => g.selectAll()
.data(index)
- .join(circle ? "circle" : "path")
+ .enter()
+ .append(circle ? "circle" : "path")
.call(applyDirectStyles, this)
.call(circle
? selection => {
diff --git a/src/marks/image.js b/src/marks/image.js
index 9cd1cb3d3f..c9c283393c 100644
--- a/src/marks/image.js
+++ b/src/marks/image.js
@@ -68,7 +68,8 @@ export class Image extends Mark {
.call(applyTransform, x, y, offset + dx, offset + dy)
.call(g => g.selectAll()
.data(index)
- .join("image")
+ .enter()
+ .append("image")
.call(applyDirectStyles, this)
.attr("x", W && X ? i => X[i] - W[i] / 2 : W ? i => cx - W[i] / 2 : X ? i => X[i] - this.width / 2 : cx - this.width / 2)
.attr("y", H && Y ? i => Y[i] - H[i] / 2 : H ? i => cy - H[i] / 2 : Y ? i => Y[i] - this.height / 2 : cy - this.height / 2)
diff --git a/src/marks/line.js b/src/marks/line.js
index 24dc7e4d3d..f12d7987ae 100644
--- a/src/marks/line.js
+++ b/src/marks/line.js
@@ -7,7 +7,6 @@ import {maybeDenseIntervalX, maybeDenseIntervalY} from "../transforms/bin.js";
import {applyGroupedMarkers, markers} from "./marker.js";
const defaults = {
- filter: null,
ariaLabel: "line",
fill: "none",
stroke: "currentColor",
@@ -34,6 +33,9 @@ export class Line extends Mark {
this.curve = Curve(curve, tension);
markers(this, options);
}
+ filter(index) {
+ return index;
+ }
render(I, {x, y}, channels, dimensions) {
const {x: X, y: Y} = channels;
const {dx, dy} = this;
@@ -42,7 +44,8 @@ export class Line extends Mark {
.call(applyTransform, x, y, offset + dx, offset + dy)
.call(g => g.selectAll()
.data(groupIndex(I, [X, Y], this, channels))
- .join("path")
+ .enter()
+ .append("path")
.call(applyDirectStyles, this)
.call(applyGroupedChannelStyles, this, channels)
.call(applyGroupedMarkers, this, channels)
diff --git a/src/marks/link.js b/src/marks/link.js
index 33e02ecb2c..e9646ee28c 100644
--- a/src/marks/link.js
+++ b/src/marks/link.js
@@ -36,7 +36,8 @@ export class Link extends Mark {
.call(applyTransform, x, y, offset + dx, offset + dy)
.call(g => g.selectAll()
.data(index)
- .join("path")
+ .enter()
+ .append("path")
.call(applyDirectStyles, this)
.attr("d", i => {
const p = path();
diff --git a/src/marks/rect.js b/src/marks/rect.js
index 926ce11503..8e74aef01e 100644
--- a/src/marks/rect.js
+++ b/src/marks/rect.js
@@ -53,7 +53,8 @@ export class Rect extends Mark {
.call(applyTransform, x, y, dx, dy)
.call(g => g.selectAll()
.data(index)
- .join("rect")
+ .enter()
+ .append("rect")
.call(applyDirectStyles, this)
.attr("x", X1 && X2 && !isCollapsed(x) ? i => Math.min(X1[i], X2[i]) + insetLeft : marginLeft + insetLeft)
.attr("y", Y1 && Y2 && !isCollapsed(y) ? i => Math.min(Y1[i], Y2[i]) + insetTop : marginTop + insetTop)
diff --git a/src/marks/rule.js b/src/marks/rule.js
index 38ad70496c..714179cdad 100644
--- a/src/marks/rule.js
+++ b/src/marks/rule.js
@@ -41,9 +41,10 @@ export class RuleX extends Mark {
return create("svg:g")
.call(applyIndirectStyles, this, dimensions)
.call(applyTransform, X && x, null, offset, 0)
- .call(g => g.selectAll("line")
+ .call(g => g.selectAll()
.data(index)
- .join("line")
+ .enter()
+ .append("line")
.call(applyDirectStyles, this)
.attr("x1", X ? i => X[i] : (marginLeft + width - marginRight) / 2)
.attr("x2", X ? i => X[i] : (marginLeft + width - marginRight) / 2)
@@ -84,9 +85,10 @@ export class RuleY extends Mark {
return create("svg:g")
.call(applyIndirectStyles, this, dimensions)
.call(applyTransform, null, Y && y, dx, offset + dy)
- .call(g => g.selectAll("line")
+ .call(g => g.selectAll()
.data(index)
- .join("line")
+ .enter()
+ .append("line")
.call(applyDirectStyles, this)
.attr("x1", X1 && !isCollapsed(x) ? i => X1[i] + insetLeft : marginLeft + insetLeft)
.attr("x2", X2 && !isCollapsed(x) ? (x.bandwidth ? i => X2[i] + x.bandwidth() - insetRight : i => X2[i] - insetRight) : width - marginRight - insetRight)
diff --git a/src/marks/text.js b/src/marks/text.js
index 33eb831b7f..847c22de48 100644
--- a/src/marks/text.js
+++ b/src/marks/text.js
@@ -68,7 +68,8 @@ export class Text extends Mark {
.call(applyTransform, x, y, offset + dx, offset + dy)
.call(g => g.selectAll()
.data(index)
- .join("text")
+ .enter()
+ .append("text")
.call(applyDirectStyles, this)
.call(applyMultilineText, this, T)
.attr("transform", R ? (X && Y ? i => `translate(${X[i]},${Y[i]}) rotate(${R[i]})`
diff --git a/src/marks/tick.js b/src/marks/tick.js
index cc9b28f268..47a05fa56c 100644
--- a/src/marks/tick.js
+++ b/src/marks/tick.js
@@ -18,9 +18,10 @@ class AbstractTick extends Mark {
return create("svg:g")
.call(applyIndirectStyles, this, dimensions)
.call(this._transform, scales, dx, dy)
- .call(g => g.selectAll("line")
+ .call(g => g.selectAll()
.data(index)
- .join("line")
+ .enter()
+ .append("line")
.call(applyDirectStyles, this)
.attr("x1", this._x1(scales, channels, dimensions))
.attr("x2", this._x2(scales, channels, dimensions))
diff --git a/src/marks/vector.js b/src/marks/vector.js
index 38a8a517c9..6339a5a157 100644
--- a/src/marks/vector.js
+++ b/src/marks/vector.js
@@ -48,7 +48,8 @@ export class Vector extends Mark {
.call(applyTransform, x, y, offset + dx, offset + dy)
.call(g => g.selectAll()
.data(index)
- .join("path")
+ .enter()
+ .append("path")
.call(applyDirectStyles, this)
.attr("d", i => {
const l = fl(i), a = fr(i) * radians;
diff --git a/src/plot.js b/src/plot.js
index 754567c142..5e3dfa468c 100644
--- a/src/plot.js
+++ b/src/plot.js
@@ -4,7 +4,7 @@ import {Channel, channelSort} from "./channel.js";
import {defined} from "./defined.js";
import {Dimensions} from "./dimensions.js";
import {Legends, exposeLegends} from "./legends.js";
-import {arrayify, isOptions, keyword, range, first, second, where} from "./options.js";
+import {arrayify, isOptions, keyword, range, second, where} from "./options.js";
import {Scales, ScaleFunctions, autoScaleRange, applyScales, exposeScales} from "./scales.js";
import {applyInlineStyles, maybeClassName, maybeClip, styles} from "./style.js";
import {basic} from "./transforms/basic.js";
@@ -16,56 +16,85 @@ export function plot(options = {}) {
// className for inline styles
const className = maybeClassName(options.className);
- // When faceting, wrap all marks in a faceting mark.
- if (facet !== undefined) {
- const {marks} = options;
- const {data} = facet;
- options = {...options, marks: facets(data, facet, marks)};
- }
-
// Flatten any nested marks.
const marks = options.marks === undefined ? [] : options.marks.flat(Infinity).map(markify);
- // A Map from Mark instance to an object of named channel values.
- const markChannels = new Map();
- const markIndex = new Map();
+ // A Map from Mark instance to its render state, including:
+ // index - the data index e.g. [0, 1, 2, 3, …]
+ // channels - an array of materialized channels e.g. [["x", {value}], …]
+ // faceted - a boolean indicating whether this mark is faceted
+ // values - an object of scaled values e.g. {x: [40, 32, …], …}
+ const stateByMark = new Map();
// A Map from scale name to an array of associated channels.
- const scaleChannels = new Map();
+ const channelsByScale = new Map();
+
+ // Faceting!
+ let facets; // array of facet definitions (e.g. [["foo", [0, 1, 3, …]], …])
+ let facetIndex; // index over the facet data, e.g. [0, 1, 2, 3, …]
+ let facetChannels; // e.g. [["fx", {value}], ["fy", {value}]]
+ let facetsIndex; // nested array of facet indexes [[0, 1, 3, …], [2, 5, …], …]
+ let facetsExclude; // lazily-constructed opposite of facetsIndex
+ if (facet !== undefined) {
+ const {x, y} = facet;
+ if (x != null || y != null) {
+ const facetData = arrayify(facet.data);
+ facetChannels = [];
+ if (x != null) {
+ const fx = Channel(facetData, {value: x, scale: "fx"});
+ facetChannels.push(["fx", fx]);
+ channelsByScale.set("fx", [fx]);
+ }
+ if (y != null) {
+ const fy = Channel(facetData, {value: y, scale: "fy"});
+ facetChannels.push(["fy", fy]);
+ channelsByScale.set("fy", [fy]);
+ }
+ facetIndex = range(facetData);
+ facets = facetGroups(facetIndex, facetChannels);
+ facetsIndex = Array.from(facets, second);
+ }
+ }
// Initialize the marks’ channels, indexing them by mark and scale as needed.
- // Also apply any scale transforms.
for (const mark of marks) {
- if (markChannels.has(mark)) throw new Error("duplicate mark");
- const {index, channels} = mark.initialize();
+ if (stateByMark.has(mark)) throw new Error("duplicate mark");
+ const markFacets = facets === undefined ? undefined
+ : mark.facet === "auto" ? mark.data === facet.data ? facetsIndex : undefined
+ : mark.facet === "include" ? facetsIndex
+ : mark.facet === "exclude" ? facetsExclude || (facetsExclude = facetsIndex.map(f => Uint32Array.from(difference(facetIndex, f))))
+ : undefined;
+ const {index, channels} = mark.initialize(markFacets, facetChannels);
for (const [, channel] of channels) {
const {scale} = channel;
if (scale !== undefined) {
- const scaled = scaleChannels.get(scale);
- const {percent, transform = percent ? x => x * 100 : undefined} = options[scale] || {};
- if (transform != null) channel.value = Array.from(channel.value, transform);
- if (scaled) scaled.push(channel);
- else scaleChannels.set(scale, [channel]);
+ const channels = channelsByScale.get(scale);
+ if (channels !== undefined) channels.push(channel);
+ else channelsByScale.set(scale, [channel]);
}
}
- markChannels.set(mark, channels);
- markIndex.set(mark, index);
+ stateByMark.set(mark, {index, channels, faceted: markFacets !== undefined});
+ }
+
+ // Apply scale transforms, mutating channel.value.
+ for (const [scale, channels] of channelsByScale) {
+ const {percent, transform = percent ? x => x * 100 : undefined} = options[scale] || {};
+ if (transform != null) for (const c of channels) c.value = Array.from(c.value, transform);
}
- const scaleDescriptors = Scales(scaleChannels, options);
+ const scaleDescriptors = Scales(channelsByScale, options);
const scales = ScaleFunctions(scaleDescriptors);
const axes = Axes(scaleDescriptors, options);
const dimensions = Dimensions(scaleDescriptors, axes, options);
autoScaleRange(scaleDescriptors, dimensions);
- autoScaleLabels(scaleChannels, scaleDescriptors, axes, dimensions, options);
+ autoScaleLabels(channelsByScale, scaleDescriptors, axes, dimensions, options);
autoAxisTicks(scaleDescriptors, axes);
- // When faceting, render axes for fx and fy instead of x and y.
- const x = facet !== undefined && scales.fx ? "fx" : "x";
- const y = facet !== undefined && scales.fy ? "fy" : "y";
- if (axes[x]) marks.unshift(axes[x]);
- if (axes[y]) marks.unshift(axes[y]);
+ // Compute value objects, applying scales as needed.
+ for (const state of stateByMark.values()) {
+ state.values = applyScales(state.channels, scales);
+ }
const {width, height} = dimensions;
@@ -96,13 +125,68 @@ export function plot(options = {}) {
.call(applyInlineStyles, style)
.node();
- for (const mark of marks) {
- const channels = markChannels.get(mark) ?? [];
- const values = applyScales(channels, scales);
- let index = markIndex.get(mark);
- if (mark.filter != null) index = mark.filter(index, channels, values);
- const node = mark.render(index, scales, values, dimensions, axes);
- if (node != null) svg.appendChild(node);
+ // When faceting, render axes for fx and fy instead of x and y.
+ const {fx, fy} = scales;
+ const axisY = axes[facets !== undefined && fy ? "fy" : "y"];
+ const axisX = axes[facets !== undefined && fx ? "fx" : "x"];
+ if (axisY) svg.appendChild(axisY.render(null, scales, dimensions));
+ if (axisX) svg.appendChild(axisX.render(null, scales, dimensions));
+
+ // Render (possibly faceted) marks.
+ if (facets !== undefined) {
+ const fyDomain = fy && fy.domain();
+ const fxDomain = fx && fx.domain();
+ const fyMargins = fy && {marginTop: 0, marginBottom: 0, height: fy.bandwidth()};
+ const fxMargins = fx && {marginRight: 0, marginLeft: 0, width: fx.bandwidth()};
+ const subdimensions = {...dimensions, ...fxMargins, ...fyMargins};
+ const indexByFacet = facetMap(facetChannels);
+ facets.forEach(([key], i) => indexByFacet.set(key, i));
+ const selection = select(svg);
+ if (fy && axes.y) {
+ const axis1 = axes.y, axis2 = nolabel(axis1);
+ const j = axis1.labelAnchor === "bottom" ? fyDomain.length - 1 : axis1.labelAnchor === "center" ? fyDomain.length >> 1 : 0;
+ selection.selectAll()
+ .data(fyDomain)
+ .enter()
+ .append((ky, i) => (i === j ? axis1 : axis2).render(
+ fx && where(fxDomain, kx => indexByFacet.has([kx, ky])),
+ scales,
+ {...dimensions, ...fyMargins, offsetTop: fy(ky)}
+ ));
+ }
+ if (fx && axes.x) {
+ const axis1 = axes.x, axis2 = nolabel(axis1);
+ const j = axis1.labelAnchor === "right" ? fxDomain.length - 1 : axis1.labelAnchor === "center" ? fxDomain.length >> 1 : 0;
+ const {marginLeft, marginRight} = dimensions;
+ selection.selectAll()
+ .data(fxDomain)
+ .enter()
+ .append((kx, i) => (i === j ? axis1 : axis2).render(
+ fy && where(fyDomain, ky => indexByFacet.has([kx, ky])),
+ scales,
+ {...dimensions, ...fxMargins, labelMarginLeft: marginLeft, labelMarginRight: marginRight, offsetLeft: fx(kx)}
+ ));
+ }
+ selection.selectAll()
+ .data(facetKeys(scales).filter(indexByFacet.has, indexByFacet))
+ .enter()
+ .append("g")
+ .attr("aria-label", "facet")
+ .attr("transform", facetTranslate(fx, fy))
+ .each(function(key) {
+ const j = indexByFacet.get(key);
+ for (const [mark, {channels, values, index, faceted}] of stateByMark) {
+ const renderIndex = mark.filter(faceted ? index[j] : index, channels, values);
+ const node = mark.render(renderIndex, scales, values, subdimensions);
+ if (node != null) this.appendChild(node);
+ }
+ });
+ } else {
+ for (const [mark, {channels, values, index}] of stateByMark) {
+ const renderIndex = mark.filter(index, channels, values);
+ const node = mark.render(renderIndex, scales, values, dimensions);
+ if (node != null) svg.appendChild(node);
+ }
}
// Wrap the plot in a figure with a caption, if desired.
@@ -138,16 +222,6 @@ export function plot(options = {}) {
return figure;
}
-function defaultFilter(index, channels, values) {
- for (const [name, {filter = defined}] of channels) {
- if (name !== undefined && filter !== null) {
- const value = values[name];
- index = index.filter(i => filter(value[i]));
- }
- }
- return index;
-}
-
export class Mark {
constructor(data, channels = [], options = {}, defaults) {
const {facet = "auto", sort, dx, dy, clip} = options;
@@ -156,7 +230,6 @@ export class Mark {
this.sort = isOptions(sort) ? sort : null;
this.facet = facet == null || facet === false ? null : keyword(facet === true ? "include" : facet, "facet", ["auto", "include", "exclude"]);
const {transform} = basic(options);
- this.filter = defaults?.filter === undefined ? defaultFilter : defaults.filter;
this.transform = transform;
if (defaults !== undefined) channels = styles(this, options, channels, defaults);
this.channels = channels.filter(channel => {
@@ -165,26 +238,25 @@ export class Mark {
if (optional) return false;
throw new Error(`missing channel value: ${name}`);
}
- if (name !== undefined) {
- const key = `${name}`;
- if (key === "__proto__") throw new Error("illegal channel name");
- if (names.has(key)) throw new Error(`duplicate channel: ${key}`);
- names.add(key);
- }
+ if (name == null) throw new Error("missing channel name");
+ const key = `${name}`;
+ if (key === "__proto__") throw new Error("illegal channel name");
+ if (names.has(key)) throw new Error(`duplicate channel: ${key}`);
+ names.add(key);
return true;
});
this.dx = +dx || 0;
this.dy = +dy || 0;
this.clip = maybeClip(clip);
}
- initialize(facets, facetChannels) {
+ initialize(facetIndex, facetChannels) {
let data = arrayify(this.data);
- let index = facets === undefined && data != null ? range(data) : facets;
+ let index = facetIndex === undefined && data != null ? range(data) : facetIndex;
if (data !== undefined && this.transform !== undefined) {
- if (facets === undefined) index = index.length ? [index] : [];
+ if (facetIndex === undefined) index = index.length ? [index] : [];
({facets: index, data} = this.transform(data, index));
data = arrayify(data);
- if (facets === undefined && index.length) ([index] = index);
+ if (facetIndex === undefined && index.length) ([index] = index);
}
const channels = this.channels.map(channel => {
const {name} = channel;
@@ -193,6 +265,15 @@ export class Mark {
if (this.sort != null) channelSort(channels, facetChannels, data, this.sort);
return {index, channels};
}
+ filter(index, channels, values) {
+ for (const [name, {filter = defined}] of channels) {
+ if (name !== undefined && filter !== null) {
+ const value = values[name];
+ index = index.filter(i => filter(value[i]));
+ }
+ }
+ return index;
+ }
plot({marks = [], ...options} = {}) {
return plot({...options, marks: [...marks, this]});
}
@@ -217,132 +298,6 @@ class Render extends Mark {
render() {}
}
-function facets(data, {x, y, ...options}, marks) {
- return x === undefined && y === undefined
- ? marks // if no facets are specified, ignore!
- : [new Facet(data, {x, y, ...options}, marks)];
-}
-
-class Facet extends Mark {
- constructor(data, {x, y, ...options} = {}, marks = []) {
- if (data == null) throw new Error("missing facet data");
- super(
- data,
- [
- {name: "fx", value: x, scale: "fx", optional: true},
- {name: "fy", value: y, scale: "fy", optional: true}
- ],
- options
- );
- this.marks = marks.flat(Infinity).map(markify);
- // The following fields are set by initialize:
- this.marksChannels = undefined; // array of mark channels
- this.marksIndexByFacet = undefined; // map from facet key to array of mark indexes
- }
- initialize() {
- const {index, channels} = super.initialize();
- const facets = index === undefined ? [] : facetGroups(index, channels);
- const facetsKeys = Array.from(facets, first);
- const facetsIndex = Array.from(facets, second);
- const subchannels = [];
- const marksChannels = this.marksChannels = [];
- const marksIndexByFacet = this.marksIndexByFacet = facetMap(channels);
- for (const facetKey of facetsKeys) {
- marksIndexByFacet.set(facetKey, new Array(this.marks.length));
- }
- let facetsExclude;
- for (let i = 0; i < this.marks.length; ++i) {
- const mark = this.marks[i];
- const {facet} = mark;
- const markFacets = facet === "auto" ? mark.data === this.data ? facetsIndex : undefined
- : facet === "include" ? facetsIndex
- : facet === "exclude" ? facetsExclude || (facetsExclude = facetsIndex.map(f => Uint32Array.from(difference(index, f))))
- : undefined;
- const {index: I, channels: markChannels} = mark.initialize(markFacets, channels);
- // If an index is returned by mark.initialize, its structure depends on
- // whether or not faceting has been applied: it is a flat index ([0, 1, 2,
- // …]) when not faceted, and a nested index ([[0, 1, …], [2, 3, …], …])
- // when faceted.
- if (I !== undefined) {
- if (markFacets) {
- for (let j = 0; j < facetsKeys.length; ++j) {
- marksIndexByFacet.get(facetsKeys[j])[i] = I[j];
- }
- } else {
- for (let j = 0; j < facetsKeys.length; ++j) {
- marksIndexByFacet.get(facetsKeys[j])[i] = I;
- }
- }
- }
- for (const [, channel] of markChannels) {
- subchannels.push([, channel]);
- }
- marksChannels.push(markChannels);
- }
- return {index, channels: [...channels, ...subchannels]};
- }
- render(I, scales, _, dimensions, axes) {
- const {marks, marksChannels, marksIndexByFacet} = this;
- const {fx, fy} = scales;
- const fyDomain = fy && fy.domain();
- const fxDomain = fx && fx.domain();
- const fyMargins = fy && {marginTop: 0, marginBottom: 0, height: fy.bandwidth()};
- const fxMargins = fx && {marginRight: 0, marginLeft: 0, width: fx.bandwidth()};
- const subdimensions = {...dimensions, ...fxMargins, ...fyMargins};
- const marksValues = marksChannels.map(channels => applyScales(channels, scales));
- return create("svg:g")
- .call(g => {
- if (fy && axes.y) {
- const axis1 = axes.y, axis2 = nolabel(axis1);
- const j = axis1.labelAnchor === "bottom" ? fyDomain.length - 1 : axis1.labelAnchor === "center" ? fyDomain.length >> 1 : 0;
- const fyDimensions = {...dimensions, ...fyMargins};
- g.selectAll()
- .data(fyDomain)
- .join("g")
- .attr("transform", ky => `translate(0,${fy(ky)})`)
- .append((ky, i) => (i === j ? axis1 : axis2).render(
- fx && where(fxDomain, kx => marksIndexByFacet.has([kx, ky])),
- scales,
- null,
- fyDimensions
- ));
- }
- if (fx && axes.x) {
- const axis1 = axes.x, axis2 = nolabel(axis1);
- const j = axis1.labelAnchor === "right" ? fxDomain.length - 1 : axis1.labelAnchor === "center" ? fxDomain.length >> 1 : 0;
- const {marginLeft, marginRight} = dimensions;
- const fxDimensions = {...dimensions, ...fxMargins, labelMarginLeft: marginLeft, labelMarginRight: marginRight};
- g.selectAll()
- .data(fxDomain)
- .join("g")
- .attr("transform", kx => `translate(${fx(kx)},0)`)
- .append((kx, i) => (i === j ? axis1 : axis2).render(
- fy && where(fyDomain, ky => marksIndexByFacet.has([kx, ky])),
- scales,
- null,
- fxDimensions
- ));
- }
- })
- .call(g => g.selectAll()
- .data(facetKeys(scales).filter(marksIndexByFacet.has, marksIndexByFacet))
- .join("g")
- .attr("transform", facetTranslate(fx, fy))
- .each(function(key) {
- const marksFacetIndex = marksIndexByFacet.get(key);
- for (let i = 0; i < marks.length; ++i) {
- const mark = marks[i];
- const values = marksValues[i];
- let index = marksFacetIndex[i];
- if (mark.filter != null) index = mark.filter(index, marksChannels[i], values);
- const node = mark.render(index, scales, values, subdimensions);
- if (node != null) this.appendChild(node);
- }
- }))
- .node();
- }
-}
-
// Derives a copy of the specified axis with the label disabled.
function nolabel(axis) {
return axis === undefined || axis.label === undefined
diff --git a/test/output/anscombeQuartet.svg b/test/output/anscombeQuartet.svg
index 40e69f9391..72fce4638e 100644
--- a/test/output/anscombeQuartet.svg
+++ b/test/output/anscombeQuartet.svg
@@ -49,134 +49,124 @@
4
series
-
-
-
-
-
- 5
-
-
-
- 10
-
-
-
- 15
-
-
-
-
-
-
-
- 5
-
-
-
- 10
-
-
-
- 15
-
-
-
-
-
-
-
- 5
-
-
-
- 10
-
-
-
- 15
-
-
-
-
-
-
-
- 5
-
-
-
- 10
-
-
-
- 15
- x →
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ 5
+
+
+
+ 10
+
+
+
+ 15
+
+
+
+
+
+ 5
+
+
+
+ 10
+
+
+
+ 15
+
+
+
+
+
+ 5
+
+
+
+ 10
+
+
+
+ 15
+
+
+
+
+
+ 5
+
+
+
+ 10
+
+
+
+ 15
+ x →
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/output/athletesSample.svg b/test/output/athletesSample.svg
index 71824ce710..585d9b84c8 100644
--- a/test/output/athletesSample.svg
+++ b/test/output/athletesSample.svg
@@ -129,522 +129,520 @@
weight →
-
-
-
-
- Aaron Younger
-
-
- Bjorn Hornikel
-
-
- Dusan Mandic
-
-
- Ilia Druzhinin
-
-
- Kosuke Hagino
-
-
- Miguel Ortiz Canavate Ozeki
-
-
- Ryan Pini
-
-
- Yaaqoub Alsaadi
-
-
- Abbey Weitzeil
-
-
- Bronte Barratt
-
-
- Evangelia Papazoglou
-
-
- Jing Zhang
-
-
- Lorena Molinos
-
-
- Natalia Ishchenko
-
-
- Shiwen Ye
-
-
- Yue Cao
-
-
-
-
-
-
- Adrian Andres Puentes Perez
-
-
- Adriana Martin
-
-
-
-
-
-
- A Jesus Garcia
-
-
- Anthony Zambrano
-
-
- Carl Dohmann
-
-
- Dmitry Kroyter
-
-
- Gil Roberts
-
-
- James Ellington
-
-
- Kapririel Kitson
-
-
- Lukas Melich
-
-
- Miguel Francis
-
-
- Paulo Amotun
-
-
- Ronnie Ash
-
-
- Tarik Langat Akdag
-
-
- Yordan L. O'Farrill
-
-
- Aauri Lorena Bokesa
-
-
- Anna Kornuta
-
-
- Chrisann Gordon
-
-
- Eliane Saholinirina
-
-
- Hanna Knyazyeva-Minenko
-
-
- Julia Takacs
-
-
- Marisol Romero
-
-
- Natthaya Thanaronnawat
-
-
- Rosemary Quispe
-
-
- Yasemin Can
-
-
-
-
-
-
- Adam Cwalina
-
-
- Akane Yamaguchi
-
-
-
-
-
-
- Adas Juskevicius
-
-
- Nicolas Laprovittola
-
-
- Adriana Moises
-
-
- Oumoul Thiam
-
-
-
-
-
-
-
-
-
- Adam van Koeverden
-
-
- Jordan Wood
-
-
- Stephen Bird
-
-
- Afef Ben Ismail
-
-
- Ursa Kragelj
-
-
-
-
-
-
- Aaron Gate
-
-
- Georg Preidler
-
-
- Michael Hepburn
-
-
- Toms Skujins
-
-
- Ahreum Na
-
-
- Katrin Garfoot
-
-
-
-
-
-
- Abdelkebir Ouaddar
-
-
- Pedro Tavares de Almeida
-
-
- Adelinde Cornelissen
-
-
-
-
-
-
- A Lam Shin
-
-
- Seona Hwang
-
-
- Richard Kruse
-
-
-
-
-
-
- Abbubaker Mobara
-
-
- Filipe Baravilala
-
-
- Mathias Hebo Rasmussen
-
-
- Abby Erceg
-
-
- Isabel Kerschowski
-
-
- Rebecca Quinn
-
-
-
-
-
-
- Adilson da Silva
-
-
- Aditi Ashok
-
-
-
-
-
-
- Aiko Sugihara
-
-
- Laura Zeng
-
-
- Yeon Jae Son
-
-
- Alexander Naddour
-
-
- Se Gwang Ri
-
-
-
-
-
-
- Abdulrazzaq Murad
-
-
- Makrem Missaoui
-
-
- Ailly Luciano
-
-
- Louise Sand
-
-
-
-
-
-
- Adam Dixon
-
-
- Juan Gilardi
-
-
- Thomas Briels
-
-
- Agustina Albertarrio
-
-
- Kathleen Bam
-
-
- Victoria Zuloaga
-
-
-
-
-
-
- Abderrahmane Benamadi
-
-
- Simon Yacoub
-
-
- Abigel Joo
-
-
- Miku Tashiro
-
-
-
-
-
-
- Adam Marosi
-
-
- Alice Sotero
-
-
-
-
-
-
- Abdelkhalek Elbanna
-
-
- Georgi Bozhilov
-
-
- Matt Langridge
-
-
- Thibault Colard
-
-
- Adelina Bogus
-
-
- Katherine Copeland
-
-
- Weiwei Zhu
-
-
-
-
-
-
- Abbie Brown
-
-
- Marina Bravo
-
-
- Akira Ioane
-
-
- Nicolas Bruzzone
-
-
-
-
-
-
- Afrodite Zegers
-
-
- Ahmed Ragab
-
-
- Juozas Bernotas
-
-
- Tonci Stipanovic
-
-
-
-
-
-
- Abdel Aziz Mehelba
-
-
- Jitu Rai
-
-
- Song Guk Kim
-
-
- Adela Bruns
-
-
- Natallia Kalnysh
-
-
-
-
-
-
- Adam Pattantyus
-
-
- Adriana Diaz
-
-
-
-
-
-
- Aaron Cook
-
-
- Ainur Yesbergenova
-
-
-
-
-
-
- Agnieszka Radwanska
-
-
- Albert Ramos-Vinolas
-
-
- Vasek Pospisil
-
-
-
-
-
-
- Aaron Royle
-
-
- Agnieszka Jerzyk
-
-
-
-
-
-
- Aaron Russell
-
-
- Kostyantyn Bakun
-
-
- Abdoulkarim Fawziya
-
-
- Kotoki Zayasu
-
-
-
-
-
-
- Adrian Edward Zielinski
-
-
- Myeongmok Han
-
-
- Alejandra Garza Garza
-
-
- Yuderqui Maridalia Contreras
-
-
-
-
-
-
- Abbos Rakhmonov
-
-
- Ibragim Labazanov
-
-
- Soslan Ramonov
-
-
- Adela Hanzlickova
-
-
- Valeriia Koblova Zholobova
-
-
+
+
+
+ Aaron Younger
+
+
+ Bjorn Hornikel
+
+
+ Dusan Mandic
+
+
+ Ilia Druzhinin
+
+
+ Kosuke Hagino
+
+
+ Miguel Ortiz Canavate Ozeki
+
+
+ Ryan Pini
+
+
+ Yaaqoub Alsaadi
+
+
+ Abbey Weitzeil
+
+
+ Bronte Barratt
+
+
+ Evangelia Papazoglou
+
+
+ Jing Zhang
+
+
+ Lorena Molinos
+
+
+ Natalia Ishchenko
+
+
+ Shiwen Ye
+
+
+ Yue Cao
+
+
+
+
+
+
+ Adrian Andres Puentes Perez
+
+
+ Adriana Martin
+
+
+
+
+
+
+ A Jesus Garcia
+
+
+ Anthony Zambrano
+
+
+ Carl Dohmann
+
+
+ Dmitry Kroyter
+
+
+ Gil Roberts
+
+
+ James Ellington
+
+
+ Kapririel Kitson
+
+
+ Lukas Melich
+
+
+ Miguel Francis
+
+
+ Paulo Amotun
+
+
+ Ronnie Ash
+
+
+ Tarik Langat Akdag
+
+
+ Yordan L. O'Farrill
+
+
+ Aauri Lorena Bokesa
+
+
+ Anna Kornuta
+
+
+ Chrisann Gordon
+
+
+ Eliane Saholinirina
+
+
+ Hanna Knyazyeva-Minenko
+
+
+ Julia Takacs
+
+
+ Marisol Romero
+
+
+ Natthaya Thanaronnawat
+
+
+ Rosemary Quispe
+
+
+ Yasemin Can
+
+
+
+
+
+
+ Adam Cwalina
+
+
+ Akane Yamaguchi
+
+
+
+
+
+
+ Adas Juskevicius
+
+
+ Nicolas Laprovittola
+
+
+ Adriana Moises
+
+
+ Oumoul Thiam
+
+
+
+
+
+
+
+
+
+ Adam van Koeverden
+
+
+ Jordan Wood
+
+
+ Stephen Bird
+
+
+ Afef Ben Ismail
+
+
+ Ursa Kragelj
+
+
+
+
+
+
+ Aaron Gate
+
+
+ Georg Preidler
+
+
+ Michael Hepburn
+
+
+ Toms Skujins
+
+
+ Ahreum Na
+
+
+ Katrin Garfoot
+
+
+
+
+
+
+ Abdelkebir Ouaddar
+
+
+ Pedro Tavares de Almeida
+
+
+ Adelinde Cornelissen
+
+
+
+
+
+
+ A Lam Shin
+
+
+ Seona Hwang
+
+
+ Richard Kruse
+
+
+
+
+
+
+ Abbubaker Mobara
+
+
+ Filipe Baravilala
+
+
+ Mathias Hebo Rasmussen
+
+
+ Abby Erceg
+
+
+ Isabel Kerschowski
+
+
+ Rebecca Quinn
+
+
+
+
+
+
+ Adilson da Silva
+
+
+ Aditi Ashok
+
+
+
+
+
+
+ Aiko Sugihara
+
+
+ Laura Zeng
+
+
+ Yeon Jae Son
+
+
+ Alexander Naddour
+
+
+ Se Gwang Ri
+
+
+
+
+
+
+ Abdulrazzaq Murad
+
+
+ Makrem Missaoui
+
+
+ Ailly Luciano
+
+
+ Louise Sand
+
+
+
+
+
+
+ Adam Dixon
+
+
+ Juan Gilardi
+
+
+ Thomas Briels
+
+
+ Agustina Albertarrio
+
+
+ Kathleen Bam
+
+
+ Victoria Zuloaga
+
+
+
+
+
+
+ Abderrahmane Benamadi
+
+
+ Simon Yacoub
+
+
+ Abigel Joo
+
+
+ Miku Tashiro
+
+
+
+
+
+
+ Adam Marosi
+
+
+ Alice Sotero
+
+
+
+
+
+
+ Abdelkhalek Elbanna
+
+
+ Georgi Bozhilov
+
+
+ Matt Langridge
+
+
+ Thibault Colard
+
+
+ Adelina Bogus
+
+
+ Katherine Copeland
+
+
+ Weiwei Zhu
+
+
+
+
+
+
+ Abbie Brown
+
+
+ Marina Bravo
+
+
+ Akira Ioane
+
+
+ Nicolas Bruzzone
+
+
+
+
+
+
+ Afrodite Zegers
+
+
+ Ahmed Ragab
+
+
+ Juozas Bernotas
+
+
+ Tonci Stipanovic
+
+
+
+
+
+
+ Abdel Aziz Mehelba
+
+
+ Jitu Rai
+
+
+ Song Guk Kim
+
+
+ Adela Bruns
+
+
+ Natallia Kalnysh
+
+
+
+
+
+
+ Adam Pattantyus
+
+
+ Adriana Diaz
+
+
+
+
+
+
+ Aaron Cook
+
+
+ Ainur Yesbergenova
+
+
+
+
+
+
+ Agnieszka Radwanska
+
+
+ Albert Ramos-Vinolas
+
+
+ Vasek Pospisil
+
+
+
+
+
+
+ Aaron Royle
+
+
+ Agnieszka Jerzyk
+
+
+
+
+
+
+ Aaron Russell
+
+
+ Kostyantyn Bakun
+
+
+ Abdoulkarim Fawziya
+
+
+ Kotoki Zayasu
+
+
+
+
+
+
+ Adrian Edward Zielinski
+
+
+ Myeongmok Han
+
+
+ Alejandra Garza Garza
+
+
+ Yuderqui Maridalia Contreras
+
+
+
+
+
+
+ Abbos Rakhmonov
+
+
+ Ibragim Labazanov
+
+
+ Soslan Ramonov
+
+
+ Adela Hanzlickova
+
+
+ Valeriia Koblova Zholobova
+
\ No newline at end of file
diff --git a/test/output/athletesSportWeight.svg b/test/output/athletesSportWeight.svg
index 5005a8aaf6..948e7cd057 100644
--- a/test/output/athletesSportWeight.svg
+++ b/test/output/athletesSportWeight.svg
@@ -130,950 +130,948 @@
weight →
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/output/ballotStatusRace.svg b/test/output/ballotStatusRace.svg
index 9e75bfe970..fae40f1d94 100644
--- a/test/output/ballotStatusRace.svg
+++ b/test/output/ballotStatusRace.svg
@@ -57,131 +57,129 @@
Frequency (%) →
-
-
-
-
- 79.0%
-
-
- 0.4%
-
-
- 20.5%
-
-
-
-
-
-
-
-
-
- 78.3%
-
-
- 0.6%
-
-
- 21.1%
-
-
-
-
-
-
-
-
-
- 77.9%
-
-
- 21.5%
-
-
- 0.6%
-
-
-
-
-
-
-
-
-
- 74.1%
-
-
- 0.8%
-
-
- 25.1%
-
-
-
-
-
-
-
-
-
- 73.9%
-
-
- 25.3%
-
-
- 0.8%
-
-
-
-
-
-
-
-
-
- 25.5%
-
-
- 72.2%
-
-
- 2.3%
-
-
-
-
-
-
-
-
-
- 67.4%
-
-
- 31.5%
-
-
- 1.1%
-
-
-
-
-
-
-
-
-
- 41.7%
-
-
- 58.3%
-
-
-
-
-
+
+
+
+ 79.0%
+
+
+ 0.4%
+
+
+ 20.5%
+
+
+
+
+
+
+
+
+
+ 78.3%
+
+
+ 0.6%
+
+
+ 21.1%
+
+
+
+
+
+
+
+
+
+ 77.9%
+
+
+ 21.5%
+
+
+ 0.6%
+
+
+
+
+
+
+
+
+
+ 74.1%
+
+
+ 0.8%
+
+
+ 25.1%
+
+
+
+
+
+
+
+
+
+ 73.9%
+
+
+ 25.3%
+
+
+ 0.8%
+
+
+
+
+
+
+
+
+
+ 25.5%
+
+
+ 72.2%
+
+
+ 2.3%
+
+
+
+
+
+
+
+
+
+ 67.4%
+
+
+ 31.5%
+
+
+ 1.1%
+
+
+
+
+
+
+
+
+
+ 41.7%
+
+
+ 58.3%
+
+
+
+
\ No newline at end of file
diff --git a/test/output/beckerBarley.svg b/test/output/beckerBarley.svg
index a131551c86..ebcd8ae1a7 100644
--- a/test/output/beckerBarley.svg
+++ b/test/output/beckerBarley.svg
@@ -63,420 +63,406 @@
yield →
-
-
-
-
-
- Trebi
-
-
-
- Wisconsin No. 38
-
-
-
- No. 457
-
-
-
- Glabron
-
-
-
- Peatland
-
-
-
- Velvet
-
-
-
- No. 475
-
-
-
- Manchuria
-
-
-
- No. 462
-
-
-
- Svansota
-
-
-
-
-
-
-
- Trebi
-
-
-
- Wisconsin No. 38
-
-
-
- No. 457
-
-
-
- Glabron
-
-
-
- Peatland
-
-
-
- Velvet
-
-
-
- No. 475
-
-
-
- Manchuria
-
-
-
- No. 462
-
-
-
- Svansota
-
-
-
-
-
-
-
- Trebi
-
-
-
- Wisconsin No. 38
-
-
-
- No. 457
-
-
-
- Glabron
-
-
-
- Peatland
-
-
-
- Velvet
-
-
-
- No. 475
-
-
-
- Manchuria
-
-
-
- No. 462
-
-
-
- Svansota
-
-
-
-
-
-
-
- Trebi
-
-
-
- Wisconsin No. 38
-
-
-
- No. 457
-
-
-
- Glabron
-
-
-
- Peatland
-
-
-
- Velvet
-
-
-
- No. 475
-
-
-
- Manchuria
-
-
-
- No. 462
-
-
-
- Svansota
- variety
-
-
-
-
-
-
- Trebi
-
-
-
- Wisconsin No. 38
-
-
-
- No. 457
-
-
-
- Glabron
-
-
-
- Peatland
-
-
-
- Velvet
-
-
-
- No. 475
-
-
-
- Manchuria
-
-
-
- No. 462
-
-
-
- Svansota
-
-
-
-
-
-
-
- Trebi
-
-
-
- Wisconsin No. 38
-
-
-
- No. 457
-
-
-
- Glabron
-
-
-
- Peatland
-
-
-
- Velvet
-
-
-
- No. 475
-
-
-
- Manchuria
-
-
-
- No. 462
-
-
-
- Svansota
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ Trebi
+
+
+
+ Wisconsin No. 38
+
+
+
+ No. 457
+
+
+
+ Glabron
+
+
+
+ Peatland
+
+
+
+ Velvet
+
+
+
+ No. 475
+
+
+
+ Manchuria
+
+
+
+ No. 462
+
+
+
+ Svansota
+
+
+
+
+
+ Trebi
+
+
+
+ Wisconsin No. 38
+
+
+
+ No. 457
+
+
+
+ Glabron
+
+
+
+ Peatland
+
+
+
+ Velvet
+
+
+
+ No. 475
+
+
+
+ Manchuria
+
+
+
+ No. 462
+
+
+
+ Svansota
+
+
+
+
+
+ Trebi
+
+
+
+ Wisconsin No. 38
+
+
+
+ No. 457
+
+
+
+ Glabron
+
+
+
+ Peatland
+
+
+
+ Velvet
+
+
+
+ No. 475
+
+
+
+ Manchuria
+
+
+
+ No. 462
+
+
+
+ Svansota
+
+
+
+
+
+ Trebi
+
+
+
+ Wisconsin No. 38
+
+
+
+ No. 457
+
+
+
+ Glabron
+
+
+
+ Peatland
+
+
+
+ Velvet
+
+
+
+ No. 475
+
+
+
+ Manchuria
+
+
+
+ No. 462
+
+
+
+ Svansota
+ variety
+
+
+
+
+ Trebi
+
+
+
+ Wisconsin No. 38
+
+
+
+ No. 457
+
+
+
+ Glabron
+
+
+
+ Peatland
+
+
+
+ Velvet
+
+
+
+ No. 475
+
+
+
+ Manchuria
+
+
+
+ No. 462
+
+
+
+ Svansota
+
+
+
+
+
+ Trebi
+
+
+
+ Wisconsin No. 38
+
+
+
+ No. 457
+
+
+
+ Glabron
+
+
+
+ Peatland
+
+
+
+ Velvet
+
+
+
+ No. 475
+
+
+
+ Manchuria
+
+
+
+ No. 462
+
+
+
+ Svansota
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/output/caltrainDirection.svg b/test/output/caltrainDirection.svg
index e23db48b08..ad5130abf2 100644
--- a/test/output/caltrainDirection.svg
+++ b/test/output/caltrainDirection.svg
@@ -47,96 +47,94 @@
12 AM
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/output/footballCoverage.svg b/test/output/footballCoverage.svg
index ceccf3c420..05f2a4ee5f 100644
--- a/test/output/footballCoverage.svg
+++ b/test/output/footballCoverage.svg
@@ -82,265 +82,263 @@
T2
coverage
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/output/googleTrendsRidgeline.svg b/test/output/googleTrendsRidgeline.svg
index 60b0ece5e0..b52586bdef 100644
--- a/test/output/googleTrendsRidgeline.svg
+++ b/test/output/googleTrendsRidgeline.svg
@@ -245,710 +245,708 @@
December
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/output/industryUnemploymentTrack.svg b/test/output/industryUnemploymentTrack.svg
index b39d3d98b8..476a55fec0 100644
--- a/test/output/industryUnemploymentTrack.svg
+++ b/test/output/industryUnemploymentTrack.svg
@@ -77,5326 +77,5324 @@
2010
-
-
-
-
- 745
-
-
- 812
-
-
- 669
-
-
- 447
-
-
- 397
-
-
- 389
-
-
- 384
-
-
- 446
-
-
- 386
-
-
- 417
-
-
- 482
-
-
- 580
-
-
- 836
-
-
- 826
-
-
- 683
-
-
- 596
-
-
- 478
-
-
- 443
-
-
- 447
-
-
- 522
-
-
- 489
-
-
- 535
-
-
- 670
-
-
- 785
-
-
- 1,211
-
-
- 1,060
-
-
- 1,009
-
-
- 855
-
-
- 626
-
-
- 593
-
-
- 594
-
-
- 654
-
-
- 615
-
-
- 680
-
-
- 758
-
-
- 941
-
-
- 1,196
-
-
- 1,173
-
-
- 987
-
-
- 772
-
-
- 715
-
-
- 710
-
-
- 677
-
-
- 650
-
-
- 681
-
-
- 651
-
-
- 690
-
-
- 813
-
-
- 994
-
-
- 1,039
-
-
- 1,011
-
-
- 849
-
-
- 665
-
-
- 668
-
-
- 610
-
-
- 563
-
-
- 629
-
-
- 635
-
-
- 695
-
-
- 870
-
-
- 1,079
-
-
- 1,150
-
-
- 961
-
-
- 693
-
-
- 567
-
-
- 559
-
-
- 509
-
-
- 561
-
-
- 572
-
-
- 519
-
-
- 564
-
-
- 813
-
-
- 868
-
-
- 836
-
-
- 820
-
-
- 674
-
-
- 647
-
-
- 569
-
-
- 633
-
-
- 618
-
-
- 586
-
-
- 456
-
-
- 618
-
-
- 725
-
-
- 922
-
-
- 1,086
-
-
- 924
-
-
- 853
-
-
- 676
-
-
- 600
-
-
- 617
-
-
- 558
-
-
- 596
-
-
- 641
-
-
- 645
-
-
- 968
-
-
- 1,099
-
-
- 1,118
-
-
- 1,170
-
-
- 1,057
-
-
- 809
-
-
- 785
-
-
- 783
-
-
- 814
-
-
- 970
-
-
- 1,078
-
-
- 1,237
-
-
- 1,438
-
-
- 1,744
-
-
- 2,025
-
-
- 1,979
-
-
- 1,737
-
-
- 1,768
-
-
- 1,601
-
-
- 1,687
-
-
- 1,542
-
-
- 1,594
-
-
- 1,744
-
-
- 1,780
-
-
- 2,044
-
-
- 2,194
-
-
- 2,440
-
-
-
-
- 2,440
-
-
-
-
- 384
-
-
+
+
+
+ 745
+
+
+ 812
+
+
+ 669
+
+
+ 447
+
+
+ 397
+
+
+ 389
+
+
+ 384
+
+
+ 446
+
+
+ 386
+
+
+ 417
+
+
+ 482
+
+
+ 580
+
+
+ 836
+
+
+ 826
+
+
+ 683
+
+
+ 596
+
+
+ 478
+
+
+ 443
+
+
+ 447
+
+
+ 522
+
+
+ 489
+
+
+ 535
+
+
+ 670
+
+
+ 785
+
+
+ 1,211
+
+
+ 1,060
+
+
+ 1,009
+
+
+ 855
+
+
+ 626
+
+
+ 593
+
+
+ 594
+
+
+ 654
+
+
+ 615
+
+
+ 680
+
+
+ 758
+
+
+ 941
+
+
+ 1,196
+
+
+ 1,173
+
+
+ 987
+
+
+ 772
+
+
+ 715
+
+
+ 710
+
+
+ 677
+
+
+ 650
+
+
+ 681
+
+
+ 651
+
+
+ 690
+
+
+ 813
+
+
+ 994
+
+
+ 1,039
+
+
+ 1,011
+
+
+ 849
+
+
+ 665
+
+
+ 668
+
+
+ 610
+
+
+ 563
+
+
+ 629
+
+
+ 635
+
+
+ 695
+
+
+ 870
+
+
+ 1,079
+
+
+ 1,150
+
+
+ 961
+
+
+ 693
+
+
+ 567
+
+
+ 559
+
+
+ 509
+
+
+ 561
+
+
+ 572
+
+
+ 519
+
+
+ 564
+
+
+ 813
+
+
+ 868
+
+
+ 836
+
+
+ 820
+
+
+ 674
+
+
+ 647
+
+
+ 569
+
+
+ 633
+
+
+ 618
+
+
+ 586
+
+
+ 456
+
+
+ 618
+
+
+ 725
+
+
+ 922
+
+
+ 1,086
+
+
+ 924
+
+
+ 853
+
+
+ 676
+
+
+ 600
+
+
+ 617
+
+
+ 558
+
+
+ 596
+
+
+ 641
+
+
+ 645
+
+
+ 968
+
+
+ 1,099
+
+
+ 1,118
+
+
+ 1,170
+
+
+ 1,057
+
+
+ 809
+
+
+ 785
+
+
+ 783
+
+
+ 814
+
+
+ 970
+
+
+ 1,078
+
+
+ 1,237
+
+
+ 1,438
+
+
+ 1,744
+
+
+ 2,025
+
+
+ 1,979
+
+
+ 1,737
+
+
+ 1,768
+
+
+ 1,601
+
+
+ 1,687
+
+
+ 1,542
+
+
+ 1,594
+
+
+ 1,744
+
+
+ 1,780
+
+
+ 2,044
+
+
+ 2,194
+
+
+ 2,440
+
-
-
-
- 1,000
-
-
- 1,023
-
-
- 983
-
-
- 793
-
-
- 821
-
-
- 837
-
-
- 792
-
-
- 853
-
-
- 791
-
-
- 739
-
-
- 701
-
-
- 715
-
-
- 908
-
-
- 990
-
-
- 1,037
-
-
- 820
-
-
- 875
-
-
- 955
-
-
- 833
-
-
- 928
-
-
- 936
-
-
- 941
-
-
- 1,046
-
-
- 1,074
-
-
- 1,212
-
-
- 1,264
-
-
- 1,269
-
-
- 1,222
-
-
- 1,138
-
-
- 1,240
-
-
- 1,132
-
-
- 1,170
-
-
- 1,171
-
-
- 1,212
-
-
- 1,242
-
-
- 1,150
-
-
- 1,342
-
-
- 1,238
-
-
- 1,179
-
-
- 1,201
-
-
- 1,247
-
-
- 1,434
-
-
- 1,387
-
-
- 1,161
-
-
- 1,229
-
-
- 1,189
-
-
- 1,156
-
-
- 1,081
-
-
- 1,389
-
-
- 1,369
-
-
- 1,386
-
-
- 1,248
-
-
- 1,183
-
-
- 1,182
-
-
- 1,163
-
-
- 1,079
-
-
- 1,127
-
-
- 1,138
-
-
- 1,045
-
-
- 1,058
-
-
- 1,302
-
-
- 1,301
-
-
- 1,173
-
-
- 1,131
-
-
- 1,145
-
-
- 1,197
-
-
- 1,194
-
-
- 1,130
-
-
- 1,038
-
-
- 1,050
-
-
- 1,013
-
-
- 968
-
-
- 1,203
-
-
- 1,141
-
-
- 1,022
-
-
- 972
-
-
- 1,025
-
-
- 1,085
-
-
- 1,083
-
-
- 977
-
-
- 1,008
-
-
- 972
-
-
- 1,018
-
-
- 965
-
-
- 1,166
-
-
- 1,045
-
-
- 896
-
-
- 872
-
-
- 795
-
-
- 979
-
-
- 1,089
-
-
- 1,028
-
-
- 1,027
-
-
- 907
-
-
- 893
-
-
- 1,009
-
-
- 1,120
-
-
- 1,007
-
-
- 992
-
-
- 919
-
-
- 1,049
-
-
- 1,160
-
-
- 1,329
-
-
- 1,366
-
-
- 1,277
-
-
- 1,313
-
-
- 1,397
-
-
- 1,535
-
-
- 1,794
-
-
- 1,847
-
-
- 1,852
-
-
- 1,833
-
-
- 1,835
-
-
- 1,863
-
-
- 1,854
-
-
- 1,794
-
-
- 1,809
-
-
- 1,919
-
-
- 1,879
-
-
- 1,851
-
-
- 2,154
-
-
- 2,071
-
-
-
-
- 2,154
-
-
-
-
- 701
-
-
+
+
+ 2,440
+
-
-
-
- 734
-
-
- 694
-
-
- 739
-
-
- 736
-
-
- 685
-
-
- 621
-
-
- 708
-
-
- 685
-
-
- 667
-
-
- 693
-
-
- 672
-
-
- 653
-
-
- 911
-
-
- 902
-
-
- 954
-
-
- 855
-
-
- 903
-
-
- 956
-
-
- 1,054
-
-
- 1,023
-
-
- 996
-
-
- 1,065
-
-
- 1,108
-
-
- 1,172
-
-
- 1,377
-
-
- 1,296
-
-
- 1,367
-
-
- 1,322
-
-
- 1,194
-
-
- 1,187
-
-
- 1,185
-
-
- 1,108
-
-
- 1,076
-
-
- 1,046
-
-
- 1,115
-
-
- 1,188
-
-
- 1,302
-
-
- 1,229
-
-
- 1,222
-
-
- 1,199
-
-
- 1,150
-
-
- 1,232
-
-
- 1,193
-
-
- 1,186
-
-
- 1,175
-
-
- 1,041
-
-
- 1,034
-
-
- 1,025
-
-
- 1,110
-
-
- 1,094
-
-
- 1,083
-
-
- 1,004
-
-
- 966
-
-
- 957
-
-
- 1,019
-
-
- 840
-
-
- 852
-
-
- 884
-
-
- 905
-
-
- 872
-
-
- 889
-
-
- 889
-
-
- 879
-
-
- 793
-
-
- 743
-
-
- 743
-
-
- 883
-
-
- 767
-
-
- 775
-
-
- 800
-
-
- 823
-
-
- 757
-
-
- 778
-
-
- 821
-
-
- 701
-
-
- 745
-
-
- 680
-
-
- 635
-
-
- 736
-
-
- 680
-
-
- 632
-
-
- 618
-
-
- 702
-
-
- 660
-
-
- 752
-
-
- 774
-
-
- 742
-
-
- 749
-
-
- 651
-
-
- 653
-
-
- 621
-
-
- 596
-
-
- 673
-
-
- 729
-
-
- 762
-
-
- 772
-
-
- 837
-
-
- 820
-
-
- 831
-
-
- 796
-
-
- 879
-
-
- 862
-
-
- 908
-
-
- 960
-
-
- 984
-
-
- 1,007
-
-
- 1,144
-
-
- 1,315
-
-
- 1,711
-
-
- 1,822
-
-
- 1,912
-
-
- 1,968
-
-
- 2,010
-
-
- 2,010
-
-
- 1,988
-
-
- 1,866
-
-
- 1,876
-
-
- 1,884
-
-
- 1,882
-
-
- 1,747
-
-
- 1,918
-
-
- 1,814
-
-
-
-
- 2,010
-
-
-
-
- 596
-
-
+
+
+ 384
+
-
-
-
- 782
-
-
- 779
-
-
- 789
-
-
- 658
-
-
- 675
-
-
- 833
-
-
- 786
-
-
- 675
-
-
- 636
-
-
- 691
-
-
- 694
-
-
- 639
-
-
- 806
-
-
- 821
-
-
- 817
-
-
- 744
-
-
- 731
-
-
- 821
-
-
- 813
-
-
- 767
-
-
- 900
-
-
- 903
-
-
- 935
-
-
- 938
-
-
- 947
-
-
- 973
-
-
- 976
-
-
- 953
-
-
- 1,022
-
-
- 1,034
-
-
- 999
-
-
- 884
-
-
- 885
-
-
- 956
-
-
- 978
-
-
- 922
-
-
- 1,049
-
-
- 1,145
-
-
- 1,035
-
-
- 986
-
-
- 955
-
-
- 1,048
-
-
- 1,020
-
-
- 1,050
-
-
- 978
-
-
- 933
-
-
- 990
-
-
- 885
-
-
- 1,097
-
-
- 987
-
-
- 1,039
-
-
- 925
-
-
- 977
-
-
- 1,189
-
-
- 965
-
-
- 1,010
-
-
- 854
-
-
- 853
-
-
- 916
-
-
- 850
-
-
- 993
-
-
- 1,008
-
-
- 967
-
-
- 882
-
-
- 944
-
-
- 950
-
-
- 929
-
-
- 844
-
-
- 842
-
-
- 796
-
-
- 966
-
-
- 930
-
-
- 910
-
-
- 1,040
-
-
- 917
-
-
- 882
-
-
- 830
-
-
- 942
-
-
- 867
-
-
- 855
-
-
- 810
-
-
- 795
-
-
- 836
-
-
- 701
-
-
- 911
-
-
- 879
-
-
- 845
-
-
- 822
-
-
- 831
-
-
- 917
-
-
- 920
-
-
- 877
-
-
- 892
-
-
- 911
-
-
- 986
-
-
- 961
-
-
- 1,176
-
-
- 1,056
-
-
- 944
-
-
- 874
-
-
- 1,074
-
-
- 1,154
-
-
- 1,172
-
-
- 1,122
-
-
- 1,029
-
-
- 1,126
-
-
- 1,283
-
-
- 1,210
-
-
- 1,487
-
-
- 1,477
-
-
- 1,484
-
-
- 1,322
-
-
- 1,599
-
-
- 1,688
-
-
- 1,600
-
-
- 1,636
-
-
- 1,469
-
-
- 1,604
-
-
- 1,524
-
-
- 1,624
-
-
- 1,804
-
-
- 1,597
-
-
-
-
- 1,804
-
-
-
-
- 636
-
-
+
+
+
+
+ 1,000
+
+
+ 1,023
+
+
+ 983
+
+
+ 793
+
+
+ 821
+
+
+ 837
+
+
+ 792
+
+
+ 853
+
+
+ 791
+
+
+ 739
+
+
+ 701
+
+
+ 715
+
+
+ 908
+
+
+ 990
+
+
+ 1,037
+
+
+ 820
+
+
+ 875
+
+
+ 955
+
+
+ 833
+
+
+ 928
+
+
+ 936
+
+
+ 941
+
+
+ 1,046
+
+
+ 1,074
+
+
+ 1,212
+
+
+ 1,264
+
+
+ 1,269
+
+
+ 1,222
+
+
+ 1,138
+
+
+ 1,240
+
+
+ 1,132
+
+
+ 1,170
+
+
+ 1,171
+
+
+ 1,212
+
+
+ 1,242
+
+
+ 1,150
+
+
+ 1,342
+
+
+ 1,238
+
+
+ 1,179
+
+
+ 1,201
+
+
+ 1,247
+
+
+ 1,434
+
+
+ 1,387
+
+
+ 1,161
+
+
+ 1,229
+
+
+ 1,189
+
+
+ 1,156
+
+
+ 1,081
+
+
+ 1,389
+
+
+ 1,369
+
+
+ 1,386
+
+
+ 1,248
+
+
+ 1,183
+
+
+ 1,182
+
+
+ 1,163
+
+
+ 1,079
+
+
+ 1,127
+
+
+ 1,138
+
+
+ 1,045
+
+
+ 1,058
+
+
+ 1,302
+
+
+ 1,301
+
+
+ 1,173
+
+
+ 1,131
+
+
+ 1,145
+
+
+ 1,197
+
+
+ 1,194
+
+
+ 1,130
+
+
+ 1,038
+
+
+ 1,050
+
+
+ 1,013
+
+
+ 968
+
+
+ 1,203
+
+
+ 1,141
+
+
+ 1,022
+
+
+ 972
+
+
+ 1,025
+
+
+ 1,085
+
+
+ 1,083
+
+
+ 977
+
+
+ 1,008
+
+
+ 972
+
+
+ 1,018
+
+
+ 965
+
+
+ 1,166
+
+
+ 1,045
+
+
+ 896
+
+
+ 872
+
+
+ 795
+
+
+ 979
+
+
+ 1,089
+
+
+ 1,028
+
+
+ 1,027
+
+
+ 907
+
+
+ 893
+
+
+ 1,009
+
+
+ 1,120
+
+
+ 1,007
+
+
+ 992
+
+
+ 919
+
+
+ 1,049
+
+
+ 1,160
+
+
+ 1,329
+
+
+ 1,366
+
+
+ 1,277
+
+
+ 1,313
+
+
+ 1,397
+
+
+ 1,535
+
+
+ 1,794
+
+
+ 1,847
+
+
+ 1,852
+
+
+ 1,833
+
+
+ 1,835
+
+
+ 1,863
+
+
+ 1,854
+
+
+ 1,794
+
+
+ 1,809
+
+
+ 1,919
+
+
+ 1,879
+
+
+ 1,851
+
+
+ 2,154
+
+
+ 2,071
+
+
+
+
+ 2,154
+
+
+
+
+ 701
+
-
-
-
- 655
-
-
- 587
-
-
- 623
-
-
- 517
-
-
- 561
-
-
- 545
-
-
- 636
-
-
- 584
-
-
- 559
-
-
- 504
-
-
- 547
-
-
- 564
-
-
- 734
-
-
- 724
-
-
- 652
-
-
- 655
-
-
- 652
-
-
- 694
-
-
- 731
-
-
- 790
-
-
- 810
-
-
- 910
-
-
- 946
-
-
- 921
-
-
- 1,120
-
-
- 973
-
-
- 964
-
-
- 951
-
-
- 983
-
-
- 1,079
-
-
- 1,075
-
-
- 926
-
-
- 1,007
-
-
- 962
-
-
- 1,029
-
-
- 1,038
-
-
- 1,112
-
-
- 1,140
-
-
- 1,190
-
-
- 1,076
-
-
- 1,105
-
-
- 1,092
-
-
- 1,021
-
-
- 881
-
-
- 975
-
-
- 1,014
-
-
- 948
-
-
- 948
-
-
- 1,070
-
-
- 964
-
-
- 999
-
-
- 752
-
-
- 819
-
-
- 814
-
-
- 790
-
-
- 845
-
-
- 750
-
-
- 781
-
-
- 872
-
-
- 875
-
-
- 958
-
-
- 916
-
-
- 807
-
-
- 714
-
-
- 730
-
-
- 743
-
-
- 804
-
-
- 728
-
-
- 862
-
-
- 748
-
-
- 711
-
-
- 788
-
-
- 825
-
-
- 841
-
-
- 824
-
-
- 644
-
-
- 695
-
-
- 753
-
-
- 735
-
-
- 681
-
-
- 736
-
-
- 768
-
-
- 658
-
-
- 791
-
-
- 885
-
-
- 825
-
-
- 775
-
-
- 689
-
-
- 743
-
-
- 722
-
-
- 743
-
-
- 683
-
-
- 655
-
-
- 675
-
-
- 679
-
-
- 803
-
-
- 893
-
-
- 866
-
-
- 876
-
-
- 736
-
-
- 829
-
-
- 890
-
-
- 866
-
-
- 961
-
-
- 951
-
-
- 1,052
-
-
- 992
-
-
- 1,147
-
-
- 1,445
-
-
- 1,512
-
-
- 1,597
-
-
- 1,448
-
-
- 1,514
-
-
- 1,580
-
-
- 1,531
-
-
- 1,560
-
-
- 1,596
-
-
- 1,488
-
-
- 1,514
-
-
- 1,486
-
-
- 1,614
-
-
- 1,740
-
-
-
-
- 1,740
-
-
-
-
- 504
-
-
+
+
+
+
+ 734
+
+
+ 694
+
+
+ 739
+
+
+ 736
+
+
+ 685
+
+
+ 621
+
+
+ 708
+
+
+ 685
+
+
+ 667
+
+
+ 693
+
+
+ 672
+
+
+ 653
+
+
+ 911
+
+
+ 902
+
+
+ 954
+
+
+ 855
+
+
+ 903
+
+
+ 956
+
+
+ 1,054
+
+
+ 1,023
+
+
+ 996
+
+
+ 1,065
+
+
+ 1,108
+
+
+ 1,172
+
+
+ 1,377
+
+
+ 1,296
+
+
+ 1,367
+
+
+ 1,322
+
+
+ 1,194
+
+
+ 1,187
+
+
+ 1,185
+
+
+ 1,108
+
+
+ 1,076
+
+
+ 1,046
+
+
+ 1,115
+
+
+ 1,188
+
+
+ 1,302
+
+
+ 1,229
+
+
+ 1,222
+
+
+ 1,199
+
+
+ 1,150
+
+
+ 1,232
+
+
+ 1,193
+
+
+ 1,186
+
+
+ 1,175
+
+
+ 1,041
+
+
+ 1,034
+
+
+ 1,025
+
+
+ 1,110
+
+
+ 1,094
+
+
+ 1,083
+
+
+ 1,004
+
+
+ 966
+
+
+ 957
+
+
+ 1,019
+
+
+ 840
+
+
+ 852
+
+
+ 884
+
+
+ 905
+
+
+ 872
+
+
+ 889
+
+
+ 889
+
+
+ 879
+
+
+ 793
+
+
+ 743
+
+
+ 743
+
+
+ 883
+
+
+ 767
+
+
+ 775
+
+
+ 800
+
+
+ 823
+
+
+ 757
+
+
+ 778
+
+
+ 821
+
+
+ 701
+
+
+ 745
+
+
+ 680
+
+
+ 635
+
+
+ 736
+
+
+ 680
+
+
+ 632
+
+
+ 618
+
+
+ 702
+
+
+ 660
+
+
+ 752
+
+
+ 774
+
+
+ 742
+
+
+ 749
+
+
+ 651
+
+
+ 653
+
+
+ 621
+
+
+ 596
+
+
+ 673
+
+
+ 729
+
+
+ 762
+
+
+ 772
+
+
+ 837
+
+
+ 820
+
+
+ 831
+
+
+ 796
+
+
+ 879
+
+
+ 862
+
+
+ 908
+
+
+ 960
+
+
+ 984
+
+
+ 1,007
+
+
+ 1,144
+
+
+ 1,315
+
+
+ 1,711
+
+
+ 1,822
+
+
+ 1,912
+
+
+ 1,968
+
+
+ 2,010
+
+
+ 2,010
+
+
+ 1,988
+
+
+ 1,866
+
+
+ 1,876
+
+
+ 1,884
+
+
+ 1,882
+
+
+ 1,747
+
+
+ 1,918
+
+
+ 1,814
+
+
+
+
+ 2,010
+
-
-
-
- 353
-
-
- 349
-
-
- 381
-
-
- 329
-
-
- 423
-
-
- 452
-
-
- 478
-
-
- 450
-
-
- 398
-
-
- 339
-
-
- 351
-
-
- 293
-
-
- 428
-
-
- 423
-
-
- 456
-
-
- 341
-
-
- 390
-
-
- 476
-
-
- 513
-
-
- 595
-
-
- 455
-
-
- 486
-
-
- 516
-
-
- 483
-
-
- 586
-
-
- 590
-
-
- 540
-
-
- 493
-
-
- 533
-
-
- 638
-
-
- 671
-
-
- 660
-
-
- 562
-
-
- 517
-
-
- 493
-
-
- 558
-
-
- 559
-
-
- 576
-
-
- 518
-
-
- 611
-
-
- 618
-
-
- 769
-
-
- 697
-
-
- 760
-
-
- 649
-
-
- 639
-
-
- 662
-
-
- 620
-
-
- 662
-
-
- 608
-
-
- 584
-
-
- 589
-
-
- 570
-
-
- 769
-
-
- 725
-
-
- 647
-
-
- 593
-
-
- 526
-
-
- 570
-
-
- 562
-
-
- 613
-
-
- 619
-
-
- 614
-
-
- 591
-
-
- 648
-
-
- 667
-
-
- 635
-
-
- 644
-
-
- 658
-
-
- 628
-
-
- 677
-
-
- 529
-
-
- 593
-
-
- 528
-
-
- 563
-
-
- 558
-
-
- 543
-
-
- 617
-
-
- 659
-
-
- 611
-
-
- 576
-
-
- 531
-
-
- 536
-
-
- 502
-
-
- 563
-
-
- 489
-
-
- 495
-
-
- 555
-
-
- 622
-
-
- 653
-
-
- 665
-
-
- 648
-
-
- 630
-
-
- 534
-
-
- 526
-
-
- 521
-
-
- 576
-
-
- 562
-
-
- 609
-
-
- 551
-
-
- 619
-
-
- 669
-
-
- 776
-
-
- 844
-
-
- 835
-
-
- 797
-
-
- 748
-
-
- 791
-
-
- 792
-
-
- 847
-
-
- 931
-
-
- 964
-
-
- 1,005
-
-
- 1,267
-
-
- 1,269
-
-
- 1,239
-
-
- 1,257
-
-
- 1,280
-
-
- 1,168
-
-
- 1,183
-
-
- 1,175
-
-
- 1,200
-
-
-
-
- 1,280
-
-
-
-
- 293
-
-
+
+
+ 596
+
-
-
-
- 430
-
-
- 409
-
-
- 311
-
-
- 269
-
-
- 370
-
-
- 603
-
-
- 545
-
-
- 583
-
-
- 408
-
-
- 391
-
-
- 384
-
-
- 365
-
-
- 463
-
-
- 298
-
-
- 355
-
-
- 369
-
-
- 361
-
-
- 525
-
-
- 548
-
-
- 540
-
-
- 438
-
-
- 429
-
-
- 420
-
-
- 419
-
-
- 486
-
-
- 508
-
-
- 477
-
-
- 447
-
-
- 484
-
-
- 561
-
-
- 645
-
-
- 596
-
-
- 530
-
-
- 499
-
-
- 468
-
-
- 446
-
-
- 571
-
-
- 483
-
-
- 526
-
-
- 440
-
-
- 478
-
-
- 704
-
-
- 749
-
-
- 745
-
-
- 556
-
-
- 500
-
-
- 542
-
-
- 516
-
-
- 511
-
-
- 490
-
-
- 530
-
-
- 433
-
-
- 468
-
-
- 580
-
-
- 741
-
-
- 676
-
-
- 568
-
-
- 561
-
-
- 514
-
-
- 499
-
-
- 555
-
-
- 472
-
-
- 468
-
-
- 478
-
-
- 453
-
-
- 681
-
-
- 683
-
-
- 664
-
-
- 568
-
-
- 502
-
-
- 494
-
-
- 393
-
-
- 457
-
-
- 472
-
-
- 461
-
-
- 414
-
-
- 429
-
-
- 578
-
-
- 659
-
-
- 595
-
-
- 396
-
-
- 424
-
-
- 400
-
-
- 395
-
-
- 476
-
-
- 405
-
-
- 419
-
-
- 408
-
-
- 428
-
-
- 572
-
-
- 704
-
-
- 695
-
-
- 525
-
-
- 492
-
-
- 482
-
-
- 451
-
-
- 471
-
-
- 372
-
-
- 425
-
-
- 373
-
-
- 461
-
-
- 654
-
-
- 770
-
-
- 721
-
-
- 573
-
-
- 552
-
-
- 527
-
-
- 511
-
-
- 652
-
-
- 563
-
-
- 598
-
-
- 575
-
-
- 702
-
-
- 991
-
-
- 1,129
-
-
- 1,118
-
-
- 928
-
-
- 785
-
-
- 748
-
-
- 797
-
-
- 948
-
-
- 880
-
-
-
-
- 1,129
-
-
-
-
- 269
-
-
+
+
+
+
+ 782
+
+
+ 779
+
+
+ 789
+
+
+ 658
+
+
+ 675
+
+
+ 833
+
+
+ 786
+
+
+ 675
+
+
+ 636
+
+
+ 691
+
+
+ 694
+
+
+ 639
+
+
+ 806
+
+
+ 821
+
+
+ 817
+
+
+ 744
+
+
+ 731
+
+
+ 821
+
+
+ 813
+
+
+ 767
+
+
+ 900
+
+
+ 903
+
+
+ 935
+
+
+ 938
+
+
+ 947
+
+
+ 973
+
+
+ 976
+
+
+ 953
+
+
+ 1,022
+
+
+ 1,034
+
+
+ 999
+
+
+ 884
+
+
+ 885
+
+
+ 956
+
+
+ 978
+
+
+ 922
+
+
+ 1,049
+
+
+ 1,145
+
+
+ 1,035
+
+
+ 986
+
+
+ 955
+
+
+ 1,048
+
+
+ 1,020
+
+
+ 1,050
+
+
+ 978
+
+
+ 933
+
+
+ 990
+
+
+ 885
+
+
+ 1,097
+
+
+ 987
+
+
+ 1,039
+
+
+ 925
+
+
+ 977
+
+
+ 1,189
+
+
+ 965
+
+
+ 1,010
+
+
+ 854
+
+
+ 853
+
+
+ 916
+
+
+ 850
+
+
+ 993
+
+
+ 1,008
+
+
+ 967
+
+
+ 882
+
+
+ 944
+
+
+ 950
+
+
+ 929
+
+
+ 844
+
+
+ 842
+
+
+ 796
+
+
+ 966
+
+
+ 930
+
+
+ 910
+
+
+ 1,040
+
+
+ 917
+
+
+ 882
+
+
+ 830
+
+
+ 942
+
+
+ 867
+
+
+ 855
+
+
+ 810
+
+
+ 795
+
+
+ 836
+
+
+ 701
+
+
+ 911
+
+
+ 879
+
+
+ 845
+
+
+ 822
+
+
+ 831
+
+
+ 917
+
+
+ 920
+
+
+ 877
+
+
+ 892
+
+
+ 911
+
+
+ 986
+
+
+ 961
+
+
+ 1,176
+
+
+ 1,056
+
+
+ 944
+
+
+ 874
+
+
+ 1,074
+
+
+ 1,154
+
+
+ 1,172
+
+
+ 1,122
+
+
+ 1,029
+
+
+ 1,126
+
+
+ 1,283
+
+
+ 1,210
+
+
+ 1,487
+
+
+ 1,477
+
+
+ 1,484
+
+
+ 1,322
+
+
+ 1,599
+
+
+ 1,688
+
+
+ 1,600
+
+
+ 1,636
+
+
+ 1,469
+
+
+ 1,604
+
+
+ 1,524
+
+
+ 1,624
+
+
+ 1,804
+
+
+ 1,597
+
-
-
-
- 239
-
-
- 262
-
-
- 213
-
-
- 218
-
-
- 206
-
-
- 188
-
-
- 222
-
-
- 186
-
-
- 213
-
-
- 226
-
-
- 273
-
-
- 178
-
-
- 194
-
-
- 209
-
-
- 181
-
-
- 216
-
-
- 206
-
-
- 187
-
-
- 191
-
-
- 243
-
-
- 256
-
-
- 247
-
-
- 234
-
-
- 249
-
-
- 263
-
-
- 250
-
-
- 217
-
-
- 255
-
-
- 264
-
-
- 246
-
-
- 249
-
-
- 271
-
-
- 266
-
-
- 275
-
-
- 297
-
-
- 327
-
-
- 324
-
-
- 304
-
-
- 279
-
-
- 248
-
-
- 271
-
-
- 295
-
-
- 270
-
-
- 302
-
-
- 287
-
-
- 338
-
-
- 308
-
-
- 299
-
-
- 302
-
-
- 260
-
-
- 260
-
-
- 242
-
-
- 287
-
-
- 306
-
-
- 291
-
-
- 324
-
-
- 362
-
-
- 301
-
-
- 353
-
-
- 341
-
-
- 346
-
-
- 363
-
-
- 312
-
-
- 273
-
-
- 299
-
-
- 268
-
-
- 282
-
-
- 249
-
-
- 282
-
-
- 255
-
-
- 319
-
-
- 327
-
-
- 341
-
-
- 332
-
-
- 300
-
-
- 334
-
-
- 251
-
-
- 245
-
-
- 291
-
-
- 306
-
-
- 299
-
-
- 275
-
-
- 257
-
-
- 287
-
-
- 376
-
-
- 300
-
-
- 311
-
-
- 240
-
-
- 276
-
-
- 258
-
-
- 324
-
-
- 315
-
-
- 304
-
-
- 338
-
-
- 336
-
-
- 326
-
-
- 338
-
-
- 340
-
-
- 346
-
-
- 338
-
-
- 366
-
-
- 364
-
-
- 345
-
-
- 378
-
-
- 414
-
-
- 396
-
-
- 411
-
-
- 559
-
-
- 659
-
-
- 586
-
-
- 625
-
-
- 488
-
-
- 530
-
-
- 472
-
-
- 552
-
-
- 569
-
-
- 636
-
-
- 610
-
-
- 592
-
-
- 609
-
-
- 730
-
-
- 680
-
-
-
-
- 730
-
-
-
-
- 178
-
-
+
+
+ 1,804
+
-
-
-
- 228
-
-
- 240
-
-
- 226
-
-
- 197
-
-
- 195
-
-
- 216
-
-
- 190
-
-
- 213
-
-
- 187
-
-
- 224
-
-
- 184
-
-
- 200
-
-
- 232
-
-
- 235
-
-
- 211
-
-
- 232
-
-
- 191
-
-
- 249
-
-
- 289
-
-
- 256
-
-
- 268
-
-
- 281
-
-
- 320
-
-
- 258
-
-
- 267
-
-
- 318
-
-
- 287
-
-
- 292
-
-
- 340
-
-
- 373
-
-
- 345
-
-
- 343
-
-
- 299
-
-
- 312
-
-
- 337
-
-
- 322
-
-
- 327
-
-
- 310
-
-
- 357
-
-
- 323
-
-
- 320
-
-
- 358
-
-
- 284
-
-
- 342
-
-
- 305
-
-
- 303
-
-
- 311
-
-
- 283
-
-
- 403
-
-
- 363
-
-
- 343
-
-
- 312
-
-
- 302
-
-
- 335
-
-
- 307
-
-
- 312
-
-
- 374
-
-
- 358
-
-
- 290
-
-
- 290
-
-
- 252
-
-
- 301
-
-
- 261
-
-
- 255
-
-
- 288
-
-
- 307
-
-
- 309
-
-
- 300
-
-
- 260
-
-
- 255
-
-
- 268
-
-
- 204
-
-
- 233
-
-
- 268
-
-
- 298
-
-
- 293
-
-
- 289
-
-
- 299
-
-
- 329
-
-
- 263
-
-
- 235
-
-
- 211
-
-
- 229
-
-
- 227
-
-
- 233
-
-
- 295
-
-
- 252
-
-
- 231
-
-
- 281
-
-
- 303
-
-
- 307
-
-
- 371
-
-
- 316
-
-
- 307
-
-
- 261
-
-
- 315
-
-
- 285
-
-
- 323
-
-
- 323
-
-
- 324
-
-
- 361
-
-
- 337
-
-
- 350
-
-
- 409
-
-
- 380
-
-
- 434
-
-
- 494
-
-
- 540
-
-
- 571
-
-
- 637
-
-
- 639
-
-
- 561
-
-
- 536
-
-
- 513
-
-
- 570
-
-
- 566
-
-
- 657
-
-
- 646
-
-
- 619
-
-
- 665
-
-
- 623
-
-
- 708
-
-
-
-
- 708
-
-
-
-
- 184
-
-
+
+
+ 636
+
-
-
-
- 236
-
-
- 223
-
-
- 192
-
-
- 191
-
-
- 190
-
-
- 183
-
-
- 228
-
-
- 198
-
-
- 231
-
-
- 153
-
-
- 129
-
-
- 168
-
-
- 194
-
-
- 189
-
-
- 193
-
-
- 232
-
-
- 178
-
-
- 242
-
-
- 236
-
-
- 226
-
-
- 214
-
-
- 321
-
-
- 302
-
-
- 310
-
-
- 368
-
-
- 331
-
-
- 313
-
-
- 280
-
-
- 257
-
-
- 274
-
-
- 270
-
-
- 221
-
-
- 235
-
-
- 262
-
-
- 233
-
-
- 243
-
-
- 331
-
-
- 316
-
-
- 319
-
-
- 274
-
-
- 260
-
-
- 300
-
-
- 289
-
-
- 255
-
-
- 255
-
-
- 260
-
-
- 275
-
-
- 267
-
-
- 243
-
-
- 291
-
-
- 284
-
-
- 239
-
-
- 230
-
-
- 227
-
-
- 231
-
-
- 236
-
-
- 208
-
-
- 219
-
-
- 217
-
-
- 204
-
-
- 276
-
-
- 245
-
-
- 267
-
-
- 257
-
-
- 223
-
-
- 247
-
-
- 222
-
-
- 187
-
-
- 211
-
-
- 251
-
-
- 199
-
-
- 202
-
-
- 287
-
-
- 260
-
-
- 263
-
-
- 272
-
-
- 226
-
-
- 225
-
-
- 237
-
-
- 217
-
-
- 183
-
-
- 206
-
-
- 183
-
-
- 190
-
-
- 248
-
-
- 251
-
-
- 249
-
-
- 188
-
-
- 216
-
-
- 242
-
-
- 309
-
-
- 205
-
-
- 224
-
-
- 218
-
-
- 242
-
-
- 210
-
-
- 271
-
-
- 289
-
-
- 267
-
-
- 245
-
-
- 269
-
-
- 329
-
-
- 359
-
-
- 309
-
-
- 337
-
-
- 316
-
-
- 331
-
-
- 421
-
-
- 522
-
-
- 563
-
-
- 558
-
-
- 541
-
-
- 506
-
-
- 499
-
-
- 511
-
-
- 547
-
-
- 538
-
-
- 480
-
-
- 493
-
-
- 539
-
-
- 657
-
-
- 591
-
-
-
-
- 657
-
-
-
-
- 129
-
-
+
+
+
+
+ 655
+
+
+ 587
+
+
+ 623
+
+
+ 517
+
+
+ 561
+
+
+ 545
+
+
+ 636
+
+
+ 584
+
+
+ 559
+
+
+ 504
+
+
+ 547
+
+
+ 564
+
+
+ 734
+
+
+ 724
+
+
+ 652
+
+
+ 655
+
+
+ 652
+
+
+ 694
+
+
+ 731
+
+
+ 790
+
+
+ 810
+
+
+ 910
+
+
+ 946
+
+
+ 921
+
+
+ 1,120
+
+
+ 973
+
+
+ 964
+
+
+ 951
+
+
+ 983
+
+
+ 1,079
+
+
+ 1,075
+
+
+ 926
+
+
+ 1,007
+
+
+ 962
+
+
+ 1,029
+
+
+ 1,038
+
+
+ 1,112
+
+
+ 1,140
+
+
+ 1,190
+
+
+ 1,076
+
+
+ 1,105
+
+
+ 1,092
+
+
+ 1,021
+
+
+ 881
+
+
+ 975
+
+
+ 1,014
+
+
+ 948
+
+
+ 948
+
+
+ 1,070
+
+
+ 964
+
+
+ 999
+
+
+ 752
+
+
+ 819
+
+
+ 814
+
+
+ 790
+
+
+ 845
+
+
+ 750
+
+
+ 781
+
+
+ 872
+
+
+ 875
+
+
+ 958
+
+
+ 916
+
+
+ 807
+
+
+ 714
+
+
+ 730
+
+
+ 743
+
+
+ 804
+
+
+ 728
+
+
+ 862
+
+
+ 748
+
+
+ 711
+
+
+ 788
+
+
+ 825
+
+
+ 841
+
+
+ 824
+
+
+ 644
+
+
+ 695
+
+
+ 753
+
+
+ 735
+
+
+ 681
+
+
+ 736
+
+
+ 768
+
+
+ 658
+
+
+ 791
+
+
+ 885
+
+
+ 825
+
+
+ 775
+
+
+ 689
+
+
+ 743
+
+
+ 722
+
+
+ 743
+
+
+ 683
+
+
+ 655
+
+
+ 675
+
+
+ 679
+
+
+ 803
+
+
+ 893
+
+
+ 866
+
+
+ 876
+
+
+ 736
+
+
+ 829
+
+
+ 890
+
+
+ 866
+
+
+ 961
+
+
+ 951
+
+
+ 1,052
+
+
+ 992
+
+
+ 1,147
+
+
+ 1,445
+
+
+ 1,512
+
+
+ 1,597
+
+
+ 1,448
+
+
+ 1,514
+
+
+ 1,580
+
+
+ 1,531
+
+
+ 1,560
+
+
+ 1,596
+
+
+ 1,488
+
+
+ 1,514
+
+
+ 1,486
+
+
+ 1,614
+
+
+ 1,740
+
+
+
+
+ 1,740
+
+
+
+
+ 504
+
+
+
+
+
+
+ 353
+
+
+ 349
+
+
+ 381
+
+
+ 329
+
+
+ 423
+
+
+ 452
+
+
+ 478
+
+
+ 450
+
+
+ 398
+
+
+ 339
+
+
+ 351
+
+
+ 293
+
+
+ 428
+
+
+ 423
+
+
+ 456
+
+
+ 341
+
+
+ 390
+
+
+ 476
+
+
+ 513
+
+
+ 595
+
+
+ 455
+
+
+ 486
+
+
+ 516
+
+
+ 483
+
+
+ 586
+
+
+ 590
+
+
+ 540
+
+
+ 493
+
+
+ 533
+
+
+ 638
+
+
+ 671
+
+
+ 660
+
+
+ 562
+
+
+ 517
+
+
+ 493
+
+
+ 558
+
+
+ 559
+
+
+ 576
+
+
+ 518
+
+
+ 611
+
+
+ 618
+
+
+ 769
+
+
+ 697
+
+
+ 760
+
+
+ 649
+
+
+ 639
+
+
+ 662
+
+
+ 620
+
+
+ 662
+
+
+ 608
+
+
+ 584
+
+
+ 589
+
+
+ 570
+
+
+ 769
+
+
+ 725
+
+
+ 647
+
+
+ 593
+
+
+ 526
+
+
+ 570
+
+
+ 562
+
+
+ 613
+
+
+ 619
+
+
+ 614
+
+
+ 591
+
+
+ 648
+
+
+ 667
+
+
+ 635
+
+
+ 644
+
+
+ 658
+
+
+ 628
+
+
+ 677
+
+
+ 529
+
+
+ 593
+
+
+ 528
+
+
+ 563
+
+
+ 558
+
+
+ 543
+
+
+ 617
+
+
+ 659
+
+
+ 611
+
+
+ 576
+
+
+ 531
+
+
+ 536
+
+
+ 502
+
+
+ 563
+
+
+ 489
+
+
+ 495
+
+
+ 555
+
+
+ 622
+
+
+ 653
+
+
+ 665
+
+
+ 648
+
+
+ 630
+
+
+ 534
+
+
+ 526
+
+
+ 521
+
+
+ 576
+
+
+ 562
+
+
+ 609
+
+
+ 551
+
+
+ 619
+
+
+ 669
+
+
+ 776
+
+
+ 844
+
+
+ 835
+
+
+ 797
+
+
+ 748
+
+
+ 791
+
+
+ 792
+
+
+ 847
+
+
+ 931
+
+
+ 964
+
+
+ 1,005
+
+
+ 1,267
+
+
+ 1,269
+
+
+ 1,239
+
+
+ 1,257
+
+
+ 1,280
+
+
+ 1,168
+
+
+ 1,183
+
+
+ 1,175
+
+
+ 1,200
+
-
-
-
- 274
-
-
- 232
-
-
- 247
-
-
- 240
-
-
- 254
-
-
- 225
-
-
- 202
-
-
- 187
-
-
- 220
-
-
- 161
-
-
- 217
-
-
- 167
-
-
- 197
-
-
- 243
-
-
- 200
-
-
- 220
-
-
- 172
-
-
- 246
-
-
- 228
-
-
- 241
-
-
- 225
-
-
- 239
-
-
- 256
-
-
- 277
-
-
- 304
-
-
- 339
-
-
- 314
-
-
- 268
-
-
- 264
-
-
- 335
-
-
- 356
-
-
- 353
-
-
- 281
-
-
- 272
-
-
- 284
-
-
- 241
-
-
- 304
-
-
- 331
-
-
- 370
-
-
- 331
-
-
- 339
-
-
- 359
-
-
- 405
-
-
- 373
-
-
- 338
-
-
- 378
-
-
- 357
-
-
- 278
-
-
- 322
-
-
- 366
-
-
- 366
-
-
- 347
-
-
- 310
-
-
- 326
-
-
- 346
-
-
- 341
-
-
- 301
-
-
- 300
-
-
- 294
-
-
- 276
-
-
- 290
-
-
- 325
-
-
- 308
-
-
- 306
-
-
- 314
-
-
- 291
-
-
- 274
-
-
- 306
-
-
- 307
-
-
- 319
-
-
- 300
-
-
- 269
-
-
- 308
-
-
- 281
-
-
- 292
-
-
- 266
-
-
- 265
-
-
- 265
-
-
- 305
-
-
- 341
-
-
- 310
-
-
- 268
-
-
- 306
-
-
- 306
-
-
- 275
-
-
- 257
-
-
- 222
-
-
- 224
-
-
- 242
-
-
- 256
-
-
- 243
-
-
- 239
-
-
- 257
-
-
- 182
-
-
- 255
-
-
- 235
-
-
- 264
-
-
- 313
-
-
- 283
-
-
- 251
-
-
- 275
-
-
- 322
-
-
- 352
-
-
- 412
-
-
- 374
-
-
- 334
-
-
- 434
-
-
- 367
-
-
- 431
-
-
- 453
-
-
- 377
-
-
- 403
-
-
- 476
-
-
- 557
-
-
- 490
-
-
- 528
-
-
- 462
-
-
- 541
-
-
- 491
-
-
- 513
-
-
- 609
-
-
- 603
-
-
-
-
- 609
-
-
-
-
- 161
-
-
+
+
+ 1,280
+
-
-
-
- 125
-
-
- 112
-
-
- 140
-
-
- 95
-
-
- 131
-
-
- 102
-
-
- 144
-
-
- 143
-
-
- 130
-
-
- 96
-
-
- 117
-
-
- 151
-
-
- 161
-
-
- 109
-
-
- 148
-
-
- 148
-
-
- 164
-
-
- 163
-
-
- 206
-
-
- 210
-
-
- 219
-
-
- 233
-
-
- 241
-
-
- 275
-
-
- 263
-
-
- 279
-
-
- 266
-
-
- 257
-
-
- 260
-
-
- 255
-
-
- 264
-
-
- 270
-
-
- 231
-
-
- 211
-
-
- 220
-
-
- 255
-
-
- 243
-
-
- 321
-
-
- 267
-
-
- 268
-
-
- 251
-
-
- 239
-
-
- 224
-
-
- 224
-
-
- 248
-
-
- 182
-
-
- 257
-
-
- 224
-
-
- 236
-
-
- 194
-
-
- 216
-
-
- 168
-
-
- 190
-
-
- 172
-
-
- 174
-
-
- 191
-
-
- 178
-
-
- 185
-
-
- 187
-
-
- 173
-
-
- 168
-
-
- 204
-
-
- 177
-
-
- 178
-
-
- 145
-
-
- 160
-
-
- 142
-
-
- 156
-
-
- 168
-
-
- 162
-
-
- 172
-
-
- 128
-
-
- 105
-
-
- 119
-
-
- 116
-
-
- 132
-
-
- 158
-
-
- 114
-
-
- 103
-
-
- 132
-
-
- 170
-
-
- 116
-
-
- 137
-
-
- 108
-
-
- 143
-
-
- 139
-
-
- 109
-
-
- 77
-
-
- 110
-
-
- 114
-
-
- 112
-
-
- 140
-
-
- 124
-
-
- 120
-
-
- 132
-
-
- 125
-
-
- 169
-
-
- 193
-
-
- 155
-
-
- 143
-
-
- 170
-
-
- 157
-
-
- 141
-
-
- 144
-
-
- 166
-
-
- 168
-
-
- 173
-
-
- 219
-
-
- 232
-
-
- 224
-
-
- 252
-
-
- 320
-
-
- 303
-
-
- 347
-
-
- 373
-
-
- 358
-
-
- 362
-
-
- 261
-
-
- 243
-
-
- 256
-
-
- 313
-
-
- 300
-
-
-
-
- 373
-
-
-
-
- 77
-
-
+
+
+ 293
+
+
+
+
+
+
+ 430
+
+
+ 409
+
+
+ 311
+
+
+ 269
+
+
+ 370
+
+
+ 603
+
+
+ 545
+
+
+ 583
+
+
+ 408
+
+
+ 391
+
+
+ 384
+
+
+ 365
+
+
+ 463
+
+
+ 298
+
+
+ 355
+
+
+ 369
+
+
+ 361
+
+
+ 525
+
+
+ 548
+
+
+ 540
+
+
+ 438
+
+
+ 429
+
+
+ 420
+
+
+ 419
+
+
+ 486
+
+
+ 508
+
+
+ 477
+
+
+ 447
+
+
+ 484
+
+
+ 561
+
+
+ 645
+
+
+ 596
+
+
+ 530
+
+
+ 499
+
+
+ 468
+
+
+ 446
+
+
+ 571
+
+
+ 483
+
+
+ 526
+
+
+ 440
+
+
+ 478
+
+
+ 704
+
+
+ 749
+
+
+ 745
+
+
+ 556
+
+
+ 500
+
+
+ 542
+
+
+ 516
+
+
+ 511
+
+
+ 490
+
+
+ 530
+
+
+ 433
+
+
+ 468
+
+
+ 580
+
+
+ 741
+
+
+ 676
+
+
+ 568
+
+
+ 561
+
+
+ 514
+
+
+ 499
+
+
+ 555
+
+
+ 472
+
+
+ 468
+
+
+ 478
+
+
+ 453
+
+
+ 681
+
+
+ 683
+
+
+ 664
+
+
+ 568
+
+
+ 502
+
+
+ 494
+
+
+ 393
+
+
+ 457
+
+
+ 472
+
+
+ 461
+
+
+ 414
+
+
+ 429
+
+
+ 578
+
+
+ 659
+
+
+ 595
+
+
+ 396
+
+
+ 424
+
+
+ 400
+
+
+ 395
+
+
+ 476
+
+
+ 405
+
+
+ 419
+
+
+ 408
+
+
+ 428
+
+
+ 572
+
+
+ 704
+
+
+ 695
+
+
+ 525
+
+
+ 492
+
+
+ 482
+
+
+ 451
+
+
+ 471
+
+
+ 372
+
+
+ 425
+
+
+ 373
+
+
+ 461
+
+
+ 654
+
+
+ 770
+
+
+ 721
+
+
+ 573
+
+
+ 552
+
+
+ 527
+
+
+ 511
+
+
+ 652
+
+
+ 563
+
+
+ 598
+
+
+ 575
+
+
+ 702
+
+
+ 991
+
+
+ 1,129
+
+
+ 1,118
+
+
+ 928
+
+
+ 785
+
+
+ 748
+
+
+ 797
+
+
+ 948
+
+
+ 880
+
+
+
+
+ 1,129
+
+
+
+
+ 269
+
+
+
+
+
+
+ 239
+
+
+ 262
+
+
+ 213
+
+
+ 218
+
+
+ 206
+
+
+ 188
+
+
+ 222
+
+
+ 186
+
+
+ 213
+
+
+ 226
+
+
+ 273
+
+
+ 178
+
+
+ 194
+
+
+ 209
+
+
+ 181
+
+
+ 216
+
+
+ 206
+
+
+ 187
+
+
+ 191
+
+
+ 243
+
+
+ 256
+
+
+ 247
+
+
+ 234
+
+
+ 249
+
+
+ 263
+
+
+ 250
+
+
+ 217
+
+
+ 255
+
+
+ 264
+
+
+ 246
+
+
+ 249
+
+
+ 271
+
+
+ 266
+
+
+ 275
+
+
+ 297
+
+
+ 327
+
+
+ 324
+
+
+ 304
+
+
+ 279
+
+
+ 248
+
+
+ 271
+
+
+ 295
+
+
+ 270
+
+
+ 302
+
+
+ 287
+
+
+ 338
+
+
+ 308
+
+
+ 299
+
+
+ 302
+
+
+ 260
+
+
+ 260
+
+
+ 242
+
+
+ 287
+
+
+ 306
+
+
+ 291
+
+
+ 324
+
+
+ 362
+
+
+ 301
+
+
+ 353
+
+
+ 341
+
+
+ 346
+
+
+ 363
+
+
+ 312
+
+
+ 273
+
+
+ 299
+
+
+ 268
+
+
+ 282
+
+
+ 249
+
+
+ 282
+
+
+ 255
+
+
+ 319
+
+
+ 327
+
+
+ 341
+
+
+ 332
+
+
+ 300
+
+
+ 334
+
+
+ 251
+
+
+ 245
+
+
+ 291
+
+
+ 306
+
+
+ 299
+
+
+ 275
+
+
+ 257
+
+
+ 287
+
+
+ 376
+
+
+ 300
+
+
+ 311
+
+
+ 240
+
+
+ 276
+
+
+ 258
+
+
+ 324
+
+
+ 315
+
+
+ 304
+
+
+ 338
+
+
+ 336
+
+
+ 326
+
+
+ 338
+
+
+ 340
+
+
+ 346
+
+
+ 338
+
+
+ 366
+
+
+ 364
+
+
+ 345
+
+
+ 378
+
+
+ 414
+
+
+ 396
+
+
+ 411
+
+
+ 559
+
+
+ 659
+
+
+ 586
+
+
+ 625
+
+
+ 488
+
+
+ 530
+
+
+ 472
+
+
+ 552
+
+
+ 569
+
+
+ 636
+
+
+ 610
+
+
+ 592
+
+
+ 609
+
+
+ 730
+
+
+ 680
+
+
+
+
+ 730
+
+
+
+
+ 178
+
+
+
+
+
+
+ 228
+
+
+ 240
+
+
+ 226
+
+
+ 197
+
+
+ 195
+
+
+ 216
+
+
+ 190
+
+
+ 213
+
+
+ 187
+
+
+ 224
+
+
+ 184
+
+
+ 200
+
+
+ 232
+
+
+ 235
+
+
+ 211
+
+
+ 232
+
+
+ 191
+
+
+ 249
+
+
+ 289
+
+
+ 256
+
+
+ 268
+
+
+ 281
+
+
+ 320
+
+
+ 258
+
+
+ 267
+
+
+ 318
+
+
+ 287
+
+
+ 292
+
+
+ 340
+
+
+ 373
+
+
+ 345
+
+
+ 343
+
+
+ 299
+
+
+ 312
+
+
+ 337
+
+
+ 322
+
+
+ 327
+
+
+ 310
+
+
+ 357
+
+
+ 323
+
+
+ 320
+
+
+ 358
+
+
+ 284
+
+
+ 342
+
+
+ 305
+
+
+ 303
+
+
+ 311
+
+
+ 283
+
+
+ 403
+
+
+ 363
+
+
+ 343
+
+
+ 312
+
+
+ 302
+
+
+ 335
+
+
+ 307
+
+
+ 312
+
+
+ 374
+
+
+ 358
+
+
+ 290
+
+
+ 290
+
+
+ 252
+
+
+ 301
+
+
+ 261
+
+
+ 255
+
+
+ 288
+
+
+ 307
+
+
+ 309
+
+
+ 300
+
+
+ 260
+
+
+ 255
+
+
+ 268
+
+
+ 204
+
+
+ 233
+
+
+ 268
+
+
+ 298
+
+
+ 293
+
+
+ 289
+
+
+ 299
+
+
+ 329
+
+
+ 263
+
+
+ 235
+
+
+ 211
+
+
+ 229
+
+
+ 227
+
+
+ 233
+
+
+ 295
+
+
+ 252
+
+
+ 231
+
+
+ 281
+
+
+ 303
+
+
+ 307
+
+
+ 371
+
+
+ 316
+
+
+ 307
+
+
+ 261
+
+
+ 315
+
+
+ 285
+
+
+ 323
+
+
+ 323
+
+
+ 324
+
+
+ 361
+
+
+ 337
+
+
+ 350
+
+
+ 409
+
+
+ 380
+
+
+ 434
+
+
+ 494
+
+
+ 540
+
+
+ 571
+
+
+ 637
+
+
+ 639
+
+
+ 561
+
+
+ 536
+
+
+ 513
+
+
+ 570
+
+
+ 566
+
+
+ 657
+
+
+ 646
+
+
+ 619
+
+
+ 665
+
+
+ 623
+
+
+ 708
+
+
+
+
+ 708
+
+
+
+
+ 184
+
+
+
+
+
+
+ 236
+
+
+ 223
+
+
+ 192
+
+
+ 191
+
+
+ 190
+
+
+ 183
+
+
+ 228
+
+
+ 198
+
+
+ 231
+
+
+ 153
+
+
+ 129
+
+
+ 168
+
+
+ 194
+
+
+ 189
+
+
+ 193
+
+
+ 232
+
+
+ 178
+
+
+ 242
+
+
+ 236
+
+
+ 226
+
+
+ 214
+
+
+ 321
+
+
+ 302
+
+
+ 310
+
+
+ 368
+
+
+ 331
+
+
+ 313
+
+
+ 280
+
+
+ 257
+
+
+ 274
+
+
+ 270
+
+
+ 221
+
+
+ 235
+
+
+ 262
+
+
+ 233
+
+
+ 243
+
+
+ 331
+
+
+ 316
+
+
+ 319
+
+
+ 274
+
+
+ 260
+
+
+ 300
+
+
+ 289
+
+
+ 255
+
+
+ 255
+
+
+ 260
+
+
+ 275
+
+
+ 267
+
+
+ 243
+
+
+ 291
+
+
+ 284
+
+
+ 239
+
+
+ 230
+
+
+ 227
+
+
+ 231
+
+
+ 236
+
+
+ 208
+
+
+ 219
+
+
+ 217
+
+
+ 204
+
+
+ 276
+
+
+ 245
+
+
+ 267
+
+
+ 257
+
+
+ 223
+
+
+ 247
+
+
+ 222
+
+
+ 187
+
+
+ 211
+
+
+ 251
+
+
+ 199
+
+
+ 202
+
+
+ 287
+
+
+ 260
+
+
+ 263
+
+
+ 272
+
+
+ 226
+
+
+ 225
+
+
+ 237
+
+
+ 217
+
+
+ 183
+
+
+ 206
+
+
+ 183
+
+
+ 190
+
+
+ 248
+
+
+ 251
+
+
+ 249
+
+
+ 188
+
+
+ 216
+
+
+ 242
+
+
+ 309
+
+
+ 205
+
+
+ 224
+
+
+ 218
+
+
+ 242
+
+
+ 210
+
+
+ 271
+
+
+ 289
+
+
+ 267
+
+
+ 245
+
+
+ 269
+
+
+ 329
+
+
+ 359
+
+
+ 309
+
+
+ 337
+
+
+ 316
+
+
+ 331
+
+
+ 421
+
+
+ 522
+
+
+ 563
+
+
+ 558
+
+
+ 541
+
+
+ 506
+
+
+ 499
+
+
+ 511
+
+
+ 547
+
+
+ 538
+
+
+ 480
+
+
+ 493
+
+
+ 539
+
+
+ 657
+
+
+ 591
+
+
+
+
+ 657
+
+
+
+
+ 129
+
+
+
+
+
+
+ 274
+
+
+ 232
+
+
+ 247
+
+
+ 240
+
+
+ 254
+
+
+ 225
+
+
+ 202
+
+
+ 187
+
+
+ 220
+
+
+ 161
+
+
+ 217
+
+
+ 167
+
+
+ 197
+
+
+ 243
+
+
+ 200
+
+
+ 220
+
+
+ 172
+
+
+ 246
+
+
+ 228
+
+
+ 241
+
+
+ 225
+
+
+ 239
+
+
+ 256
+
+
+ 277
+
+
+ 304
+
+
+ 339
+
+
+ 314
+
+
+ 268
+
+
+ 264
+
+
+ 335
+
+
+ 356
+
+
+ 353
+
+
+ 281
+
+
+ 272
+
+
+ 284
+
+
+ 241
+
+
+ 304
+
+
+ 331
+
+
+ 370
+
+
+ 331
+
+
+ 339
+
+
+ 359
+
+
+ 405
+
+
+ 373
+
+
+ 338
+
+
+ 378
+
+
+ 357
+
+
+ 278
+
+
+ 322
+
+
+ 366
+
+
+ 366
+
+
+ 347
+
+
+ 310
+
+
+ 326
+
+
+ 346
+
+
+ 341
+
+
+ 301
+
+
+ 300
+
+
+ 294
+
+
+ 276
+
+
+ 290
+
+
+ 325
+
+
+ 308
+
+
+ 306
+
+
+ 314
+
+
+ 291
+
+
+ 274
+
+
+ 306
+
+
+ 307
+
+
+ 319
+
+
+ 300
+
+
+ 269
+
+
+ 308
+
+
+ 281
+
+
+ 292
+
+
+ 266
+
+
+ 265
+
+
+ 265
+
+
+ 305
+
+
+ 341
+
+
+ 310
+
+
+ 268
+
+
+ 306
+
+
+ 306
+
+
+ 275
+
+
+ 257
+
+
+ 222
+
+
+ 224
+
+
+ 242
+
+
+ 256
+
+
+ 243
+
+
+ 239
+
+
+ 257
+
+
+ 182
+
+
+ 255
+
+
+ 235
+
+
+ 264
+
+
+ 313
+
+
+ 283
+
+
+ 251
+
+
+ 275
+
+
+ 322
+
+
+ 352
+
+
+ 412
+
+
+ 374
+
+
+ 334
+
+
+ 434
+
+
+ 367
+
+
+ 431
+
+
+ 453
+
+
+ 377
+
+
+ 403
+
+
+ 476
+
+
+ 557
+
+
+ 490
+
+
+ 528
+
+
+ 462
+
+
+ 541
+
+
+ 491
+
+
+ 513
+
+
+ 609
+
+
+ 603
+
+
+
+
+ 609
+
+
+
+
+ 161
+
+
+
+
+
+
+ 125
+
+
+ 112
+
+
+ 140
+
+
+ 95
+
+
+ 131
+
+
+ 102
+
+
+ 144
+
+
+ 143
+
+
+ 130
+
+
+ 96
+
+
+ 117
+
+
+ 151
+
+
+ 161
+
+
+ 109
+
+
+ 148
+
+
+ 148
+
+
+ 164
+
+
+ 163
+
+
+ 206
+
+
+ 210
+
+
+ 219
+
+
+ 233
+
+
+ 241
+
+
+ 275
+
+
+ 263
+
+
+ 279
+
+
+ 266
+
+
+ 257
+
+
+ 260
+
+
+ 255
+
+
+ 264
+
+
+ 270
+
+
+ 231
+
+
+ 211
+
+
+ 220
+
+
+ 255
+
+
+ 243
+
+
+ 321
+
+
+ 267
+
+
+ 268
+
+
+ 251
+
+
+ 239
+
+
+ 224
+
+
+ 224
+
+
+ 248
+
+
+ 182
+
+
+ 257
+
+
+ 224
+
+
+ 236
+
+
+ 194
+
+
+ 216
+
+
+ 168
+
+
+ 190
+
+
+ 172
+
+
+ 174
+
+
+ 191
+
+
+ 178
+
+
+ 185
+
+
+ 187
+
+
+ 173
+
+
+ 168
+
+
+ 204
+
+
+ 177
+
+
+ 178
+
+
+ 145
+
+
+ 160
+
+
+ 142
+
+
+ 156
+
+
+ 168
+
+
+ 162
+
+
+ 172
+
+
+ 128
+
+
+ 105
+
+
+ 119
+
+
+ 116
+
+
+ 132
+
+
+ 158
+
+
+ 114
+
+
+ 103
+
+
+ 132
+
+
+ 170
+
+
+ 116
+
+
+ 137
+
+
+ 108
+
+
+ 143
+
+
+ 139
+
+
+ 109
+
+
+ 77
+
+
+ 110
+
+
+ 114
+
+
+ 112
+
+
+ 140
+
+
+ 124
+
+
+ 120
+
+
+ 132
+
+
+ 125
+
+
+ 169
+
+
+ 193
+
+
+ 155
+
+
+ 143
+
+
+ 170
+
+
+ 157
+
+
+ 141
+
+
+ 144
+
+
+ 166
+
+
+ 168
+
+
+ 173
+
+
+ 219
+
+
+ 232
+
+
+ 224
+
+
+ 252
+
+
+ 320
+
+
+ 303
+
+
+ 347
+
+
+ 373
+
+
+ 358
+
+
+ 362
+
+
+ 261
+
+
+ 243
+
+
+ 256
+
+
+ 313
+
+
+ 300
+
+
+
+
+ 373
+
+
+
+
+ 77
+
+
+
+
+
+
+ 154
+
+
+ 173
+
+
+ 152
+
+
+ 135
+
+
+ 73
+
+
+ 109
+
+
+ 77
+
+
+ 110
+
+
+ 124
+
+
+ 113
+
+
+ 192
+
+
+ 196
+
+
+ 188
+
+
+ 193
+
+
+ 267
+
+
+ 140
+
+
+ 109
+
+
+ 130
+
+
+ 113
+
+
+ 141
+
+
+ 101
+
+
+ 118
+
+
+ 145
+
+
+ 192
+
+
+ 195
+
+
+ 187
+
+
+ 269
+
+
+ 151
+
+
+ 89
+
+
+ 89
+
+
+ 114
+
+
+ 125
+
+
+ 92
+
+
+ 97
+
+
+ 137
+
+
+ 120
+
+
+ 159
+
+
+ 172
+
+
+ 161
+
+
+ 154
+
+
+ 133
+
+
+ 94
+
+
+ 113
+
+
+ 173
+
+
+ 98
+
+
+ 136
+
+
+ 148
+
+
+ 137
+
+
+ 184
+
+
+ 168
+
+
+ 153
+
+
+ 107
+
+
+ 99
+
+
+ 106
+
+
+ 140
+
+
+ 103
+
+
+ 88
+
+
+ 102
+
+
+ 131
+
+
+ 165
+
+
+ 153
+
+
+ 107
+
+
+ 139
+
+
+ 84
+
+
+ 66
+
+
+ 76
+
+
+ 69
+
+
+ 100
+
+
+ 127
+
+
+ 85
+
+
+ 118
+
+
+ 127
+
+
+ 140
+
+
+ 139
+
+
+ 117
+
+
+ 81
+
+
+ 79
+
+
+ 35
+
+
+ 55
+
+
+ 76
+
+
+ 78
+
+
+ 77
+
+
+ 125
+
+
+ 139
+
+
+ 128
+
+
+ 127
+
+
+ 123
+
+
+ 67
+
+
+ 64
+
+
+ 59
+
+
+ 40
+
+
+ 54
+
+
+ 53
+
+
+ 47
+
+
+ 80
+
+
+ 96
+
+
+ 113
+
+
+ 135
+
+
+ 175
+
+
+ 108
+
+
+ 94
+
+
+ 86
+
+
+ 125
+
+
+ 111
+
+
+ 84
+
+
+ 97
+
+
+ 119
+
+
+ 229
+
+
+ 245
+
+
+ 251
+
+
+ 241
+
+
+ 176
+
+
+ 136
+
+
+ 182
+
+
+ 180
+
+
+ 195
+
+
+ 150
+
+
+ 166
+
+
+ 180
+
+
+ 292
+
+
+ 318
+
+
+ 285
+
+
+
+
+ 318
+
+
+
+
+ 35
+
+
+
+
+
+
+ 19
+
+
+ 25
+
+
+ 17
+
+
+ 20
+
+
+ 27
+
+
+ 13
+
+
+ 16
+
+
+ 23
+
+
+ 25
+
+
+ 39
+
+
+ 11
+
+
+ 20
+
+
+ 11
+
+
+ 27
+
+
+ 14
+
+
+ 24
+
+
+ 34
+
+
+ 26
+
+
+ 17
+
+
+ 18
+
+
+ 23
+
+
+ 32
+
+
+ 20
+
+
+ 27
+
+
+ 33
+
+
+ 35
+
+
+ 28
+
+
+ 33
+
+
+ 25
+
+
+ 35
+
+
+ 19
+
+
+ 32
+
+
+ 42
+
+
+ 36
+
+
+ 32
+
+
+ 45
+
+
+ 54
+
+
+ 41
+
+
+ 46
+
+
+ 41
+
+
+ 40
+
+
+ 36
+
+
+ 43
+
+
+ 20
+
+
+ 25
+
+
+ 31
+
+
+ 34
+
+
+ 32
+
+
+ 31
+
+
+ 24
+
+
+ 22
+
+
+ 34
+
+
+ 22
+
+
+ 27
+
+
+ 28
+
+
+ 10
+
+
+ 8
+
+
+ 15
+
+
+ 20
+
+
+ 16
+
+
+ 29
+
+
+ 25
+
+
+ 32
+
+
+ 19
+
+
+ 16
+
+
+ 25
+
+
+ 22
+
+
+ 12
+
+
+ 12
+
+
+ 2
+
+
+ 18
+
+
+ 23
+
+
+ 26
+
+
+ 25
+
+
+ 14
+
+
+ 17
+
+
+ 20
+
+
+ 31
+
+
+ 25
+
+
+ 32
+
+
+ 14
+
+
+ 15
+
+
+ 22
+
+
+ 25
+
+
+ 35
+
+
+ 33
+
+
+ 24
+
+
+ 17
+
+
+ 22
+
+
+ 33
+
+
+ 33
+
+
+ 33
+
+
+ 25
+
+
+ 9
+
+
+ 16
+
+
+ 24
+
+
+ 28
+
+
+ 16
+
+
+ 28
+
+
+ 28
+
+
+ 28
+
+
+ 28
+
+
+ 13
+
+
+ 17
+
+
+ 25
+
+
+ 15
+
+
+ 32
+
+
+ 46
+
+
+ 59
+
+
+ 63
+
+
+ 105
+
+
+ 125
+
+
+ 98
+
+
+ 100
+
+
+ 95
+
+
+ 93
+
+
+ 76
+
+
+ 84
+
+
+ 96
+
+
+ 89
+
+
+ 68
+
+
+ 79
+
-
-
-
- 154
-
-
- 173
-
-
- 152
-
-
- 135
-
-
- 73
-
-
- 109
-
-
- 77
-
-
- 110
-
-
- 124
-
-
- 113
-
-
- 192
-
-
- 196
-
-
- 188
-
-
- 193
-
-
- 267
-
-
- 140
-
-
- 109
-
-
- 130
-
-
- 113
-
-
- 141
-
-
- 101
-
-
- 118
-
-
- 145
-
-
- 192
-
-
- 195
-
-
- 187
-
-
- 269
-
-
- 151
-
-
- 89
-
-
- 89
-
-
- 114
-
-
- 125
-
-
- 92
-
-
- 97
-
-
- 137
-
-
- 120
-
-
- 159
-
-
- 172
-
-
- 161
-
-
- 154
-
-
- 133
-
-
- 94
-
-
- 113
-
-
- 173
-
-
- 98
-
-
- 136
-
-
- 148
-
-
- 137
-
-
- 184
-
-
- 168
-
-
- 153
-
-
- 107
-
-
- 99
-
-
- 106
-
-
- 140
-
-
- 103
-
-
- 88
-
-
- 102
-
-
- 131
-
-
- 165
-
-
- 153
-
-
- 107
-
-
- 139
-
-
- 84
-
-
- 66
-
-
- 76
-
-
- 69
-
-
- 100
-
-
- 127
-
-
- 85
-
-
- 118
-
-
- 127
-
-
- 140
-
-
- 139
-
-
- 117
-
-
- 81
-
-
- 79
-
-
- 35
-
-
- 55
-
-
- 76
-
-
- 78
-
-
- 77
-
-
- 125
-
-
- 139
-
-
- 128
-
-
- 127
-
-
- 123
-
-
- 67
-
-
- 64
-
-
- 59
-
-
- 40
-
-
- 54
-
-
- 53
-
-
- 47
-
-
- 80
-
-
- 96
-
-
- 113
-
-
- 135
-
-
- 175
-
-
- 108
-
-
- 94
-
-
- 86
-
-
- 125
-
-
- 111
-
-
- 84
-
-
- 97
-
-
- 119
-
-
- 229
-
-
- 245
-
-
- 251
-
-
- 241
-
-
- 176
-
-
- 136
-
-
- 182
-
-
- 180
-
-
- 195
-
-
- 150
-
-
- 166
-
-
- 180
-
-
- 292
-
-
- 318
-
-
- 285
-
-
-
-
- 318
-
-
-
-
- 35
-
-
+
+
+ 125
+
-
-
-
- 19
-
-
- 25
-
-
- 17
-
-
- 20
-
-
- 27
-
-
- 13
-
-
- 16
-
-
- 23
-
-
- 25
-
-
- 39
-
-
- 11
-
-
- 20
-
-
- 11
-
-
- 27
-
-
- 14
-
-
- 24
-
-
- 34
-
-
- 26
-
-
- 17
-
-
- 18
-
-
- 23
-
-
- 32
-
-
- 20
-
-
- 27
-
-
- 33
-
-
- 35
-
-
- 28
-
-
- 33
-
-
- 25
-
-
- 35
-
-
- 19
-
-
- 32
-
-
- 42
-
-
- 36
-
-
- 32
-
-
- 45
-
-
- 54
-
-
- 41
-
-
- 46
-
-
- 41
-
-
- 40
-
-
- 36
-
-
- 43
-
-
- 20
-
-
- 25
-
-
- 31
-
-
- 34
-
-
- 32
-
-
- 31
-
-
- 24
-
-
- 22
-
-
- 34
-
-
- 22
-
-
- 27
-
-
- 28
-
-
- 10
-
-
- 8
-
-
- 15
-
-
- 20
-
-
- 16
-
-
- 29
-
-
- 25
-
-
- 32
-
-
- 19
-
-
- 16
-
-
- 25
-
-
- 22
-
-
- 12
-
-
- 12
-
-
- 2
-
-
- 18
-
-
- 23
-
-
- 26
-
-
- 25
-
-
- 14
-
-
- 17
-
-
- 20
-
-
- 31
-
-
- 25
-
-
- 32
-
-
- 14
-
-
- 15
-
-
- 22
-
-
- 25
-
-
- 35
-
-
- 33
-
-
- 24
-
-
- 17
-
-
- 22
-
-
- 33
-
-
- 33
-
-
- 33
-
-
- 25
-
-
- 9
-
-
- 16
-
-
- 24
-
-
- 28
-
-
- 16
-
-
- 28
-
-
- 28
-
-
- 28
-
-
- 28
-
-
- 13
-
-
- 17
-
-
- 25
-
-
- 15
-
-
- 32
-
-
- 46
-
-
- 59
-
-
- 63
-
-
- 105
-
-
- 125
-
-
- 98
-
-
- 100
-
-
- 95
-
-
- 93
-
-
- 76
-
-
- 84
-
-
- 96
-
-
- 89
-
-
- 68
-
-
- 79
-
-
-
-
- 125
-
-
-
-
- 2
-
-
+
+
+ 2
+
\ No newline at end of file
diff --git a/test/output/metroUnemploymentRidgeline.svg b/test/output/metroUnemploymentRidgeline.svg
index 5476bbf722..55c69c6f71 100644
--- a/test/output/metroUnemploymentRidgeline.svg
+++ b/test/output/metroUnemploymentRidgeline.svg
@@ -173,501 +173,499 @@
2012
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/output/mobyDickFaceted.svg b/test/output/mobyDickFaceted.svg
index e4c3910211..5bef7494c8 100644
--- a/test/output/mobyDickFaceted.svg
+++ b/test/output/mobyDickFaceted.svg
@@ -29,310 +29,300 @@
vowel
-
-
-
-
- 0
-
-
-
- 200
-
-
-
- 400
-
-
-
- 600
-
-
-
- 800
-
-
-
- 1,000
-
-
-
- 1,200
-
- ↑ Frequency
-
-
-
-
-
- 0
-
-
-
- 200
-
-
-
- 400
-
-
-
- 600
-
-
-
- 800
-
-
-
- 1,000
-
-
-
- 1,200
-
-
-
-
-
-
-
- A
-
-
- B
-
-
- C
-
-
- D
-
-
- E
-
-
- F
-
-
- G
-
-
- H
-
-
- I
-
-
- J
-
-
- K
-
-
- L
-
-
- M
-
-
- N
-
-
- O
-
-
- P
-
-
- Q
-
-
- R
-
-
- S
-
-
- T
-
-
- U
-
-
- V
-
-
- W
-
-
- X
-
-
- Y
-
-
- Z
-
-
-
-
-
-
- A
-
-
- B
-
-
- C
-
-
- D
-
-
- E
-
-
- F
-
-
- G
-
-
- H
-
-
- I
-
-
- J
-
-
- K
-
-
- L
-
-
- M
-
-
- N
-
-
- O
-
-
- P
-
-
- Q
-
-
- R
-
-
- S
-
-
- T
-
-
- U
-
-
- V
-
-
- W
-
-
- X
-
-
- Y
-
-
- Z
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+ 0
+
+
+
+ 200
+
+
+
+ 400
+
+
+
+ 600
+
+
+
+ 800
+
+
+
+ 1,000
+
+
+
+ 1,200
+
+ ↑ Frequency
+
+
+
+ 0
+
+
+
+ 200
+
+
+
+ 400
+
+
+
+ 600
+
+
+
+ 800
+
+
+
+ 1,000
+
+
+
+ 1,200
+
+
+
+
+
+ A
+
+
+ B
+
+
+ C
+
+
+ D
+
+
+ E
+
+
+ F
+
+
+ G
+
+
+ H
+
+
+ I
+
+
+ J
+
+
+ K
+
+
+ L
+
+
+ M
+
+
+ N
+
+
+ O
+
+
+ P
+
+
+ Q
+
+
+ R
+
+
+ S
+
+
+ T
+
+
+ U
+
+
+ V
+
+
+ W
+
+
+ X
+
+
+ Y
+
+
+ Z
+
+
+
+
+ A
+
+
+ B
+
+
+ C
+
+
+ D
+
+
+ E
+
+
+ F
+
+
+ G
+
+
+ H
+
+
+ I
+
+
+ J
+
+
+ K
+
+
+ L
+
+
+ M
+
+
+ N
+
+
+ O
+
+
+ P
+
+
+ Q
+
+
+ R
+
+
+ S
+
+
+ T
+
+
+ U
+
+
+ V
+
+
+ W
+
+
+ X
+
+
+ Y
+
+
+ Z
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/output/penguinCulmen.svg b/test/output/penguinCulmen.svg
index a3af36c2e9..c9e009f837 100644
--- a/test/output/penguinCulmen.svg
+++ b/test/output/penguinCulmen.svg
@@ -35,2906 +35,2892 @@
sex
-
-
-
-
- 35
-
-
-
- 40
-
-
-
- 45
-
-
-
- 50
-
-
-
- 55
-
- ↑ culmen_length_mm
-
+
+
+ 35
+
-
-
-
- 35
-
-
-
- 40
-
-
-
- 45
-
-
-
- 50
-
-
-
- 55
-
-
-
+
+ 40
+
-
-
-
- 35
-
-
-
- 40
-
-
-
- 45
-
-
-
- 50
-
-
-
- 55
-
-
-
+
+ 45
+
-
-
-
- 15
-
-
-
- 20
-
-
-
+
+ 50
+
-
-
-
- 15
-
-
-
- 20
-
-
-
+
+ 55
+
+ ↑ culmen_length_mm
+
+
+
+ 35
+
+
+
+ 40
+
+
+
+ 45
+
+
+
+ 50
+
+
+
+ 55
+
+
+
+
+
+ 35
+
+
+
+ 40
+
+
+
+ 45
+
+
+
+ 50
+
+
+
+ 55
+
+
+
+
+
+ 15
+
+
+
+ 20
+
+
+
+
+
+ 15
+
+
+
+ 20
+
-
-
-
- 15
-
-
-
- 20
-
- culmen_depth_mm →
-
+
+
+
+ 15
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ 20
+
+ culmen_depth_mm →
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
\ No newline at end of file
diff --git a/test/output/penguinCulmenArray.svg b/test/output/penguinCulmenArray.svg
index af69ed58f3..a5acddeee8 100644
--- a/test/output/penguinCulmenArray.svg
+++ b/test/output/penguinCulmenArray.svg
@@ -35,3240 +35,3226 @@
sex
-
-
-
-
- 35
-
-
-
- 40
-
-
-
- 45
-
-
-
- 50
-
-
-
- 55
-
-
-
+
+
+ 35
+
-
-
-
- 35
-
-
-
- 40
-
-
-
- 45
-
-
-
- 50
-
-
-
- 55
-
-
-
+
+ 40
+
-
-
-
- 35
-
-
-
- 40
-
-
-
- 45
-
-
-
- 50
-
-
-
- 55
-
-
-
+
+ 45
+
-
-
-
- 15
-
-
-
- 20
-
-
-
+
+ 50
+
-
-
-
- 15
-
-
-
- 20
-
-
-
+
+ 55
+
-
-
-
- 15
-
-
-
- 20
-
-
-
+
+
+
+ 35
+
+
+
+ 40
+
+
+
+ 45
+
+
+
+ 50
+
+
+
+ 55
+
+
+
+
+
+ 35
+
+
+
+ 40
+
+
+
+ 45
+
+
+
+ 50
+
+
+
+ 55
+
+
+
+
+
+ 15
+
+
+
+ 20
+
+
+
+
+
+ 15
+
+
+
+ 20
+
+
+
+
+
+ 15
+
+
+
+ 20
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
\ No newline at end of file
diff --git a/test/output/penguinMassSex.svg b/test/output/penguinMassSex.svg
index 14c8d40724..8e134f181e 100644
--- a/test/output/penguinMassSex.svg
+++ b/test/output/penguinMassSex.svg
@@ -53,111 +53,103 @@
6,500
Body mass (g) →
-
-
-
-
- 0
-
-
- 10
-
-
- 20
-
-
- 30
-
-
- 40
-
-
- 50
- ↑ Frequency
-
-
-
-
-
- 0
-
-
- 10
-
-
- 20
-
-
- 30
-
-
- 40
-
-
- 50
-
-
-
-
-
-
- 0
-
-
- 10
-
-
- 20
-
-
- 30
-
-
- 40
-
-
- 50
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+ 0
+
+
+ 10
+
+
+ 20
+
+
+ 30
+
+
+ 40
+
+
+ 50
+ ↑ Frequency
+
+
+
+ 0
+
+
+ 10
+
+
+ 20
+
+
+ 30
+
+
+ 40
+
+
+ 50
+
+
+
+
+ 0
+
+
+ 10
+
+
+ 20
+
+
+ 30
+
+
+ 40
+
+
+ 50
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/output/penguinMassSexSpecies.svg b/test/output/penguinMassSexSpecies.svg
index 7c40e448ad..36950cfe30 100644
--- a/test/output/penguinMassSexSpecies.svg
+++ b/test/output/penguinMassSexSpecies.svg
@@ -35,178 +35,164 @@
sex
-
-
-
-
- 0
-
-
- 10
-
-
- 20
-
-
- 30
-
-
- 40
- ↑ Frequency
-
-
-
-
-
- 0
-
-
- 10
-
-
- 20
-
-
- 30
-
-
- 40
-
-
-
-
-
-
- 0
-
-
- 10
-
-
- 20
-
-
- 30
-
-
- 40
-
-
-
-
-
-
- 4,000
-
-
- 6,000
-
-
-
-
-
-
- 4,000
-
-
- 6,000
-
-
-
-
-
-
- 4,000
-
-
- 6,000
- Body mass (g) →
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+ 0
+
+
+ 10
+
+
+ 20
+
+
+ 30
+
+
+ 40
+ ↑ Frequency
+
+
+
+ 0
+
+
+ 10
+
+
+ 20
+
+
+ 30
+
+
+ 40
+
+
+
+
+ 0
+
+
+ 10
+
+
+ 20
+
+
+ 30
+
+
+ 40
+
+
+
+
+ 4,000
+
+
+ 6,000
+
+
+
+
+ 4,000
+
+
+ 6,000
+
+
+
+
+ 4,000
+
+
+ 6,000
+ Body mass (g) →
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/output/penguinSexMassCulmenSpecies.svg b/test/output/penguinSexMassCulmenSpecies.svg
index f2577a94f0..f390ec5fd5 100644
--- a/test/output/penguinSexMassCulmenSpecies.svg
+++ b/test/output/penguinSexMassCulmenSpecies.svg
@@ -78,212 +78,204 @@
sex
-
-
-
-
-
- 3k
-
-
-
- 3.5k
-
-
-
- 4k
-
-
-
- 4.5k
-
-
-
- 5k
-
-
-
- 5.5k
-
-
-
- 6k
-
-
-
-
-
-
-
- 3k
-
-
-
- 3.5k
-
-
-
- 4k
-
-
-
- 4.5k
-
-
-
- 5k
-
-
-
- 5.5k
-
-
-
- 6k
-
-
-
-
-
-
-
- 3k
-
-
-
- 3.5k
-
-
-
- 4k
-
-
-
- 4.5k
-
-
-
- 5k
-
-
-
- 5.5k
-
-
-
- 6k
- body_mass_g →
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ 3k
+
+
+
+ 3.5k
+
+
+
+ 4k
+
+
+
+ 4.5k
+
+
+
+ 5k
+
+
+
+ 5.5k
+
+
+
+ 6k
+
+
+
+
+
+ 3k
+
+
+
+ 3.5k
+
+
+
+ 4k
+
+
+
+ 4.5k
+
+
+
+ 5k
+
+
+
+ 5.5k
+
+
+
+ 6k
+
+
+
+
+
+ 3k
+
+
+
+ 3.5k
+
+
+
+ 4k
+
+
+
+ 4.5k
+
+
+
+ 5k
+
+
+
+ 5.5k
+
+
+
+ 6k
+ body_mass_g →
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/output/penguinSpeciesIslandRelative.svg b/test/output/penguinSpeciesIslandRelative.svg
index 6b5155d77d..3b3a8c5bb9 100644
--- a/test/output/penguinSpeciesIslandRelative.svg
+++ b/test/output/penguinSpeciesIslandRelative.svg
@@ -59,32 +59,30 @@
Gentoo
species
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/output/penguinSpeciesIslandSex.svg b/test/output/penguinSpeciesIslandSex.svg
index 0cb8e6cdcb..797500a7c9 100644
--- a/test/output/penguinSpeciesIslandSex.svg
+++ b/test/output/penguinSpeciesIslandSex.svg
@@ -86,79 +86,71 @@
Gentoo
species
-
-
-
-
- FEMALE
-
-
- MALE
-
-
- N/A
-
-
-
-
-
-
- FEMALE
-
-
- MALE
-
-
- N/A
- sex
-
-
-
-
-
- FEMALE
-
-
- MALE
-
-
- N/A
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+ FEMALE
+
+
+ MALE
+
+
+ N/A
+
+
+
+
+ FEMALE
+
+
+ MALE
+
+
+ N/A
+ sex
+
+
+
+ FEMALE
+
+
+ MALE
+
+
+ N/A
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/output/trafficHorizon.html b/test/output/trafficHorizon.html
index 21ddbacbd6..b2623804fa 100644
--- a/test/output/trafficHorizon.html
+++ b/test/output/trafficHorizon.html
@@ -85,1261 +85,1259 @@
12 PM
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Von der Heydt
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Kirschheck
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Saarbrücken-Neuhaus
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Riegelsberg
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Holz
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Göttelborn
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Illingen
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- AS Eppelborn
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Hasborn
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Kastel
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Otzenhausen
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Bierfeld
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Nonnweiler
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Hetzerath
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Laufeld
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Nettersheim
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Euskirchen/Bliesheim
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Hürth
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Köln-Nord
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Schloss Burg
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Hagen-Vorhalle
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Hengsen
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Unna
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Ascheberg
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Ladbergen
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Lotte
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- HB-Silbersee
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- HB-Weserbrücke
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- HB-Mahndorfer See
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Groß Ippener
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Uphusen
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Bockel
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Dibbersen
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Glüsingen
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Barsbüttel
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Bad Schwartau
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Oldenburg (Holstein)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Neustadt i. H.-Süd
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Von der Heydt
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Kirschheck
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Saarbrücken-Neuhaus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Riegelsberg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Holz
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Göttelborn
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Illingen
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AS Eppelborn
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hasborn
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Kastel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Otzenhausen
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Bierfeld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Nonnweiler
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hetzerath
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Laufeld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Nettersheim
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Euskirchen/Bliesheim
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hürth
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Köln-Nord
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Schloss Burg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hagen-Vorhalle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hengsen
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Unna
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Ascheberg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Ladbergen
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lotte
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HB-Silbersee
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HB-Weserbrücke
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HB-Mahndorfer See
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Groß Ippener
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Uphusen
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Bockel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Dibbersen
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Glüsingen
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Barsbüttel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Bad Schwartau
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Oldenburg (Holstein)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Neustadt i. H.-Süd
\ No newline at end of file