diff --git a/bench/Earcut.Benchmarks/Program.cs b/bench/Earcut.Benchmarks/Program.cs index c4ad76f..b9b1ec7 100644 --- a/bench/Earcut.Benchmarks/Program.cs +++ b/bench/Earcut.Benchmarks/Program.cs @@ -16,6 +16,8 @@ public static void Main(string[] args) m.TriangulateSquare(); m.TriangulateWater(); m.TriangulateWaterHuge(); + m.TriangulateWaterHuge3(); + m.RefineWaterHuge3(); m.TriangulateDude(); m.TriangulateComplexPolygon(); diff --git a/bench/Earcut.Benchmarks/TriangulationBenchmarks.cs b/bench/Earcut.Benchmarks/TriangulationBenchmarks.cs index d1bcffd..c8bfde6 100644 --- a/bench/Earcut.Benchmarks/TriangulationBenchmarks.cs +++ b/bench/Earcut.Benchmarks/TriangulationBenchmarks.cs @@ -20,6 +20,9 @@ public class TriangulationBenchmarks private int[] _waterHoles = null!; private double[] _waterHugeVertices = null!; private int[] _waterHugeHoles = null!; + private double[] _waterHuge3Vertices = null!; + private int[] _waterHuge3Holes = null!; + private int[] _waterHuge3Triangles = null!; [GlobalSetup] public void Setup() @@ -44,6 +47,10 @@ public void Setup() // Load water-huge fixture LoadFixture("water-huge", out _waterHugeVertices, out _waterHugeHoles); + + // Load water-huge3 fixture + LoadFixture("water-huge3", out _waterHuge3Vertices, out _waterHuge3Holes); + _waterHuge3Triangles = Earcut.Triangulate(_waterHuge3Vertices, _waterHuge3Holes); } private static void LoadFixture(string name, out double[] vertices, out int[] holes) @@ -73,7 +80,7 @@ public IReadOnlyList TriangulateSquare() [Benchmark] public IReadOnlyList TriangulateComplexPolygon() { - var r = Earcut.Triangulate(_complexPolygon); + var r = Earcut.Triangulate(_complexPolygon); if (r.Length == 0) { throw new Exception(); @@ -117,4 +124,24 @@ public IReadOnlyList TriangulateWaterHuge() return r; } + + [Benchmark] + public IReadOnlyList TriangulateWaterHuge3() + { + var r = Earcut.Triangulate(_waterHuge3Vertices, _waterHuge3Holes); + if (r.Length == 0) + { + throw new Exception(); + } + + return r; + } + + [Benchmark] + public void RefineWaterHuge3() + { + // Copy the pre-computed triangles so each run starts from the same state. + var triangles = (int[])_waterHuge3Triangles.Clone(); + Earcut.Refine(triangles, _waterHuge3Vertices); + } } diff --git a/src/Earcut/Earcut.cs b/src/Earcut/Earcut.cs index 0c77461..389f690 100644 --- a/src/Earcut/Earcut.cs +++ b/src/Earcut/Earcut.cs @@ -50,10 +50,11 @@ public static int[] Triangulate( // Pre-allocate: a simple polygon with V vertices produces at most V-2 triangles. int vertexCount = data.Length / dim; var triangles = new TriangleList(Math.Max(0, (vertexCount - 2) * 3)); + var workspace = new TriangulationWorkspace(); if (hasHoles) { - outerNode = EliminateHoles(data, holeIndices, outerNode, dim); + outerNode = EliminateHoles(data, holeIndices, outerNode, dim, workspace); } double minX = 0, minY = 0, invSize = 0; @@ -81,7 +82,7 @@ public static int[] Triangulate( invSize = invSize != 0.0 ? 32767.0 / invSize : 0.0; } - EarcutLinked(outerNode, triangles, dim, minX, minY, invSize, pass: 0); + EarcutLinked(outerNode, triangles, minX, minY, invSize, workspace); return triangles.ToArray(); } @@ -175,6 +176,158 @@ public static (double[] Vertices, int[] Holes, int Dimensions) Flatten( return (vertices, holes, dimensions); } + /// + /// Refine a triangulation toward the constrained Delaunay triangulation by + /// legalizing every interior edge in place with Lawson flips — maximising the + /// minimum angle and removing most slivers. Mutates + /// in place. An optional post-pass for output, or any + /// manifold triangle-index array. Adapted from delaunator's edge legalization. + /// + /// Triangle indices as returned by ; mutated in place. + /// The flat vertex coordinates passed to . + /// Number of coordinates per vertex in (default 2). + public static void Refine(int[] triangles, ReadOnlySpan coords, int dim = 2) + { + int n = triangles.Length; + if (n < 6) + { + return; + } + + var workspace = new RefineWorkspace(n); + const uint generation = 1; + + int[] halfEdges = workspace.HalfEdges; + halfEdges.AsSpan(0, n).Fill(-1); + int[] hashTable = workspace.HashTable; + uint[] hashStamp = workspace.HashStamp; + byte[] edgeStamp = workspace.EdgeStamp; + int[] edgeStack = workspace.EdgeStack; + int hashMask = workspace.HashMask; + + // Build half-edge twins with an undirected-edge hash; seed interior edges onto the stack. + int stackTop = 0; + for (int e = 0; e < n; e++) + { + int a = triangles[e]; + int b = triangles[NextHE(e)]; + int lo = a < b ? a : b; + int hi = a < b ? b : a; + int h = (int)((unchecked((uint)lo * 0x9e3779b1u) ^ unchecked((uint)hi * 0x85ebca6bu)) & (uint)hashMask); + + while (hashStamp[h] == generation) + { + int s = hashTable[h]; + if (s != -1) + { + int sa = triangles[s]; + int sb = triangles[NextHE(s)]; + if ((sa == lo && sb == hi) || (sa == hi && sb == lo)) + { + halfEdges[e] = s; + halfEdges[s] = e; + hashTable[h] = -1; + edgeStamp[s] = 1; + edgeStack[stackTop++] = s; + break; + } + } + + h = (h + 1) & hashMask; + } + + if (hashStamp[h] != generation) + { + hashTable[h] = e; + hashStamp[h] = generation; + } + } + + while (stackTop > 0) + { + int a = edgeStack[--stackTop]; + edgeStamp[a] = 0; + int b = halfEdges[a]; + if (b == -1) + { + continue; + } + + int a0 = a - a % 3; + int b0 = b - b % 3; + int ar = a0 + (a + 2) % 3; + int al = a0 + (a + 1) % 3; + int bl = b0 + (b + 2) % 3; + int br = b0 + (b + 1) % 3; + int p0 = triangles[ar]; + int pr = triangles[a]; + int pl = triangles[al]; + int p1 = triangles[bl]; + + double x0 = coords[p0 * dim]; + double y0 = coords[p0 * dim + 1]; + double xr = coords[pr * dim]; + double yr = coords[pr * dim + 1]; + double xl = coords[pl * dim]; + double yl = coords[pl * dim + 1]; + double x1 = coords[p1 * dim]; + double y1 = coords[p1 * dim + 1]; + + // Flip the shared edge when it would improve the Delaunay condition and the quad + // is convex (both resulting triangles must remain CCW after the flip). + if (!InCircle(x0, y0, xr, yr, xl, yl, x1, y1) && + Orient(x0, y0, xr, yr, x1, y1) > 0 && + Orient(x0, y0, x1, y1, xl, yl) > 0) + { + triangles[a] = p1; + triangles[b] = p0; + + int hbl = halfEdges[bl]; + int har = halfEdges[ar]; + halfEdges[a] = hbl; + if (hbl != -1) + { + halfEdges[hbl] = a; + } + + halfEdges[b] = har; + if (har != -1) + { + halfEdges[har] = b; + } + + halfEdges[ar] = bl; + halfEdges[bl] = ar; + + if (hbl != -1 && edgeStamp[a] == 0) + { + edgeStamp[a] = 1; + edgeStack[stackTop++] = a; + } + + if (har != -1 && edgeStamp[b] == 0) + { + edgeStamp[b] = 1; + edgeStack[stackTop++] = b; + } + + if (halfEdges[al] != -1 && edgeStamp[al] == 0) + { + edgeStamp[al] = 1; + edgeStack[stackTop++] = al; + } + + if (halfEdges[br] != -1 && edgeStamp[br] == 0) + { + edgeStamp[br] = 1; + edgeStack[stackTop++] = br; + } + } + } + } + + private const int BlockSize = 16; + // ──────────────────────── linked-list helpers ─────────────────────────── /// @@ -215,13 +368,17 @@ public static (double[] Vertices, int[] Holes, int Dimensions) Flatten( } /// Eliminates collinear or duplicate points. - private static Node? FilterPoints(Node? start, Node? end = null) + private static Node? FilterPoints( + Node? start, + Node? end = null, + TriangulationWorkspace? workspace = null) { if (start is null) { return null; } + bool full = end is null; end ??= start; Node p = start; @@ -231,21 +388,26 @@ public static (double[] Vertices, int[] Holes, int Dimensions) Flatten( { again = false; - if (!p.Steiner && + if (!ReferenceEquals(p, p.Next) && !p.Steiner && (p == p.Next! || Area(p.Prev!, p, p.Next!) == 0.0)) { - RemoveNode(p); - p = end = p.Prev!; - if (ReferenceEquals(p, p.Next)) + if (full || ReferenceEquals(p, end)) { - break; + end = p.Prev!; + } + if (workspace is not null) + { + workspace.FilteredOut = true; } + RemoveNode(p, workspace); + p = p.Prev!; again = true; } - else + else if (full || !ReferenceEquals(p, end)) { p = p.Next!; + again = !full; } } while (again || !ReferenceEquals(p, end)); @@ -260,41 +422,41 @@ public static (double[] Vertices, int[] Holes, int Dimensions) Flatten( private static void EarcutLinked( Node? ear, TriangleList triangles, - int dim, double minX, double minY, double invSize, - int pass) + TriangulationWorkspace workspace) { if (ear is null) { return; } - if (pass == 0 && invSize != 0.0) + if (invSize != 0.0) { - IndexCurve(ear, minX, minY, invSize); + IndexCurve(ear, minX, minY, invSize, workspace); } Node stop = ear; + bool cured = false; while (!ReferenceEquals(ear!.Prev, ear.Next)) { Node prev = ear.Prev!; Node next = ear.Next!; - if (invSize != 0.0 - ? IsEarHashed(ear, minX, minY, invSize) - : IsEar(ear)) + if (Area(prev, ear, next) < 0.0 && + (invSize != 0.0 + ? IsEarHashed(ear, minX, minY, invSize) + : IsEar(ear))) { // Emit triangle. triangles.Add(prev.I, ear.I, next.I); - RemoveNode(ear); + RemoveNode(ear, workspace); - // Skip the next vertex — produces fewer sliver triangles. - ear = next.Next!; - stop = next.Next!; + ear = next; + stop = next; continue; } @@ -302,26 +464,26 @@ private static void EarcutLinked( if (ReferenceEquals(ear, stop)) { - switch (pass) + // Try filtering collinear/coincident points and re-clipping. + workspace.FilteredOut = false; + ear = FilterPoints(ear, workspace: workspace)!; + if (workspace.FilteredOut) { - case 0: - EarcutLinked( - FilterPoints(ear), triangles, dim, - minX, minY, invSize, pass: 1); - break; - - case 1: - ear = CureLocalIntersections(FilterPoints(ear)!, triangles); - EarcutLinked( - ear, triangles, dim, - minX, minY, invSize, pass: 2); - break; + stop = ear; + continue; + } - case 2: - SplitEarcut(ear, triangles, dim, minX, minY, invSize); - break; + // Cure small local self-intersections once, then retry. + if (!cured) + { + ear = CureLocalIntersections(ear, triangles, workspace); + stop = ear; + cured = true; + continue; } + // Last resort: split the polygon. + SplitEarcut(ear, triangles, minX, minY, invSize, workspace); break; } } @@ -331,15 +493,11 @@ private static void EarcutLinked( [MethodImpl(MethodImplOptions.AggressiveOptimization)] private static bool IsEar(Node ear) { + // Reflex (area >= 0) check is hoisted into EarcutLinked caller. Node a = ear.Prev!; Node b = ear; Node c = ear.Next!; - if (Area(a, b, c) >= 0.0) - { - return false; - } - double ax = a.X, ay = a.Y; double bx = b.X, by = b.Y; double cx = c.X, cy = c.Y; @@ -375,15 +533,11 @@ private static bool IsEarHashed( double minY, double invSize) { + // Reflex (area >= 0) check is hoisted into EarcutLinked caller. Node a = ear.Prev!; Node b = ear; Node c = ear.Next!; - if (Area(a, b, c) >= 0.0) - { - return false; - } - double ax = a.X, ay = a.Y; double bx = b.X, by = b.Y; double cx = c.X, cy = c.Y; @@ -396,38 +550,13 @@ private static bool IsEarHashed( int minZ = ZOrder(x0, y0, minX, minY, invSize); int maxZ = ZOrder(x1, y1, minX, minY, invSize); + // Look for points inside the triangle in decreasing z-order. Node? p = ear.PrevZ; - Node? n = ear.NextZ; - - while (p is not null && p.Z >= minZ && - n is not null && n.Z <= maxZ) - { - if (p.X >= x0 && p.X <= x1 && p.Y >= y0 && p.Y <= y1 && - !ReferenceEquals(p, a) && !ReferenceEquals(p, c) && - PointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, p.X, p.Y) && - Area(p.Prev!, p, p.Next!) >= 0.0) - { - return false; - } - - p = p.PrevZ; - - if (n.X >= x0 && n.X <= x1 && n.Y >= y0 && n.Y <= y1 && - !ReferenceEquals(n, a) && !ReferenceEquals(n, c) && - PointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, n.X, n.Y) && - Area(n.Prev!, n, n.Next!) >= 0.0) - { - return false; - } - - n = n.NextZ; - } - while (p is not null && p.Z >= minZ) { if (p.X >= x0 && p.X <= x1 && p.Y >= y0 && p.Y <= y1 && - !ReferenceEquals(p, a) && !ReferenceEquals(p, c) && - PointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, p.X, p.Y) && + !ReferenceEquals(p, c) && !(ax == p.X && ay == p.Y) && + PointInTriangle(ax, ay, bx, by, cx, cy, p.X, p.Y) && Area(p.Prev!, p, p.Next!) >= 0.0) { return false; @@ -436,11 +565,13 @@ private static bool IsEarHashed( p = p.PrevZ; } + // Look for points in increasing z-order. + Node? n = ear.NextZ; while (n is not null && n.Z <= maxZ) { if (n.X >= x0 && n.X <= x1 && n.Y >= y0 && n.Y <= y1 && - !ReferenceEquals(n, a) && !ReferenceEquals(n, c) && - PointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, n.X, n.Y) && + !ReferenceEquals(n, c) && !(ax == n.X && ay == n.Y) && + PointInTriangle(ax, ay, bx, by, cx, cy, n.X, n.Y) && Area(n.Prev!, n, n.Next!) >= 0.0) { return false; @@ -458,33 +589,38 @@ private static bool IsEarHashed( /// Walks the polygon and fixes small local self-intersections by /// emitting a triangle at each crossing. /// - private static Node CureLocalIntersections(Node start, TriangleList triangles) + private static Node CureLocalIntersections( + Node start, + TriangleList triangles, + TriangulationWorkspace workspace) { Node p = start; + bool cured = false; do { Node a = p.Prev!; Node b = p.Next!.Next!; - if (a != b && - Intersects(a, p, p.Next!, b) && + if (!ReferenceEquals(a, b) && + Intersects(a, p, p.Next!, b, includeBoundary: false) && LocallyInside(a, b) && LocallyInside(b, a)) { triangles.Add(a.I, p.I, b.I); - RemoveNode(p); - RemoveNode(p.Next!); + RemoveNode(p, workspace); + RemoveNode(p.Next!, workspace); p = start = b; + cured = true; } p = p.Next!; } while (!ReferenceEquals(p, start)); - return FilterPoints(p)!; + return cured ? FilterPoints(p, workspace: workspace)! : p; } /// @@ -494,10 +630,10 @@ private static Node CureLocalIntersections(Node start, TriangleList triangles) private static void SplitEarcut( Node start, TriangleList triangles, - int dim, double minX, double minY, - double invSize) + double invSize, + TriangulationWorkspace workspace) { Node a = start; @@ -511,11 +647,11 @@ private static void SplitEarcut( { Node c = SplitPolygon(a, b); - a = FilterPoints(a, a.Next)!; - c = FilterPoints(c, c.Next)!; + a = FilterPoints(a, a.Next, workspace)!; + c = FilterPoints(c, c.Next, workspace)!; - EarcutLinked(a, triangles, dim, minX, minY, invSize, pass: 0); - EarcutLinked(c, triangles, dim, minX, minY, invSize, pass: 0); + EarcutLinked(a, triangles, minX, minY, invSize, workspace); + EarcutLinked(c, triangles, minX, minY, invSize, workspace); return; } @@ -537,7 +673,8 @@ private static Node EliminateHoles( ReadOnlySpan data, ReadOnlySpan holeIndices, Node outerNode, - int dim) + int dim, + TriangulationWorkspace workspace) { var queue = new Node[holeIndices.Length]; int queueCount = 0; @@ -564,16 +701,16 @@ private static Node EliminateHoles( queue.AsSpan(0, queueCount).Sort(static (a, b) => { - int cmp = a.X.CompareTo(b.X); - if (cmp != 0) + double dx = a.X - b.X; + if (dx != 0.0) { - return cmp; + return dx < 0.0 ? -1 : 1; } - cmp = a.Y.CompareTo(b.Y); - if (cmp != 0) + double dy = a.Y - b.Y; + if (dy != 0.0) { - return cmp; + return dy < 0.0 ? -1 : 1; } double aSlope = (a.Next!.Y - a.Y) / (a.Next.X - a.X); @@ -581,17 +718,34 @@ private static Node EliminateHoles( return aSlope.CompareTo(bSlope); }); - for (int i = 0; i < queueCount; i++) + // Build block-bbox index seeded with the outer ring. + BuildBlockIndex(workspace, data.Length / dim, holeIndices.Length); + IndexSegment(outerNode, outerNode, workspace); // outerNode === outerNode → full ring + + // Process holes from left to right; indexActive keeps GrowBlock live. + workspace.IndexActive = true; + try { - outerNode = EliminateHole(queue[i], outerNode); + for (int i = 0; i < queueCount; i++) + { + outerNode = EliminateHole(queue[i], outerNode, workspace); + } + } + finally + { + workspace.IndexActive = false; } - return outerNode; + // Collapse collinear/coincident points across the whole merged ring before clipping. + return FilterPoints(outerNode, workspace: workspace)!; } - private static Node EliminateHole(Node hole, Node outerNode) + private static Node EliminateHole( + Node hole, + Node outerNode, + TriangulationWorkspace workspace) { - Node? bridge = FindHoleBridge(hole, outerNode); + Node? bridge = FindHoleBridge(hole, outerNode, workspace); if (bridge is null) { @@ -599,197 +753,406 @@ private static Node EliminateHole(Node hole, Node outerNode) } Node bridgeReverse = SplitPolygon(bridge, hole); - FilterPoints(bridgeReverse, bridgeReverse.Next); - return FilterPoints(bridge, bridge.Next)!; + + // Index the merged-in segment before filtering. + Node bridge2 = bridgeReverse.Next!; + IndexSegment(bridge, bridge2.Next!, workspace); + + // Heal collinear/coincident points around the two new slit edges. + FilterPoints(bridgeReverse, bridgeReverse.Next, workspace); + return FilterPoints(bridge, bridge.Next, workspace)!; + } + + // ──────────────── block-bbox index for FindHoleBridge ──────────────── + + private static void BuildBlockIndex( + TriangulationWorkspace workspace, + int maxNodes, + int numHoles) => + workspace.EnsureBlockIndexCapacity(maxNodes, numHoles, BlockSize); + + /// + /// Index the ring segment head..stop (exclusive; head==stop means the whole ring) + /// as ceil(len/BlockSize) blocks, each with a [minX,minY,maxX,maxY] bbox. + /// Reuses as the owning block index during this phase. + /// + private static void IndexSegment( + Node head, + Node stop, + TriangulationWorkspace workspace) + { + Node p = head; + do + { + int blockIndex = workspace.BlockCount++; + workspace.BlockHeads![blockIndex] = p; + double minX = double.PositiveInfinity; + double minY = double.PositiveInfinity; + double maxX = double.NegativeInfinity; + double maxY = double.NegativeInfinity; + int edgeCount = 0; + do + { + Node current = p.Next!; + p.Z = blockIndex; + if (p.X < minX) + { + minX = p.X; + } + + if (p.X > maxX) + { + maxX = p.X; + } + + if (p.Y < minY) + { + minY = p.Y; + } + + if (p.Y > maxY) + { + maxY = p.Y; + } + + if (current.X < minX) + { + minX = current.X; + } + + if (current.X > maxX) + { + maxX = current.X; + } + + if (current.Y < minY) + { + minY = current.Y; + } + + if (current.Y > maxY) + { + maxY = current.Y; + } + + p = current; + } + while (++edgeCount < BlockSize && !ReferenceEquals(p, stop)); + + workspace.BlockStops![blockIndex] = p; + int bboxIndex = blockIndex * 4; + double[] blockBoundingBoxes = workspace.BlockBoundingBoxes!; + blockBoundingBoxes[bboxIndex] = minX; + blockBoundingBoxes[bboxIndex + 1] = minY; + blockBoundingBoxes[bboxIndex + 2] = maxX; + blockBoundingBoxes[bboxIndex + 3] = maxY; + } + while (!ReferenceEquals(p, stop)); + } + + /// + /// When heals an edge head→tail, grow head's block bbox + /// to cover tail so the leftward-ray prune cannot false-skip the new edge. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void GrowBlock( + Node head, + Node tail, + TriangulationWorkspace workspace) + { + int bboxIndex = head.Z * 4; + double[] blockBoundingBoxes = workspace.BlockBoundingBoxes!; + if (tail.X < blockBoundingBoxes[bboxIndex]) + { + blockBoundingBoxes[bboxIndex] = tail.X; + } + + if (tail.Y < blockBoundingBoxes[bboxIndex + 1]) + { + blockBoundingBoxes[bboxIndex + 1] = tail.Y; + } + + if (tail.X > blockBoundingBoxes[bboxIndex + 2]) + { + blockBoundingBoxes[bboxIndex + 2] = tail.X; + } + + if (tail.Y > blockBoundingBoxes[bboxIndex + 3]) + { + blockBoundingBoxes[bboxIndex + 3] = tail.Y; + } + } + + private static Node LiveBlockStop(int blockIndex, TriangulationWorkspace workspace) + { + Node stop = workspace.BlockStops![blockIndex]; + while (!ReferenceEquals(stop.Prev!.Next, stop)) + { + stop = stop.Next!; + } + + workspace.BlockStops[blockIndex] = stop; + return stop; + } + + private static Node LiveBlockHead(int blockIndex, TriangulationWorkspace workspace) + { + Node head = workspace.BlockHeads![blockIndex]; + while (!ReferenceEquals(head.Prev!.Next, head)) + { + head = head.Next!; + } + + workspace.BlockHeads[blockIndex] = head; + return head; } /// /// David Eberly's algorithm for finding a bridge between a hole and the - /// outer polygon. + /// outer polygon — accelerated with the block-bbox index. /// - private static Node? FindHoleBridge(Node hole, Node outerNode) + private static Node? FindHoleBridge( + Node hole, + Node outerNode, + TriangulationWorkspace workspace) { - Node p = outerNode; double hx = hole.X; double hy = hole.Y; double qx = double.NegativeInfinity; Node? m = null; - if (hole == p) + if (hole == outerNode) { - return p; + return outerNode; } - do + double[] blockBoundingBoxes = workspace.BlockBoundingBoxes!; + + // First scan: find the leftward ray crossing to locate the best bridge candidate. + for (int blockIndex = 0, bboxIndex = 0; blockIndex < workspace.BlockCount; blockIndex++, bboxIndex += 4) { - if (hole == p.Next!) + if (hy < blockBoundingBoxes[bboxIndex + 1] || + hy > blockBoundingBoxes[bboxIndex + 3] || + blockBoundingBoxes[bboxIndex] > hx || + blockBoundingBoxes[bboxIndex + 2] <= qx) { - return p.Next; + continue; } - if (hy <= p.Y && hy >= p.Next!.Y && p.Next.Y != p.Y) + Node blockStop = LiveBlockStop(blockIndex, workspace); + Node p = LiveBlockHead(blockIndex, workspace); + do { - double x = p.X + (hy - p.Y) * (p.Next.X - p.X) / (p.Next.Y - p.Y); - - if (x <= hx && x > qx) + if (ReferenceEquals(p.Prev!.Next, p)) // skip removed nodes { - qx = x; - m = p.X < p.Next.X ? p : p.Next; - if (x == hx) + if (hole == p.Next!) + { + return p.Next; + } + else if (hy <= p.Y && hy >= p.Next!.Y && p.Next.Y != p.Y) { - return m; + double x = p.X + (hy - p.Y) * (p.Next.X - p.X) / (p.Next.Y - p.Y); + if (x <= hx && x > qx) + { + qx = x; + m = p.X < p.Next.X ? p : p.Next; + if (x == hx) + { + return m; + } + } } } + p = p.Next!; } - - p = p.Next!; + while (!ReferenceEquals(p, blockStop)); } - while (!ReferenceEquals(p, outerNode)); if (m is null) { return null; } - Node stop = m; double mx = m.X; double my = m.Y; + double tminY = Math.Min(hy, my); + double tmaxY = Math.Max(hy, my); double tanMin = double.PositiveInfinity; - p = m; - - do + // Second scan: find the point of minimum angle within the candidate triangle. + for (int blockIndex = 0, bboxIndex = 0; blockIndex < workspace.BlockCount; blockIndex++, bboxIndex += 4) { - if (hx >= p.X && p.X >= mx && hx != p.X && - PointInTriangle( - hy < my ? hx : qx, hy, - mx, my, - hy < my ? qx : hx, hy, - p.X, p.Y)) + if (blockBoundingBoxes[bboxIndex + 2] < mx || + blockBoundingBoxes[bboxIndex] > hx || + blockBoundingBoxes[bboxIndex + 3] < tminY || + blockBoundingBoxes[bboxIndex + 1] > tmaxY) { - double tan = Math.Abs(hy - p.Y) / (hx - p.X); + continue; + } - if (LocallyInside(p, hole) && - (tan < tanMin || - (tan == tanMin && - (p.X > m.X || (p.X == m.X && SectorContainsSector(m, p)))))) + Node blockStop = LiveBlockStop(blockIndex, workspace); + Node p = LiveBlockHead(blockIndex, workspace); + do + { + if (ReferenceEquals(p.Prev!.Next, p) && + hx >= p.X && p.X >= mx && hx != p.X && + PointInTriangle( + hy < my ? hx : qx, hy, + mx, my, + hy < my ? qx : hx, hy, + p.X, p.Y)) { - m = p; - tanMin = tan; + double tan = Math.Abs(hy - p.Y) / (hx - p.X); + if ((LocallyInside(p, hole) || + (p.Y == hy && p.Next!.Y == hy && p.Next.X > hx)) && + (tan < tanMin || + (tan == tanMin && + (p.X > m.X || (p.X == m.X && SectorContainsSector(m, p)))))) + { + m = p; + tanMin = tan; + } } + p = p.Next!; } - - p = p.Next!; + while (!ReferenceEquals(p, blockStop)); } - while (!ReferenceEquals(p, stop)); return m; } // ───────────────────── z-order spatial indexing ───────────────────────── - /// Interlinks polygon nodes in z-order. + /// + /// Interlinks polygon nodes in z-order using radix sort for large rings, + /// insertion sort for small ones. + /// private static void IndexCurve( Node start, double minX, double minY, - double invSize) + double invSize, + TriangulationWorkspace workspace) { + // Count nodes. + int nodeCount = 0; Node p = start; + do + { + nodeCount++; + p = p.Next!; + } + while (!ReferenceEquals(p, start)); + + workspace.EnsureSortCapacity(nodeCount); + // Collect nodes and (re-)compute z-order values; Z may hold a stale block index. + int i = 0; + p = start; do { - if (p.Z == 0) + p.Z = ZOrder(p.X, p.Y, minX, minY, invSize); + workspace.SortNodes![i++] = p; + p = p.Next!; + } while (!ReferenceEquals(p, start)); + + SortNodes(nodeCount, workspace); + + // Relink the z-order list. + Node? prev = null; + for (int j = 0; j < nodeCount; j++) + { + Node node = workspace.SortNodes![j]; + node.PrevZ = prev; + if (prev is not null) { - p.Z = ZOrder(p.X, p.Y, minX, minY, invSize); + prev.NextZ = node; } - p.PrevZ = p.Prev; - p.NextZ = p.Next; - p = p.Next!; + prev = node; } - while (!ReferenceEquals(p, start)); - - p.PrevZ!.NextZ = null; - p.PrevZ = null; + prev!.NextZ = null; - SortLinked(p); + // Clear node references so the GC can collect them after this call. + Array.Clear(workspace.SortNodes!, 0, nodeCount); + Array.Clear(workspace.SortBuffer!, 0, nodeCount); } /// - /// Simon Tatham's linked-list merge sort. - /// + /// Sort the first entries of by z-order: + /// insertion sort for small n, four-pass LSD radix sort otherwise. + /// The result is always in (even number of passes). /// - private static Node SortLinked(Node list) + private static void SortNodes(int n, TriangulationWorkspace workspace) { - int numMerges; - int inSize = 1; - - do + if (n <= 32) { - Node? p = list; - list = null!; - Node? tail = null; - numMerges = 0; - - while (p is not null) + for (int i = 1; i < n; i++) { - numMerges++; - Node? q = p; - int pSize = 0; - - for (int i = 0; i < inSize; i++) + Node node = workspace.SortNodes![i]; + uint z = (uint)node.Z; + int j = i - 1; + while (j >= 0 && (uint)workspace.SortNodes[j].Z > z) { - pSize++; - q = q!.NextZ; - if (q is null) - { - break; - } + workspace.SortNodes[j + 1] = workspace.SortNodes[j]; + j--; } - int qSize = inSize; - - while (pSize > 0 || (qSize > 0 && q is not null)) - { - Node e; + workspace.SortNodes[j + 1] = node; + } + return; + } - if (pSize != 0 && - (qSize == 0 || q is null || p!.Z <= q.Z)) - { - e = p!; - p = p!.NextZ; - pSize--; - } - else - { - e = q!; - q = q!.NextZ; - qSize--; - } + // Copy z values for the radix passes. + for (int i = 0; i < n; i++) + { + workspace.SortKeys![i] = (uint)workspace.SortNodes![i].Z; + } - if (tail is not null) - { - tail.NextZ = e; - } - else - { - list = e; - } + // Four 8-bit LSD passes; even pass count returns result in SortNodes. + RadixPass(n, workspace.SortNodes!, workspace.SortKeys!, workspace.SortBuffer!, workspace.SortKeyBuffer!, 0, workspace); + RadixPass(n, workspace.SortBuffer!, workspace.SortKeyBuffer!, workspace.SortNodes!, workspace.SortKeys!, 8, workspace); + RadixPass(n, workspace.SortNodes!, workspace.SortKeys!, workspace.SortBuffer!, workspace.SortKeyBuffer!, 16, workspace); + RadixPass(n, workspace.SortBuffer!, workspace.SortKeyBuffer!, workspace.SortNodes!, workspace.SortKeys!, 24, workspace); + } - e.PrevZ = tail; - tail = e; - } + /// + /// One LSD radix pass: stably scatter the first nodes + /// from to , bucketed by the + /// 8-bit digit of z at the given bit . + /// + private static void RadixPass( + int n, + Node[] src, + uint[] srcZ, + Node[] dst, + uint[] dstZ, + int shift, + TriangulationWorkspace workspace) + { + uint[] counts = workspace.Counts; + Array.Clear(counts, 0, counts.Length); - p = q; - } + for (int i = 0; i < n; i++) + { + counts[(srcZ[i] >> shift) & 0xff]++; + } - tail!.NextZ = null; - inSize *= 2; + uint sum = 0; + for (int bucket = 0; bucket < counts.Length; bucket++) + { + uint count = counts[bucket]; + counts[bucket] = sum; + sum += count; } - while (numMerges > 1); - return list; + for (int i = 0; i < n; i++) + { + uint z = srcZ[i]; + uint position = counts[(z >> shift) & 0xff]++; + dst[position] = src[i]; + dstZ[position] = z; + } } /// @@ -849,29 +1212,60 @@ private static bool PointInTriangleExceptFirst( private static bool SectorContainsSector(Node m, Node p) => Area(m.Prev!, m, p.Prev!) < 0.0 && Area(p.Next!, m, m.Next!) < 0.0; - private static bool IsValidDiagonal(Node a, Node b) => - a.Next!.I != b.I && - a.Prev!.I != b.I && - !IntersectsPolygon(a, b) && - (LocallyInside(a, b) && LocallyInside(b, a) && MiddleInside(a, b) && - (Area(a.Prev, a, b.Prev!) != 0.0 || Area(a, b.Prev!, b) != 0.0) || - a == b && - Area(a.Prev, a, a.Next) > 0.0 && - Area(b.Prev!, b, b.Next!) > 0.0); + private static bool IsValidDiagonal(Node a, Node b) + { + bool zeroLength = a == b && + Area(a.Prev!, a, a.Next!) > 0.0 && + Area(b.Prev!, b, b.Next!) > 0.0; + + return a.Next!.I != b.I && + (zeroLength || + LocallyInside(a, b) && LocallyInside(b, a) && + (Area(a.Prev!, a, b.Prev!) != 0.0 || Area(a, b.Prev!, b) != 0.0)) && + !IntersectsPolygon(a, b) && + (zeroLength || MiddleInside(a, b)); + } [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static bool Intersects(Node p1, Node q1, Node p2, Node q2) + private static bool Intersects(Node p1, Node q1, Node p2, Node q2, bool includeBoundary = true) { - int o1 = Math.Sign(Area(p1, q1, p2)); - int o2 = Math.Sign(Area(p1, q1, q2)); - int o3 = Math.Sign(Area(p2, q2, p1)); - int o4 = Math.Sign(Area(p2, q2, q1)); - - return (o1 != o2 && o3 != o4) || - (o1 == 0 && OnSegment(p1, p2, q1)) || - (o2 == 0 && OnSegment(p1, q2, q1)) || - (o3 == 0 && OnSegment(p2, p1, q2)) || - (o4 == 0 && OnSegment(p2, q1, q2)); + double o1 = Area(p1, q1, p2); + double o2 = Area(p1, q1, q2); + double o3 = Area(p2, q2, p1); + double o4 = Area(p2, q2, q1); + + if (((o1 > 0 && o2 < 0) || (o1 < 0 && o2 > 0)) && + ((o3 > 0 && o4 < 0) || (o3 < 0 && o4 > 0))) + { + return true; + } + + if (!includeBoundary) + { + return false; + } + + if (o1 == 0.0 && OnSegment(p1, p2, q1)) + { + return true; + } + + if (o2 == 0.0 && OnSegment(p1, q2, q1)) + { + return true; + } + + if (o3 == 0.0 && OnSegment(p2, p1, q2)) + { + return true; + } + + if (o4 == 0.0 && OnSegment(p2, q1, q2)) + { + return true; + } + + return false; } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -881,18 +1275,30 @@ private static bool OnSegment(Node p, Node q, Node r) => private static bool IntersectsPolygon(Node a, Node b) { - Node p = a; + double minX = Math.Min(a.X, b.X); + double maxX = Math.Max(a.X, b.X); + double minY = Math.Min(a.Y, b.Y); + double maxY = Math.Max(a.Y, b.Y); + Node p = a; do { - if (p.I != a.I && p.Next!.I != a.I && - p.I != b.I && p.Next.I != b.I && - Intersects(p, p.Next, a, b)) + Node n = p.Next!; + // Fast bbox skip — if both endpoints are on the same outside of the diagonal + // bbox, the edge can't cross the diagonal. + if ((p.X > maxX && n.X > maxX) || (p.X < minX && n.X < minX) || + (p.Y > maxY && n.Y > maxY) || (p.Y < minY && n.Y < minY)) + { + p = n; + continue; + } + if (p.I != a.I && n.I != a.I && p.I != b.I && n.I != b.I && + Intersects(p, n, a, b)) { return true; } - p = p.Next!; + p = n; } while (!ReferenceEquals(p, a)); @@ -914,14 +1320,13 @@ private static bool MiddleInside(Node a, Node b) do { - if (((p.Y > py) != (p.Next!.Y > py)) && - p.Next.Y != p.Y && - px < (p.Next.X - p.X) * (py - p.Y) / (p.Next.Y - p.Y) + p.X) + Node n = p.Next!; + if (((p.Y > py) != (n.Y > py)) && + px < (n.X - p.X) * (py - p.Y) / (n.Y - p.Y) + p.X) { inside = !inside; } - - p = p.Next; + p = n; } while (!ReferenceEquals(p, a)); @@ -993,12 +1398,18 @@ private static Node InsertNode(int i, double x, double y, Node? last) } [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static void RemoveNode(Node p) + private static void RemoveNode(Node p, TriangulationWorkspace? workspace = null) { - p.Next!.Prev = p.Prev; - p.Prev!.Next = p.Next; + Node prev = p.Prev!; + Node next = p.Next!; + next.Prev = prev; + prev.Next = next; p.PrevZ?.NextZ = p.NextZ; p.NextZ?.PrevZ = p.PrevZ; + if (workspace?.IndexActive == true) + { + GrowBlock(prev, next, workspace); + } } private static double SignedArea( @@ -1032,6 +1443,132 @@ private static double Max3(double a, double b, double c) => ? (a > c ? a : c) : (b > c ? b : c); + // ───────────────────── Refine geometry helpers ───────────────────────── + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static double Orient(double ax, double ay, double bx, double by, double cx, double cy) => + (bx - ax) * (cy - ay) - (by - ay) * (cx - ax); + + /// + /// Returns true when point p is inside or on the circumcircle of (a,b,c). + /// Sign convention matches earcut's CCW winding — the tolerance margin + /// prevents infinite flip loops on near-cocircular quads. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static bool InCircle( + double ax, double ay, + double bx, double by, + double cx, double cy, + double px, double py) + { + double dx = ax - px, dy = ay - py; + double ex = bx - px, ey = by - py; + double fx = cx - px, fy = cy - py; + double ap = dx * dx + dy * dy; + double bp = ex * ex + ey * ey; + double cp = fx * fx + fy * fy; + double s = ap + bp + cp; + return dx * (ey * cp - bp * fy) - dy * (ex * cp - bp * fx) + ap * (ex * fy - ey * fx) <= 1e-13 * s * s; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static int NextHE(int e) => e - e % 3 + (e + 1) % 3; + + private sealed class TriangulationWorkspace + { + public bool FilteredOut { get; set; } + + public bool IndexActive { get; set; } + + public double[]? BlockBoundingBoxes { get; private set; } + + public int BlockCount { get; set; } + + public Node[]? BlockHeads { get; private set; } + + public Node[]? BlockStops { get; private set; } + + public Node[]? SortNodes { get; private set; } + + public Node[]? SortBuffer { get; private set; } + + public uint[]? SortKeys { get; private set; } + + public uint[]? SortKeyBuffer { get; private set; } + + public uint[] Counts { get; } = new uint[256]; + + public void EnsureBlockIndexCapacity(int maxNodes, int numHoles, int blockSize) + { + int maxBlocks = (maxNodes + 2 * numHoles + blockSize - 1) / blockSize + numHoles + 2; + int bboxLength = maxBlocks * 4; + + if (BlockBoundingBoxes is null || BlockBoundingBoxes.Length < bboxLength) + { + BlockBoundingBoxes = new double[bboxLength]; + } + + if (BlockHeads is null || BlockHeads.Length < maxBlocks) + { + BlockHeads = new Node[maxBlocks]; + } + + if (BlockStops is null || BlockStops.Length < maxBlocks) + { + BlockStops = new Node[maxBlocks]; + } + + BlockCount = 0; + } + + public void EnsureSortCapacity(int nodeCount) + { + if (SortNodes is null || SortNodes.Length < nodeCount) + { + SortNodes = new Node[nodeCount]; + SortBuffer = new Node[nodeCount]; + } + + if (SortKeys is null || SortKeys.Length < nodeCount) + { + SortKeys = new uint[nodeCount]; + SortKeyBuffer = new uint[nodeCount]; + } + } + } + + private sealed class RefineWorkspace + { + public RefineWorkspace(int triangleIndexCount) + { + EdgeStack = new int[triangleIndexCount]; + HalfEdges = new int[triangleIndexCount]; + EdgeStamp = new byte[triangleIndexCount]; + + int hashSize = 1; + while (hashSize < triangleIndexCount * 4) + { + hashSize <<= 1; + } + + HashTable = new int[hashSize]; + HashStamp = new uint[hashSize]; + HashMask = hashSize - 1; + } + + public int[] EdgeStack { get; } + + public int[] HalfEdges { get; } + + public int[] HashTable { get; } + + public uint[] HashStamp { get; } + + public byte[] EdgeStamp { get; } + + public int HashMask { get; } + } + // ─────────────────────── triangle accumulator ────────────────────────── /// @@ -1076,7 +1613,7 @@ private sealed class Node(int i, double x, double y) : IEquatable public Node? Next { get; set; } // next vertex in ring - public int Z { get; set; } // z-order curve value + public int Z { get; set; } // z-order curve value; doubles as block index during eliminateHoles public Node? PrevZ { get; set; } // previous node in z-order diff --git a/src/Earcut/Earcut.csproj b/src/Earcut/Earcut.csproj index d2d3a79..232e827 100644 --- a/src/Earcut/Earcut.csproj +++ b/src/Earcut/Earcut.csproj @@ -13,7 +13,7 @@ Earcut.NET - 1.1.1 + 1.2.0 Michael Conrad Copyright © 2026 Michael Conrad A fast and robust C# port of the mapbox/earcut polygon triangulation library. Supports holes, zero-order curve spatial indexing, and modern .NET 8+ optimizations. diff --git a/test/Earcut.Tests/EarcutPortedTests.cs b/test/Earcut.Tests/EarcutPortedTests.cs index dd684b7..482adac 100644 --- a/test/Earcut.Tests/EarcutPortedTests.cs +++ b/test/Earcut.Tests/EarcutPortedTests.cs @@ -122,7 +122,9 @@ public void Indices2D() { double[] data = [10, 0, 0, 50, 60, 60, 70, 10]; var indices = Earcut.Triangulate(data); - int[] expected = [1, 0, 3, 3, 2, 1]; + // This simple quad is expected to triangulate deterministically; keep asserting + // the exact index order so upstream-port regressions stay visible. + int[] expected = [1, 0, 3, 1, 3, 2]; Assert.Equal(expected, indices); } @@ -131,7 +133,8 @@ public void Indices3D() { double[] data = [10, 0, 0, 0, 50, 0, 60, 60, 0, 70, 10, 0]; var indices = Earcut.Triangulate(data, [], 3); - int[] expected = [1, 0, 3, 3, 2, 1]; + // The third coordinate should not affect the deterministic triangulation order. + int[] expected = [1, 0, 3, 1, 3, 2]; Assert.Equal(expected, indices); } @@ -150,4 +153,216 @@ public void InfiniteLoop() // Should not hang Earcut.Triangulate(data, holes, 2); } + + [Fact] + public void RefineImprovesBadQuadDiagonal() + { + double[] vertices = [0, 0, 3, 0, 10, 1, 0, 2]; + int[] triangles = [2, 3, 0, 2, 0, 1]; + double beforePerimeter = TrianglePerimeter(triangles, vertices); + + Earcut.Refine(triangles, vertices); + + int[] expected = [2, 3, 1, 3, 0, 1]; + Assert.Equal(expected, triangles); + Assert.True(TrianglePerimeter(triangles, vertices) < beforePerimeter * 0.7); + Assert.Equal(0.0, Earcut.Deviation(vertices, [], 2, triangles)); + } + + [Fact] + public void RefineLeaveGoodQuadDiagonalAlone() + { + double[] vertices = [0, 0, 5, 0, 4, 1, 0, 4]; + int[] triangles = [2, 3, 0, 2, 0, 1]; + + Earcut.Refine(triangles, vertices); + + int[] expected = [2, 3, 0, 2, 0, 1]; + Assert.Equal(expected, triangles); + Assert.Equal(0.0, Earcut.Deviation(vertices, [], 2, triangles)); + } + + [Fact] + public void RefinePreservesConcavePolygon() + { + double[] vertices = [0, 0, 4, 0, 4, 1, 1, 1, 1, 4, 0, 4]; + int[] triangles = Earcut.Triangulate(vertices); + int length = triangles.Length; + double beforePerimeter = TrianglePerimeter(triangles, vertices); + + Earcut.Refine(triangles, vertices); + + Assert.Equal(length, triangles.Length); + Assert.True(TrianglePerimeter(triangles, vertices) < beforePerimeter * 0.9); + Assert.Equal(0.0, Earcut.Deviation(vertices, [], 2, triangles)); + } + + [Fact] + public void RefineTerminatesOnNearCocircularPoints() + { + double[] vertices = + [ + 127.65906365022843, 9.336137742499535, + 124.21725103117963, 30.888097161477972, + 91.35514946628345, 89.65621376119454, + 40.10446780041529, 121.5550560957686, + -110.83205604043928, 64.03323632184248, + -127.20394987965459, -14.253249980770189, + 61.074962259031416, -112.48932831632469, + 127.37846573978545, -12.598669206638515, + 127.77010311801033, -7.668164657400608 + ]; + int[] triangles = Earcut.Triangulate(vertices); + int length = triangles.Length; + + Earcut.Refine(triangles, vertices); + + Assert.Equal(length, triangles.Length); + Assert.True(Earcut.Deviation(vertices, [], 2, triangles) < 1e-15); + } + + [Fact] + public void RefineFormFixtureHasZeroIllegalEdges() + { + var fixturePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "fixtures", "earcut.json"); + var coords = System.Text.Json.JsonSerializer.Deserialize(File.ReadAllText(fixturePath))!; + var (vertices, holes, dimensions) = Earcut.Flatten(coords); + int[] triangles = Earcut.Triangulate(vertices, holes, dimensions); + + Earcut.Refine(triangles, vertices, dimensions); + + Assert.Equal(0, CountIllegalEdges(triangles, vertices, dimensions)); + Assert.Equal(0.0, Earcut.Deviation(vertices, holes, dimensions, triangles)); + } + + [Fact] + public void BlockIndexCollinear() + { + int n = 30; + var outer = new List(); + for (int x = 0; x <= n; x++) + { + outer.Add([x, 0]); + } + + for (int y = 1; y <= n; y++) + { + outer.Add([n, y]); + } + + for (int x = n - 1; x >= 0; x--) + { + outer.Add([x, n]); + } + + for (int y = n - 1; y >= 1; y--) + { + outer.Add([0, y]); + } + + double[][] Rect(double x0, double y0, double w, double h) => + [[x0, y0], [x0, y0 + h], [x0 + w, y0 + h], [x0 + w, y0]]; + + var rings = new double[][][] + { + outer.ToArray(), Rect(5, 5, 2, 4), Rect(2, 23, 1, 1) + }; + + foreach (int rotation in new[] { 0, 90, 180, 270 }) + { + double theta = rotation * Math.PI / 180; + int xx = (int)Math.Round(Math.Cos(theta)); + int xy = (int)Math.Round(-Math.Sin(theta)); + int yx = (int)Math.Round(Math.Sin(theta)); + int yy = (int)Math.Round(Math.Cos(theta)); + + var rotated = rings.Select(ring => ring + .Select(pt => new double[] { xx * pt[0] + xy * pt[1], yx * pt[0] + yy * pt[1] }) + .ToArray()).ToArray(); + + var (vertices, holes, dimensions) = Earcut.Flatten(rotated); + var indices = Earcut.Triangulate(vertices, holes, dimensions); + var err = Earcut.Deviation(vertices, holes, dimensions, indices); + Assert.True(err < 1e-9, $"rotation {rotation}: deviation {err} (hole dropped?)"); + } + } + + private static double TrianglePerimeter(int[] triangles, double[] vertices, int dim = 2) + { + double perimeter = 0; + for (int i = 0; i < triangles.Length; i += 3) + { + double ax = vertices[triangles[i] * dim], ay = vertices[triangles[i] * dim + 1]; + double bx = vertices[triangles[i + 1] * dim], by = vertices[triangles[i + 1] * dim + 1]; + double cx = vertices[triangles[i + 2] * dim], cy = vertices[triangles[i + 2] * dim + 1]; + perimeter += Math.Sqrt((ax - bx) * (ax - bx) + (ay - by) * (ay - by)) + + Math.Sqrt((bx - cx) * (bx - cx) + (by - cy) * (by - cy)) + + Math.Sqrt((cx - ax) * (cx - ax) + (cy - ay) * (cy - ay)); + } + return perimeter; + } + + private static int CountIllegalEdges(int[] triangles, double[] vertices, int dim = 2) + { + var halfEdges = new int[triangles.Length]; + Array.Fill(halfEdges, -1); + var edges = new Dictionary<(int, int), int>(); + + for (int e = 0; e < triangles.Length; e++) + { + int a = triangles[e]; + int b = triangles[e - e % 3 + (e + 1) % 3]; + var key = a < b ? (a, b) : (b, a); + if (edges.TryGetValue(key, out int twin)) + { + halfEdges[e] = twin; + halfEdges[twin] = e; + edges.Remove(key); + } + else + { + edges[key] = e; + } + } + + int illegal = 0; + for (int a = 0; a < triangles.Length; a++) + { + int b = halfEdges[a]; + if (b == -1 || a > b) + { + continue; + } + + int a0 = a - a % 3; + int b0 = b - b % 3; + int ar = a0 + (a + 2) % 3; + int al = a0 + (a + 1) % 3; + int bl = b0 + (b + 2) % 3; + int p0 = triangles[ar], pr = triangles[a], pl = triangles[al], p1 = triangles[bl]; + + double x0 = vertices[p0 * dim], y0 = vertices[p0 * dim + 1]; + double xr = vertices[pr * dim], yr = vertices[pr * dim + 1]; + double xl = vertices[pl * dim], yl = vertices[pl * dim + 1]; + double x1 = vertices[p1 * dim], y1 = vertices[p1 * dim + 1]; + + bool convex = Orient(x0, y0, xr, yr, x1, y1) > 0 && Orient(x0, y0, x1, y1, xl, yl) > 0; + if (convex && !InCircle(x0, y0, xr, yr, xl, yl, x1, y1)) + { + illegal++; + } + } + return illegal; + } + + private static double Orient(double ax, double ay, double bx, double by, double cx, double cy) => + (bx - ax) * (cy - ay) - (by - ay) * (cx - ax); + + private static bool InCircle( + double ax, double ay, double bx, double by, double cx, double cy, double px, double py) + { + double dx = ax - px, dy = ay - py, ex = bx - px, ey = by - py, fx = cx - px, fy = cy - py; + double ap = dx * dx + dy * dy, bp = ex * ex + ey * ey, cp = fx * fx + fy * fy; + return dx * (ey * cp - bp * fy) - dy * (ex * cp - bp * fx) + ap * (ex * fy - ey * fx) <= 0; + } } diff --git a/test/Earcut.Tests/expected.json b/test/Earcut.Tests/expected.json index aa80d67..fc540a3 100644 --- a/test/Earcut.Tests/expected.json +++ b/test/Earcut.Tests/expected.json @@ -1,14 +1,20 @@ { "triangles": { + "earcut": 548, "building": 13, "dude": 106, "water": 2482, - "water2": 1212, + "water2": 1211, "water3": 197, "water3b": 25, "water4": 705, - "water-huge": 5176, - "water-huge2": 4462, + "water-huge": 5174, + "water-huge2": 4484, + "water-huge3": 15470, + "self-tangent-1": 23, + "self-tangent-2": 25, + "self-tangent-3": 174, + "self-tangent-4": 3082, "degenerate": 0, "bad-hole": 42, "empty-square": 0, @@ -16,7 +22,7 @@ "issue17": 11, "steiner": 9, "issue29": 40, - "issue34": 139, + "issue34": 138, "issue35": 844, "self-touching": 124, "outside-ring": 64, @@ -31,8 +37,8 @@ "hilbert": 1024, "issue45": 10, "eberly-3": 73, - "eberly-6": 1429, - "issue52": 109, + "eberly-6": 1428, + "issue52": 108, "shared-points": 4, "bad-diagonals": 7, "issue83": 0, @@ -51,25 +57,27 @@ "filtered-bridge-jhl": 25, "issue149": 2, "issue142": 4, - "issue186": 41 + "issue186": 41, + "issue147": 30 }, "errors": { "dude": 2e-15, - "water": 0.0008, - "water-huge": 0.0011, - "water-huge2": 0.004, + "water": 0.0009, + "water-huge": 0.0018, + "water-huge2": 0.003, "bad-hole": 0.019, "issue16": 4e-16, "issue17": 2e-16, - "issue29": 2e-15, - "self-touching": 2e-13, - "eberly-6": 2e-14, + "issue29": 1e-15, + "self-touching": 1e-13, + "eberly-6": 2e-15, "issue142": 0.13 }, "errors-with-rotation": { - "water-huge": 0.0035, - "water-huge2": 0.061, - "bad-hole": 0.04, - "issue16": 8e-16 + "water-huge": 0.005, + "water-huge2": 0.03, + "bad-hole": 0.03, + "issue16": 1e-15, + "eberly-6": 3e-14 } } diff --git a/test/Earcut.Tests/fixtures/earcut.json b/test/Earcut.Tests/fixtures/earcut.json new file mode 100644 index 0000000..2f19183 --- /dev/null +++ b/test/Earcut.Tests/fixtures/earcut.json @@ -0,0 +1 @@ +[[[1400,340],[1633,345],[1867,350],[2100,356],[2333,361],[2567,366],[2800,371],[3033,375],[3267,380],[3500,384],[3733,389],[3967,393],[4200,397],[4433,400],[4667,403],[4900,407],[5133,409],[5367,412],[5600,414],[5833,416],[6067,417],[6300,418],[6533,419],[6767,420],[7000,420],[7233,420],[7467,419],[7700,418],[7933,417],[8167,416],[8400,414],[8633,412],[8867,409],[9100,407],[9333,403],[9567,400],[9800,397],[10033,393],[10267,389],[10500,384],[10733,380],[10967,375],[11200,371],[11433,366],[11667,361],[11900,356],[12133,350],[12367,345],[12600,340],[12737,349],[12873,378],[13006,424],[13136,489],[13260,571],[13378,670],[13488,785],[13590,914],[13682,1057],[13764,1211],[13835,1376],[13893,1550],[13940,1731],[13973,1918],[13993,2108],[14000,2300],[13993,2492],[13973,2682],[13940,2869],[13893,3050],[13835,3224],[13764,3389],[13682,3543],[13590,3686],[13488,3815],[13378,3930],[13260,4029],[13136,4111],[13006,4176],[12873,4222],[12737,4251],[12600,4260],[12367,4255],[12133,4250],[11900,4244],[11667,4239],[11433,4234],[11200,4229],[10967,4225],[10733,4220],[10500,4216],[10267,4211],[10033,4207],[9800,4203],[9567,4200],[9333,4197],[9100,4193],[8867,4191],[8633,4188],[8400,4186],[8167,4184],[7933,4183],[7700,4182],[7467,4181],[7233,4180],[7000,4180],[6767,4180],[6533,4181],[6300,4182],[6067,4183],[5833,4184],[5600,4186],[5367,4188],[5133,4191],[4900,4193],[4667,4197],[4433,4200],[4200,4203],[3967,4207],[3733,4211],[3500,4216],[3267,4220],[3033,4225],[2800,4229],[2567,4234],[2333,4239],[2100,4244],[1867,4250],[1633,4255],[1400,4260],[1263,4251],[1127,4222],[994,4176],[864,4111],[740,4029],[622,3930],[512,3815],[410,3686],[318,3543],[236,3389],[165,3224],[107,3050],[60,2869],[27,2682],[7,2492],[0,2300],[7,2108],[27,1918],[60,1731],[107,1550],[165,1376],[236,1211],[318,1057],[410,914],[512,785],[622,670],[740,571],[864,489],[994,424],[1127,378],[1263,349]],[[1656,1327],[1508,1336],[1368,1364],[1238,1411],[1116,1476],[1003,1561],[899,1664],[808,1780],[733,1905],[675,2038],[633,2180],[608,2329],[600,2487],[608,2642],[676,2926],[736,3056],[812,3177],[905,3290],[1011,3390],[1124,3472],[1245,3536],[1375,3581],[1512,3609],[1656,3618],[1894,3587],[2046,3531],[2190,3449],[2326,3342],[2447,3218],[2543,3088],[2546,3034],[2511,2980],[2472,2976],[2374,3084],[2253,3176],[2113,3250],[1971,3295],[1830,3310],[1697,3302],[1576,3276],[1468,3233],[1373,3173],[1291,3096],[1222,3003],[1169,2895],[1131,2772],[1109,2634],[1101,2482],[1116,2204],[2475,2204],[2532,2193],[2564,2135],[2554,2015],[2522,1899],[2475,1799],[2097,1799],[2113,1917],[2102,1967],[2071,2003],[1980,2034],[1136,2066],[1190,1873],[1228,1789],[1325,1645],[1446,1543],[1582,1492],[1734,1490],[1871,1529],[1985,1608],[2031,1660],[2082,1752],[2445,1752],[2302,1578],[2193,1488],[2073,1417],[1944,1367],[1805,1337]],[[3130,1701],[3061,1781],[3019,1859],[3005,1937],[3013,1995],[3037,2043],[3125,2103],[3184,2110],[3282,2096],[3398,2021],[3467,1889],[3486,1732],[3520,1658],[3628,1570],[3723,1536],[3890,1529],[3988,1563],[4030,1592],[4068,1630],[4124,1726],[4156,1927],[4141,2313],[3742,2434],[3424,2568],[3185,2715],[3025,2874],[2976,2958],[2946,3046],[2941,3216],[2987,3359],[3077,3480],[3137,3530],[3276,3596],[3442,3618],[3607,3607],[3759,3574],[3897,3520],[4023,3443],[4136,3345],[4176,3431],[4276,3530],[4412,3587],[4518,3598],[4720,3560],[4844,3494],[4940,3416],[4988,3348],[4994,3318],[4983,3273],[4947,3237],[4765,3336],[4670,3330],[4623,3298],[4589,3246],[4569,3173],[4565,2964],[4121,2964],[4116,3147],[4067,3219],[3944,3309],[3789,3364],[3685,3375],[3586,3361],[3510,3318],[3455,3248],[3423,3149],[3412,3023],[3427,2919],[3471,2825],[3545,2739],[3648,2661],[3781,2593],[4136,2482],[4124,2893],[4568,2893],[4597,1942],[4590,1809],[4537,1630],[4431,1485],[4282,1384],[4195,1352],[3997,1327],[3876,1335],[3751,1360],[3489,1461],[3227,1619]],[[5104,3541],[5085,3518],[5078,3474],[5085,3433],[5104,3411],[5266,3378],[5364,3333],[5394,3305],[5433,3219],[5453,3078],[5455,2070],[5437,1881],[5423,1840],[5379,1787],[5298,1751],[5152,1718],[5138,1664],[5152,1614],[5360,1553],[5583,1467],[5693,1410],[5840,1308],[5896,1313],[5919,1332],[5902,1659],[6183,1435],[6356,1353],[6526,1327],[6613,1338],[6688,1374],[6775,1464],[6804,1575],[6782,1683],[6743,1743],[6691,1788],[6596,1813],[6509,1801],[6316,1704],[6234,1684],[6169,1691],[6037,1751],[5902,1872],[5902,2988],[5928,3200],[5976,3289],[6012,3321],[6126,3373],[6319,3420],[6333,3474],[6319,3532],[6249,3543],[5627,3514]],[[7519,3473],[7294,3292],[7197,3178],[7118,3055],[7057,2923],[7013,2780],[6987,2629],[6978,2467],[6987,2307],[7015,2157],[7061,2016],[7125,1885],[7208,1763],[7309,1650],[7423,1551],[7543,1470],[7671,1407],[7805,1362],[8094,1327],[8345,1345],[8563,1400],[8744,1490],[8855,1597],[8883,1656],[8892,1718],[8884,1792],[8860,1848],[8819,1889],[8762,1914],[8624,1916],[8546,1884],[8479,1809],[8350,1584],[8291,1531],[8223,1502],[8094,1485],[7979,1495],[7876,1525],[7785,1575],[7705,1645],[7636,1734],[7579,1843],[7535,1971],[7485,2280],[7487,2616],[7510,2757],[7550,2886],[7606,3002],[7677,3106],[7762,3194],[7857,3262],[7963,3311],[8080,3340],[8208,3350],[8352,3341],[8484,3312],[8604,3265],[8711,3199],[8818,3109],[8853,3128],[8879,3174],[8882,3201],[8859,3252],[8737,3372],[8553,3497],[8420,3556],[8205,3608],[8054,3618],[7910,3609],[7772,3582],[7642,3536]],[[11618,3425],[11153,3523],[10906,3638],[10874,3631],[10856,3598],[10876,3286],[10593,3498],[10460,3565],[10333,3604],[10211,3618],[10081,3610],[9858,3549],[9764,3495],[9682,3426],[9613,3343],[9560,3250],[9522,3145],[9500,3030],[9492,1976],[9472,1765],[9435,1684],[9372,1638],[9272,1615],[9124,1612],[9106,1591],[9100,1550],[9115,1483],[9140,1470],[9549,1430],[9894,1359],[9931,1381],[9938,2785],[9943,2891],[9977,3066],[10045,3193],[10150,3274],[10293,3315],[10437,3318],[10543,3301],[10638,3266],[10777,3170],[10876,3072],[10876,1976],[10855,1767],[10817,1685],[10752,1638],[10650,1615],[10503,1612],[10481,1573],[10485,1499],[10519,1470],[10777,1453],[11272,1359],[11301,1369],[11317,1421],[11325,3122],[11348,3204],[11390,3254],[11470,3290],[11618,3326],[11632,3380]],[[12846,3594],[12647,3591],[12457,3536],[12304,3426],[12196,3270],[12162,3179],[12135,2971],[12143,1718],[12107,1676],[11878,1671],[11845,1632],[11850,1573],[11871,1546],[12000,1462],[12210,1290],[12400,1081],[12499,948],[12557,922],[12615,937],[12626,962],[12606,1436],[13336,1436],[13377,1457],[13397,1521],[13390,1655],[13377,1682],[13336,1703],[12597,1684],[12597,2874],[12610,3042],[12650,3172],[12716,3265],[12809,3321],[12929,3340],[13088,3325],[13303,3243],[13333,3260],[13355,3313],[13326,3382],[13171,3493],[13015,3560]]] diff --git a/test/Earcut.Tests/fixtures/issue147.json b/test/Earcut.Tests/fixtures/issue147.json new file mode 100644 index 0000000..b12e224 --- /dev/null +++ b/test/Earcut.Tests/fixtures/issue147.json @@ -0,0 +1 @@ +[[[-2428,1634],[-2425,1471],[-2409,1156],[-2384,842],[-2349,529],[-2303,217],[-2248,-92],[-2183,-401],[-2138,-588],[-2138,-681],[-2163,-681],[-2163,-1570],[-2138,-1570],[-2138,-1708],[2641,-1708],[2641,-29],[3200,-29],[3200,1634]],[[-1845,-1692],[-930,-1692],[-930,-1387],[-1845,-1387]],[[-1235,-1387],[-321,-1387],[-321,-1083],[-1235,-1083]],[[-1540,-1083],[-625,-1083],[-625,-778],[-1540,-778]]] diff --git a/test/Earcut.Tests/fixtures/self-tangent-1.json b/test/Earcut.Tests/fixtures/self-tangent-1.json new file mode 100644 index 0000000..a5f07d3 --- /dev/null +++ b/test/Earcut.Tests/fixtures/self-tangent-1.json @@ -0,0 +1 @@ +[[[3211,3316],[3217,3332],[3222,3324],[3239,3333],[3238,3343],[3245,3338],[3271,3366],[3264,3381],[3226,3371],[3221,3383],[3229,3360],[3211,3357],[3212,3373],[3191,3366],[3191,3336],[3210,3334]],[[3252,3361],[3260,3376],[3261,3364]],[[3210,3334],[3210,3343],[3235,3349],[3229,3337]]] diff --git a/test/Earcut.Tests/fixtures/self-tangent-2.json b/test/Earcut.Tests/fixtures/self-tangent-2.json new file mode 100644 index 0000000..5bb204b --- /dev/null +++ b/test/Earcut.Tests/fixtures/self-tangent-2.json @@ -0,0 +1 @@ +[[[2975,2506],[3001,2537],[2982,2545],[3001,2542],[3002,2548],[3012,2548],[2979,2553],[2903,2532],[2924,2524],[2931,2528],[2939,2513],[2944,2518],[2938,2527],[2943,2526],[2966,2512]],[[2977,2510],[2966,2512],[2971,2516],[2967,2525],[2981,2526],[2974,2520],[2979,2518]],[[2973,2534],[2973,2540],[2981,2535]]] diff --git a/test/Earcut.Tests/fixtures/self-tangent-3.json b/test/Earcut.Tests/fixtures/self-tangent-3.json new file mode 100644 index 0000000..c40f66c --- /dev/null +++ b/test/Earcut.Tests/fixtures/self-tangent-3.json @@ -0,0 +1 @@ +[[[731,1513],[739,1506],[731,1490],[723,1489],[733,1481],[720,1475],[723,1465],[714,1475],[701,1473],[708,1472],[708,1459],[718,1457],[723,1445],[801,1445],[805,1451],[805,1445],[853,1445],[868,1460],[868,1529],[853,1528],[851,1538],[836,1536],[826,1544],[837,1559],[847,1557],[853,1548],[862,1548],[860,1555],[868,1553],[868,1559],[860,1557],[860,1570],[845,1574],[841,1568],[832,1574],[822,1569],[822,1578],[807,1567],[792,1567],[799,1565],[797,1557],[784,1561],[784,1572],[746,1572],[748,1561],[731,1555],[731,1536],[723,1536],[725,1521],[713,1508],[723,1506],[723,1513]],[[841,1568],[851,1559],[841,1559]],[[837,1559],[830,1563],[837,1565]],[[799,1529],[786,1534],[789,1540],[782,1551],[792,1555],[797,1538],[815,1534],[813,1529],[801,1529],[805,1521],[799,1521]],[[769,1567],[777,1561],[769,1561]],[[762,1555],[758,1561],[752,1557],[752,1563],[764,1565]],[[847,1502],[851,1517],[834,1517],[828,1523],[853,1528],[853,1515],[862,1517],[860,1506]],[[801,1515],[811,1523],[815,1517],[809,1513],[820,1513],[824,1519],[828,1513],[822,1512],[822,1504],[807,1504]],[[813,1538],[807,1550],[826,1544],[828,1540]],[[760,1532],[752,1534],[761,1536]],[[769,1519],[769,1530],[792,1529],[792,1521],[773,1525]],[[731,1513],[729,1521],[739,1521],[737,1513]],[[742,1512],[740,1525],[746,1525]],[[739,1491],[739,1498],[746,1498],[746,1491]],[[815,1481],[818,1491],[822,1483]],[[834,1470],[834,1477],[843,1475]],[[750,1500],[742,1506],[753,1505]],[[837,1508],[837,1515],[845,1515]],[[752,1483],[744,1487],[754,1489]],[[754,1508],[754,1513],[761,1512]],[[853,1481],[860,1483],[855,1479],[859,1475],[853,1475]],[[733,1460],[727,1464],[733,1468]],[[739,1491],[739,1483],[733,1491]]] diff --git a/test/Earcut.Tests/fixtures/self-tangent-4.json b/test/Earcut.Tests/fixtures/self-tangent-4.json new file mode 100644 index 0000000..9ed539b --- /dev/null +++ b/test/Earcut.Tests/fixtures/self-tangent-4.json @@ -0,0 +1 @@ +[[[248,3883],[243,3890],[216,3888],[206,3854],[182,3856],[170,3832],[171,3854],[161,3856],[168,3872],[183,3873],[210,3916],[198,3915],[206,3919],[199,3931],[190,3928],[201,3935],[195,3941],[205,3940],[192,3946],[201,3953],[196,3973],[171,3993],[175,3999],[152,3992],[158,3966],[173,3960],[182,3975],[190,3955],[185,3948],[165,3959],[156,3952],[139,3987],[125,3983],[96,3997],[63,4027],[59,4018],[44,4046],[56,4059],[67,4045],[69,4060],[33,4094],[97,4098],[90,4116],[97,4120],[96,4105],[111,4103],[128,4085],[110,4083],[102,4096],[98,4089],[108,4077],[102,4055],[110,4046],[100,4038],[113,4025],[114,4009],[130,3998],[188,4002],[208,3958],[219,3960],[225,3982],[215,3977],[204,3985],[225,3987],[216,3996],[224,4010],[218,4022],[233,4037],[219,4037],[225,4062],[218,4074],[241,4070],[239,4042],[258,4065],[273,4067],[256,4098],[289,4124],[285,4132],[304,4132],[294,4137],[301,4159],[312,4160],[245,4160],[222,4160],[220,4153],[229,4152],[220,4142],[215,4160],[185,4160],[186,4149],[163,4158],[155,4148],[154,4157],[147,4148],[133,4160],[-31,4160],[-25,4139],[-35,4134],[-33,4125],[-22,4122],[-12,4137],[-15,4118],[6,4114],[22,4098],[-19,4092],[-10,4090],[-31,4079],[-30,4102],[-44,4085],[-47,4100],[-52,4090],[-64,4090],[-64,4053],[-62,4059],[-48,4049],[-44,4058],[-34,4044],[-38,4016],[-30,4013],[-48,4015],[-51,4026],[-59,4022],[-64,4050],[-64,4003],[-55,4008],[-56,3995],[-64,4002],[-55,3986],[-64,3989],[-64,3962],[-42,3947],[-64,3951],[-64,3892],[-32,3881],[-47,3881],[-43,3868],[-64,3890],[-64,3741],[-54,3738],[-53,3708],[-34,3688],[-6,3690],[-11,3682],[13,3671],[24,3652],[48,3650],[29,3643],[31,3632],[52,3619],[43,3618],[44,3600],[78,3586],[71,3593],[82,3593],[79,3585],[86,3582],[68,3574],[56,3547],[42,3558],[46,3590],[30,3597],[23,3582],[29,3516],[23,3517],[22,3492],[37,3449],[61,3449],[77,3434],[70,3443],[86,3452],[73,3463],[84,3473],[120,3468],[131,3482],[130,3466],[139,3483],[153,3487],[168,3510],[158,3522],[142,3521],[150,3568],[169,3543],[192,3549],[199,3539],[196,3550],[208,3559],[193,3578],[193,3598],[176,3601],[181,3596],[173,3589],[157,3589],[167,3610],[147,3617],[167,3630],[174,3653],[187,3662],[219,3659],[213,3678],[203,3681],[203,3708],[218,3724],[211,3734],[223,3731],[228,3739],[220,3770],[238,3791],[250,3782],[249,3758],[266,3753],[258,3744],[260,3723],[275,3722],[237,3691],[254,3682],[248,3679],[267,3679],[284,3696],[295,3690],[291,3669],[253,3657],[266,3643],[293,3639],[281,3637],[281,3627],[292,3625],[294,3602],[268,3591],[300,3581],[278,3564],[263,3577],[242,3552],[255,3547],[259,3525],[267,3531],[265,3518],[275,3529],[284,3520],[288,3512],[276,3504],[281,3494],[270,3502],[256,3493],[238,3499],[229,3486],[221,3498],[218,3490],[203,3490],[212,3466],[244,3457],[243,3448],[226,3443],[208,3450],[180,3424],[198,3431],[218,3407],[216,3390],[208,3409],[198,3392],[139,3383],[131,3355],[118,3353],[110,3372],[98,3366],[112,3358],[105,3349],[117,3321],[140,3313],[159,3335],[147,3318],[172,3322],[163,3360],[154,3355],[152,3359],[182,3369],[212,3362],[228,3378],[237,3369],[238,3417],[279,3335],[302,3329],[309,3351],[340,3361],[352,3353],[342,3326],[324,3336],[315,3328],[321,3326],[290,3320],[255,3333],[237,3328],[236,3310],[259,3300],[287,3307],[316,3289],[345,3295],[346,3285],[336,3281],[342,3252],[315,3251],[314,3226],[305,3219],[321,3197],[314,3181],[275,3158],[278,3138],[292,3152],[289,3162],[302,3161],[298,3154],[311,3146],[323,3165],[334,3155],[345,3168],[352,3153],[411,3160],[397,3140],[408,3135],[404,3127],[396,3140],[385,3132],[407,3114],[384,3123],[374,3109],[401,3105],[416,3117],[442,3100],[471,3104],[463,3075],[483,3070],[480,3079],[491,3064],[521,3062],[526,3051],[544,3054],[539,3074],[555,3062],[580,3079],[576,3086],[583,3081],[596,3091],[600,3078],[613,3081],[619,3072],[598,3077],[581,3054],[582,3039],[580,3047],[566,3047],[552,3030],[557,3010],[570,3021],[595,3018],[604,3026],[596,3034],[612,3048],[604,3030],[612,3037],[619,3023],[611,3032],[596,3015],[574,3010],[574,2980],[531,3005],[587,2943],[633,2934],[664,2895],[673,2898],[661,2912],[675,2928],[656,2940],[677,2952],[664,2975],[675,2984],[675,2965],[699,2975],[702,2956],[718,2978],[740,2969],[744,2987],[784,2989],[784,2981],[794,2992],[793,3008],[804,3006],[807,3017],[818,2999],[858,2997],[884,3010],[904,2999],[925,3001],[934,2988],[951,3010],[947,3068],[911,3052],[927,3077],[940,3081],[937,3106],[880,3098],[869,3059],[856,3065],[865,3082],[851,3090],[866,3090],[867,3106],[884,3107],[906,3128],[910,3154],[843,3150],[853,3133],[843,3125],[820,3140],[812,3130],[788,3144],[776,3139],[764,3162],[751,3164],[752,3186],[734,3201],[758,3191],[771,3155],[790,3151],[817,3160],[827,3173],[819,3178],[845,3184],[851,3194],[824,3198],[834,3223],[815,3219],[802,3228],[799,3221],[782,3230],[798,3199],[786,3194],[799,3181],[785,3175],[777,3201],[730,3255],[734,3237],[716,3227],[710,3198],[732,3155],[754,3142],[727,3128],[708,3136],[708,3145],[688,3141],[680,3152],[667,3142],[674,3151],[663,3157],[667,3170],[679,3160],[702,3226],[687,3231],[683,3268],[652,3277],[607,3274],[621,3286],[684,3273],[674,3278],[675,3294],[662,3310],[640,3309],[641,3339],[613,3338],[614,3347],[589,3360],[588,3375],[572,3387],[586,3401],[577,3410],[617,3426],[626,3419],[621,3413],[655,3417],[649,3435],[681,3448],[668,3456],[690,3452],[708,3473],[720,3463],[724,3438],[712,3436],[713,3410],[721,3409],[712,3399],[696,3418],[669,3415],[665,3423],[655,3409],[664,3396],[654,3393],[647,3403],[628,3395],[603,3399],[596,3391],[621,3379],[593,3370],[606,3359],[621,3365],[615,3347],[640,3346],[700,3293],[705,3304],[721,3292],[722,3324],[740,3331],[733,3355],[715,3364],[714,3352],[712,3364],[705,3359],[711,3352],[687,3340],[677,3349],[668,3350],[669,3340],[654,3346],[687,3370],[705,3367],[699,3375],[708,3378],[713,3370],[736,3373],[734,3388],[757,3390],[763,3404],[752,3407],[754,3416],[737,3414],[728,3423],[737,3425],[737,3459],[748,3468],[741,3473],[756,3486],[755,3463],[775,3440],[792,3438],[796,3418],[768,3410],[762,3394],[775,3391],[755,3368],[772,3371],[772,3343],[781,3349],[791,3337],[803,3341],[823,3323],[831,3330],[834,3321],[792,3298],[797,3280],[815,3270],[814,3254],[821,3251],[830,3267],[834,3250],[868,3250],[864,3257],[869,3253],[873,3264],[859,3304],[882,3318],[899,3320],[900,3309],[919,3317],[905,3316],[901,3332],[892,3326],[884,3336],[848,3325],[855,3320],[849,3315],[837,3320],[870,3348],[855,3360],[863,3364],[848,3366],[851,3374],[868,3381],[864,3365],[878,3366],[882,3357],[903,3365],[915,3352],[930,3365],[924,3380],[935,3380],[936,3394],[951,3404],[921,3411],[915,3388],[909,3396],[890,3383],[895,3399],[887,3412],[861,3393],[866,3408],[874,3405],[869,3418],[887,3422],[901,3410],[915,3438],[940,3421],[928,3413],[954,3418],[944,3427],[933,3487],[910,3491],[917,3499],[892,3479],[877,3494],[874,3512],[904,3500],[904,3520],[923,3521],[913,3558],[894,3556],[884,3573],[868,3564],[863,3576],[882,3602],[883,3574],[902,3581],[908,3597],[915,3581],[938,3594],[949,3583],[935,3583],[921,3562],[932,3553],[952,3490],[998,3472],[1012,3478],[1011,3492],[1015,3483],[1033,3487],[1031,3475],[1017,3482],[1031,3446],[1043,3447],[1053,3474],[1085,3477],[1093,3492],[1088,3507],[1079,3508],[1097,3550],[1105,3550],[1099,3528],[1112,3501],[1115,3517],[1138,3531],[1144,3512],[1132,3494],[1159,3490],[1151,3482],[1137,3491],[1126,3487],[1134,3441],[1120,3428],[1124,3413],[1135,3411],[1116,3407],[1115,3425],[1106,3419],[1099,3427],[1104,3439],[1079,3447],[1069,3468],[1058,3436],[1065,3428],[1055,3416],[1060,3405],[1030,3380],[1042,3369],[1048,3374],[1050,3357],[1069,3354],[1077,3322],[1098,3306],[1111,3323],[1091,3347],[1107,3359],[1099,3366],[1100,3395],[1111,3403],[1117,3384],[1136,3374],[1148,3389],[1136,3411],[1159,3420],[1164,3449],[1184,3450],[1197,3443],[1161,3419],[1175,3389],[1177,3398],[1192,3378],[1211,3397],[1190,3400],[1201,3402],[1210,3419],[1220,3409],[1245,3441],[1245,3458],[1224,3466],[1238,3485],[1221,3480],[1226,3495],[1235,3488],[1238,3502],[1250,3504],[1250,3517],[1240,3526],[1230,3510],[1217,3508],[1203,3527],[1196,3521],[1180,3561],[1187,3573],[1212,3560],[1239,3580],[1250,3564],[1250,3541],[1276,3546],[1262,3515],[1273,3390],[1285,3399],[1280,3412],[1289,3450],[1310,3436],[1296,3406],[1350,3382],[1349,3370],[1322,3379],[1297,3368],[1347,3329],[1365,3360],[1359,3370],[1377,3377],[1358,3409],[1412,3403],[1445,3425],[1432,3454],[1413,3460],[1413,3487],[1435,3506],[1433,3533],[1413,3563],[1361,3568],[1345,3561],[1339,3549],[1380,3546],[1370,3542],[1398,3502],[1386,3498],[1354,3503],[1356,3518],[1336,3543],[1321,3536],[1318,3519],[1291,3555],[1383,3585],[1415,3583],[1409,3602],[1423,3602],[1406,3630],[1416,3632],[1423,3650],[1408,3645],[1401,3653],[1419,3660],[1418,3668],[1444,3662],[1455,3672],[1434,3695],[1442,3700],[1471,3670],[1475,3679],[1528,3675],[1527,3687],[1544,3699],[1540,3708],[1530,3704],[1536,3731],[1529,3721],[1524,3733],[1521,3724],[1515,3732],[1517,3752],[1494,3752],[1509,3754],[1515,3769],[1490,3794],[1479,3793],[1485,3798],[1455,3826],[1424,3807],[1412,3775],[1412,3792],[1401,3803],[1406,3823],[1433,3848],[1446,3838],[1475,3856],[1477,3874],[1486,3863],[1489,3872],[1520,3875],[1523,3895],[1491,3887],[1486,3894],[1497,3896],[1500,3922],[1523,3909],[1520,3941],[1529,3949],[1545,3931],[1553,3940],[1557,3982],[1578,3979],[1574,3995],[1594,3996],[1582,3975],[1591,3955],[1572,3950],[1579,3958],[1565,3971],[1571,3961],[1557,3946],[1572,3942],[1563,3930],[1571,3898],[1582,3912],[1599,3910],[1559,3887],[1567,3866],[1576,3867],[1567,3838],[1582,3823],[1570,3805],[1570,3781],[1589,3776],[1584,3761],[1587,3753],[1593,3740],[1616,3741],[1628,3730],[1674,3736],[1676,3748],[1679,3739],[1700,3754],[1699,3764],[1713,3763],[1710,3798],[1720,3796],[1722,3804],[1727,3797],[1753,3813],[1759,3803],[1783,3804],[1779,3796],[1747,3802],[1716,3766],[1770,3784],[1779,3781],[1762,3771],[1773,3751],[1830,3742],[1819,3746],[1819,3756],[1809,3750],[1801,3760],[1811,3762],[1799,3771],[1812,3776],[1805,3786],[1828,3783],[1822,3796],[1831,3795],[1855,3821],[1867,3813],[1867,3834],[1853,3842],[1859,3825],[1846,3836],[1849,3844],[1837,3846],[1843,3853],[1835,3849],[1830,3857],[1838,3856],[1824,3863],[1833,3890],[1813,3901],[1819,3912],[1806,3908],[1781,3924],[1783,3912],[1775,3917],[1783,3946],[1754,3944],[1772,3949],[1766,3968],[1750,3977],[1750,3970],[1739,3972],[1742,3980],[1716,3979],[1724,3987],[1745,3985],[1734,4010],[1754,4003],[1746,4012],[1754,4009],[1768,4032],[1760,4050],[1732,4076],[1728,4071],[1720,4087],[1707,4072],[1716,4072],[1706,4068],[1711,4053],[1706,4064],[1692,4061],[1693,4074],[1701,4072],[1649,4133],[1641,4132],[1650,4119],[1638,4077],[1624,4066],[1611,4095],[1634,4110],[1637,4142],[1625,4146],[1615,4114],[1605,4111],[1615,4131],[1606,4134],[1609,4155],[1626,4151],[1627,4160],[1530,4160],[1520,4154],[1541,4150],[1523,4125],[1539,4095],[1526,4059],[1543,4043],[1525,4029],[1543,4004],[1523,4006],[1504,3962],[1465,3963],[1453,3955],[1452,3969],[1465,3965],[1497,3987],[1507,4019],[1491,4035],[1518,4036],[1522,4048],[1506,4088],[1527,4107],[1497,4149],[1471,4157],[1465,4148],[1481,4149],[1481,4126],[1471,4139],[1455,4141],[1461,4150],[1441,4148],[1447,4119],[1425,4118],[1419,4084],[1410,4092],[1376,4088],[1376,4063],[1386,4062],[1373,4051],[1359,4055],[1372,4061],[1369,4090],[1417,4102],[1421,4160],[1311,4160],[1311,4131],[1306,4160],[1273,4160],[1138,4160],[1145,4140],[1169,4150],[1137,4123],[1124,4160],[1113,4160],[1120,4145],[1094,4136],[1084,4146],[1099,4160],[1075,4160],[1077,4143],[1074,4150],[1046,4151],[1052,4160],[904,4160],[925,4136],[923,4126],[897,4153],[880,4143],[883,4157],[895,4160],[856,4160],[856,4153],[855,4160],[594,4160],[577,4148],[572,4160],[496,4160],[490,4152],[503,4146],[497,4124],[474,4134],[475,4160],[412,4160],[389,4144],[417,4122],[403,4121],[409,4084],[393,4077],[402,4078],[396,4065],[414,4050],[401,4043],[402,4033],[384,4082],[350,4112],[352,4124],[334,4093],[343,4081],[333,4081],[333,4065],[322,4059],[331,4036],[304,4038],[302,4019],[294,4024],[299,4037],[290,4028],[269,4036],[258,4024],[248,4045],[233,4033],[227,3993],[247,4003],[258,3995],[231,3969],[237,3959],[227,3942],[247,3935],[258,3915],[284,3910],[302,3890],[318,3892],[317,3920],[327,3928],[331,3887],[315,3871],[356,3859],[351,3850],[361,3836],[351,3833],[370,3833],[381,3816],[391,3819],[378,3811],[383,3802],[421,3793],[384,3788],[365,3800],[354,3788],[343,3802],[335,3786],[308,3818],[341,3814],[341,3815],[346,3839],[326,3838],[294,3882],[283,3884],[283,3875],[253,3863],[251,3844],[261,3839],[253,3817],[256,3808],[241,3829],[255,3828],[250,3839],[239,3840],[253,3865],[242,3868],[251,3875],[240,3874],[244,3871],[234,3875],[234,3887]],[[169,4110],[177,4149],[181,4115]],[[264,4142],[245,4160],[263,4152]],[[215,3836],[211,3849],[219,3847]],[[179,4007],[166,4011],[171,4018],[158,4029],[161,4039],[148,4045],[158,4055],[136,4087],[138,4111],[124,4122],[123,4135],[134,4119],[145,4126],[159,4121],[160,4104],[174,4095],[161,4059],[171,4056],[162,4047],[163,4029],[184,4011]],[[243,4117],[233,4118],[234,4127]],[[341,3815],[331,3819],[337,3824]],[[614,4129],[612,4150],[595,4159],[621,4152]],[[213,4108],[214,4119],[219,4113]],[[183,4100],[183,4118],[191,4101]],[[247,4086],[246,4097],[255,4098]],[[718,4132],[707,4138],[717,4146]],[[207,4058],[201,4068],[212,4071]],[[857,4135],[859,4142],[869,4136]],[[757,4122],[734,4125],[753,4130]],[[216,4047],[194,4049],[212,4059]],[[1025,4126],[1010,4130],[1014,4146],[1028,4143]],[[926,4092],[931,4115],[923,4126],[944,4124],[958,4143],[979,4131],[970,4105],[955,4094]],[[1268,4151],[1273,4160],[1277,4154]],[[22,3934],[17,3938],[29,3952],[39,3953]],[[130,3915],[118,3931],[130,3941],[120,3942],[156,3952],[147,3932]],[[-1,3939],[-39,3946],[-16,3949]],[[994,4115],[997,4126],[1002,4119]],[[26,3884],[9,3894],[30,3908]],[[144,3887],[140,3903],[152,3902],[151,3889]],[[87,3864],[84,3890],[92,3882]],[[8,3866],[-8,3875],[10,3873]],[[89,3850],[88,3859],[100,3860],[99,3851]],[[92,3833],[84,3836],[101,3837],[102,3850],[105,3834]],[[-18,3830],[-27,3831],[-25,3842]],[[601,4117],[597,4125],[610,4123]],[[-46,3755],[-52,3762],[-34,3804],[-61,3829],[-10,3796],[-27,3796],[-17,3767]],[[120,3805],[130,3820],[142,3811],[148,3816],[149,3807]],[[658,4067],[652,4069],[668,4083],[669,4104],[685,4102],[689,4124],[691,4082],[670,4083]],[[183,3797],[185,3810],[195,3803]],[[262,3795],[242,3796],[256,3808]],[[104,3790],[94,3793],[109,3800]],[[1079,3400],[1069,3407],[1090,3408]],[[173,3775],[165,3788],[174,3785]],[[1375,4132],[1375,4147],[1389,4155]],[[1175,4107],[1186,4124],[1186,4110]],[[1330,4017],[1302,4023],[1310,4027],[1302,4072],[1293,4080],[1302,4085],[1296,4118],[1308,4123],[1307,4115],[1303,4112],[1312,4035],[1319,4033],[1327,4049],[1328,4042],[1343,4044],[1324,4039],[1322,4023]],[[850,4097],[844,4114],[855,4115]],[[365,4036],[355,4046],[333,4038],[341,4052],[352,4052]],[[1290,4081],[1278,4082],[1284,4093]],[[749,4075],[742,4080],[749,4090]],[[874,3953],[861,3985],[843,3975],[843,3954],[819,3953],[810,3963],[831,3988],[861,3986],[855,3997],[864,4033],[829,4051],[849,4070],[841,4085],[852,4089],[864,4085],[857,4080],[874,4049],[869,4022],[902,4015],[899,3982],[882,3981]],[[923,4069],[914,4082],[922,4087]],[[1231,4018],[1208,4025],[1199,4085],[1213,4068],[1212,4053],[1228,4045]],[[1055,4001],[1045,4023],[1027,4023],[1012,4040],[993,4043],[998,4051],[989,4047],[990,4056],[982,4056],[982,4048],[973,4059],[1002,4083],[1033,4038],[1052,4033],[1053,4017],[1071,4009]],[[1648,4066],[1641,4076],[1654,4072]],[[481,3986],[472,3987],[465,4016],[475,4025],[461,4030],[461,4064],[483,4070],[483,4060],[507,4058],[500,4032],[475,4016],[484,3998]],[[1074,4049],[1080,4069],[1116,4061]],[[904,4043],[924,4063],[938,4058]],[[434,4046],[418,4052],[423,4060]],[[808,4045],[807,4056],[815,4050]],[[1553,4134],[1544,4139],[1561,4142]],[[657,3985],[646,3987],[630,3999],[646,4017],[625,4027],[640,4040],[639,4028],[657,4028],[694,4044],[701,4029],[682,4014],[685,3999],[664,4008]],[[1576,4126],[1574,4137],[1581,4130]],[[1590,4095],[1575,4106],[1583,4128],[1605,4111],[1608,4097]],[[591,4029],[592,4038],[599,4036]],[[722,3985],[736,4002],[726,4009],[746,4002],[745,4017],[756,4018],[752,4030],[767,4032],[774,4021],[758,3994],[748,4002]],[[1414,3995],[1410,4005],[1421,4025]],[[1231,3989],[1231,4018],[1253,4013],[1251,4023],[1261,4024],[1254,4018],[1259,4001]],[[1440,4014],[1438,4022],[1447,4017]],[[1378,4005],[1352,4010],[1349,4021],[1374,4017]],[[1608,4019],[1599,4046],[1586,4043],[1591,4080],[1609,4042],[1624,4056],[1624,4046],[1609,4038]],[[1391,4012],[1410,4005],[1379,4005]],[[290,3996],[285,4005],[298,4010]],[[1630,4042],[1627,4056],[1642,4055]],[[572,3957],[552,3979],[561,3987],[563,3999],[571,3998],[558,4008],[573,4001],[578,4008],[592,3997],[581,3986],[593,3975]],[[1558,4039],[1555,4047],[1564,4053],[1573,4046]],[[276,3947],[255,3969],[294,3974],[292,3992],[307,3984],[300,3992],[314,3990],[323,4004],[340,4005],[338,3995],[347,3999],[360,3987],[354,3978],[328,3997],[305,3977],[315,3967],[311,3955],[297,3953],[295,3961],[283,3954]],[[1655,4022],[1662,4036],[1667,4029]],[[1574,3995],[1561,4004],[1559,4019],[1547,4020],[1548,4029],[1556,4032]],[[1748,4013],[1748,4020],[1755,4017]],[[1666,3960],[1648,3984],[1637,3981],[1641,3988],[1622,3990],[1611,4006],[1595,3998],[1591,4010],[1618,4012],[1626,4001],[1646,4013],[1660,4010],[1643,4002],[1661,3994],[1649,3988],[1677,3965]],[[903,3631],[914,3645],[916,3636]],[[1032,3968],[1037,3973],[1027,3983],[1045,3992],[1054,3971]],[[1679,3968],[1679,3981],[1687,3979]],[[1228,3973],[1221,3984],[1227,3987]],[[981,3973],[969,3979],[979,3981]],[[494,3964],[489,3978],[500,3970]],[[1208,3957],[1203,3976],[1220,3965]],[[1650,3790],[1613,3799],[1625,3812],[1638,3811],[1636,3855],[1649,3862],[1651,3877],[1659,3873],[1686,3896],[1678,3900],[1673,3940],[1644,3934],[1655,3939],[1659,3955],[1663,3939],[1699,3961],[1705,3950],[1698,3936],[1735,3926],[1738,3934],[1746,3931],[1757,3913],[1736,3917],[1746,3909],[1738,3895],[1738,3911],[1728,3901],[1719,3912],[1690,3898],[1724,3879],[1718,3868],[1715,3880],[1698,3888],[1681,3876],[1677,3887],[1660,3866],[1683,3867],[1682,3851],[1669,3849],[1665,3860],[1658,3852],[1669,3819],[1672,3830],[1685,3824],[1705,3834],[1692,3816],[1675,3817],[1688,3805],[1668,3816]],[[756,3779],[748,3792],[720,3795],[728,3817],[719,3825],[735,3829],[726,3849],[736,3908],[716,3925],[690,3918],[693,3935],[714,3941],[705,3951],[717,3966],[710,3955],[746,3918],[748,3892],[758,3893],[744,3888],[742,3861],[778,3865],[751,3846],[754,3825],[746,3825],[743,3806],[766,3801],[768,3790],[749,3792]],[[1118,3946],[1110,3949],[1122,3965]],[[1185,3955],[1172,3959],[1178,3964]],[[372,3957],[367,3962],[376,3963]],[[802,3944],[797,3950],[805,3950]],[[813,3927],[808,3932],[806,3950]],[[1249,3913],[1252,3947],[1271,3942],[1270,3924]],[[1042,3940],[1036,3945],[1045,3947]],[[1433,3848],[1365,3891],[1402,3906],[1415,3922],[1422,3920],[1420,3896],[1430,3896],[1432,3913],[1443,3920],[1407,3926],[1418,3945],[1451,3918],[1431,3887],[1445,3871],[1428,3862]],[[426,3901],[414,3905],[420,3917],[412,3928],[425,3924],[424,3940],[442,3931],[427,3922]],[[659,3915],[639,3923],[641,3934]],[[1161,3922],[1190,3930],[1202,3918],[1199,3908],[1209,3915],[1212,3907],[1199,3900],[1191,3919]],[[687,3862],[695,3874],[682,3883],[668,3878],[685,3888],[668,3908],[680,3913],[678,3927],[695,3890],[714,3882],[686,3886],[706,3869],[701,3864]],[[1651,3883],[1605,3909],[1634,3925],[1642,3910],[1655,3905],[1658,3912]],[[983,3903],[988,3923],[997,3916],[998,3924],[1009,3924],[1011,3917]],[[837,3906],[827,3918],[840,3924],[843,3916],[836,3918]],[[620,3904],[616,3920],[625,3918]],[[1012,3916],[1028,3898],[1019,3898]],[[1293,3901],[1286,3903],[1295,3912]],[[866,3854],[845,3870],[852,3885],[844,3892],[845,3911],[850,3897],[872,3889]],[[798,3901],[793,3909],[800,3911],[809,3908]],[[1212,3869],[1208,3880],[1202,3877],[1215,3907],[1238,3905],[1217,3904],[1232,3882],[1227,3875],[1221,3882]],[[605,3892],[600,3897],[611,3907]],[[1066,3894],[1060,3905],[1070,3901]],[[945,3873],[953,3904],[959,3902],[961,3880]],[[586,3895],[590,3904],[599,3900]],[[663,3888],[651,3895],[658,3900]],[[1122,3879],[1115,3889],[1120,3899],[1147,3898],[1143,3889],[1124,3896]],[[913,3884],[904,3895],[895,3888],[885,3891],[907,3897]],[[592,3882],[591,3883],[583,3892],[594,3895]],[[1124,3832],[1104,3833],[1096,3846],[1078,3833],[1071,3837],[1082,3845],[1066,3846],[1066,3858],[1054,3845],[1045,3866],[1029,3860],[1032,3886],[1051,3894],[1052,3884],[1060,3892],[1078,3875],[1089,3892],[1098,3891],[1098,3880],[1088,3881],[1102,3853],[1097,3847],[1144,3861],[1157,3839],[1140,3835],[1137,3846]],[[539,3804],[531,3805],[525,3813],[525,3808],[503,3839],[549,3847],[520,3851],[520,3867],[479,3872],[503,3892],[530,3893],[533,3879],[551,3880],[563,3862],[554,3860],[558,3849],[574,3834],[551,3849],[552,3839],[536,3831],[543,3825],[526,3826],[525,3815],[537,3812]],[[1463,3879],[1466,3890],[1468,3883]],[[583,3865],[585,3888],[591,3883],[585,3868]],[[1724,3879],[1740,3888],[1742,3881]],[[906,3821],[896,3883],[906,3870],[905,3836]],[[941,3871],[936,3875],[944,3872]],[[422,3848],[420,3857],[410,3855],[427,3872]],[[939,3850],[927,3872],[941,3865]],[[406,3860],[409,3870],[412,3863]],[[610,3854],[584,3862],[585,3868]],[[448,3860],[433,3862],[444,3868]],[[640,3832],[614,3860],[624,3867],[639,3855]],[[462,3853],[454,3857],[465,3867]],[[1016,3821],[1001,3825],[1010,3830],[1002,3844],[966,3849],[950,3837],[939,3850],[950,3840],[958,3853],[989,3847],[995,3864],[1019,3861],[1000,3862],[1014,3849]],[[1746,3852],[1744,3861],[1752,3861]],[[518,3850],[510,3856],[515,3861]],[[585,3831],[600,3856],[609,3845]],[[1740,3840],[1733,3846],[1746,3852]],[[1807,3829],[1809,3848],[1827,3833]],[[1195,3836],[1190,3846],[1204,3846]],[[1168,3833],[1157,3839],[1170,3839]],[[594,3820],[580,3824],[585,3831]],[[1791,3803],[1783,3804],[1807,3829]],[[1258,3809],[1246,3823],[1282,3823]],[[1029,3807],[1030,3819],[1038,3810]],[[1344,3814],[1338,3819],[1350,3815]],[[839,3805],[841,3814],[853,3813]],[[1394,3546],[1387,3547],[1395,3552]],[[1101,3778],[1084,3793],[1094,3809]],[[641,3799],[649,3809],[658,3802]],[[674,3804],[661,3805],[679,3808]],[[815,3557],[780,3566],[770,3588],[750,3599],[737,3580],[734,3594],[706,3573],[706,3610],[671,3628],[670,3619],[669,3626],[636,3621],[634,3634],[642,3638],[648,3626],[658,3638],[665,3629],[671,3646],[681,3643],[675,3639],[682,3629],[687,3641],[679,3649],[687,3658],[694,3640],[747,3661],[771,3675],[763,3691],[794,3707],[802,3685],[836,3693],[834,3710],[842,3712],[852,3699],[844,3692],[847,3679],[881,3694],[882,3685],[910,3682],[911,3698],[927,3702],[926,3752],[904,3777],[896,3760],[882,3756],[887,3764],[872,3781],[883,3806],[897,3800],[923,3807],[921,3798],[940,3789],[948,3799],[959,3797],[935,3778],[940,3773],[924,3776],[925,3770],[933,3769],[927,3768],[936,3743],[957,3726],[945,3714],[971,3703],[971,3685],[990,3679],[982,3672],[993,3663],[969,3660],[963,3641],[957,3653],[942,3652],[957,3661],[937,3683],[894,3680],[868,3663],[866,3648],[854,3668],[851,3651],[832,3673],[800,3671],[751,3636],[745,3626],[757,3637],[762,3619],[737,3624],[749,3612],[773,3612],[781,3628],[790,3627],[787,3617],[831,3636],[837,3622],[864,3620],[833,3599],[815,3599],[801,3618],[783,3573],[795,3578]],[[968,3793],[963,3800],[968,3807],[980,3799]],[[1808,3793],[1809,3804],[1816,3798]],[[790,3787],[768,3790],[785,3797]],[[1231,3782],[1216,3786],[1220,3794]],[[1647,3768],[1650,3790],[1665,3775]],[[1417,3510],[1411,3518],[1423,3529]],[[64,3779],[65,3786],[82,3783]],[[1073,3760],[1074,3780],[1063,3778],[1065,3784],[1080,3785],[1088,3768]],[[736,3002],[659,3021],[683,3029],[682,3052],[719,3045],[731,3058],[749,3055],[757,3067],[728,3089],[731,3103],[681,3102],[754,3108],[769,3119],[795,3088],[827,3083],[794,3048],[804,3012],[793,3020],[792,3035],[770,3039],[759,3055],[729,3036],[733,3023],[757,3018]],[[705,3764],[706,3780],[712,3770]],[[306,3720],[293,3745],[274,3751],[288,3764],[285,3750],[308,3752],[310,3743],[321,3751],[308,3765],[335,3774],[327,3767],[335,3752],[323,3755],[323,3741],[305,3738]],[[650,3697],[639,3716],[678,3723],[646,3755],[651,3759],[676,3758],[685,3769],[692,3757],[704,3762],[707,3733],[686,3736],[670,3700]],[[985,3748],[979,3752],[991,3766]],[[1241,3719],[1214,3737],[1210,3735],[1210,3765],[1228,3759],[1233,3746],[1252,3743],[1259,3728]],[[1157,3639],[1145,3649],[1144,3716],[1129,3679],[1083,3691],[1074,3682],[1071,3695],[1087,3710],[1066,3736],[1072,3732],[1078,3742],[1100,3728],[1102,3734],[1145,3724],[1146,3742],[1153,3743],[1155,3697],[1163,3691]],[[553,3185],[526,3187],[542,3190],[568,3237],[591,3230],[605,3236],[595,3242],[611,3252],[614,3225],[642,3234],[641,3215],[657,3205],[676,3217],[677,3197],[660,3186],[620,3198],[607,3218],[587,3201],[567,3212]],[[1010,3501],[975,3603],[950,3591],[937,3604],[934,3622],[961,3611],[968,3616],[965,3637],[986,3595],[1004,3581],[1002,3549],[1048,3525],[1011,3514]],[[431,3458],[414,3514],[412,3520],[406,3518],[400,3528],[412,3535],[419,3561],[419,3522],[415,3521],[421,3520],[419,3513],[436,3523],[444,3517],[439,3508],[451,3508],[456,3522],[478,3499],[454,3498],[477,3487],[478,3477],[451,3473],[444,3480]],[[13,3682],[0,3706],[-20,3718],[-35,3752],[-29,3754],[-16,3724],[14,3708],[23,3694]],[[1038,3632],[1037,3658],[1018,3653],[1013,3691],[1049,3702],[1044,3683],[1068,3678],[1051,3644]],[[845,3727],[834,3743],[851,3752],[857,3740]],[[851,3432],[798,3459],[788,3476],[805,3461],[820,3463],[830,3476],[841,3462],[864,3474],[865,3449]],[[100,3688],[95,3709],[51,3745],[82,3737],[112,3711],[115,3691]],[[374,3736],[359,3738],[351,3738],[366,3744]],[[479,3124],[462,3136],[450,3129],[437,3159],[468,3170],[478,3165],[467,3151],[485,3148],[485,3131]],[[98,3732],[99,3743],[106,3739]],[[328,3495],[313,3497],[320,3498],[315,3518],[323,3515],[312,3524],[336,3511],[339,3524],[354,3518],[379,3528],[381,3498],[371,3502],[368,3520],[362,3506]],[[1336,3448],[1309,3464],[1305,3483],[1337,3486],[1346,3458]],[[198,3724],[197,3737],[208,3736]],[[536,3261],[513,3290],[507,3284],[507,3304],[489,3312],[494,3317],[482,3327],[519,3312],[526,3291],[541,3284]],[[1193,3723],[1180,3732],[1210,3735]],[[797,3711],[800,3735],[820,3721]],[[361,3566],[347,3572],[352,3611],[343,3628],[377,3615],[360,3590],[367,3575]],[[1047,3547],[1047,3567],[1037,3566],[1031,3582],[1019,3584],[1043,3592],[1043,3606],[1060,3589],[1049,3576],[1063,3559],[1054,3560],[1055,3548]],[[1262,3726],[1261,3734],[1269,3733]],[[1507,3690],[1507,3697],[1498,3693],[1501,3713],[1474,3728],[1483,3732],[1512,3704]],[[621,3685],[585,3694],[582,3715],[595,3723],[597,3703]],[[1054,3711],[1058,3720],[1049,3722],[1063,3722]],[[1372,3699],[1363,3703],[1372,3722],[1379,3712]],[[49,3691],[38,3715],[51,3711]],[[1265,3689],[1288,3714],[1301,3691]],[[764,3494],[712,3495],[710,3502],[702,3496],[704,3514],[713,3501],[736,3499],[732,3506],[747,3509],[736,3526],[747,3527]],[[1050,3704],[1044,3712],[1054,3711]],[[84,3673],[52,3711],[62,3709]],[[613,3089],[597,3098],[618,3100],[663,3142],[657,3118],[644,3115],[643,3108],[659,3106],[655,3101],[618,3099]],[[486,3572],[481,3589],[472,3585],[478,3591],[499,3601],[512,3585],[503,3576],[494,3583]],[[1337,3663],[1312,3673],[1310,3692],[1329,3692]],[[370,3186],[344,3187],[350,3202],[378,3202]],[[360,3261],[352,3262],[341,3280],[371,3285]],[[1057,3601],[1050,3610],[1057,3627],[1067,3627],[1070,3604]],[[506,3610],[504,3621],[522,3636],[527,3619]],[[52,3664],[58,3674],[48,3681],[60,3686],[73,3672],[91,3672]],[[94,3634],[82,3651],[95,3656],[107,3636]],[[1371,3661],[1377,3679],[1383,3670]],[[22,3670],[15,3676],[26,3677]],[[1284,3663],[1277,3668],[1285,3670]],[[587,3112],[593,3144],[607,3128]],[[1003,3649],[993,3663],[1010,3652]],[[1208,3623],[1177,3639],[1176,3654],[1184,3644],[1198,3645],[1193,3635]],[[628,3594],[607,3603],[623,3612],[634,3601]],[[836,3543],[826,3554],[817,3556],[834,3562],[847,3547]],[[308,3649],[308,3656],[315,3653]],[[438,3327],[434,3365],[447,3359]],[[368,3635],[375,3642],[366,3641],[364,3650],[377,3650],[378,3640]],[[1115,3614],[1101,3623],[1090,3642],[1114,3631],[1108,3623]],[[1288,3490],[1284,3511],[1300,3509]],[[428,3395],[416,3411],[430,3416]],[[437,3292],[428,3278],[409,3278]],[[548,3101],[533,3102],[532,3119]],[[625,2952],[615,2963],[635,2966]],[[881,3535],[865,3548],[869,3554],[880,3540],[887,3546]],[[1190,3596],[1168,3619],[1188,3608]],[[1142,3566],[1132,3585],[1139,3593]],[[1161,3631],[1168,3619],[1158,3619]],[[543,3618],[530,3619],[534,3629],[545,3629],[536,3624]],[[544,3243],[541,3254],[561,3249]],[[1162,3598],[1151,3606],[1158,3619]],[[563,3428],[553,3442],[563,3445]],[[625,3613],[623,3626],[634,3621]],[[126,3561],[104,3577],[117,3575]],[[1248,3611],[1238,3612],[1250,3621]],[[892,3033],[876,3051],[894,3041]],[[1213,3497],[1196,3516],[1216,3503]],[[578,3606],[567,3607],[569,3615]],[[1174,3530],[1159,3532],[1170,3541]],[[433,3366],[422,3373],[427,3384]],[[1146,3591],[1140,3594],[1148,3603]],[[640,3160],[636,3174],[647,3173]],[[815,3413],[806,3417],[827,3424]],[[427,3259],[434,3268],[444,3260]],[[102,3587],[100,3595],[108,3596]],[[858,3542],[847,3547],[859,3554]],[[544,3506],[546,3499],[527,3499]],[[727,3391],[720,3400],[728,3408]],[[656,3562],[649,3573],[659,3575]],[[351,3413],[347,3419],[366,3421]],[[666,3216],[670,3230],[677,3224]],[[486,3356],[476,3359],[485,3368]],[[481,3459],[475,3474],[483,3473]],[[308,3566],[303,3575],[312,3574]],[[294,3524],[285,3530],[297,3534]],[[351,3384],[349,3395],[359,3393]],[[339,3560],[337,3566],[351,3566]],[[377,3292],[367,3295],[372,3304]],[[486,3451],[481,3459],[494,3458]],[[1056,3511],[1055,3521],[1065,3514]],[[216,3390],[226,3380],[217,3380]],[[427,3164],[418,3167],[421,3176]],[[495,3530],[494,3541],[503,3531]],[[788,3477],[778,3485],[787,3486]],[[1348,3429],[1341,3431],[1350,3440]],[[96,3477],[98,3483],[111,3483]],[[826,3393],[832,3402],[836,3395]],[[1069,3389],[1067,3395],[1080,3395]],[[859,3304],[854,3313],[864,3310]],[[293,3503],[296,3510],[304,3504]],[[758,3516],[756,3522],[769,3519]],[[1329,3417],[1327,3429],[1334,3423]],[[1161,3922],[1157,3914],[1152,3922]],[[577,3410],[560,3416],[563,3428],[563,3417]],[[375,3257],[368,3261],[380,3263]],[[441,3225],[434,3229],[439,3235]],[[364,3361],[356,3365],[363,3369]],[[632,3379],[626,3380],[626,3389]],[[565,3364],[560,3372],[557,3381]]] diff --git a/test/Earcut.Tests/fixtures/water-huge3.json b/test/Earcut.Tests/fixtures/water-huge3.json new file mode 100644 index 0000000..e16cad4 --- /dev/null +++ b/test/Earcut.Tests/fixtures/water-huge3.json @@ -0,0 +1 @@ +[[[-29,90],[-25,43],[-35,38],[-33,29],[-22,26],[-12,41],[-15,22],[6,18],[22,2],[-19,-4],[-10,-6],[-32,-17],[-29,5],[-44,-11],[-49,3],[-52,-6],[-64,-6],[-64,-43],[-62,-37],[-48,-47],[-44,-38],[-34,-52],[-37,-64],[45,-64],[44,-50],[56,-37],[67,-51],[69,-36],[33,-2],[97,2],[90,20],[97,24],[96,9],[111,7],[128,-11],[110,-13],[100,0],[98,-15],[108,-19],[102,-41],[110,-50],[102,-64],[162,-64],[148,-51],[158,-41],[136,-9],[138,15],[124,26],[126,40],[134,23],[145,30],[159,25],[160,8],[174,-1],[161,-36],[171,-40],[163,-64],[230,-64],[231,-56],[219,-59],[225,-34],[218,-22],[241,-26],[239,-54],[258,-31],[273,-29],[256,2],[289,28],[285,36],[304,36],[294,41],[301,63],[311,63],[320,84],[334,86],[310,56],[313,48],[329,54],[319,61],[382,64],[376,81],[366,78],[370,91],[361,105],[351,93],[337,110],[350,109],[358,119],[361,106],[371,109],[390,96],[405,110],[388,86],[392,72],[425,94],[434,69],[391,56],[389,48],[417,26],[403,25],[409,-12],[393,-19],[402,-18],[396,-31],[414,-46],[396,-62],[384,-14],[361,2],[347,28],[334,-3],[343,-15],[333,-15],[333,-31],[322,-37],[333,-58],[315,-54],[303,-64],[462,-64],[461,-32],[483,-26],[483,-36],[507,-38],[497,-54],[501,-64],[551,-64],[544,-56],[554,-64],[635,-64],[640,-56],[639,-64],[671,-64],[694,-52],[699,-64],[864,-64],[829,-45],[849,-26],[841,-11],[853,-7],[864,-11],[857,-16],[874,-47],[865,-64],[1024,-64],[973,-37],[1000,-13],[1041,-64],[1207,-64],[1198,-41],[1204,-10],[1210,-40],[1228,-51],[1228,-64],[1305,-64],[1302,-24],[1293,-16],[1302,-11],[1296,22],[1308,27],[1312,21],[1303,16],[1307,-48],[1316,-63],[1327,-47],[1328,-54],[1343,-52],[1323,-64],[1515,-61],[1522,-47],[1506,-8],[1527,11],[1497,53],[1471,61],[1465,52],[1481,53],[1481,30],[1471,43],[1455,45],[1461,54],[1444,54],[1447,23],[1425,22],[1419,-12],[1410,-4],[1376,-8],[1376,-33],[1386,-34],[1373,-45],[1359,-41],[1372,-35],[1369,-6],[1417,6],[1418,59],[1426,72],[1451,66],[1449,99],[1461,104],[1479,91],[1489,105],[1500,104],[1497,114],[1518,113],[1512,127],[1527,126],[1488,169],[1520,187],[1510,204],[1502,203],[1507,209],[1564,211],[1562,233],[1576,241],[1579,273],[1573,267],[1558,274],[1550,264],[1541,272],[1578,290],[1590,265],[1602,271],[1607,262],[1602,267],[1600,241],[1580,239],[1579,215],[1538,183],[1538,166],[1530,164],[1531,135],[1548,116],[1536,103],[1554,108],[1550,94],[1550,101],[1538,99],[1538,83],[1571,74],[1533,79],[1520,58],[1541,54],[1523,30],[1539,-1],[1526,-37],[1543,-53],[1527,-64],[1605,-64],[1599,-50],[1586,-53],[1591,-16],[1609,-54],[1624,-40],[1607,-64],[1768,-64],[1720,-9],[1707,-24],[1716,-24],[1706,-28],[1711,-43],[1706,-32],[1692,-35],[1693,-22],[1701,-24],[1677,0],[1677,13],[1705,16],[1699,10],[1724,-6],[1757,1],[1746,11],[1753,11],[1753,34],[1763,46],[1773,43],[1755,67],[1773,88],[1767,62],[1786,38],[1803,75],[1798,103],[1781,104],[1780,93],[1771,92],[1751,108],[1767,105],[1796,125],[1800,154],[1817,159],[1819,147],[1830,159],[1828,171],[1833,159],[1843,159],[1851,131],[1894,133],[1913,119],[1929,131],[1931,157],[1945,146],[1935,143],[1936,123],[1948,117],[1962,132],[1985,110],[2021,110],[2028,101],[1997,93],[1990,82],[1973,87],[1952,72],[1963,64],[1958,52],[1977,38],[1968,32],[1989,29],[2010,45],[2002,49],[2010,57],[2005,67],[2017,63],[2033,84],[2009,13],[2019,9],[2020,-19],[1995,15],[1984,-4],[1978,8],[1987,19],[1961,1],[1952,4],[1953,31],[1930,38],[1901,66],[1903,53],[1890,46],[1900,33],[1878,19],[1881,6],[1868,3],[1887,-25],[1896,-17],[1894,-35],[1904,-43],[1928,-34],[1935,-22],[1928,-64],[1947,-64],[1940,-49],[1949,-38],[1963,-42],[1951,-53],[1964,-56],[1959,-64],[2026,-64],[2023,-55],[2036,-64],[2066,-46],[2061,-37],[2047,-41],[2065,-23],[2070,-30],[2082,1],[2080,54],[2095,51],[2092,-1],[2074,-26],[2085,-36],[2083,-58],[2096,-59],[2101,-45],[2144,-28],[2148,-44],[2134,-42],[2119,-54],[2131,-56],[2130,-64],[2246,-64],[2247,-54],[2218,-57],[2222,-32],[2229,-33],[2225,-41],[2242,-36],[2244,-46],[2253,-37],[2249,-9],[2273,-16],[2293,-7],[2302,-12],[2302,-45],[2283,-43],[2282,-31],[2264,-24],[2251,-55],[2268,-52],[2269,-64],[2435,-64],[2444,-54],[2428,-14],[2434,12],[2407,61],[2347,55],[2341,76],[2327,74],[2338,92],[2352,92],[2353,102],[2319,161],[2292,158],[2289,138],[2301,131],[2292,132],[2292,117],[2289,133],[2238,149],[2222,120],[2208,130],[2210,142],[2183,148],[2161,178],[2131,188],[2129,198],[2114,204],[2095,189],[2083,198],[2082,187],[2078,207],[2061,197],[2057,222],[2034,222],[2031,232],[2069,232],[2073,219],[2097,213],[2102,227],[2108,210],[2120,212],[2150,186],[2192,169],[2190,201],[2210,188],[2227,155],[2233,167],[2248,169],[2279,152],[2277,162],[2293,168],[2291,182],[2267,191],[2279,196],[2303,174],[2315,175],[2263,273],[2266,341],[2241,353],[2219,399],[2237,404],[2246,418],[2240,438],[2252,428],[2249,405],[2228,384],[2242,357],[2282,345],[2284,322],[2296,309],[2304,313],[2303,304],[2326,331],[2306,301],[2317,290],[2314,272],[2358,288],[2348,274],[2320,264],[2324,247],[2331,248],[2330,212],[2345,174],[2367,191],[2358,174],[2365,168],[2345,164],[2369,165],[2352,156],[2362,153],[2366,128],[2382,146],[2382,138],[2392,145],[2384,115],[2417,142],[2399,118],[2417,103],[2430,107],[2421,99],[2439,82],[2442,58],[2477,30],[2490,34],[2480,27],[2504,6],[2543,14],[2551,8],[2542,-2],[2508,-2],[2507,-31],[2523,-35],[2502,-47],[2508,-61],[2538,-52],[2539,-64],[2829,-64],[2839,-48],[2839,-64],[2865,-64],[2855,-34],[2868,-46],[2866,-64],[2894,-64],[2903,-40],[2897,-15],[2885,-17],[2881,1],[2856,6],[2852,-23],[2833,24],[2841,15],[2869,12],[2875,20],[2865,39],[2884,31],[2877,10],[2893,7],[2893,-1],[2907,20],[2926,6],[2926,29],[2932,14],[2941,30],[2933,8],[2938,3],[2945,11],[2967,-9],[2960,-13],[2970,-19],[2957,-37],[2924,-2],[2918,-14],[2916,-7],[2905,-13],[2915,-64],[2957,-63],[2947,-62],[2958,-40],[2998,-64],[3107,-64],[3119,-36],[3128,-34],[3118,-2],[3106,5],[3102,-4],[3096,14],[3121,21],[3120,37],[3140,-38],[3165,-64],[3166,-64],[3193,-64],[3184,-51],[3189,-29],[3202,-64],[3303,-64],[3299,-53],[3319,-63],[3320,-56],[3339,-57],[3326,-64],[3402,-64],[3385,-41],[3367,-40],[3362,-24],[3336,-9],[3326,6],[3328,26],[3316,18],[3312,27],[3324,28],[3320,39],[3326,37],[3304,93],[3304,125],[3314,142],[3300,147],[3312,149],[3283,203],[3253,183],[3257,164],[3272,163],[3283,148],[3264,143],[3263,131],[3258,139],[3244,131],[3264,106],[3250,96],[3240,135],[3209,140],[3218,158],[3215,178],[3199,179],[3193,206],[3163,231],[3164,247],[3194,223],[3207,228],[3217,201],[3226,201],[3219,227],[3198,236],[3188,261],[3215,263],[3256,198],[3283,210],[3232,287],[3238,288],[3231,311],[3240,322],[3223,340],[3224,360],[3214,355],[3208,367],[3167,375],[3151,367],[3152,341],[3161,335],[3148,329],[3142,341],[3128,342],[3130,363],[3108,372],[3140,393],[3203,372],[3190,393],[3204,394],[3206,403],[3192,429],[3234,384],[3236,392],[3247,389],[3251,370],[3244,361],[3251,361],[3242,352],[3253,353],[3275,295],[3293,280],[3312,300],[3319,286],[3338,286],[3328,278],[3327,253],[3350,254],[3377,204],[3371,228],[3386,222],[3384,234],[3356,297],[3363,289],[3395,315],[3410,304],[3418,314],[3397,319],[3410,329],[3393,353],[3377,349],[3365,366],[3365,406],[3338,399],[3333,409],[3342,414],[3342,430],[3338,436],[3325,429],[3323,441],[3336,442],[3320,447],[3314,463],[3324,473],[3289,529],[3297,542],[3263,580],[3250,607],[3258,627],[3245,632],[3248,649],[3224,655],[3233,665],[3226,674],[3195,653],[3209,629],[3224,630],[3211,648],[3226,647],[3227,629],[3216,616],[3224,603],[3215,607],[3209,599],[3217,573],[3235,563],[3264,513],[3257,506],[3277,476],[3290,474],[3292,460],[3260,478],[3254,441],[3231,465],[3240,471],[3234,492],[3226,492],[3211,529],[3226,514],[3237,533],[3204,571],[3198,550],[3189,550],[3196,534],[3173,542],[3150,522],[3162,521],[3164,506],[3174,503],[3160,495],[3168,474],[3150,474],[3157,484],[3150,500],[3145,487],[3137,495],[3134,488],[3129,508],[3149,507],[3135,540],[3156,531],[3156,540],[3176,548],[3145,595],[3131,601],[3136,612],[3122,612],[3128,581],[3119,597],[3093,602],[3074,631],[3084,636],[3067,648],[3086,672],[3076,695],[3103,707],[3083,726],[3094,707],[3073,705],[3063,736],[3034,745],[3034,758],[3047,744],[3047,754],[3023,788],[3037,794],[3035,802],[3051,799],[3059,807],[3036,852],[3027,852],[3021,838],[3013,854],[3013,846],[3004,851],[3018,863],[3011,867],[3020,875],[3009,877],[3014,896],[2997,891],[2990,877],[2979,883],[2984,897],[2954,887],[2967,905],[2942,940],[2979,967],[2964,986],[2944,966],[2938,970],[2959,992],[2952,994],[2958,1014],[2926,1034],[2946,1037],[2964,1015],[2968,994],[2982,991],[2995,966],[2989,960],[2998,958],[3022,915],[3037,882],[3032,871],[3061,832],[3074,787],[3083,776],[3090,786],[3096,776],[3081,771],[3082,755],[3092,755],[3086,751],[3096,734],[3123,734],[3124,725],[3152,708],[3134,687],[3141,682],[3136,673],[3161,662],[3157,677],[3167,677],[3175,694],[3192,685],[3210,690],[3211,704],[3253,645],[3270,680],[3275,667],[3262,656],[3270,650],[3259,644],[3259,612],[3295,650],[3316,656],[3305,650],[3314,650],[3294,615],[3287,618],[3292,634],[3273,615],[3271,609],[3287,606],[3273,604],[3274,586],[3283,573],[3291,576],[3287,569],[3304,549],[3302,528],[3320,487],[3346,518],[3339,501],[3348,502],[3348,490],[3330,493],[3323,481],[3361,441],[3365,452],[3361,416],[3386,400],[3380,392],[3395,383],[3408,389],[3392,375],[3406,361],[3402,351],[3414,350],[3410,341],[3428,312],[3449,315],[3442,288],[3471,292],[3468,274],[3480,282],[3487,270],[3472,262],[3475,251],[3496,252],[3507,236],[3501,227],[3486,242],[3483,214],[3506,168],[3501,159],[3513,117],[3487,174],[3485,202],[3455,236],[3449,229],[3442,253],[3427,249],[3440,258],[3427,268],[3388,243],[3408,243],[3410,231],[3395,222],[3407,208],[3419,212],[3422,197],[3448,201],[3454,177],[3443,164],[3433,173],[3435,156],[3425,157],[3448,113],[3434,119],[3403,161],[3398,147],[3407,125],[3393,119],[3385,153],[3363,158],[3359,143],[3352,146],[3350,165],[3369,165],[3346,211],[3335,190],[3322,203],[3304,196],[3321,145],[3349,114],[3347,100],[3355,110],[3358,99],[3376,91],[3387,105],[3389,92],[3407,85],[3418,70],[3416,53],[3431,48],[3440,15],[3499,-63],[3550,-64],[3553,-57],[3574,-64],[3574,-55],[3580,-64],[3775,-64],[3774,-53],[3791,-64],[3920,-64],[3917,-45],[3902,-49],[3902,-57],[3864,-43],[3854,-15],[3872,-3],[3882,-31],[3904,-33],[3898,-20],[3908,-16],[3915,-37],[3923,-27],[3931,-31],[3925,-38],[3932,-64],[3969,-64],[3977,-44],[3986,-45],[3980,-64],[4091,-64],[4108,-55],[4125,-60],[4124,-53],[4134,-64],[4160,-64],[4160,2],[4149,17],[4151,31],[4130,45],[4121,70],[4107,75],[4105,95],[4077,82],[4047,102],[4031,66],[4056,38],[4040,28],[4068,14],[4070,26],[4076,23],[4073,13],[4092,-13],[4075,-25],[4079,-37],[4070,-38],[4058,-32],[4058,-12],[4033,-10],[4032,28],[3980,66],[3977,82],[3985,85],[3956,138],[3946,139],[3948,151],[3921,200],[3922,257],[3932,272],[3920,304],[3917,295],[3911,299],[3918,311],[3893,289],[3861,299],[3836,279],[3852,213],[3859,116],[3850,131],[3823,118],[3845,132],[3850,178],[3841,206],[3846,210],[3849,193],[3850,200],[3848,212],[3835,216],[3845,219],[3832,245],[3840,259],[3827,258],[3833,300],[3821,303],[3833,313],[3815,317],[3825,318],[3815,321],[3831,338],[3823,347],[3832,349],[3824,358],[3821,411],[3813,412],[3821,417],[3789,454],[3742,560],[3728,572],[3735,593],[3692,608],[3653,599],[3679,633],[3713,649],[3702,652],[3687,640],[3690,653],[3680,644],[3658,650],[3644,683],[3614,689],[3607,699],[3617,703],[3613,712],[3591,714],[3573,795],[3561,803],[3569,814],[3555,822],[3557,843],[3541,875],[3507,864],[3522,902],[3510,931],[3467,966],[3482,965],[3490,977],[3474,990],[3474,1005],[3418,1009],[3439,1016],[3449,1041],[3441,1055],[3445,1073],[3434,1074],[3419,1126],[3400,1141],[3403,1173],[3393,1184],[3376,1182],[3331,1242],[3305,1315],[3288,1322],[3289,1315],[3262,1341],[3255,1335],[3255,1347],[3249,1331],[3242,1335],[3248,1341],[3224,1349],[3230,1359],[3223,1365],[3215,1358],[3212,1367],[3206,1357],[3195,1371],[3156,1376],[3025,1540],[2999,1515],[2998,1525],[2990,1522],[3003,1508],[2998,1496],[2973,1528],[2958,1526],[2997,1547],[2991,1553],[3002,1565],[2942,1616],[2931,1612],[2904,1642],[2913,1636],[2922,1645],[2921,1631],[2986,1591],[3016,1591],[3072,1637],[3067,1657],[3088,1654],[3109,1695],[3088,1710],[3076,1707],[3088,1724],[3059,1731],[3043,1759],[3029,1751],[3021,1770],[3012,1732],[3004,1732],[2996,1755],[2990,1745],[2982,1749],[2983,1761],[2942,1751],[2956,1760],[2938,1756],[2950,1762],[2958,1761],[2979,1775],[2956,1777],[2996,1791],[2979,1806],[2961,1803],[2968,1812],[2997,1813],[2995,1824],[3011,1808],[3027,1812],[3033,1826],[3037,1815],[3040,1821],[3051,1813],[3076,1836],[3031,1873],[3021,1861],[3030,1847],[3010,1851],[3011,1839],[3005,1859],[2995,1849],[3000,1833],[2989,1855],[2979,1856],[2972,1888],[2983,1886],[2975,1901],[2950,1905],[2943,1913],[2950,1921],[2936,1924],[2940,1938],[2967,1931],[2983,1906],[3007,1902],[2984,1917],[2968,1945],[2942,1959],[2946,1978],[2954,1983],[2962,1957],[2982,1951],[2990,1926],[3015,1904],[3043,1918],[3046,1931],[3036,1930],[3034,1939],[3043,1941],[3022,1949],[3013,1942],[3002,1949],[3007,1956],[2995,1950],[2993,1959],[3009,1962],[3008,1976],[3017,1973],[3010,1990],[2991,1997],[2984,1980],[2973,1986],[2967,1972],[2968,1995],[2965,1987],[2959,1998],[2931,1967],[2937,1955],[2926,1930],[2934,1905],[2922,1921],[2919,1906],[2914,1928],[2904,1932],[2899,1908],[2894,1924],[2875,1925],[2872,1898],[2859,1900],[2856,1912],[2848,1898],[2830,1892],[2808,1902],[2827,1929],[2858,1943],[2877,1931],[2896,1947],[2888,1960],[2879,1948],[2867,1953],[2875,1956],[2865,1968],[2875,1979],[2870,1987],[2852,1978],[2857,1994],[2870,1998],[2847,2003],[2857,2014],[2837,2014],[2843,2022],[2829,2035],[2797,2040],[2772,2061],[2800,2086],[2829,2088],[2854,2035],[2866,2033],[2861,2018],[2880,2007],[2897,2009],[2889,2014],[2896,2050],[2920,2019],[2922,2013],[2913,2025],[2898,2020],[2903,2003],[2914,2003],[2918,1993],[2952,2023],[2963,2012],[2967,2020],[2955,2031],[3001,2013],[3014,2018],[3026,2032],[2999,2038],[3014,2045],[3031,2034],[3028,2019],[3039,2008],[3045,2022],[3033,2039],[3049,2034],[3069,1988],[3079,1992],[3076,2000],[3091,1999],[3079,2011],[3091,2025],[3077,2032],[3095,2031],[3074,2055],[3069,2050],[3061,2068],[3073,2056],[3059,2072],[3049,2061],[3047,2080],[3004,2107],[2995,2104],[2994,2114],[2979,2106],[2964,2109],[2953,2074],[2947,2080],[2951,2071],[2940,2090],[2926,2080],[2935,2103],[2961,2108],[2975,2148],[2960,2149],[2955,2130],[2935,2130],[2936,2117],[2927,2112],[2915,2114],[2918,2128],[2908,2122],[2906,2140],[2886,2142],[2881,2176],[2892,2185],[2889,2193],[2906,2190],[2891,2197],[2884,2216],[2874,2213],[2874,2231],[2864,2234],[2866,2214],[2822,2238],[2828,2246],[2799,2266],[2798,2280],[2808,2282],[2791,2307],[2781,2307],[2779,2332],[2773,2329],[2755,2365],[2707,2398],[2674,2353],[2682,2338],[2674,2341],[2671,2326],[2690,2321],[2679,2318],[2681,2305],[2667,2302],[2675,2277],[2659,2271],[2656,2240],[2628,2241],[2627,2252],[2622,2246],[2615,2253],[2604,2235],[2605,2208],[2619,2201],[2633,2210],[2636,2198],[2653,2197],[2656,2184],[2646,2192],[2640,2178],[2630,2188],[2627,2178],[2618,2187],[2574,2193],[2557,2186],[2555,2171],[2573,2153],[2572,2132],[2557,2108],[2599,2122],[2646,2124],[2609,2103],[2584,2112],[2562,2105],[2560,2085],[2567,2083],[2559,2078],[2554,2086],[2526,2037],[2532,2039],[2546,2007],[2553,2012],[2571,1995],[2576,1999],[2568,2004],[2591,1998],[2588,1991],[2583,1997],[2585,1972],[2561,1997],[2546,1991],[2542,1998],[2556,1956],[2574,1977],[2573,1961],[2583,1951],[2576,1949],[2610,1950],[2614,1928],[2632,1945],[2635,1933],[2648,1943],[2629,1910],[2606,1895],[2599,1915],[2590,1910],[2569,1873],[2587,1849],[2629,1849],[2650,1869],[2648,1908],[2652,1911],[2658,1915],[2661,1901],[2688,1913],[2755,1872],[2806,1816],[2828,1767],[2887,1723],[2888,1712],[2875,1692],[2867,1718],[2823,1766],[2760,1860],[2691,1899],[2665,1898],[2656,1886],[2651,1836],[2660,1824],[2655,1802],[2686,1771],[2638,1736],[2658,1771],[2644,1790],[2652,1805],[2645,1812],[2638,1809],[2588,1848],[2577,1828],[2581,1838],[2572,1847],[2524,1845],[2500,1873],[2483,1869],[2490,1881],[2489,1883],[2482,1873],[2483,1887],[2487,1884],[2484,1888],[2461,1886],[2463,1897],[2452,1897],[2458,1902],[2428,1908],[2434,1912],[2426,1920],[2413,1909],[2401,1918],[2405,1932],[2388,1928],[2394,1935],[2373,1933],[2332,1950],[2313,1931],[2319,1926],[2311,1929],[2324,1912],[2324,1892],[2299,1892],[2295,1859],[2311,1836],[2305,1788],[2313,1783],[2306,1777],[2319,1779],[2322,1771],[2305,1717],[2308,1710],[2337,1717],[2343,1701],[2337,1684],[2324,1688],[2326,1677],[2354,1648],[2372,1653],[2367,1642],[2376,1647],[2378,1631],[2389,1626],[2396,1606],[2404,1608],[2413,1563],[2405,1562],[2375,1615],[2343,1618],[2328,1585],[2338,1557],[2352,1542],[2335,1548],[2330,1541],[2324,1555],[2299,1560],[2298,1571],[2329,1603],[2325,1612],[2301,1610],[2294,1597],[2297,1606],[2288,1604],[2304,1618],[2297,1629],[2310,1636],[2302,1678],[2291,1687],[2310,1692],[2275,1762],[2301,1802],[2297,1816],[2284,1822],[2297,1848],[2290,1855],[2270,1851],[2293,1863],[2292,1878],[2279,1881],[2286,1867],[2262,1858],[2273,1883],[2260,1881],[2269,1892],[2250,1878],[2234,1885],[2217,1876],[2201,1897],[2173,1872],[2109,1858],[2113,1868],[2170,1876],[2177,1886],[2153,1908],[2128,1916],[2108,1949],[2043,1991],[2051,1995],[2068,1979],[2110,1971],[2122,1942],[2132,1941],[2122,1937],[2175,1906],[2227,1919],[2202,1904],[2223,1884],[2274,1904],[2274,1920],[2288,1938],[2277,1936],[2283,1946],[2241,1923],[2270,1941],[2276,1963],[2262,1965],[2273,1984],[2261,1975],[2272,1992],[2245,1973],[2241,1988],[2240,1981],[2235,1989],[2215,1981],[2229,2010],[2215,2030],[2222,2034],[2233,2030],[2232,2013],[2269,2016],[2286,2004],[2311,2004],[2315,1973],[2306,1967],[2308,1963],[2322,1974],[2332,1957],[2422,1929],[2430,1929],[2433,1942],[2441,1928],[2506,1889],[2531,1877],[2541,1884],[2561,1877],[2596,1935],[2583,1947],[2557,1945],[2542,1978],[2526,1972],[2537,1987],[2524,1997],[2509,1981],[2522,1999],[2488,2010],[2485,2030],[2527,2067],[2526,2079],[2517,2081],[2531,2091],[2525,2105],[2535,2104],[2559,2133],[2556,2160],[2524,2175],[2441,2110],[2438,2094],[2425,2098],[2417,2125],[2396,2131],[2405,2156],[2400,2166],[2348,2178],[2312,2208],[2298,2235],[2296,2228],[2288,2232],[2271,2284],[2247,2313],[2235,2313],[2212,2338],[2166,2348],[2160,2399],[2169,2402],[2149,2423],[2134,2427],[2133,2414],[2119,2427],[2103,2425],[2098,2439],[2111,2442],[2098,2444],[2106,2446],[2099,2466],[2124,2474],[2110,2541],[2067,2580],[2061,2603],[2057,2592],[2045,2608],[2023,2608],[2022,2615],[2038,2616],[2053,2608],[2045,2642],[2058,2685],[2039,2706],[2010,2714],[2008,2704],[1990,2714],[1988,2698],[1975,2723],[1948,2731],[1939,2721],[1933,2738],[1916,2750],[1910,2741],[1910,2753],[1896,2751],[1895,2767],[1865,2787],[1870,2793],[1861,2802],[1884,2787],[1879,2779],[1906,2769],[1898,2768],[1904,2759],[1917,2756],[1917,2765],[1926,2748],[1948,2755],[1945,2768],[1928,2778],[1981,2763],[1950,2760],[1995,2734],[2018,2739],[2024,2725],[2008,2730],[2070,2696],[2062,2716],[2073,2711],[2093,2723],[2052,2759],[1969,2791],[1901,2871],[1879,2885],[1874,2876],[1859,2899],[1852,2896],[1858,2921],[1831,2929],[1844,2930],[1835,2944],[1870,2965],[1840,2992],[1844,3003],[1843,2994],[1862,2992],[1876,2973],[1875,2960],[1892,2955],[1885,2938],[1914,2944],[1957,2929],[1965,2941],[1956,2959],[1937,2957],[1918,3028],[1910,3028],[1910,3038],[1903,3029],[1895,3034],[1897,3052],[1880,3042],[1885,3047],[1848,3062],[1839,3051],[1843,3036],[1882,3006],[1852,3028],[1819,3018],[1816,3029],[1836,3047],[1811,3060],[1804,3077],[1782,3088],[1728,3091],[1714,3106],[1701,3095],[1713,3066],[1747,3031],[1746,3017],[1763,3027],[1803,3008],[1776,3019],[1765,3012],[1761,2991],[1784,2977],[1765,2975],[1760,2954],[1768,2953],[1753,2945],[1759,2924],[1769,2920],[1762,2908],[1776,2908],[1781,2894],[1798,2885],[1787,2895],[1795,2896],[1818,2874],[1835,2873],[1826,2870],[1851,2839],[1854,2846],[1859,2830],[1845,2837],[1841,2825],[1831,2824],[1839,2831],[1830,2832],[1832,2854],[1823,2851],[1821,2862],[1815,2857],[1786,2887],[1777,2882],[1769,2899],[1754,2894],[1760,2906],[1739,2906],[1746,2966],[1739,2975],[1747,2983],[1740,2983],[1746,2990],[1735,2984],[1735,2997],[1748,3000],[1730,3007],[1731,3016],[1702,2999],[1716,2986],[1707,2975],[1710,2962],[1702,2961],[1709,2955],[1699,2949],[1714,2933],[1698,2926],[1709,2915],[1687,2920],[1681,2912],[1691,2908],[1689,2893],[1716,2897],[1727,2877],[1751,2865],[1751,2845],[1735,2838],[1725,2846],[1716,2835],[1697,2856],[1666,2857],[1646,2872],[1642,2888],[1610,2902],[1599,2898],[1604,2904],[1596,2913],[1579,2900],[1585,2931],[1560,2943],[1495,2946],[1486,2972],[1474,2964],[1478,2953],[1447,2958],[1453,2972],[1438,2972],[1436,2951],[1429,2965],[1418,2959],[1407,2969],[1398,2957],[1398,2970],[1412,2975],[1405,2982],[1416,2984],[1410,2995],[1423,3004],[1411,3012],[1416,3023],[1386,2976],[1397,2957],[1386,2953],[1397,2924],[1388,2903],[1398,2911],[1408,2901],[1387,2902],[1400,2879],[1392,2855],[1406,2848],[1415,2855],[1409,2841],[1432,2839],[1430,2828],[1439,2835],[1460,2818],[1503,2817],[1524,2804],[1536,2809],[1531,2824],[1543,2820],[1547,2836],[1558,2834],[1563,2813],[1591,2814],[1605,2798],[1612,2803],[1664,2762],[1642,2760],[1684,2736],[1688,2741],[1690,2731],[1701,2738],[1705,2725],[1723,2722],[1725,2730],[1753,2719],[1768,2696],[1774,2702],[1789,2681],[1799,2685],[1801,2661],[1834,2652],[1840,2636],[1851,2642],[1867,2625],[1880,2626],[1880,2608],[1896,2612],[1938,2558],[1959,2552],[1911,2542],[1919,2530],[1954,2520],[1968,2525],[1964,2535],[1971,2530],[1961,2551],[1985,2544],[1993,2553],[2007,2540],[2015,2549],[2033,2531],[2052,2534],[2060,2518],[2066,2525],[2074,2501],[2056,2497],[2071,2496],[2077,2485],[2052,2478],[2012,2487],[2003,2502],[1971,2500],[1971,2507],[1950,2508],[1952,2518],[1948,2510],[1872,2540],[1858,2565],[1837,2568],[1837,2577],[1816,2582],[1818,2590],[1808,2587],[1809,2605],[1803,2594],[1787,2602],[1790,2615],[1754,2635],[1756,2649],[1741,2647],[1746,2656],[1731,2659],[1725,2680],[1707,2697],[1681,2694],[1697,2708],[1682,2714],[1684,2726],[1675,2721],[1670,2740],[1620,2767],[1579,2804],[1580,2789],[1569,2808],[1552,2798],[1587,2770],[1573,2764],[1600,2742],[1596,2726],[1629,2731],[1598,2724],[1599,2710],[1616,2695],[1603,2705],[1597,2700],[1591,2716],[1549,2725],[1566,2726],[1537,2748],[1521,2745],[1524,2754],[1512,2753],[1501,2770],[1488,2759],[1477,2767],[1463,2761],[1462,2772],[1436,2755],[1426,2759],[1425,2744],[1418,2745],[1427,2740],[1424,2730],[1409,2733],[1414,2744],[1398,2751],[1398,2767],[1392,2752],[1364,2778],[1366,2769],[1353,2777],[1358,2758],[1351,2759],[1348,2741],[1327,2742],[1348,2757],[1344,2776],[1326,2782],[1302,2770],[1298,2757],[1310,2731],[1332,2727],[1297,2714],[1316,2661],[1312,2649],[1287,2699],[1278,2708],[1266,2703],[1264,2720],[1253,2714],[1252,2734],[1283,2732],[1287,2753],[1281,2737],[1263,2753],[1233,2745],[1235,2737],[1251,2745],[1238,2728],[1230,2730],[1231,2745],[1189,2750],[1189,2740],[1196,2741],[1185,2732],[1171,2739],[1159,2710],[1111,2749],[1092,2708],[1099,2710],[1112,2687],[1145,2684],[1159,2709],[1174,2686],[1146,2684],[1142,2676],[1161,2661],[1179,2666],[1160,2659],[1160,2640],[1198,2614],[1196,2599],[1204,2610],[1231,2581],[1251,2589],[1250,2608],[1259,2599],[1264,2608],[1309,2588],[1310,2571],[1325,2576],[1320,2566],[1347,2551],[1350,2540],[1340,2534],[1311,2550],[1310,2533],[1334,2511],[1349,2508],[1348,2516],[1368,2506],[1368,2493],[1377,2497],[1377,2489],[1358,2483],[1348,2453],[1356,2445],[1342,2445],[1344,2435],[1357,2433],[1343,2429],[1348,2416],[1331,2427],[1280,2424],[1297,2410],[1294,2387],[1322,2402],[1318,2380],[1303,2372],[1330,2350],[1306,2347],[1314,2335],[1310,2336],[1296,2323],[1279,2328],[1287,2367],[1264,2357],[1273,2348],[1266,2342],[1255,2354],[1242,2351],[1269,2377],[1279,2415],[1267,2416],[1273,2446],[1299,2461],[1292,2468],[1304,2479],[1296,2483],[1303,2484],[1296,2487],[1301,2495],[1291,2496],[1277,2458],[1263,2486],[1272,2515],[1254,2523],[1212,2484],[1225,2475],[1228,2485],[1227,2466],[1208,2470],[1189,2448],[1194,2421],[1190,2427],[1176,2420],[1170,2425],[1183,2427],[1173,2432],[1186,2445],[1180,2459],[1196,2463],[1183,2482],[1175,2479],[1182,2494],[1170,2495],[1165,2486],[1165,2494],[1150,2493],[1166,2453],[1161,2415],[1198,2402],[1193,2387],[1173,2383],[1173,2372],[1155,2369],[1150,2377],[1151,2360],[1162,2353],[1179,2363],[1180,2345],[1176,2346],[1157,2322],[1167,2325],[1169,2313],[1193,2308],[1192,2319],[1203,2319],[1197,2326],[1215,2326],[1209,2306],[1228,2303],[1215,2297],[1179,2307],[1166,2291],[1122,2277],[1119,2295],[1129,2312],[1113,2318],[1115,2306],[1105,2315],[1114,2320],[1108,2342],[1106,2330],[1093,2335],[1122,2379],[1133,2376],[1119,2382],[1133,2391],[1122,2411],[1129,2421],[1106,2414],[1105,2420],[1143,2444],[1143,2458],[1130,2465],[1138,2469],[1119,2463],[1112,2468],[1121,2471],[1111,2472],[1141,2477],[1140,2494],[1126,2499],[1121,2521],[1107,2525],[1108,2511],[1094,2505],[1101,2485],[1094,2480],[1082,2489],[1087,2518],[1056,2503],[1078,2521],[1071,2530],[1059,2523],[1049,2533],[1055,2541],[1089,2546],[1094,2564],[1098,2550],[1114,2549],[1093,2572],[1085,2572],[1085,2561],[1067,2588],[1065,2595],[1082,2606],[1098,2603],[1087,2599],[1099,2592],[1117,2610],[1109,2620],[1093,2618],[1076,2643],[1060,2635],[1057,2643],[1073,2656],[1056,2653],[1031,2677],[1015,2673],[1020,2681],[1007,2673],[1009,2696],[981,2709],[974,2705],[980,2696],[962,2699],[957,2680],[931,2665],[920,2676],[928,2694],[922,2699],[931,2702],[888,2709],[910,2714],[959,2703],[945,2724],[884,2737],[867,2726],[863,2734],[802,2740],[795,2708],[803,2705],[811,2724],[816,2719],[796,2690],[773,2699],[760,2694],[780,2688],[778,2678],[790,2679],[787,2661],[796,2648],[784,2641],[801,2619],[811,2620],[796,2607],[797,2592],[811,2598],[829,2582],[871,2569],[851,2581],[865,2583],[877,2569],[862,2548],[828,2550],[813,2536],[814,2515],[779,2501],[794,2490],[774,2489],[742,2504],[750,2513],[743,2522],[782,2536],[785,2527],[802,2530],[815,2561],[797,2585],[786,2561],[775,2560],[786,2570],[777,2578],[785,2591],[739,2567],[734,2575],[734,2561],[750,2564],[749,2543],[730,2560],[725,2554],[725,2562],[707,2555],[717,2573],[707,2574],[708,2594],[717,2588],[721,2603],[722,2592],[728,2619],[727,2637],[717,2633],[719,2625],[709,2643],[729,2647],[711,2659],[712,2668],[702,2667],[703,2660],[695,2640],[657,2661],[651,2676],[645,2663],[660,2648],[653,2643],[608,2681],[628,2682],[613,2701],[600,2698],[603,2713],[587,2719],[569,2708],[557,2717],[570,2740],[549,2739],[532,2719],[508,2736],[502,2729],[496,2745],[480,2746],[466,2763],[438,2777],[430,2771],[430,2779],[421,2778],[422,2791],[440,2794],[425,2810],[433,2839],[424,2835],[408,2850],[400,2827],[376,2857],[352,2858],[328,2875],[312,2869],[318,2876],[300,2891],[336,2885],[346,2899],[377,2884],[378,2873],[395,2894],[394,2908],[335,2922],[316,2917],[312,2929],[353,2931],[320,2938],[322,2948],[352,2938],[345,2948],[337,2945],[335,2955],[320,2957],[306,2943],[302,2956],[289,2953],[277,2964],[260,2958],[254,2977],[238,2984],[271,2983],[239,3005],[207,2989],[199,3004],[182,2987],[263,2949],[206,2964],[208,2970],[186,2975],[137,3009],[92,3023],[107,3030],[100,3030],[107,3043],[93,3051],[92,3062],[90,3049],[79,3049],[93,3037],[78,3046],[72,3038],[81,3031],[27,3050],[35,3027],[50,3020],[41,3020],[41,2992],[14,2999],[7,2990],[24,2962],[118,2923],[115,2907],[104,2905],[108,2897],[119,2905],[117,2884],[107,2886],[117,2881],[114,2869],[124,2857],[98,2868],[95,2852],[84,2851],[62,2867],[47,2865],[38,2878],[78,2880],[68,2893],[72,2904],[84,2903],[81,2928],[31,2946],[10,2937],[-14,2945],[-7,2959],[-18,2969],[-17,2984],[-23,2973],[-64,2980],[-64,2938],[-61,2947],[-56,2943],[-64,2934],[-64,2528],[-60,2544],[-53,2535],[-64,2527],[-64,2078],[-56,2067],[-64,2076],[-64,1882],[-44,1896],[-15,1891],[22,1867],[-18,1875],[-30,1863],[-43,1890],[-54,1885],[-51,1875],[-64,1881],[-64,1675],[-55,1681],[-51,1715],[-37,1710],[-28,1721],[-18,1756],[13,1758],[15,1772],[18,1766],[26,1773],[21,1799],[34,1796],[28,1817],[63,1802],[63,1813],[73,1807],[86,1825],[97,1787],[90,1775],[82,1787],[62,1755],[45,1745],[47,1719],[41,1739],[28,1743],[30,1692],[21,1694],[17,1684],[11,1717],[-1,1706],[4,1672],[20,1666],[-3,1650],[-12,1656],[-11,1644],[-19,1644],[-35,1646],[-54,1674],[-64,1672],[-64,1632],[-51,1632],[-53,1624],[-64,1625],[-64,1370],[-56,1364],[-64,1358],[-64,1121],[28,1167],[34,1157],[-22,1126],[-35,1102],[-58,1103],[-55,1086],[-63,1091],[-39,1056],[-58,1062],[-41,1046],[-23,1044],[-49,1020],[-57,1025],[-52,1040],[-64,1048],[-64,943],[-56,926],[-15,950],[-6,968],[-18,1044],[-11,1090],[7,1091],[86,1174],[77,1176],[73,1192],[89,1194],[89,1201],[70,1222],[79,1224],[103,1203],[108,1195],[100,1185],[120,1167],[120,1191],[135,1189],[141,1198],[127,1246],[140,1253],[133,1299],[146,1270],[157,1266],[164,1279],[159,1294],[169,1281],[161,1268],[171,1236],[180,1236],[166,1228],[172,1208],[147,1203],[139,1186],[125,1182],[126,1162],[177,1128],[188,1131],[204,1173],[207,1157],[233,1160],[243,1152],[244,1161],[247,1150],[264,1143],[285,1187],[334,1204],[357,1195],[366,1200],[369,1226],[393,1260],[372,1275],[377,1293],[378,1277],[395,1264],[433,1296],[434,1307],[439,1296],[491,1306],[496,1296],[464,1297],[409,1264],[402,1252],[415,1246],[397,1245],[378,1223],[373,1194],[388,1167],[373,1189],[357,1182],[323,1187],[330,1174],[343,1173],[351,1154],[329,1157],[331,1167],[324,1155],[321,1185],[289,1174],[280,1161],[307,1157],[319,1136],[303,1128],[277,1141],[263,1130],[211,1147],[199,1122],[212,1101],[195,1120],[165,1120],[137,1140],[136,1119],[145,1130],[144,1112],[157,1098],[125,1116],[133,1119],[104,1142],[108,1149],[90,1154],[-2,1060],[-2,1016],[14,974],[10,956],[26,950],[-45,910],[-3,869],[-18,846],[-1,835],[23,842],[29,818],[2,821],[6,804],[13,794],[21,801],[19,790],[29,782],[89,782],[100,798],[118,790],[133,804],[141,778],[131,781],[132,770],[122,769],[126,756],[105,755],[121,717],[114,714],[156,697],[176,668],[169,667],[142,701],[118,703],[106,717],[107,733],[99,730],[99,757],[83,767],[31,772],[-3,795],[-21,771],[4,763],[-30,754],[-45,786],[-41,801],[-53,802],[-56,795],[-62,799],[-57,808],[-64,806],[-64,749],[-38,742],[-64,748],[-64,674],[-55,672],[-64,671],[-64,654],[-64,463],[-38,465],[-27,454],[-46,436],[-47,450],[-64,460],[-64,313],[-54,310],[-64,308],[-64,253],[-63,260],[-54,257],[-64,252],[-64,238],[-57,242],[-51,229],[-20,222],[0,227],[11,200],[-8,197],[-23,214],[-42,216],[-28,209],[-35,204],[-64,219],[-64,171],[-54,168],[-44,178],[-44,159],[-33,147],[-52,132],[-64,148],[-64,74],[-54,82],[-54,101],[-51,89],[-43,90],[-37,82]],[[1761,3044],[1761,3054],[1782,3060]],[[1735,2908],[1710,2915],[1728,2919],[1737,2918]],[[1422,2881],[1402,2890],[1417,2898]],[[1529,2844],[1505,2851],[1501,2845],[1496,2856],[1491,2847],[1466,2866],[1467,2854],[1445,2857],[1449,2875],[1471,2881],[1482,2866],[1487,2877],[1493,2869],[1511,2872],[1515,2862],[1531,2863],[1520,2850]],[[1765,2832],[1761,2841],[1781,2838],[1782,2853],[1796,2849],[1796,2836]],[[1854,2884],[1841,2888],[1854,2892]],[[1689,2815],[1684,2825],[1692,2827],[1678,2836],[1689,2832],[1682,2842],[1694,2844],[1692,2834],[1699,2838],[1701,2830]],[[1341,2711],[1335,2728],[1359,2746],[1373,2740],[1396,2722],[1345,2718]],[[1538,2735],[1529,2741],[1539,2742]],[[1833,2800],[1810,2809],[1812,2824]],[[1888,2808],[1876,2817],[1885,2818]],[[1488,2720],[1448,2725],[1461,2727],[1459,2735],[1488,2729]],[[1508,2671],[1508,2721],[1522,2707],[1525,2675],[1514,2672]],[[1223,2719],[1212,2720],[1208,2733],[1207,2720],[1196,2730],[1204,2743],[1211,2745]],[[1923,2781],[1905,2786],[1907,2793]],[[1925,2770],[1923,2781],[1927,2778]],[[1235,2717],[1239,2727],[1246,2723]],[[1176,2717],[1181,2725],[1187,2719]],[[2042,2734],[1981,2763],[2028,2750]],[[1684,2747],[1679,2756],[1691,2754]],[[1176,2696],[1172,2701],[1183,2698]],[[1211,2621],[1208,2634],[1190,2632],[1171,2648],[1196,2652],[1208,2636],[1219,2640],[1219,2630]],[[1646,2630],[1643,2638],[1651,2635]],[[1250,2609],[1231,2614],[1220,2630],[1235,2637],[1234,2623],[1246,2623]],[[1751,2571],[1720,2582],[1697,2612],[1708,2605],[1715,2628],[1714,2608],[1735,2601],[1734,2587]],[[1864,2685],[1873,2698],[1859,2711],[1884,2697]],[[1692,2553],[1684,2561],[1697,2560]],[[1402,2483],[1405,2495],[1379,2529],[1352,2537],[1357,2546],[1370,2546],[1370,2539],[1373,2545],[1388,2525],[1436,2504],[1436,2485],[1426,2498]],[[1974,2631],[1946,2650],[1962,2661]],[[1814,2524],[1799,2531],[1800,2540],[1814,2540]],[[1938,2622],[1938,2630],[1952,2633]],[[1989,2630],[1974,2631],[1983,2632]],[[1835,2509],[1816,2528],[1845,2510]],[[1639,2454],[1638,2495],[1661,2497],[1628,2508],[1637,2517],[1644,2505],[1654,2503],[1657,2512],[1668,2502],[1683,2455],[1663,2472]],[[1849,2494],[1848,2502],[1862,2507],[1861,2497]],[[1947,2435],[1948,2444],[1949,2455],[1937,2452],[1930,2462],[1867,2463],[1854,2478],[1861,2497],[1867,2504],[1865,2495],[1885,2485],[1887,2473],[1893,2488],[1913,2476],[1914,2463],[1922,2472],[1968,2448],[1965,2439]],[[1259,2453],[1246,2457],[1259,2466],[1251,2459]],[[1176,2366],[1179,2380],[1191,2372]],[[1228,2321],[1229,2337],[1238,2338],[1233,2336],[1237,2323]],[[1313,2281],[1301,2282],[1308,2289]],[[108,2996],[99,2997],[104,3004]],[[1393,2459],[1391,2471],[1400,2474]],[[124,2989],[110,2995],[129,2999]],[[1468,2447],[1455,2470],[1479,2467],[1478,2448]],[[1511,2459],[1507,2464],[1520,2465]],[[2026,2448],[2023,2457],[2032,2462],[2038,2453]],[[1428,2442],[1401,2451],[1417,2452]],[[1970,2439],[1978,2448],[1983,2441]],[[2009,2422],[2012,2432],[1999,2434],[2026,2447],[2034,2433]],[[1552,2446],[1569,2438],[1546,2438]],[[1357,2433],[1353,2440],[1363,2438]],[[1463,2404],[1434,2438],[1477,2423],[1482,2407],[1472,2405]],[[1417,2364],[1388,2385],[1395,2400],[1377,2403],[1376,2415],[1368,2410],[1388,2437],[1405,2433],[1410,2422],[1400,2399],[1412,2375],[1428,2368]],[[1619,2414],[1573,2436],[1586,2437]],[[1775,2284],[1772,2308],[1755,2313],[1758,2298],[1749,2299],[1751,2318],[1733,2330],[1676,2335],[1659,2357],[1636,2361],[1634,2369],[1643,2367],[1623,2386],[1615,2384],[1616,2402],[1646,2385],[1647,2395],[1630,2408],[1640,2415],[1655,2389],[1663,2396],[1663,2388],[1671,2393],[1678,2386],[1670,2382],[1677,2368],[1687,2362],[1695,2369],[1686,2378],[1697,2381],[1697,2366],[1706,2374],[1730,2348],[1751,2342],[1753,2332],[1764,2337],[1779,2317],[1804,2307],[1807,2295],[1814,2298],[1809,2291],[1819,2285]],[[1334,2390],[1328,2398],[1354,2414],[1353,2403],[1365,2407]],[[1738,2405],[1733,2411],[1748,2413]],[[166,2979],[166,2987],[173,2980]],[[1847,1472],[1836,1482],[1818,1478],[1810,1496],[1801,1493],[1801,1503],[1785,1509],[1783,1523],[1765,1507],[1753,1516],[1744,1506],[1739,1524],[1730,1514],[1734,1531],[1723,1557],[1718,1564],[1700,1560],[1713,1605],[1722,1608],[1724,1636],[1686,1611],[1682,1618],[1673,1613],[1669,1633],[1657,1629],[1644,1620],[1643,1585],[1625,1572],[1621,1577],[1639,1594],[1615,1596],[1606,1583],[1607,1556],[1636,1536],[1617,1536],[1604,1552],[1616,1519],[1595,1491],[1590,1497],[1593,1484],[1585,1512],[1570,1512],[1574,1526],[1558,1521],[1561,1512],[1547,1524],[1550,1546],[1539,1545],[1556,1571],[1523,1568],[1551,1582],[1539,1589],[1526,1581],[1529,1590],[1515,1587],[1517,1606],[1507,1601],[1490,1613],[1498,1614],[1496,1625],[1503,1618],[1498,1634],[1505,1644],[1515,1636],[1505,1628],[1507,1612],[1530,1606],[1538,1614],[1534,1626],[1543,1608],[1538,1598],[1546,1592],[1547,1609],[1554,1600],[1552,1607],[1565,1604],[1566,1590],[1593,1576],[1589,1633],[1600,1642],[1621,1622],[1624,1640],[1644,1649],[1668,1640],[1685,1660],[1680,1673],[1685,1667],[1693,1675],[1670,1681],[1673,1695],[1654,1726],[1639,1714],[1638,1722],[1624,1716],[1635,1726],[1629,1741],[1616,1748],[1587,1740],[1590,1750],[1561,1766],[1564,1770],[1559,1782],[1567,1780],[1560,1801],[1576,1812],[1538,1801],[1545,1818],[1534,1807],[1526,1816],[1538,1823],[1536,1895],[1547,1914],[1540,1938],[1520,1949],[1524,1956],[1502,1977],[1521,1997],[1523,2012],[1557,2013],[1551,2023],[1563,2023],[1559,2032],[1537,2040],[1517,2018],[1511,2034],[1496,2032],[1505,1999],[1496,1990],[1483,1999],[1480,1983],[1463,1982],[1455,1989],[1458,1980],[1448,1976],[1443,1984],[1453,1991],[1422,2019],[1463,2000],[1469,2013],[1468,1996],[1489,2007],[1475,2002],[1476,2015],[1486,2018],[1468,2023],[1472,2010],[1454,2039],[1455,2071],[1467,2074],[1466,2083],[1455,2091],[1454,2107],[1443,2108],[1447,2116],[1460,2114],[1463,2138],[1449,2146],[1437,2141],[1431,2157],[1441,2162],[1462,2144],[1464,2157],[1457,2155],[1456,2167],[1440,2177],[1448,2186],[1454,2177],[1472,2181],[1467,2191],[1476,2201],[1483,2196],[1484,2223],[1470,2223],[1475,2238],[1453,2252],[1459,2280],[1438,2275],[1462,2307],[1471,2306],[1462,2322],[1488,2338],[1487,2350],[1467,2364],[1467,2355],[1452,2349],[1451,2329],[1436,2321],[1439,2352],[1443,2348],[1461,2367],[1488,2373],[1482,2379],[1492,2384],[1481,2380],[1480,2396],[1489,2390],[1489,2406],[1498,2387],[1500,2398],[1504,2376],[1557,2376],[1584,2351],[1577,2334],[1585,2343],[1629,2311],[1662,2306],[1665,2289],[1684,2284],[1680,2275],[1695,2263],[1672,2268],[1668,2256],[1659,2267],[1651,2253],[1649,2267],[1640,2262],[1638,2272],[1626,2274],[1629,2243],[1606,2246],[1609,2238],[1593,2226],[1595,2202],[1617,2159],[1615,2146],[1648,2142],[1661,2115],[1679,2109],[1659,2114],[1655,2103],[1647,2108],[1634,2096],[1635,2088],[1650,2091],[1636,2082],[1649,2082],[1639,2077],[1646,2074],[1670,2080],[1663,2064],[1674,2066],[1677,2049],[1668,2052],[1674,2045],[1666,2044],[1663,2027],[1701,1960],[1701,1939],[1721,1943],[1716,1918],[1732,1902],[1724,1880],[1751,1857],[1714,1850],[1721,1798],[1755,1750],[1762,1752],[1769,1731],[1762,1731],[1782,1714],[1788,1725],[1779,1730],[1811,1731],[1813,1710],[1821,1713],[1820,1700],[1832,1694],[1809,1704],[1804,1719],[1797,1703],[1818,1691],[1796,1660],[1783,1683],[1760,1683],[1770,1646],[1758,1643],[1771,1633],[1768,1616],[1776,1629],[1775,1615],[1799,1599],[1784,1615],[1795,1612],[1809,1595],[1805,1609],[1818,1611],[1847,1568],[1832,1576],[1823,1558],[1808,1556],[1801,1544],[1762,1549],[1806,1538],[1816,1515],[1836,1514],[1836,1491],[1845,1485],[1874,1489],[1873,1481],[1848,1480]],[[60,2977],[51,2979],[56,2986]],[[78,2969],[73,2978],[83,2977]],[[2062,2365],[2044,2387],[2038,2377],[2026,2378],[2027,2389],[2047,2399],[2061,2380],[2068,2383]],[[-29,2947],[-44,2951],[-30,2960]],[[173,2913],[155,2915],[132,2936]],[[223,2880],[193,2902],[186,2898],[173,2913],[192,2911],[233,2882]],[[1517,2382],[1505,2385],[1522,2396]],[[31,2841],[22,2844],[39,2857]],[[1790,2373],[1775,2390],[1797,2380]],[[664,2640],[660,2648],[668,2648]],[[669,2617],[641,2622],[641,2630],[651,2627],[674,2647],[691,2641]],[[343,2773],[332,2781],[332,2801],[297,2813],[301,2821],[263,2843],[267,2861],[234,2882],[244,2885],[264,2866],[273,2871],[269,2865],[281,2854],[374,2818],[360,2834],[363,2846],[363,2836],[387,2827],[382,2810],[379,2799],[363,2802],[347,2789]],[[1908,2365],[1900,2368],[1907,2373]],[[878,2692],[863,2706],[881,2708],[881,2699]],[[1383,2334],[1363,2338],[1370,2344],[1360,2343],[1366,2350],[1353,2359],[1374,2368],[1375,2354],[1388,2345]],[[1847,2350],[1819,2357],[1815,2366]],[[887,2694],[881,2699],[887,2703]],[[2106,2337],[2089,2340],[2099,2351]],[[2066,2343],[2068,2351],[2077,2348]],[[1917,2265],[1893,2285],[1907,2303],[1857,2344],[1881,2336],[1888,2343],[1893,2325],[1900,2328],[1913,2314],[1905,2312],[1913,2307],[1915,2293],[1908,2291]],[[287,2816],[287,2825],[294,2820]],[[7,2789],[-5,2804],[0,2810],[20,2804],[19,2790]],[[1336,2329],[1316,2334],[1339,2339]],[[34,2747],[23,2756],[29,2800],[53,2782],[43,2783],[43,2753]],[[1970,2314],[1953,2334],[1968,2334]],[[1665,2314],[1666,2324],[1675,2332],[1682,2317]],[[282,2757],[282,2770],[299,2782]],[[1275,2312],[1274,2322],[1285,2317]],[[1305,2301],[1296,2302],[1296,2311]],[[1476,1969],[1476,1978],[1486,1970]],[[381,2768],[389,2781],[400,2775]],[[366,2750],[352,2760],[367,2774],[378,2765]],[[465,2759],[466,2744],[458,2744]],[[442,2562],[424,2568],[432,2581],[423,2596],[419,2606],[402,2599],[400,2594],[381,2577],[366,2580],[385,2605],[397,2605],[390,2614],[397,2633],[391,2645],[379,2644],[356,2619],[346,2642],[352,2676],[368,2666],[370,2654],[395,2652],[406,2625],[436,2624],[425,2631],[437,2632],[406,2658],[422,2686],[395,2698],[412,2709],[411,2729],[397,2716],[382,2724],[394,2725],[401,2735],[390,2745],[405,2750],[447,2729],[455,2736],[475,2719],[457,2726],[464,2711],[482,2711],[481,2700],[476,2707],[464,2700],[458,2715],[439,2713],[437,2689],[424,2681],[428,2642],[444,2632],[441,2617],[419,2618],[447,2600],[461,2620],[476,2591],[462,2587],[461,2568]],[[1231,2286],[1222,2297],[1231,2297]],[[1212,2281],[1208,2292],[1215,2296]],[[1858,2251],[1831,2278],[1845,2284],[1841,2272],[1860,2265],[1866,2271],[1873,2258],[1867,2259]],[[1383,2256],[1369,2267],[1376,2280],[1402,2270]],[[1228,2256],[1193,2265],[1190,2278],[1237,2265]],[[263,2710],[250,2721],[252,2731],[234,2735],[252,2744],[266,2725]],[[163,2574],[159,2579],[158,2607],[146,2616],[120,2596],[101,2600],[144,2628],[137,2641],[113,2635],[116,2654],[88,2668],[88,2686],[101,2690],[117,2667],[128,2665],[120,2668],[130,2675],[127,2683],[113,2684],[113,2703],[128,2707],[135,2697],[139,2723],[128,2728],[127,2740],[150,2712],[167,2719],[181,2699],[138,2697],[150,2671],[133,2666],[152,2643],[146,2622],[164,2604]],[[832,2618],[827,2626],[822,2620],[815,2628],[825,2635],[829,2627],[824,2654],[807,2653],[822,2659],[818,2673],[827,2673],[851,2655],[851,2640],[842,2639]],[[348,2715],[345,2729],[354,2732]],[[504,2718],[487,2719],[495,2727]],[[188,2704],[181,2723],[187,2716],[186,2724],[200,2725],[198,2707],[195,2713]],[[802,2631],[802,2645],[814,2648]],[[86,2712],[81,2722],[90,2718]],[[883,2629],[886,2638],[893,2632]],[[312,2691],[314,2708],[323,2712],[328,2700]],[[230,2701],[227,2707],[239,2707]],[[857,2626],[848,2630],[855,2634]],[[206,2649],[208,2667],[219,2663],[223,2670],[217,2665],[212,2675],[221,2689],[209,2688],[211,2705],[232,2690],[233,2663],[246,2671],[231,2654],[214,2659]],[[296,2650],[279,2660],[285,2664],[277,2661],[253,2686],[279,2690],[288,2703],[288,2680],[306,2686],[313,2660]],[[15,2694],[19,2702],[27,2695]],[[236,2690],[229,2695],[249,2699]],[[204,2664],[196,2667],[199,2679],[191,2675],[191,2696],[209,2685],[208,2667],[206,2679]],[[1,2678],[2,2691],[12,2691]],[[1081,2608],[1060,2613],[1074,2619],[1070,2629]],[[604,2609],[569,2635],[570,2643],[569,2653],[545,2647],[542,2660],[527,2660],[525,2673],[511,2672],[521,2687],[532,2684],[536,2670],[570,2664],[591,2646],[605,2654],[623,2643],[627,2652],[642,2647],[641,2630],[619,2635],[621,2615]],[[871,2595],[878,2620],[879,2602]],[[460,2655],[452,2676],[463,2682],[472,2668]],[[488,2650],[491,2661],[478,2672],[486,2678],[494,2666]],[[22,2656],[13,2658],[18,2677]],[[925,2605],[916,2612],[931,2611]],[[958,2595],[952,2597],[948,2605]],[[164,2651],[166,2669],[176,2660]],[[879,2581],[874,2592],[886,2585]],[[515,2645],[507,2646],[513,2652],[506,2660],[515,2664]],[[943,2569],[935,2578],[942,2586]],[[960,2542],[936,2553],[934,2572],[937,2562],[962,2568]],[[520,2634],[510,2635],[518,2638]],[[18,2585],[-2,2635],[10,2637],[32,2607],[32,2593]],[[44,2624],[36,2636],[49,2633]],[[515,2618],[520,2634],[527,2624]],[[-23,2615],[-22,2633],[-16,2622]],[[22,2623],[24,2632],[31,2627]],[[977,2552],[971,2555],[979,2567],[991,2559]],[[489,2616],[482,2617],[487,2628]],[[702,2586],[689,2600],[700,2600],[701,2608],[690,2616],[691,2627],[711,2608],[702,2606],[705,2596]],[[921,2538],[903,2563],[910,2565]],[[66,2597],[48,2615],[60,2614]],[[527,2499],[500,2509],[510,2517],[504,2524],[516,2549],[501,2553],[515,2567],[507,2585],[535,2599],[525,2599],[527,2612],[551,2593],[554,2604],[553,2596],[568,2589],[579,2597],[588,2585],[560,2585],[561,2566],[540,2559],[524,2572],[536,2538],[532,2524],[516,2516]],[[179,2592],[183,2609],[197,2608],[204,2597],[186,2605]],[[-38,2596],[-43,2603],[-30,2609]],[[502,2598],[505,2606],[513,2603]],[[1002,2508],[1006,2526],[1031,2540],[1037,2555],[1032,2533],[1008,2522]],[[843,2524],[837,2529],[844,2532]],[[653,2577],[629,2603],[653,2593]],[[935,2510],[922,2522],[931,2522]],[[-43,2559],[-32,2585],[-38,2596],[-29,2590],[-31,2578],[-17,2572]],[[885,2509],[873,2520],[888,2517]],[[74,2538],[75,2590],[83,2588],[76,2570],[84,2553]],[[325,2573],[322,2587],[334,2587],[329,2580],[337,2575]],[[658,2563],[655,2576],[675,2581]],[[198,2523],[191,2543],[181,2535],[184,2580],[200,2569],[210,2543]],[[323,2570],[326,2551],[338,2554],[334,2549],[317,2549]],[[160,2570],[173,2556],[163,2556]],[[661,2535],[663,2544],[634,2557],[622,2546],[620,2554],[583,2555],[585,2564],[610,2557],[635,2563],[640,2556],[644,2566],[652,2556],[678,2552],[666,2542],[682,2540]],[[911,2503],[903,2504],[902,2519]],[[1038,2498],[1035,2514],[1050,2511],[1054,2503]],[[843,2475],[844,2475],[871,2480],[875,2472],[850,2472],[861,2469],[850,2451],[864,2435],[838,2427],[829,2423],[824,2427],[832,2429],[822,2432],[832,2430],[846,2457],[832,2454],[833,2472],[810,2473],[805,2503],[834,2473]],[[277,2516],[266,2518],[274,2544],[286,2552]],[[568,2542],[581,2551],[580,2543]],[[712,2487],[725,2523],[725,2550],[729,2540],[741,2542],[728,2529],[740,2517]],[[-29,2533],[-23,2538],[-34,2541],[-19,2547],[-13,2537]],[[551,2536],[536,2538],[540,2546]],[[1045,2467],[1023,2494],[1044,2494],[1045,2485],[1056,2498],[1077,2492],[1074,2480],[1055,2485],[1058,2469]],[[611,2536],[605,2540],[619,2544]],[[664,2530],[639,2531],[644,2539]],[[575,2509],[575,2517],[559,2520],[566,2522],[561,2531],[596,2516],[580,2517]],[[449,2511],[460,2526],[460,2517]],[[250,2499],[240,2516],[259,2525],[258,2503],[250,2509]],[[623,2514],[613,2518],[612,2525],[623,2523]],[[12,2467],[4,2484],[-4,2484],[-4,2471],[-11,2481],[4,2492],[-9,2517],[4,2513],[6,2501],[8,2519],[21,2513],[21,2484],[11,2483],[20,2476]],[[454,2448],[435,2461],[423,2491],[408,2502],[409,2516],[434,2511],[438,2500],[444,2505],[441,2465]],[[-56,2481],[-51,2513],[-42,2508]],[[614,2492],[618,2504],[641,2510],[654,2502],[639,2501],[641,2493],[630,2501]],[[572,2494],[576,2504],[585,2498]],[[547,2491],[541,2493],[549,2498]],[[693,2487],[701,2495],[704,2488]],[[507,2479],[509,2492],[514,2487]],[[1008,2475],[1003,2479],[1019,2488]],[[653,2355],[648,2368],[660,2404],[642,2440],[671,2464],[691,2467],[712,2487],[707,2469],[715,2454],[697,2469],[684,2450],[697,2434],[671,2448]],[[340,2459],[353,2487],[352,2466]],[[951,2474],[939,2478],[947,2487]],[[559,2476],[555,2481],[561,2485]],[[595,2469],[593,2482],[602,2481],[605,2474]],[[99,2337],[78,2346],[78,2359],[96,2367],[98,2378],[72,2389],[67,2377],[59,2382],[61,2404],[56,2396],[45,2408],[31,2389],[43,2407],[35,2414],[44,2419],[38,2427],[50,2430],[24,2481],[44,2472],[54,2437],[70,2433],[73,2414],[62,2411],[64,2404],[79,2401],[81,2410],[93,2399],[98,2408],[123,2400],[115,2367],[105,2364],[113,2345],[114,2338],[111,2344]],[[945,2467],[931,2472],[930,2481],[939,2478]],[[1074,2468],[1065,2472],[1074,2479]],[[196,2477],[188,2478],[210,2478]],[[802,2466],[794,2475],[800,2474]],[[619,2471],[613,2474],[626,2475]],[[109,2439],[122,2454],[149,2448],[154,2461],[194,2474],[197,2465],[185,2460],[195,2450]],[[631,2464],[630,2472],[639,2469]],[[969,2455],[957,2470],[982,2466],[972,2442],[965,2442]],[[422,2460],[417,2470],[430,2463]],[[313,2433],[294,2445],[311,2450],[323,2469],[335,2457],[331,2446]],[[397,2468],[414,2461],[394,2461]],[[1076,2453],[1081,2460],[1091,2462],[1103,2446],[1108,2451],[1110,2441],[1092,2441]],[[693,2444],[694,2453],[701,2450]],[[910,2434],[898,2440],[911,2450]],[[777,2436],[779,2450],[789,2446]],[[1073,2431],[1072,2449],[1082,2438]],[[377,2369],[384,2387],[371,2389],[382,2406],[371,2408],[367,2421],[398,2422],[418,2444],[448,2448],[424,2431],[437,2426],[431,2412],[450,2400],[396,2385],[396,2377],[387,2385],[392,2370]],[[1033,2408],[1056,2445],[1046,2418]],[[452,2414],[443,2415],[445,2428],[465,2443],[478,2436],[459,2432]],[[866,2356],[861,2368],[876,2374],[861,2400],[865,2409],[856,2411],[870,2440],[892,2395],[931,2386],[935,2399],[945,2398],[928,2379],[930,2369],[925,2379],[911,2372],[901,2384],[903,2377],[893,2375],[884,2379],[874,2365],[880,2354],[872,2349],[883,2340],[856,2340]],[[816,2424],[798,2425],[795,2434],[814,2438]],[[515,2428],[490,2430],[511,2437],[509,2431]],[[960,2422],[954,2425],[962,2436],[970,2423]],[[693,2428],[698,2433],[707,2431]],[[746,2417],[735,2418],[744,2424],[752,2420]],[[697,2403],[699,2413],[709,2408]],[[486,2386],[493,2410],[504,2392]],[[767,2399],[758,2401],[757,2407]],[[857,2395],[846,2403],[855,2404]],[[273,2359],[254,2376],[265,2380],[266,2394],[276,2394]],[[520,2362],[503,2360],[513,2394],[542,2370],[532,2371],[541,2366],[527,2347],[517,2347]],[[837,2379],[823,2382],[825,2394]],[[1051,2352],[1041,2362],[1060,2388],[1065,2380],[1061,2367],[1049,2364],[1057,2354]],[[950,2369],[949,2375],[993,2380]],[[844,2355],[841,2376],[859,2369]],[[561,2355],[544,2366],[545,2375],[561,2370]],[[317,2350],[311,2352],[319,2373],[342,2360]],[[1446,1848],[1436,1846],[1441,1861],[1451,1859],[1442,1871],[1437,1858],[1427,1866],[1424,1852],[1403,1846],[1401,1833],[1399,1841],[1367,1839],[1363,1825],[1363,1846],[1343,1842],[1348,1851],[1338,1864],[1350,1854],[1367,1863],[1371,1896],[1360,1904],[1368,1915],[1354,1925],[1344,1919],[1344,1939],[1331,1953],[1344,1962],[1338,1973],[1350,1988],[1358,1976],[1349,2007],[1360,2011],[1359,2020],[1334,2021],[1320,2010],[1324,2025],[1315,2015],[1288,2032],[1300,2080],[1267,2116],[1251,2118],[1253,2096],[1232,2097],[1231,2110],[1212,2115],[1199,2134],[1200,2152],[1182,2155],[1177,2146],[1146,2183],[1115,2179],[1058,2155],[1060,2149],[1034,2165],[1032,2154],[1032,2169],[994,2163],[994,2146],[1028,2135],[1032,2148],[1038,2124],[1051,2114],[1039,2096],[1042,2082],[1031,2085],[1050,2061],[1048,2045],[1009,2068],[1020,2106],[1014,2102],[1018,2112],[1008,2115],[1008,2125],[998,2121],[999,2093],[986,2077],[999,2074],[984,2062],[976,2030],[986,2020],[982,1991],[968,1996],[984,1962],[976,1960],[981,1927],[972,1931],[939,1909],[931,1878],[938,1869],[925,1874],[905,1864],[926,1881],[934,1913],[963,1933],[971,1951],[962,1977],[935,1986],[928,1999],[936,2016],[972,2040],[983,2091],[996,2103],[968,2132],[964,2153],[982,2175],[976,2199],[939,2240],[917,2231],[911,2238],[907,2230],[914,2249],[919,2242],[938,2248],[918,2272],[913,2266],[908,2304],[888,2315],[907,2326],[912,2320],[898,2314],[905,2309],[950,2313],[936,2265],[943,2247],[966,2268],[989,2315],[987,2329],[951,2356],[950,2368],[994,2332],[1001,2319],[949,2236],[977,2215],[993,2176],[995,2182],[1063,2165],[1086,2169],[1104,2197],[1127,2209],[1131,2196],[1153,2190],[1160,2176],[1170,2205],[1182,2210],[1161,2212],[1167,2241],[1144,2237],[1128,2256],[1140,2246],[1166,2245],[1174,2268],[1200,2257],[1206,2235],[1210,2249],[1211,2236],[1220,2242],[1217,2234],[1230,2239],[1242,2232],[1257,2253],[1251,2292],[1240,2301],[1298,2297],[1345,2309],[1343,2298],[1361,2299],[1350,2288],[1332,2300],[1325,2293],[1326,2302],[1300,2290],[1282,2265],[1272,2276],[1261,2271],[1267,2258],[1257,2233],[1270,2225],[1245,2214],[1247,2203],[1225,2195],[1225,2205],[1210,2194],[1196,2204],[1181,2192],[1186,2182],[1245,2189],[1252,2173],[1271,2207],[1279,2205],[1272,2217],[1284,2210],[1293,2216],[1297,2229],[1287,2236],[1311,2245],[1304,2250],[1318,2259],[1316,2270],[1339,2261],[1321,2258],[1329,2251],[1346,2257],[1363,2247],[1369,2219],[1352,2217],[1329,2243],[1337,2250],[1316,2249],[1315,2227],[1330,2228],[1274,2176],[1258,2147],[1263,2138],[1271,2143],[1266,2134],[1295,2096],[1307,2093],[1322,2105],[1321,2087],[1313,2085],[1361,2070],[1376,2090],[1388,2081],[1378,2070],[1383,2061],[1364,2068],[1346,2046],[1348,2063],[1335,2059],[1340,2039],[1370,2049],[1354,2033],[1393,1965],[1404,1962],[1410,1971],[1429,1953],[1442,1954],[1461,1929],[1415,1932],[1468,1896],[1464,1877],[1474,1849],[1479,1858],[1467,1832],[1455,1849]],[[789,2349],[785,2362],[797,2351]],[[492,2350],[479,2356],[492,2360]],[[458,2340],[451,2359],[472,2346]],[[305,2348],[300,2354],[310,2352]],[[1045,2342],[1035,2346],[1051,2352]],[[306,2331],[304,2342],[314,2343]],[[300,2319],[289,2342],[306,2331]],[[312,2285],[300,2298],[303,2310],[268,2309],[271,2289],[250,2290],[252,2307],[185,2307],[208,2311],[220,2338],[230,2341],[231,2320],[254,2308],[275,2325],[295,2314],[300,2319],[319,2297],[324,2309],[324,2293]],[[650,2319],[639,2341],[651,2332]],[[1053,2332],[1047,2337],[1066,2339]],[[390,2274],[376,2295],[379,2306],[398,2306],[403,2326],[417,2337],[414,2329],[434,2314],[420,2313],[432,2303],[424,2291],[382,2301],[400,2285]],[[1095,2311],[1057,2322],[1033,2313],[1053,2331],[1070,2327],[1072,2334],[1074,2322]],[[678,2318],[675,2334],[684,2329]],[[816,2297],[786,2303],[779,2330],[814,2310]],[[102,2318],[97,2328],[110,2321]],[[338,1903],[359,1912],[360,1905]],[[122,2307],[119,2316],[165,2326],[171,2312],[147,2310]],[[564,2305],[535,2308],[539,2323]],[[-8,2304],[-17,2318],[3,2323]],[[458,2287],[451,2295],[469,2304],[454,2310],[478,2319],[501,2301],[518,2302],[502,2290],[477,2300]],[[446,2303],[442,2312],[445,2318]],[[62,2294],[23,2298],[41,2301],[35,2311],[50,2316],[59,2298],[75,2316],[90,2304]],[[404,2052],[386,2050],[394,2018],[379,2012],[374,2026],[363,2018],[323,2024],[313,2001],[312,2014],[299,2021],[301,2035],[329,2049],[330,2060],[312,2068],[308,2112],[269,2107],[260,2098],[251,2104],[258,2144],[301,2130],[337,2106],[345,2038],[377,2030],[385,2049],[377,2062],[367,2061],[348,2109],[367,2102],[372,2079],[382,2083],[357,2120],[365,2156],[380,2130],[387,2085],[446,2078],[456,2088],[467,2070],[511,2097],[495,2105],[515,2119],[486,2112],[470,2122],[457,2107],[437,2115],[433,2137],[420,2142],[425,2161],[412,2165],[431,2177],[427,2158],[437,2139],[449,2131],[457,2148],[467,2139],[462,2132],[472,2134],[487,2146],[480,2170],[467,2171],[457,2149],[443,2144],[440,2157],[429,2160],[473,2175],[473,2201],[504,2179],[531,2187],[536,2169],[545,2167],[551,2145],[541,2081],[593,2081],[563,2080],[558,2071],[570,2052],[550,2042],[584,2048],[562,2029],[588,1995],[598,1986],[603,1997],[621,1998],[624,2007],[614,2016],[627,2023],[627,2036],[636,2011],[651,2009],[654,2033],[674,2039],[667,2076],[646,2060],[639,2080],[616,2082],[627,2091],[641,2115],[670,2117],[675,2139],[662,2144],[678,2154],[671,2157],[678,2170],[663,2173],[654,2154],[656,2179],[642,2199],[655,2206],[635,2218],[635,2225],[647,2222],[645,2233],[625,2235],[641,2240],[621,2254],[630,2256],[630,2267],[640,2253],[631,2284],[637,2290],[612,2283],[610,2292],[585,2301],[581,2314],[597,2314],[605,2296],[629,2291],[649,2313],[649,2299],[666,2287],[679,2287],[682,2306],[685,2290],[695,2297],[699,2289],[708,2303],[710,2287],[700,2288],[697,2277],[683,2286],[667,2281],[672,2263],[665,2271],[650,2249],[656,2232],[662,2251],[671,2246],[671,2229],[683,2246],[690,2238],[679,2222],[683,2206],[700,2221],[713,2212],[721,2224],[740,2225],[736,2214],[747,2206],[753,2216],[749,2198],[723,2189],[716,2161],[704,2164],[743,2123],[740,2116],[714,2135],[698,2165],[695,2140],[674,2129],[673,2114],[690,2111],[692,2090],[699,2099],[721,2096],[740,2112],[745,2093],[736,2087],[745,2085],[744,2074],[779,2049],[749,2032],[748,2020],[735,2021],[742,2027],[732,2032],[748,2037],[741,2055],[749,2059],[755,2050],[753,2062],[734,2065],[726,2015],[690,2017],[696,2028],[689,2022],[683,2029],[689,2038],[677,2023],[702,1977],[718,1983],[712,1971],[723,1965],[712,1959],[740,1949],[735,1941],[753,1929],[771,1889],[756,1897],[711,1865],[728,1847],[723,1841],[712,1858],[687,1848],[690,1859],[680,1866],[693,1879],[700,1909],[732,1924],[703,1927],[688,1941],[671,1931],[662,1941],[658,1933],[650,1949],[658,1911],[648,1912],[654,1904],[642,1886],[630,1885],[635,1905],[624,1931],[641,1954],[624,1960],[604,1941],[592,1946],[594,1959],[587,1945],[611,1923],[601,1927],[581,1910],[597,1908],[602,1887],[592,1878],[605,1878],[608,1867],[599,1864],[608,1846],[584,1848],[597,1828],[590,1822],[571,1830],[565,1822],[553,1837],[543,1804],[547,1772],[566,1793],[570,1734],[582,1731],[588,1736],[597,1717],[589,1689],[603,1703],[634,1700],[644,1735],[668,1723],[655,1711],[658,1676],[645,1675],[652,1683],[646,1692],[633,1676],[645,1668],[629,1652],[615,1678],[601,1671],[603,1657],[613,1650],[619,1656],[642,1622],[637,1610],[654,1612],[652,1593],[680,1591],[661,1573],[629,1566],[662,1550],[698,1555],[684,1571],[675,1568],[677,1579],[706,1577],[713,1566],[716,1576],[743,1576],[739,1557],[700,1555],[699,1548],[708,1546],[714,1526],[723,1525],[725,1540],[723,1517],[731,1519],[736,1506],[748,1516],[756,1500],[740,1490],[742,1476],[713,1474],[705,1454],[671,1433],[686,1429],[691,1388],[659,1387],[657,1372],[648,1392],[658,1402],[649,1415],[665,1421],[642,1438],[635,1430],[632,1449],[618,1455],[629,1455],[615,1460],[640,1457],[639,1483],[631,1484],[638,1497],[629,1511],[615,1504],[598,1519],[602,1524],[592,1523],[586,1507],[583,1518],[577,1511],[578,1529],[563,1525],[581,1547],[568,1561],[539,1530],[559,1565],[544,1565],[528,1580],[517,1569],[490,1591],[543,1594],[575,1611],[561,1620],[562,1671],[548,1691],[548,1700],[562,1704],[546,1717],[515,1708],[525,1715],[538,1758],[521,1753],[516,1741],[508,1745],[532,1785],[530,1799],[518,1796],[518,1809],[532,1803],[515,1815],[487,1821],[459,1807],[442,1782],[442,1780],[434,1758],[436,1771],[423,1780],[434,1804],[421,1817],[432,1816],[439,1828],[422,1831],[440,1830],[446,1846],[444,1828],[483,1822],[505,1845],[504,1861],[492,1868],[481,1861],[489,1870],[463,1886],[446,1892],[442,1885],[458,1866],[449,1855],[448,1858],[448,1855],[444,1861],[446,1865],[442,1881],[425,1875],[421,1890],[395,1898],[382,1881],[386,1867],[373,1859],[365,1901],[376,1908],[353,1938],[337,1933],[347,1923],[326,1927],[335,1900],[323,1924],[308,1932],[294,1927],[302,1902],[280,1904],[286,1912],[275,1914],[273,1928],[252,1905],[264,1900],[237,1898],[236,1889],[224,1900],[239,1900],[246,1919],[270,1932],[254,1954],[267,1948],[284,1972],[276,1977],[277,1965],[264,1968],[274,1983],[258,1995],[277,1993],[283,2004],[279,1986],[323,1941],[335,1947],[338,1959],[354,1957],[368,1986],[355,1957],[370,1959],[363,1971],[373,1971],[372,1959],[378,1960],[372,1952],[380,1930],[430,1897],[437,1920],[402,1925],[406,1941],[386,1969],[380,1962],[375,1982],[430,1953],[456,1964],[431,2010],[423,2003],[396,2018],[425,2031],[431,2011],[448,2019],[450,2008],[465,2004],[475,2010],[471,2023],[445,2036],[452,2038],[439,2058]],[[665,2291],[660,2306],[670,2311]],[[-37,2281],[-35,2309],[-20,2299],[-11,2306],[-12,2282]],[[569,2296],[564,2305],[578,2301]],[[822,2149],[803,2152],[806,2170],[793,2166],[794,2157],[787,2170],[775,2161],[765,2163],[759,2153],[766,2185],[760,2195],[771,2200],[774,2184],[819,2278],[819,2296],[833,2298],[846,2270],[830,2283],[839,2252],[832,2247],[862,2218],[842,2219],[842,2230],[837,2217],[826,2225],[818,2213],[793,2216],[793,2187],[811,2177],[811,2154]],[[1048,2286],[1034,2292],[1039,2297]],[[754,2281],[759,2290],[750,2294],[779,2292],[766,2283]],[[44,2265],[44,2292],[76,2281],[64,2268],[62,2279],[48,2276]],[[1091,2272],[1087,2287],[1095,2287]],[[1077,2231],[1073,2249],[1081,2257],[1072,2261],[1062,2248],[1068,2235],[1048,2238],[1044,2256],[1031,2248],[1022,2260],[1033,2273],[1044,2265],[1055,2287],[1054,2271],[1068,2268],[1070,2280],[1077,2262],[1087,2260],[1084,2236]],[[266,2266],[258,2268],[272,2287]],[[570,2234],[540,2243],[547,2252],[535,2263],[518,2258],[497,2280],[524,2275],[534,2281],[604,2256]],[[247,1895],[256,1885],[243,1885]],[[1115,2144],[1084,2160],[1096,2163]],[[79,2262],[81,2276],[88,2275]],[[1340,2005],[1330,2010],[1333,2018]],[[356,2252],[346,2273],[366,2257]],[[1762,2267],[1755,2272],[1764,2273]],[[1162,2109],[1152,2111],[1153,2124],[1166,2131]],[[1218,2095],[1185,2111],[1212,2113]],[[474,2250],[460,2255],[448,2270]],[[716,2249],[701,2256],[699,2267],[709,2269],[720,2256]],[[1065,2094],[1063,2107],[1071,2100]],[[1930,2165],[1928,2193],[1914,2194],[1911,2205],[1923,2199],[1915,2215],[1905,2197],[1888,2198],[1892,2212],[1874,2216],[1886,2216],[1892,2231],[1880,2231],[1868,2249],[1883,2268],[1892,2265],[1886,2244],[1893,2237],[1897,2258],[1909,2255],[1906,2237],[1916,2233],[1932,2213],[1945,2211],[1947,2193],[1938,2191],[1948,2190],[1931,2180],[1951,2172]],[[1139,2090],[1128,2094],[1143,2097]],[[1110,2252],[1123,2260],[1099,2259],[1121,2267],[1127,2257]],[[274,2254],[266,2266],[274,2265]],[[452,2205],[399,2216],[412,2224],[398,2236],[409,2261],[421,2258],[433,2237],[423,2239],[422,2219],[429,2226],[449,2219]],[[317,2172],[330,2202],[328,2228],[295,2239],[286,2260],[312,2241],[328,2243],[337,2222],[332,2191]],[[1088,2056],[1082,2064],[1099,2068],[1095,2079],[1105,2088],[1118,2080],[1103,2077],[1106,2066]],[[1077,2080],[1070,2084],[1080,2087]],[[374,2247],[366,2257],[378,2252]],[[1224,2016],[1227,2028],[1221,2018],[1207,2032],[1208,2042],[1222,2040],[1218,2050],[1218,2042],[1211,2044],[1217,2053],[1203,2065],[1216,2079],[1216,2067],[1227,2066],[1223,2033],[1238,2034],[1240,2024]],[[1132,2054],[1117,2072],[1136,2074],[1145,2062]],[[1409,2217],[1392,2235],[1397,2250],[1413,2241],[1418,2251],[1432,2231],[1440,2238],[1441,2225],[1422,2232]],[[1198,2044],[1199,2053],[1204,2047]],[[1139,2038],[1132,2042],[1138,2047]],[[1118,1997],[1110,2034],[1118,2038],[1138,1999]],[[466,2241],[457,2242],[476,2249]],[[2010,2218],[1976,2233],[1972,2247]],[[1089,2022],[1075,2027],[1093,2028]],[[1113,2208],[1122,2232],[1112,2246],[1124,2245],[1127,2217]],[[1029,2019],[1035,2023],[1037,2022]],[[1274,2013],[1286,2021],[1287,2014]],[[1770,2195],[1758,2205],[1770,2214],[1760,2240],[1769,2234],[1790,2206],[1774,2210]],[[1032,2001],[1043,2013],[1053,2009]],[[1140,1984],[1141,1996],[1155,1990]],[[468,2230],[457,2237],[476,2236]],[[616,2230],[615,2237],[622,2233]],[[67,2177],[27,2207],[17,2201],[34,2234],[49,2214],[95,2216],[82,2190],[68,2202]],[[1307,1969],[1296,1981],[1304,1991],[1313,1985]],[[1661,2207],[1657,2222],[1667,2226]],[[1015,1910],[983,1926],[1002,1926],[997,1922]],[[1131,1916],[1125,1917],[1132,1926]],[[1119,1917],[1103,1920],[1120,1923]],[[1454,2201],[1435,2212],[1443,2221],[1457,2216]],[[219,2202],[214,2219],[234,2220],[233,2204],[222,2209]],[[1030,1890],[1026,1907],[1040,1892]],[[1302,1566],[1301,1560],[1283,1588],[1254,1589],[1264,1618],[1257,1627],[1299,1642],[1292,1675],[1276,1677],[1281,1664],[1274,1663],[1260,1685],[1274,1700],[1285,1684],[1299,1690],[1291,1705],[1299,1712],[1288,1715],[1285,1729],[1254,1724],[1263,1735],[1276,1731],[1278,1739],[1264,1741],[1278,1751],[1262,1756],[1264,1768],[1253,1768],[1223,1799],[1201,1808],[1179,1800],[1153,1814],[1175,1818],[1167,1829],[1180,1836],[1189,1825],[1201,1837],[1196,1844],[1209,1847],[1210,1860],[1188,1872],[1186,1890],[1206,1906],[1204,1894],[1223,1889],[1216,1858],[1235,1864],[1244,1899],[1256,1900],[1250,1888],[1260,1874],[1241,1869],[1227,1840],[1237,1837],[1232,1831],[1244,1838],[1257,1831],[1256,1818],[1269,1828],[1282,1825],[1254,1804],[1280,1768],[1297,1776],[1306,1769],[1308,1776],[1337,1746],[1357,1749],[1365,1769],[1374,1765],[1373,1756],[1365,1758],[1404,1725],[1422,1735],[1415,1754],[1440,1746],[1420,1770],[1441,1770],[1438,1800],[1457,1789],[1475,1793],[1480,1781],[1468,1774],[1485,1779],[1486,1767],[1500,1783],[1513,1762],[1542,1765],[1531,1740],[1554,1717],[1548,1689],[1519,1717],[1520,1734],[1496,1767],[1476,1762],[1491,1696],[1518,1676],[1511,1676],[1522,1652],[1530,1654],[1533,1633],[1534,1641],[1544,1639],[1534,1627],[1504,1659],[1497,1687],[1480,1686],[1489,1697],[1475,1710],[1469,1700],[1457,1702],[1461,1709],[1449,1703],[1433,1731],[1399,1703],[1403,1694],[1384,1692],[1362,1703],[1362,1692],[1377,1685],[1374,1681],[1366,1670],[1354,1684],[1341,1678],[1343,1663],[1332,1668],[1327,1650],[1336,1655],[1342,1644],[1340,1640],[1328,1644],[1329,1635],[1346,1629],[1330,1617],[1341,1607],[1341,1591],[1318,1615],[1309,1602],[1307,1614],[1305,1601],[1298,1616],[1285,1601],[1303,1571]],[[1104,1888],[1094,1890],[1098,1904]],[[866,2203],[860,2213],[868,2213]],[[1378,2186],[1367,2194],[1385,2213]],[[1034,2199],[1016,2212],[1039,2212]],[[848,2123],[829,2128],[822,2142],[833,2156],[827,2172],[836,2163],[843,2169],[836,2182],[845,2170],[857,2174],[855,2195],[884,2195],[880,2212],[885,2196],[898,2194],[884,2180],[881,2159],[863,2149],[864,2158],[852,2158],[855,2148],[842,2141],[852,2132],[841,2137],[834,2130]],[[1068,2200],[1060,2211],[1072,2209]],[[362,2164],[359,2210],[368,2196],[362,2197]],[[972,1890],[954,1897],[986,1903],[990,1893]],[[689,1925],[688,1932],[699,1926]],[[1341,2207],[1355,2198],[1343,2198]],[[929,2178],[913,2190],[921,2202],[925,2191],[937,2198]],[[1150,1836],[1107,1845],[1104,1836],[1105,1847],[1083,1863],[1083,1887],[1046,1900],[1088,1887],[1094,1860],[1111,1845]],[[1261,1869],[1274,1860],[1263,1860]],[[1030,1672],[1020,1678],[1025,1685],[1009,1686],[1015,1681],[1004,1676],[1008,1687],[995,1683],[1004,1703],[1001,1736],[993,1733],[1006,1748],[996,1764],[1012,1762],[1027,1780],[1011,1790],[1019,1804],[1027,1790],[1032,1810],[1025,1817],[1030,1831],[1020,1837],[1042,1841],[1045,1847],[1032,1852],[1052,1858],[1040,1862],[1052,1868],[1059,1850],[1070,1847],[1070,1829],[1061,1825],[1072,1817],[1057,1815],[1054,1796],[1033,1788],[1051,1762],[1077,1756],[1068,1750],[1049,1757],[1035,1774],[1035,1763],[1014,1763],[1019,1742],[1006,1722],[1007,1702],[1017,1687],[1031,1691],[1035,1678]],[[1823,2146],[1788,2190],[1791,2198],[1820,2179]],[[616,1841],[608,1846],[617,1851]],[[1339,2098],[1325,2116],[1338,2135],[1343,2126],[1355,2130],[1359,2157],[1372,2155],[1366,2173],[1353,2176],[1351,2193],[1376,2172],[1392,2175],[1389,2189],[1408,2186],[1408,2162],[1400,2167],[1392,2153],[1372,2148],[1403,2135],[1381,2129],[1370,2140],[1371,2123],[1333,2114],[1345,2101]],[[161,2181],[152,2184],[155,2193]],[[627,1818],[617,1840],[625,1842],[626,1833],[641,1843],[649,1837],[627,1827]],[[507,1778],[495,1792],[502,1796],[510,1786],[516,1794],[519,1784]],[[484,1785],[477,1789],[483,1794]],[[454,1772],[447,1778],[453,1783],[442,1780],[460,1791]],[[481,1751],[471,1772],[485,1771],[493,1775],[504,1762],[490,1765]],[[502,1742],[496,1747],[488,1756],[496,1759]],[[210,2139],[207,2168],[216,2179]],[[1424,1700],[1413,1707],[1424,1709]],[[392,2136],[378,2147],[389,2152],[384,2172],[403,2176],[411,2158],[403,2163],[405,2142]],[[1456,1671],[1469,1699],[1471,1675]],[[323,2149],[310,2159],[316,2170]],[[1763,2155],[1742,2158],[1756,2168]],[[924,2152],[912,2168],[932,2156]],[[630,2160],[621,2166],[629,2168]],[[2142,2098],[2122,2110],[2114,2107],[2107,2154],[2116,2154],[2117,2145],[2122,2155],[2142,2149],[2152,2164],[2153,2155],[2184,2152],[2175,2140],[2182,2132]],[[107,2151],[108,2160],[128,2164]],[[-55,2140],[-60,2153],[-49,2163],[-47,2144]],[[1490,1668],[1487,1676],[1495,1678]],[[1936,2121],[1920,2125],[1921,2141],[1935,2148],[1931,2161],[1948,2159],[1972,2137]],[[1410,1664],[1395,1670],[1409,1672]],[[1362,1636],[1369,1649],[1371,1641],[1391,1639],[1383,1632],[1371,1634],[1366,1627],[1353,1634],[1356,1647]],[[1403,667],[1396,682],[1382,671],[1368,677],[1343,670],[1354,681],[1340,703],[1353,687],[1368,685],[1336,718],[1316,725],[1305,741],[1270,736],[1248,747],[1249,773],[1260,788],[1277,771],[1288,782],[1278,778],[1280,785],[1297,786],[1293,804],[1268,806],[1280,808],[1291,825],[1276,833],[1279,859],[1268,849],[1272,856],[1245,850],[1244,864],[1228,861],[1227,879],[1220,874],[1222,895],[1201,897],[1200,908],[1224,913],[1237,930],[1248,917],[1237,907],[1259,908],[1279,934],[1266,939],[1265,952],[1275,947],[1293,956],[1300,924],[1308,927],[1305,939],[1318,934],[1317,946],[1308,947],[1315,955],[1316,953],[1316,956],[1335,970],[1333,979],[1325,969],[1331,1002],[1320,1017],[1335,1013],[1346,1035],[1348,1009],[1358,1008],[1343,989],[1356,988],[1361,917],[1418,857],[1434,863],[1439,839],[1432,843],[1455,814],[1466,819],[1464,802],[1480,783],[1498,773],[1533,810],[1543,790],[1557,787],[1548,779],[1563,774],[1547,774],[1542,745],[1532,751],[1500,734],[1497,715],[1488,713],[1494,695],[1481,715],[1473,705],[1453,725],[1422,718],[1417,706],[1405,714],[1402,704],[1415,698],[1406,682],[1418,683],[1412,670],[1405,676]],[[2761,2314],[2757,2324],[2771,2325]],[[634,2129],[624,2148],[635,2138]],[[2757,2220],[2750,2227],[2760,2229]],[[2847,2203],[2849,2219],[2856,2209]],[[173,1974],[137,1993],[139,2004],[119,2025],[109,2060],[125,2077],[123,2081],[148,2086],[159,2073],[178,2078],[178,2105],[128,2117],[145,2141],[164,2117],[179,2116],[190,2081],[205,2086],[215,2054],[190,2068],[177,2054],[181,2033],[168,2045],[152,2030],[152,2029],[155,2013],[197,1999]],[[2288,2104],[2255,2118],[2260,2136],[2276,2141],[2283,2134]],[[2751,2209],[2752,2217],[2758,2210]],[[797,2133],[809,2133],[812,2124],[800,2124]],[[938,2101],[934,2121],[939,2126],[946,2118],[949,2131],[964,2131]],[[871,2120],[866,2126],[876,2128]],[[636,2119],[626,2123],[634,2128]],[[2637,2205],[2640,2214],[2645,2210]],[[1766,2107],[1746,2109],[1775,2126],[1791,2108]],[[2018,2107],[2007,2116],[2012,2125]],[[2083,2112],[2075,2118],[2087,2125]],[[761,2080],[752,2091],[759,2107],[748,2109],[775,2124],[764,2104],[777,2098],[775,2081]],[[114,2102],[97,2105],[97,2112],[123,2120]],[[2449,1651],[2439,1652],[2413,1686],[2405,1699],[2413,1705],[2402,1704],[2406,1717],[2398,1713],[2401,1727],[2384,1735],[2389,1752],[2360,1769],[2383,1763],[2391,1780],[2406,1769],[2425,1775],[2423,1755],[2439,1758],[2458,1730],[2440,1727],[2435,1716],[2443,1708],[2425,1706]],[[-8,2073],[-35,2076],[-28,2095],[-43,2103],[-28,2114],[-27,2097],[-19,2103],[-2,2082]],[[1401,2095],[1389,2108],[1406,2114]],[[2849,2195],[2862,2209],[2864,2202]],[[1733,2101],[1724,2110],[1731,2112]],[[2628,1718],[2628,1729],[2638,1735],[2650,1719]],[[581,2082],[574,2090],[563,2085],[584,2101],[582,2108],[592,2108],[592,2086],[584,2093]],[[2649,2131],[2667,2150],[2675,2132]],[[2335,2054],[2303,2062],[2305,2103],[2326,2068],[2343,2068]],[[2704,1612],[2704,1627],[2692,1624],[2698,1636],[2681,1636],[2686,1659],[2660,1659],[2665,1683],[2642,1675],[2632,1683],[2650,1719],[2660,1697],[2676,1692],[2678,1669],[2696,1662],[2718,1634],[2721,1625]],[[821,2059],[820,2076],[850,2085],[851,2100],[855,2090],[862,2095],[858,2064]],[[2875,2064],[2865,2065],[2872,2084],[2877,2077]],[[108,2078],[90,2080],[91,2096],[92,2090],[106,2098],[115,2086]],[[2880,2060],[2879,2075],[2886,2065]],[[2848,2057],[2842,2068],[2862,2073]],[[2144,2079],[2143,2093],[2158,2081]],[[787,2082],[796,2093],[799,2087]],[[3032,2062],[3028,2069],[3036,2065]],[[3023,2055],[3020,2062],[3032,2062]],[[2562,2018],[2553,2054],[2564,2041],[2572,2034]],[[3077,2035],[3066,2044],[3079,2045]],[[2970,2027],[2961,2036],[2969,2038]],[[598,2058],[596,2068],[616,2082]],[[2605,2014],[2597,2015],[2612,2017]],[[592,2057],[570,2062],[572,2079],[581,2080]],[[2187,2063],[2196,2067],[2211,2042],[2183,2036],[2193,2061]],[[2833,1950],[2834,1958],[2840,1953]],[[2652,1911],[2648,1917],[2656,1920]],[[906,2046],[899,2056],[916,2066]],[[2884,1882],[2874,1885],[2870,1890]],[[845,2039],[826,2049],[853,2057]],[[1390,2043],[1370,2049],[1377,2054]],[[596,2045],[584,2048],[596,2052]],[[2403,2006],[2393,2017],[2395,2030],[2386,2027],[2401,2051],[2420,2009]],[[2919,1764],[2916,1785],[2929,1782],[2934,1792],[2942,1778],[2947,1784],[2955,1777]],[[2918,1724],[2912,1730],[2913,1748],[2919,1739],[2934,1747],[2928,1732],[2919,1736]],[[2343,2032],[2347,2042],[2357,2033]],[[785,2030],[776,2031],[780,2041]],[[806,2014],[790,2023],[800,2040],[811,2023]],[[2899,1648],[2882,1663],[2879,1691]],[[2349,1655],[2338,1671],[2352,1667]],[[1992,2016],[1993,2034],[2003,2029],[1998,2017]],[[603,2018],[591,2021],[594,2028]],[[-16,2001],[-31,2008],[-40,2027]],[[832,2013],[829,2026],[843,2021]],[[201,2014],[191,2022],[197,2025]],[[1459,2013],[1451,2022],[1461,2022]],[[3005,1648],[3001,1661],[3015,1668]],[[1377,2017],[1382,2008],[1375,2008]],[[2462,1606],[2456,1641],[2487,1640],[2472,1635],[2472,1611]],[[1998,2015],[2022,2005],[2000,2005]],[[2529,1609],[2503,1630],[2525,1627]],[[211,2003],[203,2013],[221,2007]],[[1873,2002],[1866,2013],[1871,2009]],[[831,1988],[815,2009],[832,2012]],[[710,1995],[706,2007],[713,2010]],[[2601,1417],[2576,1437],[2577,1456],[2546,1484],[2545,1502],[2486,1572],[2491,1585],[2476,1601],[2499,1588],[2519,1543],[2532,1535],[2544,1544],[2533,1531],[2556,1517],[2595,1443],[2609,1438],[2599,1431]],[[2031,1984],[2027,1998],[2042,1991]],[[1942,1936],[1892,1972],[1874,1964],[1877,1987],[1926,1996],[1926,1971]],[[40,1984],[32,1992],[38,1996]],[[2719,1574],[2712,1582],[2723,1592],[2722,1583],[2734,1582]],[[2782,1471],[2798,1502],[2781,1492],[2771,1499],[2807,1528],[2787,1544],[2767,1531],[2754,1542],[2765,1552],[2763,1565],[2746,1566],[2745,1580],[2754,1583],[2739,1589],[2761,1587],[2805,1543],[2825,1538],[2828,1553],[2851,1564],[2846,1576],[2863,1575],[2872,1564],[2863,1541],[2873,1518],[2894,1503],[2892,1493],[2889,1502],[2872,1505],[2874,1515],[2851,1513],[2823,1475],[2820,1505],[2801,1506],[2808,1496]],[[403,1977],[405,1995],[411,1990]],[[2353,1985],[2346,1990],[2358,1994]],[[237,1941],[190,1961],[202,1969],[208,1958],[214,1966],[208,1979],[226,1970],[233,1993],[235,1970],[247,1960],[230,1965]],[[35,1943],[5,1980],[12,1988]],[[841,1971],[835,1985],[851,1988],[849,1974],[847,1980]],[[28,1977],[26,1988],[33,1985]],[[1665,1568],[1656,1582],[1665,1582]],[[1438,1965],[1415,1971],[1416,1979],[1422,1986],[1436,1979],[1430,1974]],[[2883,1538],[2884,1552],[2894,1544]],[[1696,1579],[1699,1572],[1690,1572]],[[1646,1539],[1640,1547],[1642,1560],[1653,1558],[1649,1566],[1662,1554]],[[1641,1489],[1632,1505],[1639,1528],[1647,1525],[1651,1499],[1647,1532],[1655,1530],[1655,1540],[1661,1529],[1669,1532],[1661,1538],[1668,1544],[1683,1522],[1676,1521],[1679,1498],[1675,1491],[1676,1501],[1651,1491],[1644,1496]],[[849,1960],[849,1974],[858,1973]],[[1630,1471],[1623,1476],[1632,1485]],[[1379,1096],[1374,1113],[1365,1115],[1378,1116]],[[1446,1971],[1457,1962],[1449,1962]],[[2466,1954],[2460,1966],[2480,1970],[2487,1958],[2463,1962]],[[76,1115],[88,1137],[92,1129]],[[1470,1957],[1460,1962],[1470,1965]],[[144,1924],[125,1942],[131,1948],[116,1955],[132,1964],[165,1957]],[[1858,1841],[1860,1851],[1847,1847],[1848,1874],[1829,1891],[1835,1895],[1807,1902],[1810,1921],[1792,1925],[1798,1939],[1783,1936],[1762,1948],[1724,1945],[1758,1961],[1834,1949],[1832,1932],[1848,1920],[1866,1948],[1853,1909],[1867,1899],[1885,1916],[1868,1892],[1874,1883],[1863,1882],[1879,1864],[1862,1868],[1868,1842]],[[118,1100],[117,1109],[103,1106],[105,1123],[109,1115],[125,1116]],[[1051,1045],[1044,1052],[1045,1071],[1070,1069],[1061,1062],[1067,1052]],[[835,1941],[825,1948],[833,1958],[848,1947]],[[2156,985],[2152,999],[2158,998]],[[924,944],[917,945],[920,961]],[[870,1935],[860,1940],[867,1954],[886,1944]],[[894,940],[890,946],[900,947]],[[13,719],[-23,737],[1,739],[14,761],[25,762],[29,742]],[[117,663],[98,681],[86,678],[78,695],[61,694],[58,734],[78,733],[63,707],[92,691],[106,693],[100,684]],[[41,1907],[37,1940],[59,1922]],[[936,1929],[910,1934],[924,1938]],[[836,1919],[834,1926],[820,1924],[835,1935]],[[2574,1904],[2570,1921],[2576,1915],[2576,1925],[2588,1929]],[[243,1913],[236,1917],[243,1929]],[[942,1921],[939,1928],[946,1928]],[[886,1921],[877,1927],[890,1926]],[[835,1857],[823,1869],[832,1871],[832,1887],[822,1896],[854,1888],[846,1905],[838,1899],[851,1922],[858,1899],[863,1905],[887,1894],[857,1890],[869,1862]],[[-14,713],[-10,708],[-22,708]],[[-8,700],[-10,708],[2,709]],[[192,1830],[184,1851],[198,1856],[195,1891],[217,1918],[225,1871],[211,1857],[220,1850],[197,1846],[200,1834]],[[1485,1911],[1483,1917],[1491,1915]],[[-26,688],[-30,696],[-15,689]],[[3195,483],[3199,493],[3212,488]],[[1529,1844],[1517,1850],[1505,1888],[1487,1889],[1480,1903],[1522,1903],[1535,1864]],[[913,1895],[905,1896],[902,1903]],[[3248,565],[3244,574],[3257,576]],[[3267,444],[3264,451],[3278,455]],[[893,1888],[887,1894],[898,1896]],[[337,1864],[324,1870],[337,1872],[337,1886],[346,1865]],[[741,215],[748,223],[743,236],[755,216]],[[291,1863],[303,1884],[317,1881],[324,1866],[310,1875]],[[243,1861],[237,1872],[248,1871]],[[2784,135],[2795,158],[2803,141]],[[1903,1829],[1879,1864],[1888,1862]],[[1012,1851],[1006,1859],[1014,1860]],[[3456,214],[3460,205],[3453,205]],[[872,1838],[860,1839],[889,1853]],[[422,1831],[336,1838],[320,1831],[320,1839],[304,1840],[373,1844],[384,1852],[408,1848]],[[991,1829],[1014,1847],[1014,1834]],[[289,1829],[282,1847],[299,1840],[288,1839]],[[1490,1839],[1488,1846],[1507,1847]],[[3463,168],[3457,175],[3464,178]],[[768,1839],[783,1846],[824,1840]],[[1498,1808],[1489,1809],[1485,1839],[1490,1839],[1499,1839],[1502,1821],[1515,1819]],[[889,1803],[882,1812],[893,1811],[898,1828],[917,1830],[913,1839],[938,1827],[926,1817],[900,1816]],[[3448,154],[3440,157],[3446,162]],[[736,1721],[725,1724],[726,1750],[711,1759],[714,1784],[678,1786],[671,1794],[683,1808],[676,1819],[632,1811],[673,1838],[685,1826],[686,1809],[745,1797],[744,1791],[748,1803],[734,1817],[736,1827],[759,1801],[748,1788],[716,1790],[719,1759],[737,1748],[729,1734]],[[1869,1820],[1859,1828],[1866,1837]],[[3479,124],[3470,130],[3478,132]],[[169,1820],[158,1830],[168,1827],[169,1835],[178,1829]],[[1321,1800],[1305,1824],[1315,1832],[1311,1821],[1327,1812]],[[3491,108],[3479,124],[3481,130]],[[1951,-13],[1943,-10],[1947,-3]],[[1912,1806],[1903,1829],[1913,1822]],[[4097,37],[4091,44],[4075,40],[4065,56],[4097,56]],[[2878,-44],[2862,-9],[2876,-14]],[[4108,32],[4102,45],[4124,40]],[[855,1810],[849,1823],[864,1814]],[[1473,1809],[1469,1823],[1479,1822]],[[155,1814],[169,1820],[159,1809],[176,1804],[160,1804]],[[1778,1775],[1741,1786],[1767,1819],[1772,1811],[1762,1791],[1777,1782]],[[4080,30],[4058,37],[4075,40]],[[4126,10],[4123,26],[4117,18],[4108,24],[4123,33]],[[257,1679],[262,1693],[255,1694],[254,1715],[271,1736],[258,1752],[283,1745],[280,1760],[305,1802],[305,1817],[318,1802],[344,1805],[336,1782],[323,1796],[317,1781],[312,1791],[301,1783],[303,1769],[288,1745],[306,1722],[284,1741],[277,1727],[286,1722],[269,1709],[296,1694],[284,1694],[282,1685],[267,1693]],[[987,1802],[985,1817],[994,1815]],[[1120,1804],[1114,1813],[1130,1815]],[[4151,-22],[4131,-1],[4133,8],[4151,-4]],[[2208,1801],[2200,1813],[2212,1806]],[[365,-60],[355,-50],[333,-58],[341,-44],[366,-53]],[[608,1797],[625,1806],[620,1810],[635,1805]],[[2950,371],[2948,412],[2905,469],[2897,468],[2898,488],[2915,502],[2906,532],[2895,536],[2871,585],[2880,591],[2857,618],[2864,621],[2856,627],[2859,640],[2843,639],[2845,650],[2836,653],[2846,674],[2836,673],[2829,687],[2813,681],[2809,688],[2820,696],[2813,703],[2789,693],[2784,725],[2801,731],[2791,730],[2795,741],[2778,756],[2772,785],[2743,834],[2746,852],[2731,860],[2736,871],[2727,869],[2727,883],[2705,903],[2675,966],[2677,980],[2659,1009],[2659,1028],[2668,1034],[2692,1012],[2692,1004],[2673,1006],[2678,980],[2686,980],[2682,992],[2695,1005],[2699,979],[2714,968],[2717,938],[2725,939],[2734,916],[2719,909],[2733,914],[2730,905],[2740,909],[2744,899],[2724,899],[2739,875],[2754,861],[2772,860],[2774,850],[2762,850],[2766,834],[2799,830],[2842,740],[2866,716],[2861,709],[2888,689],[2883,673],[2893,681],[2913,648],[2908,641],[2916,645],[2912,631],[2919,636],[2927,627],[2927,607],[2945,606],[2947,596],[2930,583],[2951,585],[2947,570],[2957,563],[2950,559],[2966,551],[2960,542],[2991,531],[2987,517],[3001,493],[2995,471],[3009,451],[2996,440],[2997,428],[2969,415],[2971,391]],[[853,1768],[847,1778],[858,1802],[878,1805],[856,1793]],[[1913,1792],[1914,1805],[1927,1803],[1920,1794]],[[1188,590],[1175,599],[1160,593],[1158,604],[1172,605],[1169,631],[1140,648],[1126,702],[1130,748],[1111,782],[1102,780],[1089,800],[1099,798],[1091,826],[1072,843],[1060,829],[1042,851],[1056,863],[1055,892],[1041,902],[1056,902],[1062,917],[1061,933],[1048,942],[1053,953],[1038,950],[1048,996],[1040,993],[1035,1004],[1021,989],[1009,994],[1027,1011],[1017,1011],[1016,1020],[1025,1022],[1020,1038],[1028,1047],[1012,1056],[997,1083],[990,1079],[997,1075],[996,1042],[987,1040],[993,1025],[981,1031],[987,1078],[979,1066],[972,1075],[984,1081],[986,1093],[978,1091],[986,1099],[977,1105],[973,1097],[968,1106],[964,1112],[960,1085],[946,1099],[946,1117],[921,1108],[930,1107],[929,1097],[918,1082],[939,1068],[946,1050],[939,1039],[929,1043],[934,1053],[923,1068],[903,1063],[907,1092],[879,1097],[896,1107],[904,1099],[899,1108],[920,1131],[918,1119],[940,1119],[960,1132],[969,1122],[980,1137],[988,1116],[999,1132],[992,1136],[999,1134],[1013,1161],[991,1186],[1002,1179],[1006,1185],[1001,1231],[988,1228],[996,1214],[986,1211],[979,1216],[987,1224],[977,1222],[986,1229],[973,1236],[967,1223],[959,1235],[946,1222],[935,1232],[940,1237],[928,1235],[934,1245],[956,1259],[955,1246],[963,1246],[960,1257],[973,1254],[974,1264],[985,1259],[989,1269],[999,1250],[1015,1249],[1012,1240],[1021,1254],[1018,1275],[1056,1250],[1058,1257],[1070,1244],[1058,1224],[1048,1233],[1017,1225],[1024,1212],[1014,1213],[1010,1202],[1019,1182],[1026,1192],[1052,1184],[1037,1212],[1058,1204],[1071,1215],[1063,1219],[1077,1217],[1075,1228],[1101,1225],[1098,1202],[1090,1207],[1097,1186],[1082,1168],[1083,1151],[1061,1142],[1040,1161],[1041,1144],[1034,1148],[1042,1116],[1054,1111],[1033,1086],[1060,1085],[1060,1101],[1087,1069],[1076,1061],[1092,1051],[1087,1019],[1078,1021],[1088,1050],[1071,1060],[1080,1069],[1064,1080],[1031,1082],[1029,1051],[1039,1037],[1077,1041],[1077,1034],[1052,1033],[1067,1005],[1069,961],[1080,980],[1103,992],[1135,963],[1103,965],[1120,950],[1109,940],[1131,929],[1150,936],[1129,919],[1148,918],[1143,910],[1151,904],[1164,904],[1174,916],[1170,899],[1155,895],[1137,907],[1124,896],[1117,899],[1125,910],[1116,911],[1124,919],[1117,925],[1101,922],[1103,929],[1089,929],[1091,938],[1071,918],[1083,902],[1101,898],[1088,893],[1104,890],[1104,868],[1075,904],[1066,902],[1063,882],[1071,856],[1081,851],[1104,858],[1142,851],[1152,867],[1166,868],[1147,846],[1084,847],[1104,831],[1103,820],[1122,818],[1136,802],[1148,807],[1150,798],[1132,800],[1113,789],[1136,754],[1134,706],[1151,678],[1149,652],[1176,635],[1175,614],[1188,608]],[[3146,-34],[3177,-19],[3113,105],[3090,83],[3055,112],[3050,133],[3041,132],[3042,149],[3058,128],[3076,119],[3073,111],[3085,108],[3098,139],[3029,234],[3015,278],[2973,337],[2961,341],[2966,347],[2950,371],[2966,364],[2987,321],[3001,331],[2989,359],[3011,366],[3025,345],[3012,327],[3037,328],[3050,312],[3057,316],[3051,305],[3068,305],[3055,280],[3074,300],[3083,269],[3069,242],[3087,237],[3088,225],[3108,231],[3110,220],[3127,222],[3133,201],[3148,191],[3145,183],[3159,168],[3133,153],[3143,134],[3155,131],[3149,121],[3167,116],[3182,134],[3201,94],[3193,88],[3203,89],[3203,72],[3211,73],[3202,57],[3215,59],[3219,49],[3208,32],[3224,19],[3212,13],[3214,-6],[3200,-1],[3178,29],[3177,52],[3169,53],[3163,73],[3150,76],[3151,97],[3137,100],[3116,147],[3104,153],[3077,220],[3057,218],[3168,26],[3188,-28]],[[150,1791],[148,1800],[160,1797]],[[2093,1027],[2107,1035],[2108,1042],[2098,1041],[2114,1062],[2101,1070],[2118,1075],[2128,1090],[2118,1102],[2128,1103],[2126,1132],[2108,1155],[2097,1139],[2081,1147],[2076,1135],[2068,1144],[2078,1158],[2079,1185],[2064,1196],[2070,1210],[2062,1222],[2055,1217],[2061,1211],[2046,1203],[2039,1222],[2026,1204],[2021,1222],[2009,1217],[2005,1228],[1993,1208],[1995,1223],[1986,1219],[1981,1231],[1951,1230],[1958,1249],[1944,1256],[1941,1245],[1919,1251],[1924,1261],[1911,1268],[1902,1296],[1914,1301],[1913,1312],[1933,1320],[1935,1311],[1950,1312],[1957,1325],[1971,1325],[1988,1301],[1992,1309],[1999,1299],[1993,1286],[2000,1291],[2001,1277],[2017,1289],[2021,1311],[2033,1274],[2023,1274],[2061,1269],[2049,1261],[2053,1253],[2076,1230],[2091,1228],[2100,1210],[2086,1185],[2091,1192],[2090,1182],[2090,1176],[2129,1172],[2129,1133],[2131,1151],[2138,1133],[2154,1128],[2152,1138],[2166,1136],[2155,1134],[2168,1128],[2156,1110],[2151,1121],[2141,1118],[2152,1092],[2181,1108],[2199,1104],[2150,1088],[2140,1058],[2144,1025],[2162,1018],[2164,1024],[2177,1007],[2188,1040],[2198,1041],[2207,1022],[2201,1010],[2215,1010],[2218,1027],[2223,1012],[2233,1019],[2238,1008],[2242,1029],[2255,1029],[2242,1016],[2251,1006],[2226,995],[2225,967],[2214,979],[2198,972],[2199,981],[2174,1006],[2160,992],[2166,1012],[2134,996],[2127,1007],[2138,1026],[2124,1014],[2132,1027],[2108,1024],[2096,1005]],[[930,1760],[927,1767],[925,1799],[932,1788],[932,1796],[947,1789],[936,1789],[937,1772]],[[133,1774],[124,1785],[110,1775],[120,1799]],[[1334,70],[1344,87],[1335,100],[1345,106],[1333,117],[1319,106],[1314,111],[1324,121],[1313,123],[1312,136],[1327,185],[1318,181],[1317,194],[1306,184],[1303,207],[1290,204],[1300,202],[1296,197],[1277,203],[1267,196],[1265,209],[1253,212],[1226,204],[1238,221],[1287,217],[1291,236],[1298,236],[1279,248],[1263,250],[1261,243],[1228,276],[1218,271],[1223,280],[1195,308],[1190,289],[1181,287],[1165,311],[1169,313],[1176,301],[1211,328],[1211,361],[1217,328],[1230,326],[1239,304],[1251,312],[1249,333],[1237,339],[1248,347],[1238,359],[1256,369],[1235,441],[1235,483],[1248,471],[1236,472],[1241,458],[1253,464],[1243,453],[1253,409],[1269,398],[1282,413],[1289,410],[1280,374],[1275,381],[1257,377],[1265,364],[1258,353],[1261,305],[1277,304],[1282,321],[1297,327],[1292,306],[1309,297],[1323,308],[1325,304],[1315,292],[1292,301],[1284,293],[1282,310],[1278,292],[1252,296],[1257,277],[1276,264],[1297,278],[1326,269],[1335,258],[1332,237],[1347,239],[1355,259],[1363,248],[1388,257],[1386,227],[1371,211],[1346,209],[1400,175],[1389,170],[1393,163],[1360,158],[1365,147],[1356,142],[1355,123],[1373,126],[1365,122],[1371,108],[1406,110],[1378,96],[1381,75]],[[2977,660],[2964,663],[2969,670],[2952,682],[2936,663],[2925,672],[2928,690],[2920,687],[2904,708],[2898,703],[2898,716],[2874,739],[2862,733],[2870,718],[2854,731],[2861,754],[2855,779],[2873,786],[2832,839],[2816,841],[2808,889],[2827,861],[2831,867],[2839,860],[2840,868],[2840,845],[2853,842],[2851,825],[2890,789],[2894,772],[2918,769],[2932,787],[2950,785],[2945,778],[2956,763],[2968,762],[2977,748],[2968,744],[2976,735],[2969,729],[2988,716],[2978,694],[2993,666],[2982,674]],[[167,1581],[153,1565],[163,1541],[156,1537],[159,1514],[144,1516],[144,1493],[153,1492],[147,1490],[154,1481],[144,1461],[145,1412],[134,1421],[128,1408],[118,1415],[123,1403],[103,1418],[111,1418],[109,1427],[95,1422],[118,1459],[98,1441],[90,1444],[91,1433],[58,1437],[78,1476],[122,1496],[118,1509],[109,1496],[94,1494],[96,1504],[110,1508],[109,1523],[143,1520],[142,1531],[128,1534],[130,1547],[116,1536],[106,1541],[142,1559],[122,1586],[131,1587],[122,1601],[138,1604],[160,1597],[165,1586],[172,1593],[206,1590],[202,1574],[176,1570],[202,1524],[202,1508],[190,1507],[198,1495],[169,1486],[168,1498],[183,1496],[187,1506],[166,1511],[170,1548],[161,1562],[172,1577]],[[1216,1764],[1212,1773],[1165,1776],[1169,1789],[1214,1776],[1211,1784],[1229,1790],[1233,1769]],[[2839,146],[2814,168],[2814,157],[2795,158],[2794,165],[2781,161],[2786,147],[2772,146],[2774,158],[2761,161],[2753,189],[2765,198],[2763,214],[2755,215],[2762,230],[2752,226],[2750,197],[2733,188],[2728,215],[2736,218],[2723,223],[2715,248],[2718,273],[2725,269],[2720,297],[2729,305],[2716,313],[2746,314],[2758,271],[2786,296],[2784,282],[2761,268],[2780,251],[2796,203],[2831,187],[2829,175],[2845,163]],[[2227,672],[2220,697],[2210,690],[2188,696],[2222,701],[2201,731],[2192,723],[2182,743],[2172,742],[2175,750],[2184,745],[2182,753],[2163,756],[2187,765],[2188,759],[2196,773],[2194,756],[2224,761],[2234,783],[2220,802],[2224,817],[2232,822],[2258,837],[2274,817],[2259,818],[2259,830],[2232,802],[2240,807],[2245,780],[2238,756],[2247,749],[2265,757],[2274,766],[2263,779],[2270,795],[2288,795],[2299,781],[2307,728],[2331,712],[2286,696],[2274,720],[2242,709],[2234,717],[2221,708],[2230,689],[2244,683]],[[2255,1729],[2260,1740],[2235,1762],[2242,1773],[2231,1783],[2261,1768],[2260,1761],[2265,1734]],[[311,574],[321,593],[296,589],[291,604],[306,616],[285,620],[237,643],[230,666],[280,646],[278,655],[296,656],[305,651],[300,634],[329,627],[417,674],[429,660],[427,631],[436,634],[414,620],[400,631],[391,608],[369,616],[367,604],[391,586],[368,590],[368,580],[341,585]],[[1782,1764],[1777,1782],[1786,1776]],[[26,274],[48,274],[42,291],[54,277],[88,310],[75,326],[52,327],[49,318],[50,328],[37,324],[25,337],[75,336],[90,311],[113,325],[126,299],[104,305],[77,276],[84,259],[93,262],[99,253],[87,229],[69,217],[88,209],[116,231],[122,183],[123,164],[138,156],[119,158],[128,129],[95,122],[87,133],[106,147],[101,164],[65,176],[58,190],[63,211],[48,214],[69,241],[67,271],[42,254],[38,234],[45,226],[20,240],[33,267]],[[1731,568],[1712,595],[1700,587],[1701,598],[1715,598],[1725,627],[1705,640],[1678,631],[1692,579],[1665,597],[1666,630],[1658,617],[1637,617],[1656,619],[1656,639],[1668,653],[1649,643],[1649,672],[1619,693],[1605,676],[1585,686],[1577,699],[1587,718],[1546,743],[1576,734],[1582,742],[1624,741],[1629,718],[1641,716],[1644,701],[1659,691],[1649,685],[1682,675],[1692,658],[1708,668],[1694,655],[1722,634],[1728,640]],[[2565,638],[2545,677],[2518,697],[2521,710],[2503,714],[2489,751],[2481,744],[2462,775],[2447,778],[2483,781],[2494,760],[2515,761],[2524,777],[2540,773],[2547,807],[2558,806],[2550,800],[2551,761],[2565,753],[2574,757],[2566,759],[2570,767],[2605,757],[2565,744],[2561,727],[2571,695],[2578,689],[2556,678],[2584,651],[2566,655],[2572,646]],[[405,1614],[405,1626],[385,1630],[379,1661],[352,1663],[354,1643],[316,1628],[310,1634],[303,1618],[297,1624],[307,1635],[297,1641],[297,1663],[305,1659],[313,1669],[328,1653],[340,1657],[341,1669],[330,1670],[335,1681],[355,1672],[354,1696],[391,1702],[397,1712],[425,1685],[433,1744],[436,1700],[459,1704],[455,1694],[429,1684],[441,1668],[439,1650],[436,1656],[423,1633],[427,1626]],[[1112,1755],[1126,1770],[1138,1763]],[[996,247],[984,256],[992,288],[1012,305],[989,320],[957,316],[956,324],[969,323],[972,341],[1011,323],[1021,328],[1022,345],[1006,359],[998,355],[1002,369],[995,371],[1049,390],[1049,426],[1032,436],[1041,440],[1034,451],[1046,448],[1041,436],[1050,428],[1064,433],[1066,398],[1082,396],[1088,407],[1095,400],[1083,387],[1060,387],[1038,352],[1024,351],[1043,348],[1051,313],[1039,289],[1019,275],[1019,254]],[[1755,1761],[1751,1767],[1771,1769]],[[687,1736],[666,1747],[657,1739],[645,1759],[659,1767],[686,1748]],[[641,457],[647,443],[641,441],[632,446],[627,471],[592,475],[574,453],[576,442],[560,433],[567,428],[560,429],[559,406],[574,373],[559,393],[554,370],[533,390],[524,387],[517,395],[527,415],[493,447],[500,413],[484,424],[482,445],[451,452],[450,465],[438,462],[412,482],[427,472],[433,479],[435,468],[455,468],[478,451],[490,457],[510,448],[521,467],[542,444],[566,449],[593,481],[625,479],[629,498],[609,500],[598,517],[623,519],[631,500],[643,504],[699,481],[676,472],[669,483],[649,487],[631,478],[638,463],[654,461]],[[843,1382],[830,1389],[833,1395],[787,1395],[773,1418],[751,1418],[783,1444],[789,1460],[778,1464],[797,1473],[836,1438],[858,1441],[881,1472],[876,1484],[884,1485],[889,1503],[896,1493],[890,1471],[913,1474],[913,1467],[878,1453],[877,1442],[860,1438],[856,1429],[865,1432],[862,1422],[856,1428],[853,1422],[836,1429],[850,1415],[877,1408],[865,1400],[855,1405],[860,1396],[853,1402]],[[1234,1694],[1231,1738],[1200,1740],[1206,1749],[1215,1744],[1219,1758],[1242,1740],[1255,1750],[1257,1736],[1247,1729],[1255,1711]],[[1098,1743],[1097,1752],[1112,1755],[1111,1746]],[[537,1211],[536,1221],[507,1233],[510,1268],[516,1256],[560,1255],[564,1285],[595,1274],[608,1320],[623,1326],[632,1309],[644,1313],[671,1340],[674,1362],[691,1370],[696,1389],[694,1369],[676,1359],[674,1340],[648,1312],[662,1304],[665,1289],[671,1323],[693,1350],[697,1313],[722,1299],[698,1268],[699,1282],[687,1280],[673,1271],[680,1258],[670,1265],[659,1252],[664,1279],[656,1300],[622,1300],[605,1279],[606,1267],[580,1263],[588,1267],[575,1273],[578,1263],[571,1264],[568,1273],[565,1253],[537,1229],[538,1218]],[[2986,186],[2977,205],[2984,218],[2968,222],[2952,246],[2941,242],[2940,258],[2949,249],[2955,262],[2933,281],[2915,274],[2912,255],[2901,310],[2915,323],[2929,312],[2928,333],[2935,337],[2956,317],[2973,285],[2967,259],[2988,260],[2985,248],[2998,237],[3016,191]],[[1272,1141],[1238,1246],[1242,1256],[1230,1260],[1222,1243],[1227,1230],[1219,1240],[1211,1235],[1210,1213],[1199,1232],[1212,1278],[1205,1299],[1220,1285],[1222,1264],[1241,1296],[1225,1313],[1233,1327],[1213,1334],[1233,1352],[1237,1373],[1256,1305],[1244,1258],[1265,1255],[1274,1264],[1269,1225],[1273,1218],[1273,1223],[1280,1218],[1274,1216],[1283,1201],[1274,1169],[1282,1145]],[[2318,831],[2303,844],[2319,855],[2309,859],[2314,866],[2299,869],[2304,882],[2317,882],[2302,906],[2285,911],[2265,882],[2255,883],[2259,891],[2249,895],[2259,906],[2246,911],[2263,925],[2257,933],[2264,942],[2252,947],[2244,938],[2259,975],[2269,975],[2264,950],[2294,948],[2295,942],[2271,945],[2274,934],[2307,926],[2322,917],[2325,901],[2346,894],[2328,860],[2342,864],[2363,852],[2359,845],[2350,854],[2350,840],[2324,846]],[[1153,988],[1135,1001],[1158,1017],[1142,1018],[1144,1043],[1136,1050],[1125,1045],[1121,1009],[1104,1009],[1095,1019],[1108,1024],[1101,1057],[1110,1055],[1115,1083],[1129,1064],[1141,1070],[1140,1079],[1154,1078],[1157,1089],[1173,1085],[1186,1068],[1161,1064],[1158,1074],[1156,1055],[1142,1050],[1150,1046],[1148,1032],[1199,1041],[1187,1024],[1194,1018],[1204,1028],[1203,1012],[1194,1010],[1204,1008]],[[1071,1731],[1071,1748],[1081,1735]],[[603,1735],[591,1738],[602,1746]],[[388,1705],[383,1715],[362,1715],[371,1725],[359,1733],[347,1722],[332,1725],[352,1735],[353,1744],[365,1737],[367,1745],[390,1746],[402,1726],[386,1725]],[[1125,1738],[1126,1745],[1132,1740]],[[3110,430],[3099,467],[3083,477],[3084,492],[3040,552],[3045,563],[3037,560],[3040,566],[3032,564],[3020,586],[3009,588],[3005,611],[2989,627],[2998,627],[3013,605],[3014,618],[3028,618],[3015,604],[3025,595],[3013,603],[3021,588],[3040,574],[3039,585],[3051,581],[3043,570],[3068,550],[3071,535],[3083,539],[3095,505],[3152,433],[3129,439]],[[1077,191],[1034,219],[1079,221],[1078,248],[1086,244],[1102,280],[1107,258],[1132,240],[1163,262],[1180,260],[1164,253],[1179,238],[1188,208],[1200,212],[1188,201],[1124,224],[1110,240],[1100,224],[1081,221]],[[1196,1616],[1189,1648],[1182,1648],[1198,1669],[1188,1680],[1169,1673],[1174,1687],[1166,1692],[1179,1695],[1173,1737],[1188,1743],[1196,1711],[1216,1702],[1222,1713],[1222,1690],[1204,1685],[1201,1669],[1229,1668],[1239,1658],[1249,1669],[1236,1639],[1220,1640]],[[923,30],[897,57],[880,47],[883,61],[913,78],[893,102],[886,77],[868,83],[871,97],[856,135],[846,143],[827,133],[826,159],[843,154],[853,161],[853,148],[879,146],[878,129],[892,114],[902,133],[919,100],[951,82],[942,71],[920,76],[903,63],[925,40]],[[2506,461],[2480,548],[2474,543],[2479,555],[2471,573],[2462,574],[2468,583],[2451,633],[2471,612],[2463,611],[2464,601],[2476,606],[2472,584],[2484,543],[2500,538],[2498,528],[2489,531],[2502,519],[2502,503],[2519,504],[2517,521],[2568,524],[2574,539],[2599,534],[2605,547],[2619,548],[2606,531],[2659,501],[2673,481],[2678,473],[2671,471],[2660,494],[2595,522],[2523,506],[2534,482],[2511,488]],[[346,1550],[368,1562],[368,1573],[354,1578],[348,1583],[364,1583],[365,1599],[387,1568],[437,1601],[447,1621],[441,1645],[468,1635],[474,1642],[473,1634],[489,1630],[490,1641],[495,1628],[510,1635],[507,1624],[468,1611],[442,1560],[404,1575],[374,1552]],[[990,1717],[956,1726],[924,1722],[933,1733],[947,1726],[951,1734],[991,1732]],[[421,133],[403,137],[392,157],[398,163],[382,167],[378,182],[390,243],[418,218],[405,202],[435,185],[432,167],[445,145],[429,144]],[[872,940],[861,971],[843,961],[843,971],[828,973],[848,1009],[843,1021],[812,1034],[806,1026],[788,1044],[843,1026],[860,1004],[877,1013],[884,1003],[896,1004],[910,990],[901,986],[912,968],[942,971],[954,1023],[970,1015],[955,1006],[947,972],[958,971],[973,994],[985,989],[961,969],[968,959],[991,960],[983,955],[992,945],[978,954],[962,950],[944,964],[912,961],[914,952],[901,949],[899,959],[899,960],[910,964],[899,968],[890,997],[861,1001],[862,990],[871,962],[886,956],[875,953]],[[1583,1720],[1581,1727],[1589,1724]],[[790,1686],[764,1687],[780,1693],[781,1704],[739,1720],[776,1723],[790,1704]],[[1171,1708],[1157,1719],[1170,1720]],[[842,1665],[836,1690],[854,1681],[854,1672],[869,1701],[866,1716],[893,1718],[877,1705],[880,1684],[855,1669]],[[189,1709],[178,1714],[186,1717]],[[2172,571],[2171,581],[2159,577],[2181,589],[2161,601],[2174,627],[2166,631],[2172,633],[2160,669],[2196,673],[2192,668],[2204,666],[2211,652],[2239,664],[2228,635],[2213,633],[2216,624],[2195,615],[2195,607],[2200,600],[2184,598],[2200,577],[2190,584]],[[2249,13],[2249,41],[2220,23],[2230,38],[2226,67],[2247,59],[2260,77],[2229,89],[2224,95],[2233,102],[2229,94],[2239,90],[2269,93],[2290,109],[2265,106],[2249,114],[2261,118],[2265,109],[2292,116],[2317,75],[2327,74],[2325,67],[2269,61],[2256,47],[2261,33]],[[265,1518],[265,1536],[284,1545],[269,1543],[282,1570],[266,1551],[265,1578],[250,1572],[248,1555],[240,1559],[236,1547],[232,1555],[222,1536],[218,1544],[210,1529],[200,1537],[257,1579],[241,1582],[243,1600],[247,1606],[226,1620],[233,1625],[253,1615],[260,1629],[271,1587],[309,1582],[299,1600],[305,1603],[332,1588],[314,1567],[298,1573],[283,1532],[272,1533]],[[3244,1077],[3196,1127],[3191,1111],[3184,1126],[3163,1125],[3168,1139],[3158,1138],[3160,1157],[3123,1158],[3121,1173],[3113,1168],[3108,1176],[3130,1172],[3135,1183],[3142,1177],[3140,1203],[3162,1203],[3189,1144],[3217,1139],[3208,1121],[3231,1107]],[[313,1688],[303,1705],[313,1712]],[[948,1649],[951,1665],[923,1664],[915,1687],[934,1683],[955,1710],[966,1704],[956,1691],[959,1684],[971,1688],[962,1672],[976,1651]],[[499,1697],[503,1710],[513,1707]],[[46,1691],[49,1706],[55,1694]],[[2461,986],[2453,997],[2436,990],[2425,1007],[2408,1010],[2391,994],[2378,998],[2376,989],[2356,1004],[2348,995],[2350,1010],[2333,1015],[2361,1022],[2362,1011],[2353,1012],[2361,1005],[2372,1015],[2369,1026],[2391,1017],[2379,1028],[2385,1033],[2410,1019],[2417,1028],[2405,1046],[2410,1055],[2420,1048],[2418,1083],[2438,1078],[2421,1073],[2431,1050],[2425,1045],[2432,1031],[2451,1035],[2471,1026],[2449,1022]],[[1643,1696],[1646,1704],[1653,1700]],[[-29,90],[-35,97],[-5,116],[-24,153],[-10,150],[-11,141],[1,156],[10,153],[9,161],[18,156],[18,171],[32,180],[26,184],[45,175],[36,161],[41,151],[16,132],[18,93],[3,63],[-9,87],[-22,88],[-20,79]],[[104,1663],[109,1686],[132,1702],[139,1702],[134,1694],[151,1699],[157,1686],[131,1679],[140,1689],[113,1677]],[[1602,1691],[1600,1699],[1616,1702]],[[1044,1691],[1037,1699],[1046,1701]],[[2230,452],[2222,456],[2221,504],[2205,509],[2194,499],[2188,509],[2155,507],[2131,489],[2143,468],[2132,459],[2122,474],[2113,468],[2121,490],[2089,468],[2056,482],[2069,487],[2072,499],[2070,485],[2095,490],[2104,519],[2119,492],[2140,497],[2150,510],[2146,521],[2163,538],[2215,508],[2223,529],[2232,514],[2225,517]],[[795,379],[779,388],[764,415],[751,405],[743,410],[749,388],[724,395],[732,400],[725,406],[746,418],[712,431],[729,430],[723,459],[730,462],[706,480],[704,471],[703,481],[718,491],[720,479],[734,475],[732,462],[772,449],[785,432],[806,433],[795,428],[829,403],[805,408],[780,432],[766,417]],[[313,1670],[317,1685],[332,1699],[341,1694],[325,1691],[324,1676]],[[1242,2351],[1258,2349],[1258,2338],[1248,2344],[1240,2340],[1234,2349],[1210,2341],[1185,2345],[1201,2347],[1208,2361],[1212,2356],[1212,2410],[1206,2421],[1198,2419],[1198,2431],[1244,2456],[1251,2443],[1246,2449],[1244,2438],[1225,2434],[1217,2421],[1245,2420],[1245,2413],[1261,2423],[1259,2404],[1246,2404],[1240,2391],[1266,2378],[1248,2366],[1243,2384],[1219,2375],[1218,2349],[1227,2358]],[[2841,1275],[2823,1294],[2823,1311],[2810,1311],[2780,1335],[2758,1332],[2771,1335],[2758,1338],[2765,1359],[2767,1342],[2774,1350],[2782,1342],[2777,1336],[2787,1343],[2776,1354],[2777,1368],[2765,1369],[2769,1385],[2755,1378],[2743,1384],[2750,1395],[2772,1388],[2805,1342],[2813,1342],[2821,1361],[2832,1361],[2827,1341],[2845,1305]],[[2084,1590],[2065,1593],[2063,1608],[2049,1625],[2048,1616],[2027,1629],[2029,1638],[1992,1638],[1980,1655],[2001,1646],[1978,1657],[1959,1682],[1974,1689],[1976,1676],[1991,1674],[1983,1663],[1998,1652],[2027,1645],[2028,1651],[2069,1604],[2095,1601]],[[1561,1659],[1545,1678],[1548,1689],[1563,1670]],[[2568,825],[2553,828],[2545,841],[2533,839],[2515,863],[2519,855],[2509,854],[2498,864],[2508,843],[2491,863],[2481,867],[2477,858],[2468,873],[2466,893],[2478,883],[2489,898],[2465,936],[2473,937],[2462,959],[2470,960],[2477,946],[2485,952],[2486,938],[2502,941],[2485,918],[2502,905],[2497,894],[2509,894],[2507,883],[2527,873],[2536,855],[2545,858],[2546,847],[2559,855],[2552,842]],[[1184,1491],[1173,1496],[1169,1535],[1152,1557],[1162,1562],[1160,1577],[1146,1587],[1122,1586],[1134,1594],[1127,1606],[1142,1592],[1155,1599],[1162,1587],[1196,1615],[1201,1604],[1218,1603],[1176,1566],[1191,1539],[1184,1524],[1196,1522],[1203,1535],[1206,1520],[1183,1517],[1196,1502]],[[699,1597],[705,1617],[723,1634],[736,1677],[751,1682],[737,1672],[727,1634]],[[1481,180],[1458,191],[1430,188],[1441,220],[1425,233],[1400,233],[1413,242],[1409,258],[1424,235],[1449,244],[1447,263],[1437,268],[1464,269],[1464,288],[1487,283],[1465,249],[1466,230],[1489,217],[1476,220],[1479,203],[1476,216],[1466,203],[1482,192]],[[1918,1671],[1892,1674],[1905,1681]],[[1942,1654],[1923,1666],[1941,1664],[1948,1676]],[[1956,1325],[1938,1331],[1944,1351],[1937,1361],[1954,1367],[1937,1385],[1931,1381],[1925,1338],[1913,1361],[1915,1379],[1909,1352],[1900,1396],[1889,1396],[1886,1408],[1895,1409],[1889,1415],[1908,1407],[1917,1431],[1935,1441],[1922,1409],[1940,1417],[1951,1406],[1939,1407],[1947,1396],[1941,1395],[1965,1372],[1946,1341]],[[267,176],[244,183],[234,197],[207,190],[210,202],[198,212],[208,208],[216,221],[193,216],[196,234],[164,236],[158,222],[150,231],[176,242],[168,248],[174,253],[189,236],[224,253],[229,232],[254,253],[265,237],[247,222],[248,194],[261,182],[271,187]],[[2501,1385],[2492,1399],[2500,1402],[2490,1402],[2464,1444],[2448,1447],[2443,1468],[2404,1480],[2398,1498],[2414,1486],[2428,1497],[2439,1493],[2466,1446],[2483,1454],[2518,1427],[2517,1415],[2527,1412]],[[1820,1649],[1809,1669],[1819,1665]],[[783,213],[740,250],[734,249],[743,236],[733,248],[723,234],[685,237],[679,246],[692,244],[693,257],[708,261],[698,279],[706,288],[695,298],[708,312],[719,315],[706,293],[721,276],[740,293],[740,278],[722,275],[738,255],[760,260],[762,252],[752,250],[764,236],[783,233],[787,241],[775,239],[777,246],[791,241]],[[395,265],[380,267],[374,291],[398,349],[408,351],[406,354],[432,363],[427,343],[421,348],[413,336],[424,335],[417,311],[443,314],[440,296],[395,297],[393,281],[382,278]],[[1113,1647],[1115,1662],[1121,1648]],[[1972,1604],[1950,1635],[1948,1657]],[[1802,1645],[1794,1653],[1804,1656]],[[2657,6],[2656,17],[2650,9],[2643,16],[2683,49],[2616,148],[2611,171],[2628,158],[2627,145],[2695,52],[2690,44],[2704,17]],[[1981,214],[1969,253],[1982,318],[2004,341],[2003,328],[1981,304],[2008,251],[2031,232],[2010,222],[1991,225]],[[1056,1619],[1029,1639],[1051,1639],[1048,1652],[1060,1649],[1055,1634],[1063,1626]],[[3784,13],[3784,30],[3772,31],[3780,40],[3769,45],[3790,77],[3774,82],[3775,93],[3781,94],[3778,84],[3792,88],[3809,104],[3796,99],[3793,108],[3757,114],[3763,120],[3753,126],[3734,119],[3719,140],[3738,142],[3817,103],[3804,94],[3792,55],[3809,26],[3793,22]],[[74,1632],[74,1650],[79,1638],[84,1637]],[[1580,1631],[1569,1649],[1580,1649]],[[896,319],[886,330],[879,326],[880,340],[863,346],[875,374],[844,385],[836,397],[868,397],[876,385],[895,391],[885,394],[898,404],[896,381],[918,383],[931,373],[932,358],[958,352],[944,345],[903,374],[883,376],[892,365],[883,353],[896,323],[909,346],[905,321]],[[1808,1631],[1820,1649],[1826,1634]],[[1141,1638],[1137,1647],[1148,1642]],[[510,1635],[514,1647],[521,1641]],[[2794,975],[2769,992],[2751,1038],[2741,1038],[2750,1041],[2737,1058],[2743,1069],[2734,1069],[2741,1075],[2734,1084],[2724,1078],[2729,1085],[2715,1088],[2717,1095],[2711,1089],[2702,1119],[2659,1169],[2665,1177],[2717,1122],[2741,1126],[2719,1106],[2739,1088],[2752,1047],[2765,1035],[2771,995]],[[2328,1017],[2313,1042],[2319,1040],[2326,1066],[2308,1102],[2331,1096],[2343,1074],[2353,1087],[2363,1059],[2372,1062],[2387,1040],[2363,1035],[2340,1058],[2327,1034],[2348,1043],[2329,1029]],[[2949,1116],[2877,1194],[2875,1225],[2868,1223],[2854,1252],[2865,1236],[2878,1239],[2895,1228],[2889,1203],[2906,1197],[2908,1193],[2916,1197],[2922,1185],[2914,1180],[2929,1145],[2952,1130]],[[2021,960],[2006,962],[2006,985],[2017,979],[2049,1021],[2070,1015],[2086,980],[2049,983],[2050,974],[2043,979]],[[1087,483],[1075,493],[1062,487],[1062,508],[1078,513],[1077,540],[1095,533],[1101,577],[1116,579],[1091,610],[1105,619],[1130,590],[1103,562],[1105,519],[1092,517]],[[829,1622],[804,1634],[817,1638],[833,1626],[865,1639],[853,1623]],[[1624,-30],[1611,-1],[1634,14],[1637,46],[1625,50],[1615,18],[1605,15],[1615,35],[1606,38],[1609,59],[1627,57],[1620,76],[1630,54],[1666,40],[1658,31],[1677,13],[1667,10],[1652,36],[1641,36],[1650,23],[1638,-19]],[[-26,1614],[-41,1625],[-24,1638]],[[96,1624],[86,1637],[112,1634],[97,1632]],[[957,1616],[939,1626],[942,1633],[957,1637]],[[2604,1085],[2586,1104],[2579,1099],[2586,1107],[2560,1153],[2550,1156],[2549,1138],[2537,1156],[2547,1171],[2505,1208],[2508,1218],[2478,1254],[2466,1298],[2520,1204],[2580,1150],[2580,1132]],[[1227,1617],[1235,1635],[1237,1623]],[[894,1612],[866,1627],[870,1634]],[[1793,1620],[1781,1629],[1796,1632]],[[2412,1075],[2403,1077],[2404,1109],[2385,1117],[2381,1142],[2346,1168],[2333,1199],[2296,1221],[2303,1236],[2344,1205],[2340,1196],[2347,1197],[2360,1162],[2377,1158],[2396,1124],[2409,1118],[2417,1096]],[[2198,1251],[2174,1264],[2143,1259],[2155,1279],[2144,1309],[2104,1314],[2138,1337],[2145,1312],[2153,1319],[2166,1305],[2153,1299],[2161,1299],[2157,1288],[2167,1290],[2180,1275],[2191,1286],[2198,1277],[2191,1264],[2203,1268]],[[1461,1457],[1454,1473],[1414,1494],[1442,1505],[1438,1488],[1454,1489],[1457,1502],[1466,1492],[1470,1514],[1460,1523],[1470,1524],[1485,1484],[1491,1507],[1497,1486],[1515,1476],[1497,1471],[1484,1479],[1475,1464]],[[931,1602],[930,1614],[939,1626],[938,1607],[953,1608]],[[2748,1406],[2711,1439],[2693,1441],[2733,1450],[2775,1464],[2763,1448],[2780,1444],[2783,1434],[2747,1419],[2754,1420]],[[488,656],[475,666],[470,686],[484,705],[480,720],[467,726],[474,738],[490,736],[490,720],[532,709],[510,697],[505,681],[489,684]],[[41,1605],[27,1610],[34,1612],[28,1625],[40,1609],[46,1614]],[[1389,1610],[1382,1614],[1390,1622]],[[1081,1575],[1072,1588],[1073,1599],[1065,1594],[1068,1616],[1072,1605],[1080,1611],[1086,1599],[1079,1592],[1091,1582]],[[2844,350],[2820,391],[2852,405],[2872,376],[2901,371]],[[223,344],[217,336],[206,345],[229,358],[239,397],[230,401],[233,410],[246,407],[254,418],[270,405],[273,416],[274,402],[259,400],[261,388],[251,384],[250,355],[235,346],[252,334],[225,334]],[[1463,108],[1438,149],[1401,140],[1408,170],[1419,164],[1430,177],[1446,177],[1462,135],[1480,140],[1477,124],[1460,131]],[[871,1281],[863,1295],[813,1311],[815,1303],[803,1296],[783,1340],[820,1323],[837,1358],[839,1319],[865,1296],[887,1293],[886,1286],[876,1289]],[[2375,736],[2384,748],[2375,771],[2358,778],[2363,787],[2349,794],[2382,796],[2383,814],[2394,807],[2416,825],[2412,811],[2421,809],[2399,801],[2406,787],[2386,754],[2391,742]],[[1228,1411],[1207,1418],[1210,1429],[1196,1437],[1152,1434],[1152,1444],[1187,1440],[1190,1470],[1200,1437],[1214,1467],[1214,1455],[1239,1432],[1265,1441],[1252,1425],[1262,1421],[1245,1416],[1231,1429]],[[3471,22],[3462,41],[3445,47],[3429,76],[3437,81],[3433,89],[3416,92],[3420,105],[3430,95],[3447,98],[3448,107],[3459,95],[3452,90],[3459,65],[3488,23]],[[1482,1352],[1472,1366],[1480,1378],[1450,1384],[1447,1410],[1436,1415],[1446,1421],[1459,1394],[1475,1396],[1471,1411],[1485,1400],[1476,1397],[1501,1388],[1566,1410],[1495,1375],[1496,1361]],[[566,909],[537,916],[530,927],[537,941],[554,939],[568,965],[580,968],[582,931]],[[155,52],[152,61],[147,52],[127,71],[137,93],[153,89],[149,101],[156,101],[164,70],[179,58],[182,98],[166,93],[179,100],[176,113],[189,97],[186,77],[194,77],[197,90],[204,78],[185,65],[186,53],[177,55],[163,62]],[[784,1515],[787,1531],[778,1556],[786,1596],[767,1603],[782,1605],[790,1591],[782,1555],[792,1527]],[[775,1345],[737,1359],[736,1351],[715,1366],[719,1374],[696,1355],[702,1373],[709,1371],[694,1404],[706,1410],[700,1401],[716,1404],[724,1393],[724,1405],[735,1409],[741,1399],[728,1393],[735,1373]],[[2009,1522],[1977,1578],[1972,1604]],[[926,-4],[931,19],[923,30],[944,28],[958,47],[979,35],[970,9],[955,-2]],[[2458,844],[2423,852],[2416,862],[2426,893],[2414,920],[2407,918],[2411,924],[2431,922],[2429,903],[2443,908],[2433,891],[2447,867],[2468,873],[2451,858],[2460,859]],[[37,1372],[19,1380],[29,1400],[42,1392],[33,1412],[38,1423],[41,1412],[43,1437],[65,1434],[70,1411]],[[1097,1584],[1104,1595],[1119,1586]],[[1036,1455],[975,1460],[1003,1464],[991,1479],[976,1475],[981,1483],[963,1500],[993,1511],[1005,1505],[1010,1485],[1003,1470],[1020,1470]],[[1203,1535],[1207,1551],[1253,1588],[1236,1565],[1238,1553],[1213,1551]],[[2096,1577],[2097,1584],[2103,1580]],[[37,1561],[49,1581],[53,1576]],[[1473,1567],[1462,1576],[1467,1581]],[[1818,1431],[1811,1447],[1791,1442],[1773,1450],[1791,1467],[1788,1482],[1799,1484],[1798,1475],[1840,1458],[1821,1448],[1835,1434]],[[1144,150],[1135,158],[1111,151],[1108,176],[1122,187],[1125,170],[1138,179],[1152,168],[1151,188],[1170,197],[1178,187],[1167,170],[1154,169]],[[906,1556],[897,1573],[908,1573]],[[1065,1568],[1059,1573],[1073,1570]],[[1391,1554],[1386,1563],[1397,1571],[1406,1571],[1408,1555],[1397,1563]],[[1237,498],[1217,521],[1224,536],[1209,552],[1207,572],[1237,545],[1268,543],[1249,538],[1258,522],[1243,527],[1248,512],[1235,510]],[[2142,1556],[2132,1563],[2145,1564]],[[1304,1549],[1301,1560],[1309,1555]],[[-8,1507],[-26,1536],[-21,1552],[-2,1559],[5,1527],[-10,1500],[-18,1500]],[[889,1507],[873,1516],[893,1521],[887,1537],[906,1556],[905,1533],[936,1557],[921,1518],[900,1521]],[[1290,1288],[1274,1332],[1278,1311],[1251,1332],[1259,1342],[1245,1365],[1246,1388],[1260,1349],[1281,1348],[1278,1336],[1303,1304],[1301,1289],[1299,1295]],[[1094,1546],[1086,1548],[1076,1555]],[[748,1516],[747,1550],[764,1530]],[[-2,1504],[29,1549],[28,1535]],[[1228,1536],[1231,1546],[1244,1540]],[[1358,1080],[1350,1083],[1349,1107],[1329,1107],[1335,1114],[1310,1103],[1324,1130],[1350,1129],[1359,1138],[1367,1129],[1388,1133],[1389,1121],[1407,1131],[1409,1113],[1420,1106],[1396,1110],[1392,1119],[1381,1118],[1385,1124],[1355,1129],[1350,1102]],[[2901,1515],[2888,1518],[2902,1539],[2919,1527]],[[2452,1526],[2437,1537],[2452,1534]],[[479,460],[467,486],[435,491],[445,505],[488,505],[502,522],[516,501],[469,487],[485,469]],[[455,1490],[468,1498],[506,1496],[530,1530],[539,1530],[513,1491]],[[980,1514],[966,1519],[961,1530]],[[2273,1505],[2256,1521],[2265,1529]],[[67,1478],[63,1490],[90,1518],[88,1528],[103,1520],[86,1499],[77,1501]],[[3038,1243],[3022,1259],[3026,1265],[3001,1281],[3000,1296],[2965,1340],[2979,1336],[2988,1345],[3023,1277]],[[2715,622],[2709,632],[2733,685],[2744,669],[2779,704],[2783,694],[2769,688],[2772,681],[2757,679],[2771,661],[2756,660],[2752,669],[2724,644],[2723,623]],[[2080,55],[2081,75],[2067,72],[2048,91],[2059,92],[2076,123],[2085,119],[2082,107],[2094,104],[2082,78],[2090,79],[2091,69]],[[261,1494],[252,1504],[265,1518]],[[2199,1499],[2189,1517],[2199,1512]],[[2844,958],[2825,964],[2827,991],[2815,997],[2816,1019],[2809,1013],[2804,1040],[2796,1037],[2797,1058],[2821,1020],[2833,1024],[2827,1017],[2843,1006],[2832,986]],[[863,1510],[858,1514],[871,1516]],[[1377,1502],[1378,1511],[1364,1515],[1383,1511]],[[1352,1423],[1332,1427],[1334,1463],[1327,1472],[1323,1467],[1317,1500],[1334,1494],[1354,1501],[1357,1491],[1355,1481],[1347,1491],[1321,1493],[1332,1475],[1345,1475]],[[1380,1486],[1399,1511],[1407,1496]],[[2923,1446],[2916,1466],[2890,1476],[2912,1486],[2908,1502],[2917,1509],[2930,1492],[2928,1463],[2939,1459]],[[1874,1491],[1868,1502],[1880,1509]],[[752,1436],[772,1449],[769,1481],[783,1508],[772,1478],[773,1445]],[[406,354],[385,388],[372,388],[382,400],[379,453],[399,443],[403,431],[385,416],[386,404],[403,393]],[[1419,602],[1420,616],[1411,609],[1406,615],[1411,627],[1398,618],[1394,632],[1436,665],[1431,644],[1440,641],[1426,629],[1433,625]],[[104,356],[100,374],[70,375],[68,387],[95,382],[114,394],[140,377],[132,379],[134,361],[119,357],[117,372]],[[1294,964],[1277,988],[1269,1022],[1282,993],[1292,1008],[1300,1002],[1307,1011],[1306,1004],[1320,1008],[1325,999],[1316,998],[1317,976],[1304,983]],[[2090,529],[2076,530],[2080,550],[2108,582],[2115,578],[2106,542],[2111,549],[2116,540]],[[319,1411],[290,1429],[294,1441],[302,1431],[302,1443],[315,1440],[315,1455],[304,1456],[321,1474],[332,1470]],[[1548,1280],[1560,1281],[1562,1304],[1549,1303],[1582,1325],[1575,1317],[1590,1313],[1583,1311],[1601,1286],[1596,1275],[1590,1294],[1589,1279],[1576,1294],[1576,1281],[1566,1286],[1572,1275],[1554,1275]],[[1384,545],[1350,561],[1379,567],[1365,588],[1382,583],[1381,571],[1404,578],[1415,564],[1398,550],[1386,559]],[[3326,358],[3314,372],[3293,372],[3280,389],[3293,396],[3291,410],[3287,421],[3335,365]],[[1299,1462],[1281,1478],[1288,1486],[1281,1497],[1297,1496]],[[616,1492],[629,1496],[625,1480],[616,1480]],[[3021,1447],[3006,1461],[2999,1495],[3017,1493],[3009,1491],[3010,1475],[3024,1456]],[[939,1486],[932,1489],[940,1495]],[[3152,736],[3133,755],[3117,796],[3137,789],[3154,768],[3146,765],[3158,764],[3162,739],[3149,751]],[[2718,1462],[2707,1475],[2709,1489],[2726,1478]],[[459,1466],[453,1470],[467,1489],[479,1486],[482,1470],[470,1475]],[[220,1449],[207,1460],[196,1453],[202,1478],[218,1488],[235,1473],[227,1478],[218,1470]],[[434,1418],[421,1430],[424,1458],[400,1469],[423,1468],[431,1488],[432,1428],[446,1423]],[[2247,601],[2256,624],[2245,621],[2249,630],[2239,630],[2249,639],[2237,640],[2239,655],[2262,646],[2278,627],[2270,606],[2264,611]],[[503,1460],[492,1464],[492,1484],[511,1466]],[[444,1466],[434,1468],[443,1476],[437,1481],[450,1484],[452,1471]],[[1224,1483],[1227,1476],[1218,1476]],[[1413,1462],[1411,1471],[1428,1476]],[[598,517],[572,536],[594,571],[611,539]],[[2004,342],[2011,366],[2037,392],[2049,396],[2050,378],[2060,385],[2067,377],[2072,387],[2078,374],[2049,367],[2034,375]],[[1770,1457],[1765,1466],[1752,1462],[1753,1474],[1777,1468]],[[2922,1036],[2915,1051],[2892,1047],[2901,1058],[2893,1058],[2887,1088],[2875,1089],[2888,1100],[2926,1046],[2942,1042]],[[952,1456],[941,1471],[967,1461]],[[1901,1459],[1885,1468],[1897,1464],[1900,1471]],[[3169,705],[3159,714],[3160,731],[3181,739],[3184,754],[3194,749],[3202,715],[3183,723],[3189,729],[3176,729],[3182,713]],[[497,28],[474,38],[477,81],[501,69],[490,57],[503,50]],[[172,764],[159,773],[170,782],[160,787],[163,806],[180,815],[174,830],[189,816],[190,794],[170,776]],[[1432,553],[1415,564],[1429,612],[1449,635],[1468,636],[1457,610],[1445,618],[1435,611],[1424,569]],[[1858,1454],[1851,1467],[1867,1465]],[[1530,1465],[1531,1454],[1522,1454]],[[450,1454],[436,1457],[445,1465]],[[2288,11],[2277,23],[2299,52],[2316,52],[2306,18]],[[1167,1451],[1162,1460],[1169,1462]],[[476,1444],[470,1452],[493,1461],[495,1453]],[[3136,1210],[3123,1234],[3131,1250],[3142,1252],[3141,1236],[3151,1229],[3144,1225],[3153,1223],[3147,1221],[3170,1225],[3173,1216]],[[2635,1437],[2617,1438],[2619,1456]],[[1566,1454],[1572,1456],[1578,1455]],[[2805,1437],[2800,1441],[2812,1455]],[[2006,135],[2000,171],[1989,182],[2028,198]],[[1674,1445],[1667,1452],[1682,1454],[1671,1451]],[[2666,1424],[2663,1434],[2638,1437],[2665,1452],[2689,1441],[2682,1436],[2690,1426]],[[3023,1444],[3037,1452],[3046,1436],[3038,1425],[3051,1417],[3049,1400],[3040,1400]],[[1693,1440],[1681,1442],[1691,1451]],[[-21,1438],[-25,1451],[-17,1449]],[[1772,624],[1765,631],[1753,625],[1729,645],[1731,674],[1718,670],[1730,687],[1742,678],[1737,664],[1748,649],[1746,634],[1771,640]],[[600,205],[592,211],[605,243],[583,265],[571,261],[584,271],[600,261],[606,269],[615,255],[608,241],[618,236]],[[1009,1431],[1001,1441],[1012,1443]],[[884,1434],[880,1441],[892,1441]],[[1082,51],[1046,55],[1053,88],[1064,87],[1071,71],[1085,77],[1075,71]],[[1177,939],[1161,944],[1164,953],[1152,954],[1145,968],[1182,969],[1188,944]],[[2095,-25],[2136,48],[2137,24],[2123,8],[2136,-8],[2131,-3]],[[1721,1424],[1718,1435],[1726,1440]],[[273,1421],[259,1433],[278,1439]],[[-19,1406],[-21,1438],[-13,1411]],[[1688,174],[1679,186],[1701,208],[1698,226],[1710,234],[1717,229],[1708,222],[1704,178]],[[2822,1409],[2805,1437],[2827,1424]],[[1739,1429],[1734,1435],[1748,1433]],[[884,1434],[888,1429],[880,1429]],[[38,1423],[27,1425],[38,1432]],[[2638,1025],[2615,1074],[2634,1079],[2645,1064],[2645,1042],[2635,1041]],[[1484,1416],[1484,1428],[1507,1427]],[[1526,1409],[1543,1426],[1548,1410]],[[650,254],[636,291],[619,289],[616,314],[661,272],[666,255]],[[1712,17],[1691,47],[1696,69],[1722,42],[1713,31],[1722,25]],[[1227,1135],[1225,1153],[1208,1146],[1211,1158],[1189,1138],[1192,1155],[1175,1166],[1195,1159],[1212,1169],[1226,1158],[1229,1166],[1246,1151],[1230,1149]],[[2687,1410],[2697,1420],[2696,1413]],[[92,1413],[82,1415],[89,1420]],[[943,126],[942,141],[973,169],[982,151],[967,143],[973,131],[951,135]],[[1772,260],[1742,273],[1741,272],[1727,287],[1723,311],[1731,287],[1765,290]],[[1494,1407],[1499,1414],[1522,1409]],[[965,478],[972,468],[967,450],[979,460],[979,442],[988,441],[988,425],[964,446],[964,459],[945,460],[958,481]],[[1,289],[-9,303],[-11,296],[-14,309],[-4,312],[-16,321],[-2,332],[-6,349],[5,335],[4,303],[21,294]],[[2670,119],[2668,128],[2667,136],[2676,135],[2669,159],[2698,146],[2701,127],[2675,127]],[[314,1389],[292,1391],[297,1398],[287,1399],[292,1410],[318,1396]],[[2830,1391],[2825,1404],[2832,1410],[2838,1395]],[[3547,126],[3507,218],[3519,222],[3526,179],[3540,177]],[[163,1392],[157,1402],[172,1405]],[[3237,1031],[3245,1076],[3274,1057],[3276,1038],[3270,1049],[3243,1053],[3253,1039]],[[1577,1386],[1584,1404],[1594,1390]],[[645,1396],[643,1402],[651,1399]],[[-38,1397],[-27,1392],[-21,1401],[-21,1388],[-35,1392],[-35,1382],[-44,1382]],[[1424,322],[1425,348],[1415,349],[1444,355],[1450,387],[1463,389],[1453,385],[1458,372],[1441,347],[1443,331]],[[3067,1362],[3039,1397],[3057,1400],[3063,1375],[3073,1373]],[[1828,1372],[1818,1380],[1819,1394],[1829,1399]],[[1860,1388],[1849,1389],[1855,1398]],[[1094,40],[1084,50],[1110,79],[1120,49]],[[2797,1058],[2780,1066],[2774,1100],[2785,1102],[2780,1089],[2792,1093],[2805,1079],[2795,1073],[2802,1066]],[[2857,1370],[2845,1386],[2851,1393],[2860,1377]],[[1049,128],[1035,135],[1079,170],[1072,140]],[[1958,302],[1966,315],[1963,338],[1933,390],[1959,375],[1955,367],[1978,310]],[[1002,1375],[995,1380],[1006,1387]],[[59,1375],[53,1384],[67,1378]],[[2551,1371],[2547,1378],[2556,1383],[2565,1375]],[[991,1339],[986,1351],[976,1351],[974,1381],[990,1372]],[[2591,1360],[2565,1375],[2590,1379],[2584,1369]],[[835,1363],[842,1378],[846,1368]],[[163,1327],[163,1376],[174,1362],[175,1334]],[[2524,1351],[2515,1374],[2525,1376]],[[1835,1352],[1828,1364],[1837,1362],[1837,1375],[1845,1359]],[[769,1358],[767,1374],[781,1366]],[[2899,70],[2876,87],[2877,96],[2862,89],[2872,110],[2849,121],[2857,132],[2849,127],[2850,147]],[[55,111],[30,130],[50,142],[68,128],[65,114]],[[2497,1347],[2487,1353],[2503,1373],[2510,1358]],[[597,1350],[605,1372],[613,1359]],[[1354,1360],[1347,1362],[1352,1372]],[[1806,1369],[1808,1358],[1801,1358]],[[54,1345],[41,1362],[52,1364]],[[1590,-1],[1575,10],[1583,32],[1605,15],[1608,1]],[[625,1357],[614,1359],[625,1364]],[[224,1327],[240,1362],[250,1338],[240,1320],[225,1320]],[[2664,1183],[2647,1213],[2663,1223],[2658,1246],[2684,1238],[2656,1212],[2670,1191]],[[210,1209],[216,1238],[233,1259],[231,1218]],[[1357,458],[1323,470],[1322,478],[1351,475],[1355,486],[1367,488]],[[3086,1314],[3065,1358],[3085,1347]],[[1461,1338],[1451,1354],[1482,1351],[1479,1342]],[[2452,1324],[2441,1339],[2420,1333],[2440,1346],[2437,1354]],[[1862,1337],[1849,1353],[1860,1354]],[[714,1341],[712,1350],[725,1353]],[[353,1327],[342,1352],[350,1349]],[[1877,1339],[1880,1351],[1889,1344]],[[1841,1345],[1835,1348],[1844,1351]],[[709,337],[702,349],[717,373],[710,376],[725,386],[731,359],[720,358],[716,346]],[[1159,266],[1139,286],[1128,288],[1129,274],[1113,289],[1109,308],[1120,309],[1117,292],[1139,297],[1148,283],[1152,292],[1151,280],[1158,284]],[[1539,1329],[1534,1340],[1570,1350],[1567,1340]],[[591,1337],[578,1348],[594,1344]],[[254,1318],[256,1347],[264,1342]],[[2548,1336],[2541,1346],[2557,1337]],[[911,434],[908,451],[893,441],[910,465],[877,483],[875,508],[883,482],[915,481]],[[1058,284],[1047,302],[1054,308],[1067,321],[1076,290]],[[2173,-8],[2171,23],[2179,35],[2196,9],[2183,-1]],[[974,1332],[966,1333],[974,1339]],[[156,697],[143,704],[150,714],[142,717],[170,731],[172,711]],[[989,1314],[992,1337],[1003,1325],[998,1319]],[[1986,1326],[2020,1333],[1998,1327]],[[1425,1302],[1402,1307],[1400,1315],[1428,1331],[1442,1329],[1415,1315]],[[1885,1313],[1880,1329],[1897,1318]],[[636,1321],[633,1327],[645,1328]],[[434,1318],[430,1327],[437,1324]],[[2276,1151],[2259,1165],[2223,1157],[2242,1169],[2239,1184],[2249,1179],[2267,1190],[2256,1173],[2262,1178]],[[733,1317],[714,1318],[714,1326]],[[1527,1029],[1520,1043],[1503,1069],[1505,1081],[1541,1034]],[[658,-29],[652,-27],[668,-13],[669,8],[685,6],[689,28],[691,-14],[670,-13]],[[2339,1304],[2334,1324],[2341,1310]],[[2446,362],[2429,372],[2450,376],[2459,394],[2463,389],[2471,398],[2465,367]],[[1371,1298],[1363,1311],[1372,1320],[1399,1314]],[[447,1162],[451,1173],[439,1186],[444,1201],[457,1200],[456,1189],[477,1178],[472,1171],[491,1168],[466,1165],[457,1186],[444,1187],[455,1170]],[[1838,1306],[1838,1317],[1847,1311]],[[2450,1308],[2457,1316],[2458,1312]],[[891,1310],[875,1314],[895,1315]],[[2153,95],[2170,103],[2179,120],[2211,116],[2188,100]],[[1368,631],[1360,643],[1348,643],[1340,661],[1365,660],[1376,647]],[[1127,544],[1136,570],[1154,575],[1166,563]],[[1205,368],[1189,380],[1171,377],[1169,385],[1187,394],[1185,397],[1208,413],[1204,391],[1193,396],[1192,386]],[[3131,1252],[3093,1306],[3136,1272]],[[1134,27],[1132,55],[1120,66],[1126,79],[1145,44],[1169,54],[1167,45],[1148,43]],[[124,572],[113,574],[125,596],[141,594],[149,579]],[[742,1281],[744,1295],[756,1299],[760,1292]],[[2384,-55],[2369,-44],[2362,-7],[2372,-18],[2373,-9],[2389,-14],[2374,-25],[2385,-38],[2379,-37]],[[764,1286],[763,1292],[776,1297]],[[1528,1288],[1519,1290],[1528,1297]],[[-33,247],[-42,271],[-12,271],[7,252],[-14,262]],[[35,575],[11,592],[41,615]],[[804,1275],[802,1292],[811,1278]],[[1507,1095],[1507,1106],[1488,1116],[1495,1118],[1450,1120],[1466,1136],[1476,1123],[1516,1116]],[[3148,247],[3149,265],[3140,264],[3147,273],[3134,275],[3137,289],[3130,290],[3135,297],[3115,306],[3144,298],[3155,260]],[[367,1113],[359,1121],[345,1117],[346,1128],[361,1125],[357,1140],[370,1148],[376,1143],[365,1133],[378,1134],[374,1115],[367,1128]],[[290,97],[286,114],[275,118],[275,139],[254,143],[267,148],[268,173],[271,145],[289,153],[276,140],[292,118]],[[856,1259],[836,1275],[828,1272],[829,1285],[860,1266]],[[233,1262],[224,1282],[249,1285]],[[1717,1251],[1716,1263],[1733,1268],[1716,1279],[1729,1280],[1737,1263]],[[746,1270],[745,1278],[755,1280]],[[1152,1279],[1161,1272],[1149,1272]],[[1864,1259],[1856,1262],[1863,1278]],[[1902,1256],[1887,1257],[1890,1276]],[[2112,847],[2133,861],[2141,911],[2149,870],[2137,861],[2142,857]],[[1606,1267],[1609,1275],[1622,1271]],[[792,1269],[778,1270],[794,1275]],[[818,815],[805,828],[811,833],[792,836],[791,845],[809,840],[815,854],[828,847],[824,837],[817,845]],[[871,1248],[871,1260],[874,1269],[880,1265]],[[2580,-62],[2570,-59],[2564,-30],[2572,-22],[2586,-53]],[[625,348],[616,382],[608,368],[600,381],[621,387],[633,375],[625,360],[636,357]],[[829,1254],[812,1260],[822,1268]],[[1600,1240],[1586,1263],[1578,1260],[1589,1267]],[[862,1251],[856,1259],[869,1266]],[[1527,1256],[1521,1264],[1533,1264]],[[455,232],[428,233],[427,258],[451,252],[444,241]],[[1865,1135],[1877,1164],[1891,1174],[1897,1165],[1890,1158],[1898,1160],[1903,1145],[1879,1154]],[[795,1257],[787,1259],[783,1264]],[[1135,1243],[1166,1251],[1171,1262],[1174,1246],[1166,1249],[1165,1236],[1155,1236]],[[-5,1244],[-21,1248],[-23,1260],[-9,1251],[-13,1262]],[[1691,1251],[1683,1255],[1687,1262]],[[1188,60],[1177,63],[1173,78],[1175,87],[1184,86],[1178,100],[1189,94],[1197,118],[1199,103],[1185,84]],[[809,1254],[803,1259],[812,1260]],[[2814,79],[2800,95],[2810,104],[2802,101],[2789,119],[2801,117],[2820,100]],[[2618,-18],[2615,-3],[2637,15],[2635,-17]],[[3112,816],[3105,825],[3111,833],[3103,831],[3092,845],[3094,859],[3085,861],[3094,865],[3106,848],[3116,828]],[[1007,649],[990,655],[999,661],[992,680],[1017,674]],[[457,1231],[475,1257],[479,1246]],[[-1,1237],[5,1254],[7,1239]],[[-59,1253],[-3,1234],[-41,1234]],[[1220,818],[1194,823],[1204,844],[1225,829]],[[655,59],[619,62],[629,66],[628,84],[636,81],[649,81],[644,75]],[[917,1200],[923,1214],[909,1214],[931,1215],[924,1232],[946,1222],[944,1219],[949,1206],[936,1214],[938,1203],[934,1212],[932,1202]],[[879,1212],[867,1222],[855,1226],[855,1246]],[[896,1238],[887,1242],[888,1245]],[[2379,441],[2383,465],[2367,447],[2363,452],[2369,471],[2394,468],[2389,459],[2399,457],[2398,450],[2385,457]],[[509,243],[483,257],[480,267],[492,280]],[[768,1218],[765,1236],[774,1223]],[[1716,1232],[1710,1235],[1722,1236]],[[2604,564],[2582,594],[2555,586],[2581,604],[2564,615],[2566,629],[2588,606],[2582,598]],[[2764,1221],[2765,1232],[2772,1227]],[[737,862],[700,880],[712,879],[724,894],[738,886],[728,871]],[[1594,817],[1580,825],[1629,832],[1624,819]],[[2168,244],[2159,247],[2158,278],[2165,273],[2166,286],[2184,256],[2176,263],[2164,256]],[[1221,1092],[1240,1097],[1244,1081],[1237,1087],[1229,1066],[1221,1066]],[[2289,1199],[2286,1214],[2296,1221]],[[1967,927],[1970,972],[1977,973],[1982,943]],[[2773,1210],[2767,1216],[2777,1219]],[[969,1187],[956,1190],[964,1201],[956,1214],[970,1201]],[[2785,1184],[2787,1213],[2791,1188]],[[431,1091],[429,1101],[436,1113],[422,1125],[434,1142],[430,1121],[436,1115],[445,1128],[450,1112],[442,1116],[441,1096]],[[816,1195],[818,1209],[820,1201],[829,1206],[830,1197]],[[1217,1192],[1211,1202],[1218,1207],[1242,1208]],[[1193,943],[1195,963],[1186,968],[1204,976],[1206,966],[1213,976],[1215,964]],[[1958,1188],[1959,1196],[1979,1205]],[[2806,1188],[2796,1199],[2803,1205]],[[2550,1084],[2536,1095],[2528,1087],[2530,1115],[2545,1112]],[[521,467],[512,492],[523,483],[548,502],[544,479],[527,480]],[[985,1194],[978,1197],[984,1202]],[[3068,988],[3056,989],[3023,1023],[3039,1023],[3033,1018],[3053,1000],[3068,1005]],[[1116,1184],[1112,1191],[1129,1200],[1130,1190],[1121,1194]],[[926,1188],[933,1199],[942,1196]],[[717,140],[692,143],[705,166],[716,158]],[[3885,3],[3898,25],[3892,42],[3902,41],[3916,17],[3896,10],[3899,23]],[[1305,1189],[1301,1196],[1320,1194]],[[2313,1182],[2306,1194],[2318,1186]],[[1526,1184],[1530,1193],[1535,1187]],[[1208,787],[1205,794],[1196,789],[1188,806],[1195,817],[1200,810],[1209,815]],[[1124,408],[1095,426],[1102,439],[1129,413]],[[1179,1179],[1177,1191],[1194,1192]],[[1074,-47],[1080,-27],[1116,-35]],[[558,1138],[559,1153],[532,1191],[564,1150]],[[540,1083],[533,1097],[540,1121],[547,1100],[579,1103],[564,1095],[538,1100],[546,1090]],[[693,815],[689,835],[724,846]],[[1070,92],[1074,117],[1098,116],[1087,110],[1084,93]],[[3116,1177],[3104,1185],[3116,1185]],[[2867,1093],[2850,1099],[2858,1101],[2854,1116],[2870,1108],[2863,1122],[2869,1126],[2872,1108],[2880,1110]],[[1341,272],[1341,291],[1362,291],[1387,310],[1386,328],[1394,321],[1391,308],[1373,295],[1359,282],[1344,289]],[[2814,1156],[2793,1165],[2794,1182],[2806,1179]],[[154,1154],[129,1168],[137,1168],[131,1180]],[[921,1170],[921,1180],[929,1178]],[[1150,815],[1143,825],[1137,815],[1124,826],[1139,828],[1135,839],[1163,826],[1154,818],[1148,827]],[[3247,59],[3240,94],[3250,96],[3258,76]],[[2843,927],[2840,936],[2844,955],[2849,948],[2855,957],[2862,943],[2853,943],[2853,928]],[[2060,1155],[2051,1160],[2063,1165],[2058,1170],[2075,1176],[2074,1156]],[[980,1169],[976,1176],[991,1173]],[[412,482],[382,511],[360,510],[381,536],[387,531],[379,516]],[[2089,812],[2084,820],[2102,851],[2100,865],[2108,846]],[[3165,299],[3149,301],[3155,314],[3183,317]],[[160,1146],[159,1163],[168,1169],[178,1153]],[[904,818],[900,843],[919,848],[928,836],[918,840]],[[1447,1015],[1449,1047],[1434,1049],[1449,1053],[1441,1059],[1452,1063],[1458,1042]],[[892,550],[877,557],[873,576],[889,579],[883,566],[895,559]],[[383,1156],[388,1166],[396,1158]],[[2510,785],[2499,801],[2513,801],[2516,810],[2528,794]],[[475,1142],[459,1143],[466,1161],[475,1159],[476,1149],[467,1147]],[[294,398],[321,408],[322,390],[304,390]],[[2480,789],[2466,826],[2484,809],[2490,791]],[[3222,1139],[3215,1143],[3229,1154]],[[3018,796],[3001,808],[3013,825],[3022,810]],[[1123,1141],[1108,1143],[1110,1151]],[[2285,1137],[2276,1151],[2288,1145]],[[405,1125],[400,1149],[419,1143],[412,1138],[417,1129]],[[1621,109],[1607,128],[1617,127],[1619,136],[1627,134],[1629,116]],[[2882,1134],[2874,1143],[2881,1147]],[[-30,481],[-30,508],[-20,514],[-18,486]],[[2367,1125],[2349,1140],[2358,1142]],[[3611,-7],[3584,15],[3582,29],[3599,26],[3599,14],[3590,17],[3606,1]],[[127,956],[122,981],[138,984],[140,970],[128,964],[137,962]],[[1280,1128],[1288,1138],[1292,1133]],[[762,824],[773,836],[776,803],[766,803]],[[897,1121],[888,1126],[891,1137]],[[38,454],[27,466],[36,466],[38,481],[54,479]],[[3218,416],[3195,443],[3213,439],[3224,426]],[[788,1044],[756,1055],[753,1079],[758,1061],[781,1058]],[[528,191],[518,195],[527,212],[538,210],[539,199]],[[251,572],[220,580],[215,599]],[[2836,1114],[2833,1132],[2843,1121]],[[1541,543],[1532,559],[1514,566],[1533,570],[1545,558]],[[1804,333],[1777,335],[1808,353]],[[419,1076],[414,1086],[401,1086],[405,1095],[428,1089],[430,1080]],[[2336,1118],[2349,1130],[2354,1119]],[[1261,1122],[1256,1128],[1267,1129]],[[-49,301],[-55,328],[-40,314],[-41,323],[-27,324]],[[1691,233],[1666,240],[1668,251],[1695,240]],[[3648,-61],[3636,-56],[3628,-31],[3644,-42]],[[155,872],[136,884],[157,893],[171,884],[150,882]],[[1274,1126],[1282,1113],[1269,1113]],[[643,361],[633,375],[664,383]],[[1421,1088],[1427,1101],[1419,1112],[1450,1120],[1430,1110],[1429,1091]],[[1408,296],[1398,317],[1406,311],[1424,322],[1417,316],[1423,306],[1416,310],[1417,297]],[[1025,30],[1010,34],[1014,50],[1028,47]],[[1243,1098],[1233,1109],[1222,1098],[1222,1107],[1232,1113],[1252,1101]],[[2763,1098],[2762,1107],[2764,1113],[2773,1101]],[[609,1095],[591,1108],[598,1113]],[[824,1106],[811,1109],[823,1113]],[[1296,1095],[1286,1112],[1301,1112],[1308,1099]],[[2314,671],[2318,681],[2338,686],[2340,674]],[[2352,1090],[2348,1109],[2358,1102]],[[665,249],[673,277],[682,267],[675,250]],[[132,219],[116,234],[121,256],[129,228],[136,233]],[[2023,1094],[2013,1107],[2024,1105]],[[1262,1095],[1257,1101],[1263,1105]],[[-40,277],[-57,290],[-49,300],[-36,291]],[[614,1091],[634,1103],[631,1092]],[[1519,360],[1501,372],[1503,384],[1511,368],[1542,376]],[[1374,1681],[1382,1681],[1387,1662],[1373,1657]],[[1536,595],[1533,608],[1542,618],[1551,599]],[[1115,1089],[1098,1099],[1110,1101]],[[780,533],[765,534],[758,545],[739,541],[762,553],[766,537],[788,542]],[[2976,1091],[2970,1098],[2979,1100]],[[184,157],[167,166],[168,175],[193,166]],[[350,391],[352,414],[370,393]],[[2777,925],[2762,927],[2763,950],[2756,953],[2765,952]],[[885,1074],[887,1093],[894,1080]],[[220,46],[214,53],[208,73],[229,56]],[[2165,1078],[2166,1087],[2185,1089],[2173,1078]],[[2013,1080],[2004,1083],[2012,1089]],[[1201,448],[1187,468],[1205,473]],[[97,1075],[89,1084],[103,1082]],[[2961,623],[2979,632],[2973,635],[2987,641],[2985,649],[2997,642],[2997,629],[2989,635]],[[169,14],[177,53],[181,19]],[[1710,367],[1717,396],[1728,394],[1720,383],[1735,377],[1721,379]],[[516,101],[509,121],[515,127],[526,104]],[[954,300],[937,314],[943,320],[962,307]],[[1502,483],[1494,503],[1506,504],[1512,494]],[[1242,1059],[1237,1075],[1244,1079]],[[156,549],[161,570],[179,564]],[[2209,1071],[2204,1076],[2215,1078]],[[2948,645],[2940,659],[2960,660],[2959,649]],[[869,1062],[875,1075],[884,1073]],[[103,1061],[98,1065],[112,1071]],[[2171,1064],[2165,1070],[2180,1071]],[[1377,1052],[1369,1061],[1380,1070]],[[867,1051],[855,1067],[869,1062]],[[837,1039],[831,1064],[838,1051]],[[577,52],[569,61],[587,69],[594,63]],[[1269,1035],[1251,1063],[1268,1049]],[[2187,1042],[2173,1062],[2192,1063],[2180,1058]],[[2066,1044],[2063,1054],[2054,1050],[2056,1063],[2074,1051]],[[2187,2063],[2168,2050],[2160,2056],[2162,2065],[2173,2058],[2181,2076],[2179,2063]],[[1228,1052],[1224,1061],[1235,1062]],[[1207,1048],[1204,1059],[1213,1057]],[[1588,407],[1587,430],[1603,454]],[[3099,918],[3079,933],[3067,931],[3082,938],[3083,948]],[[1172,1041],[1167,1049],[1188,1056]],[[667,206],[686,234],[681,217],[687,207]],[[3005,1048],[3002,1054],[3010,1054]],[[607,1036],[600,1045],[607,1047]],[[3027,408],[3018,437],[3040,409]],[[2659,1028],[2649,1039],[2663,1044]],[[278,1036],[275,1043],[302,1039]],[[1384,933],[1369,946],[1395,949]],[[2854,1026],[2832,1041],[2812,1040],[2833,1042]],[[904,-53],[924,-33],[938,-38]],[[1888,160],[1881,192],[1897,173]],[[2054,529],[2037,531],[2060,542],[2067,533]],[[242,131],[227,150],[252,143]],[[2679,732],[2677,753],[2685,758],[2690,748]],[[194,326],[194,339],[182,343],[195,351],[199,342],[206,345]],[[1014,382],[1016,399],[1004,392],[1001,403],[1016,402],[1023,387]],[[1585,599],[1572,620],[1591,617]],[[3682,-62],[3689,-53],[3709,-52],[3706,-60]],[[2719,687],[2730,713],[2742,704],[2732,707],[2730,690]],[[876,1018],[873,1027],[880,1027]],[[2600,185],[2592,187],[2593,213],[2601,200]],[[1731,505],[1736,485],[1719,485]],[[1830,190],[1831,208],[1849,193]],[[1792,153],[1788,172],[1801,169],[1799,154]],[[2811,905],[2797,933],[2822,907]],[[1446,1848],[1453,1837],[1432,1822]],[[283,185],[282,196],[304,205],[302,192],[294,197]],[[2511,421],[2498,426],[2507,448]],[[2398,414],[2381,423],[2378,433],[2396,419],[2419,424]],[[606,1009],[610,1021],[615,1016]],[[3580,33],[3574,49],[3595,48]],[[1211,1019],[1231,1017],[1224,1009],[1209,1009]],[[783,918],[764,928],[759,918],[756,932],[780,928]],[[1260,568],[1238,573],[1254,584]],[[2085,1003],[2080,1013],[2092,1012]],[[912,1005],[906,1008],[912,1013]],[[2282,559],[2275,571],[2261,568],[2285,582]],[[616,711],[652,733],[660,729]],[[3115,745],[3103,776],[3115,776],[3108,775],[3110,764],[3119,766]],[[1509,584],[1508,597],[1519,605],[1519,589]],[[614,33],[612,54],[595,63],[621,56]],[[2136,92],[2137,118],[2148,97]],[[2650,988],[2644,998],[2633,994],[2643,1002]],[[1086,991],[1085,998],[1092,992]],[[3111,309],[3104,338],[3121,311]],[[1390,642],[1375,657],[1404,648]],[[2705,979],[2699,986],[2708,986]],[[3619,118],[3624,147],[3613,171],[3631,135]],[[2193,-19],[2185,-3],[2209,-14]],[[2670,948],[2658,980],[2671,964]],[[3091,967],[3094,978],[3104,973]],[[2817,954],[2803,969],[2808,977],[2808,967],[2823,963]],[[2809,941],[2792,953],[2808,959]],[[3134,851],[3116,877],[3130,873]],[[2132,520],[2120,529],[2143,536]],[[3083,948],[3071,963],[3076,974]],[[3068,708],[3053,710],[3054,729]],[[2942,964],[2932,965],[2926,970]],[[2911,212],[2901,222],[2908,238],[2906,220],[2916,227],[2922,218],[2916,223]],[[3268,721],[3241,753],[3270,729]],[[1084,435],[1083,444],[1091,442],[1093,426],[1084,426]],[[1231,952],[1234,964],[1241,959]],[[418,415],[409,426],[425,437]],[[857,56],[852,75],[861,81],[869,70],[856,69]],[[1046,466],[1040,483],[1054,489]],[[3827,-6],[3818,-5],[3825,1],[3810,25],[3817,17],[3830,6]],[[158,243],[145,245],[147,257],[155,257]],[[3890,48],[3880,84],[3889,82],[3895,92],[3895,79],[3884,73]],[[970,351],[963,371],[977,369]],[[339,222],[337,244],[350,234]],[[47,937],[26,950],[59,942]],[[1836,468],[1809,473],[1807,483]],[[658,388],[654,406],[658,399],[671,410],[681,401],[666,404]],[[2405,936],[2394,940],[2398,950]],[[1669,300],[1668,310],[1648,319],[1685,307]],[[1558,-57],[1555,-49],[1564,-43],[1573,-50]],[[3125,932],[3111,948],[3124,943]],[[1633,633],[1617,641],[1633,649]],[[216,-49],[194,-47],[212,-37]],[[2814,924],[2809,941],[2820,929]],[[2868,931],[2859,938],[2865,941]],[[3055,926],[3057,940],[3067,931]],[[350,519],[333,536],[364,520]],[[2385,141],[2393,162],[2407,167]],[[129,729],[129,744],[140,744],[140,736]],[[750,903],[743,905],[745,935]],[[87,920],[70,935],[88,930]],[[183,920],[176,922],[182,935]],[[634,887],[631,898],[630,919],[639,896]],[[1193,917],[1180,933],[1199,923]],[[461,386],[458,402],[465,403],[470,391]],[[3142,919],[3125,928],[3138,931]],[[2042,285],[2028,295],[2043,302],[2039,293],[2047,291]],[[931,920],[929,930],[939,921]],[[2857,918],[2853,928],[2862,927]],[[1466,920],[1468,928],[1478,921]],[[3157,796],[3142,808],[3145,822]],[[1720,247],[1722,261],[1741,272]],[[3110,891],[3100,899],[3099,917]],[[3045,909],[3040,916],[3048,917]],[[1260,789],[1243,793],[1244,807]],[[3099,360],[3085,367],[3090,373],[3102,369]],[[100,905],[97,912],[106,911]],[[662,294],[646,300],[666,307]],[[11,896],[6,911],[16,901]],[[139,896],[130,898],[148,910]],[[2688,899],[2679,909],[2688,909]],[[1269,315],[1264,348],[1271,348]],[[756,165],[745,169],[753,183],[761,178],[753,174]],[[3655,84],[3644,93],[3651,98],[3653,95],[3662,94]],[[215,599],[193,627],[213,612]],[[1311,35],[1305,67],[1312,68]],[[3110,891],[3115,878],[3106,878]],[[1704,881],[1697,884],[1705,890]],[[851,409],[842,421],[855,429]],[[3057,874],[3046,875],[3048,886],[3060,880]],[[1196,869],[1194,875],[1199,885]],[[959,415],[974,432],[975,418]],[[695,858],[690,877],[701,868]],[[3123,-23],[3106,-18],[3114,-7]],[[161,749],[137,758],[146,764]],[[3094,865],[3089,872],[3099,872]],[[3057,864],[3046,871],[3057,872]],[[1254,811],[1242,818],[1262,825]],[[1030,251],[1023,272],[1038,259]],[[893,853],[888,868],[903,855]],[[763,636],[765,645],[753,649],[761,654],[772,645]],[[3063,850],[3061,866],[3074,857]],[[972,492],[959,495],[957,512]],[[775,302],[770,313],[789,314]],[[654,233],[667,230],[663,223],[652,223]],[[596,690],[580,696],[592,695],[590,705],[602,696]],[[730,852],[719,855],[727,861]],[[2363,344],[2358,354],[2365,360],[2371,352]],[[607,850],[600,854],[596,859]],[[2444,400],[2439,415],[2446,413],[2453,401]],[[-44,334],[-57,346],[-46,352]],[[808,843],[799,847],[811,858]],[[847,837],[838,849],[848,857]],[[1375,36],[1375,51],[1389,59]],[[3565,-24],[3565,-16],[3569,-1],[3573,-22]],[[1630,-54],[1627,-40],[1642,-41]],[[903,618],[896,627],[904,646]],[[1222,604],[1196,609],[1205,615]],[[2302,834],[2289,835],[2302,844]],[[831,417],[824,420],[835,431],[839,423]],[[63,531],[55,550],[70,539]],[[1158,831],[1153,841],[1163,835]],[[2036,152],[2026,164],[2039,168]],[[2232,822],[2231,838],[2238,836]],[[2220,542],[2212,545],[2218,567]],[[850,1],[844,18],[855,19]],[[525,820],[527,833],[532,821]],[[2163,756],[2151,759],[2163,772]],[[2521,819],[2511,826],[2513,831]],[[2726,79],[2719,90],[2737,89]],[[2507,565],[2505,575],[2523,580]],[[2570,812],[2569,825],[2580,826],[2582,819],[2570,823]],[[2393,162],[2369,165],[2384,171]],[[1723,311],[1711,319],[1727,324]],[[48,522],[35,525],[41,538]],[[929,810],[922,824],[938,817]],[[258,88],[258,105],[269,90]],[[945,797],[930,798],[932,808],[941,803]],[[3792,303],[3783,314],[3822,309],[3794,310]],[[1667,469],[1662,485],[1677,474]],[[3117,806],[3113,815],[3122,812]],[[645,640],[643,646],[650,656],[655,648]],[[1710,320],[1697,333],[1702,342]],[[3862,76],[3871,92],[3879,86]],[[264,46],[244,64],[263,56]],[[2699,56],[2705,79],[2710,68]],[[1496,194],[1489,217],[1501,203]],[[3027,171],[3042,149],[3034,149]],[[1599,631],[1597,643],[1612,640]],[[2619,796],[2611,805],[2625,800]],[[199,130],[213,140],[222,134]],[[660,663],[652,673],[666,677]],[[919,562],[907,567],[915,578]],[[3205,292],[3199,312],[3213,294]],[[908,158],[925,170],[928,162]],[[757,26],[734,29],[753,34]],[[26,274],[16,271],[12,287]],[[1492,786],[1487,791],[1497,792]],[[447,557],[429,567],[455,562]],[[1037,528],[1034,544],[1045,542]],[[622,416],[614,422],[621,429],[627,423]],[[661,99],[659,117],[670,103]],[[633,612],[625,619],[641,626]],[[779,504],[781,520],[790,508]],[[1603,454],[1603,468],[1615,466]],[[621,183],[615,190],[625,201],[620,192],[630,188]],[[643,545],[640,565],[651,547]],[[443,756],[439,766],[448,766]],[[3843,-5],[3835,2],[3846,13]],[[4101,-55],[4080,-52],[4086,-45]],[[2172,553],[2172,571],[2181,560]],[[2089,755],[2095,764],[2099,758]],[[946,749],[936,758],[923,755],[941,761]],[[2063,109],[2046,118],[2047,127]],[[2863,215],[2872,226],[2885,224]],[[3460,0],[3452,19],[3463,13]],[[3090,82],[3102,62],[3094,62]],[[434,-50],[418,-44],[423,-36]],[[1297,531],[1291,536],[1302,553]],[[155,628],[141,641],[152,632],[189,629]],[[3106,42],[3106,55],[3118,48]],[[940,731],[927,734],[928,742]],[[1696,276],[1696,298],[1703,282]],[[1175,11],[1186,28],[1186,14]],[[2269,503],[2262,507],[2272,523]],[[1269,157],[1274,138],[1266,138]],[[2413,711],[2408,718],[2415,721]],[[2459,707],[2455,714],[2464,711]],[[618,577],[624,589],[632,580]],[[2720,-50],[2713,-31],[2722,-34]],[[676,697],[669,698],[684,705]],[[923,-27],[914,-14],[922,-9]],[[718,36],[707,42],[717,50]],[[1434,295],[1427,302],[1443,307]],[[2995,687],[2984,696],[2989,702]],[[2389,688],[2375,695],[2380,701]],[[538,688],[545,698],[549,697]],[[2427,413],[2422,431],[2434,417]],[[274,365],[268,377],[283,371]],[[691,677],[687,678],[687,692]],[[291,78],[281,84],[290,93]],[[183,4],[183,22],[191,5]],[[645,678],[627,681],[641,686]],[[843,2475],[833,2483],[836,2495]],[[1570,569],[1557,582],[1568,582]],[[-59,492],[-58,505],[-47,505]],[[1815,602],[1836,624],[1838,612],[1834,617]],[[841,570],[830,575],[834,586]],[[5,490],[-15,502],[-10,506]],[[708,663],[706,675],[716,675]],[[1016,481],[1030,495],[1028,483]],[[644,327],[631,328],[640,338]],[[741,660],[734,665],[740,670]],[[2981,376],[2978,389],[2990,383]],[[831,308],[829,330],[837,311]],[[220,75],[216,80],[222,91],[225,83]],[[1290,-15],[1278,-14],[1284,-3]],[[2725,607],[2721,619],[2735,611]],[[455,374],[452,381],[461,383],[465,378]],[[628,650],[614,651],[625,659]],[[2484,643],[2479,656],[2487,659]],[[2233,102],[2229,109],[2246,113]],[[966,97],[962,82],[953,82]],[[882,412],[869,417],[893,418]],[[2803,364],[2792,379],[2800,380]],[[158,393],[156,408],[166,398]],[[-60,648],[-64,654],[-56,654]],[[2293,483],[2297,500],[2301,485]],[[2679,643],[2662,650],[2680,652],[2673,649]],[[714,651],[704,646],[696,646]],[[207,-38],[201,-28],[212,-25]],[[3046,-15],[3037,-5],[3047,-2]],[[943,481],[933,489],[946,491]],[[2963,637],[2961,646],[2969,638]],[[3531,467],[3521,469],[3518,482]],[[120,257],[114,264],[130,266]],[[2948,632],[2954,642],[2963,637]],[[1503,297],[1506,316],[1512,313]],[[623,519],[618,531],[629,529]],[[927,467],[923,476],[937,475]],[[308,330],[294,333],[302,340]],[[1611,507],[1603,510],[1606,524]],[[285,564],[299,571],[304,565]],[[134,110],[145,103],[128,103]],[[671,623],[669,632],[676,631]],[[2890,40],[2898,53],[2904,48]],[[273,466],[274,478],[284,481]],[[1474,152],[1465,170],[1473,167]],[[1295,89],[1286,101],[1298,98]],[[2254,484],[2252,498],[2261,493]],[[657,87],[662,96],[671,89]],[[-14,348],[-25,353],[-24,363]],[[826,264],[828,271],[843,266]],[[1761,608],[1756,617],[1763,619]],[[3620,-26],[3611,-12],[3623,-18]],[[301,231],[299,242],[310,238]],[[652,610],[648,618],[661,614]],[[1553,38],[1544,43],[1561,46]],[[1285,418],[1290,429],[1296,420]],[[1023,599],[1017,601],[1022,608]],[[3096,344],[3090,353],[3099,358]],[[2122,590],[2114,599],[2128,597]],[[543,286],[543,297],[553,299]],[[1410,266],[1407,279],[1418,267]],[[749,-21],[742,-16],[749,-6]],[[732,584],[726,588],[733,593]],[[2255,586],[2243,590],[2255,590]],[[2093,1027],[2086,1020],[2078,1027]],[[1180,406],[1177,423],[1184,418]],[[2370,381],[2379,405],[2392,397],[2380,401]],[[1648,-30],[1641,-20],[1654,-24]],[[660,119],[662,134],[667,121]],[[252,491],[243,499],[251,503]],[[247,-10],[246,1],[255,2]],[[1105,473],[1112,462],[1103,462]],[[1564,511],[1572,524],[1574,515]],[[2389,368],[2379,372],[2391,377]],[[2165,1078],[2158,1064],[2158,1078]],[[1075,440],[1064,441],[1073,449]],[[811,302],[799,309],[806,313]],[[626,95],[619,97],[622,110]],[[1577,554],[1568,556],[1571,566]],[[939,436],[939,444],[951,446]],[[601,21],[597,29],[610,27]],[[2868,411],[2857,412],[2862,420]],[[223,156],[212,162],[220,166]],[[3555,22],[3553,37],[3561,23]],[[491,287],[484,294],[490,301]],[[243,21],[233,22],[234,31]],[[222,449],[212,459],[225,455]],[[1329,364],[1320,374],[1329,374]],[[508,180],[514,192],[518,185]],[[75,555],[69,560],[80,559]],[[2263,543],[2259,550],[2269,554]],[[1015,216],[1010,228],[1017,229]],[[2039,-15],[2030,-14],[2036,-5]],[[1871,541],[1870,551],[1877,542]],[[780,343],[771,348],[781,352]],[[660,316],[662,324],[671,317]],[[803,213],[807,220],[817,216]],[[2187,29],[2179,35],[2176,48]],[[243,305],[236,313],[244,316]],[[857,39],[859,46],[869,40]],[[3029,-22],[3021,-11],[3027,-9]],[[808,-51],[807,-40],[815,-46]],[[365,341],[372,332],[363,332]],[[1068,321],[1077,330],[1080,324]],[[364,313],[364,323],[372,323]],[[1034,219],[1026,220],[1034,229]],[[726,157],[722,168],[730,166]],[[3739,-50],[3729,-45],[3733,-39]],[[310,518],[300,526],[311,525]],[[414,238],[417,247],[424,242]],[[2090,1182],[2097,1187],[2100,1178]],[[161,172],[162,161],[155,161]],[[35,82],[28,91],[35,93]],[[566,319],[560,327],[568,329]],[[994,19],[997,30],[1002,23]],[[1008,442],[999,448],[1010,449]],[[-56,512],[-63,518],[-56,522]],[[246,262],[247,274],[253,272]],[[1724,45],[1719,54],[1727,54]],[[3073,-63],[3069,-54],[3077,-54]],[[2999,394],[2994,402],[3006,397]],[[3374,-52],[3372,-41],[3379,-44]],[[540,230],[532,233],[542,238]],[[2874,122],[2873,132],[2880,132]],[[1302,1566],[1315,1568],[1310,1562]],[[523,294],[517,301],[524,304]],[[502,269],[500,279],[507,277]],[[1268,55],[1273,64],[1277,58]],[[744,324],[747,334],[752,329]],[[607,417],[604,424],[614,422]],[[989,362],[984,370],[992,370]],[[1516,271],[1518,278],[1526,274]],[[788,202],[784,210],[793,208]],[[2383,494],[2381,501],[2389,496]],[[595,163],[592,173],[599,171]],[[1576,30],[1574,41],[1581,34]],[[1285,102],[1278,106],[1283,112]],[[1784,493],[1777,498],[1792,496]],[[213,12],[214,23],[219,17]],[[1311,453],[1308,460],[1317,459]],[[2772,311],[2767,316],[2776,319]],[[237,76],[234,82],[244,82]],[[3738,314],[3730,316],[3743,320]],[[575,413],[578,405],[571,405]],[[678,320],[672,325],[688,321]],[[3651,151],[3645,157],[3658,153]],[[3672,44],[3669,51],[3678,48]],[[122,327],[115,330],[121,335]],[[1697,470],[1691,474],[1699,477]],[[295,214],[291,220],[300,219]],[[3711,-50],[3709,-43],[3717,-47]],[[896,189],[891,195],[898,196]],[[1621,229],[1625,236],[1628,230]],[[520,242],[515,246],[528,244]],[[667,171],[662,175],[670,177]],[[2191,411],[2186,417],[2183,427]],[[1304,337],[1296,340],[1292,345]],[[3232,450],[3227,454],[3223,462]]] diff --git a/viz/Earcut.Viz/Program.cs b/viz/Earcut.Viz/Program.cs index c67acd3..fe51aaf 100644 --- a/viz/Earcut.Viz/Program.cs +++ b/viz/Earcut.Viz/Program.cs @@ -13,6 +13,7 @@ string fixtureName = args.Length > 0 ? args[0] : "water"; int rotation = args.Length > 1 ? int.Parse(args[1]) : 0; +bool refineOutput = args.Length > 2 && args[2] == "--refine"; // Load fixture string fixturesDir = IOPath.Combine(AppContext.BaseDirectory, "fixtures"); @@ -69,8 +70,16 @@ var sw = Stopwatch.StartNew(); int[] result = Earcut.Triangulate(vertices, holes, dimensions); sw.Stop(); - Console.WriteLine($"earcut: {sw.ElapsedMilliseconds}ms"); + +if (refineOutput) +{ + var swRefine = Stopwatch.StartNew(); + Earcut.Refine(result, vertices, dimensions); + swRefine.Stop(); + Console.WriteLine($"refine: {swRefine.ElapsedMilliseconds}ms"); +} + Console.WriteLine($"deviation: {Earcut.Deviation(vertices, holes, dimensions, result)}"); // Build triangle vertex list (each entry is a [x,y] point in polygon coordinates) diff --git a/viz/Earcut.Viz/Properties/launchSettings.json b/viz/Earcut.Viz/Properties/launchSettings.json index 92cc3e4..e5be5ae 100644 --- a/viz/Earcut.Viz/Properties/launchSettings.json +++ b/viz/Earcut.Viz/Properties/launchSettings.json @@ -64,6 +64,10 @@ "commandName": "Project", "commandLineArgs": "issue142" }, + "issue147": { + "commandName": "Project", + "commandLineArgs": "issue147" + }, "issue149": { "commandName": "Project", "commandLineArgs": "issue149"