From f17de5d32cb6d984c315a754680d3410feff3df7 Mon Sep 17 00:00:00 2001 From: Kaj Johnson Date: Tue, 21 Mar 2023 11:56:51 -0400 Subject: [PATCH] first commit --- README.txt | 20 + build_bodyforce_Greens.m | 42 + creeping_faults.txt | 183 + invert_bodyforce.m | 178 + mesh2d/LICENSE | 674 ++ mesh2d/README.md | 61 + mesh2d/aabb-tree/drawtree.m | 82 + mesh2d/aabb-tree/findball.m | 135 + mesh2d/aabb-tree/findline.m | 161 + mesh2d/aabb-tree/findtria.m | 325 + mesh2d/aabb-tree/lineline.m | 163 + mesh2d/aabb-tree/linenear.m | 51 + mesh2d/aabb-tree/maketree.m | 311 + mesh2d/aabb-tree/maprect.m | 58 + mesh2d/aabb-tree/mapvert.m | 55 + mesh2d/aabb-tree/queryset.m | 108 + mesh2d/aabb-tree/scantree.m | 150 + mesh2d/bfsgeo2.m | 116 + mesh2d/bfstri2.m | 104 + mesh2d/cdtbal1.m | 37 + mesh2d/cdtbal2.m | 79 + mesh2d/cfmtri2.m | 145 + mesh2d/compile.m | 50 + mesh2d/deltri2.m | 168 + mesh2d/drawscr.m | 367 + mesh2d/fixgeo2.m | 374 + mesh2d/getnan2.m | 95 + mesh2d/h_function.m | 16 + mesh2d/idxtri2.m | 85 + mesh2d/inpoly2.m | 222 + mesh2d/inpoly2_oct.cpp | 131 + mesh2d/isfeat2.m | 109 + mesh2d/lfshfn2.m | 126 + mesh2d/limgrad.m | 146 + mesh2d/limhfn2.m | 77 + mesh2d/mesh-file/loadmsh.m | 375 + mesh2d/mesh-file/savemsh.m | 558 ++ mesh2d/mesh_crack.m | 87 + mesh2d/minlen2.m | 51 + mesh2d/poly-data/airfoil.msh | 957 ++ mesh2d/poly-data/islands.msh | 13818 ++++++++++++++++++++++++++ mesh2d/poly-data/lake-1-small.png | Bin 0 -> 71105 bytes mesh2d/poly-data/lake-2-small.png | Bin 0 -> 104675 bytes mesh2d/poly-data/lake.msh | 611 ++ mesh2d/poly-data/river.msh | 689 ++ mesh2d/poly-data/wavy-channel.msh | 211 + mesh2d/refine2.m | 1274 +++ mesh2d/relhfn2.m | 61 + mesh2d/setset2.m | 60 + mesh2d/smooth2.m | 645 ++ mesh2d/triang2.m | 71 + mesh2d/triarea.m | 66 + mesh2d/tribal2.m | 56 + mesh2d/tricon2.m | 155 + mesh2d/trideg2.m | 57 + mesh2d/tridemo.m | 961 ++ mesh2d/tridiv2.m | 245 + mesh2d/trihfn2.m | 98 + mesh2d/triread.m | 62 + mesh2d/triscr2.m | 36 + mesh2d/two_foci_demo.m | 74 + nshm2023_wus_v1.gps | 4993 ++++++++++ plot_inversion_results.m | 598 ++ setup_mesh.m | 164 + tools/EdgeDisp_finite.m | 44 + tools/HartigansDipSignifTest.m | 47 + tools/HartigansDipTest.m | 304 + tools/PointForce.m | 50 + tools/assign_creep_segs_mesh.m | 50 + tools/assign_data_centroids.m | 46 + tools/buildG_PointForce.m | 21 + tools/build_creepG.m | 65 + tools/cline.m | 86 + tools/cmap.mat | Bin 0 -> 422 bytes tools/correlatedGaussianNoise.m | 72 + tools/disloc3d.m | 605 ++ tools/error_ellipse.m | 278 + tools/find_triangles_data.asv | 32 + tools/find_triangles_data.m | 32 + tools/llh2local.m | 65 + tools/local2llh.m | 90 + tools/make_dispG.m | 33 + tools/make_dispG_piecewise.m | 84 + tools/make_patches_creep.m | 65 + tools/make_triangular_patch_stuff.m | 59 + tools/p_poly_dist.m | 376 + tools/p_poly_dist1.m | 61 + tools/patchfault.m | 84 + tools/plot_coast_xy.m | 15 + tools/plotpatchslip3D.m | 85 + tools/plotpatchslip3D_edge.m | 85 + tools/trigradient.m | 81 + 92 files changed, 35152 insertions(+) create mode 100755 README.txt create mode 100755 build_bodyforce_Greens.m create mode 100755 creeping_faults.txt create mode 100755 invert_bodyforce.m create mode 100755 mesh2d/LICENSE create mode 100755 mesh2d/README.md create mode 100755 mesh2d/aabb-tree/drawtree.m create mode 100755 mesh2d/aabb-tree/findball.m create mode 100755 mesh2d/aabb-tree/findline.m create mode 100755 mesh2d/aabb-tree/findtria.m create mode 100755 mesh2d/aabb-tree/lineline.m create mode 100755 mesh2d/aabb-tree/linenear.m create mode 100755 mesh2d/aabb-tree/maketree.m create mode 100755 mesh2d/aabb-tree/maprect.m create mode 100755 mesh2d/aabb-tree/mapvert.m create mode 100755 mesh2d/aabb-tree/queryset.m create mode 100755 mesh2d/aabb-tree/scantree.m create mode 100755 mesh2d/bfsgeo2.m create mode 100755 mesh2d/bfstri2.m create mode 100755 mesh2d/cdtbal1.m create mode 100755 mesh2d/cdtbal2.m create mode 100755 mesh2d/cfmtri2.m create mode 100755 mesh2d/compile.m create mode 100755 mesh2d/deltri2.m create mode 100755 mesh2d/drawscr.m create mode 100755 mesh2d/fixgeo2.m create mode 100755 mesh2d/getnan2.m create mode 100755 mesh2d/h_function.m create mode 100755 mesh2d/idxtri2.m create mode 100755 mesh2d/inpoly2.m create mode 100755 mesh2d/inpoly2_oct.cpp create mode 100755 mesh2d/isfeat2.m create mode 100755 mesh2d/lfshfn2.m create mode 100755 mesh2d/limgrad.m create mode 100755 mesh2d/limhfn2.m create mode 100755 mesh2d/mesh-file/loadmsh.m create mode 100755 mesh2d/mesh-file/savemsh.m create mode 100755 mesh2d/mesh_crack.m create mode 100755 mesh2d/minlen2.m create mode 100755 mesh2d/poly-data/airfoil.msh create mode 100755 mesh2d/poly-data/islands.msh create mode 100755 mesh2d/poly-data/lake-1-small.png create mode 100755 mesh2d/poly-data/lake-2-small.png create mode 100755 mesh2d/poly-data/lake.msh create mode 100755 mesh2d/poly-data/river.msh create mode 100755 mesh2d/poly-data/wavy-channel.msh create mode 100755 mesh2d/refine2.m create mode 100755 mesh2d/relhfn2.m create mode 100755 mesh2d/setset2.m create mode 100755 mesh2d/smooth2.m create mode 100755 mesh2d/triang2.m create mode 100755 mesh2d/triarea.m create mode 100755 mesh2d/tribal2.m create mode 100755 mesh2d/tricon2.m create mode 100755 mesh2d/trideg2.m create mode 100755 mesh2d/tridemo.m create mode 100755 mesh2d/tridiv2.m create mode 100755 mesh2d/trihfn2.m create mode 100755 mesh2d/triread.m create mode 100755 mesh2d/triscr2.m create mode 100755 mesh2d/two_foci_demo.m create mode 100755 nshm2023_wus_v1.gps create mode 100755 plot_inversion_results.m create mode 100755 setup_mesh.m create mode 100755 tools/EdgeDisp_finite.m create mode 100755 tools/HartigansDipSignifTest.m create mode 100755 tools/HartigansDipTest.m create mode 100755 tools/PointForce.m create mode 100755 tools/assign_creep_segs_mesh.m create mode 100755 tools/assign_data_centroids.m create mode 100755 tools/buildG_PointForce.m create mode 100755 tools/build_creepG.m create mode 100755 tools/cline.m create mode 100755 tools/cmap.mat create mode 100755 tools/correlatedGaussianNoise.m create mode 100755 tools/disloc3d.m create mode 100755 tools/error_ellipse.m create mode 100755 tools/find_triangles_data.asv create mode 100755 tools/find_triangles_data.m create mode 100755 tools/llh2local.m create mode 100755 tools/local2llh.m create mode 100755 tools/make_dispG.m create mode 100755 tools/make_dispG_piecewise.m create mode 100755 tools/make_patches_creep.m create mode 100755 tools/make_triangular_patch_stuff.m create mode 100755 tools/p_poly_dist.m create mode 100755 tools/p_poly_dist1.m create mode 100755 tools/patchfault.m create mode 100755 tools/plot_coast_xy.m create mode 100755 tools/plotpatchslip3D.m create mode 100755 tools/plotpatchslip3D_edge.m create mode 100755 tools/trigradient.m diff --git a/README.txt b/README.txt new file mode 100755 index 0000000..398b977 --- /dev/null +++ b/README.txt @@ -0,0 +1,20 @@ +These Matlab codes compute strain rates on a triangle mesh using a geodetic velocity field. The method is based on the manuscript K.Johnson (in prep). Body-forces in a thin elastic plate are used to compute a velocity and strain rate field computed at the centroids of the triangles in the mesh. The inversion solves for the distribution of body forces (at the triangle nodes) that best-fits the geodetic velocity field and slip rates across creeping faults (if included). You can specify a range of smoothing values (called beta) that minimize the magnitude of the body forces. + +An example fault creep rate file and geodetic data set is included for testing purposes. + +You need to run the scripts in the following order: +1. setup_mesh.m +2. build_bodyforce_Greens.m +3. invert_bodyforce.m +4. plot_inversion_results.m + +Note: outputs from 1 and 2 and 3 are saved in mat files, so you do not need to rerun all steps every time + +1. setup_mesh.m creates the triangular mesh using mesh2d. You need to specify a number of parameters in the Input Section at the top of the script. Here you specify the origin of the Cartesian coordinate system, load the GPS data file, the creeping fault data file (if you have one), and the nominal node spacing and mesh domain boundaries. You can also experiment with different levels of mesh refinement by change the value of 'refine_mesh'. + +2. build_bodyforce_Greens.m computes the Greens Functions which give strains and velocities at centroids of triangles due to unit body force vectors. The script also computes fault creep Greens Functions if you have specified creeping fault segments in the setup_mesh.m script. The only input you need to specify in this script is the name of the mat file generated in step 1. + +3. invert_bodyforce.m computes the inversion of your data for the distribution of body forces (and fault creep if that applies). You can specify a single value or a range of values for smoothing parameter, beta. The inversion loops over all beta values and computes 'num' realizations of the strain rate and velocity fields for each beta. You can specify the beta values, num, and the relative weight placed on fitting the creep rate data for creeping faults (if this applies). + +4. plot_inversion_results.m plots the result of the inversion. There are no inputs required to run this script as long as all the parameters and results are currently loaded into the Matlab workspace. + diff --git a/build_bodyforce_Greens.m b/build_bodyforce_Greens.m new file mode 100755 index 0000000..eb6829b --- /dev/null +++ b/build_bodyforce_Greens.m @@ -0,0 +1,42 @@ +clear all + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% + +%load the mat file generated in setup_mesh +load mesh_wus_creep + +%filename for saving Greens functions in mat file +saveGreens = 'test_Greens'; + +%% No need to modify below +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +%assign data to triangles +find_triangles_data + +%take median of data in a triangle and assign this value to the centroid +assign_data_centroids + + +%creep Greens functions (piece-wise linear slip gradients) +refine = 1; %creep discretization (km) + +if ~isempty(PatchEnds) + lengths = sqrt((PatchEnds(:,3)-PatchEnds(:,1)).^2 + (PatchEnds(:,4)-PatchEnds(:,2)).^2); + angle = atan2(PatchEnds(:,4)-PatchEnds(:,2),PatchEnds(:,3)-PatchEnds(:,1)); + strike=90-angle*180/pi; + centers=[(PatchEnds(:,1)+PatchEnds(:,3))./2 (PatchEnds(:,2)+PatchEnds(:,4))./2]; + pm = [lengths 10^6*ones(length(lengths),1) 10^6*ones(length(lengths),1) 90*ones(length(lengths),1) strike centers(:,1) centers(:,2)]; + [G1east_creep,G2east_creep,G1north_creep,G2north_creep,... + G1Exx_creep,G2Exx_creep,G1Exy_creep,G2Exy_creep,... + G1Eyy_creep,G2Eyy_creep] = make_dispG_piecewise(pm,tri_centroids(:,1:2),refine); +end + +nu = .25; %Poisson's ratio +[Ge_x,Ge_y,Gn_x,Gn_y,GExx_x,GExy_x,GEyy_x,GExx_y,GExy_y,GEyy_y] = buildG_PointForce(tri_centroids,nodes,nu); + +fprintf('\n \n %s \n \n', 'Saving Greens Functions') + +save(saveGreens) diff --git a/creeping_faults.txt b/creeping_faults.txt new file mode 100755 index 0000000..23f1f33 --- /dev/null +++ b/creeping_faults.txt @@ -0,0 +1,183 @@ +% fault id, lon endpoint 1, lat endpoint 1, lon endpoint 2, lat endpoint 2, creep rate (mm/yr) +32,-120.3,35.752,-120.56,36.003,15 +49,-118.92,34.824,-118.87,34.828,0.1 +49,-118.87,34.828,-118.82,34.849,0.1 +49,-118.82,34.849,-118.77,34.882,0.4 +49,-118.77,34.882,-118.67,34.931,1.8 +49,-118.67,34.931,-118.47,34.996,1.8 +49,-118.47,34.996,-118.38,35.048,1 +49,-118.38,35.048,-118.33,35.079,0.9 +49,-118.33,35.079,-118.12,35.186,0.7 +49,-118.12,35.186,-118.06,35.223,0.4 +49,-118.06,35.223,-118.01,35.271,0.2 +97,-115.17,32.47,-115.5,32.836,9 +97,-115.5,32.836,-115.54,32.88,9 +97,-115.54,32.88,-115.55,32.926,9 +98,-115.89,33.034,-115.8,33.008,3.3 +98,-115.8,33.008,-115.66,32.9,2 +98,-115.66,32.9,-115.61,32.83,1 +99,-116.2,33.207,-116.16,33.182,1.4 +99,-116.16,33.182,-116.13,33.143,2 +99,-116.13,33.143,-116.06,33.098,4 +99,-116.06,33.098,-116.01,33.03,5.5 +99,-116.01,33.03,-115.94,33.001,5.5 +101,-116.28,33.264,-116.2,33.207,0.6 +103,-116.01,32.779,-116.1,32.814,1 +103,-116.1,32.814,-116.18,32.838,1 +103,-116.18,32.838,-116.23,32.889,1 +103,-116.23,32.889,-116.26,32.931,1 +103,-116.26,32.931,-116.34,32.975,1 +104,-115.1,32.161,-115.2,32.201,2 +104,-115.2,32.201,-115.24,32.222,2 +104,-115.24,32.222,-115.29,32.243,2 +104,-115.29,32.243,-115.33,32.263,2 +104,-115.33,32.263,-115.4,32.288,2 +104,-115.4,32.288,-115.72,32.545,2 +104,-115.72,32.545,-115.81,32.592,2 +104,-115.81,32.592,-115.84,32.663,2 +104,-115.84,32.663,-115.88,32.727,2 +119,-117.5,34.263,-117.39,34.192,1 +119,-117.39,34.192,-117.33,34.101,2.5 +119,-117.33,34.101,-117.24,34.017,1 +172,-115.61,32.651,-115.38,32.467,5 +172,-115.38,32.467,-115.34,32.44,5 +172,-115.34,32.44,-115.29,32.405,5 +172,-115.29,32.405,-115.24,32.372,5 +172,-115.24,32.372,-115.16,32.314,5 +172,-115.16,32.314,-115.08,32.262,5 +172,-115.08,32.262,-115.01,32.209,5 +172,-115.01,32.209,-114.93,32.152,5 +283,-117.22,34.15,-117.07,34.093,0.2 +283,-117.07,34.093,-117.01,34.074,0.5 +283,-117.01,34.074,-116.9,34.034,0.6 +283,-116.9,34.034,-116.87,34.011,0.7 +283,-116.87,34.011,-116.82,33.959,0.8 +284,-116.43,33.848,-116.52,33.885,0.7 +284,-116.52,33.885,-116.58,33.907,0.75 +284,-116.58,33.907,-116.62,33.918,0.8 +284,-116.62,33.918,-116.69,33.944,0.85 +284,-116.69,33.944,-116.78,33.937,0.85 +284,-116.78,33.937,-116.8,33.953,0.9 +285,-120.09,35.533,-120.3,35.752,2 +287,-119.21,34.864,-119.03,34.829,0.5 +289,-117.24,34.017,-117.22,34.007,0.1 +289,-117.22,34.007,-117.09,33.905,0.1 +293,-116.91,33.736,-116.84,33.697,1.6 +293,-116.84,33.697,-116.55,33.511,0.8 +293,-116.55,33.511,-116.51,33.49,0.2 +294,-117.14,34.134,-117.08,34.117,0.4 +295,-116.25,33.788,-115.71,33.35,2.5 +341,-118.02,35.283,-117.75,35.423,0.1 +341,-117.75,35.423,-117.49,35.497,0.4 +341,-117.49,35.497,-117.16,35.568,0.5 +341,-117.16,35.568,-117.01,35.602,0.2 +401,-117.09,33.905,-116.91,33.736,1.2 +601,-122.04,37.844,-121.96,37.755,3 +601,-121.96,37.755,-121.93,37.693,6 +601,-121.93,37.693,-121.89,37.62,4 +601,-121.89,37.62,-121.83,37.51,3 +601,-121.83,37.51,-121.82,37.457,2 +602,-121.52,37.057,-121.56,37.132,13 +602,-121.56,37.132,-121.61,37.174,9 +602,-121.61,37.174,-121.67,37.252,8 +602,-121.67,37.252,-121.69,37.3,7 +602,-121.69,37.3,-121.77,37.39,5 +602,-121.77,37.39,-121.82,37.457,3 +603,-121.4,36.839,-121.42,36.894,8 +603,-121.42,36.894,-121.46,36.966,8 +603,-121.46,36.966,-121.52,37.056,13 +621,-121.4,36.839,-121.35,36.785,5 +621,-121.35,36.785,-121.3,36.739,0.5 +621,-121.3,36.739,-121.24,36.683,3 +621,-121.24,36.683,-121.13,36.578,8 +621,-121.13,36.578,-121.06,36.522,10 +621,-121.06,36.522,-120.97,36.426,10 +622,-122.09,38.044,-122.06,37.998,3.4 +622,-122.06,37.998,-122.01,37.944,3 +622,-122.01,37.944,-121.99,37.9,1.2 +623,-122.22,38.415,-122.16,38.233,3.6 +623,-122.16,38.233,-122.13,38.154,4.4 +623,-122.13,38.154,-122.11,38.109,4.4 +623,-122.11,38.109,-122.09,38.044,3.8 +636,-121.54,37.507,-121.62,37.622,2.1 +636,-121.62,37.622,-121.66,37.671,2.1 +636,-121.66,37.671,-121.77,37.788,2.1 +636,-121.77,37.788,-121.8,37.827,2.1 +636,-121.8,37.827,-121.88,37.871,2.1 +638,-121.8,37.397,-121.91,37.483,1.6 +638,-121.91,37.483,-122,37.595,4.6 +638,-122,37.595,-122.05,37.64,5.2 +638,-122.05,37.64,-122.09,37.681,4.7 +638,-122.09,37.681,-122.18,37.782,4 +639,-122.18,37.782,-122.22,37.832,3.9 +639,-122.22,37.832,-122.3,37.929,4.3 +639,-122.3,37.929,-122.41,38.057,4.2 +639,-122.41,38.057,-122.44,38.106,2.5 +639,-122.44,38.106,-122.47,38.196,1.4 +640,-122.22,38.415,-122.25,38.466,3.1 +640,-122.25,38.466,-122.24,38.555,2.8 +640,-122.24,38.555,-122.3,38.623,2.6 +640,-122.3,38.623,-122.34,38.658,2.5 +640,-122.34,38.658,-122.45,38.751,2.3 +644,-122.8,38.681,-122.96,38.816,2 +644,-122.96,38.816,-123.08,39.018,5.6 +644,-123.08,39.018,-123.2,39.2,3.5 +644,-123.2,39.2,-123.23,39.251,3 +644,-123.23,39.251,-123.26,39.294,2.2 +644,-123.26,39.294,-123.34,39.395,1.4 +644,-123.34,39.395,-123.38,39.436,2.2 +644,-123.38,39.436,-123.55,39.723,1.5 +651,-122.44,38.167,-122.49,38.207,3.5 +651,-122.49,38.207,-122.54,38.27,3 +651,-122.54,38.27,-122.64,38.363,2.2 +651,-122.64,38.363,-122.67,38.409,1.8 +651,-122.67,38.409,-122.71,38.468,1.9 +651,-122.71,38.468,-122.76,38.523,5 +651,-122.76,38.523,-122.87,38.638,4.4 +651,-122.87,38.638,-123,38.763,1.6 +657,-121.73,36.987,-121.66,36.933,2 +657,-121.66,36.933,-121.62,36.905,2 +657,-121.62,36.905,-121.52,36.835,8 +657,-121.52,36.835,-121.48,36.804,8 +658,-120.56,36.003,-120.67,36.105,25 +658,-120.67,36.105,-120.74,36.163,25 +658,-120.74,36.163,-120.83,36.243,25 +658,-120.83,36.243,-120.89,36.305,22 +658,-120.89,36.305,-121,36.416,24 +658,-121,36.416,-121.09,36.501,24 +658,-121.09,36.501,-121.17,36.574,21 +658,-121.17,36.574,-121.21,36.611,21 +658,-121.21,36.611,-121.31,36.693,16 +658,-121.31,36.693,-121.37,36.739,14 +658,-121.37,36.739,-121.48,36.804,13 +660,-122.42,37.378,-122.37,37.255,0.5 +660,-122.37,37.255,-122.32,37.164,1 +660,-122.32,37.164,-122.27,37.088,0.5 +662,-121.95,37.139,-121.85,37.108,0.35 +662,-121.85,37.108,-121.78,37.08,1.1 +662,-121.78,37.08,-121.68,37.01,1.9 +662,-121.68,37.01,-121.63,36.98,2.7 +662,-121.63,36.98,-121.52,36.913,2.9 +662,-121.52,36.913,-121.41,36.871,2.9 +665,-122.38,38.372,-122.32,38.308,0.1 +668,-122.5,38.997,-122.6,39.09,0.5 +668,-122.6,39.09,-122.65,39.152,0.2 +668,-122.76,39.216,-122.87,39.35,0.2 +668,-122.87,39.35,-122.92,39.398,0.9 +668,-122.92,39.398,-122.96,39.466,3 +668,-122.96,39.466,-123.05,39.583,6 +668,-123.05,39.583,-123.12,39.65,5 +668,-123.12,39.65,-123.22,39.703,3 +668,-123.22,39.703,-123.27,39.748,1.5 +668,-123.27,39.748,-123.29,39.805,0.5 +668,-123.29,39.805,-123.34,39.9,0.3 +668,-123.34,39.9,-123.4,39.963,0.2 +668,-123.4,39.963,-123.44,40.03,0.2 +668,-123.44,40.03,-123.42,40.077,0.1 +668,-123.42,40.077,-123.45,40.171,0.1 +677,-122.36,38.681,-122.39,38.783,2 +677,-122.39,38.783,-122.38,38.836,2 +677,-122.38,38.836,-122.41,38.884,1.8 +677,-122.41,38.884,-122.46,38.941,1.3 +677,-122.46,38.941,-122.5,38.997,0.8 +999,-124.7,40.37,-126.8,40.412,43 diff --git a/invert_bodyforce.m b/invert_bodyforce.m new file mode 100755 index 0000000..461c48b --- /dev/null +++ b/invert_bodyforce.m @@ -0,0 +1,178 @@ + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Input Section + +%load the mat file generated in build_bodyforce_Greens +%comment out line below if variables already loaded in workspace +load test_Greens + + + +%specify range of beta values (weights on minimizing body forces) +%betas = linspace(6.1579,15,15); +betas = 10; + +%number of realizations of strain rate for each beta value +num = 100; + +%relative weight on fitting creep rate data (creeping faults) +Wcreep = 1; + +%name of mat file for saving inversion results +savename = 'test_inversion'; + +%% No need to modify below +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +%% find cells with data +ind = ~isnan(Ve_centroids); + +G = [Ge_x(ind,:) Ge_y(ind,:);Gn_x(ind,:) Gn_y(ind,:)]; +d = [Ve_centroids(ind);Vn_centroids(ind)]; + +Sige = Sige_centroids(ind); +Sign = Sign_centroids(ind); + +%build creep matrix +if ~isempty(PatchEnds) + build_creepG +end + +%% regularization weights + +%build_triangle_weights -- L, to penalize magnitude of body forces +I = eye(size(Ge_x,2)); +%I = diag(w_tri); +%I = con_tri.*repmat(w_tri,1,size(con_tri,2)); +L = [I 0*I;0*I I]; + +if ~isempty(PatchEnds) + L = [L zeros(size(L,1),length(PatchCreepRates))]; + Lcreep = [zeros(length(PatchCreepRates),size(G,2)) eye(length(PatchCreepRates))]; +end + + + + +sig = [Sige;Sign]; + + + +%matrix for computing strain rates +if ~isempty(PatchEnds) + GExx = [GExx_x GExx_y GExx_creep]; + GExy = [GExy_x GExy_y GExy_creep]; + GEyy = [GEyy_x GEyy_y GEyy_creep]; +else + GExx = [GExx_x GExx_y]; + GExy = [GExy_x GExy_y]; + GEyy = [GEyy_x GEyy_y]; +end + + +%velocities +if ~isempty(PatchEnds) + GVe = [Ge_x Ge_y Geast_creep]; + GVn = [Gn_x Gn_y Gnorth_creep]; +else + GVe = [Ge_x Ge_y]; + GVn = [Gn_x Gn_y]; +end + +%build realizations + + + +Exx_realizations = []; +Exy_realizations = []; +Eyy_realizations = []; + +Ve_realizations = []; +Vn_realizations = []; + +if ~isempty(PatchEnds) + GG = [G Gcreep([ind;ind],:)]; +else + GG = G; +end +GG = GG./repmat(sig,1,size(GG,2)); + +dd = d./sig; + +for k=1:length(betas) + + disp(['Beginning ' num2str(k) ' of ' num2str(length(betas)) ' inversions']) + + beta = betas(k); + + if ~isempty(PatchEnds) + GL = sparse([GG;[beta*L;Wcreep*Lcreep]]); + d0 = sparse([dd;zeros(size(L,1),1);Wcreep*PatchCreepRates]); + else + GL = sparse([GG;beta*L]); + d0 = sparse([dd;zeros(size(L,1),1)]); + end + mhat = GL\d0; + if ~isempty(PatchEnds) + dhat = [G Gcreep([ind;ind],:)]*mhat; + else + dhat = G*mhat; + end + + %propogate errors to strain rate + if ~isempty(PatchEnds) + Gsharp = (GG'*GG+beta^2*L'*L+Wcreep^2*Lcreep'*Lcreep)\GG'; + else + Gsharp = (GG'*GG+beta^2*L'*L)\GG'; + end + Cov_bf = Gsharp*Gsharp'; %note, data covariane is excluded because Gw is weighted + + Cov_exx = GExx*Cov_bf*GExx'; + Cov_exy = GExy*Cov_bf*GExy'; + Cov_eyy = GEyy*Cov_bf*GEyy'; + + Exxs = GExx*mhat; + Exys = GExy*mhat; + Eyys = GEyy*mhat; + + + Cov_Ve = GVe*Cov_bf*GVe'; + Cov_Vn = GVn*Cov_bf*GVn'; + + Ves = GVe*mhat; + Vns = GVn*mhat; + + Mhats(:,k) = mhat; + + + %chi-squared + chi_2(k) = sum((d./sig - dhat./sig).^2)/(length(d)) + + + J = size(Cov_exx,1); + + noise = mvnrnd(zeros(1,J),full(Cov_exx),num); + Exx_realizations = [Exx_realizations repmat(Exxs,1,num) + noise']; + + noise = mvnrnd(zeros(1,J),full(Cov_exy),num); + Exy_realizations = [Exy_realizations repmat(Exys,1,num) + noise']; + + noise = mvnrnd(zeros(1,J),full(Cov_eyy),num); + Eyy_realizations = [Eyy_realizations repmat(Eyys,1,num) + noise']; + + + noise = mvnrnd(zeros(1,J),full(Cov_Ve),num); + Ve_realizations = [Ve_realizations repmat(Ves,1,num) + noise']; + noise = mvnrnd(zeros(1,J),full(Cov_Vn),num); + Vn_realizations = [Vn_realizations repmat(Vns,1,num) + noise']; + + + + save(savename,'chi_2','Mhats','Exx_realizations','Exy_realizations','Eyy_realizations','Ve_realizations','Vn_realizations') + + + disp(['Completed ' num2str(k) ' of ' num2str(length(betas)) ' inversions']) + +end + diff --git a/mesh2d/LICENSE b/mesh2d/LICENSE new file mode 100755 index 0000000..9cecc1d --- /dev/null +++ b/mesh2d/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {one line to give the program's name and a brief idea of what it does.} + Copyright (C) {year} {name of author} + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + {project} Copyright (C) {year} {fullname} + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/mesh2d/README.md b/mesh2d/README.md new file mode 100755 index 0000000..e546302 --- /dev/null +++ b/mesh2d/README.md @@ -0,0 +1,61 @@ +## `MESH2D: Delaunay-based mesh generation in MATLAB` + +`MESH2D` is a `MATLAB` / `OCTAVE`-based unstructured mesh-generator for two-dimensional polygonal geometries, providing a range of relatively simple, yet effective two-dimensional meshing algorithms. `MESH2D` includes variations on the "classical" Delaunay refinement technique, a new "Frontal"-Delaunay refinement scheme, a non-linear mesh optimisation method, and auxiliary mesh and geometry pre- and post-processing facilities. + +Algorithms implemented in `MESH2D` are "provably-good" - ensuring convergence, geometrical and topological correctness, and providing guarantees on algorithm termination and worst-case element quality bounds. Support for user-defined "mesh-spacing" functions and "multi-part" geometry definitions is also provided, allowing `MESH2D` to handle a wide range of complex domain types and user-defined constraints. `MESH2D` typically generates very high-quality output, appropriate for a variety of finite-volume and/or finite-element type applications. + +

+         + +

+ +`MESH2D` has undergone several transformations in its lifetime, having been first released in 2006 as an extension of the `DISTMESH` algorithm of Persson and Strang, before being updated in 2017 to its current form. + +As of `MESH2D release 3.0.0`, the code has been completely rewritten, and is now based on a simplified version of my `JIGSAW` mesh-generation algorithm (a `C++` code). `MESH2D` aims to provide a straightforward `MATLAB` / `OCTAVE` implementation of these Delaunay-based triangulation and mesh optimisation techniques. + +## `Code Structure` + +`MESH2D` is a pure `MATLAB` / `OCATVE` package, consisting of a core library + associated utilities: + + MESH2D:: + ├── MAIN-DIR. -- core MESH2D library functions. See REFINE2, SMOOTH2 and TRIDEMO, etc. + ├── aabb-tree -- support for fast spatial indexing, via tree-based data-structures. + ├── mesh-file -- support for mesh file text serialisation. + └── poly-data -- geometry data for example problems, image cache, etc. + +## `Starting Out` + +After downloading and unzipping the current repository, navigate to the installation directory within `MATLAB` / `OCTAVE` and run the set of examples contained in `tridemo.m`: +``` +tridemo( 0); % a very simple example to get everything started. +tridemo( 1); % investigate the impact of the "radius-edge" threshold. +tridemo( 2); % Frontal-Delaunay vs. Delaunay-refinement refinement. +tridemo( 3); % explore impact of user-defined mesh-size constraints. +tridemo( 4); % explore impact of "hill-climbing" mesh optimisations. +tridemo( 5); % assemble triangulations for "multi-part" geometries. +tridemo( 6); % assemble triangulations with "internal" constraints. +tridemo( 7); % investigate the use of "quadtree"-type refinement. +tridemo( 8); % explore use of custom, user-defined mesh-size functions. +tridemo( 9); % larger-scale problem, mesh refinement + optimisation. +tridemo(10); % medium-scale problem, mesh refinement + optimisation. +``` + +For `OCTAVE` users, performance can be improved by compiling elements of the `MESH2D` library. Running `compile.m` within the `MESH2D` installation directory will complete the build process (note: requires a `-dev` installation of `OCTAVE`). + +## `Attribution` + +If you make use of `MESH2D` in your work, please include a reference to the following: +```` +@misc{MESH2D, + title = {MESH2D: Delaunay-based mesh generation in MATLAB}, + author = {Darren Engwirda}, + note = {https://github.com/dengwirda/mesh2d}, + year = {2017}, +} +```` + +## `References!` + +If you make use of `MESH2D` please include a reference to the following! `MESH2D` is designed to provide a simple and easy-to-understand implementation of Delaunay-based mesh-generation techniques. For a much more advanced, and fully three-dimensional mesh-generation library, see the `JIGSAW` package. `MESH2D` makes use of the `AABBTREE` and `FINDTRIA` packages to compute efficient spatial queries and intersection tests. + +`[1]` - Darren Engwirda, Locally-optimal Delaunay-refinement and optimisation-based mesh generation, Ph.D. Thesis, School of Mathematics and Statistics, The University of Sydney, September 2014. diff --git a/mesh2d/aabb-tree/drawtree.m b/mesh2d/aabb-tree/drawtree.m new file mode 100755 index 0000000..c22dd28 --- /dev/null +++ b/mesh2d/aabb-tree/drawtree.m @@ -0,0 +1,82 @@ +function drawtree(tr,varargin) +%DRAWTREE draw an aabb-tree generated using MAKETREE. +% DRAWTREE(TR) draws the tree TR for cases in R^2 and R^3. +% +% See also MAKETREE + +% Darren Engwirda : 2014 -- +% Email : engwirda@mit.edu +% Last updated : 18/12/2014 + +%---------------------------------------------- basic checks + if (~isa(tr,'struct') || ... + ~isfield(tr,'xx') || ... + ~isfield(tr,'ii') || ... + ~isfield(tr,'ll') ) + error('drawtree:incorrectInputClass', ... + 'Incorrect aabb-tree.') ; + end + +%----------------------------------------- find "leaf" nodes + lf = ~cellfun('isempty', tr.ll) ; + + fc = [.95,.95,.55] ; + ec = [.15,.15,.15] ; + +%-------------------------- draw all "leaf" nodes as patches + switch (size(tr.xx,2)) + case 4 +%----------------------------------------------- tree in R^2 + np = numel(find(lf)); + %------------------------------------------------- nodes + pp = [tr.xx(lf,1),tr.xx(lf,2) + tr.xx(lf,3),tr.xx(lf,2) + tr.xx(lf,3),tr.xx(lf,4) + tr.xx(lf,1),tr.xx(lf,4) + ] ; + %------------------------------------------------- faces + bb = [(1:np)'+np*0,(1:np)'+np*1,... + (1:np)'+np*2,(1:np)'+np*3 + ] ; + + case 6 +%----------------------------------------------- tree in R^3 + np = numel(find(lf)); + %------------------------------------------------- nodes + pp = [tr.xx(lf,1),tr.xx(lf,2),tr.xx(lf,3) + tr.xx(lf,4),tr.xx(lf,2),tr.xx(lf,3) + tr.xx(lf,4),tr.xx(lf,5),tr.xx(lf,3) + tr.xx(lf,1),tr.xx(lf,5),tr.xx(lf,3) + tr.xx(lf,1),tr.xx(lf,2),tr.xx(lf,6) + tr.xx(lf,4),tr.xx(lf,2),tr.xx(lf,6) + tr.xx(lf,4),tr.xx(lf,5),tr.xx(lf,6) + tr.xx(lf,1),tr.xx(lf,5),tr.xx(lf,6) + ] ; + %------------------------------------------------- faces + bb = [(1:np)'+np*0,(1:np)'+np*1,... + (1:np)'+np*2,(1:np)'+np*3 + (1:np)'+np*4,(1:np)'+np*5,... + (1:np)'+np*6,(1:np)'+np*7 + (1:np)'+np*0,(1:np)'+np*3,... + (1:np)'+np*7,(1:np)'+np*4 + (1:np)'+np*3,(1:np)'+np*2,... + (1:np)'+np*6,(1:np)'+np*7 + (1:np)'+np*2,(1:np)'+np*1,... + (1:np)'+np*5,(1:np)'+np*6 + (1:np)'+np*1,(1:np)'+np*0,... + (1:np)'+np*4,(1:np)'+np*5 + ] ; + + otherwise +%--------------------------- what to do with a tree in R^d!? + error('scantree:unsupportedDimension', ... + 'Unsupported tree dimensionality.') ; + end + + patch('faces',bb,'vertices',pp,'facecolor',fc,... + 'edgecolor',ec,'facealpha',+.2); + +end + + + diff --git a/mesh2d/aabb-tree/findball.m b/mesh2d/aabb-tree/findball.m new file mode 100755 index 0000000..613c385 --- /dev/null +++ b/mesh2d/aabb-tree/findball.m @@ -0,0 +1,135 @@ +function [bp,bj,tr] = findball(bb,pp,varargin) +%FINDBALL spatial queries for collections of d-balls. +% [BP,BI] = FINDBALL(BB,PI) finds the set of d-dim. balls +% that intersect with a given spatial query. Balls are sp- +% ecified as a set of centres BB(:,1:ND) and (squared) +% radii BB(:,ND+1), where ND is the number of dimensions. +% +% A set of intersecting balls is returned for each query +% point in PI, such that the II-th point is associated +% with the balls BI(BP(II,1):BP(II,2)). Unenclosed points +% have BP(II,1) == 0. +% +% [BP,BI,TR] = FINDBALL(BB,PI) additionally returns the +% supporting aabb-tree used internally to compute the que- +% ry. If the underlying collection BB is static, the tree +% TR may be passed to subsequent calls, via [BP,BI,TR] = +% FINDBALL(BB,PI,TR). This syntax may lead to improved pe- +% rformance, especially when the number of balls is large +% w.r.t. the number of query points. Note that in such ca- +% ses the distribution of underlying balls is NOT permitt- +% ed to change between calls, or erroneous results may be +% returned. Additional parameters used to control the cre- +% ation of the underlying aabb-tree may also be passed via +% [...] = FINDBALL(BB,PI,TR,OP). See MAKETREE for additio- +% nal information. +% +% See also MAKETREE, FINDTRIA + +% Please see the following for additional information: +% +% Darren Engwirda, "Locally-optimal Delaunay-refinement & +% optimisation-based mesh generation". Ph.D. Thesis, Scho- +% ol of Mathematics and Statistics, Univ. of Sydney, 2014: +% http://hdl.handle.net/2123/13148 + +% Darren Engwirda : 2017 -- +% Email : engwirda@mit.edu +% Last updated : 27/04/2017 + + bp = []; bj = []; tr = []; op = []; + +%---------------------------------------------- basic checks + if (nargin < +2 || nargin > +4) + error('findball:incorrectNumInputs', ... + 'Incorrect number of inputs.'); + end + + if (nargin >= +3), tr = varargin{1}; end + if (nargin >= +4), op = varargin{2}; end + +%------------------------------ quick return on empty inputs + if (isempty(bb)), return; end + +%---------------------------------------------- basic checks + if (~isnumeric(bb) || ~isnumeric(pp)) + error('findball:incorrectInputClass', ... + 'Incorrect input class.') ; + end + + if (ndims(bb) ~= +2 || size(bb,2) < +3 ) + error('findball:incorrectDimensions', ... + 'Incorrect input dimensions.'); + end + if (ndims(pp) ~= +2 || ... + size(bb,2) ~= size(pp,2)+1) + error('findball:incorrectDimensions', ... + 'Incorrect input dimensions.'); + end + + if (~isempty(tr) && ~isstruct(tr) ) + error('findball:incorrectInputClass', ... + 'Incorrect input class.') ; + end + if (~isempty(op) && ~isstruct(op) ) + error('findball:incorrectInputClass', ... + 'Incorrect input class.') ; + end + + if (isempty(tr)) +%------------------------------ compute aabb-tree for d-ball + nd = size(pp,2) ; + rs = sqrt(bb(:,nd+1)); + rs = rs(:,ones(1,nd)); + ab =[bb(:,1:nd)-rs, ... % compute aabb-tree + bb(:,1:nd)+rs]; + + tr = maketree(ab,op) ; + end + +%------------------------------ compute tree-to-vert mapping + tm = mapvert (tr,pp); + +%------------------------------ compute vert-to-ball queries + [bi,ip,bj] = ... + queryset (tr,tm,@ballkern,pp,bb) ; + +%------------------------------ re-index onto full obj. list + bp = zeros(size(pp,1),2) ; + bp( :,2) = -1 ; + + if (isempty(bi)), return ; end + + bp(bi,:) = ip ; + +end + +function [ip,ib] = ballkern(pk,bk,pp,bb) +%BALLKERN d-dim. ball-vert intersection kernel routine. + + mp = length(pk); + mb = length(bk); + + nd = size(pp,2); + + %-------------------------- push ball/vert onto n*m tile + pk = pk.' ; + + pk = pk(ones(mb,1),:); + pk = pk(:); + bk = bk(:,ones(1,mp)); + bk = bk(:); + + %-------------------------- compute O(n*m) loc. distance + dd = ... + sum((pp(pk,+1:nd)-bb(bk,+1:nd)).^2,2); + + in = dd<=bb(bk,nd+1) ; + + ip = pk(in) ; + ib = bk(in) ; + +end + + + diff --git a/mesh2d/aabb-tree/findline.m b/mesh2d/aabb-tree/findline.m new file mode 100755 index 0000000..55e8575 --- /dev/null +++ b/mesh2d/aabb-tree/findline.m @@ -0,0 +1,161 @@ +function [lp,lj,tr] = findline(pa,pb,pp,varargin) +%FINDLINE "point-on-line" queries in d-dimensional space. +% [LP,LI] = FINDLINE(PA,PB,PI) finds the set of d-dimensi- +% onal line-segments that intersect with a given spatial +% query. Lines are specified as a set of endpoints [PA,PB] +% where both PA and PB are NL-by-ND arrays of coordinates, +% where ND is the number of dimensions. +% +% A set of intersecting lines is returned for each query +% point in PI, such that the II-th point is associated +% with the lines LI(LP(II,1):LP(II,2)). Unenclosed points +% have LP(II,1) == 0. +% +% [LP,LI,TR] = FINDLINE(PA,PB,PI) additionally returns the +% supporting aabb-tree used internally to compute the que- +% ry. If the underlying collection [PA,PB] is static, the +% tree TR may be passed to subsequent calls, via +% [LP,LI,TR] = FINDLINE(PA,PB,PI,TR). This syntax may lead +% to improved performance, especially when the number of +% lines is large w.r.t. the number of query points. Note +% that in such cases the distribution of underlying lines +% is NOT permitted to change between calls, or erroneous +% results may be returned. Additional parameters used to +% govern the creation of the underlying aabb-tree may be +% passed via [...] = FINDLINE(...,TR,OP). See MAKETREE for +% additional information. +% +% See also MAKETREE, FINDTRIA, FINDBALL, LINELINE + +% Please see the following for additional information: +% +% Darren Engwirda, "Locally-optimal Delaunay-refinement & +% optimisation-based mesh generation". Ph.D. Thesis, Scho- +% ol of Mathematics and Statistics, Univ. of Sydney, 2014: +% http://hdl.handle.net/2123/13148 + +%----------------------------------------------------------- +% Darren Engwirda : 2017 -- +% Email : de2363@columbia.edu +% Last updated : 02/08/2017 +%----------------------------------------------------------- + + lp = []; lj = []; tr = []; op = []; + +%---------------------------------------------- basic checks + if (nargin < +3 || nargin > +5) + error('findline:incorrectNumInputs', ... + 'Incorrect number of inputs.'); + end + + if (nargin >= +4), tr = varargin{1}; end + if (nargin >= +5), op = varargin{2}; end + +%------------------------------ quick return on empty inputs + if (isempty(pa)), return; end + if (isempty(pb)), return; end + +%---------------------------------------------- basic checks + if (~isnumeric(pa) || ~isnumeric(pb) || ... + ~isnumeric(pp) ) + error('findline:incorrectInputClass', ... + 'Incorrect input class.') ; + end + + if (ndims(pa) ~= +2 || size(pa,2) < +2 || ... + ndims(pb) ~= +2 || size(pb,2) < +2 ) + error('findline:incorrectDimensions', ... + 'Incorrect input dimensions.'); + end + if (ndims(pp) ~= +2 || ... + size(pa,1) ~= size(pb,1) || ... + size(pa,2) ~= size(pp,2) || ... + size(pb,2) ~= size(pp,2) ) + error('findline:incorrectDimensions', ... + 'Incorrect input dimensions.'); + end + + if (~isempty(tr) && ~isstruct(tr) ) + error('findline:incorrectInputClass', ... + 'Incorrect input class.') ; + end + if (~isempty(op) && ~isstruct(op) ) + error('findline:incorrectInputClass', ... + 'Incorrect input class.') ; + end + + if (isempty(tr)) +%------------------------------ compute aabb-tree for d-line + nd = size(pp,2) ; + nl = size(pa,1) ; + + ab = zeros(nl,nd*2); % compute aabb-tree + for ax = +1:nd + ab(:,ax+nd*0) = min(pa(:,ax), ... + pb(:,ax)) ; + ab(:,ax+nd*1) = max(pa(:,ax), ... + pb(:,ax)) ; + end + tr = maketree(ab,op) ; + end + +%------------------------------ compute tree-to-vert mapping + tm = mapvert (tr,pp); + +%------------------------------ compute intersection rel-tol + p0 = min([pa; pb],[],+1) ; + p1 = max([pa; pb],[],+1) ; + + zt = max(p1-p0) * eps^.8 ; + +%------------------------------ compute vert-to-line queries + [li,ip,lj] = queryset( ... + tr,tm,@linekern,pp,pa,pb,zt) ; + +%------------------------------ re-index onto full obj. list + lp = zeros(size(pp,1),2) ; + lp( :,2) = -1 ; + + if (isempty(li)), return ; end + + lp(li,:) = ip ; + +end + +function [ip,il] = linekern(pk,lk,pp,pa,pb,zt) +%LINEKERN d-dim. node//line intersection kernel routine. + + mp = length(pk); + ml = length(lk); + + %-------------------------- push line/vert onto n*m tile + pk = pk.' ; + + pk = pk(ones(ml,1),:); + pk = pk(:); + lk = lk(:,ones(1,mp)); + lk = lk(:); + + %-------------------------- compute O(n*m) intersections + mm = (pa(lk,:)+pb(lk,:)) * +.5 ; + DD = (pb(lk,:)-pa(lk,:)) * +.5 ; + + mp = mm-pp(pk,:) ; + + tt =-sum(mp.*DD,2)./ ... + sum(DD.*DD,2) ; + tt = max(min(tt,+1.),-1.); + + nd = size(pp,2); + + qq = mm + repmat(tt,1,nd) .* DD; + + on = ... + sum((pp(pk,:)-qq).^2,2) <= zt^2; + + ip = pk(on) ; + il = lk(on) ; + +end + + diff --git a/mesh2d/aabb-tree/findtria.m b/mesh2d/aabb-tree/findtria.m new file mode 100755 index 0000000..e9211d3 --- /dev/null +++ b/mesh2d/aabb-tree/findtria.m @@ -0,0 +1,325 @@ +function [tp,tj,tr] = findtria(pp,tt,pj,varargin) +%FINDTRIA spatial queries for collections of d-simplexes. +% [TP,TI] = FINDTRIA(PP,TT,PJ) finds the set of simple- +% xes that intersect with a given spatial query. Simplexes +% are specified via the vertex array PP = [X1,X2,...,XN] +% and the indexing array TT = [T1,T2,...,TM], such that +% the vertex positions for the II-th simplex are the poin- +% ts [PP(TT(II,1),:),PP(TT(II,2),:),...,PP(TT(II,M),:)]. +% +% Simplexes are NOT required to form a conforming triangu- +% lation. Specifically, non-delaunay, non-convex and even +% overlapping configurations are supported. Multiple matc- +% hes may be returned if the collection is overlapping. +% +% A set of intersecting simplexes is returned for each +% query point in PI, such that the II-th point is associa- +% ted with the simplexes TI(TP(II,1):TP(II,2)). Unenclosed +% points have TP(II,1)==+0. +% +% In general, query points may be matched to multiple sim- +% plexes, but in cases when single matches are guaranteed, +% or if only a single match is desired, the following ret- +% urns a singly-matched indexing array that is consistent +% with MATLAB's existing point-location routines: +% +% [tp,tj] = findtria(pp,tt,pj) ; +% ti = nan(size(tp,1),1); +% in = tp(:,1) > +0; +% ti(in) = tj(tp(in,+1)); +% +% [TP,TI,TR] = FINDTRIA(PP,TT,PI) additionally returns the +% supporting aabb-tree used internally to compute the que- +% ry. If the underlying collection [PP,TT] is static, the +% tree TR may be passed to subsequent calls, via [...] = +% FINDTRIA(PP,TT,PJ,TR). This syntax may lead to improved +% performance, especially when the number of simplexes +% is large w.r.t. the number of query points. Note that in +% such cases the underlying simplexes are NOT permitted to +% change between calls, or erroneous results may be retur- +% ned. Additional parameters used to control the creation +% of the underlying aabb-tree may also be passed via [...] +% = FINDTRIA(PP,TT,PI,TR,OP). See MAKETREE for additional +% information. +% +% See also MAKETREE, QUERYSET + +% Please see the following for additional information: +% +% Darren Engwirda, "Locally-optimal Delaunay-refinement & +% optimisation-based mesh generation". Ph.D. Thesis, Scho- +% ol of Mathematics and Statistics, Univ. of Sydney, 2014: +% http://hdl.handle.net/2123/13148 + +% Darren Engwirda : 2014 -- +% Email : de2363@columbia.edu +% Last updated : 05/07/2017 + + tp = []; tj = []; tr = []; op = []; + +%---------------------------------------------- basic checks + if (nargin < +3 || nargin > +6) + error('queryset:incorrectNumInputs', ... + 'Incorrect number of inputs.'); + end + +%------------------------------- fast return on empty inputs + if (isempty(pj)), return; end + +%------------------------------- extract user-defined inputs + if (nargin >= +4), tr = varargin{1}; end + if (nargin >= +5), op = varargin{2}; end + +%---------------------------------------------- basic checks + if (~isnumeric(pp) || ~isnumeric(tt) || ... + ~isnumeric(pj) ) + error('findtria:incorrectInputClass', ... + 'Incorrect input class.') ; + end + +%---------------------------------------------- basic checks + if (ndims(pp) ~= +2 || size(pp,2) < +2 ... + || size(pp,2) > size(tt,2)) + error('findtria:incorrectDimensions', ... + 'Incorrect input dimensions.'); + end + if (ndims(tt) ~= +2 || size(tt,2) < +3) + error('findtria:incorrectDimensions', ... + 'Incorrect input dimensions.'); + end + +%------------------------------- test query array for VERT's + if (ndims(pj) ~= +2 || ... + size(pj,2) ~= size(pp,2) ) + error('findtria:incorrectDimensions', ... + 'Incorrect input dimensions.'); + end + +%---------------------------------------------- basic checks + if (~isempty(tr) && ~isstruct(tr) ) + error('findtria:incorrectInputClass', ... + 'Incorrect input class.') ; + end + if (~isempty(op) && ~isstruct(op) ) + error('findtria:incorrectInputClass', ... + 'Incorrect input class.') ; + end + + if (isempty(tr)) +%------------------------------ compute aabb's for triangles + bi = pp(tt(:,1),:); bj = pp(tt(:,1),:); + for ii = 2 : size(tt,2) + bi = min(bi,pp(tt(:,ii),:)) ; + bj = max(bj,pp(tt(:,ii),:)) ; + end + bb = [bi,bj]; + + tr = maketree(bb); % compute aabb-tree + end + +%------------------------------ compute tree-to-vert mapping + tm = mapvert (tr,pj); + +%------------------------------ compute vert-to-tria queries + [ti,ip,tj] = ... + queryset (tr,tm,@triakern,pj,pp,tt) ; + +%------------------------------ re-index onto full obj. list + tp = zeros(size(pj,1),2); + tp( :,2) = -1 ; + + if (isempty(ti)), return; end + + tp(ti,:) = ip ; + +end + +function [ip,it] = triakern(pk,tk,pi,pp,tt) +%TESTPTS compute the "point-tria" matches within a tile. + + mp = length(pk); mt = length(tk); + + switch (size(tt,2)) + case 3 + %------------------------------------ pts in 2-simplexes + pk = pk.' ; + pk = pk(ones(mt,1),:); + pk = pk(:); + tk = tk(:,ones(1,mp)); + tk = tk(:); + + in = intria2( ... + pp,tt(tk,:),pi(pk,:)); + + ip = pk(in) ; + it = tk(in) ; + + case 4 + %------------------------------------ pts in 3-simplexes + pk = pk.' ; + pk = pk(ones(mt,1),:); + pk = pk(:); + tk = tk(:,ones(1,mp)); + tk = tk(:); + + in = intria3( ... + pp,tt(tk,:),pi(pk,:)); + + ip = pk(in) ; + it = tk(in) ; + + otherwise + %------------------------------------ pts in d-simplexes + [il,jl] = intrian( ... + pp,tt(tk,:),pi(pk,:)); + + ip = pk(il(:)); + it = tk(jl(:)); + + end + +end + +function [in] = intria2(pp,tt,pi) +%INTRIA2 returns TRUE for points enclosed by 2-simplexes. + + t1 = tt(:,1); t2 = tt(:,2) ; + t3 = tt(:,3); + + vi = pp(t1,:) - pi ; + vj = pp(t2,:) - pi ; + vk = pp(t3,:) - pi ; + +%------------------------------- compute sub-volume about PI + aa = zeros(size(tt,1),3) ; + aa(:,1) =(vi(:,1).*vj(:,2) - ... + vj(:,1).*vi(:,2) ) ; + aa(:,2) =(vj(:,1).*vk(:,2) - ... + vk(:,1).*vj(:,2) ) ; + aa(:,3) =(vk(:,1).*vi(:,2) - ... + vi(:,1).*vk(:,2) ) ; + +%------------------------------- scale tolerance with volume + vi = pp(t2,:)-pp(t1,:); + vj = pp(t3,:)-pp(t1,:); + + rt = vi(:,1).*vj(:,2) ... + - vi(:,2).*vj(:,1) ; + rt = abs(rt) ; + +%------------------------------- PI is internal if same sign + rt = eps^.8 * (.5 * rt) .^ 2 ; + in = aa(:,1).*aa(:,2) >= -rt ... + & aa(:,2).*aa(:,3) >= -rt ... + & aa(:,3).*aa(:,1) >= -rt ; + +end + +function [in] = intria3(pp,tt,pi) +%INTRIA3 returns TRUE for points enclosed by 3-simplexes. + + t1 = tt(:,1); t2 = tt(:,2) ; + t3 = tt(:,3); t4 = tt(:,4) ; + + v1 = pi - pp(t1,:) ; + v2 = pi - pp(t2,:) ; + v3 = pi - pp(t3,:) ; + v4 = pi - pp(t4,:) ; + +%------------------------------- compute sub-volume about PI + aa = zeros(size(tt,1),4) ; + aa(:,1) = ... + +v1(:,1).*(v2(:,2).*v3(:,3) - ... + v2(:,3).*v3(:,2) ) ... + -v1(:,2).*(v2(:,1).*v3(:,3) - ... + v2(:,3).*v3(:,1) ) ... + +v1(:,3).*(v2(:,1).*v3(:,2) - ... + v2(:,2).*v3(:,1) ) ; + aa(:,2) = ... + +v1(:,1).*(v4(:,2).*v2(:,3) - ... + v4(:,3).*v2(:,2) ) ... + -v1(:,2).*(v4(:,1).*v2(:,3) - ... + v4(:,3).*v2(:,1) ) ... + +v1(:,3).*(v4(:,1).*v2(:,2) - ... + v4(:,2).*v2(:,1) ) ; + aa(:,3) = ... + +v2(:,1).*(v4(:,2).*v3(:,3) - ... + v4(:,3).*v3(:,2) ) ... + -v2(:,2).*(v4(:,1).*v3(:,3) - ... + v4(:,3).*v3(:,1) ) ... + +v2(:,3).*(v4(:,1).*v3(:,2) - ... + v4(:,2).*v3(:,1) ) ; + aa(:,4) = ... + +v3(:,1).*(v4(:,2).*v1(:,3) - ... + v4(:,3).*v1(:,2) ) ... + -v3(:,2).*(v4(:,1).*v1(:,3) - ... + v4(:,3).*v1(:,1) ) ... + +v3(:,3).*(v4(:,1).*v1(:,2) - ... + v4(:,2).*v1(:,1) ) ; + +%------------------------------- scale tolerance with volume + v1 = pp(t4,:)-pp(t1,:); + v2 = pp(t4,:)-pp(t2,:); + v3 = pp(t4,:)-pp(t3,:); + + rt = abs ( ... + +v1(:,1).*(v2(:,2).*v3(:,3) - ... + v2(:,3).*v3(:,2) ) ... + -v1(:,2).*(v2(:,1).*v3(:,3) - ... + v2(:,3).*v3(:,1) ) ... + +v1(:,3).*(v2(:,1).*v3(:,2) - ... + v2(:,2).*v3(:,1) ) ) ; + +%------------------------------- PI is internal if same sign + rt = eps^.8 * (rt / 6.) .^ 2 ; + in = aa(:,1).*aa(:,2) >= -rt ... + & aa(:,1).*aa(:,3) >= -rt ... + & aa(:,1).*aa(:,4) >= -rt ... + & aa(:,2).*aa(:,3) >= -rt ... + & aa(:,2).*aa(:,4) >= -rt ... + & aa(:,3).*aa(:,4) >= -rt ; + +end + +function [ii,jj] = intrian(pp,tt,pi) +%INTRIAN return a list of points and enclosing "n"-simplexes. + + [np,pd] = size(pi); + [nt,td] = size(tt); + +%---------------- coefficient matrices for barycentric coord. + mm = zeros(pd,pd,nt); + for id = +1 : pd + for jd = +1 : pd + mm(id,jd,:) = pp(tt(:,jd),id) - ... + pp(tt(:,td),id) ; + end + end + +%---------------- solve linear systems for barycentric coord. + xx = zeros(pd,np,nt); + vp = zeros(pd,np,+1); + for ti = +1 : nt + %---------------------------------------- form rhs coeff. + for id = +1 : pd + vp(id,:) = ... + pi(:,id) - pp(tt(ti,td),id) ; + end + %---------------------------- actually faster to call LU- + [ll,uu] = lu(mm(:,:,ti)); + %---------------------------- and then forward/back solve + xx(:,:,ti) = uu\(ll\vp); + end + +%-------------------- PI is internal if coord. have same sign + in = all(xx >= +.0-(eps^.8),1) & ... + sum(xx,1) <= +1.+(eps^.8) ; + +%-------------------- find lists of matching points/simplexes + [ii,jj] = ... + find(reshape(in, [np,nt])) ; + +end + + + diff --git a/mesh2d/aabb-tree/lineline.m b/mesh2d/aabb-tree/lineline.m new file mode 100755 index 0000000..bdbc169 --- /dev/null +++ b/mesh2d/aabb-tree/lineline.m @@ -0,0 +1,163 @@ +function [lp,lj,tr] = lineline(pa,pb,pc,pd,varargin) +%LINELINE intersection between lines in d-dimensional space. +% [LP,LI] = LINELINE(PA,PB,PC,PD) finds intersections bet- +% ween line segments in d-dimensions. Lines are specified +% as a set of endpoints [PA,PB] and [PC,PD] where PA, PB, +% PC and PD are NL-by-ND arrays of coordinates, where ND +% is the number of dimensions. +% +% A set of intersecting lines from [PA,PB] is returned for +% each query line in [PC,PB], such that the II-th query +% line is associated with the lines LI(LP(II,1):LP(II,2)). +% Lines without intersections have LP(II,1) == 0. +% +% [LP,LI,TR] = LINELINE(PA,PB,PC,PD) additionally returns +% the supporting aabb-tree used internally to compute the +% query. If the underlying collection [PA,PB] is static, +% the tree TR may be recycled for subsequent calls, using +% [LP,LI,TR] = FINDLINE(PA,PB,PC,PD,TR). This syntax may +% lead to improved performance, especially when the number +% of lines is large w.r.t. the number of query lines. Note +% that in such cases the distribution of underlying lines +% is NOT permitted to change between calls, or erroneous +% results may be returned. Additional parameters used to +% govern the creation of the underlying aabb-tree may be +% passed via [...] = LINELINE(...,TR,OP). See MAKETREE for +% additional information. +% +% See also MAKETREE, FINDTRIA, FINDBALL, FINDLINE + +% Please see the following for additional information: +% +% Darren Engwirda, "Locally-optimal Delaunay-refinement & +% optimisation-based mesh generation". Ph.D. Thesis, Scho- +% ol of Mathematics and Statistics, Univ. of Sydney, 2014: +% http://hdl.handle.net/2123/13148 + +%----------------------------------------------------------- +% Darren Engwirda : 2017 -- +% Email : de2363@columbia.edu +% Last updated : 13/06/2017 +%----------------------------------------------------------- + + lp = []; lj = []; tr = []; op = []; + +%---------------------------------------------- basic checks + if (nargin < +4 || nargin > +6) + error('lineline:incorrectNumInputs', ... + 'Incorrect number of inputs.'); + end + + if (nargin >= +5), tr = varargin{1}; end + if (nargin >= +6), op = varargin{2}; end + +%------------------------------ quick return on empty inputs + if (isempty(pa)), return ; end + if (isempty(pb)), return ; end + if (isempty(pc)), return ; end + if (isempty(pd)), return ; end + +%---------------------------------------------- basic checks + if (~isnumeric(pa) || ~isnumeric(pb) || ... + ~isnumeric(pc) || ~isnumeric(pd) ) + error('lineline:incorrectInputClass', ... + 'Incorrect input class.') ; + end + + if (ndims(pa) ~= +2 || size(pa,2) < +2 || ... + ndims(pb) ~= +2 || size(pb,2) < +2 || ... + ndims(pc) ~= +2 || size(pc,2) < +2 || ... + ndims(pd) ~= +2 || size(pd,2) < +2 ) + error('lineline:incorrectDimensions', ... + 'Incorrect input dimensions.'); + end + if (size(pa,1) ~= size(pb,1) || ... + size(pc,1) ~= size(pd,1) ) + error('lineline:incorrectDimensions', ... + 'Incorrect input dimensions.'); + end + + if (~isempty(tr) && ~isstruct(tr) ) + error('lineline:incorrectInputClass', ... + 'Incorrect input class.') ; + end + if (~isempty(op) && ~isstruct(op) ) + error('lineline:incorrectInputClass', ... + 'Incorrect input class.') ; + end + + nd = size(pa,2); + nl = size(pa,1); + ml = size(pc,1); + + if (isempty(tr)) +%------------------------------ compute aabb-tree for d-line + ab = zeros(nl,nd*+2) ; + for ax = +1:nd % compute aabb's + ab(:,ax+nd*0) = min(pa(:,ax), ... + pb(:,ax)) ; + ab(:,ax+nd*1) = max(pa(:,ax), ... + pb(:,ax)) ; + end + tr = maketree(ab,op) ; + + end + +%------------------------------ compute tree-to-vert mapping + ab = zeros(ml,nd*+2) ; + for ax = +1:nd % compute aabb's + ab(:,ax+nd*0) = min(pc(:,ax), ... + pd(:,ax)) ; + ab(:,ax+nd*1) = max(pc(:,ax), ... + pd(:,ax)) ; + end + tm = maprect (tr,ab) ; + +%------------------------------ compute intersection rel-tol + p0 = min([pa; pb],[],+1) ; + p1 = max([pa; pb],[],+1) ; + + zt = max(p1-p0) * eps^.8 ; + +%------------------------------ compute line-to-line queries + [li,ip,lj] = queryset( ... + tr,tm,@linekern,pa,pb,pc,pd,zt) ; + +%------------------------------ re-index onto full obj. list + lp = zeros(size(pc,1),2) ; + lp( :,2) = -1 ; + + if (isempty(li)), return ; end + + lp(li,:) = ip ; + +end + +function [i1,i2] = linekern(l1,l2,pa,pb,pc,pd,zt) +%LINEKERN d-dim. line//line intersection kernel routine. + + m1 = length(l1) ; + m2 = length(l2) ; + + %-------------------------- push line/vert onto n*m tile + l1 = l1.' ; + + l1 = l1(ones(m2,1),:) ; + l1 = l1(:); + l2 = l2(:,ones(1,m1)) ; + l2 = l2(:); + + %-------------------------- compute O(n*m) intersections + [ok,pp,qq] = linenear( ... + pa(l1,:),pb(l1,:), ... + pc(l2,:),pd(l2,:)) ; + + ix = ... + sum((pp-qq).^2,2)<=zt^2 ; + + i1 = l1(ix) ; + i2 = l2(ix) ; + +end + + diff --git a/mesh2d/aabb-tree/linenear.m b/mesh2d/aabb-tree/linenear.m new file mode 100755 index 0000000..a728778 --- /dev/null +++ b/mesh2d/aabb-tree/linenear.m @@ -0,0 +1,51 @@ +function [ok,pp,qq,tp,tq] = linenear(pa,pb,pc,pd) +%LINENEAR calc. the nearest points on line segments embedded +%in d-dimensions. + +%----------------------------------------------------------- +% Darren Engwirda : 2017 -- +% Email : de2363@columbia.edu +% Last updated : 13/06/2017 +%----------------------------------------------------------- + + m1 = (pa+pb) * +.5 ; + D1 = (pb-pa) * +.5 ; + + m2 = (pc+pd) * +.5 ; + D2 = (pd-pc) * +.5 ; + + r1 = sum(m2.*D1,2) ... + - sum(m1.*D1,2) ; + r2 = sum(m1.*D2,2) ... + - sum(m2.*D2,2) ; + + A1 = sum(D1.*D1,2) ; + A2 =-sum(D1.*D2,2) ; + A3 =-sum(D1.*D2,2) ; + A4 = sum(D2.*D2,2) ; + + dd = A1.*A4 - A2.*A3 ; + + tp = A4.*r1 - A2.*r2 ; + tq =-A3.*r1 + A1.*r2 ; + + rt = max(abs(tp),abs(tq)) ; + rt = rt * eps ^ .8 ; + + ok = abs(dd) > +rt ; + + tp(~ok) = +0. ; + tq(~ok) = +0. ; + + tp(ok) = tp(ok) ./ dd(ok) ; + tq(ok) = tq(ok) ./ dd(ok) ; + + tp = max(min(tp,+1.),-1.) ; + tq = max(min(tq,+1.),-1.) ; + + pp = m1 + tp .* D1 ; + qq = m2 + tq .* D2 ; + +end + + diff --git a/mesh2d/aabb-tree/maketree.m b/mesh2d/aabb-tree/maketree.m new file mode 100755 index 0000000..d71c74f --- /dev/null +++ b/mesh2d/aabb-tree/maketree.m @@ -0,0 +1,311 @@ +function [tr] = maketree(rp,varargin) +%MAKETREE assemble an AABB search tree for a collection of +%(hyper-)rectangles. +% [TR] = MAKETREE(RP) returns an axis-aligned bounding-box +% (AABB) tree for a collection of d-rectangles embedded in +% R^d. The rectangles are defined as an NR-by-NDIM*2 array +% of min/max coordinates RP = [PMIN,PMAX], where PMIN = +% [A1,A2,...,ANDIM] and PMAX = [B1,B2,...,BNDIM] are the +% minimum/maximum coordinates associated with each rectan- +% gle. +% +% The resulting tree is returned as a structure containing +% an NT-by-NDIM*2 array of tree-node coordinates TR.XX = +% [PMIN,PMAX], an NT-by-2 array of tree-node indexing +% TR.II = [PI,CI], and an NT-by-1 cell array of node lists +% TR.LL. PI,CI are the parent/child pointers associated +% with each node in the tree, and TR.LL{II} is the list of +% rectangles associated with the II-th node. +% +% MAKETREE forms a binary search tree, such that each +% "leaf" node in the tree encloses a maximum number of re- +% ctangles. The tree is formed by recursively subdividing +% the bounding-box of the collection. At each division, a +% simple heuristic is used to determine a splitting axis +% and to position an axis-aligned splitting (hyper-)plane. +% The associated collection of rectangles is partitioned +% between two new child nodes. The dimensions of each node +% in the tree are selected to provide a minimal enclosure +% of the rectangles in its associated sub-tree. Tree nodes +% may overlap as a result. +% +% [...] = MAKETREE(RP,OP) also passes an additional user- +% defined options structure. OP.NOBJ = {32} is the maximum +% allowable number of rectangles per tree-node. OP.LONG = +% {.75} is a relative length tolerance for "long" rectang- +% les, such that any rectangles with RMAX(IX)-RMIN(IX) >= +% OP.LONG * (NMAX(IX)-NMIN(IX)) remain in the parent node. +% Here RMIN,RMAX are the coordinates of the rectangle, +% NMIN,NMAX are the coordinates of the enclosing node in +% the tree, and IX is the splitting axis. Nodes that beco- +% me "full" of "long" items may exceed their maximum rect- +% angle capacity. OP.VTOL = {.55} is a "volume" splitting +% criteria, designed to continue subdivision while the net +% node volume is reducing. Specifically, a node is split +% if V1+V2 <= OP.VTOL*VP, where VP is the d-dim. "volume" +% of the parent node, and V1,V2 are the volumes associated +% with its children. +% +% See also DRAWTREE, QUERYSET, MAPVERT, MAPRECT + +% Please see the following for additional information: +% +% Darren Engwirda, "Locally-optimal Delaunay-refinement & +% optimisation-based mesh generation". Ph.D. Thesis, Scho- +% ol of Mathematics and Statistics, Univ. of Sydney, 2014: +% http://hdl.handle.net/2123/13148 + +% Darren Engwirda : 2014 -- +% Email : de2363@columbia.edu +% Last updated : 07/07/2017 + + tr.xx = []; tr.ii = []; tr.ll = {}; op = []; + +%------------------------------ quick return on empty inputs + if (isempty(rp)), return; end + +%---------------------------------------------- basic checks + if (~isnumeric(rp)) + error('maketree:incorrectInputClass', ... + 'Incorrect input class.'); + end + +%---------------------------------------------- basic checks + if (nargin < +1 || nargin > +2) + error('maketree:incorrectNoOfInputs', ... + 'Incorrect number of inputs.'); + end + if (ndims(rp) ~= +2 || ... + mod(size(rp,2),2)~= +0) + error('maketree:incorrectDimensions', ... + 'Incorrect input dimensions.'); + end + +%------------------------------- extract user-defined inputs + if (nargin >= +2), op = varargin{1}; end + + isoctave = exist( ... + 'OCTAVE_VERSION','builtin') > 0; + + if (isoctave) + + %-- faster for OCTAVE with large tree block size; slower + %-- loop execution... + + NOBJ = +1024 ; + + else + + %-- faster for MATLAB with small tree block size; better + %-- loop execution... + + NOBJ = + 32 ; + + end + +%--------------------------------------- user-defined inputs + if (~isstruct(op)) + + op.nobj = NOBJ ; + op.long = .75; + op.vtol = .55; + + else + + %-------------------------------- bound population count + if (isfield(op,'nobj')) + if (op.nobj <= +0 ) + error('Invalid options.') ; + end + else + op.nobj = NOBJ ; + end + + %-------------------------------- bound "long" tolerance + if (isfield(op,'long')) + if (op.long < +.0 || op.long > +1.) + error('Invalid options.') ; + end + else + op.long = .75; + end + + %-------------------------------- bound "long" tolerance + if (isfield(op,'vtol')) + if (op.vtol < +.0 || op.vtol > +1.) + error('Invalid options.') ; + end + else + op.vtol = .55; + end + + end + +%---------------------------------- dimensions of rectangles + nd = size(rp,2) / +2 ; + ni = size(rp,1) ; + +%------------------------------------------ alloc. workspace + xx = zeros(ni*1,2*nd); + ii = zeros(ni*1,2); + ll = cell (ni*1,1); + ss = zeros(ni*1,1); + +%------------------------------------ min & max coord. masks + lv = false(size(rp,2),1); + rv = false(size(rp,2),1); + lv((1:nd)+nd*+0) = true ; + rv((1:nd)+nd*+1) = true ; + +%----------------------------------------- inflate rectangle + r0 = min(rp(:,lv),[],1) ; + r1 = max(rp(:,rv),[],1) ; + + rd = repmat(r1-r0,ni,1) ; + + rp(:,lv) = ... + rp(:,lv) - rd * eps^.8; + rp(:,rv) = ... + rp(:,rv) + rd * eps^.8; + +%----------------------------------------- rectangle centres + rc = rp(:,lv)+rp(:,rv); + rc = rc * .5 ; +%----------------------------------------- rectangle lengths + rd = rp(:,rv)-rp(:,lv); + +%------------------------------ root contains all rectangles + ll{1} = (+1:ni)' ; +%------------------------------------ indexing for root node + ii(1,1) = +0 ; + ii(1,2) = +0 ; +%------------------------------ root contains all rectangles + xx(1,lv) = min(rp(:,lv),[],1); + xx(1,rv) = max(rp(:,rv),[],1); + +%-- main loop : divide nodes until all constraints satisfied + ss(+1) = +1; ns = +1; nn = +1; + while (ns ~= +0) + %----------------------------------- pop node from stack + ni = ss(ns) ; + ns = ns - 1 ; + %----------------------------------- push child indexing + n1 = nn + 1 ; + n2 = nn + 2 ; + + %--------------------------- set of rectangles in parent + li = ll{ni} ; + %--------------------------- split plane on longest axis + dd = xx(ni,rv) ... + - xx(ni,lv) ; + [dd,ia] = sort(dd); + + for id = nd : -1 : +1 + %--------------------------- push rectangles to children + ax = ia (id) ; + mx = dd (id) ; + + il = rd(li,ax) > ... + op.long * mx ; + lp = li( il) ; % "long" rectangles + ls = li(~il) ; % "short" rectangles + + if (length(lp) < ... + 0.5*length(ls)&& ... + length(lp) < ... + 0.5 * op.nobj) + break ; + end + end + + if (isempty(ls) ) + %-------------------------------- partition empty, done! + continue ; + end + + % select the split position: take the mean of the set of + % (non-"long") rectangle centres along axis AX + %------------------------------------------------------- + sp = sum(rc(ls,ax))/length(ls); + + %---------------------------- partition based on centres + i2 = rc(ls,ax)>sp ; + l1 = ls(~i2) ; % "left" rectangles + l2 = ls( i2) ; % "right" rectangles + + if (isempty(l1) || ... + isempty(l2) ) + %-------------------------------- partition empty, done! + continue ; + end + + %-------------------------------- finalise node position + xx(n1,lv) = ... + min(rp(l1,lv),[],1) ; + xx(n1,rv) = ... + max(rp(l1,rv),[],1) ; + xx(n2,lv) = ... + min(rp(l2,lv),[],1) ; + xx(n2,rv) = ... + max(rp(l2,rv),[],1) ; + + %--------------------------- push child nodes onto stack + if (length(ll{ni}) <= op.nobj) + + vi = prod(xx(ni,rv) ... % upper d-dim "vol." + - xx(ni,lv) ) ; + v1 = prod(xx(n1,rv) ... % lower d-dim "vol." + - xx(n1,lv) ) ; + v2 = prod(xx(n2,rv) ... + - xx(n2,lv) ) ; + + if (v1+v2 < op.vtol*vi) + + %-------------------------------- parent--child indexing + ii(n1,1) = ni ; + ii(n2,1) = ni ; + ii(ni,2) = n1 ; + + %-------------------------------- finalise list indexing + ll{ni,1} = lp ; + ll{n1,1} = l1 ; + ll{n2,1} = l2 ; + + ss(ns+1) = n1 ; + ss(ns+2) = n2 ; + ns = ns+2; nn = nn+2; + + end + + else + %-------------------------------- parent--child indexing + ii(n1,1) = ni ; + ii(n2,1) = ni ; + ii(ni,2) = n1 ; + + %-------------------------------- finalise list indexing + ll{ni,1} = lp ; + ll{n1,1} = l1 ; + ll{n2,1} = l2 ; + + ss(ns+1) = n1 ; + ss(ns+2) = n2 ; + ns = ns+2; nn = nn+2; + + end + + end +%----------------------------------------------- trim alloc. + xx = xx(1:nn,:); + ii = ii(1:nn,:); + ll(nn+1:end) = [] ; + +%----------------------------------------------- pack struct + tr.xx = xx ; + tr.ii = ii ; + tr.ll = ll ; + +end + + + diff --git a/mesh2d/aabb-tree/maprect.m b/mesh2d/aabb-tree/maprect.m new file mode 100755 index 0000000..cee2d1c --- /dev/null +++ b/mesh2d/aabb-tree/maprect.m @@ -0,0 +1,58 @@ +function [tm,im] = maprect(tr,pr) +%MAPRECT find the tree-to-rectangle mappings. +% [TM,IM] = MAPRECT(TR,PR) returns the tree-to-rectangle +% and rectangle-to-tree mappings for a given aabb-tree TR +% and a collection of query vertices PI. +% +% The tree-to-item mapping TM is a structure representing +% the intersection of the items PI with the tree TR. TM.II +% is an M-by-1 array of tree indices and TM.LL is an +% M-by-1 cell array of item lists. Specifically, items in +% the list TM.LL{JJ} intersect with the node TM.II(JJ). +% +% The item-to-tree mapping IM is a structure representing +% the inverse mapping. IM.II is an N-by-1 array of item +% indices and IM.LL is an N-by-1 cell array of node lists. +% Specifically, nodes in the list IM.LL{JJ} intersect with +% the item IM.II(JJ). +% +% See also QUERYSET, MAPVERT, MAKETREE + +% Darren Engwirda : 2017 -- +% Email : engwirda@mit.edu +% Last updated : 06/04/2017 + +%----------------------- call SCANTREE to do the actual work + if (nargout == +1) + [tm ] = scantree(tr,pr,@partrect); + else + [tm,im] = scantree(tr,pr,@partrect); + end + +end + +function [j1,j2] = partrect(pr,b1,b2) +%PARTRECT partition points between boxes B1,B2 for SCANTREE. + + j1 = true(size(pr,1),1) ; + j2 = true(size(pr,1),1) ; + + nd = size(b1,2) / +2; + + for ax = +1 : nd +%--------------- remains TRUE if inside bounds along axis AX + j1 = j1 & pr(:,ax+nd*1) ... + >= b1( ax+nd*0) ... + & pr(:,ax+nd*0) ... + <= b1( ax+nd*1) ; + +%--------------- remains TRUE if inside bounds along axis AX + j2 = j2 & pr(:,ax+nd*1) ... + >= b2( ax+nd*0) ... + & pr(:,ax+nd*0) ... + <= b2( ax+nd*1) ; + end + +end + + diff --git a/mesh2d/aabb-tree/mapvert.m b/mesh2d/aabb-tree/mapvert.m new file mode 100755 index 0000000..4dfeb75 --- /dev/null +++ b/mesh2d/aabb-tree/mapvert.m @@ -0,0 +1,55 @@ +function [tm,im] = mapvert(tr,pi) +%MAPVERT find the tree-to-vertex mappings. +% [TM,IM] = MAPVERT(TR,PI) returns the tree-to-vertex and +% vertex-to-tree mappings for a given aabb-tree TR and a +% collection of query vertices PI. +% +% The tree-to-item mapping TM is a structure representing +% the intersection of the items PI with the tree TR. TM.II +% is an M-by-1 array of tree indices and TM.LL is an +% M-by-1 cell array of item lists. Specifically, items in +% the list TM.LL{JJ} intersect with the node TM.II(JJ). +% +% The item-to-tree mapping IM is a structure representing +% the inverse mapping. IM.II is an N-by-1 array of item +% indices and IM.LL is an N-by-1 cell array of node lists. +% Specifically, nodes in the list IM.LL{JJ} intersect with +% the item IM.II(JJ). +% +% See also QUERYSET, MAPRECT, MAKETREE + +% Darren Engwirda : 2014 -- +% Email : engwirda@mit.edu +% Last updated : 06/04/2017 + +%----------------------- call SCANTREE to do the actual work + if (nargout == +1) + [tm ] = scantree(tr,pi,@partvert); + else + [tm,im] = scantree(tr,pi,@partvert); + end + +end + +function [j1,j2] = partvert(pi,b1,b2) +%PARTVERT partition points between boxes B1,B2 for SCANTREE. + + j1 = true(size(pi,1),1); + j2 = true(size(pi,1),1); + + nd = size(b1,2) / +2; + + for ax = +1 : nd +%--------------- remains TRUE if inside bounds along axis AX + j1 = j1 & pi(:,ax)>=b1(ax+nd*0) ... + & pi(:,ax)<=b1(ax+nd*1) ; + +%--------------- remains TRUE if inside bounds along axis AX + j2 = j2 & pi(:,ax)>=b2(ax+nd*0) ... + & pi(:,ax)<=b2(ax+nd*1) ; + end + +end + + + diff --git a/mesh2d/aabb-tree/queryset.m b/mesh2d/aabb-tree/queryset.m new file mode 100755 index 0000000..dac36f2 --- /dev/null +++ b/mesh2d/aabb-tree/queryset.m @@ -0,0 +1,108 @@ +function [qi,qp,qj] = queryset(tr,tm,fn,varargin) +%QUERYSET spatial queries for AABB-indexed collections. +% [QI,QP,QJ] = QUERYSET(TR,TM,FN) computes a spatial query +% on an indexed collection. TR is the AABB-tree built to +% index the collection, TM is the query-to-tree mapping +% structure, and FN is the intersection "kernel" function, +% called to compute actual intersections. +% +% A set of intersecting objects is returned for each item, +% such that for each query item QI(II), a list of interse- +% cting objects QJ(QP(II,1):QP(II,2)) is returned. +% +% [PK,CK] = FN(PJ,CJ,A1,...,AN) is an intersection kernel +% function called for each non-empty node in the tree TR. +% PJ,CJ are Nx1 and Mx1 arrays of query- and obj.-indices +% to compare against each other. These lists represent a +% "localised" O(N*M) "tile" of pairwise comparisons. PK,CK +% are lists of matching objects. A1,...,AN are a set of +% optional user-defined arguments that are passed to the +% kernel function FN internally. Optional arguments can be +% passed to FN via calls to QUERYSET(..., A1,...AN). +% +% See also MAPVERT, MAPRECT, MAKETREE + +% Darren Engwirda : 2017 -- +% Email : de2363@columbia.edu +% Last updated : 05/07/2017 + + qi = []; qp = []; qj = []; + +%---------------------------------------------- basic checks + if (nargin <= +2) + error('queryset:incorrectNumInputs', ... + 'Incorrect number of inputs.'); + end + +%---------------------------------------------- empty inputs + if (isempty(tr)), return; end + +%---------------------------------------------- basic checks + if (~isempty(tr) && ~isstruct(tr) ) + error('queryset:incorrectInputClass', ... + 'Incorrect input class.') ; + end + if (~isempty(tm) && ~isstruct(tm) ) + error('queryset:incorrectInputClass', ... + 'Incorrect input class.') ; + end + +%---------------------------------- check existing aabb-tree + if (~isfield(tm,'ii') || ... + ~isfield(tm,'ll') ) + error('queryset:incorrectAABBstruct', ... + 'Invalid aabb-maps obj.') ; + end +%---------------------------------- check existing aabb-tree + if (~isfield(tr,'xx') || ... + ~isfield(tr,'ii') || ... + ~isfield(tr,'ll') ) + error('queryset:incorrectAABBstruct', ... + 'Invalid aabb-tree obj.') ; + end + +%------------------------------ spatial query over tree-node + ic = cell(size(tm.ii,1),1); + jc = cell(size(tm.ii,1),1); + for ip = 1 : size(tm.ii,1) + %-------------------------- extract balls/verts per tile + ni = tm.ii(ip,1) ; % node (in tree) + + %-------------------------- do O(n*m) search within tile + [pj,ij] = feval(fn, ... + tm.ll{ip,1}, ... % query in tile + tr.ll{ni,1}, ... % items in tile + varargin {:} ) ; + + %-------------------------- push loc. item-query matches + ic{ip} = pj(:) ; + jc{ip} = ij(:) ; + end + +%-------------------------------- concat matches into arrays + qi = vertcat(ic{:}); + qj = vertcat(jc{:}); + + if (isempty(qj)),return; end + +%-------------------------------- form sparse-style indexing + [qi,ix] = sort (qi) ; + qj = qj(ix); + ix = find(diff(qi)); + + ni = length (qi) ; + + qi = qi([ix;ni]) ; + + nj = length (qj) ; + ni = length (qi) ; + +%------------------------------ each list is IP(I,1):IP(I,2) + qp = zeros(ni,2) ; + qp(:,1) = [+1; ix+1] ; + qp(:,2) = [ix; nj+0] ; + +end + + + diff --git a/mesh2d/aabb-tree/scantree.m b/mesh2d/aabb-tree/scantree.m new file mode 100755 index 0000000..11d2507 --- /dev/null +++ b/mesh2d/aabb-tree/scantree.m @@ -0,0 +1,150 @@ +function [tm,im] = scantree(tr,pi,fn) +%SCANTREE find the tree-to-item mappings. +% [TM,IM] = SCANTREE(TR,PI,FN) is a low-level routine that +% returns the tree-to-item and item-to-tree mappings for a +% given aabb-tree TR and a query collection PI. The funct- +% ion [KI,KJ] = FN(PJ,NI,NJ) is called internally to part- +% ition the sub-collection PJ between the aabb-tree nodes +% NI,NJ, where: +% +% * KI(II) = TRUE if the II-th item intersects NI, and +% * KJ(II) = TRUE if the II-th item intersects NJ. +% +% The tree-to-item mapping TM is a structure representing +% the intersection of the items PI with the tree TR. TM.II +% is an M-by-1 array of tree indices and TM.LL is an +% M-by-1 cell array of item lists. Specifically, items in +% the list TM.LL{JJ} intersect with the node TM.II(JJ). +% +% The item-to-tree mapping IM is a structure representing +% the inverse mapping. IM.II is an N-by-1 array of item +% indices and IM.LL is an N-by-1 cell array of node lists. +% Specifically, nodes in the list IM.LL{JJ} intersect with +% the item IM.II(JJ). +% +% See also QUERYSET, MAPVERT, MAPRECT, MAKETREE + +% Darren Engwirda : 2014 -- +% Email : engwirda@mit.edu +% Last updated : 06/04/2017 + + tm.ii = [] ; tm.ll = {} ; + im.ii = [] ; im.ll = {} ; + +%------------------------------ quick return on empty inputs + if (isempty(pi)), return; end + if (isempty(tr)), return; end + +%---------------------------------------------- basic checks + if (~isa(tr, 'struct') || ... + ~isa(pi,'numeric') || ... + ~isa(fn,'function_handle') ) + error('scantree:incorrectInputClass', ... + 'Invalid input class.') ; + end +%---------------------------------------------- basic checks + if ( ~isfield(tr,'xx') || ... + ~isfield(tr,'ii') || ... + ~isfield(tr,'ll') ) + error('scantree:incorrectAABBstruct', ... + 'Incorrect aabb-tree.') ; + end + +%----------------------------------- alloc. output/workspace + tm.ii = zeros(size(tr.ii,1),1); + tm.ll = cell (size(tr.ii,1),1); + + ss = zeros(size(tr.ii,1),1); + sl = cell (size(tr.ii,1),1); + sl{1} = (1:size(pi,1))'; + + tf = ~cellfun('isempty',tr.ll); + +%---------- descend tree from root, push items amongst nodes + + ss(1) = +1; ns = +1; no = +1; + while (ns ~= +0) + %---------------------------------- _pop node from stack + ni = ss(ns); ns = ns - 1; + + if (tf(ni)) + %-- push onto tree-item mapping -- non-empty node NI + %-- contains items LL + tm.ii(no) = ni ; + tm.ll{no} ... + = sl{ns+1} ; + no = no + 1 ; + end + + if (tr.ii(ni,+2)~=+0) + %--------------------- partition amongst child nodes + c1 = ... + tr.ii(ni,2) + 0 ; + c2 = ... + tr.ii(ni,2) + 1 ; + + %--------------------- user-defined partitions of LL + [j1,j2] = feval( ... + fn,pi(sl{ns+1},:), ... + tr.xx(c1,:),tr.xx(c2,:)) ; + + %--------------------- lists of items per child node + l1 = sl{ns+1}(j1) ; + l2 = sl{ns+1}(j2) ; + + if (~isempty(l1)) + %--------------------- push nonempty node onto stack + ns = ns + 1 ; + ss(ns) = c1 ; + sl{ns} = l1 ; + end + if (~isempty(l2)) + %--------------------- push nonempty node onto stack + ns = ns + 1 ; + ss(ns) = c2 ; + sl{ns} = l2 ; + end + + end + + end +%----------------------------------------------- trim alloc. + tm.ii(no:end) = []; + tm.ll(no:end) = []; + +%----------------------- compute inverse map only if desired + if (nargout==+1), return; end + +%----------------------- accumulate pair'd tree-item matches + ic = cell(no-1,+1); jc = tm.ll; + for ip = +1 : no-1 + ni = tm.ii(ip); + ic{ip} = ... + ni * ones(length(jc{ip}),1); + end + ii = vertcat(ic{:}); + ni = size(ii,1) ; + jj = vertcat(jc{:}); + nj = size(jj,1) ; + + if (isempty(jj)), return; end + + im.ll = cell (size(pi,1),1) ; + +%---------------------------------- invert ordering via sort + [jj,jx] = sort(jj) ; + ii = ii(jx); + jx = find(diff(jj)~=+0); + im.ii = [jj(jx);jj(nj)]; + jx = [+0;jx;ni]; + +%----------------------- distribute single item-tree matches + for ip = +1 : size(im.ii,1) + im.ll{ip} = ... + ii(jx(ip+0)+1:jx(ip+1)+0); + end + +end + + + diff --git a/mesh2d/bfsgeo2.m b/mesh2d/bfsgeo2.m new file mode 100755 index 0000000..b322d8d --- /dev/null +++ b/mesh2d/bfsgeo2.m @@ -0,0 +1,116 @@ +function [node,PSLG,part] = bfsgeo2(node,PSLG,seed) +%BFSGEO2 partition geometry about "seeds" via breadth-first +%search. +% [NODE,EDGE,PART] = BFSGEO2(NODE,EDGE,SEED) returns a set +% of 2-manifold geometry partitions by expanding about a +% list of "seed" points. Partitions expand in a breadth- +% first sense until a polygon bounday is encountered. SEED +% is an S-by-2 array of XY-coordinates to expand around, +% NODE is an N-by-2 array of polygon vertices, and EDGE is +% an E-by-2 array of polygon edge indexing. Each row in +% EDGE represents an edge of the polygon, such that +% NODE(EDGE(JJ,1),:) and NODE(EDGE(JJ,2),:) are the XY-co- +% ordinates of the endpoints of the JJ-TH edge. PART is an +% S-by-1 cell array of geometry partitions, where each +% PART{KK} is a list of edge indices into EDGE that define +% the KK-TH partition. +% +% This function may be useful when seeking to partition +% complex, non-manifold geometry into a format that's app- +% ropriate for the triangulation algorithms in REFINE2. +% +% See also REFINE2, FIXGEO2, BFSTRI2 + +%----------------------------------------------------------- +% Darren Engwirda : 2017 -- +% Email : de2363@columbia.edu +% Last updated : 11/07/2017 +%----------------------------------------------------------- + + part = {}; + +%---------------------------------------------- basic checks + if ( ~isnumeric(node) || ... + ~isnumeric(PSLG) || ... + ~isnumeric(seed) ) + error('bfsgeo2:incorrectInputClass' , ... + 'Incorrect input class.') ; + end + +%---------------------------------------------- basic checks + if (ndims(node) ~= +2 || ... + ndims(PSLG) ~= +2 || ... + ndims(seed) ~= +2 ) + error('bfsgeo2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + + if (size(node,2)~= +2 || ... + size(PSLG,2)~= +2 || ... + size(seed,2)~= +2 ) + error('bfsgeo2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + + nnod = size(node,1) ; + nedg = size(PSLG,1) ; + +%---------------------------------------------- basic checks + if (min([PSLG(:)])<+1 || ... + max([PSLG(:)])>nnod) + error('bfsgeo2:invalidInputs', ... + 'Invalid EDGE input array.') ; + end + +%------------------------------------------ assemble full CDT + [node,PSLG,tria] = deltri2 (node,PSLG) ; + +%------------------------------------------ find seeds in CDT + [sptr,stri] = findtria(node,tria,seed) ; + + okay = sptr(:,2) ... + >= sptr(:,1) ; + itri = stri(sptr(okay,1)); + +%------------------------------------------ PART for all seed + for ipos = +1 : size (itri,1) + + %-------------- BFS about current tria. + [mark] = ... + bfstri2(PSLG,tria,itri(ipos)) ; + + %-------------- match tria./poly. edges + edge = [ + tria(mark,[1,2]) ; + tria(mark,[2,3]) ; + tria(mark,[3,1]) ; + ] ; + + edge = sort(edge,+2) ; + PSLG = sort(PSLG,+2) ; + + [same,epos] = ... + setset2(edge(:,1:2),PSLG) ; + + %-------------- find match multiplicity + epos = epos(epos>+0) ; + epos = sort(epos); + + eidx = ... + find(diff(epos)) ; + + eptr = ... + [1;eidx+1;length(epos)+1] ; + enum = ... + eptr(2:end)-eptr(1:end-1) ; + + %---------- select singly-matched edges + part{ipos} = ... + epos(eptr(enum == 1)) ; + + end + +end + + + diff --git a/mesh2d/bfstri2.m b/mesh2d/bfstri2.m new file mode 100755 index 0000000..c9b3e81 --- /dev/null +++ b/mesh2d/bfstri2.m @@ -0,0 +1,104 @@ +function [seen] = bfstri2(PSLG,tria,seed) +%BFSTRI2 expand about a single seed triangle via BFS. The se- +%arch terminates when constraining edges are encountered. +%SEEN(II) is TRUE if the II-TH triangle is found in the curr- +%ent expansion. +% +% See also BFSGEO2, REFINE2, FIXGEO2 + +%----------------------------------------------------------- +% Darren Engwirda : 2017 -- +% Email : de2363@columbia.edu +% Last updated : 01/10/2017 +%----------------------------------------------------------- + + seen = []; + +%---------------------------------------------- basic checks + if ( ~isnumeric(tria) || ... + ~isnumeric(seed) ) + error('bfstri2:incorrectInputClass' , ... + 'Incorrect input class.') ; + end + +%---------------------------------------------- basic checks + if (ndims(tria) ~= +2 ) + error('bfstri2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + if (size(tria,2)~= +3 ) + error('bfstri2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + +%---------------------------------------------- extra checks + if ( ~isempty (PSLG) ) + if ( ~isnumeric(PSLG) ) + error('bfstri2:incorrectInputClass' , ... + 'Incorrect input class.') ; + end + + if (ndims(PSLG) ~= +2 ) + error('bfstri2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + if (size(PSLG,2)~= +2 ) + error('bfstri2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + end + +%----------------------------------------- form adj. indices + ntri = size (tria,1); + + [edge,tria] = tricon2 (tria,PSLG); + + seed = seed(:) ; + + list = zeros(ntri,1); + nlst = length (seed); + list(1:nlst) = seed ; + +%----------------------------------------- do BFS iterations + seen = false(ntri,1); + + while (nlst >= +1) + + %-------------- pop tria from stack top + next = list(nlst); + nlst = nlst-1 ; + seen(next) = true; + + %-------------- visit 1-ring neighbours + for eadj = +1 : +3 + + epos = tria(next,eadj+3); + + %---------- find adjacent triangles + if (edge(epos,5) == 0) + + if (next ~= edge(epos,3)) + tadj = edge(epos,3); + else + tadj = edge(epos,4); + end + + if (tadj > +0 && ~seen(tadj)) + + %---------- add unvisited neighbour + seen(tadj) = true ; + nlst = nlst+1 ; + list(nlst) = tadj ; + + end + + end + + end + + end + +end + + + diff --git a/mesh2d/cdtbal1.m b/mesh2d/cdtbal1.m new file mode 100755 index 0000000..e7cce31 --- /dev/null +++ b/mesh2d/cdtbal1.m @@ -0,0 +1,37 @@ +function [bb] = cdtbal1(pp,ee) +%CDTBAL1 compute the circumballs associated with a 1-simplex +%triangulation embedded in R^2. +% [BB] = TRIBAL1(PP,EE) returns the circumscribing balls +% associated with the 1-simplexes in [PP,TT], such that BB +% = [XC,YC,RC.^2]. + +% Darren Engwirda : 2017 -- +% Email : engwirda@mit.edu +% Last updated : 24/03/2017 + +%---------------------------------------------- basic checks + if (~isnumeric(pp) || ... + ~isnumeric(ee) ) + error('cdtbal1:incorrectInputClass' , ... + 'Incorrect input class.') ; + end +%---------------------------------------------- basic checks + if (ndims(pp) ~= +2 || ndims(ee) ~= +2) + error('cdtbal1:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + if (size(pp,2)~= +2 || size(ee,2) < +2) + error('cdtbal1:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + + bb = zeros(size(ee,1),3); + + bb(:,1:2) = (pp(ee(:,1),:)+pp(ee(:,2),:))*.50 ; + bb(:, 3) = ... + sum((pp(ee(:,1),:)-pp(ee(:,2),:)).^2,2)*.25 ; + +end + + + diff --git a/mesh2d/cdtbal2.m b/mesh2d/cdtbal2.m new file mode 100755 index 0000000..431569c --- /dev/null +++ b/mesh2d/cdtbal2.m @@ -0,0 +1,79 @@ +function [cc] = cdtbal2(pp,ee,tt) +%CDTBAL2 compute the modified circumballs associated with a +%constrained 2-simplex Delaunay triangulation in R^2. +% [CC] = CDTBAL2(PP,EE,TT) returns the smallest enclosing +% balls associated with the triangles in [PP,TT], such th- +% at CC = [XC,YC,RC.^2]. Such balls never lie outside the +% boundaries of the associated CDT. See TRICON2 for info- +% mation regarding the edge array EE. + +% Darren Engwirda : 2017 -- +% Email : de2363@columbia.edu +% Last updated : 01/10/2017 + +%---------------------------------------------- basic checks + if (~isnumeric(pp) || ~isnumeric(ee) || ... + ~isnumeric(tt) ) + error('cdtbal2:incorrectInputClass' , ... + 'Incorrect input class.') ; + end + +%---------------------------------------------- basic checks + if (ndims(pp) ~= +2 || ndims(ee) ~= +2 || ... + ndims(tt) ~= +2 ) + error('cdtbal2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + if (size(pp,2)~= +2 || size(ee,2) < +5 || ... + size(tt,2) < +6 ) + error('cdtbal2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + +%----------------------------------------- calc. circumballs + cc = tribal2(pp,tt); + +%------------------------ replace with face-balls if smaller + cc = minfac2(cc,pp,ee,tt,1,2,3) ; + cc = minfac2(cc,pp,ee,tt,2,3,1) ; + cc = minfac2(cc,pp,ee,tt,3,1,2) ; + +end + +function [cc] = minfac2(cc,pp,ee,tt,ni,nj,nk) +%MINFAC2 modify the set of circumballs to constrain centres +%to the boundaries of the CDT. +% [CM] = MINFAC2(CC,PP,EE,TT,NI,NJ,NK) returns the set of +% modified circmballs CM, where any ball CC lying outside +% the boundaries of the CDT [PP,EE,TT] is replaced by the +% edge-centred diametric ball. [NI,NJ] are the local inde- +% xes associated with an edge to test. NK is the local in- +% dex of the opposite vertex. + +%------------------------------------------------ outer edge + EF = ee(tt(:,ni+3),5) > +0 ; + +%------------------------------------------------ edge balls + bc = (pp(tt(EF,ni),:)+pp(tt(EF,nj),:))*.50; + +%------------------------------------------------ edge radii + br = sum((bc(:,1:2)-pp(tt(EF,ni),:)).^2,2)... + + sum((bc(:,1:2)-pp(tt(EF,nj),:)).^2,2); + br = br * +0.5 ; + +%------------------------------------------- enclosing radii + ll = sum((bc(:,1:2)-pp(tt(EF,nk),:)).^2,2); + +%------------------------------------------- replace if min. + bi = br >= ll ... + & br <= cc(EF,3) ; + ei = find(EF) ; + ti = ei (bi) ; + +%------------------------------------------- replace is min. + cc(ti,1:2) = bc(bi,:) ; + cc(ti, 3) = br(bi,:) ; + +end + + diff --git a/mesh2d/cfmtri2.m b/mesh2d/cfmtri2.m new file mode 100755 index 0000000..d480d3a --- /dev/null +++ b/mesh2d/cfmtri2.m @@ -0,0 +1,145 @@ +function [vert,econ,tria] = cfmtri2(vert,econ) +%CFMTRI2 compute a conforming 2-simplex Delaunay triangulat- +%ion in the two-dimensional plane. +% [VERT,CONN,TRIA]=CFMTRI2(VERT,CONN) computes the confor- +% ming Delaunay trianguation, given the points VERT, and +% edge constraints CONN. New points are inserted to bisect +% edge constraints until all are recovered. VERT is a +% V-by-2 array of XY coordinates to be triangulated, TRIA +% is a T-by-3 array of vertex indexing, with each row +% defining a triangle, such that VERT(TRIA(II,1),:), +% VERT(TRIA(II,2),:) and VERT(TRIA(II,3),:) are the coord- +% inates of the II-TH triangle. CONN is a C-by-2 array of +% constraining edges, where each row defines an edge, as +% per the TRIA array. +% +% See also DELTRI2, DELAUNAYN + +% Darren Engwirda : 2017 -- +% Email : de2363@columbia.edu +% Last updated : 07/07/2017 + +%---------------------------------------------- basic checks + if ( ~isnumeric(vert) || ... + ~isnumeric(econ) ) + error('cfmtri2:incorrectInputClass' , ... + 'Incorrect input class.') ; + end + +%---------------------------------------------- basic checks + if (ndims(vert) ~= +2 || ndims(econ) ~= +2) + error('cfmtri2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + + if (size(vert,2)~= +2 || size(econ,2)~= +2) + error('cfmtri2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + +%-- the DELAUNAYN routine is *not* well-behaved numerically, +%-- so explicitly re-scale the problem about [-1,-1; +1,+1]. + vmax = max(vert,[],1) ; + vmin = min(vert,[],1) ; + + vdel = vmax - vmin; + vdel = mean(vdel) ; + vdel = vdel * +.5 ; + + vmid = vmax + vmin; + vmid = vmid * +.5 ; + + vert = vert - vmid; + vert = vert / vdel; + +%-- keep bisecting edge constraints until they are all reco- +%-- vered! + while (true) + + %----------------- un-constrained delaunay triangulation + tria = delaunay2(vert) ; + + nv = size(vert,+1); + nt = size(tria,+1); + + %----------------------------- build non-unique edge-set + ee = zeros(nt*3,2); + ee((1:nt)+nt*0,:) = tria(:,[1,2]); + ee((1:nt)+nt*1,:) = tria(:,[2,3]); + ee((1:nt)+nt*2,:) = tria(:,[3,1]); + + %----------------- find constraints within tria-edge set + [in] = setset2(econ,ee) ; + + %----------------------------- done when have contraints + if (all(in)), break; end + + %----------------------------- un-recovered edge centres + vm = vert(econ(~in,1),:) ... + + vert(econ(~in,2),:) ; + vm = vm * +.5 ; + + %----------------------------- un-recovered edge indexes + ev = nv+(1:size(vm,1))'; + en = [econ(~in,+1), ev; + econ(~in,+2), ev]; + + %----------------------------- push new vert/edge arrays + vert = [vert( :,:); vm]; + econ = [econ(in,:); en]; + + end + +%--------------------------------- undo geomertic re-scaling + vert = vert * vdel ; + vert = vert + vmid ; + +end + +function [tria] = delaunay2(vert) +%DELAUNAY2 thin wrapper for DELAUNAYN, so that we can have a +% more efficient version in OCTAVE... + + isoctave = exist( ... + 'OCTAVE_VERSION','builtin')>+0; + + if (isoctave) + + %-- call QHULL and then filter zero-volume simplexes via + %-- vectorised area comparisons. + + %-- note silliness re. EVAL, so that MATLAB doesn't com- + %-- plain re. OCTAVE '__' names. + + tria = eval( ... + '__delaunayn__(vert)') ; + + ab = vert(tria(:,2),:) ... + - vert(tria(:,1),:) ; + ac = vert(tria(:,3),:) ... + - vert(tria(:,1),:) ; + + aa = ab(:,1).* ac(:,2) ... + - ab(:,2).* ac(:,1) ; + + lb = sumsq(ab,2) ; + lc = sumsq(ac,2) ; + + ll = max (lb,lc) ; + + keep = abs(aa) >= ll * eps^.8 ; + + tria = tria(keep,:); + + else + + %-- the default call in MATLAB seems to be fast enough!! + + tria = ... + delaunay (vert(:,1),vert(:,2)); + + end + +end + + diff --git a/mesh2d/compile.m b/mesh2d/compile.m new file mode 100755 index 0000000..f3ea0d3 --- /dev/null +++ b/mesh2d/compile.m @@ -0,0 +1,50 @@ +function compile +%COMPILE compile any MESH2D dependencies into MEX//OCT files +%for MATLAB//OCTAVE. +% +% See also TRIDEMO, REFINE2, SMOOTH2 + +%----------------------------------------------------------- +% Darren Engwirda : 2017 -- +% Email : de2363@columbia.edu +% Last updated : 17/07/2017 +%----------------------------------------------------------- + + if (exist('OCTAVE_VERSION','builtin') > 0) + + fprintf(1,'\n'); + + fprintf(1,'OCTAVE detected: Compiling OCT files.\n'); + + fprintf(1,'\n'); + + fprintf(1,'Compiling INPOLY2...\n'); + mkoctfile('inpoly2_oct.cpp'); + + %%!! add additional oct-file builds here... + + + fprintf(1,'\n'); + + fprintf(1,'Compiling MESH2D for OCTAVE: DONE.\n'); + + fprintf(1,'\n'); + + else + + fprintf(1,'\n'); + + fprintf(1,'MATLAB detected: nothing to compile!!\n'); + + fprintf(1,'\n'); + + fprintf(1,'Compiling MESH2D for MATLAB: DONE.\n'); + + fprintf(1,'\n'); + + end + +end + + + diff --git a/mesh2d/deltri2.m b/mesh2d/deltri2.m new file mode 100755 index 0000000..c6f4cc1 --- /dev/null +++ b/mesh2d/deltri2.m @@ -0,0 +1,168 @@ +function [vert,conn,tria,tnum] = deltri2(varargin) +%DELTRI2 compute a constrained 2-simplex Delaunay triangula- +%tion in the two-dimensional plane. +% [VERT,CONN,TRIA,TNUM]=DELTRI2(VERT,CONN,NODE,PSLG,PART) +% computes the Delaunay trianguation {VERT,TRIA}, the con- +% straints CONN, and the "inside" status vector TNUM. VERT +% is an V-by-2 array of XY coordinates to be triangulated, +% TRIA is a T-by-3 array of vertex indexing, where each +% row defines a triangle, such that VERT(TRIA(II,1),:), +% VERT(TRIA(II,2),:) and VERT(TRIA(II,3),:) are the coord- +% inates of the II-TH triangle. CONN is a C-by-2 array of +% constraining edges, where each row defines an edge, as +% per TRIA. The additional arguments NODE,PSLG and PART +% define a (mutliply-connected) polygonal region, where +% NODE is an N-by-2 array of vertices and PSLG is a P-by-2 +% array of edges (a piecewise-straight-line-graph), where +% each row defines an edge as a pair of indices into NODE. +% PART is a cell-array of polygonal "parts", where each +% element PART{KK} is an array of edge indices defining a +% polygonal region. PSLG(PART{KK},:) is the set of edges +% in the KK-TH part. TNUM is a T-by-1 array of part index- +% ing, such that TNUM(II) is the index of the part in whi- +% ch the II-TH triangle resides. +% +% See also DELAUNAYTRIANGULATION, DELAUNAYTRI, DELAUNAYN + +% Darren Engwirda : 2017 -- +% Email : de2363@columbia.edu +% Last updated : 10/07/2017 + + vert = []; conn = []; node = []; PSLG = []; + part = {}; kind = 'constrained'; + +%---------------------------------------------- extract args + if (nargin>=+1), vert = varargin{1}; end + if (nargin>=+2), conn = varargin{2}; end + if (nargin>=+3), node = varargin{3}; end + if (nargin>=+4), PSLG = varargin{4}; end + if (nargin>=+5), part = varargin{5}; end + if (nargin>=+6), kind = varargin{6}; end + +%---------------------------------------------- basic checks + if (~isnumeric(vert) || ~isnumeric(conn) || ... + ~isnumeric(node) || ~isnumeric(PSLG) || ... + ~iscell (part) || ~ischar (kind) ) + error('deltri2:incorrectInputClass' , ... + 'Incorrect input class.') ; + end + + nvrt = size(vert,+1) ; nnod = size(node,+1) ; + nedg = size(PSLG,+1) ; + +%---------------------------------------------- basic checks + if (ndims(vert) ~= +2 || ndims(conn) ~= +2) + error('deltri2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + if (size(vert,2)~= +2 || size(conn,2)~= +2) + error('deltri2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + + if (min([conn(:)])<+1 || max([conn(:)])>nvrt) + error('deltri2:invalidInputs', ... + 'Invalid CONN input array.') ; + end + +%---------------------------------------------- basic checks + if (nargin >= +3) + + if (ndims(node) ~= +2 || ndims(PSLG) ~= +2) + error('deltri2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + if (size(node,2)~= +2 || size(PSLG,2)~= +2) + error('deltri2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + + if (min([PSLG(:)])<+1 || max([PSLG(:)])>nnod) + error('deltri2:invalidInputs', ... + 'Invalid EDGE input array.') ; + end + + pmin = cellfun(@min,part); + pmax = cellfun(@max,part); + + if (min([pmin(:)])<+1 || max([pmax(:)])>nedg) + error('deltri2:invalidInputs', ... + 'Invalid PART input array.') ; + end + + end + +%------------------------------------ compute Delaunay tria. + switch (lower(kind)) + case 'constrained' + + if (exist( ... + 'delaunayTriangulation') == +2 ) + %-------------------------------- use class if available + dtri = ... + delaunayTriangulation(vert,conn) ; + vert = dtri.Points; + conn = dtri.Constraints; + tria = dtri.ConnectivityList; + else + if (exist('DelaunayTri') == +2 ) + %-------------------------------- use class if available + dtri = DelaunayTri (vert,conn) ; + vert = dtri.X; + conn = dtri.Constraints; + tria = dtri.Triangulation; + else + %-------------------------------- *fall-back* onto qhull + [vert,conn,tria] ... + = cfmtri2(vert,conn) ; + end + end + + case 'conforming' + + %-------------------------------- "conforming" delaunay! + [vert,conn,tria] ... + = cfmtri2(vert,conn) ; + + otherwise + error('deltri2:invalidInputs', ... + 'Invalid KIND selection.') ; + + end + +%------------------------------------ calc. "inside" status! + tnum = zeros(size(tria,+1),+1) ; + + if (nargin >= +3) + + tmid = vert(tria(:,1),:) ... + + vert(tria(:,2),:) ... + + vert(tria(:,3),:) ; + tmid = tmid / +3.0; + + for ppos = 1 : length(part) + + [stat] = inpoly2( ... + tmid,node , ... + PSLG(part{ppos},:)) ; + + tnum(stat) = ppos ; + + end + +%------------------------------------ keep "interior" tria's + tria = tria(tnum>+0,:) ; + tnum = tnum(tnum>+0,:) ; + + end + +%------------------------------------ flip for correct signs + area = triarea(vert,tria) ; + + tria(area<0.,:) = ... + tria(area<0.,[1,3,2]) ; + +end + + + diff --git a/mesh2d/drawscr.m b/mesh2d/drawscr.m new file mode 100755 index 0000000..b29f4af --- /dev/null +++ b/mesh2d/drawscr.m @@ -0,0 +1,367 @@ +function drawscr(varargin) +%DRAWSCR draw quality-metrics for a 2-simplex triangulation +%embedded in the two-dimensional plane. +% DRAWSCR(VERT,EDGE,TRIA,TNUM) draws histograms of quality +% metrics for the triangulation. +% VERT is a V-by-2 array of XY coordinates in the triangu- +% lation, EDGE is an array of constrained edges, TRIA is a +% T-by-3 array of triangles, and TNUM is a T-by-1 array of +% part indices. Each row of TRIA and EDGE define an eleme- +% nt. VERT(TRIA(II,1),:), VERT(TRIA(II,2),:) and VERT(TRIA +% (II,3),:) are the coordinates of the II-TH triangle. The +% edges in EDGE are defined in a similar manner. NUM is an +% array of part indexing, such that TNUM(II) is the index +% of the part in which the II-TH triangle resides. +% +% DRAWSCR(...,HVRT) additionally draws histograms of rela- +% tive edge-length, indicating conformance to the spacing +% constraints. HVRT is a V-by-1 array of spacing informat- +% ion, per an evaluation of the mesh-size function at the +% mesh vertices VERT. +% +% See also REFINE2, SMOOTH2 + +%----------------------------------------------------------- +% Darren Engwirda : 2017 -- +% Email : de2363@columbia.edu +% Last updated : 11/07/2017 +%----------------------------------------------------------- + + vert = [] ; conn = [] ; tria = [] ; + tnum = [] ; hvrt = [] ; + +%---------------------------------------------- extract args + if (nargin>=+1), vert = varargin{1}; end + if (nargin>=+2), conn = varargin{2}; end + if (nargin>=+3), tria = varargin{3}; end + if (nargin>=+4), tnum = varargin{4}; end + if (nargin>=+5), hvrt = varargin{5}; end + +%---------------------------------------------- basic checks + if ( ~isnumeric(vert) || ... + ~isnumeric(conn) || ... + ~isnumeric(tria) || ... + ~isnumeric(tnum) || ... + ~isnumeric(hvrt) ) + error('drawscr:incorrectInputClass' , ... + 'Incorrect input class.') ; + end + +%---------------------------------------------- basic checks + if (ndims(vert) ~= +2 || ... + ndims(conn) ~= +2 || ... + ndims(tria) ~= +2 ) + error('drawscr:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + if (size(vert,2)~= +2 || ... + size(conn,2) < +2 || ... + size(tria,2) < +3 ) + error('drawscr:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + + nvrt = size(vert,1) ; + ntri = size(tria,1) ; + +%---------------------------------------------- basic checks + if (min(min(conn(:,1:2))) < +1 || ... + max(max(conn(:,1:2))) > nvrt ) + error('drawscr:invalidInputs', ... + 'Invalid EDGE input array.') ; + end + + if (min(min(tria(:,1:3))) < +1 || ... + max(max(tria(:,1:3))) > nvrt ) + error('drawscr:invalidInputs', ... + 'Invalid TRIA input array.') ; + end + +%-- borrowed from the JIGSAW library! + +%-- draw sub-axes directly -- sub-plot gives +%-- silly inconsistent ax spacing...! + + axpos31 = [.125,.750,.800,.150] ; + axpos32 = [.125,.450,.800,.150] ; + axpos33 = [.125,.150,.800,.150] ; + + axpos41 = [.125,.835,.800,.135] ; + axpos42 = [.125,.590,.800,.135] ; + axpos43 = [.125,.345,.800,.135] ; + axpos44 = [.125,.100,.800,.135] ; + +%-- draw cost histograms for 2-tria elements + figure; + set(gcf,'color','w','units','normalized', ... + 'position',[.05,.10,.30,.30]); + if (~isempty(hvrt)) + +%-- have size-func data + axes('position',axpos41); hold on; + scrhist(triscr2(vert,tria),'tria3'); + axes('position',axpos42); hold on; + anghist(triang2(vert,tria),'tria3'); + axes('position',axpos43); hold on; + hfnhist(relhfn2(vert, ... + tria,hvrt),'tria3'); + axes('position',axpos44); hold on; + deghist(trideg2(vert,tria),'tria3'); + + else + +%-- null size-func data + axes('position',axpos31); hold on; + scrhist(triscr2(vert,tria),'tria3'); + axes('position',axpos32); hold on; + anghist(triang2(vert,tria),'tria3'); + axes('position',axpos33); hold on; + deghist(trideg2(vert,tria),'tria3'); + + end + +end + +function deghist(dd,ty) +%DEGHIST draw histogram for "degree" quality-metric. + + dd = dd(:); + be = 1:max(dd); + hc = histc(dd,be); + + r = [.85,.00,.00] ; y = [1.0,.95,.00] ; + g = [.00,.90,.00] ; k = [.60,.60,.60] ; + + bar(be,hc,1.05,'facecolor',k,'edgecolor',k); + + axis tight; + set(gca,'ycolor', get(gca,'color'),'ytick',[],... + 'xtick',2:2:12,'layer','top','fontsize',... + 14,'linewidth',2.,'ticklength',[.025,.025],... + 'box','off','xlim',[0,12]); + + switch (ty) + case 'tria4' + text(-.225,0,'$|d|_{\tau}$',... + 'horizontalalignment','right',... + 'fontsize',22,'interpreter','latex') ; + + case 'tria3' + text(-.225,0,'$|d|_{f}$',... + 'horizontalalignment','right',... + 'fontsize',22,'interpreter','latex') ; + + end + +end + +function anghist(ad,ty) +%ANGHIST draw histogram for "angle" quality-metric. + + ad = ad(:); + be = linspace(0.,180.,91); + bm =(be(1:end-1)+be(2:end))/2.; + hc = histc(ad,be); + + switch (ty) + case 'tria4' + poor = bm < 10. | bm >= 160. ; + okay =(bm >= 10. & bm < 20. )| ... + (bm >= 140. & bm < 160.); + good =(bm >= 20. & bm < 30. )| ... + (bm >= 120. & bm < 140.); + best = bm >= 30. & bm < 120. ; + + case 'tria3' + poor = bm < 15. | bm >= 150. ; + okay =(bm >= 15. & bm < 30. )| ... + (bm >= 120. & bm < 150.); + good =(bm >= 30. & bm < 45. )| ... + (bm >= 90. & bm < 120.); + best = bm >= 45. & bm < 90. ; + + end + + r = [.85,.00,.00] ; y = [1.0,.95,.00] ; + g = [.00,.90,.00] ; k = [.60,.60,.60] ; + + bar(bm(poor),hc(poor),1.05,... + 'facecolor',r,'edgecolor',r) ; + bar(bm(okay),hc(okay),1.05,... + 'facecolor',y,'edgecolor',y) ; + bar(bm(good),hc(good),1.05,... + 'facecolor',g,'edgecolor',g) ; + bar(bm(best),hc(best),1.05,... + 'facecolor',k,'edgecolor',k) ; + + axis tight; + set(gca,'ycolor', get(gca,'color'),'ytick',[],... + 'xtick',0:30:180,'layer','top','fontsize',... + 14,'linewidth',2.,'ticklength',[.025,.025],... + 'box','off','xlim',[0.,180.]) ; + + mina = max(1.000,min(ad)); %%!! so that axes don't obscure! + maxa = min(179.0,max(ad)); + + line([ mina, mina],... + [0,max(hc)],'color','r','linewidth',1.5); + line([ maxa, maxa],... + [0,max(hc)],'color','r','linewidth',1.5); + + if ( mina > 25.0) + text(mina-1.8,.9*max(hc),num2str(min(ad),'%16.1f'),... + 'horizontalalignment',... + 'right','fontsize',16) ; + else + text(mina+1.8,.9*max(hc),num2str(min(ad),'%16.1f'),... + 'horizontalalignment',... + 'left' ,'fontsize',16) ; + end + + if ( maxa < 140.) + text(maxa+1.8,.9*max(hc),num2str(max(ad),'%16.1f'),... + 'horizontalalignment',... + 'left' ,'fontsize',16) ; + else + text(maxa-1.8,.9*max(hc),num2str(max(ad),'%16.1f'),... + 'horizontalalignment',... + 'right','fontsize',16) ; + end + + switch (ty) + case 'tria4' + text(-9.0,0.0,'$\theta_{\tau}$',... + 'horizontalalignment','right',... + 'fontsize',22,'interpreter','latex') ; + + case 'tria3' + text(-9.0,0.0,'$\theta_{f}$',... + 'horizontalalignment','right',... + 'fontsize',22,'interpreter','latex') ; + + end + +end + +function scrhist(sc,ty) +%SCRHIST draw histogram for "score" quality-metric. + + sc = sc(:); + be = linspace(0.,1.,101); + bm = (be(1:end-1)+be(2:end)) / 2.; + hc = histc(sc,be); + + switch (ty) + case 'tria4' + poor = bm < .25 ; + okay = bm >= .25 & bm < .50 ; + good = bm >= .50 & bm < .75 ; + best = bm >= .75 ; + + case 'tria3' + poor = bm < .30 ; + okay = bm >= .30 & bm < .60 ; + good = bm >= .60 & bm < .90 ; + best = bm >= .90 ; + + end + + r = [.85,.00,.00] ; y = [1.0,.95,.00] ; + g = [.00,.90,.00] ; k = [.60,.60,.60] ; + + bar(bm(poor),hc(poor),1.05,... + 'facecolor',r,'edgecolor',r) ; + bar(bm(okay),hc(okay),1.05,... + 'facecolor',y,'edgecolor',y) ; + bar(bm(good),hc(good),1.05,... + 'facecolor',g,'edgecolor',g) ; + bar(bm(best),hc(best),1.05,... + 'facecolor',k,'edgecolor',k) ; + + axis tight; + set(gca,'ycolor', get(gca,'color'),'ytick',[],... + 'xtick',.0:.2:1.,'layer','top','fontsize',... + 14,'linewidth',2.,'ticklength',[.025,.025],... + 'box','off','xlim',[0.,1.]) ; + + mins = max(0.010,min(sc)); %%!! so that axes don't obscure! + maxs = min(0.990,max(sc)); + + line([ mins, mins],... + [0,max(hc)],'color','r','linewidth',1.5); + line([mean(sc),mean(sc)],... + [0,max(hc)],'color','r','linewidth',1.5); + + if ( mins > .4) + text(mins-.01,.9*max(hc),num2str(min(sc),'%16.3f'),... + 'horizontalalignment',... + 'right','fontsize',16) ; + else + text(mins+.01,.9*max(hc),num2str(min(sc),'%16.3f'),... + 'horizontalalignment',... + 'left' ,'fontsize',16) ; + end + + text(mean(sc)-.01,.9*max(hc),num2str(mean(sc),'%16.3f'),... + 'horizontalalignment','right','fontsize',16) ; + + switch (ty) + case 'tria4' + text(-.05,0.0,'$v_{\tau}$',... + 'horizontalalignment','right',... + 'fontsize',22,'interpreter','latex') ; + + case 'tria3' + text(-.05,0.0,'$a_{f}$',... + 'horizontalalignment','right',... + 'fontsize',22,'interpreter','latex') ; + + end + +end + +function hfnhist(hf,ty) +%HFNHIST draw histogram for "hfunc" quality-metric. + + be = linspace(0.,2.,101); + bm = (be(1:end-1)+be(2:end)) / 2.; + hc = histc(hf,be); + + poor = bm < .40 | bm >= 1.6 ; + okay =(bm >= .40 & bm < .60 )| ... + (bm >= 1.4 & bm < 1.6 ); + good =(bm >= .60 & bm < .80 )| ... + (bm >= 1.2 & bm < 1.4 ); + best = bm >= .80 & bm < 1.2 ; + + r = [.85,.00,.00] ; y = [1.0,.95,.00] ; + g = [.00,.90,.00] ; k = [.60,.60,.60] ; + + bar(bm(poor),hc(poor),1.05,... + 'facecolor',r,'edgecolor',r) ; + bar(bm(okay),hc(okay),1.05,... + 'facecolor',y,'edgecolor',y) ; + bar(bm(good),hc(good),1.05,... + 'facecolor',g,'edgecolor',g) ; + bar(bm(best),hc(best),1.05,... + 'facecolor',k,'edgecolor',k) ; + + axis tight; + set(gca,'ycolor', get(gca,'color'),'ytick',[],... + 'xtick',.0:.5:2.,'layer','top','fontsize',... + 14,'linewidth',2.,'ticklength',[.025,.025],... + 'box','off','xlim',[0.,2.]); + + line([mean(hf),mean(hf)],... + [0,max(hc)],'color','r','linewidth',1.5); + + text(mean(hf)+.02,.9*max(hc),num2str(mean(hf),'%16.2f'),... + 'horizontalalignment','left','fontsize',16); + + text(-0.100,0.0,'$h_{r}$','horizontalalignment','right',... + 'fontsize',22,'interpreter','latex'); + +end + + + diff --git a/mesh2d/fixgeo2.m b/mesh2d/fixgeo2.m new file mode 100755 index 0000000..68508b4 --- /dev/null +++ b/mesh2d/fixgeo2.m @@ -0,0 +1,374 @@ +function [node,PSLG,part] = fixgeo2(varargin) +%FIXGEO2 attempts to "fix" issues with geometry definitions. +% [NNEW,ENEW,PNEW] = FIXGEO2(NODE,EDGE,PART) returns a new +% "repaired" geometry definition. Currently, the following +% operations are performed: +% +% (1) redundant nodes are "zipped" together. +% (2) redundant edges are deleted. +% (3) edges are split about intersecting nodes. +% (4) edges are split about intersecting edges. +% +% See also REFINE2 + +%----------------------------------------------------------- +% Darren Engwirda : 2017 -- +% Email : de2363@columbia.edu +% Last updated : 13/06/2017 +%----------------------------------------------------------- + + filename = mfilename('fullpath') ; + filepath = fileparts( filename ) ; + + addpath([filepath,'/aabb-tree']) ; + +%---------------------------------------------- extract ARGS + node = []; PSLG = []; part = {}; + + if (nargin>=+1), node = varargin{1}; end + if (nargin>=+2), PSLG = varargin{2}; end + if (nargin>=+3), part = varargin{3}; end + + if (isempty(node)), return ; end + +%---------------------------------------------- default EDGE + nnum = size(node,1); + + if (isempty(PSLG)) + PSLG = [(1:nnum-1)',(2:nnum-0)';nnum,1]; + end + +%---------------------------------------------- default PART + enum = size(PSLG,1); + + if (isempty(part)), part{1} = (1:enum)'; end + +%---------------------------------------------- basic checks + if ( ~isnumeric(node) || ... + ~isnumeric(PSLG) || ... + ~iscell(part) ) + error('fixgeo2:incorrectInputClass', ... + 'Incorrect input class.') ; + end + +%---------------------------------------------- basic checks + if (ndims(node) ~= +2 || ... + ndims(PSLG) ~= +2 ) + error('fixgeo2:incorrectDimensions', ... + 'Incorrect input dimensions.') ; + end + if (size(node,2)~= +2 || ... + size(PSLG,2)~= +2 ) + error('fixgeo2:incorrectDimensions', ... + 'Incorrect input dimensions.') ; + end + +%---------------------------------------------- basic checks + if (min([PSLG(:)])<+1 || ... + max([PSLG(:)]) > nnum) + error('fixgeo2:invalidInputs', ... + 'Invalid EDGE input array.') ; + end + + pmin = cellfun(@min,part); + pmax = cellfun(@max,part); + + if (min([pmin(:)])<+1 || ... + max([pmax(:)]) > enum) + error('fixgeo2:invalidInputs', ... + 'Invalid PART input array.') ; + end + +%------------------------------------- try to "fix" geometry + while (true) + + nnum = size(node,1) ; + enum = size(PSLG,1) ; + + %--------------------------------- prune redundant nodes + [node,PSLG,part] = ... + prunenode(node,PSLG,part) ; + + %--------------------------------- prune redundant edges + [node,PSLG,part] = ... + pruneedge(node,PSLG,part) ; + + %--------------------------------- node//edge intersect! + [node,PSLG,part] = ... + splitnode(node,PSLG,part) ; + + %--------------------------------- edge//edge intersect! + [node,PSLG,part] = ... + splitedge(node,PSLG,part) ; + + if (size(node,1) == nnum && ... + size(PSLG,1) == enum ) + %--------------------------------- iterate if any change + break ; + end + + end + +end + +function [node,PSLG,part] = prunenode(node,PSLG,part) +%PRUNENODE "prune" redundant nodes by "zipping" those within +%tolerance of each other. + +%------------------------------------- calc. "zip" tolerance + nmin = min(node,[],+1) ; + nmax = max(node,[],+1) ; + ndel = nmax - nmin; + ztol = eps ^ 0.80; + zlen = ztol * max(ndel); + +%------------------------------------- index clustered nodes + ball = zeros(size(node,1),3) ; + ball(:,1:2) = node(:,1:2); + ball(:, 3) = zlen * zlen; + + [vp,vi] = ... + findball(ball,node(:,1:2)) ; + +%------------------------------------- "zip" clustered nodes + [vt,iv] = ... + sort(vp(:,2) - vp(:,1)); + + izip = zeros(size(node,1),1) ; + imap = zeros(size(node,1),1) ; + + for kk = size(vp,1):-1:+1 + ii = iv(kk); + for ip = vp(ii,1) : vp(ii,2) + jj = vi(ip) ; + if (izip(ii) == 0 && ... + izip(jj) == 0 && ... + ii~= jj ) + + %----------------------------- "zip" node JJ into II + izip(jj) = ii ; + + end + end + end + +%------------------------------------- re-index nodes//edges + next = +1 ; + for kk = +1:+1:size(vp,1) + if (izip(kk) == +0) + imap(kk) = next ; + next = next + 1 ; + end + end + + imap(izip ~= 0) = ... + imap(izip(izip ~= 0)); + + PSLG = imap(PSLG) ; + + node = node(izip == 0,:); + +end + +function [node,PSLG,part] = pruneedge(node,PSLG,part) +%PRUNEEDGE "prune" redundant topology. + +%------------------------------------- prune redundant topo. + [ptmp,ivec,jvec] = ... + unique(sort(PSLG,+2),'rows') ; + + PSLG = PSLG(ivec,:); + + for ppos = +1 : length(part) + + %--------------------------------- re-index part labels! + part{ppos} = ... + unique(jvec(part{ppos})) ; + + end + +%------------------------------------- prune collapsed topo. + keep = diff(PSLG,[],2) ~= +0 ; + + jvec = zeros(size(PSLG,1),1) ; + jvec(keep) = +1; + jvec = cumsum(jvec); + + PSLG = PSLG(keep,:); + + for ppos = +1 : length(part) + + %--------------------------------- re-index part labels! + part{ppos} = ... + unique(jvec(part{ppos})) ; + + end + +end + +function [node,PSLG,part] = splitnode(node,PSLG,part) +%SPLITNODE "split" PSLG about intersecting nodes. + + mark = false(size(PSLG,1),1); + ediv = zeros(size(PSLG,1),1); + pair = zeros(size(PSLG,1),2); + +%------------------------------------- node//edge intersect! + [lp,li] = findline ( ... + node(PSLG(:,1),1:2), ... + node(PSLG(:,2),1:2),node(:,1:2)) ; + +%------------------------------------- node//edge splitting! + nn = +0 ; + for ii = +1:+1:size(lp,1) + for ip = lp(ii,1) : lp(ii,2) + jj = li(ip) ; + ni = PSLG(jj,1) ; + nj = PSLG(jj,2) ; + if (ni~=ii && ... + nj~=ii && ~mark(jj)) + + %----------------------------- mark seen, descendent + mark(jj) = true ; + + nn = nn + 1; + + pair(nn,1) = jj ; + pair(nn,2) = ii ; + + end + end + end + + if (nn == +0), return ; end + +%------------------------------------- re-index intersection + pair = pair(1:nn,:); + + inod = PSLG(pair(:,1),1); + jnod = PSLG(pair(:,1),2); + + xnod = pair(:,2); + + ediv(pair(:,1)) = ... + (+1:nn)' + size(PSLG,1); + + PSLG(pair(:,1),1) = inod; + PSLG(pair(:,1),2) = xnod; + + PSLG = [PSLG; xnod,jnod]; + +%------------------------------------- re-index edge in part + for ppos = +1:length(part) + + enew = ediv(part{ppos}); + enew = enew(enew ~= 0) ; + + part{ppos} = ... + [part{ppos}; enew] ; + + end + +end + +function [node,PSLG,part] = splitedge(node,PSLG,part) +%SPLITEDGE "split" PSLG about intersecting edges. + + mark = false(size(PSLG,1),1); + pair = zeros(size(PSLG,1),2); + ediv = zeros(size(PSLG,1),1); + flag = zeros(size(node,1),1); + +%------------------------------------- edge//edge intersect! + [lp,li] = lineline( ... + node(PSLG(:,1),1:2), ... + node(PSLG(:,2),1:2), ... + node(PSLG(:,1),1:2), ... + node(PSLG(:,2),1:2)) ; + +%------------------------------------- edge//edge splitting! + nn = +0 ; + for ii = +1:+1:size(lp,1) + + flag(PSLG(ii,1)) = ii; + flag(PSLG(ii,2)) = ii; + + for ip = lp(ii,1) : lp(ii,2) + jj = li(ip) ; + if (~mark(ii) && ... + ~mark(jj) && ii~=jj) + + ni = PSLG(jj,1); + nj = PSLG(jj,2); + + if (flag(ni) ~= ii && ... + flag(nj) ~= ii ) + + %------------------------- mark seen, edge-pairs + mark(ii) = true ; + mark(jj) = true ; + + nn = nn + 1 ; + + pair(nn,1) = ii ; + pair(nn,2) = jj ; + + end + + end + end + + end + + if (nn == +0), return ; end + +%------------------------------------- re-index intersection + pair = pair(1:nn,:); + + [okay,ppos,qpos] = linenear ( ... + node(PSLG(pair(:,1),1),1:2), ... + node(PSLG(pair(:,1),2),1:2), ... + node(PSLG(pair(:,2),1),1:2), ... + node(PSLG(pair(:,2),2),1:2)) ; + + inod = PSLG(pair(:,1),1); + jnod = PSLG(pair(:,1),2); + + anod = PSLG(pair(:,2),1); + bnod = PSLG(pair(:,2),2); + + xnod = (+1:nn)'+size(node,1) ; + + iedg = (+1:nn)'+size(PSLG,1) ... + + 0*size(pair,1) ; + jedg = (+1:nn)'+size(PSLG,1) ... + + 1*size(pair,1) ; + + ediv(pair(:,1),1) = iedg; + ediv(pair(:,2),1) = jedg; + + PSLG(pair(:,1),1) = inod; + PSLG(pair(:,1),2) = xnod; + + PSLG(pair(:,2),1) = anod; + PSLG(pair(:,2),2) = xnod; + + PSLG = [PSLG; xnod,jnod]; + PSLG = [PSLG; xnod,bnod]; + + node = [node;(ppos+qpos)*.5] ; + +%------------------------------------- re-index edge in part + for ppos = +1:length(part) + + enew = ediv(part{ppos}); + enew = enew(enew ~= 0) ; + + part{ppos} = ... + [part{ppos}; enew] ; + + end + +end + + diff --git a/mesh2d/getnan2.m b/mesh2d/getnan2.m new file mode 100755 index 0000000..8920b19 --- /dev/null +++ b/mesh2d/getnan2.m @@ -0,0 +1,95 @@ +function [node,edge] = getnan2(varargin) +%GETNAN2 parse a NaN delimited polygon into a PSLG. +% [NODE,EDGE] = GETNAN2(NANS,FILT) converts a set of NaN +% delimited polygons to a PSLG representation. NANS is an +% D-by-2 array of coordinates, with polygon vertices spec- +% ified in connsecutive order, and delimited by NaN values +% where breaks between polygons occur. FILT is a length 2 +% vector of "small-feature" filter values. Small polygons +% wiith axis-aligned extents less than FILT are stripped +% from the output. NODE is an N-by-2 array of coordinates +% and EDGE is an E-by-2 array of edge indexing. Each row +% in EDGE represents an edge of the polygon, such that +% NODE(EDGE(JJ,1),:) and NODE(EDGE(JJ,2),:) are the coord- +% inates of the endpoints of the JJ-TH edge. +% +% See also FIXGEO2, BFSGEO2, REFINE2 + +%----------------------------------------------------------- +% Darren Engwirda : 2017 -- +% Email : de2363@columbia.edu +% Last updated : 01/10/2017 +%----------------------------------------------------------- + + data = [] ; filt = +0. ; + + if (nargin>=+1), data = varargin{1}; end + if (nargin>=+2), filt = varargin{2}; end + +%---------------------------------------------- basic checks + if ( ~isnumeric(data) || ... + ~isnumeric(filt) ) + error('getnan2:incorrectInputClass' , ... + 'Incorrect input class.') ; + end + +%---------------------------------------------- basic checks + if (ndims(data) ~= +2 ) + error('getnan2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + + if (size(data,2)~= +2 || ... + size(filt,2)>= +2 ) + error('getnan2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + +%---------------------------------- parse NaN delimited data + nvec = find(isnan(data(:,1))) ; + + if (isempty(nvec)) % no NaN's at all! + nvec = [nvec ; size(data,1) ] ; + end + + if (nvec(end)~=size(data,1) ) % append last poly + nvec = [nvec ; size(data,1) ] ; + end + + node = [] ; + edge = [] ; + next = +1 ; + + for npos = +1 : length(nvec) + + stop = nvec(npos) ; + + pnew = data(next:stop-1,1:2); + + pmin = min(pnew,[],1) ; + pmax = max(pnew,[],1) ; + + pdel = pmax-pmin; + + if any(pdel>filt) + + nold = size(node,1); + nnew = size(pnew,1); + + enew = [(1:nnew-1)', ... + (2:nnew-0)'; ... + nnew, +1 ] ; + enew = enew + nold ; + + node = [node; pnew]; + edge = [edge; enew]; + + end + + next = stop + 1 ; + + end + +end + + diff --git a/mesh2d/h_function.m b/mesh2d/h_function.m new file mode 100755 index 0000000..f2590b7 --- /dev/null +++ b/mesh2d/h_function.m @@ -0,0 +1,16 @@ +function h = h_function ( x, y ) + +%*****************************************************************************80 +% +%% H_FUNCTION is a size function for the two foci problem. +% +% Discussion: +% +% The mesh size is 0.01 near (0.25,1.0) and near (0.75,1.0). +% + h1 = 0.01 + 0.1 * sqrt ( ( x - 0.25 ).^2 + ( y - 1.0 ).^2 ); + h2 = 0.01 + 0.1 * sqrt ( ( x - 0.75 ).^2 + ( y - 1.0 ).^2 ); + h = min ( h1, h2 ); + + return +end \ No newline at end of file diff --git a/mesh2d/idxtri2.m b/mesh2d/idxtri2.m new file mode 100755 index 0000000..e7988c1 --- /dev/null +++ b/mesh2d/idxtri2.m @@ -0,0 +1,85 @@ +function [tree] = idxtri2(vert,tria) +%IDXTRI2 create a spatial-indexing structure for a 2-simplex +%triangulation embedded in the two-dimensional plane. +% [TREE] = IDXTRI2(VERT,TRIA) returns an AABB-tree design- +% ed to accelerate spatial queries into the triangulation +% defined by {VERT,TRIA}. VERT is a V-by-2 array of XY co- +% ordinates and TRIA is a T-by-3 array of triangles. Each +% row defines a triangle, such that VERT(TRIA(II,1),:), +% VERT(TRIA(II,2),:) and VERT(TRIA(II,3),:) are the coord- +% inates of the II-TH triangle. +% +% See also TRIHFN2, LFSHFN2, MAKETREE + +% Darren Engwirda : 2017 -- +% Email : de2363@columbia.edu +% Last updated : 03/07/2017 + + filename = mfilename('fullpath'); + filepath = fileparts( filename ); + + addpath([filepath,'/aabb-tree']); + +%---------------------------------------------- basic checks + if ( ~isnumeric(vert) || ... + ~isnumeric(tria) ) + error('idxtri2:incorrectInputClass' , ... + 'Incorrect input class.') ; + end + +%---------------------------------------------- basic checks + if (ndims(vert) ~= +2 || ... + ndims(tria) ~= +2 ) + error('idxtri2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + if (size(vert,2)~= +2 || ... + size(tria,2) < +3 ) + error('idxtri2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + + nvrt = size(vert,1) ; + +%---------------------------------------------- basic checks + if (min(min(tria(:,1:3))) < +1 || ... + max(max(tria(:,1:3))) > nvrt ) + error('idxtri2:invalidInputs', ... + 'Invalid TRIA input array.') ; + end + +%------------------------------ calc. AABB indexing for TRIA + bmin = vert(tria(:,1),:); + bmax = vert(tria(:,1),:); + + for ii = 2 : size(tria,2) + bmin = ... + min(bmin,vert(tria(:,ii), :)); + bmax = ... + max(bmax,vert(tria(:,ii), :)); + end + + isoctave = exist( ... + 'OCTAVE_VERSION','builtin') > +0 ; + + if (isoctave) + + %-- faster for OCTAVE with large tree block size; slower + %-- loop execution... + + opts.nobj = +256 ; + + else + + %-- faster for MATLAB with small tree block size; better + %-- loop execution... + + opts.nobj = + 16 ; + + end + + tree = maketree([bmin,bmax],opts); + +end + + diff --git a/mesh2d/inpoly2.m b/mesh2d/inpoly2.m new file mode 100755 index 0000000..d6e9df9 --- /dev/null +++ b/mesh2d/inpoly2.m @@ -0,0 +1,222 @@ +function [stat] = inpoly2(varargin) +%INPOLY2 compute "points-in-polygon" queries. +% [STAT] = INPOLY2(VERT,NODE,EDGE) returns the "inside/ou- +% tside" status for a set of vertices VERT and a polygon +% {NODE,EDGE} embedded in a two-dimensional plane. General +% non-convex and multiply-connected polygonal regions can +% be handled. VERT is an N-by-2 array of XY coordinates to +% be tested. STAT is an associated N-by-1 logical array, +% with STAT(II) = TRUE if VERT(II,:) is an interior point. +% The polygonal region is defined as a piecewise-straight- +% line-graph, where NODE is an M-by-2 array of polygon ve- +% rtices and EDGE is a P-by-2 array of edge indexing. Each +% row in EDGE represents an edge of the polygon, such that +% NODE(EDGE(KK,1),:) and NODE(EDGE(KK,2),:) are the coord- +% inates of the endpoints of the KK-TH edge. If the argum- +% ent EDGE is omitted it assumed that the vertices in NODE +% are connected in ascending order. +% +% See also INPOLYGON + +% This algorithm is based on a "crossing-number" test, co- +% unting the number of times a line extending from each +% point past the right-most region of the polygon interse- +% cts with the polygonal boundary. Points with odd counts +% are "inside". A simple implementation requires that each +% edge intersection be checked for each point, leading to +% O(N*M) complexity... +% +% This implementation seeks to improve these bounds: +% +% * Sorting the query points by y-value and determining can- +% didate edge intersection sets via binary-search. Given a +% configuration with N test points, M edges and an average +% point-edge "overlap" of H, the overall complexity scales +% like O(M*H + M*LOG(N) + N*LOG(N)), where O(N*LOG(N)) +% operations are required for sorting, O(M*LOG(N)) operat- +% ions required for the set of binary-searches, and O(M*H) +% operations required for the intersection tests, where H +% is typically small on average, such that H << N. +% +% * Carefully checking points against the bounding-box asso- +% ciated with each polygon edge. This minimises the number +% of calls to the (relatively) expensive edge intersection +% test. + +% Darren Engwirda : 2017 -- +% Email : de2363@columbia.edu +% Last updated : 17/07/2017 + +%---------------------------------------------- extract args + node = []; edge = []; vert = []; + + if (nargin>=+1), vert = varargin{1}; end + if (nargin>=+2), node = varargin{2}; end + if (nargin>=+3), edge = varargin{3}; end + +%---------------------------------------------- default args + nnod = size(node,1) ; + nvrt = size(vert,1) ; + + if (isempty(edge)) + edge = [(1:nnod-1)',(2:nnod)'; nnod,1]; + end + +%---------------------------------------------- basic checks + if ( ~isnumeric(node) || ... + ~isnumeric(edge) || ... + ~isnumeric(vert) ) + error('inpoly2:incorrectInputClass' , ... + 'Incorrect input class.') ; + end + +%---------------------------------------------- basic checks + if (ndims(node) ~= +2 || ... + ndims(edge) ~= +2 || ... + ndims(vert) ~= +2 ) + error('inpoly2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + if (size(node,2)~= +2 || ... + size(edge,2)~= +2 || ... + size(vert,2)~= +2 ) + error('inpoly2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + +%---------------------------------------------- basic checks + if (min([edge(:)]) < +1 || ... + max([edge(:)]) > nnod) + error('inpoly2:invalidInputs', ... + 'Invalid EDGE input array.') ; + end + +%-------------- flip to ensure the y-axis is the "long" axis + vmin = min(vert,[],1); + vmax = max(vert,[],1); + ddxy = vmax - vmin ; + + if (ddxy(1) > ddxy(2)) + vert = vert(:,[2,1]) ; + node = node(:,[2,1]) ; + end + +%----------------------------------- sort points via y-value + swap = ... + node(edge(:,2),2) ... + < node(edge(:,1),2) ; + + edge(swap,[1,2]) = ... + edge(swap,[2,1]) ; + + [~,ivec] = ... + sort(vert(:,+2)) ; + vert = vert (ivec,:) ; + + if (exist( ... + 'OCTAVE_VERSION','builtin') > +0) + + if (exist('inpoly2_oct','file') == +3) + + %-- delegate to the compiled version of the code if it's + %-- available + + [stat] = ... + inpoly2_oct(vert,node,edge) ; + + else + + %-- otherwise, just call the native m-code version + + [stat] = ... + inpoly2_loc(vert,node,edge) ; + + end + + else + + %-- MATLAB's JIT is generally smart enough these days to + %-- run this efficiently + + [stat] = ... + inpoly2_loc(vert,node,edge) ; + + end + + stat(ivec) = stat ; + +end + +function [stat] = inpoly2_loc(vert,node,edge) +%INPOLY2_LOC the local m-code version of the crossing-number +%test. Loop over edges; do a binary-search for the first ve- +%rtex that intersects with the edge y-range; do crossing-nu- +%mber comparisons; break when the local y-range is exceeded. + + nvrt = size (vert,1) ; + nnod = size (node,1) ; + nedg = size (edge,1) ; + + stat = false(nvrt,1) ; + +%----------------------------------- loop over polygon edges + for epos = +1 : size(edge,1) + + inod = edge(epos,1) ; + jnod = edge(epos,2) ; + + %------------------------------- calc. edge bounding-box + yone = node(inod,2) ; + ytwo = node(jnod,2) ; + xone = node(inod,1) ; + xtwo = node(jnod,1) ; + + ydel = ytwo - yone; + xdel = xtwo - xone; + + xmin = min(xone,xtwo) ; + + %------------------------------- find VERT(IPOS,2)<=YONE + ilow = +1 ; iupp = nvrt ; + + while (ilow < iupp - 1) + imid = ilow ... + + floor((iupp-ilow) / 2); + + if (vert(imid,2) < yone) + ilow = imid ; + else + iupp = imid ; + end + end + + %------------------------------- calc. edge-intersection + for jpos = ilow+1 : nvrt + + ypos = vert(jpos,2) ; + if (ypos < ytwo) + xpos = vert(jpos,1) ; + if (xpos >= xmin) + if ( ... + ydel* (xpos-xone) < ... + xdel* (ypos-yone) ) + + stat(jpos) = ... + ~stat(jpos) ; + end + else + stat(jpos) = ... + ~stat(jpos) ; + end + else + break ; % done -- due to the sort + end + + end + + end + +end + + + diff --git a/mesh2d/inpoly2_oct.cpp b/mesh2d/inpoly2_oct.cpp new file mode 100755 index 0000000..75bfda6 --- /dev/null +++ b/mesh2d/inpoly2_oct.cpp @@ -0,0 +1,131 @@ + +// a fast pre-sorted variant of the crossing-number test for +// INPOLY2.m + +//---------------------------------------------------------- +// Darren Engwirda : 2017 -- +// Email : de2363@columbia.edu +// Last updated : 17/07/2017 +//---------------------------------------------------------- + +#include + +DEFUN_DLD (inpoly2_oct, args, , + "-- INPOLY2-OCT: low-level routine called by INPOLY2 to \n" + "-- compute point-in-polygon queries.") +{ + octave_value_list rval; + + int const nargin = args.length () ; + if (nargin != +3) + { + print_usage () ; + return rval ; + } + + Matrix const vert ( + args(0).matrix_value ()) ; + Matrix const node ( + args(1).matrix_value ()) ; + Matrix const edge ( + args(2).matrix_value ()) ; + + if (error_state) return rval ; + + octave_idx_type const nvrt + = vert.rows () ; + octave_idx_type const nnod + = node.rows () ; + octave_idx_type const nedg + = edge.rows () ; + +//---------------------------------- init. crossing no. bool + boolMatrix stat(nvrt, 1) ; + + octave_idx_type vpos ; + for (vpos = +0; vpos != nvrt; ++vpos) + { + stat(vpos) = false ; + } + +//---------------------------------- loop over polygon edges + octave_idx_type epos ; + for (epos = +0; epos != nedg; ++epos) + { + octave_idx_type const inod + = edge(epos,0) - 1 ; + octave_idx_type const jnod + = edge(epos,1) - 1 ; + + //------------------------------ calc. edge bounding-box + double yone = node (inod,1) ; + double ytwo = node (jnod,1) ; + double xone = node (inod,0) ; + double xtwo = node (jnod,0) ; + + double ydel = ytwo - yone ; + double xdel = xtwo - xone ; + + double xmin = xone < xtwo + ? xone : xtwo ; + + //------------------------------ find VERT(IPOS,2)<=YONE + octave_idx_type ilow = +0 ; + octave_idx_type iupp = nvrt-1; + octave_idx_type imid = +0 ; + + while (ilow < iupp - 1) + { + imid = ilow + + (iupp - ilow) / 2; + + if (vert(imid,1) < yone) + { + ilow = imid ; + } + else + { + iupp = imid ; + } + } + + //------------------------------ calc. edge-intersection + octave_idx_type vpos = ilow+1 ; + for ( ; vpos != nvrt; ++vpos) + { + double xpos = vert(vpos,0); + double ypos = vert(vpos,1); + + if (ypos < ytwo) + { + if (xpos >= xmin) + { + if ( + ydel* (xpos-xone) < + xdel* (ypos-yone) ) + { + stat(vpos) = + ! stat(vpos) ; + } + } + else + { + stat(vpos) = + ! stat(vpos) ; + } + } + else + { + break ; // done -- due to the sort + } + } + + } + + rval(0) = stat; + + return rval; +} + + + diff --git a/mesh2d/isfeat2.m b/mesh2d/isfeat2.m new file mode 100755 index 0000000..62ec410 --- /dev/null +++ b/mesh2d/isfeat2.m @@ -0,0 +1,109 @@ +function [is,bv] = isfeat2(pp,ee,tt) +%ISFEAT2 return "feature" status for the triangles in a two- +%dimensional constrained triangulation. +% [STAT] = ISFEAT2(VERT,EDGE,TRIA) returns STAT(II) = TRUE +% for any triangle including a sufficiently "sharp" angle +% located at the apex of any two constrained edges. Sharp +% features have angles of greater-than ACOS(+0.8) degrees. + +% Darren Engwirda : 2017 -- +% Email : engwirda@mit.edu +% Last updated : 27/01/2017 + +%---------------------------------------------- basic checks + if (~isnumeric(pp) || ~isnumeric(ee) || ... + ~isnumeric(tt) ) + error('isfeat2:incorrectInputClass' , ... + 'Incorrect input class.') ; + end + +%---------------------------------------------- basic checks + if (ndims(pp) ~= +2 || ndims(ee) ~= +2 || ... + ndims(tt) ~= +2 ) + error('isfeat2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + if (size(pp,2)~= +2 || size(ee,2) < +5 || ... + size(tt,2) < +6 ) + error('isfeat2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + + nnod = size(pp,1) ; nedg = size(ee,1) ; + ntri = size(tt,1) ; + +%---------------------------------------------- basic checks + if (min(min(tt(:,1:3))) < +1 || ... + max(max(tt(:,1:3))) > nnod) + error('isfeat2:invalidInputs', ... + 'Invalid TRIA input array.') ; + end + if (min(min(tt(:,4:6))) < +1 || ... + max(max(tt(:,4:6))) > nedg) + error('isfeat2:invalidInputs', ... + 'Invalid TRIA input array.') ; + end + + if (min(min(ee(:,1:2))) < +1 || ... + max(max(ee(:,1:2))) > nnod) + error('isfeat2:invalidInputs', ... + 'Invalid EDGE input array.') ; + end + if (min(min(ee(:,3:4))) < +0 || ... + max(max(ee(:,3:4))) > ntri) + error('isfeat2:invalidInputs', ... + 'Invalid EDGE input array.') ; + end + +%----------------------------------------- compute "feature" + is = false(size(tt,1),1); + bv = false(size(tt,1),3); + + EI = [3, 1, 2] ; + EJ = [1, 2, 3] ; + NI = [3, 1, 2] ; + NJ = [1, 2, 3] ; + NK = [2, 3, 1] ; + + for ii = +1 : +3 + + %------------------------------------- common edge index + ei = tt( :,EI(ii)+3); + ej = tt( :,EJ(ii)+3); + + %------------------------------------- is boundary edge? + bi = ee(ei,5) >= +1 ; + bj = ee(ej,5) >= +1 ; + + ok = bi & bj ; + + if (~any(ok)), continue; end + + ni = tt(ok,NI(ii)+0); + nj = tt(ok,NJ(ii)+0); + nk = tt(ok,NK(ii)+0); + + %------------------------------------- adj. edge vectors + vi = pp(ni,:)-pp(nj,:) ; + vj = pp(nk,:)-pp(nj,:) ; + + %------------------------------------- adj. edge lengths + li = sqrt(sum(vi.^2,2)); + lj = sqrt(sum(vj.^2,2)); + + ll = li .* lj ; + + %------------------------------------- adj. dot-product! + aa = sum(vi.*vj,2)./ll ; + + bv(ok,ii) = aa >= +.80 ; + + is(ok) = ... + is(ok) | bv(ok,ii) ; + + end + +end + + + diff --git a/mesh2d/lfshfn2.m b/mesh2d/lfshfn2.m new file mode 100755 index 0000000..ae55d92 --- /dev/null +++ b/mesh2d/lfshfn2.m @@ -0,0 +1,126 @@ +function [vert,tria,hlfs] = lfshfn2(varargin) +%LFSHFN2 calc. a discrete "local-feature-size" estimate for +%a polygonal domain embedded in R^2. +% [VERT,TRIA,HFUN] = LFSHFN2(NODE,EDGE) returns the trian- +% gulated "feature-size" estimate for the polygonal region +% {NODE,EDGE}. NODE is an N-by-2 array of polygonal verti- +% ces and EDGE is an E-by-2 array of edge indexing. Each +% row in EDGE represents an edge of the polygon, such that +% NODE(EDGE(JJ,1),:) and NODE(EDGE(JJ,2),:) are the coord- +% inates of the endpoints of the JJ-TH edge. If the argum- +% ent EDGE is omitted it assumed that the vertices in NODE +% are connected in ascending order. +% +% [...] = LFSHFN2(NODE,EDGE,PART) computes a size-estimate +% for a multiply-connected geometry. PART is a cell-array +% of polygonal "parts", where each element PART{KK} is an +% array of edge indices defining a given polygonal region. +% EDGE(PART{KK}, :) is the set of edges in the KK-TH part. +% +% VERT is a V-by-2 array of XY coordinates, TRIA is a T-by +% -3 array of triangles and HFUN is a V-by-1 array of mesh +% -size values. Each row of TRIA defines a triangle, such +% that VERT(TRIA(II,1),:), VERT(TRIA(II,2),:) and VERT( +% TRIA(II,3),:) are the coordinates of the II-TH triangle. +% +% See also TRIHFN2, LIMHFN2, IDXTRI2 + +% Darren Engwirda : 2017 -- +% Email : engwirda@mit.edu +% Last updated : 24/01/2017 + +%---------------------------------------------- extract args + node = []; PSLG = []; part = {}; opts = [] ; + + if (nargin>=+1), node = varargin{1}; end + if (nargin>=+2), PSLG = varargin{2}; end + if (nargin>=+3), part = varargin{3}; end + if (nargin>=+4), opts = varargin{4}; end + +%------------------------------ build coarse background grid + [opts] = makeopt(opts); + + [vert,conn,tria,tnum] = ... + refine2(node,PSLG,part,opts) ; + +%------------------------------ estimate local-feature-size! + hlfs = ... + +inf * ones(size(vert,1),1) ; + +%------------------------------ calc. LFS based on edge-len. + evec = vert(conn(:,2),:) - ... + vert(conn(:,1),:) ; + elen = sqrt(sum(evec.^2,2)) ; + hlen = elen * +1. ; + + for epos = +1 : size(conn,+1) + + ivrt = conn(epos,1) ; + jvrt = conn(epos,2) ; + + hlfs(ivrt) = min( ... + hlfs(ivrt),hlen(epos)) ; + hlfs(jvrt) = min( ... + hlfs(jvrt),hlen(epos)) ; + + end + +%------------------------------ push gradient limits on HFUN + DHDX = opts.dhdx; + + hlfs = ... + limhfn2(vert,tria,hlfs,DHDX) ; + +end + +function [opts] = makeopt(opts) +%MAKEOPT setup the options structure for LFSHFN2. + + if (~isfield(opts,'kind')) + opts.kind = 'delaunay'; + else + if (~strcmpi(opts.kind,'delfront') && ... + ~strcmpi(opts.kind,'delaunay') ) + error( ... + 'lfshfn2:invalidOption','Invalid refinement KIND.'); + end + end + + if (~isfield(opts,'rho2')) + opts.rho2 = sqrt(+2.) ; + else + if (~isnumeric(opts.rho2)) + error('lfshfn2:incorrectInputClass', ... + 'Incorrect input class.'); + end + if (numel(opts.rho2)~= +1) + error('lfshfn2:incorrectDimensions', ... + 'Incorrect input dimensions.') ; + end + if (opts.rho2 < +1.) + error('lfshfn2:invalidOptionValues', ... + 'Invalid OPT.RHO2 selection.') ; + end + end + + if (~isfield(opts,'dhdx')) + opts.dhdx = +0.2500 ; + else + if (~isnumeric(opts.dhdx)) + error('lfshfn2:incorrectInputClass', ... + 'Incorrect input class.'); + end + if (numel(opts.dhdx)~= +1) + error('lfshfn2:incorrectDimensions', ... + 'Incorrect input dimensions.') ; + end + if (opts.dhdx <= 0.) + error('lfshfn2:invalidOptionValues', ... + 'Invalid OPT.DHDX selection.') ; + end + end + +end + + + diff --git a/mesh2d/limgrad.m b/mesh2d/limgrad.m new file mode 100755 index 0000000..633dadc --- /dev/null +++ b/mesh2d/limgrad.m @@ -0,0 +1,146 @@ +function [ffun,flag] = limgrad(edge,elen,ffun,dfdx,imax) +%LIMGRAD impose "gradient-limits" on a function defined over +%an undirected graph. +% [FNEW] = LIMGRAD(EDGE,ELEN,FFUN,DFDX,ITER) computes a +% "gradient-limited" function FNEW on the undirected graph +% {EDGE,ELEN}, where EDGE is an NE-by-2 array of edge ind- +% ices, and ELEN is an NE-by-1 array of edge lengths. +% Gradients are limited over the graph edges, such that +% +% ABS(FNEW(N2)-FNEW(N1)) <= ELEN(II) * DFDX, +% +% where N1=EDGE(II,1) and N2=EDGE(II,2) are the two nodes +% in the II-TH edge. An iterative algorithm is used, swee- +% ping over an "active-set" of graph edges until converge- +% nce is achieved. A maximum of IMAX iterations are done. +% +% [FNEW,FLAG] = LIMGRAD(...) also returns a boolean FLAG, +% with FLAG=TRUE denoting convergence. +% +% See also LIMHFN2 + +% Darren Engwirda : 2017 -- +% Email : engwirda@mit.edu +% Last updated : 18/04/2017 + +%---------------------------------------------- basic checks + if ( ~isnumeric(edge) || ... + ~isnumeric(elen) || ... + ~isnumeric(ffun) || ... + ~isnumeric(dfdx) || ... + ~isnumeric(imax) ) + error('limgrad:incorrectInputClass' , ... + 'Incorrect input class.') ; + end +%---------------------------------------------- basic checks + if (ndims(edge) ~= +2 || ... + ndims(elen) > +2 || ... + ndims(ffun) > +2 || ... + numel(dfdx) ~= +1 || ... + numel(imax) ~= +1 ) + error('limgrad:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + if (size(edge,2) < +2 || ... + size(elen,2)~= +1 || ... + size(ffun,2)~= +1 || ... + size(edge,1)~= size(elen,1) ) + error('limgrad:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + + nnod = size(ffun,1) ; + +%---------------------------------------------- basic checks + if (dfdx < +0. || imax < +0) + error('limgrad:invalidInputArgument', ... + 'Invalid input parameter.'); + end + if (min(min(edge(:,1:2))) < +1 || ... + max(max(edge(:,1:2))) > nnod ) + error('limgrad:invalidInputArgument', ... + 'Invalid EDGE input array.') ; + end + +%-- IVEC(NPTR(II,1):NPTR(II,2)) are edges adj. to II-TH node + nvec = [edge(:,1); edge(:,2)]; + ivec = [(1:size(edge,1))'; ... + (1:size(edge,1))'] ; + + [nvec,pidx] = sort (nvec) ; + ivec = ivec (pidx) ; + + mark = false(nnod,1) ; + mark(edge(:,1)) = true ; + mark(edge(:,2)) = true ; + + idxx = find(diff(nvec) > +0) ; + + nptr = zeros(nnod,2) ; + nptr(:,2) = -1 ; + nptr(mark,1) = [+1; idxx+1]; + nptr(mark,2) = [idxx; nnod]; + +%----------------------------- ASET=ITER if node is "active" + aset = zeros(size(ffun,1),1) ; + +%----------------------------- exhaustive 'til all satisfied + ftol = min(ffun) * sqrt(eps) ; + + for iter = +1 : imax + + %------------------------- find "active" nodes this pass + aidx = find(aset == iter - 1) ; + + if (isempty(aidx)), break; end + + %------------------------- reorder => better convergence + [aval,idxx] = sort(ffun(aidx)) ; + + aidx = aidx(idxx); + + %------------------------- visit adj. edges and set DFDX + for ipos = 1 : length(aidx) + npos = aidx(ipos) ; + for jpos = nptr(npos,1) ... + : nptr(npos,2) + + epos = ivec(jpos,1) ; + + nod1 = edge(epos,1) ; + nod2 = edge(epos,2) ; + + %----------------- calc. limits about min.-value + if (ffun(nod1) > ffun(nod2)) + + fun1 = ffun(nod2) ... + + elen(epos) * dfdx ; + + if (ffun(nod1) > fun1+ftol) + ffun(nod1) = fun1; + aset(nod1) = iter; + end + + else + + fun2 = ffun(nod1) ... + + elen(epos) * dfdx ; + + if (ffun(nod2) > fun2+ftol) + ffun(nod2) = fun2; + aset(nod2) = iter; + end + + end + + end + end + + end + + flag = (iter < imax) ; + +end + + + diff --git a/mesh2d/limhfn2.m b/mesh2d/limhfn2.m new file mode 100755 index 0000000..9f44506 --- /dev/null +++ b/mesh2d/limhfn2.m @@ -0,0 +1,77 @@ +function [hfun] = limhfn2(vert,tria,hfun,dhdx) +%LIMHFN2 impose gradient limits on a discrete mesh-size fun- +%ction defined over a 2-simplex triangulation. +% [HFUN] = LIMHFN2(VERT,TRIA,HFUN,DHDX) returns a "gradie- +% nt-limited" function HFUN, defined over a triangulation +% {VERT,TRIA}. HFUN is a T-by-1 vector of function values, +% VERT is a V-by-2 array of XY coordinates and TRIA is a +% T-by-3 array of triangles. Each row of TRIA +% defines a triangle, such that VERT(TRIA(II,1),:), VERT( +% TRIA(II,2),:) and VERT(TRIA(II,3),:) are the coordinates +% of the II-TH triangle. DHDX is a scalar gradient-limit. +% HFUN is "limited" to control variation over the elements +% in the triangulation, such that (HFUN(V2)-HFUN(V1))/LL<= +% DHDX, where {V1,V2} are the vertices of a given triangle +% edge and LL is the edge-length. Limits are enforced exh- +% austively over all edges. +% +% See also TRIHFN2, LFSHFN2 + +% This function is based on a very simplified version of: +% Persson, P.O. "Mesh size functions for implicit geometr- +% ies and PDE-based gradient limiting." Engineering with +% Computers 22 (2006): 95-109. + +% Darren Engwirda : 2017 -- +% Email : engwirda@mit.edu +% Last updated : 18/04/2017 + +%---------------------------------------------- basic checks + if ( ~isnumeric(vert) || ... + ~isnumeric(tria) || ... + ~isnumeric(hfun) || ... + ~isnumeric(dhdx) ) + error('limhfn2:incorrectInputClass' , ... + 'Incorrect input class.') ; + end + +%---------------------------------------------- basic checks + if (ndims(vert) ~= +2 || ... + ndims(tria) ~= +2 || ... + ndims(hfun) ~= +2 || ... + numel(dhdx) ~= +1 ) + error('limhfn2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + if (size(vert,2)~= +2 || ... + size(tria,2) < +3 || ... + size(hfun,2)~= +1 || ... + size(vert,1)~= size(hfun,1) ) + error('limhfn2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + + nvrt = size(vert,1) ; + +%---------------------------------------------- basic checks + if (min(min(tria(:,1:3))) < +1 || ... + max(max(tria(:,1:3))) > nvrt ) + error('limhfn2:invalidInputArgument', ... + 'Invalid TRIA input array.') ; + end + +%-------------------- impose gradient limits over mesh edges + [edge,tria] = tricon2(tria); + + evec = vert(edge(:,2),:) - ... + vert(edge(:,1),:) ; + elen = sqrt(sum(evec.^2,2)) ; + +%-------------------- impose gradient limits over edge-graph + [hfun] = limgrad( ... + edge,elen,hfun,dhdx,sqrt(nvrt)) ; + +end + + + diff --git a/mesh2d/mesh-file/loadmsh.m b/mesh2d/mesh-file/loadmsh.m new file mode 100755 index 0000000..299d3c7 --- /dev/null +++ b/mesh2d/mesh-file/loadmsh.m @@ -0,0 +1,375 @@ +function [mesh] = loadmsh(name) +%LOADMSH load a *.MSH file for JIGSAW. +% +% MESH = LOADMSH(NAME); +% +% The following are optionally read from "NAME.MSH". Enti- +% ties are loaded if they are present in the file: +% +% .IF. MESH.MSHID == 'EUCLIDEAN-MESH': +% ----------------------------------- +% +% MESH.POINT.COORD - [NPxND+1] array of point coordinates, +% where ND is the number of spatial dimenions. +% COORD(K,ND+1) is an ID tag for the K-TH point. +% +% MESH.EDGE2.INDEX - [N2x 3] array of indexing for EDGE-2 +% elements, where INDEX(K,1:2) is an array of +% "point-indices" associated with the K-TH edge, and +% INDEX(K,3) is an ID tag for the K-TH edge. +% +% MESH.TRIA3.INDEX - [N3x 4] array of indexing for TRIA-3 +% elements, where INDEX(K,1:3) is an array of +% "point-indices" associated with the K-TH tria, and +% INDEX(K,4) is an ID tag for the K-TH tria. +% +% MESH.QUAD4.INDEX - [N4x 5] array of indexing for QUAD-4 +% elements, where INDEX(K,1:4) is an array of +% "point-indices" associated with the K-TH quad, and +% INDEX(K,5) is an ID tag for the K-TH quad. +% +% MESH.TRIA4.INDEX - [M4x 5] array of indexing for TRIA-4 +% elements, where INDEX(K,1:4) is an array of +% "point-indices" associated with the K-TH tria, and +% INDEX(K,5) is an ID tag for the K-TH tria. +% +% MESH.HEXA8.INDEX - [M8x 9] array of indexing for HEXA-8 +% elements, where INDEX(K,1:8) is an array of +% "point-indices" associated with the K-TH hexa, and +% INDEX(K,9) is an ID tag for the K-TH hexa. +% +% MESH.WEDG6.INDEX - [M6x 7] array of indexing for WEDG-6 +% elements, where INDEX(K,1:6) is an array of +% "point-indices" associated with the K-TH wedg, and +% INDEX(K,7) is an ID tag for the K-TH wedg. +% +% MESH.PYRA5.INDEX - [M5x 6] array of indexing for PYRA-5 +% elements, where INDEX(K,1:5) is an array of +% "point-indices" associated with the K-TH pyra, and +% INDEX(K,6) is an ID tag for the K-TH pyra. +% +% MESH.VALUE - [NPxNV] array of "values" associated with +% the vertices of the mesh. +% +% +% .IF. MESH.MSHID == 'ELLIPSOID-MESH': +% ----------------------------------- +% +% MESH.RADII - [ 3x 1] array of principle ellipsoid radii. +% +% +% .IF. MESH.MSHID == 'EUCLIDEAN-GRID': +% .OR. MESH.MSHID == 'ELLIPSOID-GRID': +% ----------------------------------- +% +% MESH.POINT.COORD - [NDx1] cell array of grid coordinates +% where ND is the number of spatial dimenions. Each +% array COORD{ID} should be a vector of grid coord.'s, +% increasing or decreasing monotonically. +% +% MESH.VALUE - [NMxNV] array of "values" associated with +% the vertices of the grid, where NM is the product of +% the dimensions of the grid. NV values are associated +% with each vertex. +% +% See also JIGSAW, SAVEMSH +% + +%----------------------------------------------------------- +% Darren Engwirda +% github.com/dengwirda/jigsaw-geo-matlab +% 27-Sep-2017 +% de2363@columbia.edu +%----------------------------------------------------------- +% + + mesh = [] ; + + try + + ffid = fopen(name,'r') ; + + real = '%f;' ; + ints = '%i;' ; + + kind = 'EUCLIDEAN-MESH'; + + nver = +0 ; + ndim = +0 ; + + while (true) + + %-- read next line from file + lstr = fgetl(ffid); + + if (ischar(lstr) ) + + if (length(lstr) > +0 && lstr(1) ~= '#') + + %-- tokenise line about '=' character + tstr = regexp(lower(lstr),'=','split'); + + switch (strtrim(tstr{1})) + case 'mshid' + + %-- read "MSHID" data + + stag = regexp(tstr{2},';','split'); + + nver = str2double(stag{1}) ; + + if (length(stag) >= +2) + kind = ... + strtrim(upper(stag{2})); + end + + case 'ndims' + + %-- read "NDIMS" data + + ndim = str2double(tstr{2}) ; + + case 'point' + + %-- read "POINT" data + + nnum = str2double(tstr{2}) ; + + numr = nnum*(ndim+1); + + data = ... + fscanf(ffid,[repmat(real,1,ndim),'%i'],numr); + + if (ndim == +2) + mesh.point.coord = [ ... + data(1:3:end), ... + data(2:3:end), ... + data(3:3:end)] ; + end + if (ndim == +3) + mesh.point.coord = [ ... + data(1:4:end), ... + data(2:4:end), ... + data(3:4:end), ... + data(4:4:end)] ; + end + + case 'coord' + + %-- read "coord" data + + stag = regexp(tstr{2},';','split'); + + idim = str2double(stag{1}) ; + cnum = str2double(stag{2}) ; + + data = fscanf(ffid,'%f',cnum) ; + + mesh.point.coord{idim}= data ; + + case 'edge2' + + %-- read "EDGE2" data + + nnum = str2double(tstr{2}) ; + + numr = nnum * 3; + + data = ... + fscanf(ffid,[repmat(ints,1,2),'%i'],numr); + + mesh.edge2.index = [ ... + data(1:3:end), ... + data(2:3:end), ... + data(3:3:end)] ; + + mesh.edge2.index(:,1:2) = ... + mesh.edge2.index(:,1:2) + 1; + + case 'tria3' + + %-- read "TRIA3" data + + nnum = str2double(tstr{2}) ; + + numr = nnum * 4; + + data = ... + fscanf(ffid,[repmat(ints,1,3),'%i'],numr); + + mesh.tria3.index = [ ... + data(1:4:end), ... + data(2:4:end), ... + data(3:4:end), ... + data(4:4:end)] ; + + mesh.tria3.index(:,1:3) = ... + mesh.tria3.index(:,1:3) + 1; + + case 'quad4' + + %-- read "QUAD4" data + + nnum = str2double(tstr{2}) ; + + numr = nnum * 5; + + data = ... + fscanf(ffid,[repmat(ints,1,4),'%i'],numr); + + mesh.quad4.index = [ ... + data(1:5:end), ... + data(2:5:end), ... + data(3:5:end), ... + data(4:5:end), ... + data(5:5:end)] ; + + mesh.quad4.index(:,1:4) = ... + mesh.quad4.index(:,1:4) + 1; + + case 'tria4' + + %-- read "TRIA4" data + + nnum = str2double(tstr{2}) ; + + numr = nnum * 5; + + data = ... + fscanf(ffid,[repmat(ints,1,4),'%i'],numr); + + mesh.tria4.index = [ ... + data(1:5:end), ... + data(2:5:end), ... + data(3:5:end), ... + data(4:5:end), ... + data(5:5:end)] ; + + mesh.tria4.index(:,1:4) = ... + mesh.tria4.index(:,1:4) + 1; + + case 'hexa8' + + %-- read "HEXA8" data + + nnum = str2double(tstr{2}) ; + + numr = nnum * 9; + + data = ... + fscanf(ffid,[repmat(ints,1,8),'%i'],numr); + + mesh.hexa8.index = [ ... + data(1:9:end), ... + data(2:9:end), ... + data(3:9:end), ... + data(4:9:end), ... + data(5:9:end), ... + data(6:9:end), ... + data(7:9:end), ... + data(8:9:end), ... + data(9:9:end)] ; + + mesh.hexa8.index(:,1:8) = ... + mesh.hexa8.index(:,1:8) + 1; + + case 'wedg6' + + %-- read "WEDG6" data + + nnum = str2double(tstr{2}) ; + + numr = nnum * 7; + + data = ... + fscanf(ffid,[repmat(ints,1,6),'%i'],numr); + + mesh.wedg6.index = [ ... + data(1:7:end), ... + data(2:7:end), ... + data(3:7:end), ... + data(4:7:end), ... + data(5:7:end), ... + data(6:7:end), ... + data(7:7:end)] ; + + mesh.wedg6.index(:,1:6) = ... + mesh.wedg6.index(:,1:6) + 1; + + case 'pyra5' + + %-- read "PYRA5" data + + nnum = str2double(tstr{2}) ; + + numr = nnum * 6; + + data = ... + fscanf(ffid,[repmat(ints,1,5),'%i'],numr); + + mesh.pyra5.index = [ ... + data(1:6:end), ... + data(2:6:end), ... + data(3:6:end), ... + data(4:6:end), ... + data(5:6:end), ... + data(6:6:end)] ; + + mesh.pyra5.index(:,1:5) = ... + mesh.pyra5.index(:,1:5) + 1; + + case 'value' + + %-- read "VALUE" data + + stag = regexp(tstr{2},';','split'); + + nnum = str2double(stag{1}) ; + vnum = str2double(stag{2}) ; + + numr = nnum * (vnum+1) ; + + fstr = repmat(real,1,vnum) ; + + data = fscanf( ... + ffid,fstr(1:end-1),numr) ; + + mesh.value = zeros(nnum, vnum); + + for vpos = +1 : vnum + + mesh.value(:,vpos) = ... + data(vpos:vnum:end) ; + + end + + end + + end + + else + %-- if(~ischar(lstr)) //i.e. end-of-file + break ; + end + + end + + mesh.mshID = kind ; + mesh.fileV = nver ; + + fclose(ffid) ; + + catch err + +%-- ensure that we close the file regardless! + if (ffid>-1) + fclose(ffid) ; + end + + rethrow(err) ; + + end + +end + + diff --git a/mesh2d/mesh-file/savemsh.m b/mesh2d/mesh-file/savemsh.m new file mode 100755 index 0000000..19e096d --- /dev/null +++ b/mesh2d/mesh-file/savemsh.m @@ -0,0 +1,558 @@ +function savemsh(name,mesh) +%SAVEMSH save a *.MSH file for JIGSAW. +% +% SAVEMSH(NAME,MESH); +% +% The following are optionally written to "NAME.MSH". Ent- +% ities are written if they are present in MESH: +% +% .IF. MESH.MSHID == 'EUCLIDEAN-MESH': +% ----------------------------------- +% +% MESH.POINT.COORD - [NPxND+1] array of point coordinates, +% where ND is the number of spatial dimenions. +% COORD(K,ND+1) is an ID tag for the K-TH point. +% +% MESH.EDGE2.INDEX - [N2x 3] array of indexing for EDGE-2 +% elements, where INDEX(K,1:2) is an array of +% "point-indices" associated with the K-TH edge, and +% INDEX(K,3) is an ID tag for the K-TH edge. +% +% MESH.TRIA3.INDEX - [N3x 4] array of indexing for TRIA-3 +% elements, where INDEX(K,1:3) is an array of +% "point-indices" associated with the K-TH tria, and +% INDEX(K,4) is an ID tag for the K-TH tria. +% +% MESH.QUAD4.INDEX - [N4x 5] array of indexing for QUAD-4 +% elements, where INDEX(K,1:4) is an array of +% "point-indices" associated with the K-TH quad, and +% INDEX(K,5) is an ID tag for the K-TH quad. +% +% MESH.TRIA4.INDEX - [M4x 5] array of indexing for TRIA-4 +% elements, where INDEX(K,1:4) is an array of +% "point-indices" associated with the K-TH tria, and +% INDEX(K,5) is an ID tag for the K-TH tria. +% +% MESH.HEXA8.INDEX - [M8x 9] array of indexing for HEXA-8 +% elements, where INDEX(K,1:8) is an array of +% "point-indices" associated with the K-TH hexa, and +% INDEX(K,9) is an ID tag for the K-TH hexa. +% +% MESH.WEDG6.INDEX - [M6x 7] array of indexing for WEDG-6 +% elements, where INDEX(K,1:6) is an array of +% "point-indices" associated with the K-TH wedg, and +% INDEX(K,7) is an ID tag for the K-TH wedg. +% +% MESH.PYRA5.INDEX - [M5x 6] array of indexing for PYRA-5 +% elements, where INDEX(K,1:5) is an array of +% "point-indices" associated with the K-TH pyra, and +% INDEX(K,6) is an ID tag for the K-TH pyra. +% +% MESH.VALUE - [NPxNV] array of "values" associated with +% the vertices of the mesh. NV values are associated +% with each vertex. +% +% +% .IF. MESH.MSHID == 'ELLIPSOID-MESH': +% ----------------------------------- +% +% MESH.RADII - [ 3x 1] array of principle ellipsoid radii. +% +% +% .IF. MESH.MSHID == 'EUCLIDEAN-GRID': +% .OR. MESH.MSHID == 'ELLIPSOID-GRID': +% ----------------------------------- +% +% MESH.POINT.COORD - [NDx1] cell array of grid coordinates +% where ND is the number of spatial dimenions. Each +% array COORD{ID} should be a vector of grid coord.'s, +% increasing or decreasing monotonically. +% +% MESH.VALUE - [NMxNV] array of "values" associated with +% the vertices of the grid, where NM is the product of +% the dimensions of the grid. NV values are associated +% with each vertex. +% +% See also JIGSAW, LOADMSH +% + +%----------------------------------------------------------- +% Darren Engwirda +% github.com/dengwirda/jigsaw-geo-matlab +% 14-Sep-2017 +% de2363@columbia.edu +%----------------------------------------------------------- +% + + if (~ischar (name)) + error('NAME must be a valid file-name!') ; + end + if (~isstruct(mesh)) + error('MESH must be a valid structure!') ; + end + + [path,file,fext] = fileparts(name) ; + + if(~strcmp(lower(fext),'.msh')) + name = [name,'.msh']; + end + + try +%-- try to write data to file + + ffid = fopen(name, 'w') ; + + nver = +2; + + if (exist('OCTAVE_VERSION','builtin') > 0) + fprintf(ffid,[ ... + '# %s.msh; created by JIGSAW''s OCTAVE interface\n'],file) ; + else + fprintf(ffid,[ ... + '# %s.msh; created by JIGSAW''s MATLAB interface\n'],file) ; + end + + if (isfield(mesh,'mshID')) + mshID = mesh.mshID ; + else + mshID = 'EUCLIDEAN-MESH'; + end + + switch (upper(mshID)) + + case 'EUCLIDEAN-MESH' + save_euclidean_mesh(ffid,nver,mesh) ; + case 'EUCLIDEAN-GRID' + save_euclidean_grid(ffid,nver,mesh) ; + case 'EUCLIDEAN-DUAL' + %save_euclidean_dual(ffid,nver,mesh) ; + + case 'ELLIPSOID-MESH' + save_ellipsoid_mesh(ffid,nver,mesh) ; + case 'ELLIPSOID-GRID' + save_ellipsoid_grid(ffid,nver,mesh) ; + case 'ELLISPOID-DUAL' + %save_ellipsoid_dual(ffid,nver,mesh) ; + + otherwise + error('Invalid mshID!') ; + + end + + fclose(ffid); + + catch err + +%-- ensure that we close the file regardless! + if (ffid>-1) + fclose(ffid) ; + end + rethrow(err) ; + + end + +end + +function save_euclidean_mesh(ffid,nver,mesh) +%SAVE-EUCLIDEAN-MESH save mesh data in EUCLDIEAN-MESH format + + fprintf(ffid,'MSHID=%u;EUCLIDEAN-MESH \n',nver); + + npts = +0; + + if (isfield(mesh,'point') && ... + isfield(mesh.point,'coord') && ... + ~isempty(mesh.point.coord) ) + +%-- write "POINT" data + + if (~isnumeric(mesh.point.coord)) + error('Incorrect input types'); + end + if (ndims(mesh.point.coord) ~= 2) + error('Incorrect dimensions!'); + end + + ndim = size(mesh.point.coord,2) - 1 ; + npts = size(mesh.point.coord,1) - 0 ; + fprintf(ffid,['NDIMS=%u','\n'],ndim); + + fprintf(ffid, ... + ['POINT=%u','\n'],size(mesh.point.coord,1)); + + if (isa(mesh.point.coord,'double')) + vstr = sprintf('%%1.%ug;',+16); + else + vstr = sprintf('%%1.%ug;',+ 8); + end + + fprintf(ffid, ... + [repmat(vstr,1,ndim),'%i\n'],mesh.point.coord'); + + end + + if (isfield(mesh,'value')) + +%-- write "VALUE" data + + if (~isnumeric(mesh.value)) + error('Incorrect input types'); + end + if (ndims(mesh.value) ~= 2) + error('Incorrect dimensions!'); + end + if (size(mesh.value,1) ~= npts) + error('Incorrect dimensions!'); + end + + nrow = size(mesh.value,1); + nval = size(mesh.value,2); + + if (isa(mesh.value, 'double')) + vstr = sprintf('%%1.%ug;',+16) ; + else + vstr = sprintf('%%1.%ug;',+ 8) ; + end + vstr = repmat(vstr,+1,nval) ; + + fprintf(ffid,['VALUE=%u;%u','\n'],[nrow,nval]); + fprintf(ffid,[vstr(1:end-1),'\n'],mesh.value'); + + end + + if (isfield(mesh,'edge2') && ... + isfield(mesh.edge2,'index') && ... + ~isempty(mesh.edge2.index) ) + +%-- write "EDGE2" data + + if (~isnumeric(mesh.edge2.index)) + error('Incorrect input types'); + end + if (ndims(mesh.edge2.index) ~= 2) + error('Incorrect dimensions!'); + end + + if (min(min(mesh.edge2.index(:,1:2))) < +1 || ... + max(max(mesh.edge2.index(:,1:2))) > npts) + error('Invalid EDGE-2 indexing!') ; + end + + index = mesh.edge2.index; + index(:,1:2) = index(:,1:2)-1 ; % file is zero-indexed! + + fprintf(ffid,['EDGE2=%u','\n'],size(index,1)); + fprintf(ffid,[repmat('%u;',1,2),'%i','\n'],index'); + + end + + if (isfield(mesh,'tria3') && ... + isfield(mesh.tria3,'index') && ... + ~isempty(mesh.tria3.index) ) + +%-- write "TRIA3" data + + if (~isnumeric(mesh.tria3.index)) + error('Incorrect input types'); + end + if (ndims(mesh.tria3.index) ~= 2) + error('Incorrect dimensions!'); + end + + if (min(min(mesh.tria3.index(:,1:3))) < +1 || ... + max(max(mesh.tria3.index(:,1:3))) > npts) + error('Invalid TRIA-3 indexing!') ; + end + + index = mesh.tria3.index; + index(:,1:3) = index(:,1:3)-1 ; % file is zero-indexed! + + fprintf(ffid,['TRIA3=%u','\n'],size(index,1)); + fprintf(ffid,[repmat('%u;',1,3),'%i','\n'],index'); + + end + + if (isfield(mesh,'quad4') && ... + isfield(mesh.quad4,'index') && ... + ~isempty(mesh.quad4.index) ) + +%-- write "QUAD4" data + + if (~isnumeric(mesh.quad4.index)) + error('Incorrect input types'); + end + if (ndims(mesh.quad4.index) ~= 2) + error('Incorrect dimensions!'); + end + + if (min(min(mesh.quad4.index(:,1:4))) < +1 || ... + max(max(mesh.quad4.index(:,1:4))) > npts) + error('Invalid QUAD-4 indexing!') ; + end + + index = mesh.quad4.index; + index(:,1:4) = index(:,1:4)-1 ; % file is zero-indexed! + + fprintf(ffid,['QUAD4=%u','\n'],size(index,1)); + fprintf(ffid,[repmat('%u;',1,4),'%i','\n'],index'); + + end + + if (isfield(mesh,'tria4') && ... + isfield(mesh.tria4,'index') && ... + ~isempty(mesh.tria4.index) ) + +%-- write "TRIA4" data + + if (~isnumeric(mesh.tria4.index)) + error('Incorrect input types'); + end + if (ndims(mesh.tria4.index) ~= 2) + error('Incorrect dimensions!'); + end + + if (min(min(mesh.tria4.index(:,1:4))) < +1 || ... + max(max(mesh.tria4.index(:,1:4))) > npts) + error('Invalid TRIA-4 indexing!') ; + end + + index = mesh.tria4.index; + index(:,1:4) = index(:,1:4)-1 ; % file is zero-indexed! + + fprintf(ffid,['TRIA4=%u','\n'],size(index,1)); + fprintf(ffid,[repmat('%u;',1,4),'%i','\n'],index'); + + end + + if (isfield(mesh,'hexa8') && ... + isfield(mesh.hexa8,'index') && ... + ~isempty(mesh.hexa8.index) ) + +%-- write "HEXA8" data + + if (~isnumeric(mesh.hexa8.index)) + error('Incorrect input types'); + end + if (ndims(mesh.hexa8.index) ~= 2) + error('Incorrect dimensions!'); + end + + if (min(min(mesh.hexa8.index(:,1:8))) < +1 || ... + max(max(mesh.hexa8.index(:,1:8))) > npts) + error('Invalid HEXA-8 indexing!') ; + end + + index = mesh.hexa8.index; + index(:,1:8) = index(:,1:8)-1 ; % file is zero-indexed! + + fprintf(ffid,['HEXA8=%u','\n'],size(index,1)); + fprintf(ffid,[repmat('%u;',1,8),'%i','\n'],index'); + + end + + if (isfield(mesh,'wedg6') && ... + isfield(mesh.wedg6,'index') && ... + ~isempty(mesh.wedg6.index) ) + +%-- write "WEDG6" data + + if (~isnumeric(mesh.wedg6.index)) + error('Incorrect input types'); + end + if (ndims(mesh.wedg6.index) ~= 2) + error('Incorrect dimensions!'); + end + + if (min(min(mesh.wedg6.index(:,1:6))) < +1 || ... + max(max(mesh.wedg6.index(:,1:6))) > npts) + error('Invalid WEDG-6 indexing!') ; + end + + index = mesh.wedg6.index; + index(:,1:6) = index(:,1:6)-1 ; % file is zero-indexed! + + fprintf(ffid,['WEDG6=%u','\n'],size(index,1)); + fprintf(ffid,[repmat('%u;',1,6),'%i','\n'],index'); + + end + + if (isfield(mesh,'pyra5') && ... + isfield(mesh.pyra5,'index') && ... + ~isempty(mesh.pyra5.index) ) + +%-- write "PYRA5" data + + if (~isnumeric(mesh.pyra5.index)) + error('Incorrect input types'); + end + if (ndims(mesh.pyra5.index) ~= 2) + error('Incorrect dimensions!'); + end + + if (min(min(mesh.pyra5.index(:,1:5))) < +1 || ... + max(max(mesh.pyra5.index(:,1:5))) > npts) + error('Invalid PYRA-5 indexing!') ; + end + + index = mesh.pyra5.index; + index(:,1:5) = index(:,1:5)-1 ; % file is zero-indexed! + + fprintf(ffid,['PYRA5=%u','\n'],size(index,1)); + fprintf(ffid,[repmat('%u;',1,6),'%i','\n'],index'); + + end + +end + +function save_ellipsoid_mesh(ffid,nver,mesh) +%SAVE-ELLIPSOID-MESH save mesh data in ELLIPSOID-MESH format + + fprintf(ffid,'MSHID=%u;ELLIPSOID-MESH \n',nver); + + npts = +0; + + if (isfield(mesh,'radii') && ... + ~isempty(mesh.radii) ) + +%-- write "RADII" data + + if (~isnumeric(mesh.radii)) + error('Incorrect input types'); + end + if (ndims(mesh.radii) ~= 2) + error('Incorrect dimensions!'); + end + if (numel(mesh.radii) ~= 3) + error('Incorrect dimensions!'); + end + + fprintf(ffid,'RADII=%f;%f;%f\n',mesh.radii'); + + end + +%-- to-do: coast edges... + +end + +function save_euclidean_grid(ffid,nver,mesh) +%SAVE-EUCLIDEAN-GRID save mesh data in EUCLIDEAN-GRID format + + save_monotonic_grid(ffid,nver,mesh, ... + 'EUCLIDEAN-GRID') ; + +end + +function save_ellipsoid_grid(ffid,nver,mesh) +%SAVE-ELLIPSOID-GRID save mesh data in ELLIPSOID-GRID format + + save_monotonic_grid(ffid,nver,mesh, ... + 'ELLIPSOID-GRID') ; + +end + +function save_monotonic_grid(ffid,nver,mesh, ... + kind) +%SAVE-MONOTONIC-GRID save mesh data in MONOTONIC-GRID format +% ==> EUCLIDEAN-GRID, ELLIPSOID-GRID, etc... + + switch (upper(kind)) + case 'EUCLIDEAN-GRID' + fprintf( ... + ffid,'MSHID=%u;EUCLIDEAN-GRID\n',nver) ; + + case 'ELLIPSOID-GRID' + fprintf( ... + ffid,'MSHID=%u;ELLIPSOID-GRID\n',nver) ; + + end + + dims = [] ; + + if (isfield(mesh,'point') && ... + isfield(mesh.point,'coord') && ... + ~isempty(mesh.point.coord) ) + +%-- write "COORD" data + + if(~iscell(mesh.point.coord) ) + error('Incorrect input types') ; + end + if ( numel(mesh.point.coord) ~= ... + length(mesh.point.coord) ) + error('Incorrect dimensions!') ; + end + + ndim = length(mesh.point.coord); + dims = zeros(1,ndim); + + fprintf(ffid, ... + ['NDIMS=%u \n'],length(mesh.point.coord)) ; + + for idim = +1 : length(mesh.point.coord) + + if ( numel(mesh.point.coord{idim}) ~= ... + length(mesh.point.coord{idim}) ) + error('Incorrect dimensions!') ; + end + + dims(ndim-idim+1) = ... + length(mesh.point.coord{idim}) ; + + if (isa(mesh.point.coord{idim}, 'double')) + vstr = sprintf('%%1.%ug\n',+16); + else + vstr = sprintf('%%1.%ug\n',+ 8); + end + + fprintf(ffid,... + 'COORD=%u;%u\n',[idim,dims(ndim-idim+1)]); + + fprintf(ffid,vstr,mesh.point.coord{idim}); + + end + + end + + if (isfield(mesh,'value')) + +%-- write "VALUE" data + + if (~isnumeric(mesh.value)) + error('Incorrect input types') ; + end + if (ndims(mesh.value) ~= length(dims)+0 && ... + ndims(mesh.value) ~= length(dims)+1 ) + error('Incorrect dimensions!') ; + end + + if (ndims(mesh.value) == length(dims)) + nval = size(mesh.value); + nval = [nval, +1] ; + else + nval = size(mesh.value); + end + + if (~all(nval(1:end-1) == dims)) + error('Incorrect dimensions!') ; + end + + if (isa(mesh.value, 'double')) + vstr = sprintf('%%1.%ug;',+16) ; + else + vstr = sprintf('%%1.%ug;',+ 8) ; + end + vstr = repmat(vstr,+1,nval(end)) ; + + vals = ... + reshape(mesh.value,[],nval(end)) ; + + fprintf(ffid, ... + 'VALUE=%u;%u\n',[prod(dims),nval(end)]); + + fprintf(ffid,[vstr(+1:end-1),'\n'],vals'); + + end + +end + + diff --git a/mesh2d/mesh_crack.m b/mesh2d/mesh_crack.m new file mode 100755 index 0000000..b6507c0 --- /dev/null +++ b/mesh2d/mesh_crack.m @@ -0,0 +1,87 @@ + + +%exterior nodes + +node = [-10 -10;10 -10; 10 10; -10 10]; +edge = [1 2; 2 3; 3 4; 4 1]; + + +opts.kind = 'delaunay'; +hfun = 4; + +% [vert,etri, tria,tnum] = refine2(node,edge,[] ,opts,hfun) ; +% +% figure; +% patch('faces',tria(:,1:3),'vertices',vert, ... +% 'facecolor','w', ... +% 'edgecolor',[.2,.2,.2]) ; +% hold on; %axis image off; +% patch('faces',edge(:,1:2),'vertices',node, ... +% 'facecolor','w', ... +% 'edgecolor',[.1,.1,.1], ... +% 'linewidth',1.5) ; +% +% + + + +%now add crack +segs = [0 -5 0 0; 0 2 2 5]; +segs = [0 -5 0 0; 1 -1 2 5]; +segs = [0 -5 0 0; 1 -1 2 5; 3 1 3 6]; + +L = 1; %nominal patch length +length_segs = sqrt( (segs(:,1)-segs(:,3)).^2 + (segs(:,2)-segs(:,4)).^2 ); +N = round(length_segs/L); +Px = []; +Py = []; +edge_crack = []; +for k=1:length(N) + + alpha = atan2(segs(k,4)-segs(k,2),segs(k,3)-segs(k,1)); + spacing=logspace(0.1,1,round(N(k)/2)); + spacing = [spacing fliplr(spacing)] + spacing = spacing*(length_segs(k)/sum(spacing)); + spacing = [0 cumsum(spacing)]; + + px{k} = segs(k,1) + spacing*cos(alpha); + py{k} = segs(k,2) + spacing*sin(alpha); + + Px = [Px;px{k}']; + Py = [Py;py{k}']; + + n = max(max([edge;edge_crack])); %number of boundary edges + edge_crack = [edge_crack; n+(1:length(px{k})-1)' n+(2:length(px{k}))']; + +end + + +node_crack = [Px Py]; +nodes = [node;node_crack]; +edge = [edge;edge_crack]; + + + +part{1} = 1:size(node,1) ; +[vert,etri, tria,tnum] = refine2(nodes,[edge;edge],part ,opts,hfun) ; + +[vert,etri, ... + tria,tnum] = smooth2(vert,etri,tria,tnum) ; + + figure; + patch('faces',tria(:,1:3),'vertices',vert, ... + 'facecolor','w', ... + 'edgecolor',[.2,.2,.2]) ; + hold on;% axis image off; + patch('faces',edge(:,1:2),'vertices',node, ... + 'facecolor','w', ... + 'edgecolor',[.1,.1,.1], ... + 'linewidth',1.5) ; + + + for k=1:size(edge_crack,1) + plot(nodes(edge_crack(k,:),1),nodes(edge_crack(k,:),2),'r') + end + axis equal + + \ No newline at end of file diff --git a/mesh2d/minlen2.m b/mesh2d/minlen2.m new file mode 100755 index 0000000..dab1082 --- /dev/null +++ b/mesh2d/minlen2.m @@ -0,0 +1,51 @@ +function [ll,ei] = minlen2(pp,tt) +%MINLEN2 return the minimum length edge for each triangle in +%a two-dimensional triangulation. +% [ELEN,IMIN] = MINLEN2(VERT,TRIA) returns the minimum le- +% ngth ELEN and local edge index IMIN for all triangles in +% the triangulation {VERT,TRIA}. + +% Darren Engwirda : 2017 -- +% Email : engwirda@mit.edu +% Last updated : 16/01/2017 + +%---------------------------------------------- basic checks + if (~isnumeric(pp) || ~isnumeric(tt) ) + error('minlen2:incorrectInputClass' , ... + 'Incorrect input class.') ; + end + +%---------------------------------------------- basic checks + if (ndims(pp) ~= +2 || ndims(tt) ~= +2 ) + error('minlen2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + if (size(pp,2)~= +2 || size(tt,2) < +3 ) + error('minlen2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + + nnod = size(pp,1) ; + +%---------------------------------------------- basic checks + if (min(min(tt(:,1:3))) < +1 || ... + max(max(tt(:,1:3))) > nnod ) + error('minlen2:invalidInputs', ... + 'Invalid TRIA input array.') ; + end + +%------------------------------------------ compute edge-len + l1 = sum((pp(tt(:,2),:) ... + -pp(tt(:,1),:)).^2,2); + l2 = sum((pp(tt(:,3),:) ... + -pp(tt(:,2),:)).^2,2); + l3 = sum((pp(tt(:,1),:) ... + -pp(tt(:,3),:)).^2,2); + +%------------------------------------------ compute min.-len + [ll,ei] = min([l1,l2,l3],[],+2); + +end + + + diff --git a/mesh2d/poly-data/airfoil.msh b/mesh2d/poly-data/airfoil.msh new file mode 100755 index 0000000..0c247e0 --- /dev/null +++ b/mesh2d/poly-data/airfoil.msh @@ -0,0 +1,957 @@ +# airfoil.msh geometry file +mshid=1 +ndims=2 +point=476 +0;0.2881949541624635;0 +0.0001598014496266842;0.3433860756922513;0 +0.005369637627154589;0.4057561419904232;0 +0.009484364418312907;0.6408539137337357;0 +0.01154779689386487;0.477422455791384;0 +0.01370968064293265;0.1106240802910179;0 +0.0160178926307708;0.7904433934018016;0 +0.01781698991544545;0.5419985346961766;0 +0.02332433126866817;0.9304286462720484;0 +0.02470265002921224;0.4486438594758511;0 +0.02480042912065983;0.5841843753587455;0 +0.02513347729109228;0.8609587678220123;0 +0.02729353681206703;0.7103745224885643;0 +0.02918582712300122;0.5018808648455888;0 +0.04396620858460665;0.2592188238631934;0 +0.04516953765414655;0.02581651648506522;0 +0.0679642625618726;0.1793021881021559;0 +0.08592047356069088;0.9651270045433193;0 +0.1296440325677395;0.02100396691821516;0 +0.1423869431018829;0.5254963864572346;0 +0.1423990761395544;0.5248605816159397;0 +0.1423997539095581;0.5262329357210547;0 +0.14242740185;0.5243150724563748;0 +0.1424516735132784;0.5271090320311487;0 +0.1424665092490613;0.5238329959101975;0 +0.1425177606288344;0.523388230940327;0 +0.1425750756170601;0.5282007954083383;0 +0.1425858673173934;0.5229770473670214;0 +0.1426755525171757;0.5225934751797467;0 +0.1427901876159012;0.5222397518809885;0 +0.142860314110294;0.5297097123693675;0 +0.1429365146905184;0.5219099095556885;0 +0.1431152119766921;0.5216099172830582;0 +0.1433195329736918;0.521347985137254;0 +0.1433835902716964;0.5315813065972179;0 +0.1435413821600378;0.5211248549167067;0 +0.1437821174040437;0.5209293381776661;0 +0.1440376888494939;0.5207606856711209;0 +0.144304046407342;0.5206144214607775;0 +0.1443478767760098;0.5339319934137166;0 +0.1445778207853436;0.5204860658850521;0 +0.1448556436225772;0.5203726352192461;0 +0.1451381840743124;0.5202718921937048;0 +0.1454227496869862;0.5201808505225927;0 +0.145709334872663;0.5200972696766257;0 +0.1457835105247796;0.5365871496032923;0 +0.1459972714073956;0.5200189142487943;0 +0.1462865597568452;0.5199450340587646;0 +0.1465785407926887;0.5198748866096139;0 +0.1468900807667524;0.5198039936367422;0 +0.1472198225092143;0.5197316065896302;0 +0.1475495651829988;0.5196614591404796;0 +0.1475940733216703;0.5391870839521289;0 +0.1478799853939563;0.5195935512892902;0 +0.1482104056049138;0.5195263887289912;0 +0.1485414996277541;0.5194614650681615;0 +0.1488914738874882;0.5193935562856495;0 +0.1492690960876644;0.519321916392073;0 +0.1496649205219001;0.5192480375990272;0 +0.1497262846678495;0.5417161241639405;0 +0.1500809811986983;0.5191711739171296;0 +0.1505051320418715;0.5190935647115111;0 +0.1509292819537222;0.5190159538760781;0 +0.1513669169507921;0.5189368515275419;0 +0.1518483818508685;0.5188502871897072;0 +0.1521174379158765;0.5441265108529478;0 +0.1523676137439907;0.5187584985978901;0 +0.1529313486535102;0.5186592466197908;0 +0.1535314987413585;0.5185540253296494;0 +0.1541444594040513;0.5184480571188033;0 +0.1547324708662927;0.5464458549395204;0 +0.154769558692351;0.5183405978605151;0 +0.155509966891259;0.5182137354277074;0 +0.1563771478831768;0.5180674705188721;0 +0.1572955762967467;0.5179129969328642;0 +0.1577554654795676;0.5488443013746291;0 +0.1582666032481939;0.5177518068812788;0 +0.1593731695320457;0.5175704681314528;0 +0.1606692208442837;0.5173630123026669;0 +0.1612390247173607;0.5513785653747618;0 +0.1620879990514368;0.5171398813836277;0 +0.1636153436265886;0.5169055613223463;0 +0.1650631178636104;0.5539561118930578;0 +0.1651689868886024;0.516671238001436;0 +0.1666558717843145;0.51645034737885;0 +0.1680834162980318;0.5162406526505947;0 +0.1692365109920502;0.5565918658394367;0 +0.1694334135390818;0.5160451324190944;0 +0.1707186757121235;0.5158600623253733;0 +0.1719432487152517;0.5156832018401474;0 +0.1731132012791932;0.5155115644447505;0 +0.1736951433122158;0.559234336251393;0 +0.1743647472467273;0.51532649458386;0 +0.175741724204272;0.515119785675779;0 +0.176838843151927;0.9858503963332623;0 +0.1771881431341171;0.5148966547567397;0 +0.1784572214819491;0.5618730757851154;0 +0.1786999781616032;0.5146541250869632;0 +0.1803048700094223;0.5143854743801057;0 +0.1819920293055475;0.5140854821074754;0 +0.1835234197787941;0.5644722629804164;0 +0.1837655021809042;0.513738474342972;0 +0.185639456147328;0.5133459470234811;0 +0.1876644385047257;0.5129377492703497;0 +0.18897465756163;0.5670139894355088;0 +0.1898566668387502;0.512542983982712;0 +0.1920475533697754;0.512186277192086;0 +0.1942916978150606;0.5118556886445731;0 +0.1947819315828383;0.5694184051826596;0 +0.1967502909246832;0.5115392773877829;0 +0.1993572285864502;0.5112460018135607;0 +0.2009863962884992;0.5716340213548392;0 +0.2020720515865833;0.5109586941543967;0 +0.2049622123595327;0.510645272443071;0 +0.2075516176410019;0.5736496411263943;0 +0.2080276904162019;0.5102982646785676;0 +0.2112219715490937;0.5099340963643044;0 +0.2145875173155218;0.5754943720530719;0 +0.2146016780752689;0.509553506039083;0 +0.2181648008991033;0.509159489069134;0 +0.2219153994228691;0.5087550217285752;0 +0.2220549914054573;0.5769965711515397;0 +0.2260098964907229;0.5083311498165131;0 +0.2299904397223145;0.5781293781474233;0 +0.230207565240562;0.5079065335448831;0 +0.2345057150814682;0.5074744550511241;0 +0.236996662337333;0.03217754908837378;0 +0.2383446365129203;0.579137563938275;0 +0.2391686541959643;0.5070386459119618;0 +0.2440689688082784;0.5066632824018598;0 +0.2471459172666073;0.5800256002694368;0 +0.249252506531775;0.5063416480552405;0 +0.2547482561785728;0.5060297155287117;0 +0.2564488954376429;0.5807905055116862;0 +0.2604719074442983;0.5057110670022666;0 +0.2662158084567636;0.5815233234316111;0 +0.2665334152989089;0.5053737612906843;0 +0.2729968070052564;0.5050125787965953;0 +0.2738491594791412;0.9445850108750165;0 +0.2765174608211964;0.5822695717215538;0 +0.2797238661441952;0.5046416912227869;0 +0.2868366388138384;0.5042737915646285;0 +0.2873120373114944;0.5830001493450254;0 +0.2943884101696312;0.5039596189744771;0 +0.2986845234408975;0.5837038643658161;0 +0.3022537152282894;0.5037290293257684;0 +0.3106079190038145;0.5035633610095829;0 +0.3106207377277315;0.5843829507939517;0 +0.3194644942414016;0.5034790355712175;0 +0.3232589238323271;0.5850344290956855;0 +0.3287297168280929;0.5034850041847676;0 +0.3365013042930514;0.585618739714846;0 +0.3385310273151845;0.5035805248189718;0 +0.3488306431099772;0.5037723109126091;0 +0.3494098875671625;0.9896622325759381;0 +0.3504294794984162;0.5861082801129669;0 +0.3584674252197146;0;0 +0.3596879453398287;0.50406633480452;0 +0.3649530694819987;0.5864799132104963;0 +0.3712310288101435;0.5044805011712015;0 +0.3801651580724865;0.5867164744995534;0 +0.3833283998537809;0.505027501611039;0 +0.3958647763356566;0.5868052789010108;0 +0.396064369706437;0.5057297232560813;0 +0.4095164583995938;0.5066058204974979;0 +0.4111375405918807;0.5867433401290327;0 +0.4235586009453982;0.5076498251874;0 +0.426024591550231;0.5865470750723034;0 +0.4382912516593933;0.5088863596320152;0 +0.4401638368144631;0.5862396217416972;0 +0.442528017796576;0.02382852951996028;0 +0.4499138984829187;0.9999999997671694;0 +0.4532787699718028;0.5103049809113145;0 +0.4535302929580212;0.585838139988482;0 +0.4663154818117619;0.5852844205219299;0 +0.4679682506248355;0.5119929979555309;0 +0.4784344313666224;0.5845896627288312;0 +0.4819497040007263;0.5138616063632071;0 +0.4900274213869125;0.5838822172954679;0 +0.4951158792246133;0.5156720096711069;0 +0.4993196101859212;0.04138627788051963;0 +0.5010296965483576;0.5832083546556532;0 +0.5077176247723401;0.5174242025241256;0 +0.5115329718682915;0.5825412080157548;0 +0.5195897917728871;0.5192077402025461;0 +0.5214671173598617;0.5818143615033478;0 +0.5308355116285384;0.5210927668958902;0 +0.5309548468794674;0.5810024412348866;0 +0.538073000498116;0.9671695271972567;0 +0.5399847368244082;0.5801457464694977;0 +0.5416004045400769;0.5230374929960817;0 +0.5486093177460134;0.5792599471751601;0 +0.549188575707376;0.04439664189703763;0 +0.551716631045565;0.5249396834988147;0 +0.5567490931134671;0.5783778794575483;0 +0.561217172536999;0.5267612796742469;0 +0.5644896752201021;0.5775002897717059;0 +0.5697595262899995;0.5284134759567678;0 +0.5718661153223366;0.5766309103928506;0 +0.5774643355980515;0.5298738873098046;0 +0.578924261033535;0.5757660053204745;0 +0.5842507421039045;0.5308268482331187;0 +0.5856094986665994;0.574915282195434;0 +0.5900000443216413;0.5311492281034589;0 +0.5919407564215362;0.5740764960646629;0 +0.5951276130508631;0.5316924978978932;0 +0.5980096820276231;0.5732414433732629;0 +0.5988782048225403;0.5327238149475306;0 +0.6013725372031331;0.5338625921867788;0 +0.6029605574440211;0.5413146417122334;0 +0.6030057303141803;0.5443720268085599;0 +0.6032087088096887;0.5351327091921121;0 +0.6035384465940297;0.5377162254881114;0 +0.6035734980832785;0.5469391259830445;0 +0.6037144518923014;0.5724287780467421;0 +0.6040664627216756;0.5485435626469553;0 +0.6046611964702606;0.5501084483694285;0 +0.6053577803540975;0.5516263202298433;0 +0.6060111937113106;0.9173282326664776;0 +0.6061420193873346;0.5530949397943914;0 +0.6070220058318228;0.554500127909705;0 +0.6080024668481201;0.5558247212320566;0 +0.6090759774670005;0.5570642412640154;0 +0.6092007409315556;0.5716228291857988;0 +0.6102236842270941;0.558223914122209;0 +0.6114293895661831;0.5593141848221421;0 +0.6126849746797234;0.5603387856390327;0 +0.6139864204451442;0.561296223429963;0 +0.6144193366635591;0.5708332962822169;0 +0.6153344083577394;0.5621775449253619;0 +0.6167255258187652;0.5629775240086019;0 +0.6181577974930406;0.5636909394524992;0 +0.6189588811248541;0.5701295812614262;0 +0.6196271702647209;0.564311818452552;0 +0.6211288566701114;0.5648364312946796;0 +0.6226602406241;0.5652558244764805;0 +0.6228497526608407;0.5695154191926122;0 +0.6242031282745302;0.5656289500184357;0 +0.6257581065874547;0.5659461061004549;0 +0.6259192768484354;0.06566103501245379;0 +0.626288132276386;0.5689646846149117;0 +0.6273259106092155;0.5661923692096025;0 +0.6289044835139066;0.5663408713880926;0 +0.6291108333971351;0.5685057432856411;0 +0.6304911752231419;0.566377439070493;0 +0.6315168158616871;0.5681102310772985;0 +0.632176985964179;0.5663349030073732;0 +0.633790650870651;0.5677363600116223;0 +0.6339949914254248;0.566228189971298;0 +0.6358486819081008;0.5660990865435451;0 +0.6358911709394306;0.5673863666597754;0 +0.6376451021060348;0.5660035689361393;0 +0.6377786248922348;0.5670498094987124;0 +0.6392877493053675;0.565946850925684;0 +0.6394098154269159;0.5667147447820753;0 +0.6406795477960259;0.5659184949472547;0 +0.6407489965204149;0.5663990788161755;0 +0.6417240761220455;0.5659073004499078;0 +0.641758480342105;0.5661356542259455;0 +0.6423754801508039;0.56590431695804;0 +0.6435089991427958;0.5560329249128699;0 +0.6435461004730314;0.5567820842843503;0 +0.643568366765976;0.5553057044744492;0 +0.6436863734852523;0.5545996783766896;0 +0.6436978301499039;0.5575334092136472;0 +0.6438792166300118;0.5539125308860093;0 +0.643899432849139;0.5582132434938103;0 +0.6440794977825135;0.5587502438575029;0 +0.6441637815441936;0.5533071730751544;0 +0.6442143491003662;0.5591508308425546;0 +0.6443161922506988;0.5594555991701782;0 +0.6443997949827462;0.5597046974580735;0 +0.6444807071238756;0.5599233484826982;0 +0.6445022856350988;0.5528494981117547;0 +0.6445690505206585;0.5601281940471381;0 +0.6446756003424525;0.5603416960220784;0 +0.6448380991350859;0.5525126417633146;0 +0.6448563057929277;0.5606161667965353;0 +0.6451503180433065;0.552254140144214;0 +0.6452649463899434;0.5610627217683941;0 +0.6453998382203281;0.5520937710534781;0 +0.645609519444406;0.5519998183008283;0 +0.6458408327307552;0.5519075817428529;0 +0.6460889840964228;0.5518067635130137;0 +0.6461685611866415;0.5617436000611633;0 +0.6463567044120282;0.5516920648515224;0 +0.6466452882159501;0.5515648294240236;0 +0.646956826094538;0.5514271461870521;0 +0.6472946894355118;0.551279463339597;0 +0.6476601597387344;0.5511211839038879;0 +0.6477822258602828;0.5625091777183115;0 +0.6480559813790023;0.5509519344195724;0 +0.6484855192247778;0.5507703719194978;0 +0.6489501488395035;0.5505770186427981;0 +0.6494545298628509;0.5503722475841641;0 +0.6500034434720874;0.550157253164798;0 +0.6500614420510828;0.5630887160077691;0 +0.6505975367035717;0.5499344975687563;0 +0.6512455218471587;0.5497039062902331;0 +0.6519508718047291;0.5494668975006789;0 +0.6527162636630237;0.5492261573672295;0 +0.652887521777302;0.5632760245352983;0 +0.6535503824707121;0.5489810889121145;0 +0.6544566946104169;0.5487370651680976;0 +0.6554438716266304;0.5485137873329222;0 +0.6562072134111077;0.5628927508369088;0 +0.6565221229102463;0.5483336427714676;0 +0.6576907336711884;0.5481935716234148;0 +0.6589577689301223;0.5480421946849674;0 +0.659938276745379;0.5618159123696387;0 +0.66032465104945;0.5478326475713402;0 +0.6613610605709255;0.5167152674403042;0 +0.6614642390049994;0.5156108164228499;0 +0.6615033431444317;0.5177227032836527;0 +0.6617757701314986;0.5186040233820677;0 +0.6617953456006944;0.5475745352450758;0 +0.6619005335960537;0.514502634992823;0 +0.662069141631946;0.5192756487522274;0 +0.6625094551127404;0.5200621960684657;0 +0.6625937388744205;0.513428783044219;0 +0.6630630686413497;0.5208517289720476;0 +0.6633867442142218;0.5472833034582436;0 +0.6635061132255942;0.5124168668407947;0 +0.6636241199448705;0.560153343481943;0 +0.6637259293347597;0.5216285742353648;0 +0.6644960280973464;0.5223770632874221;0 +0.6646025779191405;0.5114534592721611;0 +0.6651069591753185;0.5469531030394137;0 +0.6653658794239163;0.5230837604030967;0 +0.6658116211183369;0.5104467691853642;0 +0.666330183390528;0.5237352377735078;0 +0.6668446927797049;0.5581622000318021;0 +0.6669579590670764;0.5465604411438107;0 +0.6671191293280572;0.5093661982100457;0 +0.6673807874321938;0.5243202976416796;0 +0.6685028495267034;0.5248456574045122;0 +0.6689323941245675;0.5460927817039192;0 +0.6690099278930575;0.5077804189641029;0 +0.6696882981341332;0.5253060928080231;0 +0.66974698449485;0.5559778523165733;0 +0.6709135386627167;0.5455621532164514;0 +0.6709277264308184;0.525703843915835;0 +0.6712628521490842;0.5058685257099569;0 +0.6722136561293155;0.5260344324633479;0 +0.6725953302811831;0.5535827639978379;0 +0.6727578290738165;0.5449801383074373;0 +0.6735393777489662;0.5262918879743665;0 +0.6736573844682425;0.5038790239486843;0 +0.6744436398148537;0.5443882502149791;0 +0.6748974532820284;0.5264709878247231;0 +0.6754099533427507;0.5510398426558822;0 +0.6760046870913357;0.5438289062585682;0 +0.6761719330679625;0.5017962416168302;0 +0.6762791639193892;0.5265665084589273;0 +0.6774457248393446;0.5433145461138338;0 +0.6776770316064358;0.5265597922261804;0 +0.6779353113379329;0.5486279635224491;0 +0.6787768679205328;0.542844490846619;0 +0.6787923437077552;0.4996119679417461;0 +0.6790809680242091;0.5264493473805487;0 +0.680003436980769;0.5423853532411158;0 +0.6800479693338275;0.5465115394908935;0 +0.6804808855522424;0.5262411436997354;0 +0.6810904543381184;0.5418399567715824;0 +0.6815099043305963;0.4973276976961643;0 +0.6818113138433546;0.5446495050564408;0 +0.6818686246406287;0.5259456280618906;0 +0.682052067713812;0.5412259821314365;0 +0.6829313663765788;0.5406421665102243;0 +0.6832375165540725;0.5255710114724934;0 +0.6832408881746233;0.5430331653915346;0 +0.6837365096434951;0.5400960145052522;0 +0.6842806825879961;0.541744280140847;0 +0.6843143987935036;0.494943430647254;0 +0.684486344922334;0.5395982449408621;0 +0.6845807570498437;0.5251225153915584;0 +0.684911182615906;0.5409023102838546;0 +0.6851923759095371;0.5391642262693495;0 +0.6852854192256927;0.5403984999284148;0 +0.6855524650309235;0.540025696856901;0 +0.6857466772198677;0.5397235103882849;0 +0.6858552366029471;0.538786914665252;0 +0.6858930189628154;0.5394584201276302;0 +0.6859988812357187;0.5245710369199514;0 +0.6860022190958261;0.5392075830604881;0 +0.6860804744064808;0.5389659102074802;0 +0.687187708215788;0.4924472267739475;0 +0.6878714663907886;0.5237374750431627;0 +0.6899038595147431;0.5226979500148445;0 +0.6901210255455226;0.489839828805998;0 +0.6920738755725324;0.5214412661734968;0 +0.6931102850940078;0.4871309446170926;0 +0.6943551010917872;0.5199487667996436;0 +0.6961569092236459;0.4843362355604768;0 +0.6967044537886977;0.5181898553855717;0 +0.6990901792887598;0.5161309540271759;0 +0.699255415936932;0.4814624309074134;0 +0.7002156602684408;0.02231141133233905;0 +0.7014894522726536;0.5138063847552985;0 +0.7015042873099446;0.9228654054459184;0 +0.7023957238998264;0.4785087730269879;0 +0.7039048818405718;0.511226600036025;0 +0.7055704763624817;0.4754789993166924;0 +0.7063425439409912;0.5084371180273592;0 +0.7087714734952897;0.4723768392577767;0 +0.7087984464596957;0.5054513735231012;0 +0.7112691774964333;0.5022805563639849;0 +0.7119900370016694;0.469203784596175;0 +0.713745943736285;0.4989410911221057;0 +0.7152193759102374;0.4659643152263016;0 +0.7162234312854707;0.4954381948336959;0 +0.7184534152038395;0.4626658915076405;0 +0.7186961786355823;0.4917882836889476;0 +0.7211749947164208;0.4880122647155076;0 +0.7216847974341363;0.4593114990275353;0 +0.7236646201927215;0.4841295259539038;0 +0.7249087486416101;0.4559078542515635;0 +0.7261784810107201;0.4801647004205734;0 +0.728116502519697;0.4524586880579591;0 +0.7287179862614721;0.4761312191840261;0 +0.7312844644766301;0.4720425170380622;0 +0.7313053619582206;0.4489729555789381;0 +0.7338738834951073;0.4679097905755043;0 +0.7344686172436923;0.4454558806028217;0 +0.7364787845872343;0.4637397448532283;0 +0.7376001656521112;0.4419134331401438;0 +0.7390958238393068;0.4595420903060585;0 +0.7404188548680395;0.4386754631996155;0 +0.7417162749916315;0.4553242868278176;0 +0.7434371369890869;0.4351606194395572;0 +0.7443339950405061;0.4510937973391265;0 +0.7467008733656257;0.4313032547943294;0 +0.7471438774373382;0.4465386890806258;0 +0.749926834134385;0.4420096995308995;0 +0.7501291246153414;0.4271861875895411;0 +0.7528621610254049;0.4372187762055546;0 +0.7536490974016488;0.422904214123264;0 +0.755893950117752;0.4322554694954306;0 +0.7571940270718187;0.418553578434512;0 +0.7589661716483533;0.4272138138767332;0 +0.7606971552595496;0.4142350312322378;0 +0.7620039822068065;0.989987560082227;0 +0.7620248864404857;0.4221863220445812;0 +0.764087644405663;0.410041100345552;0 +0.7650114686693996;0.417264805175364;0 +0.7672906848601997;0.4060621042735875;0 +0.767884090077132;0.4125462681986392;0 +0.7702442251611501;0.4024047269485891;0 +0.7705746442079544;0.408119514817372;0 +0.7728808331303298;0.3991585483308882;0 +0.7730291846673936;0.4040763338562101;0 +0.7750858061481267;0.3963780216872692;0 +0.7751937655266374;0.4005085139069706;0 +0.7768795762676746;0.3942616500426084;0 +0.7771088464651257;0.3975541114341468;0 +0.778248454676941;0.3929639293346554;0 +0.7783293735701591;0.3951429785229266;0 +0.778855346608907;0.3933236291632056;0 +0.7790374141186476;0.3923042446840554;0 +0.8059564400464296;0.01393548212945461;0 +0.8462742897681892;0.9623614253941923;0 +0.904866327997297;0.05899554002098739;0 +0.9353390431497246;0.9070889477152377;0 +0.9421564617659897;0.4254526644945145;0 +0.9474903668742627;0.6190596835222095;0 +0.9602283528074622;0.6807999075390399;0 +0.9646991230547428;0.3797993455082178;0 +0.9714153930544853;0.1421292284503579;0 +0.9717189064249396;0.3260700972750783;0 +0.9776056900154799;0.4765088267158717;0 +0.9778551901690662;0.5694450463633984;0 +0.978387906216085;0.281300337985158;0 +0.9837757574860007;0.5251085604541004;0 +0.9838499331381172;0.8281125938519835;0 +0.985879649175331;0.2288001929409802;0 +0.9999999997671694;0.7503138072788715;0 +edge2=476 +0;1;0 +0;14;0 +1;2;0 +2;9;0 +3;10;0 +3;12;0 +4;9;0 +4;13;0 +5;15;0 +5;16;0 +6;11;0 +6;12;0 +7;10;0 +7;13;0 +8;11;0 +8;17;0 +14;16;0 +15;18;0 +17;94;0 +18;126;0 +19;20;0 +19;21;0 +20;22;0 +21;23;0 +22;24;0 +23;26;0 +24;25;0 +25;27;0 +26;30;0 +27;28;0 +28;29;0 +29;31;0 +30;34;0 +31;32;0 +32;33;0 +33;35;0 +34;39;0 +35;36;0 +36;37;0 +37;38;0 +38;40;0 +39;45;0 +40;41;0 +41;42;0 +42;43;0 +43;44;0 +44;46;0 +45;52;0 +46;47;0 +47;48;0 +48;49;0 +49;50;0 +50;51;0 +51;53;0 +52;59;0 +53;54;0 +54;55;0 +55;56;0 +56;57;0 +57;58;0 +58;60;0 +59;65;0 +60;61;0 +61;62;0 +62;63;0 +63;64;0 +64;66;0 +65;70;0 +66;67;0 +67;68;0 +68;69;0 +69;71;0 +70;75;0 +71;72;0 +72;73;0 +73;74;0 +74;76;0 +75;79;0 +76;77;0 +77;78;0 +78;80;0 +79;82;0 +80;81;0 +81;83;0 +82;86;0 +83;84;0 +84;85;0 +85;87;0 +86;91;0 +87;88;0 +88;89;0 +89;90;0 +90;92;0 +91;96;0 +92;93;0 +93;95;0 +94;138;0 +95;97;0 +96;100;0 +97;98;0 +98;99;0 +99;101;0 +100;104;0 +101;102;0 +102;103;0 +103;105;0 +104;108;0 +105;106;0 +106;107;0 +107;109;0 +108;111;0 +109;110;0 +110;112;0 +111;114;0 +112;113;0 +113;115;0 +114;117;0 +115;116;0 +116;118;0 +117;121;0 +118;119;0 +119;120;0 +120;122;0 +121;123;0 +122;124;0 +123;127;0 +124;125;0 +125;128;0 +126;156;0 +127;130;0 +128;129;0 +129;131;0 +130;133;0 +131;132;0 +132;134;0 +133;135;0 +134;136;0 +135;139;0 +136;137;0 +137;140;0 +138;154;0 +139;142;0 +140;141;0 +141;143;0 +142;144;0 +143;145;0 +144;147;0 +145;146;0 +146;148;0 +147;149;0 +148;150;0 +149;151;0 +150;152;0 +151;155;0 +152;153;0 +153;157;0 +154;171;0 +155;158;0 +156;170;0 +157;159;0 +158;160;0 +159;161;0 +160;162;0 +161;163;0 +162;165;0 +163;164;0 +164;166;0 +165;167;0 +166;168;0 +167;169;0 +168;172;0 +169;173;0 +170;180;0 +171;188;0 +172;175;0 +173;174;0 +174;176;0 +175;177;0 +176;178;0 +177;179;0 +178;181;0 +179;182;0 +180;192;0 +181;183;0 +182;184;0 +183;185;0 +184;186;0 +185;187;0 +186;190;0 +187;189;0 +188;218;0 +189;191;0 +190;193;0 +191;194;0 +192;239;0 +193;195;0 +194;196;0 +195;197;0 +196;198;0 +197;199;0 +198;200;0 +199;201;0 +200;202;0 +201;203;0 +202;204;0 +203;205;0 +204;206;0 +205;207;0 +206;214;0 +207;208;0 +208;211;0 +209;210;0 +209;212;0 +210;213;0 +211;212;0 +213;215;0 +214;223;0 +215;216;0 +216;217;0 +217;219;0 +218;399;0 +219;220;0 +220;221;0 +221;222;0 +222;224;0 +223;228;0 +224;225;0 +225;226;0 +226;227;0 +227;229;0 +228;232;0 +229;230;0 +230;231;0 +231;233;0 +232;236;0 +233;234;0 +234;235;0 +235;237;0 +236;240;0 +237;238;0 +238;241;0 +239;397;0 +240;243;0 +241;242;0 +242;244;0 +243;245;0 +244;246;0 +245;247;0 +246;248;0 +247;250;0 +248;249;0 +249;251;0 +250;252;0 +251;253;0 +252;254;0 +253;255;0 +254;256;0 +255;257;0 +256;258;0 +257;259;0 +258;259;0 +260;261;0 +260;262;0 +261;264;0 +262;263;0 +263;265;0 +264;266;0 +265;268;0 +266;267;0 +267;269;0 +268;273;0 +269;270;0 +270;271;0 +271;272;0 +272;274;0 +273;276;0 +274;275;0 +275;277;0 +276;278;0 +277;279;0 +278;280;0 +279;284;0 +280;281;0 +281;282;0 +282;283;0 +283;285;0 +284;290;0 +285;286;0 +286;287;0 +287;288;0 +288;289;0 +289;291;0 +290;296;0 +291;292;0 +292;293;0 +293;294;0 +294;295;0 +295;297;0 +296;301;0 +297;298;0 +298;299;0 +299;300;0 +300;302;0 +301;305;0 +302;303;0 +303;304;0 +304;306;0 +305;309;0 +306;307;0 +307;308;0 +308;310;0 +309;323;0 +310;315;0 +311;312;0 +311;313;0 +312;316;0 +313;314;0 +314;317;0 +315;321;0 +316;319;0 +317;318;0 +318;320;0 +319;322;0 +320;324;0 +321;327;0 +322;326;0 +323;331;0 +324;325;0 +325;328;0 +326;329;0 +327;332;0 +328;330;0 +329;333;0 +330;334;0 +331;339;0 +332;336;0 +333;337;0 +334;335;0 +335;338;0 +336;340;0 +337;342;0 +338;341;0 +339;344;0 +340;345;0 +341;343;0 +342;347;0 +343;346;0 +344;350;0 +345;348;0 +346;349;0 +347;352;0 +348;351;0 +349;353;0 +350;356;0 +351;354;0 +352;358;0 +353;355;0 +354;357;0 +355;359;0 +356;361;0 +357;360;0 +358;364;0 +359;362;0 +360;363;0 +361;365;0 +362;366;0 +363;367;0 +364;373;0 +365;370;0 +366;369;0 +367;368;0 +368;371;0 +369;375;0 +370;372;0 +371;374;0 +372;376;0 +373;386;0 +374;377;0 +375;383;0 +376;378;0 +377;381;0 +378;379;0 +379;380;0 +380;382;0 +381;385;0 +382;384;0 +383;387;0 +384;385;0 +386;389;0 +387;388;0 +388;390;0 +389;391;0 +390;392;0 +391;393;0 +392;394;0 +393;396;0 +394;395;0 +395;398;0 +396;400;0 +397;459;0 +398;401;0 +399;441;0 +400;402;0 +401;403;0 +402;404;0 +403;405;0 +404;407;0 +405;406;0 +406;408;0 +407;409;0 +408;410;0 +409;411;0 +410;412;0 +411;414;0 +412;413;0 +413;415;0 +414;416;0 +415;417;0 +416;418;0 +417;419;0 +418;421;0 +419;420;0 +420;422;0 +421;423;0 +422;424;0 +423;425;0 +424;426;0 +425;427;0 +426;428;0 +427;429;0 +428;430;0 +429;431;0 +430;432;0 +431;434;0 +432;433;0 +433;435;0 +434;436;0 +435;437;0 +436;438;0 +437;439;0 +438;440;0 +439;442;0 +440;443;0 +441;460;0 +442;444;0 +443;445;0 +444;446;0 +445;447;0 +446;448;0 +447;449;0 +448;450;0 +449;451;0 +450;452;0 +451;453;0 +452;454;0 +453;455;0 +454;456;0 +455;458;0 +456;457;0 +457;458;0 +459;461;0 +460;462;0 +461;467;0 +462;473;0 +463;466;0 +463;469;0 +464;465;0 +464;470;0 +465;475;0 +466;468;0 +467;474;0 +468;471;0 +469;472;0 +470;472;0 +471;474;0 +473;475;0 diff --git a/mesh2d/poly-data/islands.msh b/mesh2d/poly-data/islands.msh new file mode 100755 index 0000000..943ade8 --- /dev/null +++ b/mesh2d/poly-data/islands.msh @@ -0,0 +1,13818 @@ +# islands.msh geometry file +mshid=1 +ndims=2 +point=7071 +-81.71430969238281;20.9426155090332;0 +-81.71430969238281;28.44709968566895;0 +-80.49923706054688;23.9217414855957;0 +-80.49623107910156;23.92084693908691;0 +-80.49161529541016;23.93395614624023;0 +-80.48147583007812;23.94458198547363;0 +-80.481201171875;23.94160270690918;0 +-80.48021697998047;23.94344329833984;0 +-80.47142791748047;23.95318412780762;0 +-80.47030639648438;23.95564270019531;0 +-80.46610260009766;23.95392799377441;0 +-80.45969390869141;23.96203231811523;0 +-80.45661926269531;23.95925521850586;0 +-80.45512390136719;23.96206855773926;0 +-80.45242309570312;23.95823860168457;0 +-80.45167541503906;23.9603443145752;0 +-80.41802978515625;23.71335983276367;0 +-80.41583251953125;23.71842193603516;0 +-80.41497802734375;23.70603942871094;0 +-80.41059112548828;23.7175407409668;0 +-80.40997314453125;23.70332145690918;0 +-80.40200805664062;23.7052116394043;0 +-80.40181732177734;23.7114086151123;0 +-80.40053558349609;23.70797538757324;0 +-80.36050415039062;23.99465370178223;0 +-80.35710144042969;23.9981803894043;0 +-80.35668182373047;23.99398231506348;0 +-80.34984588623047;24;0 +-80.34983825683594;23.99543380737305;0 +-80.34172821044922;24;0 +-79.30782318115234;25.5889720916748;0 +-79.30589294433594;25.58681106567383;0 +-79.30570983886719;25.69783210754395;0 +-79.3046875;25.69622802734375;0 +-79.30400085449219;25.59029006958008;0 +-79.30254364013672;25.58595657348633;0 +-79.30247497558594;25.69720268249512;0 +-79.30072784423828;25.72677040100098;0 +-79.2996826171875;25.71735954284668;0 +-79.2991943359375;25.7242488861084;0 +-79.29791259765625;25.71920013427734;0 +-79.29734802246094;25.69945907592773;0 +-79.29676055908203;25.57730293273926;0 +-79.29631805419922;25.58554840087891;0 +-79.29615783691406;25.72586250305176;0 +-79.29593658447266;25.73780059814453;0 +-79.29530334472656;25.57296943664551;0 +-79.29428100585938;25.57113456726074;0 +-79.29338836669922;25.57297706604004;0 +-79.29334259033203;25.71875190734863;0 +-79.29322052001953;25.5727653503418;0 +-79.29192352294922;25.56690979003906;0 +-79.28910827636719;25.74263763427734;0 +-79.28876495361328;25.71394157409668;0 +-79.28746032714844;25.70039939880371;0 +-79.28649139404297;25.71578216552734;0 +-79.28271484375;25.54935455322266;0 +-79.28177642822266;25.75321388244629;0 +-79.28145599365234;25.55211067199707;0 +-79.28144836425781;25.54775047302246;0 +-79.28103637695312;25.76056289672852;0 +-79.27835845947266;25.71051979064941;0 +-79.27798461914062;25.75597763061523;0 +-79.27757263183594;25.70179748535156;0 +-79.27622985839844;25.76493644714355;0 +-79.27359008789062;25.54547119140625;0 +-79.27284240722656;25.54670333862305;0 +-79.2706298828125;25.75759887695312;0 +-79.27039337158203;25.76333999633789;0 +-79.26932525634766;25.54356956481934;0 +-79.26932525634766;25.74359893798828;0 +-79.26930236816406;25.53792953491211;0 +-79.26654815673828;25.77874946594238;0 +-79.26576232910156;25.74039077758789;0 +-79.26473999023438;25.73626136779785;0 +-79.26466369628906;25.70893859863281;0 +-79.26453399658203;25.7546272277832;0 +-79.26308441162109;25.53838729858398;0 +-79.26271820068359;25.77303123474121;0 +-79.26249694824219;25.7509593963623;0 +-79.26013946533203;25.52104377746582;0 +-79.25923156738281;25.76428031921387;0 +-79.25920104980469;25.52538681030273;0 +-79.25916290283203;25.73833847045898;0 +-79.25904083251953;25.69219207763672;0 +-79.25878143310547;25.78425598144531;0 +-79.25800323486328;25.77897644042969;0 +-79.25778198242188;25.52972984313965;0 +-79.25774383544922;25.52018547058105;0 +-79.25714111328125;25.7413272857666;0 +-79.25535583496094;25.52193069458008;0 +-79.25458526611328;25.73260688781738;0 +-79.25382995605469;25.73559379577637;0 +-79.25371551513672;25.69174194335938;0 +-79.25345611572266;25.78518486022949;0 +-79.25259399414062;25.74684524536133;0 +-79.25141906738281;25.7835807800293;0 +-79.25131225585938;25.74202728271484;0 +-79.25112915039062;25.76957702636719;0 +-79.25013732910156;25.77991104125977;0 +-79.25004577636719;25.7436351776123;0 +-79.24738311767578;25.69473838806152;0 +-79.24650573730469;25.74685668945312;0 +-79.24571990966797;25.73767471313477;0 +-79.24497222900391;25.74272727966309;0 +-79.24485778808594;25.69773101806641;0 +-79.24394226074219;25.73583984375;0 +-79.24323272705078;25.75581550598145;0 +-79.24140167236328;25.7358455657959;0 +-78.99591064453125;26.69454956054688;0 +-78.99462890625;26.69225311279297;0 +-78.99309539794922;26.69684600830078;0 +-78.99079895019531;26.70465660095215;0 +-78.98926544189453;26.70603370666504;0 +-78.98772430419922;26.69133567810059;0 +-78.98516845703125;26.70557403564453;0 +-78.98101043701172;26.68595695495605;0 +-78.97877502441406;26.70052146911621;0 +-78.96725463867188;26.69776153564453;0 +-78.96393585205078;26.67226982116699;0 +-78.96188354492188;26.69316673278809;0 +-78.95344543457031;26.66147232055664;0 +-78.95293426513672;26.67961502075195;0 +-78.94731140136719;26.65136528015137;0 +-78.94474792480469;26.67295265197754;0 +-78.93938446044922;26.65021324157715;0 +-78.93605041503906;26.66789627075195;0 +-78.93374633789062;26.68488883972168;0 +-78.93247985839844;26.64722633361816;0 +-78.93246459960938;26.68741607666016;0 +-78.930419921875;26.68328285217285;0 +-78.92404174804688;26.63918304443359;0 +-78.92281341552734;26.66375541687012;0 +-78.92121124267578;26.68902015686035;0 +-78.91840362548828;26.66237640380859;0 +-78.91788482666016;26.68442344665527;0 +-78.91739654541016;26.63642311096191;0 +-78.91737365722656;26.6763858795166;0 +-78.91329193115234;26.66742515563965;0 +-78.91123962402344;26.67316627502441;0 +-78.91020965576172;26.68074417114258;0 +-78.90919494628906;26.66995048522949;0 +-78.90766143798828;26.66535568237305;0 +-78.90614318847656;26.64169883728027;0 +-78.90562438964844;26.65616607666016;0 +-78.90464782714844;26.66059875488281;0 +-78.90433502197266;26.66925811767578;0 +-78.90294647216797;26.65634727478027;0 +-78.90103149414062;26.63595390319824;0 +-78.90077972412109;26.62424087524414;0 +-78.9005126953125;26.6492748260498;0 +-78.89922332763672;26.65777015686035;0 +-78.89871215820312;26.66029739379883;0 +-78.89651489257812;26.6502742767334;0 +-78.89643096923828;26.63526153564453;0 +-78.89584350585938;26.65392303466797;0 +-78.89386749267578;26.63686561584473;0 +-78.89347076416016;26.65362167358398;0 +-78.89132690429688;26.61389923095703;0 +-78.88772583007812;26.65453910827637;0 +-78.88669586181641;26.64329719543457;0 +-78.88545227050781;26.60355949401855;0 +-78.88400268554688;26.65636825561523;0 +-78.88247680664062;26.60070419311523;0 +-78.88196563720703;26.65181159973145;0 +-78.88082122802734;26.64466667175293;0 +-78.87596893310547;26.64213562011719;0 +-78.87419128417969;26.65819931030273;0 +-78.87314605712891;26.64764595031738;0 +-78.87216186523438;26.6575927734375;0 +-78.87007904052734;26.64925003051758;0 +-78.86906433105469;26.63891410827637;0 +-78.86598968505859;26.64671897888184;0 +-78.86293792724609;26.6251277923584;0 +-78.86221313476562;26.58126258850098;0 +-78.85553741455078;26.6152458190918;0 +-78.85067749023438;26.61386299133301;0 +-78.85047149658203;26.56655120849609;0 +-78.84555816650391;26.61753082275391;0 +-78.84408569335938;26.56424903869629;0 +-78.84326171875;26.61615180969238;0 +-78.83969116210938;26.61178398132324;0 +-78.83810424804688;26.65174293518066;0 +-78.83765411376953;26.60397338867188;0 +-78.83477783203125;26.65472602844238;0 +-78.83406829833984;26.60878944396973;0 +-78.83380889892578;26.61338424682617;0 +-78.83351898193359;26.64254951477051;0 +-78.83330535888672;26.60396766662598;0 +-78.83228302001953;26.6051139831543;0 +-78.83120727539062;26.64828872680664;0 +-78.82672882080078;26.55090713500977;0 +-78.82585144042969;26.63771820068359;0 +-78.82406616210938;26.63565063476562;0 +-78.82302856445312;26.64368629455566;0 +-78.82255554199219;26.61314010620117;0 +-78.82102966308594;26.61130142211914;0 +-78.81816101074219;26.65080070495605;0 +-78.81797790527344;26.60004425048828;0 +-78.81790924072266;26.64528846740723;0 +-78.81694793701172;26.60233879089355;0 +-78.816650390625;26.63518142700195;0 +-78.81621551513672;26.57432174682617;0 +-78.81509399414062;26.65102577209473;0 +-78.81492614746094;26.58671951293945;0 +-78.81417846679688;26.56949424743652;0 +-78.81385040283203;26.60390281677246;0 +-78.81330108642578;26.64941787719727;0 +-78.81192779541016;26.60901832580566;0 +-78.81127166748047;26.6377010345459;0 +-78.81058502197266;26.5853385925293;0 +-78.81053161621094;26.61909675598145;0 +-78.80989837646484;26.60507202148438;0 +-78.80958557128906;26.5681095123291;0 +-78.80903625488281;26.59245109558105;0 +-78.80899810791016;26.62139129638672;0 +-78.80878448486328;26.58900833129883;0 +-78.80873107910156;26.62965774536133;0 +-78.80742645263672;26.64871978759766;0 +-78.80692291259766;26.64228820800781;0 +-78.80622100830078;26.59842109680176;0 +-78.80595397949219;26.60370254516602;0 +-78.80565643310547;26.63080215454102;0 +-78.80492401123047;26.61059188842773;0 +-78.80490112304688;26.62253379821777;0 +-78.80421447753906;26.56856155395508;0 +-78.80409240722656;26.65100860595703;0 +-78.80369567871094;26.57476234436035;0 +-78.80345916748047;26.5600643157959;0 +-78.80315399169922;26.59818649291992;0 +-78.80306243896484;26.65652275085449;0 +-78.80294799804688;26.56442642211914;0 +-78.80286407470703;26.6200065612793;0 +-78.80265808105469;26.58578491210938;0 +-78.80242156982422;26.57016754150391;0 +-78.80240631103516;26.58234024047852;0 +-78.8023681640625;26.60898208618164;0 +-78.80117034912109;26.55707550048828;0 +-78.79833221435547;26.57452392578125;0 +-78.79798889160156;26.63079071044922;0 +-78.79757690429688;26.5657958984375;0 +-78.79724884033203;26.61333656311035;0 +-78.7972412109375;26.61770248413086;0 +-78.79718780517578;26.65054130554199;0 +-78.79704284667969;26.5811824798584;0 +-78.79695129394531;26.63974571228027;0 +-78.79608917236328;26.53525161743164;0 +-78.79598236083984;26.60483741760254;0 +-78.79597473144531;26.6082820892334;0 +-78.79596710205078;26.61540412902832;0 +-78.79489898681641;26.64502716064453;0 +-78.79448699951172;26.5791130065918;0 +-78.79338073730469;26.6337718963623;0 +-78.79298400878906;26.55935859680176;0 +-78.79226684570312;26.52789497375488;0 +-78.787841796875;26.58162879943848;0 +-78.78759002685547;26.57795333862305;0 +-78.78757476806641;26.56436347961426;0 +-78.78736877441406;26.55820274353027;0 +-78.78565216064453;26.56222915649414;0 +-78.78553771972656;26.58415222167969;0 +-78.78482818603516;26.57951736450195;0 +-78.78429412841797;26.56072425842285;0 +-78.78379821777344;26.55130767822266;0 +-78.78322601318359;26.58897018432617;0 +-78.78273010253906;26.58070182800293;0 +-78.78221130371094;26.58483505249023;0 +-78.78098297119141;26.55727386474609;0 +-78.77980041503906;26.56710052490234;0 +-78.77976226806641;26.52236175537109;0 +-78.77964782714844;26.59195137023926;0 +-78.77897644042969;26.55707168579102;0 +-78.77894592285156;26.54992294311523;0 +-78.77778625488281;26.52060890197754;0 +-78.77743530273438;26.57165718078613;0 +-78.77735137939453;26.58574676513672;0 +-78.77606964111328;26.58827018737793;0 +-78.77574920654297;26.56072044372559;0 +-78.77574920654297;26.5710506439209;0 +-78.77557373046875;26.58023262023926;0 +-78.77439117431641;26.55828857421875;0 +-78.77095794677734;26.55846405029297;0 +-78.76869964599609;26.56437492370605;0 +-78.76821899414062;26.55059432983398;0 +-78.76800537109375;26.52693748474121;0 +-78.76769256591797;26.55863189697266;0 +-78.76764678955078;26.58481216430664;0 +-78.76724243164062;26.52509880065918;0 +-78.76663208007812;26.58090782165527;0 +-78.76592254638672;26.5478343963623;0 +-78.76461029052734;26.56528472900391;0 +-78.76459503173828;26.57653999328613;0 +-78.76412200927734;26.55288314819336;0 +-78.76340484619141;26.52899742126465;0 +-78.76267242431641;26.50717926025391;0 +-78.76228332519531;26.58112907409668;0 +-78.75601196289062;26.52025604248047;0 +-78.75595855712891;26.54643821716309;0 +-78.75569152832031;26.55149078369141;0 +-78.75420379638672;26.52898216247559;0 +-78.75235748291016;26.55952262878418;0 +-78.75186920166016;26.54850006103516;0 +-78.75162506103516;26.54275703430176;0 +-78.75113677978516;26.53196144104004;0 +-78.75108337402344;26.55814361572266;0 +-78.75078582763672;26.57973098754883;0 +-78.75025177001953;26.58937454223633;0 +-78.75010681152344;26.53563499450684;0 +-78.74980926513672;26.55630302429199;0 +-78.74951934814453;26.57490539550781;0 +-78.74730682373047;26.52805137634277;0 +-78.74710083007812;26.50278854370117;0 +-78.74675750732422;26.54711151123047;0 +-78.74571228027344;26.56111907958984;0 +-78.74540710449219;26.58500289916992;0 +-78.74488830566406;26.58890533447266;0 +-78.74446868896484;26.54228401184082;0 +-78.74415588378906;26.57259750366211;0 +-78.74371337890625;26.53975677490234;0 +-78.74156951904297;26.58660316467285;0 +-78.74109649658203;26.56937789916992;0 +-78.73358917236328;26.4940357208252;0 +-78.73317718505859;26.56890106201172;0 +-78.72959899902344;26.56843757629395;0 +-78.72576904296875;26.56429672241211;0 +-78.72515869140625;26.49470901489258;0 +-78.72447967529297;26.57187271118164;0 +-78.72293853759766;26.57462501525879;0 +-78.72245025634766;26.56474876403809;0 +-78.71756744384766;26.57530403137207;0 +-78.71546173095703;26.48986434936523;0 +-78.71546173095703;26.49078369140625;0 +-78.71170806884766;26.56908988952637;0 +-78.71168518066406;26.57712936401367;0 +-78.70912933349609;26.5787296295166;0 +-78.70761871337891;26.56816482543945;0 +-78.70221710205078;26.58491706848145;0 +-78.70172882080078;26.57251358032227;0 +-78.70069122314453;26.58054733276367;0 +-78.69733428955078;26.59455299377441;0 +-78.69635772705078;26.57525825500488;0 +-78.69456481933594;26.57801055908203;0 +-78.69426727294922;26.49028015136719;0 +-78.69402313232422;26.59086990356445;0 +-78.69123840332031;26.57915115356445;0 +-78.68891143798828;26.58924865722656;0 +-78.68864440917969;26.59499168395996;0 +-78.68711853027344;26.59154319763184;0 +-78.68430328369141;26.49209594726562;0 +-78.68022155761719;26.58854293823242;0 +-78.67482757568359;26.59978485107422;0 +-78.67382049560547;26.49666595458984;0 +-78.67325592041016;26.6140193939209;0 +-78.67170715332031;26.62021636962891;0 +-78.67147827148438;26.60919189453125;0 +-78.66893768310547;26.60436248779297;0 +-78.66863250732422;26.62296295166016;0 +-78.66428375244141;26.62364387512207;0 +-78.66304016113281;26.60871315002441;0 +-78.66228485107422;26.6057243347168;0 +-78.66070556640625;26.62225723266602;0 +-78.66028594970703;26.49709129333496;0 +-78.65895080566406;26.61099815368652;0 +-78.65845489501953;26.60456657409668;0 +-78.65816497802734;26.61719703674316;0 +-78.65486145019531;26.60846328735352;0 +-78.65331268310547;26.61443138122559;0 +-78.65309143066406;26.60271644592285;0 +-78.65230560302734;26.60914611816406;0 +-78.65213012695312;26.50064659118652;0 +-78.65153503417969;26.61144256591797;0 +-78.64952087402344;26.5994930267334;0 +-78.6492919921875;26.50188636779785;0 +-78.63875579833984;26.61048889160156;0 +-78.63796997070312;26.61714553833008;0 +-78.63440704345703;26.61047744750977;0 +-78.63381195068359;26.72186470031738;0 +-78.63278198242188;26.72415733337402;0 +-78.63254547119141;26.7188777923584;0 +-78.63239288330078;26.51516151428223;0 +-78.62920379638672;26.72369194030762;0 +-78.62821960449219;26.62607765197754;0 +-78.62715911865234;26.72184753417969;0 +-78.62693023681641;26.71334838867188;0 +-78.62691497802734;26.71771240234375;0 +-78.62437438964844;26.71242332458496;0 +-78.62326812744141;26.73837280273438;0 +-78.62166595458984;26.5153636932373;0 +-78.62147521972656;26.74043464660645;0 +-78.6209716796875;26.73583984375;0 +-78.61949157714844;26.63891410827637;0 +-78.61775970458984;26.73573112487793;0 +-78.61742401123047;26.72618293762207;0 +-78.61655426025391;26.91819000244141;0 +-78.61528778076172;26.91520118713379;0 +-78.61449432373047;26.52200317382812;0 +-78.61397552490234;26.92438316345215;0 +-78.61203002929688;26.73167991638184;0 +-78.60964965820312;26.91265869140625;0 +-78.60784912109375;26.91586875915527;0 +-78.60639190673828;26.73534202575684;0 +-78.60562896728516;26.73281288146973;0 +-78.60532379150391;26.7486572265625;0 +-78.6051025390625;26.65977478027344;0 +-78.60453033447266;26.6788330078125;0 +-78.60274505615234;26.75255393981934;0 +-78.60258483886719;26.72568321228027;0 +-78.60187530517578;26.70638847351074;0 +-78.60118865966797;26.68158149719238;0 +-78.60111999511719;26.70339775085449;0 +-78.59932708740234;26.70385360717773;0 +-78.59844970703125;26.73738288879395;0 +-78.59843444824219;26.66526794433594;0 +-78.59806060791016;26.77734565734863;0 +-78.597900390625;26.67123794555664;0 +-78.59745788574219;26.72658729553223;0 +-78.59729766845703;26.77527618408203;0 +-78.59660339355469;26.75276565551758;0 +-78.59578704833984;26.76792335510254;0 +-78.59555053710938;26.7614917755127;0 +-78.59542846679688;26.73945426940918;0 +-78.59539031982422;26.73369979858398;0 +-78.59505462646484;26.75666618347168;0 +-78.59385681152344;26.73139953613281;0 +-78.59297943115234;26.76469802856445;0 +-78.59195709228516;26.6895923614502;0 +-78.59187316894531;26.71370887756348;0 +-78.59126281738281;26.74264526367188;0 +-78.59116363525391;26.77250289916992;0 +-78.59114837646484;26.70153427124023;0 +-78.5904541015625;26.6804027557373;0 +-78.59024810791016;26.73919486999512;0 +-78.59014892578125;26.69326210021973;0 +-78.58962249755859;26.69831275939941;0 +-78.58915710449219;26.68545150756836;0 +-78.58780670166016;26.70496940612793;0 +-78.58710479736328;26.6875114440918;0 +-78.58686065673828;26.68452644348145;0 +-78.58674621582031;26.71621894836426;0 +-78.58495330810547;26.79016876220703;0 +-78.58318328857422;26.70160293579102;0 +-78.58198547363281;26.68818473815918;0 +-78.58183288574219;26.69917106628418;0 +-78.58139038085938;26.71114921569824;0 +-78.58086395263672;26.71620178222656;0 +-78.58052062988281;26.81243324279785;0 +-78.57967376708984;26.6909351348877;0 +-78.57872009277344;26.81587409973145;0 +-78.57866668701172;26.54072952270508;0 +-78.57782745361328;26.70608711242676;0 +-78.57726287841797;26.79267120361328;0 +-78.57661437988281;26.68633079528809;0 +-78.57595062255859;26.80254364013672;0 +-78.57582092285156;26.796875;0 +-78.57545471191406;26.79794883728027;0 +-78.57514190673828;26.8128776550293;0 +-78.57430267333984;26.68885040283203;0 +-78.57082366943359;26.80298805236816;0 +-78.57009887695312;26.80269432067871;0 +-78.56858825683594;26.71271705627441;0 +-78.56741333007812;26.54299163818359;0 +-78.56622314453125;26.8011360168457;0 +-78.56549835205078;26.78641128540039;0 +-78.56337738037109;26.78512001037598;0 +-78.56036376953125;26.79262161254883;0 +-78.55657196044922;26.7792854309082;0 +-78.55615997314453;26.54777908325195;0 +-78.55503082275391;26.78157806396484;0 +-78.55500793457031;26.78778076171875;0 +-78.55274963378906;26.77376174926758;0 +-78.55252838134766;26.76595115661621;0 +-78.55113220214844;26.79534530639648;0 +-78.55023193359375;26.76341819763184;0 +-78.54951477050781;26.7494068145752;0 +-78.54644775390625;26.74824523925781;0 +-78.54409027099609;26.76202011108398;0 +-78.54157257080078;26.75121688842773;0 +-78.54144287109375;26.74204635620117;0 +-78.54137420654297;26.73697662353516;0 +-78.54054260253906;26.5553092956543;0 +-78.53884124755859;26.73030662536621;0 +-78.53340911865234;26.74430084228516;0 +-78.53318786621094;26.73694801330566;0 +-78.53297424316406;26.72569465637207;0 +-78.53244781494141;26.74264907836914;0 +-78.53200531005859;26.84121513366699;0 +-78.53173828125;26.84351348876953;0 +-78.53140258789062;26.73395729064941;0 +-78.53114318847656;26.73556327819824;0 +-78.53086853027344;26.73992919921875;0 +-78.53015899658203;26.72545433044434;0 +-78.52792358398438;26.83683776855469;0 +-78.52677917480469;26.73807525634766;0 +-78.52646636962891;26.75323486328125;0 +-78.52566528320312;26.7601203918457;0 +-78.52381896972656;26.83866310119629;0 +-78.52347564697266;26.73278045654297;0 +-78.52302551269531;26.76193809509277;0 +-78.52256011962891;26.83199882507324;0 +-78.5224609375;26.73117065429688;0 +-78.52218627929688;26.73507308959961;0 +-78.52210998535156;26.75482559204102;0 +-78.52069091796875;26.72542190551758;0 +-78.52047729492188;26.84163665771484;0 +-78.52037811279297;26.73874092102051;0 +-78.52008056640625;26.56120681762695;0 +-78.51981353759766;26.75114250183105;0 +-78.51946258544922;26.83887672424316;0 +-78.51671600341797;26.7575626373291;0 +-78.51643371582031;26.82738304138184;0 +-78.51583862304688;24.66436958312988;0 +-78.51516723632812;26.82485198974609;0 +-78.51513671875;26.83151245117188;0 +-78.51499176025391;26.74239730834961;0 +-78.51453399658203;26.72884559631348;0 +-78.51443481445312;26.75341987609863;0 +-78.51406097412109;24.66826248168945;0 +-78.51384735107422;26.77202224731445;0 +-78.51380157470703;26.74445343017578;0 +-78.51235961914062;26.75961303710938;0 +-78.51230621337891;26.83379936218262;0 +-78.51137542724609;26.56462287902832;0 +-78.51035308837891;24.65976715087891;0 +-78.51009368896484;26.75088119506836;0 +-78.50963592529297;26.73709678649902;0 +-78.509033203125;24.67008018493652;0 +-78.50843048095703;26.7805004119873;0 +-78.50797271728516;26.76763725280762;0 +-78.50786590576172;24.64805221557617;0 +-78.50779724121094;24.66479873657227;0 +-78.50734710693359;26.7334156036377;0 +-78.50701141357422;24.67236709594727;0 +-78.50682067871094;24.65722465515137;0 +-78.50672149658203;26.76074409484863;0 +-78.50643920898438;26.82849502563477;0 +-78.50616455078125;26.77176475524902;0 +-78.50589752197266;26.83492469787598;0 +-78.50570678710938;26.75890159606934;0 +-78.50535583496094;24.64666748046875;0 +-78.50522613525391;26.7508602142334;0 +-78.50511169433594;26.77842140197754;0 +-78.50444030761719;26.81585693359375;0 +-78.50382232666016;24.65492057800293;0 +-78.50331115722656;26.77233695983887;0 +-78.50327301025391;24.66547012329102;0 +-78.50259399414062;26.82871246337891;0 +-78.50234222412109;24.64757537841797;0 +-78.50232696533203;26.83146667480469;0 +-78.50212097167969;26.81906318664551;0 +-78.50202941894531;24.66225433349609;0 +-78.50143432617188;26.77531433105469;0 +-78.50100708007812;26.78024482727051;0 +-78.50093078613281;26.73798370361328;0 +-78.49802398681641;26.75887298583984;0 +-78.49764251708984;26.77871704101562;0 +-78.49724578857422;26.76162719726562;0 +-78.49369812011719;26.81306076049805;0 +-78.49300384521484;26.73542785644531;0 +-78.49280548095703;26.72302627563477;0 +-78.49259948730469;26.7712574005127;0 +-78.49240112304688;26.75747489929199;0 +-78.49219512939453;26.56730842590332;0 +-78.49205017089844;26.72049713134766;0 +-78.49162292480469;26.76045799255371;0 +-78.49142456054688;26.80616188049316;0 +-78.49130249023438;26.77446746826172;0 +-78.48860931396484;26.80523300170898;0 +-78.48854827880859;26.81855392456055;0 +-78.48851776123047;26.7675666809082;0 +-78.48796844482422;26.71772575378418;0 +-78.48725891113281;26.76181983947754;0 +-78.48600006103516;26.81578826904297;0 +-78.48537445068359;26.72552490234375;0 +-78.48526000976562;26.80981254577637;0 +-78.48438262939453;26.71794128417969;0 +-78.48338317871094;26.77007102966309;0 +-78.48318481445312;26.75790023803711;0 +-78.47962951660156;26.57736778259277;0 +-78.47821044921875;26.72526741027832;0 +-78.47803497314453;26.76454162597656;0 +-78.47749328613281;26.77142906188965;0 +-78.47685241699219;26.74248886108398;0 +-78.47648620605469;26.7666015625;0 +-78.47456359863281;26.73857498168945;0 +-78.47447204589844;26.75924301147461;0 +-78.47433471679688;26.73237228393555;0 +-78.47429656982422;26.74178886413574;0 +-78.47394561767578;24.65113639831543;0 +-78.47335815429688;26.77876281738281;0 +-78.47260284423828;24.65679550170898;0 +-78.47196197509766;24.64539337158203;0 +-78.47138977050781;24.66190910339355;0 +-78.47124481201172;26.73649597167969;0 +-78.47003173828125;26.77921104431152;0 +-78.46987152099609;24.66327857971191;0 +-78.46859741210938;26.75738525390625;0 +-78.46778869628906;26.76496124267578;0 +-78.46687316894531;24.65959739685059;0 +-78.46620178222656;24.64215850830078;0 +-78.46591949462891;26.72636795043945;0 +-78.46590423583984;26.73027038574219;0 +-78.46452331542969;26.58328056335449;0 +-78.46360778808594;24.66119003295898;0 +-78.46337890625;26.72245407104492;0 +-78.46331787109375;26.73508644104004;0 +-78.46330261230469;26.73830223083496;0 +-78.46039581298828;26.73842620849609;0 +-78.45950317382812;26.73001861572266;0 +-78.45844268798828;26.73851203918457;0 +-78.45792388916016;24.64006233215332;0 +-78.45571899414062;26.71851921081543;0 +-78.45506286621094;24.66069793701172;0 +-78.45464324951172;26.73022842407227;0 +-78.45339965820312;26.71875953674316;0 +-78.45233917236328;26.72772407531738;0 +-78.45209503173828;26.72746276855469;0 +-78.45096588134766;26.75042724609375;0 +-78.45027160644531;24.66480827331543;0 +-78.44953918457031;26.72699356079102;0 +-78.44931793212891;26.71918106079102;0 +-78.44812774658203;24.63979339599609;0 +-78.44769287109375;26.73892784118652;0 +-78.44703674316406;24.60537719726562;0 +-78.44661712646484;26.58665466308594;0 +-78.44645690917969;26.72927665710449;0 +-78.44567108154297;26.73340797424316;0 +-78.44549560546875;24.66547584533691;0 +-78.44497680664062;26.71664047241211;0 +-78.44485473632812;24.64138603210449;0 +-78.44434356689453;24.64459419250488;0 +-78.44322204589844;24.66936683654785;0 +-78.44304656982422;24.5996265411377;0 +-78.44276428222656;26.75176811218262;0 +-78.44269561767578;24.61310005187988;0 +-78.44242095947266;26.71906089782715;0 +-78.44227600097656;26.74763488769531;0 +-78.44167327880859;24.67853546142578;0 +-78.44086456298828;26.72052764892578;0 +-78.43965148925781;24.68036270141602;0 +-78.43868255615234;26.59006690979004;0 +-78.43767547607422;24.67324256896973;0 +-78.43729400634766;26.71913528442383;0 +-78.43643951416016;24.6168041229248;0 +-78.43629455566406;26.71292686462402;0 +-78.43392181396484;24.66978645324707;0 +-78.43150329589844;26.59394073486328;0 +-78.43119049072266;26.7110710144043;0 +-78.42584991455078;26.70415878295898;0 +-78.42529296875;24.58487129211426;0 +-78.42488098144531;24.61836051940918;0 +-78.4229736328125;24.64909362792969;0 +-78.42139434814453;24.66422653198242;0 +-78.42060089111328;24.6722526550293;0 +-78.41999053955078;26.59618949890137;0 +-78.41995239257812;24.65091514587402;0 +-78.41867828369141;24.65389060974121;0 +-78.41864013671875;26.71400451660156;0 +-78.41732788085938;26.72043037414551;0 +-78.41346740722656;26.72385787963867;0 +-78.4119873046875;26.71328735351562;0 +-78.41002655029297;24.57517051696777;0 +-78.40975952148438;24.62953758239746;0 +-78.40771484375;26.59774589538574;0 +-78.40765380859375;26.7095947265625;0 +-78.40665435791016;26.70499610900879;0 +-78.40218353271484;24.63799095153809;0 +-78.39875030517578;26.60115051269531;0 +-78.39614105224609;24.64094734191895;0 +-78.39185333251953;26.69781112670898;0 +-78.39154815673828;24.55765533447266;0 +-78.38982391357422;24.64802932739258;0 +-78.3890380859375;26.69848823547363;0 +-78.38877105712891;26.60294532775879;0 +-78.38873291015625;26.70652389526367;0 +-78.38822174072266;24.66660499572754;0 +-78.38774108886719;24.66293144226074;0 +-78.38703155517578;24.55671691894531;0 +-78.38660430908203;24.59135246276855;0 +-78.38591766357422;26.70788955688477;0 +-78.38581085205078;24.59846115112305;0 +-78.38398742675781;24.56358528137207;0 +-78.38307189941406;24.69135856628418;0 +-78.38053894042969;24.69524574279785;0 +-78.38003540039062;24.6468391418457;0 +-78.37985992431641;24.58466911315918;0 +-78.37966156005859;24.66977691650391;0 +-78.37883758544922;24.68445587158203;0 +-78.37879943847656;26.69844436645508;0 +-78.37877655029297;24.64797973632812;0 +-78.37851715087891;24.64981269836426;0 +-78.37625885009766;24.69660568237305;0 +-78.37579345703125;24.54611587524414;0 +-78.37498474121094;24.70026779174805;0 +-78.37421417236328;26.69520568847656;0 +-78.37390899658203;24.66585350036621;0 +-78.37207794189453;24.53738021850586;0 +-78.37137603759766;24.66882133483887;0 +-78.37020874023438;24.70024681091309;0 +-78.36941528320312;24.70712471008301;0 +-78.36910247802734;26.69380378723145;0 +-78.36818695068359;24.70252990722656;0 +-78.36682891845703;24.53322601318359;0 +-78.36663055419922;24.71146965026855;0 +-78.36632537841797;24.67430305480957;0 +-78.36361694335938;24.71076774597168;0 +-78.36324310302734;26.68893241882324;0 +-78.36241912841797;24.69952011108398;0 +-78.36133575439453;24.66831588745117;0 +-78.35987091064453;26.6051082611084;0 +-78.35784912109375;24.66961669921875;0 +-78.35773468017578;24.68389892578125;0 +-78.35682678222656;24.66576957702637;0 +-78.35607147216797;26.69075775146484;0 +-78.35523223876953;24.68205070495605;0 +-78.35155487060547;24.52833557128906;0 +-78.35152435302734;24.6722412109375;0 +-78.35138702392578;24.69648551940918;0 +-78.349609375;24.6996898651123;0 +-78.34918975830078;24.68385696411133;0 +-78.34745025634766;24.68109512329102;0 +-78.34616851806641;27.22150993347168;0 +-78.34593963623047;24.67191505432129;0 +-78.34586334228516;26.68680381774902;0 +-78.34486389160156;27.22449111938477;0 +-78.34458160400391;24.69943618774414;0 +-78.34368896484375;24.6796989440918;0 +-78.34310150146484;27.21874046325684;0 +-78.34051513671875;24.70744514465332;0 +-78.34004211425781;24.70285415649414;0 +-78.33995056152344;26.69159889221191;0 +-78.3397216796875;27.22561454772949;0 +-78.3389892578125;27.21757125854492;0 +-78.33864593505859;26.69618797302246;0 +-78.33857727050781;24.69458770751953;0 +-78.33655548095703;24.69687271118164;0 +-78.33582305908203;27.23202705383301;0 +-78.33564758300781;27.21801567077637;0 +-78.33457946777344;26.69134521484375;0 +-78.33453369140625;26.69984436035156;0 +-78.33450317382812;24.7042064666748;0 +-78.33430480957031;26.69409942626953;0 +-78.33356475830078;27.22236824035645;0 +-78.33348846435547;26.70328330993652;0 +-78.33225250244141;26.69500732421875;0 +-78.33121490478516;26.69798851013184;0 +-78.33000183105469;27.21637916564941;0 +-78.32870483398438;27.21890068054199;0 +-78.32867431640625;27.22372436523438;0 +-78.32810974121094;24.72344398498535;0 +-78.32791900634766;26.69268989562988;0 +-78.32762145996094;26.6995792388916;0 +-78.32692718505859;27.21406745910645;0 +-78.32633972167969;24.7259578704834;0 +-78.32632446289062;27.22991371154785;0 +-78.32630157470703;24.51330184936523;0 +-78.32537078857422;24.7199878692627;0 +-78.322998046875;27.22760200500488;0 +-78.32051086425781;27.2131175994873;0 +-78.31841278076172;27.21953582763672;0 +-78.31740570068359;26.69700241088867;0 +-78.31533813476562;26.61408042907715;0 +-78.31478881835938;24.72475242614746;0 +-78.31474304199219;24.7325553894043;0 +-78.314453125;24.50366592407227;0 +-78.31383514404297;26.68885040283203;0 +-78.31381988525391;24.50314712524414;0 +-78.31346893310547;24.73552894592285;0 +-78.3125;24.72818183898926;0 +-78.31076049804688;26.69643783569336;0 +-78.310546875;24.76120948791504;0 +-78.31002807617188;26.68984413146973;0 +-78.30876922607422;24.7646427154541;0 +-78.30859375;24.49532127380371;0 +-78.30855560302734;24.75798797607422;0 +-78.30853271484375;26.68363571166992;0 +-78.30839538574219;26.69643020629883;0 +-78.30819702148438;24.73366737365723;0 +-78.30809020996094;24.75247955322266;0 +-78.30738830566406;26.69429969787598;0 +-78.30543518066406;26.68798446655273;0 +-78.30443572998047;26.68384552001953;0 +-78.30364227294922;24.73914909362793;0 +-78.30310821533203;24.74488258361816;0 +-78.30207824707031;26.69279098510742;0 +-78.30198669433594;26.74997711181641;0 +-78.30153656005859;26.69761085510254;0 +-78.3004150390625;24.77492332458496;0 +-78.30022430419922;26.74514579772949;0 +-78.29991912841797;26.75295448303223;0 +-78.29665374755859;26.617431640625;0 +-78.29537963867188;24.77535629272461;0 +-78.29505920410156;26.75361824035645;0 +-78.29463195800781;26.69780540466309;0 +-78.29183959960938;24.48720550537109;0 +-78.29159545898438;26.69204711914062;0 +-78.29060363769531;26.72810173034668;0 +-78.28842926025391;26.74921989440918;0 +-78.28830718994141;26.7269401550293;0 +-78.28749847412109;24.79022789001465;0 +-78.28673553466797;26.73267364501953;0 +-78.28634643554688;24.77278518676758;0 +-78.28621673583984;24.79343414306641;0 +-78.28620147705078;26.69523620605469;0 +-78.28563690185547;26.62127876281738;0 +-78.28351593017578;24.78355598449707;0 +-78.280517578125;27.19614601135254;0 +-78.28038024902344;26.72598075866699;0 +-78.28004455566406;26.73929977416992;0 +-78.28001403808594;27.19430732727051;0 +-78.28000640869141;26.70392990112305;0 +-78.27877807617188;24.77710342407227;0 +-78.27845001220703;26.74870681762695;0 +-78.27782440185547;26.72527885437012;0 +-78.27718353271484;26.74594688415527;0 +-78.27667999267578;26.62215042114258;0 +-78.27616882324219;24.79177665710449;0 +-78.27615356445312;26.62206077575684;0 +-78.27427673339844;26.7199764251709;0 +-78.27359771728516;27.19289398193359;0 +-78.27337646484375;26.74110221862793;0 +-78.2733154296875;27.19633865356445;0 +-78.27274322509766;24.77227973937988;0 +-78.27263641357422;24.79336166381836;0 +-78.27256011962891;26.70871353149414;0 +-78.27127075195312;24.77109909057617;0 +-78.27069854736328;26.71926689147949;0 +-78.27008056640625;24.80023002624512;0 +-78.26950836181641;27.18943023681641;0 +-78.26930236816406;24.76443672180176;0 +-78.26893615722656;26.71489524841309;0 +-78.26756286621094;26.73004913330078;0 +-78.26589202880859;27.19193458557129;0 +-78.26522064208984;26.73508834838867;0 +-78.26507568359375;26.71809005737305;0 +-78.26374053955078;24.76899337768555;0 +-78.26349639892578;26.7252025604248;0 +-78.26302337646484;24.80340385437012;0 +-78.26271057128906;26.72795486450195;0 +-78.26123809814453;24.80729484558105;0 +-78.25923919677734;27.18684577941895;0 +-78.25844573974609;27.19120597839355;0 +-78.25691986083984;27.18844223022461;0 +-78.25658416748047;26.72608184814453;0 +-78.25655364990234;24.47577667236328;0 +-78.25643920898438;24.81025123596191;0 +-78.25619506835938;24.7694091796875;0 +-78.25611114501953;26.71942329406738;0 +-78.25481414794922;26.72171020507812;0 +-78.25424194335938;26.73135375976562;0 +-78.25395202636719;26.61835289001465;0 +-78.25168609619141;26.73156929016113;0 +-78.25102233886719;24.83087158203125;0 +-78.25033569335938;24.8203125;0 +-78.24971771240234;24.76019477844238;0 +-78.24967193603516;24.76753616333008;0 +-78.24791717529297;26.72006416320801;0 +-78.24697875976562;24.83337020874023;0 +-78.24462127685547;26.71522331237793;0 +-78.24116516113281;26.61897277832031;0 +-78.24111175537109;24.8459587097168;0 +-78.23928070068359;26.9804744720459;0 +-78.23898315429688;25.13393211364746;0 +-78.23873138427734;26.97908401489258;0 +-78.23827362060547;26.97794151306152;0 +-78.23757171630859;26.71562767028809;0 +-78.23738098144531;24.83997344970703;0 +-78.23722839355469;25.13208961486816;0 +-78.23683166503906;26.97938346862793;0 +-78.23590850830078;26.98619842529297;0 +-78.23237609863281;25.1412410736084;0 +-78.23237609863281;26.70987319946289;0 +-78.23089599609375;25.13618469238281;0 +-78.23007202148438;26.71031951904297;0 +-78.2288818359375;25.13548469543457;0 +-78.22834014892578;25.14144706726074;0 +-78.22709655761719;25.13822746276855;0 +-78.22630310058594;24.46184349060059;0 +-78.22406768798828;26.99210357666016;0 +-78.22377777099609;26.99784469604492;0 +-78.22331237792969;24.45907402038574;0 +-78.22293853759766;26.7054557800293;0 +-78.22103118896484;26.94821739196777;0 +-78.22024536132812;24.84400367736816;0 +-78.2193603515625;26.96177673339844;0 +-78.21897888183594;26.94889450073242;0 +-78.21865844726562;26.99528884887695;0 +-78.21766662597656;25.19072914123535;0 +-78.21745300292969;25.18522071838379;0 +-78.21669006347656;26.98333358764648;0 +-78.21553039550781;26.70334625244141;0 +-78.21537017822266;25.19438934326172;0 +-78.21530151367188;24.45673370361328;0 +-78.2142333984375;26.98932266235352;0 +-78.21405029296875;26.99457359313965;0 +-78.21380615234375;25.20126533508301;0 +-78.21330261230469;26.9915828704834;0 +-78.21228790283203;25.2024040222168;0 +-78.21090698242188;26.70653533935547;0 +-78.21055603027344;25.1966552734375;0 +-78.21034240722656;25.15442657470703;0 +-78.21001434326172;25.16475105285645;0 +-78.20974731445312;26.98559188842773;0 +-78.20915222167969;26.62682914733887;0 +-78.20663452148438;25.17942047119141;0 +-78.20584869384766;26.99268913269043;0 +-78.20580291748047;26.70420837402344;0 +-78.20478057861328;24.86043357849121;0 +-78.20404052734375;25.15301132202148;0 +-78.20374298095703;24.8657054901123;0 +-78.20366668701172;26.99464225769043;0 +-78.20333862304688;25.14543342590332;0 +-78.20254516601562;25.15093803405762;0 +-78.20189666748047;25.19700813293457;0 +-78.20172882080078;25.20239448547363;0 +-78.20145416259766;26.70418357849121;0 +-78.20140075683594;25.13394737243652;0 +-78.2003173828125;25.18098831176758;0 +-78.19831085205078;25.20035743713379;0 +-78.19821166992188;25.19405937194824;0 +-78.19731140136719;25.17752838134766;0 +-78.19622802734375;25.20370101928711;0 +-78.19603729248047;26.7105827331543;0 +-78.19541168212891;25.19748497009277;0 +-78.19510650634766;24.87666702270508;0 +-78.19509887695312;25.20551490783691;0 +-78.19478607177734;24.44521903991699;0 +-78.19382476806641;24.44467926025391;0 +-78.19322204589844;25.18553733825684;0 +-78.19304656982422;24.88376808166504;0 +-78.19298553466797;25.17959403991699;0 +-78.19286346435547;25.1277027130127;0 +-78.19272613525391;26.70872688293457;0 +-78.1923828125;24.94342422485352;0 +-78.19197845458984;26.70573806762695;0 +-78.19193267822266;26.71216583251953;0 +-78.19181060791016;25.20641326904297;0 +-78.19159698486328;24.94709014892578;0 +-78.19142150878906;25.11736488342285;0 +-78.19106292724609;24.44489097595215;0 +-78.19051361083984;25.17588043212891;0 +-78.18972015380859;25.18115615844727;0 +-78.18963623046875;26.71123504638672;0 +-78.18940734863281;24.93652153015137;0 +-78.18865203857422;26.70594596862793;0 +-78.18851470947266;24.95602226257324;0 +-78.18746185302734;25.17861747741699;0 +-78.18617248535156;27.0168514251709;0 +-78.18428039550781;26.70890617370605;0 +-78.18338012695312;25.18570709228516;0 +-78.1826171875;27.01345443725586;0 +-78.18154907226562;27.01918983459473;0 +-78.18114471435547;24.89448165893555;0 +-78.18071746826172;25.20474052429199;0 +-78.18065643310547;26.71393775939941;0 +-78.18030548095703;25.10388374328613;0 +-78.18028259277344;25.19486999511719;0 +-78.17996978759766;24.45423126220703;0 +-78.17984008789062;24.90089797973633;0 +-78.17949676513672;25.19853591918945;0 +-78.17945861816406;26.63124847412109;0 +-78.17917633056641;24.92361068725586;0 +-78.17802429199219;27.00906372070312;0 +-78.17788696289062;27.02835655212402;0 +-78.17732238769531;26.71552467346191;0 +-78.17591094970703;27.01823806762695;0 +-78.17580413818359;26.71298980712891;0 +-78.17557525634766;25.18267631530762;0 +-78.17526245117188;24.90706634521484;0 +-78.17471313476562;24.91325759887695;0 +-78.17402648925781;27.03017044067383;0 +-78.17366027832031;27.00972557067871;0 +-78.17327880859375;27.02717971801758;0 +-78.17247009277344;26.7141170501709;0 +-78.17227935791016;25.07892417907715;0 +-78.17218017578125;26.71893882751465;0 +-78.17096710205078;25.08580017089844;0 +-78.17089080810547;26.71985054016113;0 +-78.17003631591797;25.00432777404785;0 +-78.16997528076172;25.0832691192627;0 +-78.16982269287109;25.17483901977539;0 +-78.16925811767578;24.97219657897949;0 +-78.16919708251953;25.19250679016113;0 +-78.16917419433594;25.09037780761719;0 +-78.16885375976562;26.71868896484375;0 +-78.16835784912109;24.99238395690918;0 +-78.16825103759766;25;0 +-78.16812133789062;25.20099067687988;0 +-78.16800689697266;25.00661277770996;0 +-78.16756439208984;24.99834632873535;0 +-78.1673583984375;26.71270942687988;0 +-78.16691589355469;24.98342704772949;0 +-78.16640472412109;25.19455528259277;0 +-78.16609954833984;24.43051910400391;0 +-78.16555786132812;24.47134208679199;0 +-78.1646728515625;24.97974014282227;0 +-78.16429901123047;24.43738746643066;0 +-78.16404724121094;25.06625175476074;0 +-78.16384124755859;25.02517127990723;0 +-78.16289520263672;24.42316055297852;0 +-78.1614990234375;25.03502464294434;0 +-78.16042327880859;25.00977325439453;0 +-78.15884399414062;25.01963424682617;0 +-78.15867614746094;25.18096542358398;0 +-78.15809631347656;25.05290412902832;0 +-78.15807342529297;26.72321701049805;0 +-78.15705871582031;25.19564437866211;0 +-78.15693664550781;24.44995880126953;0 +-78.15693664550781;25.03912734985352;0 +-78.15560913085938;25.04852867126465;0 +-78.15557098388672;26.71516227722168;0 +-78.15522003173828;26.72848129272461;0 +-78.15478515625;26.71745491027832;0 +-78.15337371826172;25.1813907623291;0 +-78.15316772460938;26.7293872833252;0 +-78.15029144287109;25.18894386291504;0 +-78.15010070800781;26.72798919677734;0 +-78.14982604980469;25.18343544006348;0 +-78.14887237548828;26.7213249206543;0 +-78.14630889892578;25.18180656433105;0 +-78.14457702636719;26.71417427062988;0 +-78.14352416992188;24.46661567687988;0 +-78.14130401611328;25.17626762390137;0 +-78.13945770263672;25.18612289428711;0 +-78.13874053955078;26.64018440246582;0 +-78.13846588134766;25.18405151367188;0 +-78.13683319091797;26.71180534362793;0 +-78.13677978515625;24.49707984924316;0 +-78.13526916503906;25.24026107788086;0 +-78.13262939453125;24.48145484924316;0 +-78.13195037841797;25.24483108520508;0 +-78.13155364990234;26.71018981933594;0 +-78.13121795654297;25.32700538635254;0 +-78.13101959228516;24.39566230773926;0 +-78.13025665283203;24.49726676940918;0 +-78.13024139404297;25.23747444152832;0 +-78.12982177734375;24.48854827880859;0 +-78.12977600097656;26.6417350769043;0 +-78.12899017333984;26.64402770996094;0 +-78.12736511230469;24.51491165161133;0 +-78.12693786621094;25.3225154876709;0 +-78.12639617919922;25.2454833984375;0 +-78.12594604492188;25.23813629150391;0 +-78.12523651123047;25.31228065490723;0 +-78.12514495849609;24.51677703857422;0 +-78.12462615966797;24.51236915588379;0 +-78.12440490722656;25.24110984802246;0 +-78.12396240234375;25.16605758666992;0 +-78.12367248535156;26.70370864868164;0 +-78.12335205078125;25.31409072875977;0 +-78.12223815917969;25.26106452941895;0 +-78.12169647216797;25.26519203186035;0 +-78.12010192871094;25.30947875976562;0 +-78.12000274658203;25.15662384033203;0 +-78.11978149414062;24.39008522033691;0 +-78.11978149414062;26.64419746398926;0 +-78.11974334716797;25.25645637512207;0 +-78.11969757080078;25.30070877075195;0 +-78.11886596679688;25.27251815795898;0 +-78.11836242675781;26.69540596008301;0 +-78.11736297607422;25.27067184448242;0 +-78.11647796630859;25.25459861755371;0 +-78.11511993408203;26.68505096435547;0 +-78.11470794677734;25.2880973815918;0 +-78.11466979980469;25.25940704345703;0 +-78.11404418945312;26.69193267822266;0 +-78.11300659179688;25.27867889404297;0 +-78.11266326904297;25.29106903076172;0 +-78.11227416992188;24.38888931274414;0 +-78.11222839355469;25.28165435791016;0 +-78.11175537109375;25.14624214172363;0 +-78.10951232910156;25.27383422851562;0 +-78.10941314697266;25.1556339263916;0 +-78.1092529296875;24.39024353027344;0 +-78.10923004150391;25.14599418640137;0 +-78.10910797119141;26.70154762268066;0 +-78.10906219482422;26.64206123352051;0 +-78.108642578125;25.25523567199707;0 +-78.10810852050781;25.25913429260254;0 +-78.10688781738281;25.15584754943848;0 +-78.10660552978516;25.25705909729004;0 +-78.1065673828125;27.12803649902344;0 +-78.10614013671875;25.28459930419922;0 +-78.10596466064453;24.39480972290039;0 +-78.10514068603516;24.40365409851074;0 +-78.10494232177734;27.13005065917969;0 +-78.10491180419922;25.28045845031738;0 +-78.10459899902344;24.40947914123535;0 +-78.10321807861328;27.12504768371582;0 +-78.10267639160156;26.70609855651855;0 +-78.10137939453125;25.14984321594238;0 +-78.10070037841797;24.394775390625;0 +-78.09954071044922;24.41495132446289;0 +-78.09883117675781;26.70653343200684;0 +-78.09874725341797;24.38788032531738;0 +-78.09679412841797;27.12569618225098;0 +-78.09622192382812;26.71271514892578;0 +-78.09498596191406;24.38877296447754;0 +-78.09471893310547;26.70925903320312;0 +-78.09454345703125;25.15324020385742;0 +-78.0943603515625;26.72212028503418;0 +-78.09362030029297;26.71821212768555;0 +-78.09327697753906;24.38279724121094;0 +-78.09297943115234;27.12015724182129;0 +-78.09255218505859;26.72417640686035;0 +-78.092529296875;25.15299797058105;0 +-78.09098815917969;24.38759803771973;0 +-78.09043884277344;27.11669540405273;0 +-78.09032440185547;24.37612724304199;0 +-78.09017944335938;24.39447402954102;0 +-78.08946990966797;27.10956764221191;0 +-78.08882904052734;27.12518310546875;0 +-78.0887451171875;25.15320014953613;0 +-78.08668518066406;25.15800666809082;0 +-78.08641052246094;24.39582443237305;0 +-78.08525085449219;27.12332153320312;0 +-78.08486175537109;24.37012672424316;0 +-78.08465576171875;25.15891075134277;0 +-78.08441925048828;24.39443397521973;0 +-78.08408355712891;27.10861206054688;0 +-78.07918548583984;27.11156463623047;0 +-78.07838439941406;27.1150074005127;0 +-78.07723236083984;26.7197093963623;0 +-78.07687377929688;24.36640167236328;0 +-78.07664489746094;24.36296081542969;0 +-78.07311248779297;26.72266960144043;0 +-78.07180786132812;24.34205627441406;0 +-78.07107543945312;26.72173500061035;0 +-78.07022094726562;24.35259437561035;0 +-78.06993865966797;25.16936683654785;0 +-78.06975555419922;24.3480052947998;0 +-78.06920623779297;25.16683769226074;0 +-78.06884765625;26.64937210083008;0 +-78.06468200683594;25.16474151611328;0 +-78.06464385986328;26.72536468505859;0 +-78.06343841552734;25.16266632080078;0 +-78.06329345703125;24.31057739257812;0 +-78.06192779541016;24.32432746887207;0 +-78.06106567382812;24.30735015869141;0 +-78.06099700927734;24.31583595275879;0 +-78.05987548828125;24.29931449890137;0 +-78.05963134765625;24.33004760742188;0 +-78.05908966064453;25.16975212097168;0 +-78.05846405029297;25.15322303771973;0 +-78.05770874023438;26.72876358032227;0 +-78.0556640625;24.29378128051758;0 +-78.0556640625;25.15641593933105;0 +-78.05517578125;25.15480613708496;0 +-78.05422210693359;24.2871208190918;0 +-78.05355834960938;25.16741752624512;0 +-78.05272674560547;25.1759033203125;0 +-78.04941558837891;25.18001174926758;0 +-78.04611968994141;24.26756858825684;0 +-78.04508209228516;26.64737129211426;0 +-78.04481506347656;24.27352333068848;0 +-78.04437255859375;25.17974662780762;0 +-78.04402923583984;24.27787590026855;0 +-78.04144287109375;24.25767517089844;0 +-78.03976440429688;26.73208427429199;0 +-78.03707885742188;24.27117538452148;0 +-78.03434753417969;25.17072486877441;0 +-78.03402709960938;24.27642631530762;0 +-78.03260803222656;24.26701354980469;0 +-78.03256225585938;25.1732349395752;0 +-78.03221893310547;24.3133373260498;0 +-78.03184509277344;26.73064994812012;0 +-78.03141021728516;26.65298461914062;0 +-78.031005859375;24.30851173400879;0 +-78.03074645996094;24.28030204772949;0 +-78.03003692626953;24.24543952941895;0 +-78.02968597412109;26.65369606018066;0 +-78.02934265136719;24.23809432983398;0 +-78.02846527099609;24.25368309020996;0 +-78.02811431884766;24.23556137084961;0 +-78.02676391601562;26.72624969482422;0 +-78.02597808837891;24.2516040802002;0 +-78.02578735351562;27.07881164550781;0 +-78.02422332763672;25.17501258850098;0 +-78.02406311035156;24.30112266540527;0 +-78.02347564697266;24.28093719482422;0 +-78.02265167236328;27.08522033691406;0 +-78.02225494384766;24.30730247497559;0 +-78.02194213867188;24.31463813781738;0 +-78.02171325683594;24.2529468536377;0 +-78.02146148681641;27.07418632507324;0 +-78.01982116699219;27.08611869812012;0 +-78.01971435546875;25.17107772827148;0 +-78.01968383789062;26.72710609436035;0 +-78.01891326904297;24.25819969177246;0 +-78.01876068115234;24.24696159362793;0 +-78.01834869384766;24.23595237731934;0 +-78.01816558837891;26.65498924255371;0 +-78.01805877685547;24.24145317077637;0 +-78.01554870605469;27.07483291625977;0 +-78.01517486572266;24.28592109680176;0 +-78.01517486572266;25.17035675048828;0 +-78.01483154296875;24.26780128479004;0 +-78.01436614990234;24.26366996765137;0 +-78.01387023925781;25.17562484741211;0 +-78.01323699951172;24.27811050415039;0 +-78.01292419433594;24.29500389099121;0 +-78.01276397705078;24.24531364440918;0 +-78.01240539550781;24.25838088989258;0 +-78.01139068603516;24.31845855712891;0 +-78.01129150390625;24.27167510986328;0 +-78.01113891601562;24.25997734069824;0 +-78.01073455810547;24.27809143066406;0 +-78.01062774658203;24.29093360900879;0 +-78.01059722900391;26.73118782043457;0 +-78.01007080078125;27.08466911315918;0 +-78.00984191894531;25.17421913146973;0 +-78.00956726074219;27.08351898193359;0 +-78.00841522216797;24.2858715057373;0 +-78.00767517089844;24.2553653717041;0 +-78.00688171386719;24.31842613220215;0 +-78.00551605224609;24.27415466308594;0 +-78.00511932373047;24.2908935546875;0 +-78.00445556640625;27.08095550537109;0 +-78.00392150878906;27.08324813842773;0 +-78.003662109375;25.15994453430176;0 +-78.00339508056641;24.22941970825195;0 +-78.00305938720703;26.65649032592773;0 +-78.0029296875;27.0791072845459;0 +-78.00263977050781;24.28835105895996;0 +-78.0025634765625;24.32619285583496;0 +-78.00186157226562;27.0846118927002;0 +-78.00164794921875;24.25761413574219;0 +-78.0013427734375;24.26449203491211;0 +-78.0001220703125;24.26081275939941;0 +-77.99931335449219;24.26699638366699;0 +-77.99871063232422;24.27960777282715;0 +-77.99778747558594;27.07998847961426;0 +-77.99772644042969;24.2486400604248;0 +-77.99752044677734;24.24359512329102;0 +-77.99745178222656;24.22226715087891;0 +-77.99723815917969;25.08645629882812;0 +-77.99701690673828;24.32982063293457;0 +-77.99683380126953;26.72488594055176;0 +-77.99626922607422;24.27878952026367;0 +-77.99580383300781;24.26811981201172;0 +-77.99506378173828;25.10411071777344;0 +-77.99459075927734;25.10020637512207;0 +-77.99365234375;27.08340263366699;0 +-77.99320983886719;25.08527946472168;0 +-77.99301147460938;25.10799789428711;0 +-77.99196624755859;24.21970367431641;0 +-77.99171447753906;24.27726173400879;0 +-77.99090576171875;25.08939361572266;0 +-77.99075317382812;25.14072608947754;0 +-77.99051666259766;24.24308204650879;0 +-77.99039459228516;27.07488059997559;0 +-77.98970794677734;24.19216728210449;0 +-77.98936462402344;25.09282112121582;0 +-77.98770141601562;25.10910606384277;0 +-77.98740386962891;24.19811248779297;0 +-77.98653411865234;24.1829719543457;0 +-77.98644256591797;24.27905654907227;0 +-77.98553466796875;24.98356056213379;0 +-77.9852294921875;25.13249588012695;0 +-77.98429870605469;26.7241039276123;0 +-77.98403930664062;24.98148345947266;0 +-77.98381042480469;24.20840644836426;0 +-77.983642578125;24.19945907592773;0 +-77.98349761962891;24.98606872558594;0 +-77.98348236083984;24.33132362365723;0 +-77.98241424560547;24.19906616210938;0 +-77.98223114013672;24.24600219726562;0 +-77.98186492919922;25.11365127563477;0 +-77.98115539550781;24.99408340454102;0 +-77.98076629638672;25;0 +-77.98033142089844;25.08724594116211;0 +-77.98001861572266;25.12235832214355;0 +-77.97996520996094;26.72200393676758;0 +-77.97969818115234;25.01633071899414;0 +-77.97946166992188;24.98649787902832;0 +-77.97928619384766;25.09137153625488;0 +-77.979248046875;24.32922744750977;0 +-77.97887420654297;24.1721363067627;0 +-77.97816467285156;25.07575607299805;0 +-77.97803497314453;24.26729774475098;0 +-77.97755432128906;24.20858573913574;0 +-77.97667694091797;24.16615676879883;0 +-77.97571563720703;24.9830265045166;0 +-77.97560882568359;26.72243118286133;0 +-77.97529602050781;24.97338485717773;0 +-77.97490692138672;24.1966438293457;0 +-77.97488403320312;25.07619094848633;0 +-77.97482299804688;24.96994209289551;0 +-77.97438812255859;25.01858711242676;0 +-77.97423553466797;24.21612930297852;0 +-77.97401428222656;24.26955986022949;0 +-77.97389984130859;24.25396537780762;0 +-77.97301483154297;24.97543334960938;0 +-77.97258758544922;25.02270317077637;0 +-77.97256469726562;25.08213996887207;0 +-77.97214508056641;26.65350341796875;0 +-77.97209930419922;24.28788948059082;0 +-77.97169494628906;24.27710914611816;0 +-77.97093963623047;24.33329200744629;0 +-77.97037506103516;25.04517364501953;0 +-77.969482421875;24.97540664672852;0 +-77.96871948242188;24.16127967834473;0 +-77.96870422363281;24.9781551361084;0 +-77.96847534179688;26.71939277648926;0 +-77.96844482421875;26.7227783203125;0 +-77.96839904785156;26.72789001464844;0 +-77.96730804443359;25.04951477050781;0 +-77.96660614013672;24.2862434387207;0 +-77.96621704101562;24.18946647644043;0 +-77.96614837646484;24.33784294128418;0 +-77.96603393554688;26.65001106262207;0 +-77.96519470214844;24.21972846984863;0 +-77.96501922607422;25.07978630065918;0 +-77.96446228027344;24.97376251220703;0 +-77.96378326416016;24.34975051879883;0 +-77.96328735351562;24.15367126464844;0 +-77.96248626708984;24.96892738342285;0 +-77.96214294433594;26.65595245361328;0 +-77.96196746826172;24.21695327758789;0 +-77.96158599853516;24.26006126403809;0 +-77.96148681640625;25.05199432373047;0 +-77.96095275878906;24.22506904602051;0 +-77.96095275878906;26.73012924194336;0 +-77.96087646484375;24.28276252746582;0 +-77.96073913574219;24.96730804443359;0 +-77.96063232421875;26.82131004333496;0 +-77.9603271484375;24.28825950622559;0 +-77.96025848388672;24.2680778503418;0 +-77.96015930175781;24.97602462768555;0 +-77.95962524414062;26.65180015563965;0 +-77.95960235595703;26.73769760131836;0 +-77.9593505859375;24.28595733642578;0 +-77.95928955078125;24.34833908081055;0 +-77.95884704589844;24.98175048828125;0 +-77.95880126953125;24.26347923278809;0 +-77.95873260498047;24.27081871032715;0 +-77.95826721191406;24.22356986999512;0 +-77.95822143554688;24.96774673461914;0 +-77.95772552490234;24.18779563903809;0 +-77.9576416015625;26.81233024597168;0 +-77.95661163330078;26.64603614807129;0 +-77.95596313476562;25.05011367797852;0 +-77.95578765869141;24.98539733886719;0 +-77.95556640625;24.98241233825684;0 +-77.95552825927734;26.73583030700684;0 +-77.95479583740234;24.98401260375977;0 +-77.95476531982422;24.98722648620605;0 +-77.95455169677734;25.01086235046387;0 +-77.95430755615234;26.89591026306152;0 +-77.95417785644531;25.05216407775879;0 +-77.95414733886719;24.33476829528809;0 +-77.95413208007812;24.97414016723633;0 +-77.95406341552734;24.34440040588379;0 +-77.95402526855469;25.01383972167969;0 +-77.95366668701172;25.05937194824219;0 +-77.95336151123047;25.05881309509277;0 +-77.95320129394531;24.19096946716309;0 +-77.95285034179688;24.34026145935059;0 +-77.95281219482422;26.80838966369629;0 +-77.9517822265625;24.1535816192627;0 +-77.95177459716797;26.89267539978027;0 +-77.95172882080078;26.89772796630859;0 +-77.95159912109375;25.00326538085938;0 +-77.95122528076172;26.73051452636719;0 +-77.95109558105469;24.20241928100586;0 +-77.95014953613281;26.81939315795898;0 +-77.95009613037109;26.74221992492676;0 +-77.94985961914062;26.73992156982422;0 +-77.94984436035156;24.22969627380371;0 +-77.94971466064453;26.81043434143066;0 +-77.94966125488281;24.33266830444336;0 +-77.94943237304688;26.64781761169434;0 +-77.94926452636719;25.0101318359375;0 +-77.94868469238281;24.21600151062012;0 +-77.94864654541016;24.99543952941895;0 +-77.94813537597656;26.81547355651855;0 +-77.94776916503906;24.23748016357422;0 +-77.94760894775391;24.20078659057617;0 +-77.94715118408203;26.72841644287109;0 +-77.94675445556641;24.23953437805176;0 +-77.94612121582031;24.22645950317383;0 +-77.94597625732422;24.98417663574219;0 +-77.94583129882812;24.99999809265137;0 +-77.94583129882812;25;0 +-77.94577789306641;26.73805236816406;0 +-77.94503784179688;26.73529052734375;0 +-77.94480895996094;25.00160598754883;0 +-77.94450378417969;26.81980895996094;0 +-77.94429779052734;24.23469924926758;0 +-77.94426727294922;25;0 +-77.94411468505859;24.99471473693848;0 +-77.9439697265625;24.21566390991211;0 +-77.94395446777344;26.82416915893555;0 +-77.94388580322266;24.33399963378906;0 +-77.94383239746094;24.20305061340332;0 +-77.94375610351562;24.15627098083496;0 +-77.9432373046875;24.98116874694824;0 +-77.94321441650391;24.32550811767578;0 +-77.94316864013672;24.33101081848145;0 +-77.94309234619141;24.99654388427734;0 +-77.94303131103516;24.20854759216309;0 +-77.942626953125;24.28055191040039;0 +-77.94257354736328;24.23101806640625;0 +-77.94113922119141;24.33329010009766;0 +-77.94101715087891;24.20990753173828;0 +-77.94097900390625;26.89580726623535;0 +-77.94057464599609;26.74742889404297;0 +-77.94021606445312;26.81288719177246;0 +-77.93990325927734;24.27709197998047;0 +-77.93946075439453;24.98091125488281;0 +-77.93885040283203;24.2277774810791;0 +-77.93836975097656;26.73707580566406;0 +-77.93795013427734;24.95313262939453;0 +-77.93783569335938;24.33830833435059;0 +-77.93772125244141;24.32362937927246;0 +-77.93769836425781;26.64427947998047;0 +-77.93766021728516;24.22180557250977;0 +-77.936767578125;24.20964431762695;0 +-77.93646240234375;24.97790336608887;0 +-77.93645477294922;26.83146095275879;0 +-77.93593597412109;24.16377449035645;0 +-77.93582153320312;24.96596527099609;0 +-77.93579864501953;24.95125198364258;0 +-77.93563079833984;24.94647026062012;0 +-77.93492889404297;24.32405090332031;0 +-77.93491363525391;24.32934379577637;0 +-77.93475341796875;24.97215270996094;0 +-77.93463897705078;24.95723724365234;0 +-77.93441009521484;26.83098602294922;0 +-77.93423461914062;24.95148086547852;0 +-77.93399047851562;24.94843482971191;0 +-77.93378448486328;24.94070816040039;0 +-77.93372344970703;24.2139778137207;0 +-77.93365478515625;24.22131538391113;0 +-77.93313598632812;24.2781867980957;0 +-77.93309783935547;26.64447593688965;0 +-77.93293762207031;24.97810554504395;0 +-77.93253326416016;24.20777893066406;0 +-77.93233489990234;24.09335327148438;0 +-77.93195343017578;24.32450103759766;0 +-77.93193817138672;24.21763038635254;0 +-77.93190002441406;26.74216461181641;0 +-77.93167114257812;24.27404403686523;0 +-77.93144226074219;24.97579765319824;0 +-77.93143463134766;26.82062721252441;0 +-77.93129730224609;24.09769821166992;0 +-77.9312744140625;24.94891166687012;0 +-77.93110656738281;24.22656631469727;0 +-77.92997741699219;24.2134895324707;0 +-77.92960357666016;26.63526153564453;0 +-77.92958068847656;24.25636863708496;0 +-77.9295654296875;26.63522720336914;0 +-77.92930603027344;24.23159980773926;0 +-77.92904663085938;24.93585205078125;0 +-77.92855834960938;26.63731956481934;0 +-77.92839813232422;26.81669807434082;0 +-77.92815399169922;24.08666801452637;0 +-77.92793273925781;26.81210136413574;0 +-77.92733001708984;24.22952079772949;0 +-77.92729949951172;24.25956153869629;0 +-77.92686462402344;24.92642593383789;0 +-77.9267578125;24.34487152099609;0 +-77.92668914794922;24.29831504821777;0 +-77.92657470703125;26.63631820678711;0 +-77.92656707763672;24.20337104797363;0 +-77.92649078369141;24.93950271606445;0 +-77.92610168457031;24.20015716552734;0 +-77.92603302001953;26.64451026916504;0 +-77.92516326904297;24.34419631958008;0 +-77.92489624023438;24.22170448303223;0 +-77.92476654052734;26.81539726257324;0 +-77.92445373535156;26.63912582397461;0 +-77.92441558837891;24.24692535400391;0 +-77.92394256591797;24.08273696899414;0 +-77.92347717285156;24.26663970947266;0 +-77.92311096191406;24.33314514160156;0 +-77.92273712158203;24.21228408813477;0 +-77.92264556884766;24.92019462585449;0 +-77.92240142822266;24.16733551025391;0 +-77.92194366455078;26.76841354370117;0 +-77.92176818847656;24.34276580810547;0 +-77.92160797119141;26.75026702880859;0 +-77.92143249511719;26.6381950378418;0 +-77.92140960693359;24.22030067443848;0 +-77.92140197753906;26.77139663696289;0 +-77.92131805419922;24.90068244934082;0 +-77.92074584960938;24.21066284179688;0 +-77.92048645019531;24.26546859741211;0 +-77.92020416259766;25.82363700866699;0 +-77.920166015625;26.76656532287598;0 +-77.91989898681641;24.14094543457031;0 +-77.91970062255859;24.93876075744629;0 +-77.91964721679688;24.19460105895996;0 +-77.91954803466797;24.33908081054688;0 +-77.91952514648438;26.83431434631348;0 +-77.91942596435547;24.27142333984375;0 +-77.91938018798828;24.91925239562988;0 +-77.91905975341797;24.20354080200195;0 +-77.91905212402344;26.83017539978027;0 +-77.91898345947266;24.93485260009766;0 +-77.91895294189453;25.82155990600586;0 +-77.91886138916016;24.14506530761719;0 +-77.91880798339844;24.09691047668457;0 +-77.91861724853516;24.30444145202637;0 +-77.91824340820312;24.13061332702637;0 +-77.91804504394531;26.77458381652832;0 +-77.91801452636719;24.90409660339355;0 +-77.91793060302734;26.86714744567871;0 +-77.91761779785156;24.33126449584961;0 +-77.91714477539062;24.26627540588379;0 +-77.91700744628906;26.74885177612305;0 +-77.91684722900391;26.87333869934082;0 +-77.91643524169922;26.8354377746582;0 +-77.91602325439453;24.20718574523926;0 +-77.91584777832031;26.87057495117188;0 +-77.91552734375;26.76974105834961;0 +-77.91504669189453;25.40553855895996;0 +-77.91483306884766;24.14801406860352;0 +-77.91451263427734;25.40829086303711;0 +-77.91444396972656;24.29546356201172;0 +-77.91434478759766;24.89305114746094;0 +-77.91416931152344;24.93825721740723;0 +-77.91393280029297;26.7495174407959;0 +-77.9134521484375;24.93412017822266;0 +-77.91337585449219;26.62089347839355;0 +-77.91298675537109;26.82094192504883;0 +-77.91276550292969;26.76420783996582;0 +-77.91242218017578;24.9364070892334;0 +-77.91226959228516;24.23444366455078;0 +-77.91220855712891;24.2674674987793;0 +-77.91204071044922;25.40207290649414;0 +-77.91201782226562;24.20783805847168;0 +-77.91197967529297;24.26494216918945;0 +-77.91100311279297;26.62845420837402;0 +-77.91078948974609;24.86961936950684;0 +-77.91068267822266;26.6348819732666;0 +-77.91064453125;24.16792869567871;0 +-77.91058349609375;24.89164733886719;0 +-77.9105224609375;25.82746124267578;0 +-77.91040802001953;26.87650489807129;0 +-77.91035461425781;24.33120727539062;0 +-77.91027069091797;26.81104278564453;0 +-77.91025543212891;24.87236976623535;0 +-77.91014862060547;24.35322380065918;0 +-77.91002655029297;26.86248970031738;0 +-77.90993499755859;25.41100883483887;0 +-77.9097900390625;26.83400726318359;0 +-77.90927124023438;26.75545120239258;0 +-77.90909576416016;26.77359390258789;0 +-77.90902709960938;24.23303985595703;0 +-77.90899658203125;26.83675765991211;0 +-77.90885925292969;24.11815452575684;0 +-77.90835571289062;26.90313148498535;0 +-77.9083251953125;24.14841842651367;0 +-77.90810394287109;26.7699146270752;0 +-77.90782928466797;26.77151679992676;0 +-77.90763854980469;24.14199066162109;0 +-77.90761566162109;24.88588523864746;0 +-77.90744781494141;24.34769630432129;0 +-77.90725708007812;24.0764102935791;0 +-77.90699005126953;26.62015533447266;0 +-77.90676879882812;26.74900054931641;0 +-77.90660095214844;24.3048038482666;0 +-77.90660095214844;26.63438987731934;0 +-77.90658569335938;24.86178398132324;0 +-77.90647125244141;25.40271759033203;0 +-77.90635681152344;24.09245300292969;0 +-77.90538787841797;25.41074371337891;0 +-77.90528106689453;26.87669372558594;0 +-77.90523529052734;25.82282829284668;0 +-77.90516662597656;26.83511924743652;0 +-77.90512084960938;24.8571834564209;0 +-77.90480804443359;24.86772918701172;0 +-77.90468597412109;26.72647666931152;0 +-77.9046630859375;26.62266159057617;0 +-77.90432739257812;26.71039390563965;0 +-77.90427398681641;26.74209022521973;0 +-77.90386199951172;26.81167984008789;0 +-77.90365600585938;24.11329650878906;0 +-77.90353393554688;24.20570755004883;0 +-77.90348815917969;26.82339096069336;0 +-77.90345764160156;26.72168159484863;0 +-77.90345001220703;26.72164154052734;0 +-77.90319061279297;26.61667823791504;0 +-77.90291595458984;26.90558242797852;0 +-77.90290069580078;26.7521858215332;0 +-77.90278625488281;24.31096458435059;0 +-77.90277862548828;24.33756828308105;0 +-77.9027099609375;26.61322975158691;0 +-77.90267181396484;24.32242774963379;0 +-77.90260314941406;24.35614395141602;0 +-77.90257263183594;25.41370391845703;0 +-77.90255737304688;26.8137378692627;0 +-77.90248107910156;26.86412239074707;0 +-77.90221405029297;24.87161445617676;0 +-77.90216064453125;24.20592498779297;0 +-77.90181732177734;24.36003684997559;0 +-77.90178680419922;26.73928642272949;0 +-77.90170288085938;24.37196159362793;0 +-77.90167999267578;26.82498359680176;0 +-77.90139007568359;24.87895202636719;0 +-77.90118408203125;24.37379264831543;0 +-77.90115356445312;26.74757766723633;0 +-77.90111541748047;24.17060279846191;0 +-77.9010009765625;26.86884880065918;0 +-77.90098571777344;26.73838806152344;0 +-77.90089416503906;26.6952075958252;0 +-77.9007568359375;24.86563682556152;0 +-77.90061187744141;24.30245971679688;0 +-77.90049743652344;26.73562812805176;0 +-77.90036773681641;26.69704055786133;0 +-77.90036010742188;24.09194564819336;0 +-77.90021514892578;25.82574081420898;0 +-77.89969635009766;24.84543800354004;0 +-77.89942169189453;26.60998916625977;0 +-77.89934539794922;26.61779594421387;0 +-77.89934539794922;26.90719413757324;0 +-77.89931488037109;26.69956207275391;0 +-77.89916229248047;24.8486442565918;0 +-77.89907073974609;26.75146484375;0 +-77.89906311035156;24.11262702941895;0 +-77.89895629882812;24.37102127075195;0 +-77.89886474609375;24.32813262939453;0 +-77.89871978759766;26.62950325012207;0 +-77.89863586425781;24.35198211669922;0 +-77.89862823486328;26.69151496887207;0 +-77.89815521240234;26.87158203125;0 +-77.89804077148438;24.36161041259766;0 +-77.89781188964844;26.74869918823242;0 +-77.89762878417969;25.82180786132812;0 +-77.89760589599609;24.85322189331055;0 +-77.89759063720703;24.06807899475098;0 +-77.8975830078125;24.25267028808594;0 +-77.89751434326172;26.62168502807617;0 +-77.89717864990234;24.87134552001953;0 +-77.89688873291016;24.87547302246094;0 +-77.89681243896484;25.40791893005371;0 +-77.89658355712891;24.17377471923828;0 +-77.89657592773438;25.79956817626953;0 +-77.89653015136719;25.80438613891602;0 +-77.89626312255859;24.31205749511719;0 +-77.89623260498047;24.10589790344238;0 +-77.89617156982422;24.13822937011719;0 +-77.89611053466797;25.82160568237305;0 +-77.89608001708984;25.82504844665527;0 +-77.89584350585938;24.09443092346191;0 +-77.89581298828125;26.90119361877441;0 +-77.89570617675781;24.1084156036377;0 +-77.89548492431641;24.36686706542969;0 +-77.8953857421875;24.37741661071777;0 +-77.895263671875;24.20701599121094;0 +-77.89524078369141;25.41410255432129;0 +-77.89519500732422;24.1740779876709;0 +-77.8944091796875;26.86247062683105;0 +-77.89437103271484;24.87545204162598;0 +-77.89434051513672;24.85273551940918;0 +-77.89432525634766;25.82273864746094;0 +-77.89421081542969;24.2650260925293;0 +-77.89398956298828;24.26158332824707;0 +-77.89373779296875;25.80482482910156;0 +-77.89356994628906;24.3579044342041;0 +-77.89337921142578;24.24736022949219;0 +-77.89208221435547;26.6804370880127;0 +-77.89198303222656;26.63817596435547;0 +-77.89188385009766;24.30956268310547;0 +-77.89183044433594;26.60142517089844;0 +-77.89177703857422;24.8575325012207;0 +-77.89175415039062;24.83435821533203;0 +-77.89157104492188;24.22716522216797;0 +-77.89104461669922;26.60371971130371;0 +-77.8909912109375;24.20927238464355;0 +-77.89093017578125;24.26729202270508;0 +-77.89031219482422;26.60049629211426;0 +-77.89025115966797;26.63265037536621;0 +-77.88969421386719;24.21407699584961;0 +-77.88968658447266;24.31547164916992;0 +-77.88956451416016;26.86359214782715;0 +-77.88942718505859;24.84030532836914;0 +-77.88939666748047;24.8435173034668;0 +-77.88932800292969;24.09552192687988;0 +-77.88923645019531;24.86026573181152;0 +-77.88922119140625;24.36727142333984;0 +-77.88899230957031;25.4064769744873;0 +-77.88886260986328;25.78435134887695;0 +-77.88847351074219;24.23677062988281;0 +-77.88841247558594;24.3213939666748;0 +-77.88827514648438;25.79261016845703;0 +-77.88759613037109;24.37964248657227;0 +-77.88752746582031;24.33469009399414;0 +-77.88750457763672;24.2337818145752;0 +-77.887451171875;24.23905563354492;0 +-77.88727569580078;26.908935546875;0 +-77.88700866699219;26.85794067382812;0 +-77.8868408203125;26.5889835357666;0 +-77.88680267333984;25.81303596496582;0 +-77.88677978515625;24.25693511962891;0 +-77.88677978515625;25.81578826904297;0 +-77.88670349121094;24.83569526672363;0 +-77.88661193847656;24.06661033630371;0 +-77.88657379150391;24.84922981262207;0 +-77.88638305664062;24.37596321105957;0 +-77.88591766357422;24.31495666503906;0 +-77.88573455810547;25.76641654968262;0 +-77.88550567626953;25.8157787322998;0 +-77.88529205322266;26.85057640075684;0 +-77.88498687744141;25.79120635986328;0 +-77.88469696044922;24.36883926391602;0 +-77.88455200195312;24.17642784118652;0 +-77.88442993164062;24.13744354248047;0 +-77.88440704345703;26.62892723083496;0 +-77.88434600830078;24.24934768676758;0 +-77.88426208496094;26.6174430847168;0 +-77.88397979736328;25.40184593200684;0 +-77.88379669189453;24.85058403015137;0 +-77.88378143310547;25.81025314331055;0 +-77.88359069824219;26.60829734802246;0 +-77.88348388671875;24.36492919921875;0 +-77.88343048095703;25.8031063079834;0 +-77.8834228515625;24.26768684387207;0 +-77.88333892822266;25.8038215637207;0 +-77.88329315185547;26.63833618164062;0 +-77.88323974609375;26.64717674255371;0 +-77.88317108154297;24.3713493347168;0 +-77.8828125;24.40827560424805;0 +-77.88266754150391;24.34565734863281;0 +-77.88264465332031;26.85928344726562;0 +-77.88262176513672;24.24635314941406;0 +-77.88257598876953;26.58091163635254;0 +-77.88246917724609;26.85124206542969;0 +-77.88228607177734;24.41079521179199;0 +-77.88217926025391;25.76730537414551;0 +-77.88178253173828;24.33372497558594;0 +-77.88130187988281;24.8480396270752;0 +-77.88129425048828;24.35780143737793;0 +-77.88111877441406;24.3504638671875;0 +-77.88108825683594;24.32729721069336;0 +-77.88097381591797;24.36536979675293;0 +-77.88077545166016;26.60799789428711;0 +-77.88064575195312;26.85398483276367;0 +-77.88048553466797;26.86983108520508;0 +-77.88035583496094;24.40320777893066;0 +-77.88016510009766;24.1385555267334;0 +-77.88009643554688;24.25891494750977;0 +-77.88005828857422;24.33003807067871;0 +-77.87995147705078;25.8129768371582;0 +-77.87985229492188;25.41007423400879;0 +-77.87975311279297;24.36214637756348;0 +-77.879638671875;26.87763404846191;0 +-77.87931823730469;25.77394104003906;0 +-77.87930297851562;25.79273414611816;0 +-77.87904357910156;24.84710121154785;0 +-77.87900543212891;24.30984878540039;0 +-77.87847137451172;26.8668270111084;0 +-77.87834930419922;24.84090042114258;0 +-77.87833404541016;24.25044631958008;0 +-77.8782958984375;25.80033683776855;0 +-77.87810516357422;24.40250015258789;0 +-77.87803649902344;26.65253257751465;0 +-77.87793731689453;25.7856388092041;0 +-77.87776184082031;24.23209571838379;0 +-77.87733459472656;24.35272407531738;0 +-77.87710571289062;24.27359771728516;0 +-77.87679290771484;26.67457008361816;0 +-77.87670135498047;25.79322052001953;0 +-77.87652587890625;24.30730628967285;0 +-77.87646484375;26.64709281921387;0 +-77.87644958496094;24.39216613769531;0 +-77.87644195556641;24.39331245422363;0 +-77.87635803222656;25.40499496459961;0 +-77.87623596191406;24.26005935668945;0 +-77.87616729736328;24.34445571899414;0 +-77.87595367431641;26.63046646118164;0 +-77.87554931640625;25.79618072509766;0 +-77.87529754638672;26.87668037414551;0 +-77.87515258789062;24.33805656433105;0 +-77.87515258789062;24.8339900970459;0 +-77.87508392333984;24.40431213378906;0 +-77.87473297119141;25.76860046386719;0 +-77.87471008300781;24.36554527282715;0 +-77.87459564208984;24.2740364074707;0 +-77.87456512451172;24.07224082946777;0 +-77.87427520751953;24.33251571655273;0 +-77.87425994873047;26.62034606933594;0 +-77.87422943115234;26.57211494445801;0 +-77.87416076660156;24.2414665222168;0 +-77.87401580810547;26.6706428527832;0 +-77.87381744384766;24.2513256072998;0 +-77.87371063232422;24.39030647277832;0 +-77.87361145019531;25.40152931213379;0 +-77.87360382080078;25.79166603088379;0 +-77.87336730957031;24.34879112243652;0 +-77.87325286865234;25.77136421203613;0 +-77.87314605712891;26.60403060913086;0 +-77.87283325195312;24.40360260009766;0 +-77.87270355224609;26.62263298034668;0 +-77.87254333496094;24.25337791442871;0 +-77.87236022949219;24.14422225952148;0 +-77.87216186523438;24.26713562011719;0 +-77.87213897705078;25.78581809997559;0 +-77.87205505371094;26.61091232299805;0 +-77.87199401855469;24.41276931762695;0 +-77.87168884277344;24.26391983032227;0 +-77.87149047851562;26.87274360656738;0 +-77.87137603759766;26.65362548828125;0 +-77.87133026123047;25.40219879150391;0 +-77.87108612060547;25.78581047058105;0 +-77.87107849121094;25.77961349487305;0 +-77.87106323242188;26.90958786010742;0 +-77.87078857421875;24.17745590209961;0 +-77.87070465087891;24.41574096679688;0 +-77.87065124511719;24.37032699584961;0 +-77.87064361572266;24.34532737731934;0 +-77.87060546875;25.75710868835449;0 +-77.87012481689453;24.27055549621582;0 +-77.8699951171875;24.23317527770996;0 +-77.86968231201172;26.66922950744629;0 +-77.86960601806641;24.34944915771484;0 +-77.86933135986328;24.3258228302002;0 +-77.86908721923828;25.7825813293457;0 +-77.86894226074219;26.66669654846191;0 +-77.86869049072266;26.64051246643066;0 +-77.86838531494141;25.75065994262695;0 +-77.86830902099609;24.40494155883789;0 +-77.86827087402344;25.76214027404785;0 +-77.86810302734375;24.14487266540527;0 +-77.86810302734375;24.37489318847656;0 +-77.86806488037109;24.04719543457031;0 +-77.86806488037109;25.39987564086914;0 +-77.86801910400391;24.28108978271484;0 +-77.86798095703125;25.40814018249512;0 +-77.86789703369141;24.34461784362793;0 +-77.86788177490234;24.42259788513184;0 +-77.8677978515625;24.38016510009766;0 +-77.86764526367188;24.31961441040039;0 +-77.86721038818359;24.41456413269043;0 +-77.86714172363281;24.39575576782227;0 +-77.86685180664062;24.24713897705078;0 +-77.866455078125;24.38932800292969;0 +-77.86624908447266;26.65427017211914;0 +-77.8660888671875;25.77796363830566;0 +-77.86601257324219;24.25607299804688;0 +-77.8658447265625;24.40033340454102;0 +-77.8656005859375;26.66781806945801;0 +-77.86551666259766;24.05198860168457;0 +-77.86546325683594;24.41386222839355;0 +-77.86542510986328;24.2650146484375;0 +-77.86531066894531;24.07308006286621;0 +-77.86528778076172;25.75614547729492;0 +-77.86517333984375;24.41775894165039;0 +-77.8651123046875;24.04189491271973;0 +-77.86476135253906;24.17970085144043;0 +-77.86466979980469;24.31660842895508;0 +-77.86463928222656;24.24344825744629;0 +-77.86441040039062;26.55756378173828;0 +-77.86411285400391;24.06756591796875;0 +-77.86411285400391;25.74649238586426;0 +-77.86399078369141;25.4028263092041;0 +-77.86322021484375;26.64590263366699;0 +-77.86289215087891;24.39503288269043;0 +-77.86285400390625;26.61083602905273;0 +-77.86277770996094;26.6691722869873;0 +-77.86233520507812;24.4007625579834;0 +-77.86219787597656;26.5488166809082;0 +-77.86212921142578;24.8243579864502;0 +-77.86210632324219;24.3477783203125;0 +-77.86201477050781;25.75358963012695;0 +-77.86193084716797;24.26360893249512;0 +-77.86181640625;26.91676330566406;0 +-77.86166381835938;24.82401084899902;0 +-77.86116027832031;24.39272499084473;0 +-77.86093139648438;25.76047134399414;0 +-77.86087036132812;24.39639091491699;0 +-77.86074066162109;24.05469703674316;0 +-77.86067199707031;24.29020118713379;0 +-77.86034393310547;24.39913940429688;0 +-77.86026000976562;24.20465660095215;0 +-77.86013793945312;26.65192413330078;0 +-77.85997009277344;25.75540924072266;0 +-77.85990905761719;26.6491641998291;0 +-77.85980987548828;26.55798530578613;0 +-77.85954284667969;26.6604175567627;0 +-77.85952758789062;26.56027984619141;0 +-77.85932922363281;24.42550849914551;0 +-77.85905456542969;26.60689926147461;0 +-77.85891723632812;24.3154125213623;0 +-77.85882568359375;26.55407333374023;0 +-77.85877227783203;26.91375160217285;0 +-77.85874176025391;24.23170471191406;0 +-77.85873413085938;24.28376197814941;0 +-77.85859680175781;26.55085563659668;0 +-77.858154296875;24.03885650634766;0 +-77.85801696777344;24.27985763549805;0 +-77.85784912109375;25.77163696289062;0 +-77.85764312744141;24.4193000793457;0 +-77.85764312744141;25.73472785949707;0 +-77.85723876953125;26.6349048614502;0 +-77.85702514648438;25.77099990844727;0 +-77.85694122314453;24.21150970458984;0 +-77.85691070556641;26.54096603393555;0 +-77.85667419433594;24.28947830200195;0 +-77.85655212402344;24.25117874145508;0 +-77.85626220703125;26.55474090576172;0 +-77.85591888427734;24.18902778625488;0 +-77.85591888427734;26.61353302001953;0 +-77.85589599609375;24.39290809631348;0 +-77.85578155517578;26.6273136138916;0 +-77.85519409179688;24.28694343566895;0 +-77.85483551025391;24.24749565124512;0 +-77.85469818115234;24.26148223876953;0 +-77.85440063476562;24.06450271606445;0 +-77.85427093505859;24.2539119720459;0 +-77.85416412353516;24.16401672363281;0 +-77.85391235351562;26.55886268615723;0 +-77.85382080078125;25.4087085723877;0 +-77.85374450683594;26.65164184570312;0 +-77.85372161865234;26.65393829345703;0 +-77.85353851318359;24.22684669494629;0 +-77.85342407226562;26.63303565979004;0 +-77.8529052734375;25.7259635925293;0 +-77.85276031494141;25.74111557006836;0 +-77.85253143310547;24.37820053100586;0 +-77.85238647460938;25.39997100830078;0 +-77.85218048095703;26.62980651855469;0 +-77.85157775878906;26.63830184936523;0 +-77.85146331787109;24.36030197143555;0 +-77.85095977783203;25.76819229125977;0 +-77.85076141357422;24.25433921813965;0 +-77.85026550292969;26.5413703918457;0 +-77.84999847412109;25.73810577392578;0 +-77.84993743896484;24.36258316040039;0 +-77.84977722167969;25.75946044921875;0 +-77.84961700439453;24.21832656860352;0 +-77.84947967529297;24.35776138305664;0 +-77.84944152832031;24.38711929321289;0 +-77.84916687011719;24.23896217346191;0 +-77.84904479980469;24.25111389160156;0 +-77.84890747070312;24.21419143676758;0 +-77.84886169433594;24.4196834564209;0 +-77.84836578369141;26.57718086242676;0 +-77.84828948974609;26.58452987670898;0 +-77.84824371337891;25.40958023071289;0 +-77.84818267822266;24.41279792785645;0 +-77.84810638427734;24.16969680786133;0 +-77.84806823730469;26.64216804504395;0 +-77.84792327880859;24.16258811950684;0 +-77.84758758544922;24.34673690795898;0 +-77.84734344482422;24.79727363586426;0 +-77.84730529785156;26.5813045501709;0 +-77.84724426269531;26.91296577453613;0 +-77.84703826904297;26.53169631958008;0 +-77.84663391113281;25.71925354003906;0 +-77.84663391113281;26.5716552734375;0 +-77.84654998779297;25.75254249572754;0 +-77.84652709960938;24.02752113342285;0 +-77.84603118896484;24.37986755371094;0 +-77.84579467773438;24.22586059570312;0 +-77.84567260742188;26.56130599975586;0 +-77.84566497802734;24.38846588134766;0 +-77.84548187255859;26.55924415588379;0 +-77.84544372558594;24.38529777526855;0 +-77.84537506103516;26.64513969421387;0 +-77.84526824951172;26.63021278381348;0 +-77.84526062011719;25.75079154968262;0 +-77.84514617919922;24.3907527923584;0 +-77.84491729736328;26.53948593139648;0 +-77.84482574462891;24.32262992858887;0 +-77.84480285644531;24.2244758605957;0 +-77.84463500976562;24.19168090820312;0 +-77.84432983398438;24.19672584533691;0 +-77.84422302246094;26.53213119506836;0 +-77.84421539306641;26.63364601135254;0 +-77.84407043457031;26.59735679626465;0 +-77.84392547607422;24;0 +-77.84378814697266;26.60011100769043;0 +-77.84365081787109;26.58862495422363;0 +-77.84359741210938;25.71899795532227;0 +-77.84307098388672;26.54498291015625;0 +-77.84296417236328;24.35793304443359;0 +-77.8428955078125;24.4150447845459;0 +-77.84280395507812;25.74745941162109;0 +-77.84257507324219;26.63982009887695;0 +-77.842529296875;24.02748680114746;0 +-77.8424072265625;26.53510093688965;0 +-77.84226226806641;24.37934684753418;0 +-77.84223175048828;24.3823127746582;0 +-77.84220123291016;24.25931167602539;0 +-77.84219360351562;26.55599975585938;0 +-77.84208679199219;26.64166641235352;0 +-77.84207153320312;25.66939353942871;0 +-77.84181976318359;24.24761199951172;0 +-77.84181213378906;26.56862831115723;0 +-77.84178161621094;24.27650833129883;0 +-77.84175109863281;26.57414054870605;0 +-77.84160614013672;26.58883857727051;0 +-77.84152984619141;24.17720794677734;0 +-77.84079742431641;24.19967460632324;0 +-77.84050750732422;25.67328453063965;0 +-77.84050750732422;25.72310256958008;0 +-77.84046936035156;24.18293190002441;0 +-77.84039306640625;24.36433410644531;0 +-77.84039306640625;26.5573616027832;0 +-77.84024810791016;26.59617614746094;0 +-77.84021759033203;26.62442588806152;0 +-77.840087890625;24.42029571533203;0 +-77.83963775634766;23.99341773986816;0 +-77.83957672119141;26.5649299621582;0 +-77.83950805664062;26.5938720703125;0 +-77.83934783935547;26.90107917785645;0 +-77.83924102783203;26.54472160339355;0 +-77.83834838867188;26.90482521057129;0 +-77.83827972412109;25.41936492919922;0 +-77.83806610107422;25.6891040802002;0 +-77.83804321289062;26.5623950958252;0 +-77.83802032470703;25.71849250793457;0 +-77.83799743652344;24.27945709228516;0 +-77.83790588378906;23.77091407775879;0 +-77.83784484863281;25.68611717224121;0 +-77.83774566650391;26.61590576171875;0 +-77.83770751953125;26.91816902160645;0 +-77.83760070800781;24.24436569213867;0 +-77.83749389648438;26.91403007507324;0 +-77.8372802734375;26.58627510070801;0 +-77.83716583251953;25.4294548034668;0 +-77.83661651611328;25.43427085876465;0 +-77.83660125732422;25.38583564758301;0 +-77.83563995361328;26.54721641540527;0 +-77.83539581298828;24.36360168457031;0 +-77.83527374267578;24.27645111083984;0 +-77.83502197265625;25.66451263427734;0 +-77.83499145507812;25.71774864196777;0 +-77.83489990234375;24.26360511779785;0 +-77.83480072021484;24.37277221679688;0 +-77.83454132080078;25.38949203491211;0 +-77.83450317382812;26.58831977844238;0 +-77.83444976806641;26.61312294006348;0 +-77.83418273925781;23.76951217651367;0 +-77.83405303955078;24.27345848083496;0 +-77.83387756347656;23.77616119384766;0 +-77.833740234375;25.74072647094727;0 +-77.83364105224609;25.67597961425781;0 +-77.83348846435547;25.6909008026123;0 +-77.83333587646484;24.41840553283691;0 +-77.83329010009766;25.66036415100098;0 +-77.83303833007812;26.60139656066895;0 +-77.83291625976562;26.55463790893555;0 +-77.83291625976562;26.9107780456543;0 +-77.83289337158203;26.54145431518555;0 +-77.83286285400391;25.42987632751465;0 +-77.83280944824219;25.43515586853027;0 +-77.83249664306641;24.35256958007812;0 +-77.83247375488281;24.28101348876953;0 +-77.83234405517578;24.24431991577148;0 +-77.83220672607422;25.71706581115723;0 +-77.83207702636719;25.68032836914062;0 +-77.83184051513672;26.54419898986816;0 +-77.83181762695312;25.43354034423828;0 +-77.83139801025391;26.55875396728516;0 +-77.83135986328125;26.61562156677246;0 +-77.83115386962891;26.58553504943848;0 +-77.83113098144531;24.41333770751953;0 +-77.83099365234375;25.71177291870117;0 +-77.83098602294922;25.69057655334473;0 +-77.83089447021484;24.2394905090332;0 +-77.83082580566406;24.39406776428223;0 +-77.83075714111328;24.32686614990234;0 +-77.83059692382812;23.87431716918945;0 +-77.83055877685547;24.37135887145996;0 +-77.83046722412109;25.68713188171387;0 +-77.83028411865234;25.38578224182129;0 +-77.8302001953125;25.71497917175293;0 +-77.83007049560547;24.4190616607666;0 +-77.83006286621094;24.29636001586914;0 +-77.82991790771484;24.77922630310059;0 +-77.82968902587891;25.69040870666504;0 +-77.82968902587891;25.73954200744629;0 +-77.82967376708984;24.26103973388672;0 +-77.82957458496094;26.56553840637207;0 +-77.82955169677734;24.39589309692383;0 +-77.82950592041016;24.37616729736328;0 +-77.82940673828125;23.99173927307129;0 +-77.82925415039062;25.65895080566406;0 +-77.82904052734375;26.56783294677734;0 +-77.82893371582031;23.7703914642334;0 +-77.82883453369141;24.29405403137207;0 +-77.82881164550781;26.61422157287598;0 +-77.82880401611328;25.65275001525879;0 +-77.82872009277344;26.54922676086426;0 +-77.82863616943359;23.77681159973145;0 +-77.82853698730469;24.20025634765625;0 +-77.82852172851562;25.705322265625;0 +-77.82846832275391;24.30528831481934;0 +-77.82844543457031;25.73723411560059;0 +-77.82843017578125;25.39356803894043;0 +-77.82827758789062;24.29955291748047;0 +-77.82804870605469;23.78781890869141;0 +-77.827880859375;26.53176307678223;0 +-77.82759857177734;24.39105796813965;0 +-77.82752227783203;24.34908485412598;0 +-77.82731628417969;26.61053466796875;0 +-77.82727813720703;26.5900936126709;0 +-77.82721710205078;24.33027839660645;0 +-77.82717895507812;26.57569313049316;0 +-77.82714080810547;23.80776977539062;0 +-77.82704162597656;25.70140647888184;0 +-77.826904296875;24.28715705871582;0 +-77.82688140869141;24.28899192810059;0 +-77.82681274414062;23.78620529174805;0 +-77.82672882080078;23.79675674438477;0 +-77.82670593261719;25.66030883789062;0 +-77.8262939453125;23.80649375915527;0 +-77.82624816894531;24.37636947631836;0 +-77.82610321044922;24.41466903686523;0 +-77.82601928710938;24.20206832885742;0 +-77.82598876953125;26.91094589233398;0 +-77.82591247558594;23.77449989318848;0 +-77.82591247558594;23.8059253692627;0 +-77.82575225830078;24.00670623779297;0 +-77.82572174072266;25.73101234436035;0 +-77.82554626464844;24.39608573913574;0 +-77.82544708251953;23.9878101348877;0 +-77.82529449462891;26.58364677429199;0 +-77.82522583007812;26.55820083618164;0 +-77.82495880126953;25.38734245300293;0 +-77.82478332519531;24.27383613586426;0 +-77.82463073730469;26.5491886138916;0 +-77.82452392578125;25.6506462097168;0 +-77.82436370849609;23.81188011169434;0 +-77.82427215576172;26.89318466186523;0 +-77.82426452636719;24.37428665161133;0 +-77.82389068603516;26.91552352905273;0 +-77.82387542724609;23.8726634979248;0 +-77.82375335693359;23.98069000244141;0 +-77.82362365722656;24.1912670135498;0 +-77.82357025146484;24.34423446655273;0 +-77.82347869873047;24.30409812927246;0 +-77.82340240478516;24.31143569946289;0 +-77.82331848144531;24.29515266418457;0 +-77.82314300537109;23.93275260925293;0 +-77.82313537597656;25.69895362854004;0 +-77.82309722900391;23.87678527832031;0 +-77.82289886474609;23.9532299041748;0 +-77.82270050048828;24.20845985412598;0 +-77.82260894775391;26.57190895080566;0 +-77.82228851318359;23.81193733215332;0 +-77.8221435546875;25.39030265808105;0 +-77.82177734375;23.9783821105957;0 +-77.82177734375;26.57810211181641;0 +-77.82151794433594;24.76492691040039;0 +-77.8214111328125;24.18803787231445;0 +-77.82125091552734;24.42357063293457;0 +-77.82120513916016;24.23229598999023;0 +-77.82119750976562;23.92654418945312;0 +-77.82110595703125;23.93801116943359;0 +-77.82106018066406;24.41783714294434;0 +-77.82073974609375;25.69744873046875;0 +-77.82070159912109;26.53422737121582;0 +-77.8206787109375;24.28366279602051;0 +-77.82067108154297;23.96117401123047;0 +-77.82063293457031;26.90860366821289;0 +-77.82014465332031;24.26278686523438;0 +-77.81990814208984;23.86942291259766;0 +-77.81945037841797;26.58061027526855;0 +-77.81929779052734;25.39670181274414;0 +-77.81928253173828;24.22494125366211;0 +-77.81913757324219;24.31208610534668;0 +-77.81880187988281;26.89285850524902;0 +-77.81874847412109;24.34969711303711;0 +-77.8187255859375;23.79968070983887;0 +-77.81857299804688;26.54201698303223;0 +-77.81855773925781;25.73691940307617;0 +-77.81841278076172;24.40726280212402;0 +-77.81840515136719;24.31001663208008;0 +-77.81838226318359;24.19030570983887;0 +-77.818359375;26.53834342956543;0 +-77.81832122802734;23.78775024414062;0 +-77.81813812255859;24.29869842529297;0 +-77.81812286376953;24.30067443847656;0 +-77.818115234375;24.28937339782715;0 +-77.8179931640625;24.7651252746582;0 +-77.81787872314453;23.81206321716309;0 +-77.81782531738281;26.89458274841309;0 +-77.81777191162109;24.34762382507324;0 +-77.81774139404297;25.40013313293457;0 +-77.81758117675781;24.39028358459473;0 +-77.81752777099609;24.0054874420166;0 +-77.81751251220703;24.42193603515625;0 +-77.81732177734375;24.26941299438477;0 +-77.8172607421875;23.98064422607422;0 +-77.81708526611328;23.94119453430176;0 +-77.81693267822266;24.23409271240234;0 +-77.81681060791016;23.8829345703125;0 +-77.81649017333984;23.92215347290039;0 +-77.81629180908203;23.94692230224609;0 +-77.816162109375;23.8698558807373;0 +-77.81607818603516;24.29279518127441;0 +-77.81602478027344;25.7364387512207;0 +-77.81602478027344;26.56633949279785;0 +-77.81585693359375;24.29004287719727;0 +-77.81516265869141;25.69740104675293;0 +-77.81510162353516;26.58103179931641;0 +-77.81501770019531;24.22536277770996;0 +-77.81491851806641;24.40585517883301;0 +-77.81491088867188;26.9163646697998;0 +-77.81486511230469;23.81502342224121;0 +-77.81454467773438;23.8544750213623;0 +-77.81450653076172;23.79781532287598;0 +-77.81449127197266;24.3010368347168;0 +-77.81430053710938;24.19829368591309;0 +-77.81423187255859;23.98474884033203;0 +-77.81402587890625;23.85653495788574;0 +-77.81373596191406;24.42350578308105;0 +-77.81356048583984;23.88314056396484;0 +-77.81338500976562;23.87419319152832;0 +-77.81306457519531;23.97488021850586;0 +-77.81278991699219;24.29372406005859;0 +-77.81278228759766;23.79482078552246;0 +-77.8126220703125;26.57342910766602;0 +-77.81246948242188;23.89505958557129;0 +-77.81217193603516;26.90807342529297;0 +-77.81185150146484;24.41179084777832;0 +-77.81182861328125;26.57617950439453;0 +-77.81181335449219;24.00245666503906;0 +-77.81151580810547;24.2744083404541;0 +-77.81145477294922;23.80444526672363;0 +-77.81143951416016;25.39847183227539;0 +-77.81121063232422;23.8654613494873;0 +-77.81112670898438;24.21500778198242;0 +-77.81108093261719;23.85032081604004;0 +-77.81095123291016;23.89710998535156;0 +-77.81086730957031;23.81545257568359;0 +-77.81070709228516;24.25676155090332;0 +-77.81060791015625;23.90857887268066;0 +-77.81060028076172;23.94068908691406;0 +-77.81049346923828;23.89229202270508;0 +-77.81037902832031;25.69437408447266;0 +-77.80986785888672;24.04622840881348;0 +-77.80980682373047;23.94618797302246;0 +-77.80976104736328;24.39525985717773;0 +-77.80959320068359;24.4119987487793;0 +-77.8095703125;24.2927131652832;0 +-77.80934143066406;24.24228096008301;0 +-77.80922698974609;25.39248466491699;0 +-77.80887603759766;23.90741920471191;0 +-77.80880737304688;24.00334548950195;0 +-77.80878448486328;23.91796875;0 +-77.80843353271484;23.80786514282227;0 +-77.80838775634766;23.8774299621582;0 +-77.80838775634766;26.90275764465332;0 +-77.80831909179688;25.69756889343262;0 +-77.80813598632812;24.40763092041016;0 +-77.80812072753906;23.87713623046875;0 +-77.80809783935547;23.85897636413574;0 +-77.80786895751953;23.93883514404297;0 +-77.80772399902344;23.83378028869629;0 +-77.80762481689453;24.43216705322266;0 +-77.80732727050781;23.94433403015137;0 +-77.80724334716797;23.83194160461426;0 +-77.80723571777344;23.86313819885254;0 +-77.80677795410156;24.3452320098877;0 +-77.80658721923828;23.9117603302002;0 +-77.80657958984375;24.24317359924316;0 +-77.80656433105469;24;0 +-77.80625152587891;24.39568710327148;0 +-77.80580902099609;24.341552734375;0 +-77.80570983886719;23.8360595703125;0 +-77.80555725097656;24.4383430480957;0 +-77.80542755126953;24.2335319519043;0 +-77.80520629882812;24.39957618713379;0 +-77.80513000488281;23.81540870666504;0 +-77.804931640625;24.2089900970459;0 +-77.80461883544922;23.85672950744629;0 +-77.80458831787109;23.82137107849121;0 +-77.80453491210938;24.43993949890137;0 +-77.80448150634766;24.25278854370117;0 +-77.80434417724609;23.85796356201172;0 +-77.80433654785156;24.74894523620605;0 +-77.80421447753906;25.38784790039062;0 +-77.80414581298828;23.99751853942871;0 +-77.8040771484375;23.94500160217285;0 +-77.80399322509766;24.2752571105957;0 +-77.80355834960938;24.22090339660645;0 +-77.80352783203125;25.50170135498047;0 +-77.80329895019531;24.27020645141602;0 +-77.80318450927734;24.04020881652832;0 +-77.80310821533203;23.87985229492188;0 +-77.80288696289062;24.33373069763184;0 +-77.80229187011719;26.92176818847656;0 +-77.80226135253906;24.24933052062988;0 +-77.8021240234375;23.90828704833984;0 +-77.80210876464844;24.33624649047852;0 +-77.80207824707031;24.4355583190918;0 +-77.80138397216797;24.35802841186523;0 +-77.80133056640625;23.84661293029785;0 +-77.80129241943359;25.40182495117188;0 +-77.80104064941406;23.88855361938477;0 +-77.80091857910156;24.33050155639648;0 +-77.80059051513672;25.39585113525391;0 +-77.80049896240234;24.3465518951416;0 +-77.80033111572266;24.42497825622559;0 +-77.80030822753906;24.42794418334961;0 +-77.8001708984375;25.38758277893066;0 +-77.80012512207031;24.40664291381836;0 +-77.80009460449219;23.91263008117676;0 +-77.80004119873047;24.2706356048584;0 +-77.80001068115234;25.4029598236084;0 +-77.80000305175781;24.22591590881348;0 +-77.79965972900391;26.9040584564209;0 +-77.79946899414062;23.89748764038086;0 +-77.79939270019531;23.84587669372559;0 +-77.79933929443359;24.74614715576172;0 +-77.79901885986328;24.27200317382812;0 +-77.798828125;24.02641296386719;0 +-77.79881286621094;24.05209350585938;0 +-77.79880523681641;24.22063064575195;0 +-77.79863739013672;24.21260070800781;0 +-77.79853057861328;23.92041778564453;0 +-77.79844665527344;23.83990669250488;0 +-77.79818725585938;24.01631736755371;0 +-77.79811859130859;24.02479553222656;0 +-77.79782867431641;24.00256156921387;0 +-77.79780578613281;24.34033584594727;0 +-77.79776763916016;25.40018653869629;0 +-77.79766082763672;24;0 +-77.79764556884766;24.40409660339355;0 +-77.797607421875;24.02365112304688;0 +-77.79752349853516;24.43964958190918;0 +-77.79721069335938;24.0380916595459;0 +-77.79708862304688;24.21740531921387;0 +-77.79685211181641;23.8215446472168;0 +-77.79674530029297;23.77359962463379;0 +-77.79657745361328;23.91535758972168;0 +-77.79657745361328;25.39283180236816;0 +-77.79656982421875;24.21923446655273;0 +-77.79637908935547;24.0701847076416;0 +-77.79637908935547;25.46008682250977;0 +-77.79619598388672;24.30270957946777;0 +-77.79611968994141;23.9107666015625;0 +-77.79609680175781;24.26417922973633;0 +-77.79601287841797;24.42544364929199;0 +-77.79598236083984;23.77565765380859;0 +-77.79592895507812;25.5025520324707;0 +-77.79579925537109;24.31715393066406;0 +-77.79575347900391;24.32151031494141;0 +-77.79548645019531;24.44283866882324;0 +-77.79543304443359;24.20867538452148;0 +-77.79537200927734;23.8802547454834;0 +-77.7952880859375;23.82956123352051;0 +-77.79497528076172;25.40130996704102;0 +-77.79494476318359;24.42242050170898;0 +-77.79484558105469;24.07292175292969;0 +-77.79453277587891;24.03165054321289;0 +-77.79426574707031;24.29603958129883;0 +-77.79419708251953;24.06374359130859;0 +-77.79412078857422;24.42952346801758;0 +-77.79410552978516;24.3588809967041;0 +-77.79391479492188;23.81487274169922;0 +-77.79390716552734;24.32998085021973;0 +-77.79373168945312;25.39877319335938;0 +-77.793701171875;24.21074867248535;0 +-77.79357147216797;24.05158805847168;0 +-77.79336547851562;25.45799446105957;0 +-77.793212890625;24.3244686126709;0 +-77.79319763183594;25.49747657775879;0 +-77.79307556152344;23.76531600952148;0 +-77.79303741455078;25.39302825927734;0 +-77.79207611083984;24.31368255615234;0 +-77.791748046875;24.01098823547363;0 +-77.79167938232422;24.35128974914551;0 +-77.79164123535156;24.02084541320801;0 +-77.79158782958984;24.26482582092285;0 +-77.79141235351562;23.84558868408203;0 +-77.79122161865234;26.90168762207031;0 +-77.79116821289062;24.06600952148438;0 +-77.79104614257812;23.90609550476074;0 +-77.79098510742188;23.91326713562012;0 +-77.79087066650391;24.21413803100586;0 +-77.79071807861328;24.30036544799805;0 +-77.79054260253906;23.82998466491699;0 +-77.79035186767578;23.79305267333984;0 +-77.79033660888672;24.02656555175781;0 +-77.79010009765625;23.82378768920898;0 +-77.78993988037109;23.90361022949219;0 +-77.78970336914062;23.78088760375977;0 +-77.78963470458984;25.49905204772949;0 +-77.78962707519531;24.3563175201416;0 +-77.78960418701172;23.88319396972656;0 +-77.78958892822266;23.79465103149414;0 +-77.78887939453125;24.28406524658203;0 +-77.78880310058594;25.45841217041016;0 +-77.78860473632812;23.7634449005127;0 +-77.78854370117188;24.36410713195801;0 +-77.78821563720703;23.84029006958008;0 +-77.78820037841797;25.39619827270508;0 +-77.78805541992188;23.88983535766602;0 +-77.78749847412109;24.29666709899902;0 +-77.78748321533203;23.77834892272949;0 +-77.78740692138672;25.39940643310547;0 +-77.78707885742188;23.79669761657715;0 +-77.78704071044922;24.43519401550293;0 +-77.7867431640625;24.34436416625977;0 +-77.78652954101562;23.77260589599609;0 +-77.78649139404297;24.03593063354492;0 +-77.786376953125;24.21295166015625;0 +-77.78627777099609;24.74534034729004;0 +-77.78616333007812;23.91026496887207;0 +-77.78614807128906;24.06871604919434;0 +-77.78611755371094;24.33243179321289;0 +-77.78578948974609;24.36385154724121;0 +-77.78568267822266;24.3023853302002;0 +-77.78568267822266;25.4664192199707;0 +-77.78538513183594;23.79095077514648;0 +-77.78529357910156;24.33198928833008;0 +-77.78511810302734;23.88283538818359;0 +-77.78495025634766;25.46389007568359;0 +-77.78473663330078;24.06021881103516;0 +-77.78450012207031;23.8375129699707;0 +-77.78443145751953;23.755615234375;0 +-77.78440856933594;24.3287467956543;0 +-77.78437805175781;24.0233039855957;0 +-77.78437805175781;24.33149719238281;0 +-77.78421020507812;24.29984855651855;0 +-77.78388214111328;24.35488700866699;0 +-77.78384399414062;23.88659286499023;0 +-77.78372955322266;23.88659286499023;0 +-77.78368377685547;24.72902870178223;0 +-77.78337097167969;24.28470420837402;0 +-77.7830810546875;23.79735565185547;0 +-77.78298187255859;24.06066131591797;0 +-77.78272247314453;23.78106498718262;0 +-77.78270721435547;24.03956604003906;0 +-77.78264617919922;24.06388282775879;0 +-77.78256988525391;24.4310245513916;0 +-77.78253173828125;24.74301528930664;0 +-77.78242492675781;24.06593132019043;0 +-77.78237915039062;24.73314476013184;0 +-77.78215789794922;23.90727233886719;0 +-77.78197479248047;26.90390396118164;0 +-77.78184509277344;24.35785102844238;0 +-77.78182983398438;24.21703720092773;0 +-77.7813720703125;25.39659690856934;0 +-77.78115081787109;24.0452823638916;0 +-77.781005859375;25.40372657775879;0 +-77.78055572509766;24.73909378051758;0 +-77.78033447265625;23.76797294616699;0 +-77.78018188476562;23.90606117248535;0 +-77.78002166748047;25.40438842773438;0 +-77.77978515625;23.83380508422852;0 +-77.77973937988281;23.83930969238281;0 +-77.77962493896484;23.76360702514648;0 +-77.77952575683594;23.77576637268066;0 +-77.77937316894531;23.79411697387695;0 +-77.77923583984375;26.91972732543945;0 +-77.77909851074219;24.05030632019043;0 +-77.77904510498047;24.31447982788086;0 +-77.77890014648438;23.82072257995605;0 +-77.77870178222656;24.03998756408691;0 +-77.77831268310547;23.77139854431152;0 +-77.77822875976562;24.27387809753418;0 +-77.77819061279297;25.40988159179688;0 +-77.77801513671875;24.43534088134766;0 +-77.77799987792969;24.22456932067871;0 +-77.77742767333984;23.81712532043457;0 +-77.77708435058594;24.30926704406738;0 +-77.77677917480469;24.29198265075684;0 +-77.7767333984375;24.24909591674805;0 +-77.77669525146484;24.4415225982666;0 +-77.77664947509766;24.35184288024902;0 +-77.77662658691406;23.91337394714355;0 +-77.77660369873047;24.30234909057617;0 +-77.77655029296875;24.2899169921875;0 +-77.7764892578125;24.06060218811035;0 +-77.77645874023438;23.81474113464355;0 +-77.77512359619141;23.79477310180664;0 +-77.77512359619141;26.92060852050781;0 +-77.77505493164062;24.24266052246094;0 +-77.77499389648438;24.30233955383301;0 +-77.77481079101562;24.31260299682617;0 +-77.77480316162109;26.90291976928711;0 +-77.77463531494141;24.28210258483887;0 +-77.77433013916016;23.77084541320801;0 +-77.77384948730469;24.73215103149414;0 +-77.77369689941406;24.32314491271973;0 +-77.77350616455078;23.74979591369629;0 +-77.77342224121094;23.78948402404785;0 +-77.77332305908203;24.30775833129883;0 +-77.773193359375;23.75713729858398;0 +-77.77308654785156;23.77067184448242;0 +-77.77269744873047;23.78695487976074;0 +-77.77213287353516;24.35225868225098;0 +-77.77211761474609;24.02525329589844;0 +-77.77211761474609;24.04863929748535;0 +-77.77182006835938;24.28780937194824;0 +-77.77170562744141;23.81585311889648;0 +-77.77140808105469;24.04473495483398;0 +-77.77139282226562;25.40752410888672;0 +-77.77124786376953;24.03625106811523;0 +-77.77108764648438;24.30913162231445;0 +-77.77101135253906;23.83947372436523;0 +-77.77065277099609;23.88167762756348;0 +-77.77048492431641;26.89966583251953;0 +-77.77003479003906;24.0566463470459;0 +-77.76966094970703;24.02133369445801;0 +-77.76963043212891;24.02408409118652;0 +-77.76936340332031;23.88671493530273;0 +-77.76920318603516;23.84679985046387;0 +-77.76902770996094;23.74884796142578;0 +-77.76869201660156;23.81858253479004;0 +-77.768310546875;24.05433654785156;0 +-77.76814270019531;26.90286064147949;0 +-77.76805114746094;24.35887336730957;0 +-77.76798248291016;26.91732788085938;0 +-77.76781463623047;23.74493789672852;0 +-77.76762390136719;24.28226661682129;0 +-77.76726531982422;24.29258346557617;0 +-77.76715850830078;24.02153968811035;0 +-77.76702117919922;24.36184501647949;0 +-77.76701354980469;25.41436958312988;0 +-77.76692199707031;26.91707801818848;0 +-77.76681518554688;23.83439636230469;0 +-77.76641845703125;23.85182762145996;0 +-77.76625061035156;24.31688690185547;0 +-77.76624298095703;24.43454551696777;0 +-77.76618957519531;24.43913269042969;0 +-77.76605224609375;24.28890228271484;0 +-77.76590728759766;24.30243301391602;0 +-77.76572418212891;24.06210899353027;0 +-77.76563262939453;24.44417381286621;0 +-77.76560974121094;23.8293399810791;0 +-77.76539611816406;23.82452011108398;0 +-77.76530456542969;25.4322624206543;0 +-77.76515197753906;24.32559013366699;0 +-77.76500701904297;24.05957984924316;0 +-77.76497650146484;23.81534385681152;0 +-77.76467895507812;24.34691429138184;0 +-77.76459503173828;24.44737434387207;0 +-77.76449584960938;23.78414154052734;0 +-77.76434326171875;23.77243995666504;0 +-77.76403045654297;23.77931976318359;0 +-77.76390075683594;23.88392066955566;0 +-77.76384735107422;25.42673873901367;0 +-77.76373291015625;25.43706703186035;0 +-77.76341247558594;24.72058296203613;0 +-77.76338195800781;24.35080146789551;0 +-77.76316070556641;24.34827613830566;0 +-77.76275634765625;24.36203384399414;0 +-77.76258087158203;24.26249694824219;0 +-77.76218414306641;24.43886566162109;0 +-77.76206970214844;23.74581336975098;0 +-77.76174163818359;23.84422492980957;0 +-77.7613525390625;24.60929679870605;0 +-77.76118469238281;25.41546630859375;0 +-77.76112365722656;24.04899597167969;0 +-77.76101684570312;24.03569793701172;0 +-77.76099395751953;26.9002685546875;0 +-77.76046752929688;24.29573059082031;0 +-77.76039886474609;25.4411678314209;0 +-77.76015472412109;24.3709545135498;0 +-77.76011657714844;23.74120903015137;0 +-77.75995635986328;23.79007148742676;0 +-77.75984954833984;24.02766036987305;0 +-77.75978088378906;23.84030532836914;0 +-77.75962829589844;23.76942253112793;0 +-77.75954437255859;24.03338813781738;0 +-77.75951385498047;23.7611083984375;0 +-77.75951385498047;24.61639022827148;0 +-77.7593994140625;24.04645919799805;0 +-77.75925445556641;23.78456115722656;0 +-77.75920867919922;24.59826278686523;0 +-77.75919342041016;23.82103538513184;0 +-77.75907135009766;24.05402183532715;0 +-77.75899505615234;25.43105506896973;0 +-77.75860595703125;23.83112335205078;0 +-77.75837707519531;25.44137763977051;0 +-77.75823211669922;23.78730583190918;0 +-77.75783538818359;24.26130676269531;0 +-77.75775909423828;24.61614418029785;0 +-77.75772857666016;24.29410171508789;0 +-77.75757598876953;24.28515434265137;0 +-77.75727081298828;24.33675384521484;0 +-77.75711822509766;24.32758140563965;0 +-77.75711822509766;25.41749382019043;0 +-77.75691986083984;24.39225769042969;0 +-77.75688171386719;23.76963233947754;0 +-77.75644683837891;25.409912109375;0 +-77.75503540039062;23.84073066711426;0 +-77.75498962402344;24.38535690307617;0 +-77.75497436523438;24.61864280700684;0 +-77.75491333007812;24.67003059387207;0 +-77.75490570068359;24.3699893951416;0 +-77.75470733642578;23.8203125;0 +-77.75462341308594;24.69664192199707;0 +-77.75459289550781;26.89975166320801;0 +-77.75458526611328;23.83453369140625;0 +-77.75402069091797;23.81319618225098;0 +-77.75363922119141;24.57963180541992;0 +-77.75357818603516;23.86526298522949;0 +-77.75349426269531;24.33878135681152;0 +-77.75331878662109;23.8372802734375;0 +-77.75331878662109;24.37777328491211;0 +-77.75306701660156;23.77877998352051;0 +-77.75287628173828;23.8228702545166;0 +-77.75275421142578;24.66106414794922;0 +-77.75262451171875;24.32639122009277;0 +-77.75260925292969;23.74482345581055;0 +-77.75251770019531;24.38258171081543;0 +-77.75248718261719;24.5933837890625;0 +-77.75240325927734;26.88870620727539;0 +-77.75233459472656;23.77647972106934;0 +-77.75208282470703;24.6998291015625;0 +-77.75193023681641;23.82419204711914;0 +-77.75187683105469;24.02644157409668;0 +-77.75175476074219;24.03767395019531;0 +-77.75119781494141;24.34265899658203;0 +-77.75093078613281;24.36697006225586;0 +-77.75089263916016;26.88662719726562;0 +-77.75086212158203;24.62686347961426;0 +-77.75079345703125;24.4488525390625;0 +-77.75074005126953;24.6846752166748;0 +-77.75067138671875;24.55253410339355;0 +-77.75045013427734;23.85216522216797;0 +-77.75032806396484;24.67595100402832;0 +-77.75027465820312;26.89580726623535;0 +-77.74988555908203;24.62433052062988;0 +-77.74984741210938;24.44982528686523;0 +-77.74983215332031;24.39861488342285;0 +-77.74978637695312;23.8711986541748;0 +-77.74971771240234;24.54770851135254;0 +-77.74971008300781;24.6174488067627;0 +-77.74957275390625;23.80880546569824;0 +-77.74938201904297;23.77232933044434;0 +-77.74928283691406;26.89258193969727;0 +-77.7490234375;24.26626968383789;0 +-77.74872589111328;25.65249252319336;0 +-77.7486572265625;23.76980018615723;0 +-77.74864959716797;24.02411842346191;0 +-77.74835205078125;24.6727237701416;0 +-77.74826812744141;24.65735054016113;0 +-77.748046875;24.56260299682617;0 +-77.74803161621094;24.38024711608887;0 +-77.74802398681641;24.33460426330566;0 +-77.74777984619141;26.91255187988281;0 +-77.74765777587891;23.79938697814941;0 +-77.74765777587891;24.38179016113281;0 +-77.74755859375;23.86888694763184;0 +-77.74746704101562;24.01837539672852;0 +-77.74739074707031;25.63572120666504;0 +-77.74736785888672;23.86246490478516;0 +-77.74736785888672;24.3724422454834;0 +-77.74733734130859;24.32886505126953;0 +-77.74724578857422;24.45248985290527;0 +-77.74695587158203;24.6630744934082;0 +-77.74681091308594;24.28551292419434;0 +-77.74674987792969;24.31418037414551;0 +-77.74657440185547;24.37587547302246;0 +-77.74649047851562;23.78974151611328;0 +-77.74645233154297;24.6398983001709;0 +-77.74643707275391;23.79547500610352;0 +-77.74626159667969;24.01829147338867;0 +-77.74612426757812;23.74477386474609;0 +-77.74603271484375;24.33343887329102;0 +-77.74587249755859;23.80373001098633;0 +-77.74583435058594;23.77895355224609;0 +-77.74557495117188;24.39880180358887;0 +-77.74545288085938;23.76518630981445;0 +-77.74541473388672;25.65337944030762;0 +-77.74518585205078;24.66374397277832;0 +-77.74497222900391;23.82184410095215;0 +-77.74480438232422;24.30888748168945;0 +-77.74436187744141;24.39534950256348;0 +-77.74436187744141;24.6474494934082;0 +-77.74417114257812;23.76930618286133;0 +-77.74414825439453;24.46026039123535;0 +-77.74410247802734;24.62496757507324;0 +-77.74387359619141;26.89505958557129;0 +-77.74376678466797;23.8167896270752;0 +-77.74372100830078;24.01811218261719;0 +-77.74351501464844;24.5409984588623;0 +-77.74343872070312;23.7676944732666;0 +-77.74340057373047;24.02498626708984;0 +-77.74317932128906;24.02200317382812;0 +-77.74309539794922;26.89560508728027;0 +-77.74308776855469;24.32836532592773;0 +-77.74299621582031;24.65730285644531;0 +-77.74297332763672;24.33868598937988;0 +-77.74291229248047;24.64216232299805;0 +-77.74287414550781;23.80393409729004;0 +-77.74286651611328;24.53204727172852;0 +-77.74282836914062;23.80944061279297;0 +-77.74230194091797;24.03414535522461;0 +-77.74227142333984;24.3111572265625;0 +-77.74217224121094;23.6821117401123;0 +-77.74155426025391;25.63589477539062;0 +-77.74144744873047;24.02038192749023;0 +-77.74106597900391;24.30724716186523;0 +-77.74069976806641;23.6795768737793;0 +-77.74063873291016;24.32306861877441;0 +-77.74062347412109;25.62877082824707;0 +-77.74032592773438;26.89181137084961;0 +-77.74006652832031;23.78257942199707;0 +-77.73999786376953;26.89777946472168;0 +-77.73994445800781;24.04329872131348;0 +-77.73991394042969;25.62394332885742;0 +-77.73971557617188;24.29324340820312;0 +-77.73950958251953;24.26640892028809;0 +-77.73936462402344;24.02815818786621;0 +-77.73915863037109;23.68484115600586;0 +-77.73899078369141;24.29094505310059;0 +-77.73887634277344;24.52971458435059;0 +-77.73860931396484;23.7782096862793;0 +-77.73857879638672;24.46548461914062;0 +-77.73838806152344;23.86239433288574;0 +-77.73828887939453;25.47378921508789;0 +-77.73819732666016;24.3178653717041;0 +-77.7381591796875;24.32230949401855;0 +-77.73810577392578;24.32579612731934;0 +-77.73797607421875;26.89500427246094;0 +-77.73786926269531;24.34735298156738;0 +-77.73754119873047;23.81582450866699;0 +-77.73728942871094;26.91061973571777;0 +-77.73725891113281;24.33427429199219;0 +-77.73691558837891;23.83027076721191;0 +-77.73691558837891;24.38862991333008;0 +-77.73677825927734;25.63263702392578;0 +-77.73657989501953;26.88258934020996;0 +-77.73656463623047;25.46941184997559;0 +-77.73592376708984;25.61816596984863;0 +-77.73551940917969;27.04986572265625;0 +-77.73544311523438;23.79837417602539;0 +-77.73517608642578;23.8006649017334;0 +-77.73514556884766;23.8327808380127;0 +-77.73505401611328;24.46659469604492;0 +-77.73500061035156;23.82039070129395;0 +-77.73491668701172;24.3649845123291;0 +-77.73490142822266;24.51864242553711;0 +-77.73467254638672;25.47995376586914;0 +-77.73465728759766;27.03860092163086;0 +-77.73448944091797;24.51751327514648;0 +-77.73365020751953;24.38928604125977;0 +-77.73361206054688;23.86602973937988;0 +-77.73301696777344;25.47006797790527;0 +-77.73289489746094;25.6174488067627;0 +-77.73267364501953;24.02625846862793;0 +-77.73259735107422;24.46221542358398;0 +-77.73259735107422;24.6436710357666;0 +-77.73246765136719;24.26955604553223;0 +-77.73243713378906;24.52185440063477;0 +-77.73196411132812;24.51932525634766;0 +-77.7318115234375;24.32894515991211;0 +-77.73162078857422;25.61812400817871;0 +-77.7314453125;26.88323020935059;0 +-77.73125457763672;24.31128311157227;0 +-77.73110961914062;27.03857421875;0 +-77.73089599609375;23.80499076843262;0 +-77.73072814941406;23.82494735717773;0 +-77.7303466796875;27.05126953125;0 +-77.73025512695312;23.82173156738281;0 +-77.72993469238281;24.34016799926758;0 +-77.72991943359375;23.86003684997559;0 +-77.72960662841797;24.6413459777832;0 +-77.72953033447266;23.7903003692627;0 +-77.72943115234375;23.74349975585938;0 +-77.72942352294922;24.38603401184082;0 +-77.72935485839844;24.52870750427246;0 +-77.72927093505859;26.87172508239746;0 +-77.72908782958984;26.9107723236084;0 +-77.72882080078125;26.8664379119873;0 +-77.72879028320312;24.64730262756348;0 +-77.72866058349609;23.67961883544922;0 +-77.72831726074219;24.3731803894043;0 +-77.72817230224609;24.65762138366699;0 +-77.72811126708984;24.34657287597656;0 +-77.72798156738281;23.79602241516113;0 +-77.7276611328125;24.02483749389648;0 +-77.72758483886719;24.52937698364258;0 +-77.72704315185547;24.03606605529785;0 +-77.72675323486328;23.79440689086914;0 +-77.72636413574219;25.58937835693359;0 +-77.72632598876953;24.64337921142578;0 +-77.726318359375;23.78637504577637;0 +-77.72574615478516;24.0404109954834;0 +-77.72566223144531;26.8735294342041;0 +-77.72550964355469;25.48491859436035;0 +-77.72532653808594;24.46191787719727;0 +-77.72483825683594;24.37062454223633;0 +-77.72466278076172;24.52200698852539;0 +-77.72464752197266;24.3878231048584;0 +-77.72454833984375;27.05006980895996;0 +-77.72452545166016;24.39860343933105;0 +-77.72447204589844;24.04246139526367;0 +-77.72441864013672;25.51429176330566;0 +-77.72417449951172;23.86091041564941;0 +-77.72417449951172;24.65597724914551;0 +-77.72415924072266;23.77718162536621;0 +-77.72413635253906;23.86595726013184;0 +-77.72406005859375;25.59142303466797;0 +-77.72390747070312;24.40892028808594;0 +-77.72378540039062;24.0364933013916;0 +-77.72335815429688;25.51864433288574;0 +-77.7232666015625;23.68230056762695;0 +-77.72311401367188;24.3172550201416;0 +-77.72300720214844;23.68106269836426;0 +-77.72291564941406;26.8673038482666;0 +-77.72271728515625;23.74161148071289;0 +-77.72269439697266;25.48810577392578;0 +-77.72267150878906;23.8046989440918;0 +-77.72261047363281;24.31330108642578;0 +-77.72251892089844;25.57120704650879;0 +-77.72243499755859;24.27129364013672;0 +-77.72219848632812;26.90795135498047;0 +-77.72213745117188;25.58268165588379;0 +-77.72209930419922;23.78404808044434;0 +-77.72191619873047;23.86249732971191;0 +-77.72187805175781;23.78129386901855;0 +-77.72174072265625;23.8540096282959;0 +-77.72144317626953;23.80193519592285;0 +-77.72144317626953;25.57693672180176;0 +-77.72136688232422;23.86800003051758;0 +-77.72134399414062;24.3914623260498;0 +-77.72097778320312;25.48326873779297;0 +-77.72092437744141;24.33962249755859;0 +-77.72077178955078;23.85056114196777;0 +-77.72055816650391;25.58794784545898;0 +-77.720458984375;23.85766983032227;0 +-77.72042846679688;27.04253387451172;0 +-77.72032928466797;24.48297309875488;0 +-77.72006988525391;26.89208221435547;0 +-77.72004699707031;24.41828727722168;0 +-77.7196044921875;24.36805152893066;0 +-77.71951293945312;24.30887794494629;0 +-77.71950531005859;25.50139045715332;0 +-77.71920013427734;25.57369995117188;0 +-77.71883392333984;24.3698787689209;0 +-77.71845245361328;24.51598739624023;0 +-77.71829223632812;24.48547554016113;0 +-77.71820831298828;26.87529754638672;0 +-77.71811676025391;24.47859382629395;0 +-77.71810913085938;25.51308441162109;0 +-77.71803283691406;23.79319000244141;0 +-77.71800994873047;23.73859405517578;0 +-77.717529296875;24.41894912719727;0 +-77.71723175048828;24.04170608520508;0 +-77.71717834472656;23.69109535217285;0 +-77.71673583984375;26.8700008392334;0 +-77.71659851074219;24.3221435546875;0 +-77.71656799316406;25.49240875244141;0 +-77.71654510498047;24.32757377624512;0 +-77.71651458740234;23.85259246826172;0 +-77.71617889404297;24.02426910400391;0 +-77.71587371826172;24.3205394744873;0 +-77.71573638916016;24.31044578552246;0 +-77.71562957763672;23.8684139251709;0 +-77.71554565429688;25.51581382751465;0 +-77.71546936035156;23.82964706420898;0 +-77.71498870849609;25.56539344787598;0 +-77.71491241455078;26.87228012084961;0 +-77.71446990966797;25.52131462097168;0 +-77.71418762207031;24.04626083374023;0 +-77.71382904052734;23.87038040161133;0 +-77.71354675292969;24.41707611083984;0 +-77.71311950683594;23.78466606140137;0 +-77.71300506591797;24.48748970031738;0 +-77.712646484375;24.02744483947754;0 +-77.71244812011719;23.77594375610352;0 +-77.71244049072266;25.56651878356934;0 +-77.71239471435547;23.6967945098877;0 +-77.71237945556641;27.04132080078125;0 +-77.71226501464844;24.28495597839355;0 +-77.71217346191406;24.31591606140137;0 +-77.71181488037109;24.05701446533203;0 +-77.71116638183594;23.86516571044922;0 +-77.7110595703125;26.89567184448242;0 +-77.71102905273438;23.68802642822266;0 +-77.71099853515625;24.33127212524414;0 +-77.71087646484375;24.07397270202637;0 +-77.71083831787109;23.8736515045166;0 +-77.71078491210938;23.73784828186035;0 +-77.71076965332031;23.82479476928711;0 +-77.71073150634766;27.04476928710938;0 +-77.71043395996094;23.86309814453125;0 +-77.71041870117188;27.04361343383789;0 +-77.70991516113281;23.72384643554688;0 +-77.70988464355469;24.34135437011719;0 +-77.70938873291016;24.0765552520752;0 +-77.70928955078125;24.03727149963379;0 +-77.70840454101562;23.78210639953613;0 +-77.70835113525391;23.73140716552734;0 +-77.70830535888672;24.28681182861328;0 +-77.70771789550781;24.33330345153809;0 +-77.70758819580078;23.87454414367676;0 +-77.70753479003906;23.8240795135498;0 +-77.70728302001953;24.03793907165527;0 +-77.70705413818359;24.08058738708496;0 +-77.70693969726562;23.86307144165039;0 +-77.70687866210938;23.7004222869873;0 +-77.70686340332031;23.87201499938965;0 +-77.70630645751953;24.32749366760254;0 +-77.7061767578125;24.09181213378906;0 +-77.70606994628906;24.03471755981445;0 +-77.70582580566406;24.32107162475586;0 +-77.70579528808594;23.85159301757812;0 +-77.70578765869141;23.79607963562012;0 +-77.70558929443359;23.70499992370605;0 +-77.70527648925781;24.06084632873535;0 +-77.70472717285156;24.0654296875;0 +-77.70371246337891;23.77702331542969;0 +-77.70326995849609;23.79835319519043;0 +-77.70305633544922;24.05830383300781;0 +-77.70292663574219;23.78091621398926;0 +-77.70291900634766;24.33692741394043;0 +-77.70252990722656;24.03903961181641;0 +-77.702392578125;23.72860717773438;0 +-77.7021484375;23.86922645568848;0 +-77.70182800292969;26.89604377746582;0 +-77.70175170898438;24.33651733398438;0 +-77.7015380859375;23.74029922485352;0 +-77.70147705078125;24.32498741149902;0 +-77.7012939453125;23.68317031860352;0 +-77.70101928710938;23.85545539855957;0 +-77.70101928710938;24.10620880126953;0 +-77.70011901855469;24.03099060058594;0 +-77.70005035400391;23.85269546508789;0 +-77.70003509521484;23.82608604431152;0 +-77.69985961914062;23.84581184387207;0 +-77.69985961914062;24.38620948791504;0 +-77.69937896728516;24.07431983947754;0 +-77.69905853271484;24.36831092834473;0 +-77.69873809814453;23.77560806274414;0 +-77.69860076904297;24.05505180358887;0 +-77.69834136962891;23.81964683532715;0 +-77.69823455810547;23.8604793548584;0 +-77.69805145263672;23.6840648651123;0 +-77.69772338867188;23.72076988220215;0 +-77.69691467285156;24.29214668273926;0 +-77.69685363769531;24.03279304504395;0 +-77.69655609130859;23.74003219604492;0 +-77.69615936279297;24.07199478149414;0 +-77.69597625732422;24.37493324279785;0 +-77.69534301757812;26.99107551574707;0 +-77.69529724121094;23.79760360717773;0 +-77.69510650634766;23.79140663146973;0 +-77.69458770751953;23.84921073913574;0 +-77.69387054443359;24.11943626403809;0 +-77.69382476806641;23.76708030700684;0 +-77.69344329833984;23.78153038024902;0 +-77.69333648681641;23.82236289978027;0 +-77.69329833984375;24.3677978515625;0 +-77.69326782226562;26.99312210083008;0 +-77.6932373046875;23.69274520874023;0 +-77.69276428222656;23.85837364196777;0 +-77.69255828857422;23.85332298278809;0 +-77.69248199462891;23.83428192138672;0 +-77.69215393066406;24.11666870117188;0 +-77.69192504882812;23.84070205688477;0 +-77.69154357910156;23.71521377563477;0 +-77.69144439697266;24.33291625976562;0 +-77.69113159179688;24.09671020507812;0 +-77.69097137451172;26.90398025512695;0 +-77.69090270996094;23.78701400756836;0 +-77.69084930419922;23.73746299743652;0 +-77.69084167480469;23.82188415527344;0 +-77.69058990478516;23.76636695861816;0 +-77.69007873535156;24.12306976318359;0 +-77.68863677978516;24.09622764587402;0 +-77.68861389160156;23.84824562072754;0 +-77.68857574462891;26.88948631286621;0 +-77.68852233886719;26.9818229675293;0 +-77.68840789794922;26.99169921875;0 +-77.68832397460938;24.07994270324707;0 +-77.68814086914062;23.81681632995605;0 +-77.68775177001953;23.77689933776855;0 +-77.68768310546875;24.35512733459473;0 +-77.68659973144531;23.79386520385742;0 +-77.68656158447266;26.88602256774902;0 +-77.68644714355469;24.06914901733398;0 +-77.68634033203125;23.7676830291748;0 +-77.68566131591797;23.84386444091797;0 +-77.68566131591797;26.98501205444336;0 +-77.68505859375;23.82711410522461;0 +-77.68446350097656;23.78763580322266;0 +-77.68443298339844;24.33261871337891;0 +-77.68441009521484;23.78560447692871;0 +-77.68425750732422;23.77732849121094;0 +-77.68407440185547;23.85394477844238;0 +-77.68360137939453;24.12139892578125;0 +-77.68330383300781;24.08172798156738;0 +-77.68273162841797;23.78052711486816;0 +-77.68157196044922;23.8263988494873;0 +-77.68112945556641;23.73715591430664;0 +-77.68093109130859;26.88527870178223;0 +-77.68087005615234;23.79335975646973;0 +-77.68038177490234;24.33624839782715;0 +-77.67961120605469;23.85046768188477;0 +-77.67934417724609;26.9769115447998;0 +-77.67928314208984;23.85895156860352;0 +-77.67861938476562;23.71121215820312;0 +-77.67844390869141;23.70249176025391;0 +-77.67806243896484;23.85665130615234;0 +-77.67795562744141;26.9858570098877;0 +-77.67691040039062;23.73482894897461;0 +-77.67685699462891;23.79585075378418;0 +-77.67681884765625;23.82842445373535;0 +-77.67666625976562;23.70660781860352;0 +-77.67617034912109;23.78965187072754;0 +-77.67527770996094;24.12796783447266;0 +-77.67498779296875;24.10962104797363;0 +-77.67465972900391;23.84607315063477;0 +-77.67447662353516;23.78344345092773;0 +-77.67379760742188;24.10456466674805;0 +-77.67359924316406;26.89853286743164;0 +-77.67334747314453;26.87647819519043;0 +-77.67333984375;24.10043144226074;0 +-77.67319488525391;24.1130428314209;0 +-77.67314910888672;23.79237937927246;0 +-77.67311096191406;23.82403755187988;0 +-77.67305755615234;26.87923049926758;0 +-77.67108917236328;23.77240562438965;0 +-77.67081451416016;24.14603805541992;0 +-77.67070770263672;23.8416805267334;0 +-77.67019653320312;23.85034370422363;0 +-77.67011260986328;26.97681999206543;0 +-77.66991424560547;23.73637771606445;0 +-77.66969299316406;23.84350776672363;0 +-77.66951751708984;24.3015079498291;0 +-77.66950988769531;23.78088188171387;0 +-77.66941070556641;23.79189109802246;0 +-77.66887664794922;23.79601669311523;0 +-77.66875457763672;23.83730697631836;0 +-77.66799926757812;26.87389945983887;0 +-77.66770935058594;23.73200035095215;0 +-77.66668701171875;23.85204887390137;0 +-77.66573333740234;26.87043190002441;0 +-77.66524505615234;24.13016128540039;0 +-77.664306640625;24.29462814331055;0 +-77.66429901123047;23.83382987976074;0 +-77.66427612304688;23.8541145324707;0 +-77.66409301757812;24.29434585571289;0 +-77.66297149658203;24.13265991210938;0 +-77.66238403320312;23.85201835632324;0 +-77.66218566894531;24.28584098815918;0 +-77.66153717041016;23.8564624786377;0 +-77.66141510009766;23.82118988037109;0 +-77.66119384765625;23.79090690612793;0 +-77.66110992431641;23.80008316040039;0 +-77.66078948974609;23.72552490234375;0 +-77.66071319580078;23.78883934020996;0 +-77.66050720214844;23.83930397033691;0 +-77.66042327880859;23.82201194763184;0 +-77.66006469726562;23.83310699462891;0 +-77.65959930419922;26.86899375915527;0 +-77.65937042236328;23.7716236114502;0 +-77.65919494628906;24.15647125244141;0 +-77.65879821777344;24.27571487426758;0 +-77.65874481201172;23.73101234436035;0 +-77.65826416015625;23.72894287109375;0 +-77.65825653076172;24.27937889099121;0 +-77.65797424316406;26.86791610717773;0 +-77.65782165527344;23.77826309204102;0 +-77.65782165527344;26.97463417053223;0 +-77.65721130371094;24.15484428405762;0 +-77.6568603515625;23.71906661987305;0 +-77.656494140625;23.7865104675293;0 +-77.65633392333984;23.80440330505371;0 +-77.65611267089844;24.12043762207031;0 +-77.65598297119141;23.85177421569824;0 +-77.6556396484375;23.82595825195312;0 +-77.65538024902344;23.85344886779785;0 +-77.655029296875;23.75621795654297;0 +-77.65502166748047;26.8659610748291;0 +-77.65487670898438;24.2685661315918;0 +-77.65480804443359;23.78053283691406;0 +-77.65455627441406;26.96908950805664;0 +-77.65449523925781;23.76011276245117;0 +-77.65395355224609;24.17659759521484;0 +-77.65393829345703;23.7119312286377;0 +-77.65333557128906;26.90016746520996;0 +-77.65322875976562;24.1742992401123;0 +-77.65185546875;23.74884986877441;0 +-77.65179443359375;23.83693885803223;0 +-77.65153503417969;24.25500106811523;0 +-77.65145874023438;23.71053504943848;0 +-77.65137481689453;23.71948051452637;0 +-77.650146484375;23.71786499023438;0 +-77.65013122558594;24.16142654418945;0 +-77.64989471435547;23.82660102844238;0 +-77.64984130859375;23.80503845214844;0 +-77.64942932128906;24.19994163513184;0 +-77.64912414550781;23.74699401855469;0 +-77.64900970458984;23.86903190612793;0 +-77.64878082275391;24.19122123718262;0 +-77.648681640625;23.82246589660645;0 +-77.64830017089844;24.12563323974609;0 +-77.64792633056641;23.87490844726562;0 +-77.64731597900391;23.7816162109375;0 +-77.64706420898438;24.20977973937988;0 +-77.64692687988281;23.79675483703613;0 +-77.64668273925781;24.17858695983887;0 +-77.64663696289062;23.82818222045898;0 +-77.64630889892578;23.75568771362305;0 +-77.64623260498047;26.89389610290527;0 +-77.64619445800781;26.97451972961426;0 +-77.64597320556641;24.17468452453613;0 +-77.64571380615234;23.71140480041504;0 +-77.64556121826172;26.97083854675293;0 +-77.64551544189453;26.97451400756836;0 +-77.64511871337891;23.83023262023926;0 +-77.64504241943359;23.78435325622559;0 +-77.64419555664062;23.71414566040039;0 +-77.64410400390625;26.97248077392578;0 +-77.64401245117188;24.13059425354004;0 +-77.64377593994141;24.21272850036621;0 +-77.64374542236328;26.97196769714355;0 +-77.64361572265625;23.72308540344238;0 +-77.64292907714844;23.82425117492676;0 +-77.64234161376953;23.72560119628906;0 +-77.64214324951172;26.8929386138916;0 +-77.64166259765625;23.82653427124023;0 +-77.63963317871094;24.24547958374023;0 +-77.63928985595703;23.81321144104004;0 +-77.63827514648438;24.21267127990723;0 +-77.63758087158203;23.72854423522949;0 +-77.63735198974609;23.75354957580566;0 +-77.636962890625;24.21724510192871;0 +-77.63691711425781;24.22160148620605;0 +-77.63689422607422;24.13881683349609;0 +-77.63632965087891;23.83681297302246;0 +-77.63606262207031;26.86554527282715;0 +-77.63556671142578;23.75766372680664;0 +-77.635498046875;23.81868553161621;0 +-77.635498046875;24.21424674987793;0 +-77.63523864746094;23.73930931091309;0 +-77.63481140136719;24.23006439208984;0 +-77.63462829589844;23.83244132995605;0 +-77.63423156738281;23.73998832702637;0 +-77.63307952880859;23.75672721862793;0 +-77.63275146484375;23.73836898803711;0 +-77.63249969482422;23.81934928894043;0 +-77.63231658935547;23.73148536682129;0 +-77.63212585449219;26.89444541931152;0 +-77.63202667236328;24.14862632751465;0 +-77.63152313232422;24.1910457611084;0 +-77.63021850585938;23.74293899536133;0 +-77.62944793701172;24.17634773254395;0 +-77.62907409667969;23.7319164276123;0 +-77.62879943847656;26.89418411254883;0 +-77.62867736816406;24.19881439208984;0 +-77.62828826904297;23.73581123352051;0 +-77.62747192382812;24.23732757568359;0 +-77.62728881835938;23.81678199768066;0 +-77.62693023681641;23.7215747833252;0 +-77.62661743164062;24.24580192565918;0 +-77.62660217285156;23.80989456176758;0 +-77.62613677978516;23.72592735290527;0 +-77.62502288818359;23.84589576721191;0 +-77.62450408935547;23.7139835357666;0 +-77.62441253662109;23.72384834289551;0 +-77.62340545654297;24.24210166931152;0 +-77.62331390380859;23.70846748352051;0 +-77.62261962890625;24.20333862304688;0 +-77.62208557128906;23.73323440551758;0 +-77.62152862548828;23.73942375183105;0 +-77.62152862548828;26.85965538024902;0 +-77.62079620361328;23.81741714477539;0 +-77.61986541748047;23.70362091064453;0 +-77.61981964111328;23.84218406677246;0 +-77.61958312988281;23.73390197753906;0 +-77.61928558349609;23.84515953063965;0 +-77.6190185546875;26.89730262756348;0 +-77.61882019042969;23.70934677124023;0 +-77.61773681640625;23.71782684326172;0 +-77.61767578125;26.86030578613281;0 +-77.61637115478516;23.81026840209961;0 +-77.61626434326172;23.82196617126465;0 +-77.61601257324219;24.21175384521484;0 +-77.61586761474609;23.73111915588379;0 +-77.61496734619141;23.82700157165527;0 +-77.61409759521484;23.70724296569824;0 +-77.6136474609375;23.70242118835449;0 +-77.61351776123047;23.82776832580566;0 +-77.61350250244141;24.21241569519043;0 +-77.61254119873047;24.20965385437012;0 +-77.61096954345703;26.86437225341797;0 +-77.61089324951172;23.70354652404785;0 +-77.61026763916016;23.71684837341309;0 +-77.60983276367188;23.81640625;0 +-77.60976409912109;26.89950370788574;0 +-77.60939788818359;26.92890167236328;0 +-77.60926055908203;23.71867561340332;0 +-77.60888671875;23.73151969909668;0 +-77.60840606689453;26.92613410949707;0 +-77.60838317871094;23.81111907958984;0 +-77.60769653320312;23.83084106445312;0 +-77.60758972167969;26.93025970458984;0 +-77.60649871826172;24.21234321594238;0 +-77.60623168945312;23.72186088562012;0 +-77.60603332519531;23.82279968261719;0 +-77.60548400878906;24.21393966674805;0 +-77.60529327392578;24.20866203308105;0 +-77.60466003417969;23.83609199523926;0 +-77.60374450683594;23.72207069396973;0 +-77.60335540771484;26.89966773986816;0 +-77.60310363769531;23.81612205505371;0 +-77.60224914550781;23.8266658782959;0 +-77.60204315185547;26.9226245880127;0 +-77.60197448730469;24.21435928344727;0 +-77.60189819335938;23.73260688781738;0 +-77.601806640625;26.92683029174805;0 +-77.59966278076172;26.86678314208984;0 +-77.59951019287109;26.89962768554688;0 +-77.59929656982422;23.82297134399414;0 +-77.59893035888672;26.92512130737305;0 +-77.59825134277344;23.8280086517334;0 +-77.59815979003906;23.83718490600586;0 +-77.59767150878906;23.73142433166504;0 +-77.59759521484375;23.81768226623535;0 +-77.59732055664062;23.82088851928711;0 +-77.5972900390625;26.92086791992188;0 +-77.59565734863281;26.92026138305664;0 +-77.59458160400391;26.90417289733887;0 +-77.59432983398438;26.92415237426758;0 +-77.59425354003906;23.72382545471191;0 +-77.59334564208984;23.84471321105957;0 +-77.59290313720703;24.1993579864502;0 +-77.59228515625;24.20852470397949;0 +-77.59181976318359;26.89932060241699;0 +-77.59176635742188;26.9039134979248;0 +-77.59129333496094;26.92067527770996;0 +-77.5911865234375;23.83620834350586;0 +-77.59080505371094;24.20418930053711;0 +-77.59037017822266;23.81693267822266;0 +-77.59032440185547;24.20529174804688;0 +-77.59003448486328;24.18855094909668;0 +-77.58921813964844;23.81681060791016;0 +-77.58901977539062;23.72378158569336;0 +-77.58900451660156;23.82930755615234;0 +-77.58889007568359;26.8878059387207;0 +-77.58782958984375;23.84833717346191;0 +-77.58765411376953;26.88388824462891;0 +-77.58722686767578;26.91787719726562;0 +-77.58592987060547;26.91924285888672;0 +-77.58563995361328;23.81643295288086;0 +-77.58507537841797;26.90524101257324;0 +-77.58489227294922;26.89993667602539;0 +-77.58465576171875;23.84051132202148;0 +-77.58438873291016;24.17931747436523;0 +-77.583984375;26.91095352172852;0 +-77.58396911621094;26.89848709106445;0 +-77.58394622802734;23.73245620727539;0 +-77.58380889892578;23.82536315917969;0 +-77.58353424072266;26.88591194152832;0 +-77.58334350585938;26.88039779663086;0 +-77.58312225341797;26.22880935668945;0 +-77.58305358886719;26.90268325805664;0 +-77.58294677734375;26.32388496398926;0 +-77.582275390625;23.85494232177734;0 +-77.58177185058594;23.72555541992188;0 +-77.58161926269531;26.22649765014648;0 +-77.58160400390625;26.32869338989258;0 +-77.58143615722656;26.89448928833008;0 +-77.58100128173828;23.83176422119141;0 +-77.58084869384766;23.84758949279785;0 +-77.58042907714844;26.31863784790039;0 +-77.58029174804688;23.72416496276855;0 +-77.57981109619141;26.8985767364502;0 +-77.57959747314453;26.26574516296387;0 +-77.57903289794922;23.85445594787598;0 +-77.57820892333984;26.25470733642578;0 +-77.57819366455078;26.90262413024902;0 +-77.57813262939453;26.90767478942871;0 +-77.57779693603516;23.72901725769043;0 +-77.57771301269531;23.83632278442383;0 +-77.57754516601562;26.26687431335449;0 +-77.57720947265625;24.15332984924316;0 +-77.57711791992188;26.90782928466797;0 +-77.57686614990234;26.86585998535156;0 +-77.57670593261719;26.25216674804688;0 +-77.57670593261719;26.33346557617188;0 +-77.57633972167969;26.2611198425293;0 +-77.57624053955078;26.32978439331055;0 +-77.57578277587891;26.30894470214844;0 +-77.57569885253906;23.8381404876709;0 +-77.57560729980469;26.90466499328613;0 +-77.57535552978516;23.84800148010254;0 +-77.5751953125;23.7358226776123;0 +-77.57473754882812;23.731689453125;0 +-77.57453918457031;23.82964324951172;0 +-77.57413482666016;26.33458709716797;0 +-77.57369995117188;23.73512268066406;0 +-77.57350158691406;26.26407623291016;0 +-77.57303619384766;23.72685623168945;0 +-77.57283782958984;26.25625991821289;0 +-77.57266998291016;26.33255195617676;0 +-77.57203674316406;26.2390308380127;0 +-77.57151031494141;26.26015090942383;0 +-77.57125854492188;26.88371658325195;0 +-77.57093811035156;26.90875053405762;0 +-77.57089233398438;23.84566879272461;0 +-77.57077026367188;26.29849433898926;0 +-77.57039642333984;26.87107467651367;0 +-77.57025909423828;23.83327484130859;0 +-77.57012939453125;26.32903289794922;0 +-77.56983947753906;24.14270401000977;0 +-77.56924438476562;23.83487510681152;0 +-77.56894683837891;26.90413665771484;0 +-77.56869506835938;26.23157691955566;0 +-77.56840515136719;26.90642738342285;0 +-77.56800842285156;23.73140335083008;0 +-77.56788635253906;26.26493453979492;0 +-77.56745910644531;26.23783111572266;0 +-77.56739807128906;23.84541130065918;0 +-77.56678771972656;23.83118438720703;0 +-77.56658935546875;23.8520565032959;0 +-77.56625366210938;26.2325382232666;0 +-77.56578063964844;26.9109935760498;0 +-77.56571197509766;26.25503730773926;0 +-77.56566619873047;26.29867172241211;0 +-77.56539916992188;26.88089942932129;0 +-77.56483459472656;26.23392486572266;0 +-77.56434631347656;23.8515796661377;0 +-77.56393432617188;26.23480987548828;0 +-77.56367492675781;26.29520797729492;0 +-77.56349945068359;23.83574295043945;0 +-77.56317901611328;26.25409126281738;0 +-77.56275939941406;23.73250389099121;0 +-77.56272125244141;26.29014587402344;0 +-77.56240081787109;23.84651374816895;0 +-77.56217193603516;26.87417221069336;0 +-77.56167602539062;24.13596343994141;0 +-77.56135559082031;26.25728797912598;0 +-77.56011199951172;26.27473068237305;0 +-77.55968475341797;25.01203155517578;0 +-77.55916595458984;23.81964874267578;0 +-77.5587158203125;25.02877616882324;0 +-77.55870056152344;26.2255687713623;0 +-77.55825042724609;25.02578735351562;0 +-77.55755615234375;26.88081550598145;0 +-77.55710601806641;26.27079200744629;0 +-77.55696105957031;23.8232593536377;0 +-77.55694580078125;23.82523727416992;0 +-77.55687713623047;25.01475715637207;0 +-77.55532073974609;23.82621383666992;0 +-77.55526733398438;26.95130920410156;0 +-77.55522918701172;26.87665367126465;0 +-77.55480194091797;26.94762992858887;0 +-77.55433654785156;23.8292407989502;0 +-77.55397033691406;26.87404441833496;0 +-77.55378723144531;26.27121543884277;0 +-77.55341339111328;26.22068977355957;0 +-77.55326080322266;25.00186347961426;0 +-77.55284118652344;26.88076591491699;0 +-77.55191040039062;26.95265197753906;0 +-77.55095672607422;25;0 +-77.55025482177734;26.88257789611816;0 +-77.55012512207031;26.87711715698242;0 +-77.54962158203125;26.27806091308594;0 +-77.54936218261719;26.87223052978516;0 +-77.54912567138672;23.75004959106445;0 +-77.54898071289062;26.22890853881836;0 +-77.54856872558594;26.22132682800293;0 +-77.54812622070312;26.88852691650391;0 +-77.54804992675781;25.01512336730957;0 +-77.5479736328125;26.90046882629395;0 +-77.54785919189453;25.03049468994141;0 +-77.54752349853516;24.99721527099609;0 +-77.54724884033203;23.81403923034668;0 +-77.54716491699219;25.02566719055176;0 +-77.54690551757812;24.0780200958252;0 +-77.5467529296875;23.82268142700195;0 +-77.54674530029297;26.22429084777832;0 +-77.54665374755859;26.86393356323242;0 +-77.546630859375;23.8264217376709;0 +-77.54649353027344;24.0913143157959;0 +-77.54627227783203;23.76149749755859;0 +-77.54593658447266;25.02313041687012;0 +-77.54581451416016;26.86897850036621;0 +-77.54562377929688;24.06103897094727;0 +-77.54544067382812;23.8192081451416;0 +-77.54534912109375;26.94431304931641;0 +-77.54531860351562;24.08534049987793;0 +-77.54531097412109;24.10574913024902;0 +-77.54487609863281;23.82143211364746;0 +-77.54432678222656;26.31291198730469;0 +-77.54426574707031;24.10917663574219;0 +-77.54425048828125;26.85127449035645;0 +-77.54384613037109;24.1025218963623;0 +-77.54379272460938;26.88664436340332;0 +-77.54345703125;26.87308692932129;0 +-77.54316711425781;23.82317924499512;0 +-77.54280853271484;26.8735408782959;0 +-77.54276275634766;26.94612312316895;0 +-77.54242706298828;26.2823486328125;0 +-77.54160308837891;26.87788963317871;0 +-77.54106903076172;26.30851364135742;0 +-77.54087066650391;26.87489700317383;0 +-77.54084014892578;26.08965873718262;0 +-77.54043579101562;26.08161735534668;0 +-77.54042816162109;23.7726879119873;0 +-77.5396728515625;23.81692504882812;0 +-77.53937530517578;26.89142036437988;0 +-77.53921508789062;24.99666595458984;0 +-77.53881072998047;26.85626983642578;0 +-77.53826904296875;23.81441879272461;0 +-77.53793334960938;26.86453056335449;0 +-77.53733062744141;25.02602005004883;0 +-77.53704833984375;26.84830856323242;0 +-77.53664398193359;26.0994873046875;0 +-77.53661346435547;23.80545806884766;0 +-77.53585052490234;25.02708625793457;0 +-77.53578948974609;23.81302070617676;0 +-77.53560638427734;26.85036277770996;0 +-77.53549957275391;26.30546951293945;0 +-77.53540802001953;24.03914451599121;0 +-77.53537750244141;26.94236946105957;0 +-77.53512573242188;26.07926368713379;0 +-77.5347900390625;26.30132675170898;0 +-77.53459167480469;24.0249195098877;0 +-77.53362274169922;26.84151458740234;0 +-77.53362274169922;26.86080741882324;0 +-77.53294372558594;26.8543701171875;0 +-77.53278350830078;26.10266304016113;0 +-77.53269958496094;24.99429893493652;0 +-77.53248596191406;26.88881874084473;0 +-77.5318603515625;26.09553337097168;0 +-77.53163146972656;23.80472946166992;0 +-77.53153991699219;23.81344413757324;0 +-77.53115081787109;26.85411834716797;0 +-77.53087615966797;26.07347679138184;0 +-77.53082275390625;23.81045532226562;0 +-77.53040313720703;23.80311012268066;0 +-77.52995300292969;26.84744644165039;0 +-77.52930450439453;26.09665298461914;0 +-77.529052734375;26.83824920654297;0 +-77.52882385253906;23.8108959197998;0 +-77.52872467041016;24.99518775939941;0 +-77.52840423583984;23.82832717895508;0 +-77.52806854248047;26.87430000305176;0 +-77.52767944335938;26.10421180725098;0 +-77.52764129638672;24;0 +-77.52717590332031;23.82602119445801;0 +-77.52691650390625;26.94205093383789;0 +-77.52655029296875;23.81385803222656;0 +-77.52645874023438;26.84051895141602;0 +-77.52548980712891;26.93353652954102;0 +-77.52486419677734;24.99604988098145;0 +-77.52452850341797;26.09200668334961;0 +-77.52384948730469;25.03573989868164;0 +-77.52368927001953;26.93443298339844;0 +-77.52342987060547;23.9766845703125;0 +-77.52318572998047;26.85541343688965;0 +-77.52291870117188;23.82781791687012;0 +-77.52186584472656;26.85884475708008;0 +-77.52110290527344;26.08140754699707;0 +-77.52030944824219;26.87927055358887;0 +-77.51924896240234;23.97045516967773;0 +-77.51898956298828;26.08735466003418;0 +-77.51820373535156;23.94980430603027;0 +-77.51781463623047;23.95288467407227;0 +-77.51731872558594;23.83877754211426;0 +-77.51725006103516;23.94520950317383;0 +-77.51712036132812;23.95827865600586;0 +-77.51690673828125;26.86199951171875;0 +-77.51509094238281;23.93670272827148;0 +-77.51492309570312;26.8217887878418;0 +-77.51419830322266;26.8764476776123;0 +-77.51358032226562;26.82659912109375;0 +-77.51307678222656;26.80614852905273;0 +-77.51306915283203;24.99551963806152;0 +-77.51295471191406;26.81556510925293;0 +-77.51292419433594;23.85433959960938;0 +-77.51216888427734;23.88002395629883;0 +-77.51165008544922;26.8562068939209;0 +-77.51124572753906;23.87221717834473;0 +-77.51071166992188;25.03789138793945;0 +-77.5106201171875;23.88934135437012;0 +-77.51052093505859;23.84537124633789;0 +-77.51039123535156;25.04339599609375;0 +-77.50996398925781;26.80956077575684;0 +-77.50977325439453;23.89445304870605;0 +-77.50929260253906;23.84329605102539;0 +-77.50897216796875;23.85086441040039;0 +-77.507568359375;23.86576080322266;0 +-77.50658416748047;26.81342887878418;0 +-77.50654602050781;25.04615020751953;0 +-77.50564575195312;23.85909080505371;0 +-77.50556182861328;26.8515453338623;0 +-77.50508880615234;26.80996704101562;0 +-77.50503540039062;23.84509468078613;0 +-77.50496673583984;26.81892395019531;0 +-77.50485229492188;26.84694480895996;0 +-77.50476837158203;23.92078590393066;0 +-77.50446319580078;26.79916381835938;0 +-77.50376892089844;25.04814147949219;0 +-77.50374603271484;26.81477737426758;0 +-77.50343322753906;25.0547924041748;0 +-77.50332641601562;23.9150390625;0 +-77.50289154052734;23.85975456237793;0 +-77.50191497802734;23.85768127441406;0 +-77.50180816650391;26.80625343322754;0 +-77.50126647949219;26.84667587280273;0 +-77.49894714355469;26.80966949462891;0 +-77.49853515625;26.80208396911621;0 +-77.49781036376953;25.06069755554199;0 +-77.49668884277344;26.84410095214844;0 +-77.49656677246094;26.86079788208008;0 +-77.49629974365234;26.79700660705566;0 +-77.49534606933594;23.91450881958008;0 +-77.49179840087891;26.90307807922363;0 +-77.49140167236328;26.85621452331543;0 +-77.49111938476562;24.99452781677246;0 +-77.49044036865234;26.79464530944824;0 +-77.49043273925781;26.90926361083984;0 +-77.48989868164062;26.8350658416748;0 +-77.48878479003906;23.92178916931152;0 +-77.48752593994141;26.80219268798828;0 +-77.48707580566406;26.89200019836426;0 +-77.48680114746094;26.91220855712891;0 +-77.48504638671875;24.99062156677246;0 +-77.48355102539062;26.83084869384766;0 +-77.48349761962891;26.79709625244141;0 +-77.48313140869141;24.98938941955566;0 +-77.48249053955078;26.8898811340332;0 +-77.48075866699219;26.82899284362793;0 +-77.48011016845703;23.9155158996582;0 +-77.47927093505859;26.90040969848633;0 +-77.47898101806641;24.97947692871094;0 +-77.47743988037109;24.98175239562988;0 +-77.47708892822266;26.89165878295898;0 +-77.47653961181641;26.8944091796875;0 +-77.47624969482422;24.97646141052246;0 +-77.47533416748047;26.90725898742676;0 +-77.47531127929688;26.81514930725098;0 +-77.47371673583984;26.81926727294922;0 +-77.45994567871094;26.83312225341797;0 +-77.45915985107422;26.79728126525879;0 +-77.45720672607422;26.73455429077148;0 +-77.45665740966797;26.73649597167969;0 +-77.45648956298828;26.74947738647461;0 +-77.45616149902344;26.79219436645508;0 +-77.45589447021484;25.06527137756348;0 +-77.455322265625;26.7411937713623;0 +-77.45433044433594;26.72051048278809;0 +-77.45378112792969;26.77884674072266;0 +-77.45303344726562;26.75885391235352;0 +-77.45206451416016;26.71749877929688;0 +-77.44989776611328;26.7177677154541;0 +-77.44877624511719;25.06978225708008;0 +-77.44779968261719;24.97521781921387;0 +-77.44776153564453;24.97797012329102;0 +-77.44771575927734;26.64395141601562;0 +-77.44766998291016;26.64716529846191;0 +-77.44694519042969;26.71813011169434;0 +-77.44571685791016;24.98001289367676;0 +-77.44325256347656;26.65216636657715;0 +-77.44219207763672;26.63653755187988;0 +-77.44169616699219;25.07130432128906;0 +-77.43940734863281;24.98108863830566;0 +-77.43931579589844;26.62272262573242;0 +-77.43902587890625;26.62524604797363;0 +-77.43897247314453;26.64706611633301;0 +-77.43769836425781;26.61007308959961;0 +-77.43759918212891;26.70929336547852;0 +-77.43718719482422;26.70171165466309;0 +-77.43594360351562;26.62613105773926;0 +-77.43505096435547;26.61670303344727;0 +-77.43389129638672;24.97895622253418;0 +-77.43367767333984;26.65291595458984;0 +-77.43344879150391;26.67640113830566;0 +-77.43327331542969;25.07901000976562;0 +-77.43314361572266;26.68007469177246;0 +-77.43299865722656;26.65500259399414;0 +-77.43216705322266;26.62172317504883;0 +-77.43089294433594;26.60333251953125;0 +-77.43087005615234;26.69612693786621;0 +-77.43055725097656;26.6821117401123;0 +-77.43006896972656;25.07323265075684;0 +-77.43006896972656;26.80797576904297;0 +-77.42935180664062;26.80429267883301;0 +-77.42934417724609;26.65912818908691;0 +-77.42916107177734;26.67198944091797;0 +-77.42910766601562;24.97912979125977;0 +-77.42822265625;26.68415069580078;0 +-77.42753601074219;26.62396812438965;0 +-77.42744445800781;26.66691589355469;0 +-77.42727661132812;26.67862892150879;0 +-77.42713928222656;26.68850326538086;0 +-77.42657470703125;26.6014461517334;0 +-77.42572784423828;26.60717964172363;0 +-77.42448425292969;26.60463714599609;0 +-77.42432403564453;26.80005264282227;0 +-77.42412567138672;26.6845645904541;0 +-77.42406463623047;26.62403106689453;0 +-77.42362213134766;26.61105918884277;0 +-77.42305755615234;26.62748527526855;0 +-77.42263793945312;26.68133163452148;0 +-77.42205047607422;26.59588241577148;0 +-77.42180633544922;26.6859130859375;0 +-77.41787719726562;26.61972045898438;0 +-77.41695404052734;26.68540000915527;0 +-77.41667175292969;26.59650802612305;0 +-77.41551208496094;26.62405395507812;0 +-77.41487884521484;26.61463165283203;0 +-77.41383361816406;26.59808349609375;0 +-77.41029357910156;26.61343002319336;0 +-77.41001129150391;26.59734916687012;0 +-77.40989685058594;26.58770179748535;0 +-77.40988159179688;25.07483291625977;0 +-77.40908813476562;24.98715591430664;0 +-77.40872955322266;26.61593818664551;0 +-77.40846252441406;26.68874549865723;0 +-77.40749359130859;26.68482971191406;0 +-77.40653228759766;26.68362617492676;0 +-77.40583801269531;25.07343101501465;0 +-77.40566253662109;26.68733596801758;0 +-77.40516662597656;24.97953796386719;0 +-77.40502166748047;26.58879280090332;0 +-77.40472412109375;26.68135452270508;0 +-77.40462493896484;26.59866523742676;0 +-77.40392303466797;24.97814559936523;0 +-77.40377807617188;26.56856727600098;0 +-77.40346527099609;26.57223701477051;0 +-77.40345764160156;26.59107208251953;0 +-77.40337371826172;26.00429344177246;0 +-77.40293121337891;25.99992561340332;0 +-77.40227508544922;26.56625175476074;0 +-77.40160369873047;24.98224830627441;0 +-77.40156555175781;26.02447891235352;0 +-77.40079498291016;26.01644706726074;0 +-77.40068054199219;26.01528358459473;0 +-77.40054321289062;24.98590850830078;0 +-77.40023040771484;24.99003410339355;0 +-77.39913940429688;24.97808837890625;0 +-77.39869689941406;24.97395324707031;0 +-77.39842987060547;25.99435806274414;0 +-77.39799499511719;26.68701553344727;0 +-77.39718627929688;26.02794075012207;0 +-77.39683532714844;24.98081398010254;0 +-77.39641571044922;26.02854919433594;0 +-77.39619445800781;24.97254371643066;0 +-77.39495086669922;24.98928260803223;0 +-77.39475250244141;26.77035522460938;0 +-77.39455413818359;26.77495193481445;0 +-77.39439392089844;26.68790817260742;0 +-77.39385986328125;26.63643646240234;0 +-77.39362335205078;26.5638542175293;0 +-77.39341735839844;26.02530288696289;0 +-77.39337158203125;26.01037406921387;0 +-77.39329528808594;26.56844329833984;0 +-77.39316558837891;26.77378082275391;0 +-77.39283752441406;24.97870063781738;0 +-77.39270782470703;24.9874210357666;0 +-77.39264678955078;26.64974403381348;0 +-77.39230346679688;26.56682205200195;0 +-77.39206695556641;25.06865501403809;0 +-77.39161682128906;26.00851440429688;0 +-77.39144134521484;26.01932525634766;0 +-77.39126586914062;24.98281288146973;0 +-77.39076232910156;26.76295852661133;0 +-77.39058685302734;24.97729873657227;0 +-77.39035034179688;26.64948654174805;0 +-77.38990020751953;26.8408145904541;0 +-77.38979339599609;24.97981262207031;0 +-77.38975524902344;26.01423645019531;0 +-77.38876342773438;24.98163795471191;0 +-77.38876342773438;26.63499641418457;0 +-77.38857269287109;26.84378433227539;0 +-77.38674926757812;25.99353408813477;0 +-77.38612365722656;26.64093589782715;0 +-77.38550567626953;26.84328842163086;0 +-77.38451385498047;25.06787490844727;0 +-77.38427734375;24.97813987731934;0 +-77.38182830810547;25.0726146697998;0 +-77.38027954101562;26.6914005279541;0 +-77.3802490234375;26.83473014831543;0 +-77.37908172607422;25.07744979858398;0 +-77.37882995605469;26.70309638977051;0 +-77.37844085693359;26.6945915222168;0 +-77.37791442871094;26.53679466247559;0 +-77.37770843505859;26.53311729431152;0 +-77.37757110595703;26.82550811767578;0 +-77.37675476074219;26.61693954467773;0 +-77.37506866455078;26.60979843139648;0 +-77.37486267089844;24.98491096496582;0 +-77.37417602539062;26.70648574829102;0 +-77.37401580810547;26.54111289978027;0 +-77.37360382080078;26.7459888458252;0 +-77.37316131591797;26.6178150177002;0 +-77.373046875;26.53318214416504;0 +-77.37174987792969;25.07873725891113;0 +-77.37091827392578;26.82497024536133;0 +-77.37070465087891;26.54061317443848;0 +-77.36982727050781;26.59433937072754;0 +-77.36876678466797;26.53324127197266;0 +-77.36845397949219;26.53383636474609;0 +-77.36827850341797;26.81276321411133;0 +-77.36798095703125;26.58797073364258;0 +-77.36793518066406;26.59172248840332;0 +-77.367919921875;26.74260711669922;0 +-77.36785888671875;26.6131591796875;0 +-77.36750030517578;26.60281944274902;0 +-77.36745452880859;26.53575325012207;0 +-77.36672973632812;26.70800590515137;0 +-77.36624908447266;25.98685646057129;0 +-77.3660888671875;26.82192611694336;0 +-77.36592102050781;26.60555648803711;0 +-77.36571502685547;26.82995986938477;0 +-77.36549377441406;26.81043243408203;0 +-77.36539459228516;26.81709289550781;0 +-77.36402893066406;26.64802360534668;0 +-77.36351776123047;26.58561515808105;0 +-77.36324310302734;26.01873970031738;0 +-77.36320495605469;26.65146064758301;0 +-77.3631591796875;26.58821105957031;0 +-77.36308288574219;26.7127857208252;0 +-77.36270141601562;24.98935317993164;0 +-77.36228942871094;26.03227806091309;0 +-77.36199188232422;26.03525924682617;0 +-77.36174774169922;26.59829711914062;0 +-77.36129760742188;26.64201927185059;0 +-77.36119842529297;26.82393455505371;0 +-77.36087799072266;26.70893096923828;0 +-77.36064910888672;25.07929039001465;0 +-77.36009979248047;26.81128883361816;0 +-77.35972595214844;26.81955337524414;0 +-77.35945892333984;25.9821834564209;0 +-77.35848999023438;26.64198684692383;0 +-77.35813140869141;25.98561096191406;0 +-77.35784912109375;26.0225772857666;0 +-77.35781097412109;26.04278564453125;0 +-77.35715484619141;26.60604286193848;0 +-77.35710144042969;26.65694999694824;0 +-77.35684967041016;26.66654205322266;0 +-77.35634613037109;26.70099067687988;0 +-77.35634613037109;26.82295608520508;0 +-77.35620880126953;26.03036689758301;0 +-77.35555267333984;26.04046249389648;0 +-77.35533142089844;26.64768981933594;0 +-77.35497283935547;26.02888488769531;0 +-77.35489654541016;26.5817756652832;0 +-77.35477447509766;26.82523536682129;0 +-77.3546142578125;26.66215324401855;0 +-77.35446166992188;26.02827835083008;0 +-77.35422515869141;26.67087364196777;0 +-77.35387420654297;26.65984916687012;0 +-77.35385131835938;26.81833267211914;0 +-77.35378265380859;24.9965877532959;0 +-77.353515625;25.98876953125;0 +-77.35348510742188;26.59157371520996;0 +-77.35295104980469;26.6080207824707;0 +-77.35237121582031;25.07643508911133;0 +-77.35218048095703;26.59300422668457;0 +-77.35194396972656;26.60010528564453;0 +-77.35153198242188;26.69748687744141;0 +-77.35109710693359;26.60251998901367;0 +-77.35076141357422;26.73239135742188;0 +-77.35055541992188;26.81576728820801;0 +-77.35044097900391;26.57855415344238;0 +-77.35041046142578;26.6175422668457;0 +-77.35034942626953;26.67335510253906;0 +-77.35026550292969;26.59211921691895;0 +-77.35019683837891;26.59732627868652;0 +-77.35016632080078;26.63407707214355;0 +-77.34994506835938;26.68391609191895;0 +-77.34935760498047;26.68246269226074;0 +-77.34870910644531;26.62877655029297;0 +-77.34816741943359;26.58026123046875;0 +-77.34812927246094;26.04358673095703;0 +-77.34806060791016;25.07798957824707;0 +-77.34792327880859;25.98870277404785;0 +-77.34782409667969;26.53252792358398;0 +-77.34771728515625;26.67837715148926;0 +-77.34698486328125;25.0888843536377;0 +-77.34691619873047;26.61175918579102;0 +-77.34673309326172;25;0 +-77.34650421142578;25.08555221557617;0 +-77.34647369384766;26.58717155456543;0 +-77.34583282470703;26.59842300415039;0 +-77.34580993652344;26.65193939208984;0 +-77.34547424316406;26.53594589233398;0 +-77.34544372558594;26.78079032897949;0 +-77.34535980224609;26.04171562194824;0 +-77.34534454345703;26.68317031860352;0 +-77.34462738037109;26.78399658203125;0 +-77.34454345703125;26.68545913696289;0 +-77.34416961669922;26.65926933288574;0 +-77.34416198730469;26.60781860351562;0 +-77.34383392333984;26.52604675292969;0 +-77.34380340576172;26.65592956542969;0 +-77.3433837890625;26.79845237731934;0 +-77.34329986572266;26.59701538085938;0 +-77.34317016601562;26.65718841552734;0 +-77.34290313720703;26.67533111572266;0 +-77.34262084960938;26.5908031463623;0 +-77.34217834472656;26.60366058349609;0 +-77.34191131591797;26.72516250610352;0 +-77.34173583984375;26.66796684265137;0 +-77.341552734375;26.80118751525879;0 +-77.34126281738281;26.78625297546387;0 +-77.34088134765625;26.535888671875;0 +-77.34083557128906;25.00285530090332;0 +-77.34003448486328;26.6789722442627;0 +-77.33966064453125;26.60064506530762;0 +-77.33911895751953;26.77543067932129;0 +-77.339111328125;26.53448867797852;0 +-77.33901977539062;26.60982513427734;0 +-77.33900451660156;26.52461242675781;0 +-77.33847808837891;26.66333389282227;0 +-77.33819580078125;26.64771270751953;0 +-77.33790588378906;26.78827857971191;0 +-77.33787536621094;26.7884349822998;0 +-77.33734893798828;26.79102897644043;0 +-77.33699798583984;26.05081176757812;0 +-77.33658599853516;25.08544731140137;0 +-77.33624267578125;26.58980751037598;0 +-77.33608245849609;26.77309799194336;0 +-77.33600616455078;26.65756225585938;0 +-77.33583831787109;26.59990882873535;0 +-77.33570098876953;26.60909461975098;0 +-77.33559417724609;25.08163452148438;0 +-77.33552551269531;26.79330444335938;0 +-77.33551025390625;26.77699661254883;0 +-77.33529663085938;26.05146789550781;0 +-77.33528137207031;26.65879440307617;0 +-77.33472442626953;26.65800666809082;0 +-77.33424377441406;26.75906181335449;0 +-77.33399963378906;25.98462867736816;0 +-77.33385467529297;25.00345802307129;0 +-77.33370208740234;25.07712364196777;0 +-77.33306884765625;26.68302154541016;0 +-77.33297729492188;26.77535629272461;0 +-77.3328857421875;26.5925235748291;0 +-77.33251190185547;26.58333015441895;0 +-77.33121490478516;26.49833106994629;0 +-77.33097076416016;26.60076904296875;0 +-77.33095550537109;26.67059516906738;0 +-77.33092498779297;26.50062561035156;0 +-77.33088684082031;26.0573844909668;0 +-77.33085632324219;25.0819091796875;0 +-77.33082580566406;26.5761890411377;0 +-77.33056640625;26.67954635620117;0 +-77.33039855957031;26.77624320983887;0 +-77.33008575439453;26.76314735412598;0 +-77.32994842529297;26.75510597229004;0 +-77.32952880859375;26.78274917602539;0 +-77.32928466796875;25.08579063415527;0 +-77.32923126220703;25.00385856628418;0 +-77.32836151123047;26.50128364562988;0 +-77.32822418212891;26.06992530822754;0 +-77.32822418212891;26.49347305297852;0 +-77.32803344726562;26.78011894226074;0 +-77.32733154296875;26.07410430908203;0 +-77.32724761962891;26.57637596130371;0 +-77.32710266113281;25.08002471923828;0 +-77.32672119140625;25.0889720916748;0 +-77.32663726806641;26.59979438781738;0 +-77.32476806640625;26.07522010803223;0 +-77.32356262207031;26.58322143554688;0 +-77.32268524169922;25.08869171142578;0 +-77.32201385498047;26.07243156433105;0 +-77.32192230224609;26.48788452148438;0 +-77.3218994140625;25.07376480102539;0 +-77.32150268554688;26.75477027893066;0 +-77.32140350341797;26.06231880187988;0 +-77.32118988037109;26.34915351867676;0 +-77.32046508789062;26.34638786315918;0 +-77.32013702392578;26.48786163330078;0 +-77.32007598876953;26.59443283081055;0 +-77.3199462890625;26.48845672607422;0 +-77.31948852539062;26.49056243896484;0 +-77.3193359375;26.49037742614746;0 +-77.31916809082031;26.75704193115234;0 +-77.31902313232422;26.34499740600586;0 +-77.3182373046875;25.98466300964355;0 +-77.31790161132812;25.98447418212891;0 +-77.31752014160156;26.68760299682617;0 +-77.31661987304688;25.00484848022461;0 +-77.31543731689453;26.06982231140137;0 +-77.31459045410156;26.69074821472168;0 +-77.31452178955078;26.38558769226074;0 +-77.31443786621094;26.34057235717773;0 +-77.31345367431641;25.08214950561523;0 +-77.31341552734375;26.68207740783691;0 +-77.31331634521484;26.68986892700195;0 +-77.31326293945312;25.07801628112793;0 +-77.31273651123047;26.3515739440918;0 +-77.31259918212891;25.00388145446777;0 +-77.31228637695312;26.38188552856445;0 +-77.3116455078125;26.06839752197266;0 +-77.31063842773438;26.70833969116211;0 +-77.30892181396484;25.08186340332031;0 +-77.30890655517578;25.97949409484863;0 +-77.3082275390625;26.37999534606934;0 +-77.30818939208984;26.59753036499023;0 +-77.30805969238281;26.39101982116699;0 +-77.30801391601562;25.07496643066406;0 +-77.30760955810547;26.66892051696777;0 +-77.30738830566406;26.70659255981445;0 +-77.30660247802734;26.33588027954102;0 +-77.30604553222656;25.07195854187012;0 +-77.30575561523438;26.69577789306641;0 +-77.30508422851562;26.38547134399414;0 +-77.30437469482422;26.70265007019043;0 +-77.30410766601562;26.66980171203613;0 +-77.30391693115234;26.74950218200684;0 +-77.30384826660156;25.0836353302002;0 +-77.30374145507812;26.66015243530273;0 +-77.30352020263672;26.3539867401123;0 +-77.30344390869141;25.98792266845703;0 +-77.30296325683594;25.98608016967773;0 +-77.30287170410156;26.37993049621582;0 +-77.30276489257812;26.69091606140137;0 +-77.30259704589844;26.75247192382812;0 +-77.30229187011719;26.58709144592285;0 +-77.30220031738281;25.07604217529297;0 +-77.3021240234375;26.07539749145508;0 +-77.30192565917969;26.74603271484375;0 +-77.3018798828125;26.69038391113281;0 +-77.30129241943359;26.66711235046387;0 +-77.30088043212891;25.98903846740723;0 +-77.30058288574219;26.49749565124512;0 +-77.30039215087891;25.01152801513672;0 +-77.29977416992188;26.75266647338867;0 +-77.29974365234375;26.64700508117676;0 +-77.29940032958984;26.59611701965332;0 +-77.29891967773438;26.50597190856934;0 +-77.29880523681641;26.40599060058594;0 +-77.29862213134766;26.39617729187012;0 +-77.29850006103516;26.64381790161133;0 +-77.29835510253906;26.39204597473145;0 +-77.29795837402344;26.40099906921387;0 +-77.29789733886719;26.38859558105469;0 +-77.29784393310547;26.3580493927002;0 +-77.29781341552734;25.0826416015625;0 +-77.29769134521484;26.58680534362793;0 +-77.29766082763672;26.37022018432617;0 +-77.29759979248047;26.744140625;0 +-77.29729461669922;26.51215362548828;0 +-77.29704284667969;26.66305160522461;0 +-77.29684448242188;26.64755249023438;0 +-77.29676818847656;26.07647895812988;0 +-77.29672241210938;26.6639461517334;0 +-77.29670715332031;26.3658447265625;0 +-77.29669952392578;26.3330020904541;0 +-77.29635620117188;26.39759635925293;0 +-77.29633331298828;26.39064407348633;0 +-77.29592895507812;26.4053840637207;0 +-77.29569244384766;26.38259696960449;0 +-77.29518890380859;26.4994945526123;0 +-77.29517364501953;26.66831207275391;0 +-77.29513549804688;26.0831184387207;0 +-77.29499053955078;26.40364074707031;0 +-77.2947998046875;26.39382553100586;0 +-77.29450988769531;25.08420562744141;0 +-77.29433441162109;26.74019432067871;0 +-77.29432678222656;26.08609390258789;0 +-77.29429626464844;25.98780822753906;0 +-77.29415130615234;25.9804573059082;0 +-77.29409027099609;25.98459243774414;0 +-77.29396057128906;26.41243171691895;0 +-77.29356384277344;25.01304817199707;0 +-77.29336547851562;26.3844051361084;0 +-77.29307556152344;26.4144172668457;0 +-77.29264068603516;26.3145751953125;0 +-77.29264068603516;26.41540145874023;0 +-77.29248046875;26.40919876098633;0 +-77.29240417480469;25.07362174987793;0 +-77.29224395751953;26.39351081848145;0 +-77.29193878173828;26.07572937011719;0 +-77.29192352294922;26.48846244812012;0 +-77.29178619384766;26.33730316162109;0 +-77.29139709472656;26.51345825195312;0 +-77.29137420654297;25.07498550415039;0 +-77.29100799560547;26.50541305541992;0 +-77.29097747802734;26.34004974365234;0 +-77.29077911376953;26.31960678100586;0 +-77.29056549072266;26.38391304016113;0 +-77.29051208496094;26.73899841308594;0 +-77.29042816162109;26.40936279296875;0 +-77.29042816162109;26.49346351623535;0 +-77.29024505615234;26.37150382995605;0 +-77.29018402099609;26.52607345581055;0 +-77.29012298583984;26.58050918579102;0 +-77.29010009765625;25.0924129486084;0 +-77.28997039794922;26.74105834960938;0 +-77.28981018066406;26.36644554138184;0 +-77.289794921875;26.64632225036621;0 +-77.28977203369141;26.67008209228516;0 +-77.28934478759766;26.48930168151855;0 +-77.28932952880859;26.38159942626953;0 +-77.28916931152344;26.35862922668457;0 +-77.28878021240234;26.08280944824219;0 +-77.28868103027344;26.34025001525879;0 +-77.28868103027344;26.52421760559082;0 +-77.28841400146484;25.05383491516113;0 +-77.28841400146484;26.09015274047852;0 +-77.28828430175781;26.63909149169922;0 +-77.28805541992188;25.01091384887695;0 +-77.28803253173828;26.33243370056152;0 +-77.28800201416016;26.51823806762695;0 +-77.28781127929688;25.97945976257324;0 +-77.28759765625;26.64254570007324;0 +-77.28755187988281;26.6817684173584;0 +-77.28739166259766;26.67533493041992;0 +-77.28719329833984;26.50467681884766;0 +-77.28706359863281;26.57978057861328;0 +-77.28693389892578;26.64398384094238;0 +-77.28677368164062;25.09581184387207;0 +-77.28670501708984;26.35262680053711;0 +-77.28668212890625;26.52143669128418;0 +-77.28656768798828;26.52855491638184;0 +-77.28651428222656;26.4139404296875;0 +-77.28617095947266;26.37076377868652;0 +-77.28599548339844;26.64224052429199;0 +-77.28587341308594;26.47388076782227;0 +-77.28577423095703;26.34687423706055;0 +-77.28562164306641;26.52371788024902;0 +-77.2855224609375;26.49661636352539;0 +-77.28538513183594;25.05363273620605;0 +-77.28533935546875;26.32527923583984;0 +-77.28517150878906;26.469970703125;0 +-77.28514862060547;26.33768081665039;0 +-77.28507232666016;26.30920028686523;0 +-77.28484344482422;26.50809288024902;0 +-77.28482818603516;26.52531814575195;0 +-77.28471374511719;26.53312873840332;0 +-77.28462982177734;26.41103363037109;0 +-77.28450012207031;26.36362266540527;0 +-77.28449249267578;26.51405906677246;0 +-77.28413391113281;25.05355072021484;0 +-77.28396606445312;26.63568496704102;0 +-77.28392791748047;26.3339900970459;0 +-77.28339385986328;26.419189453125;0 +-77.28334045410156;26.67252731323242;0 +-77.28322601318359;25.0966854095459;0 +-77.28321075439453;26.58088302612305;0 +-77.28305053710938;25.07533836364746;0 +-77.28277587890625;26.67619514465332;0 +-77.28273010253906;26.58142280578613;0 +-77.28261566162109;26.66976165771484;0 +-77.28251647949219;25.97663688659668;0 +-77.28206634521484;25.0737190246582;0 +-77.28176116943359;26.0934944152832;0 +-77.28170776367188;25.01381492614746;0 +-77.28150939941406;26.47520637512207;0 +-77.28139495849609;26.36634063720703;0 +-77.28126525878906;26.34153366088867;0 +-77.28122711181641;26.41066360473633;0 +-77.28077697753906;26.48989677429199;0 +-77.28074645996094;26.67502212524414;0 +-77.28028106689453;26.3722972869873;0 +-77.28004455566406;25.92218399047852;0 +-77.27989196777344;25.05051231384277;0 +-77.27965545654297;25.92095947265625;0 +-77.27960205078125;26.33347511291504;0 +-77.27954864501953;26.3702220916748;0 +-77.279541015625;25.97177696228027;0 +-77.27935791015625;26.63205337524414;0 +-77.27931213378906;25.91987800598145;0 +-77.27873992919922;26.50594902038574;0 +-77.27857208251953;25.93502235412598;0 +-77.27853393554688;26.58610534667969;0 +-77.27801513671875;25.96591949462891;0 +-77.27799224853516;26.47171592712402;0 +-77.27797698974609;26.522705078125;0 +-77.27792358398438;25.94466018676758;0 +-77.27771759033203;26.48962783813477;0 +-77.27767181396484;26.57575798034668;0 +-77.27760314941406;26.48044013977051;0 +-77.27759552001953;26.68026542663574;0 +-77.27755737304688;26.4666576385498;0 +-77.27748107910156;26.53831672668457;0 +-77.27705383300781;26.53279685974121;0 +-77.27692413330078;26.45815277099609;0 +-77.27665710449219;25.96071815490723;0 +-77.27654266357422;26.48272323608398;0 +-77.27634429931641;26.52888488769531;0 +-77.27626037597656;25.92029762268066;0 +-77.2762451171875;26.5802059173584;0 +-77.27599334716797;26.6678409576416;0 +-77.27584838867188;26.51165390014648;0 +-77.27571105957031;25.07707977294922;0 +-77.275634765625;26.49212837219238;0 +-77.27562713623047;25.92855644226074;0 +-77.27559661865234;26.4778881072998;0 +-77.27547454833984;25.93843078613281;0 +-77.27543640136719;26.52175331115723;0 +-77.27525329589844;26.58330726623535;0 +-77.27487945556641;25.94393348693848;0 +-77.27471160888672;26.53552627563477;0 +-77.27446746826172;26.51829719543457;0 +-77.27438354492188;26.45743179321289;0 +-77.27423095703125;26.50037956237793;0 +-77.27358245849609;26.39334487915039;0 +-77.27339935302734;26.57110977172852;0 +-77.27317047119141;25.09494972229004;0 +-77.27299499511719;26.43145942687988;0 +-77.27278137207031;26.36232757568359;0 +-77.27275848388672;25.94987487792969;0 +-77.27240753173828;26.38666725158691;0 +-77.27173614501953;26.44706153869629;0 +-77.271728515625;25.07336044311523;0 +-77.27171325683594;26.36575889587402;0 +-77.27169799804688;26.68133926391602;0 +-77.27147674560547;25.91748237609863;0 +-77.27124786376953;25.93217658996582;0 +-77.27068328857422;26.49872589111328;0 +-77.27049255371094;26.49413108825684;0 +-77.27039337158203;26.45095062255859;0 +-77.27036285400391;26.45324516296387;0 +-77.27024841308594;26.47690200805664;0 +-77.27024078369141;26.39490699768066;0 +-77.27022552490234;26.52834892272949;0 +-77.27017974853516;25.07609176635742;0 +-77.26992034912109;26.34942817687988;0 +-77.26990509033203;26.63147354125977;0 +-77.26969146728516;26.09955978393555;0 +-77.26963043212891;25.9329833984375;0 +-77.26958465576172;26.48676872253418;0 +-77.26951599121094;26.52443695068359;0 +-77.26910400390625;26.41877937316895;0 +-77.26890563964844;25.0935173034668;0 +-77.26879119873047;26.40591239929199;0 +-77.26873779296875;26.11217880249023;0 +-77.26864624023438;26.67992401123047;0 +-77.26844024658203;26.6273193359375;0 +-77.26826477050781;26.57242393493652;0 +-77.26825714111328;26.49042701721191;0 +-77.2679443359375;26.11400604248047;0 +-77.26781463623047;25.01639175415039;0 +-77.26773834228516;26.40796661376953;0 +-77.267578125;25.09786224365234;0 +-77.26737213134766;26.36593246459961;0 +-77.26716613769531;26.46193313598633;0 +-77.26709747314453;26.466064453125;0 +-77.26700592041016;26.52164649963379;0 +-77.26683044433594;26.43413734436035;0 +-77.26671600341797;26.47837448120117;0 +-77.26667022705078;25.01854705810547;0 +-77.26641082763672;26.49407958984375;0 +-77.26634979248047;26.44837188720703;0 +-77.26630401611328;25.93991851806641;0 +-77.26628875732422;26.53473091125488;0 +-77.26626586914062;26.45411109924316;0 +-77.26602935791016;26.20491981506348;0 +-77.26589202880859;26.11512565612793;0 +-77.26580047607422;26.38520431518555;0 +-77.26564788818359;25.91626167297363;0 +-77.26543426513672;26.49131011962891;0 +-77.265380859375;26.42860794067383;0 +-77.26522064208984;26.68653869628906;0 +-77.26508331298828;25.09576416015625;0 +-77.26503753662109;26.50003242492676;0 +-77.26488494873047;26.5760555267334;0 +-77.26484680175781;25.04549789428711;0 +-77.26480102539062;26.46603584289551;0 +-77.26467895507812;26.38064384460449;0 +-77.26446533203125;26.10868072509766;0 +-77.26424407958984;26.68331146240234;0 +-77.26413726806641;26.5255126953125;0 +-77.26407623291016;26.48383140563965;0 +-77.26398468017578;26.35394668579102;0 +-77.26387786865234;26.37737083435059;0 +-77.26385498046875;26.34567642211914;0 +-77.26383972167969;26.09948539733887;0 +-77.26372528076172;26.43662452697754;0 +-77.263671875;26.39069175720215;0 +-77.26358032226562;26.47314643859863;0 +-77.26349639892578;25.0677433013916;0 +-77.26344299316406;26.2078742980957;0 +-77.26261901855469;25.02619171142578;0 +-77.26255798339844;26.39664649963379;0 +-77.26248931884766;26.51653671264648;0 +-77.262451171875;26.46922492980957;0 +-77.26210021972656;26.44280242919922;0 +-77.26178741455078;26.47932052612305;0 +-77.26103973388672;26.49469947814941;0 +-77.260986328125;26.43222618103027;0 +-77.26095581054688;26.57814979553223;0 +-77.2608642578125;26.48379516601562;0 +-77.26072692871094;25.06747817993164;0 +-77.26067352294922;26.47426986694336;0 +-77.26061248779297;26.39064979553223;0 +-77.26027679443359;26.34632110595703;0 +-77.26011657714844;26.37295913696289;0 +-77.26003265380859;26.54410934448242;0 +-77.25998687744141;26.49675178527832;0 +-77.25991058349609;25.90975570678711;0 +-77.25983428955078;26.11160469055176;0 +-77.25981140136719;26.40924453735352;0 +-77.25977325439453;26.53948974609375;0 +-77.25968170166016;26.41773986816406;0 +-77.25954437255859;26.43401718139648;0 +-77.25922393798828;26.36490821838379;0 +-77.25917816162109;25.06975364685059;0 +-77.25917053222656;26.3848876953125;0 +-77.25908660888672;26.40647888183594;0 +-77.25907897949219;26.19358062744141;0 +-77.25874328613281;26.42852210998535;0 +-77.25871276855469;26.34859848022461;0 +-77.25859832763672;26.48550224304199;0 +-77.25857543945312;26.11067008972168;0 +-77.25856018066406;26.50638008117676;0 +-77.25838470458984;26.47741889953613;0 +-77.25837707519531;26.10745239257812;0 +-77.25822448730469;26.51119995117188;0 +-77.25785064697266;26.42024230957031;0 +-77.25768280029297;26.43633460998535;0 +-77.25766754150391;26.4886474609375;0 +-77.2574462890625;26.54552459716797;0 +-77.25736236572266;26.48454284667969;0 +-77.25698852539062;26.11501312255859;0 +-77.25619506835938;26.39541625976562;0 +-77.25596618652344;26.54148864746094;0 +-77.25595092773438;26.47671890258789;0 +-77.25588989257812;26.51369476318359;0 +-77.25585174560547;26.54464149475098;0 +-77.25557708740234;26.3859920501709;0 +-77.25550079345703;26.47280883789062;0 +-77.25544738769531;26.52731895446777;0 +-77.25491333007812;25.03573226928711;0 +-77.25485229492188;26.49852561950684;0 +-77.25483703613281;26.41744804382324;0 +-77.25472259521484;25.03159713745117;0 +-77.25466156005859;26.44534111022949;0 +-77.25450897216797;26.20867919921875;0 +-77.25437164306641;26.41422653198242;0 +-77.2542724609375;26.53526496887207;0 +-77.25410461425781;26.31684303283691;0 +-77.25399017333984;26.3898754119873;0 +-77.25396728515625;26.62047576904297;0 +-77.25387573242188;26.42983818054199;0 +-77.25382232666016;26.40043830871582;0 +-77.25380706787109;26.46704483032227;0 +-77.25369262695312;25.03342056274414;0 +-77.25361633300781;26.44659996032715;0 +-77.25342559814453;26.44157409667969;0 +-77.25337219238281;26.36368560791016;0 +-77.25316619873047;26.19717979431152;0 +-77.25311279296875;25.90576553344727;0 +-77.25298309326172;26.47093772888184;0 +-77.25245666503906;26.48792839050293;0 +-77.25217437744141;26.19509696960449;0 +-77.25216674804688;26.34323120117188;0 +-77.25189971923828;26.35999488830566;0 +-77.25186920166016;26.39489936828613;0 +-77.25182342529297;26.51226615905762;0 +-77.25119018554688;26.44097328186035;0 +-77.25099945068359;26.31978988647461;0 +-77.25059509277344;26.52934074401855;0 +-77.25043487548828;26.51889419555664;0 +-77.25023651123047;26.48330307006836;0 +-77.25014495849609;26.51658058166504;0 +-77.25008392333984;26.31311798095703;0 +-77.24948120117188;26.33538627624512;0 +-77.24929046630859;26.11881828308105;0 +-77.24906158447266;26.41117286682129;0 +-77.24890899658203;26.5845775604248;0 +-77.24858093261719;26.36040878295898;0 +-77.24857330322266;26.21365547180176;0 +-77.24850463867188;26.5937614440918;0 +-77.24847412109375;26.52089309692383;0 +-77.24833679199219;26.71870994567871;0 +-77.24748992919922;26.51175117492676;0 +-77.24735260009766;26.35717582702637;0 +-77.24733734130859;26.42355537414551;0 +-77.24700927734375;26.72055816650391;0 +-77.24700164794922;26.42883110046387;0 +-77.24697875976562;26.72053146362305;0 +-77.24691009521484;26.51827621459961;0 +-77.24685668945312;26.50301551818848;0 +-77.24650573730469;26.54205513000488;0 +-77.24623107910156;26.3475170135498;0 +-77.24604797363281;26.21224403381348;0 +-77.24568176269531;26.43133926391602;0 +-77.24557495117188;26.34061813354492;0 +-77.24557495117188;26.3895378112793;0 +-77.24538421630859;26.44321823120117;0 +-77.24537658691406;26.4184741973877;0 +-77.24534606933594;26.61577033996582;0 +-77.24515533447266;26.57826232910156;0 +-77.24494171142578;26.33188247680664;0 +-77.24491882324219;26.57786560058594;0 +-77.24477386474609;26.58704948425293;0 +-77.2447509765625;26.31167221069336;0 +-77.24468231201172;26.36495208740234;0 +-77.24463653564453;26.57826614379883;0 +-77.24433135986328;26.50160217285156;0 +-77.24421691894531;26.72049522399902;0 +-77.24388122558594;26.41318511962891;0 +-77.24372863769531;26.50733757019043;0 +-77.24359130859375;26.48344993591309;0 +-77.24356079101562;26.33898735046387;0 +-77.24337005615234;25.89530563354492;0 +-77.24329376220703;26.35574531555176;0 +-77.24325561523438;26.39065742492676;0 +-77.24301910400391;26.50365447998047;0 +-77.24294281005859;26.42717170715332;0 +-77.242919921875;26.47747039794922;0 +-77.24282836914062;26.20646095275879;0 +-77.24280548095703;26.5361270904541;0 +-77.24279022216797;26.4533519744873;0 +-77.24275970458984;26.12929916381836;0 +-77.24275970458984;26.53958892822266;0 +-77.24266052246094;26.39616203308105;0 +-77.24261474609375;26.4315299987793;0 +-77.24232482910156;26.40970420837402;0 +-77.24205017089844;26.41912078857422;0 +-77.24204254150391;26.58196258544922;0 +-77.24181365966797;26.59666061401367;0 +-77.24169921875;26.21379661560059;0 +-77.24143981933594;26.52292633056641;0 +-77.24094390869141;26.41690444946289;0 +-77.24059295654297;26.53408241271973;0 +-77.24048614501953;26.40486145019531;0 +-77.24047088623047;26.58863258361816;0 +-77.24031829833984;26.61065101623535;0 +-77.24024963378906;26.51716995239258;0 +-77.23975372314453;26.40255165100098;0 +-77.23960876464844;26.39566230773926;0 +-77.23929595947266;26.44286155700684;0 +-77.23922729492188;26.33869743347168;0 +-77.23898315429688;26.71146583557129;0 +-77.23884582519531;26.57900238037109;0 +-77.23865509033203;26.44020652770996;0 +-77.23853302001953;26.4517993927002;0 +-77.238525390625;26.35086250305176;0 +-77.23849487304688;26.32054710388184;0 +-77.23806762695312;26.59109878540039;0 +-77.23799896240234;26.41700172424316;0 +-77.23787689208984;26.47350120544434;0 +-77.23780059814453;26.47809219360352;0 +-77.23757171630859;26.49739265441895;0 +-77.237548828125;26.46178245544434;0 +-77.23721313476562;26.15839004516602;0 +-77.23703765869141;26.48959350585938;0 +-77.23700714111328;26.57730484008789;0 +-77.23697662353516;26.38437461853027;0 +-77.23652648925781;26.34808158874512;0 +-77.23648834228516;26.18869590759277;0 +-77.23648071289062;26.58718490600586;0 +-77.23635864257812;26.34279632568359;0 +-77.23628997802734;26.45148658752441;0 +-77.23625183105469;25.87936973571777;0 +-77.23623657226562;26.33406829833984;0 +-77.23609161376953;26.16503715515137;0 +-77.2359619140625;26.4976634979248;0 +-77.23583984375;26.52170372009277;0 +-77.23574829101562;26.15469741821289;0 +-77.23563385009766;26.46956634521484;0 +-77.23548889160156;26.71014785766602;0 +-77.23542022705078;26.19143676757812;0 +-77.23531341552734;26.3836498260498;0 +-77.23526000976562;26.20199966430664;0 +-77.23523712158203;26.41374969482422;0 +-77.23503112792969;26.4953441619873;0 +-77.23484802246094;26.43877983093262;0 +-77.23477172851562;26.53719329833984;0 +-77.23469543457031;26.61034965515137;0 +-77.23468780517578;26.40019226074219;0 +-77.23433685302734;26.43068313598633;0 +-77.23407745361328;26.35737228393555;0 +-77.23406219482422;26.34253692626953;0 +-77.23371887207031;26.31612014770508;0 +-77.23346710205078;26.47780609130859;0 +-77.23330688476562;26.4352912902832;0 +-77.23330688476562;26.52678489685059;0 +-77.23322296142578;26.53284454345703;0 +-77.23299407958984;26.36602020263672;0 +-77.23292541503906;26.57679176330566;0 +-77.23281860351562;26.55129623413086;0 +-77.23276519775391;25.08203125;0 +-77.23241424560547;26.36196899414062;0 +-77.23241424560547;26.43066215515137;0 +-77.23207855224609;26.32299041748047;0 +-77.23204803466797;26.58367156982422;0 +-77.23179626464844;26.30851745605469;0 +-77.23159790039062;26.54760360717773;0 +-77.23157501220703;26.57998466491699;0 +-77.23155975341797;26.12938117980957;0 +-77.23152923583984;26.42265892028809;0 +-77.23152923583984;26.71343994140625;0 +-77.23136901855469;26.5783805847168;0 +-77.23097229003906;26.31218147277832;0 +-77.23085784912109;26.48144721984863;0 +-77.23084259033203;26.38521385192871;0 +-77.23065948486328;26.17070579528809;0 +-77.23059844970703;26.53714561462402;0 +-77.2303466796875;26.43297958374023;0 +-77.22945404052734;26.43582344055176;0 +-77.22937774658203;26.31629371643066;0 +-77.22917938232422;26.4906120300293;0 +-77.22916412353516;25.0868034362793;0 +-77.22915649414062;26.20146179199219;0 +-77.22840881347656;26.37783241271973;0 +-77.22812652587891;26.23428726196289;0 +-77.22799682617188;26.40400886535645;0 +-77.22788238525391;26.6047477722168;0 +-77.22785949707031;26.18674659729004;0 +-77.22785949707031;26.49335098266602;0 +-77.22764587402344;26.5872917175293;0 +-77.22761535644531;26.2988166809082;0 +-77.22758483886719;26.42972755432129;0 +-77.22751617431641;26.52787399291992;0 +-77.2274169921875;26.42444229125977;0 +-77.22739410400391;26.4421272277832;0 +-77.22692108154297;26.1975269317627;0 +-77.22684478759766;26.55742073059082;0 +-77.22682189941406;26.31437110900879;0 +-77.22681427001953;26.15618896484375;0 +-77.22679138183594;26.3509407043457;0 +-77.22674560546875;26.30546569824219;0 +-77.22650909423828;26.53103828430176;0 +-77.22623443603516;26.43636512756348;0 +-77.22621154785156;26.54868316650391;0 +-77.22605133056641;26.47817039489746;0 +-77.22599029541016;26.46622467041016;0 +-77.22575378417969;25.07895660400391;0 +-77.22563934326172;26.52467727661133;0 +-77.22554779052734;26.3003978729248;0 +-77.22531890869141;26.44416809082031;0 +-77.22512817382812;26.43980026245117;0 +-77.22496032714844;26.49905586242676;0 +-77.22490692138672;26.3136100769043;0 +-77.22482299804688;26.50755310058594;0 +-77.22480773925781;26.60493850708008;0 +-77.22458648681641;26.47424697875977;0 +-77.22451782226562;26.39799118041992;0 +-77.2244873046875;26.70599746704102;0 +-77.22444915771484;26.40212631225586;0 +-77.22442626953125;26.41958045959473;0 +-77.22435760498047;26.48848342895508;0 +-77.22416687011719;26.54865646362305;0 +-77.22401428222656;26.49422073364258;0 +-77.22393798828125;26.70828628540039;0 +-77.22390747070312;26.50087928771973;0 +-77.22338104248047;26.4854850769043;0 +-77.22338104248047;26.51763725280762;0 +-77.22320556640625;26.17474365234375;0 +-77.22320556640625;26.46435165405273;0 +-77.22319793701172;26.58110809326172;0 +-77.22309875488281;26.31023979187012;0 +-77.22298431396484;26.51074600219727;0 +-77.22287750244141;26.46894073486328;0 +-77.22263336181641;26.53301429748535;0 +-77.22255706787109;26.37683486938477;0 +-77.22220611572266;26.5435791015625;0 +-77.22219085693359;26.35133934020996;0 +-77.22203826904297;26.40944480895996;0 +-77.22199249267578;26.4604320526123;0 +-77.22198486328125;26.4289665222168;0 +-77.22195434570312;26.31694221496582;0 +-77.22193145751953;26.30356597900391;0 +-77.22186279296875;26.4526195526123;0 +-77.2218017578125;26.31160163879395;0 +-77.22179412841797;26.52405738830566;0 +-77.22175598144531;26.33066368103027;0 +-77.22171783447266;26.55827140808105;0 +-77.22103881835938;26.3437442779541;0 +-77.22090148925781;26.3685474395752;0 +-77.2208251953125;26.4055233001709;0 +-77.220703125;26.23648834228516;0 +-77.22064208984375;26.57755088806152;0 +-77.22047424316406;26.28310585021973;0 +-77.22045135498047;26.41436576843262;0 +-77.22023773193359;26.3618335723877;0 +-77.22012329101562;26.3531494140625;0 +-77.21971893310547;26.52333450317383;0 +-77.21969604492188;26.44455337524414;0 +-77.21958923339844;26.24221420288086;0 +-77.21953582763672;26.41146850585938;0 +-77.21949005126953;26.60211372375488;0 +-77.219482421875;26.5543384552002;0 +-77.21939086914062;26.47969055175781;0 +-77.21938323974609;26.14300155639648;0 +-77.21933746337891;26.29043960571289;0 +-77.21931457519531;26.46820449829102;0 +-77.21926116943359;26.48772811889648;0 +-77.21919250488281;26.5008487701416;0 +-77.21878814697266;26.42111396789551;0 +-77.21854400634766;26.45280838012695;0 +-77.21829986572266;26.48381042480469;0 +-77.21793365478516;26.34646034240723;0 +-77.21790313720703;26.54122543334961;0 +-77.21762847900391;26.26951789855957;0 +-77.21746826171875;26.13539695739746;0 +-77.21738433837891;26.38090324401855;0 +-77.21733856201172;26.46427536010742;0 +-77.21720123291016;26.28030586242676;0 +-77.21714019775391;25.85110473632812;0 +-77.21701049804688;26.40478515625;0 +-77.21698760986328;26.43808746337891;0 +-77.21693420410156;26.52688980102539;0 +-77.21686553955078;26.53208351135254;0 +-77.21685028076172;26.4144287109375;0 +-77.21675872802734;26.38847160339355;0 +-77.21675109863281;26.54901695251465;0 +-77.21669006347656;25.07774925231934;0 +-77.21663665771484;26.36501693725586;0 +-77.21635437011719;26.49411964416504;0 +-77.21633148193359;26.25178146362305;0 +-77.21631622314453;26.33587646484375;0 +-77.21621704101562;26.45461082458496;0 +-77.21620941162109;26.50284576416016;0 +-77.21619415283203;25.07768249511719;0 +-77.21591949462891;26.29659652709961;0 +-77.21588897705078;26.31496620178223;0 +-77.21577453613281;26.27408790588379;0 +-77.21565246582031;26.37766456604004;0 +-77.21550750732422;26.32254600524902;0 +-77.21546173095703;26.29360580444336;0 +-77.21543884277344;26.24675369262695;0 +-77.21541595458984;26.26443672180176;0 +-77.21503448486328;26.43277931213379;0 +-77.21463012695312;26.13765525817871;0 +-77.21446228027344;25.84943962097168;0 +-77.21442413330078;26.5308837890625;0 +-77.21422576904297;26.51522254943848;0 +-77.21415710449219;26.31150054931641;0 +-77.21413421630859;26.15280723571777;0 +-77.214111328125;26.60273170471191;0 +-77.21399688720703;26.54576683044434;0 +-77.21365356445312;26.55484962463379;0 +-77.21347808837891;26.35334777832031;0 +-77.21334838867188;26.52210235595703;0 +-77.21323394775391;26.14544486999512;0 +-77.21303558349609;26.41391944885254;0 +-77.21302032470703;26.35053062438965;0 +-77.21300506591797;26.2878303527832;0 +-77.212890625;26.40679740905762;0 +-77.21263122558594;26.42322540283203;0 +-77.21247863769531;26.41690063476562;0 +-77.21247100830078;26.43297576904297;0 +-77.21213531494141;26.2625560760498;0 +-77.21186065673828;25.84782028198242;0 +-77.21181488037109;26.3941535949707;0 +-77.21180725097656;26.50669288635254;0 +-77.21160888671875;26.56290817260742;0 +-77.21160125732422;26.31192779541016;0 +-77.21120452880859;26.52873420715332;0 +-77.21100616455078;26.560302734375;0 +-77.21073150634766;26.14265823364258;0 +-77.21071624755859;26.53576469421387;0 +-77.21051025390625;26.49197578430176;0 +-77.21041107177734;26.32270622253418;0 +-77.21016693115234;26.55163383483887;0 +-77.21013641357422;26.49954986572266;0 +-77.21012878417969;26.41886329650879;0 +-77.21000671386719;26.25173377990723;0 +-77.20944213867188;26.49494743347168;0 +-77.20937347412109;26.43546104431152;0 +-77.20903778076172;26.26458358764648;0 +-77.20895385742188;26.31786346435547;0 +-77.20859527587891;26.4841423034668;0 +-77.20795440673828;26.15685844421387;0 +-77.20786285400391;26.57784080505371;0 +-77.20783233642578;26.51582717895508;0 +-77.20755004882812;26.42165565490723;0 +-77.20754241943359;25.08261489868164;0 +-77.20751190185547;26.59942817687988;0 +-77.20722198486328;26.52202224731445;0 +-77.20721435546875;26.53341674804688;0 +-77.20676422119141;26.27971076965332;0 +-77.20648193359375;26.44047546386719;0 +-77.20587921142578;26.25512504577637;0 +-77.20565032958984;26.14213371276855;0 +-77.20560455322266;26.27234649658203;0 +-77.20552825927734;26.49995231628418;0 +-77.2054443359375;26.50545883178711;0 +-77.20508575439453;26.35272216796875;0 +-77.20507049560547;26.49695777893066;0 +-77.20500946044922;26.48478317260742;0 +-77.20406341552734;26.51187324523926;0 +-77.20401000976562;26.55560493469238;0 +-77.20396423339844;25.84932327270508;0 +-77.20391845703125;26.42551231384277;0 +-77.20386505126953;26.42849731445312;0 +-77.20384979248047;26.54434776306152;0 +-77.2032470703125;26.14468193054199;0 +-77.20311737060547;26.49118995666504;0 +-77.20273590087891;26.14898300170898;0 +-77.20246887207031;26.26105117797852;0 +-77.20212554931641;26.44179534912109;0 +-77.20208740234375;26.53278160095215;0 +-77.20201873779297;26.1459846496582;0 +-77.20197296142578;26.41951370239258;0 +-77.20195770263672;26.34900665283203;0 +-77.20191955566406;26.58190155029297;0 +-77.20146179199219;25.0846004486084;0 +-77.20066070556641;26.15147972106934;0 +-77.20029449462891;26.54574966430664;0 +-77.19981384277344;26.53448677062988;0 +-77.19966888427734;26.43556213378906;0 +-77.1990966796875;26.53996276855469;0 +-77.19880676269531;26.5601634979248;0 +-77.19816589355469;26.43393516540527;0 +-77.19715118408203;26.49685478210449;0 +-77.19682312011719;26.56389427185059;0 +-77.19676208496094;26.48949813842773;0 +-77.19672393798828;26.50741195678711;0 +-77.19656372070312;26.58091163635254;0 +-77.19544982910156;26.49154853820801;0 +-77.19538116455078;26.44836807250977;0 +-77.19508361816406;26.03887939453125;0 +-77.19474029541016;25.85471153259277;0 +-77.19461822509766;26.53875732421875;0 +-77.19453430175781;26.42171287536621;0 +-77.1944580078125;26.04325485229492;0 +-77.19415283203125;26.42951774597168;0 +-77.19389343261719;25.08449935913086;0 +-77.193603515625;26.46373176574707;0 +-77.19320678710938;26.5990104675293;0 +-77.19308471679688;26.0528621673584;0 +-77.19261169433594;26.56644248962402;0 +-77.19191741943359;26.45727920532227;0 +-77.1917724609375;26.02367973327637;0 +-77.19150543212891;26.57739448547363;0 +-77.19062042236328;26.42671394348145;0 +-77.19046783447266;26.53726577758789;0 +-77.19042205810547;25.08100891113281;0 +-77.19022369384766;26.55429267883301;0 +-77.18970489501953;26.46781349182129;0 +-77.18938446044922;26.01400375366211;0 +-77.1890869140625;26.56611442565918;0 +-77.18869018554688;26.54936599731445;0 +-77.18855285644531;26.60216331481934;0 +-77.18790435791016;25.99515342712402;0 +-77.18775939941406;26.01995277404785;0 +-77.18766784667969;25.9783878326416;0 +-77.18707275390625;25.97569465637207;0 +-77.18705749511719;26.00458526611328;0 +-77.18699645996094;26.00432586669922;0 +-77.18679809570312;26.50521278381348;0 +-77.18625640869141;25.98732376098633;0 +-77.18568420410156;26.55741500854492;0 +-77.18488311767578;26.5761604309082;0 +-77.1846923828125;25.86353302001953;0 +-77.1842041015625;25.87799263000488;0 +-77.18410491943359;26.53315162658691;0 +-77.18317413330078;26.53111839294434;0 +-77.18292236328125;26.4922981262207;0 +-77.18267822265625;25.95577430725098;0 +-77.18219757080078;26.50561141967773;0 +-77.18206787109375;26.57658195495605;0 +-77.18204498291016;25.87038421630859;0 +-77.1820068359375;26.07705497741699;0 +-77.18113708496094;26.57059860229492;0 +-77.18093872070312;26.56715202331543;0 +-77.18027496337891;26.13674163818359;0 +-77.18020629882812;26.58073234558105;0 +-77.18002319335938;26.49777412414551;0 +-77.17958068847656;26.60365295410156;0 +-77.17938232421875;25.94084739685059;0 +-77.17916107177734;26.14269638061523;0 +-77.17904663085938;26.51062202453613;0 +-77.17896270751953;26.58112144470215;0 +-77.17890167236328;25.93235206604004;0 +-77.17858123779297;26.52910614013672;0 +-77.17839050292969;25.92337799072266;0 +-77.17824554443359;26.12063598632812;0 +-77.17729187011719;26.53826904296875;0 +-77.17722320556641;26.52851295471191;0 +-77.17720794677734;26.57674789428711;0 +-77.17716979980469;26.56319427490234;0 +-77.17713928222656;26.09023284912109;0 +-77.17695617675781;26.18423461914062;0 +-77.17648315429688;24.03655433654785;0 +-77.17620086669922;25.08724403381348;0 +-77.17603302001953;24.03310775756836;0 +-77.17603302001953;26.14724731445312;0 +-77.17575836181641;26.19547080993652;0 +-77.17510223388672;26.5020694732666;0 +-77.17392730712891;26.57988166809082;0 +-77.17356872558594;26.20462799072266;0 +-77.17324066162109;26.16213798522949;0 +-77.17322540283203;26.10082054138184;0 +-77.17311096191406;26.58295822143555;0 +-77.17282104492188;26.58093452453613;0 +-77.17269134521484;24.03902435302734;0 +-77.17144775390625;26.50707817077637;0 +-77.17140197753906;26.19701957702637;0 +-77.17132568359375;26.60813522338867;0 +-77.17005920410156;26.52956581115723;0 +-77.16994476318359;26.59892845153809;0 +-77.16957092285156;26.69975852966309;0 +-77.16939544677734;26.14853668212891;0 +-77.16926574707031;26.7025089263916;0 +-77.16896820068359;26.50221824645996;0 +-77.16872406005859;26.15817260742188;0 +-77.16865539550781;26.51421165466309;0 +-77.16756439208984;26.60349082946777;0 +-77.16756439208984;26.69743537902832;0 +-77.16742706298828;26.53412437438965;0 +-77.16687774658203;26.52056503295898;0 +-77.16675567626953;26.51216888427734;0 +-77.16673278808594;26.56075859069824;0 +-77.16612243652344;26.59795951843262;0 +-77.16595458984375;26.51745223999023;0 +-77.16366577148438;24.04096412658691;0 +-77.16333770751953;26.53429794311523;0 +-77.16165161132812;24.0264892578125;0 +-77.16160583496094;26.53059959411621;0 +-77.16044616699219;24.03931427001953;0 +-77.16044616699219;26.22856521606445;0 +-77.15964508056641;24.02715110778809;0 +-77.15807342529297;24.03148460388184;0 +-77.15639495849609;26.5211124420166;0 +-77.15583038330078;25.09912872314453;0 +-77.15577697753906;26.58978271484375;0 +-77.15555572509766;26.23125457763672;0 +-77.15506744384766;26.69496917724609;0 +-77.15457153320312;26.70920372009277;0 +-77.15433502197266;26.24341011047363;0 +-77.15383148193359;26.50637817382812;0 +-77.15280151367188;26.52244186401367;0 +-77.15228271484375;26.6928653717041;0 +-77.15119934082031;25.10480308532715;0 +-77.15119934082031;26.51093673706055;0 +-77.15110015869141;26.50174713134766;0 +-77.14991760253906;26.68134498596191;0 +-77.14894866943359;26.69350814819336;0 +-77.14809417724609;26.51342010498047;0 +-77.14800262451172;26.51916313171387;0 +-77.14579010009766;26.56024551391602;0 +-77.14488220214844;26.56850051879883;0 +-77.14456939697266;26.50784873962402;0 +-77.14426422119141;26.68264961242676;0 +-77.14394378662109;26.56366348266602;0 +-77.14383697509766;26.5085391998291;0 +-77.14309692382812;26.5836353302002;0 +-77.14296722412109;26.50891304016113;0 +-77.1422119140625;26.5137996673584;0 +-77.14214324951172;25.10353088378906;0 +-77.14209747314453;25.10628700256348;0 +-77.14205169677734;26.56961059570312;0 +-77.14160919189453;26.58160972595215;0 +-77.14134979248047;26.51952934265137;0 +-77.14096069335938;26.68122482299805;0 +-77.14085388183594;26.68765640258789;0 +-77.14063262939453;26.51676368713379;0 +-77.13935089111328;26.57853317260742;0 +-77.13787078857422;26.57808876037598;0 +-77.13662719726562;26.51165580749512;0 +-77.13633728027344;26.68254280090332;0 +-77.13603973388672;26.56240844726562;0 +-77.13535308837891;26.68180084228516;0 +-77.13471984863281;26.68733978271484;0 +-77.13451385498047;26.57708740234375;0 +-77.13401794433594;26.51529502868652;0 +-77.13338470458984;26.52240753173828;0 +-77.13270568847656;26.57843971252441;0 +-77.13246154785156;26.68501472473145;0 +-77.13234710693359;26.26309013366699;0 +-77.12870788574219;26.52716636657715;0 +-77.12684631347656;26.54689407348633;0 +-77.12660217285156;26.68309783935547;0 +-77.12395477294922;26.67318534851074;0 +-77.1217041015625;26.5792064666748;0 +-77.12142181396484;25.1125602722168;0 +-77.11924743652344;26.57297325134277;0 +-77.11891937255859;26.57756233215332;0 +-77.11847686767578;26.67049217224121;0 +-77.11768341064453;26.67571640014648;0 +-77.11695861816406;26.66366958618164;0 +-77.11622619628906;26.28238868713379;0 +-77.11482238769531;26.66869354248047;0 +-77.11474609375;26.67328643798828;0 +-77.11416625976562;26.66225433349609;0 +-77.11383819580078;26.66661262512207;0 +-77.11174774169922;25.10902404785156;0 +-77.10927581787109;26.66402244567871;0 +-77.10898590087891;26.28848838806152;0 +-77.10664367675781;26.56269073486328;0 +-77.10600280761719;26.6607608795166;0 +-77.10382080078125;26.66876983642578;0 +-77.10189819335938;26.66139221191406;0 +-77.10063171386719;25.11887168884277;0 +-77.09842681884766;26.65881538391113;0 +-77.09684753417969;26.65764808654785;0 +-77.09642791748047;26.29244804382324;0 +-77.09576416015625;26.66553497314453;0 +-77.09315490722656;26.66448593139648;0 +-77.09201049804688;26.29720687866211;0 +-77.09119415283203;25.12112998962402;0 +-77.08975219726562;26.29487991333008;0 +-77.08879089355469;26.66511535644531;0 +-77.08808135986328;25.12014007568359;0 +-77.08684539794922;26.65934562683105;0 +-77.08668518066406;26.65382957458496;0 +-77.08623504638672;26.29169273376465;0 +-77.08588409423828;26.5511474609375;0 +-77.08496856689453;26.29159736633301;0 +-77.08467102050781;26.29411888122559;0 +-77.08386993408203;26.30131912231445;0 +-77.08367919921875;26.29226875305176;0 +-77.0828857421875;26.27916526794434;0 +-77.08232116699219;26.65468788146973;0 +-77.08095550537109;26.30279350280762;0 +-77.08079528808594;26.28212356567383;0 +-77.08042144775391;26.27407836914062;0 +-77.07978820800781;26.65327453613281;0 +-77.07685089111328;26.64542198181152;0 +-77.07636260986328;26.27287292480469;0 +-77.07317352294922;26.65111351013184;0 +-77.07304382324219;26.27351570129395;0 +-77.07243347167969;26.27947807312012;0 +-77.07121276855469;26.2762451171875;0 +-77.06848907470703;26.28631210327148;0 +-77.06846618652344;26.3023853302002;0 +-77.06707763671875;26.63925361633301;0 +-77.06629943847656;26.54604721069336;0 +-77.065673828125;26.55269813537598;0 +-77.06507873535156;26.64291763305664;0 +-77.06344604492188;26.636962890625;0 +-77.06309509277344;26.28853034973145;0 +-77.06275177001953;26.55885887145996;0 +-77.06264495849609;26.55035781860352;0 +-77.06118011474609;26.44330406188965;0 +-77.05960083007812;26.63736724853516;0 +-77.05851745605469;26.28800582885742;0 +-77.05707550048828;26.47379302978516;0 +-77.05628967285156;26.47443389892578;0 +-77.05597686767578;26.44897270202637;0 +-77.05553436279297;26.41589164733887;0 +-77.05539703369141;26.55681610107422;0 +-77.05536651611328;26.27854537963867;0 +-77.05457305908203;26.52957153320312;0 +-77.05455780029297;26.27708053588867;0 +-77.05443572998047;26.55230903625488;0 +-77.05352020263672;26.51692199707031;0 +-77.05321502685547;26.54907417297363;0 +-77.05290985107422;26.44915771484375;0 +-77.05266571044922;26.43376731872559;0 +-77.05266571044922;26.53666496276855;0 +-77.05211639404297;26.28952217102051;0 +-77.05191802978516;26.52103424072266;0 +-77.05183410644531;26.51092720031738;0 +-77.05138397216797;26.55157661437988;0 +-77.05116271972656;26.27090454101562;0 +-77.05069732666016;26.42276573181152;0 +-77.05054473876953;26.55546760559082;0 +-77.05012512207031;26.28696823120117;0 +-77.04987335205078;26.40386772155762;0 +-77.04985809326172;26.43395614624023;0 +-77.0494384765625;26.42754173278809;0 +-77.04930877685547;26.4801139831543;0 +-77.04869842529297;26.31037330627441;0 +-77.04808807373047;26.27223968505859;0 +-77.04792785644531;26.41102409362793;0 +-77.04766082763672;26.54532051086426;0 +-77.04751586914062;26.43667602539062;0 +-77.04739379882812;26.29726409912109;0 +-77.04705810546875;26.42857551574707;0 +-77.04657745361328;26.49018096923828;0 +-77.04649353027344;26.2758903503418;0 +-77.04613494873047;26.50096893310547;0 +-77.04549407958984;26.41524887084961;0 +-77.04512786865234;26.31009292602539;0 +-77.04415893554688;26.42534637451172;0 +-77.04379272460938;26.29927825927734;0 +-77.04329681396484;26.54617691040039;0 +-77.04240417480469;26.27652168273926;0 +-77.0421142578125;26.40456390380859;0 +-77.04173278808594;26.42904090881348;0 +-77.04167938232422;26.30315208435059;0 +-77.04122924804688;26.48918533325195;0 +-77.04046630859375;26.34332656860352;0 +-77.04035949707031;26.29142189025879;0 +-77.04019165039062;26.41412162780762;0 +-77.03852081298828;26.35271644592285;0 +-77.0380859375;26.3975944519043;0 +-77.03797912597656;26.40451049804688;0 +-77.03759002685547;26.39129066467285;0 +-77.03728485107422;26.3359317779541;0 +-77.03728485107422;26.49578857421875;0 +-77.03692626953125;26.38553619384766;0 +-77.03676605224609;26.39449119567871;0 +-77.03598022460938;26.41885566711426;0 +-77.03561401367188;26.38735580444336;0 +-77.03273773193359;26.39965438842773;0 +-77.03246307373047;26.39259147644043;0 +-77.03241729736328;26.55474853515625;0 +-77.03170776367188;26.36272430419922;0 +-77.03153228759766;26.28577995300293;0 +-77.03150939941406;26.40230178833008;0 +-77.03067779541016;26.33445739746094;0 +-77.02888488769531;26.29148483276367;0 +-77.02860260009766;26.36520385742188;0 +-77.02729034423828;26.3819522857666;0 +-77.02700805664062;26.32544708251953;0 +-77.02623748779297;26.29718780517578;0 +-77.02609252929688;26.38077926635742;0 +-77.02400207519531;26.36605644226074;0 +-77.02367401123047;26.29783821105957;0 +-77.02227783203125;26.37705612182617;0 +-77.02133941650391;26.61459159851074;0 +-77.020751953125;26.36210441589355;0 +-77.01956939697266;26.32786560058594;0 +-77.01937103271484;26.32487678527832;0 +-77.01894378662109;26.32027816772461;0 +-77.01809692382812;26.6165714263916;0 +-77.01693725585938;26.37605857849121;0 +-77.01692199707031;26.36250877380371;0 +-77.01679992675781;26.29727935791016;0 +-77.01665496826172;26.29107666015625;0 +-77.01588439941406;26.32000350952148;0 +-77.01480865478516;26.32343292236328;0 +-77.01445007324219;26.3576488494873;0 +-77.01381683349609;26.32158088684082;0 +-77.01345062255859;26.32777786254883;0 +-77.01178741455078;26.29238319396973;0 +-77.00959777832031;26.3580379486084;0 +-77.00922393798828;26.3791618347168;0 +-77.00920104980469;26.59552574157715;0 +-77.00575256347656;26.33065032958984;0 +-77.00554656982422;26.35636711120605;0 +-77.00530242919922;26.3843879699707;0 +-77.00470733642578;26.30330276489258;0 +-77.00467681884766;26.59132385253906;0 +-77.00351715087891;26.59865760803223;0 +-77.00186920166016;26.33380889892578;0 +-77.00163269042969;26.50399780273438;0 +-77.00146484375;26.38525009155273;0 +-76.99961853027344;26.33147811889648;0 +-76.99803161621094;26.36314964294434;0 +-76.9979248046875;26.38313102722168;0 +-76.99755859375;26.4890079498291;0 +-76.99729919433594;26.58914947509766;0 +-76.99643707275391;26.59464836120605;0 +-76.99622344970703;26.47819328308105;0 +-76.99618530273438;26.48048973083496;0 +-76.99605560302734;26.33096694946289;0 +-76.99447631835938;26.49034309387207;0 +-76.99418640136719;26.59185981750488;0 +-76.992431640625;26.47583961486816;0 +-76.99202728271484;26.5125846862793;0 +-76.99111938476562;26.50636863708496;0 +-76.98923492431641;26.45164108276367;0 +-76.98876953125;26.48106956481934;0 +-76.98843383789062;26.51390838623047;0 +-76.98838806152344;26.44523239135742;0 +-76.98768615722656;26.51251792907715;0 +-76.98674774169922;26.49367332458496;0 +-76.98549652099609;26.46402359008789;0 +-76.98487854003906;26.35675621032715;0 +-76.98397064208984;26.3787899017334;0 +-76.98345184326172;26.43574333190918;0 +-76.98303985595703;26.48718643188477;0 +-76.98258972167969;26.3705005645752;0 +-76.98258209228516;26.35694885253906;0 +-76.97830963134766;26.36745071411133;0 +-76.97817230224609;26.38904190063477;0 +-76.97711181640625;26.51810646057129;0 +-76.97705078125;26.3807544708252;0 +-76.97470855712891;26.52404403686523;0 +-76.97377014160156;26.51920509338379;0 +-76.97225952148438;26.53204345703125;0 +-76.96497344970703;26.53928565979004;0 +-76.96028900146484;26.55827903747559;0 +-76.95648193359375;26.55684280395508;0 +-76.95610809326172;26.55612182617188;0 +-76.95542144775391;26.54465293884277;0 +-76.95376586914062;26.55152130126953;0 +-76.88611602783203;25.49595832824707;0 +-76.88570404052734;25.49112892150879;0 +-76.88348388671875;25.50142669677734;0 +-76.88291931152344;25.49108695983887;0 +-76.87968444824219;25.5018253326416;0 +-76.87705230712891;25.31904602050781;0 +-76.87704467773438;25.50752449035645;0 +-76.87574005126953;25.49602317810059;0 +-76.87428283691406;25.31854248046875;0 +-76.87204742431641;25.32975769042969;0 +-76.87127685546875;25.50444793701172;0 +-76.86749267578125;25.33037185668945;0 +-76.86683654785156;25.5091609954834;0 +-76.86663055419922;25.50919532775879;0 +-76.86467742919922;25.50549507141113;0 +-76.86118316650391;25.3431282043457;0 +-76.86025238037109;25.3387508392334;0 +-76.85680389404297;25.50674438476562;0 +-76.85669708251953;25.5127124786377;0 +-76.85665893554688;25.35499382019043;0 +-76.85499572753906;25.34922981262207;0 +-76.85488128662109;25.35565376281738;0 +-76.85319519042969;25.51012992858887;0 +-76.85207366943359;25.31727027893066;0 +-76.85036468505859;25.51780700683594;0 +-76.84905242919922;25.31630516052246;0 +-76.84854888916016;25.51510810852051;0 +-76.84783935546875;25.5123405456543;0 +-76.84718322753906;25.5203685760498;0 +-76.84700012207031;25.33142471313477;0 +-76.84496307373047;25.5173454284668;0 +-76.84188079833984;25.32147026062012;0 +-76.84117889404297;25.51636695861816;0 +-76.84096527099609;25.51429748535156;0 +-76.84072875976562;25.34188079833984;0 +-76.83791351318359;25.33058929443359;0 +-76.83478546142578;25.51970863342285;0 +-76.83464813232422;25.51373672485352;0 +-76.82801055908203;25.51684379577637;0 +-76.82334136962891;25.52227973937988;0 +-76.82309722900391;24.80246162414551;0 +-76.82105255126953;24.81734275817871;0 +-76.82011413574219;24.72233009338379;0 +-76.81997680664062;24.71659088134766;0 +-76.81962585449219;25.5183162689209;0 +-76.81897735595703;25.52542304992676;0 +-76.81827545166016;24.71335029602051;0 +-76.8182373046875;24.80674171447754;0 +-76.81808471679688;24.72344398498535;0 +-76.81723785400391;24.8193473815918;0 +-76.81678771972656;24.81681442260742;0 +-76.81631469726562;24.82805252075195;0 +-76.81586456298828;24.72111511230469;0 +-76.81523895263672;24.59743309020996;0 +-76.81476593017578;25.5207633972168;0 +-76.8133544921875;24.7208423614502;0 +-76.81327056884766;24.81653022766113;0 +-76.81297302246094;25.37862396240234;0 +-76.81291198730469;24.62676239013672;0 +-76.81283569335938;24.61928176879883;0 +-76.812744140625;24.60955238342285;0 +-76.81227874755859;24.59440231323242;0 +-76.81201934814453;25.36277198791504;0 +-76.81157684326172;24.7091121673584;0 +-76.81012725830078;24.83575248718262;0 +-76.80992126464844;24.83368492126465;0 +-76.80982208251953;25.5275707244873;0 +-76.80972290039062;24.64896583557129;0 +-76.80952453613281;24.5941276550293;0 +-76.80872344970703;25.54523086547852;0 +-76.80858612060547;24.73361396789551;0 +-76.80831146240234;25.5401725769043;0 +-76.80827331542969;24.61674118041992;0 +-76.80817413330078;25.38308906555176;0 +-76.80643463134766;24.65005874633789;0 +-76.80621337890625;24.72646331787109;0 +-76.80453491210938;24.67045021057129;0 +-76.80389404296875;24.63877487182617;0 +-76.80374908447266;24.73674774169922;0 +-76.80347442626953;24.63440895080566;0 +-76.80306243896484;25.36813354492188;0 +-76.8026123046875;25.54673957824707;0 +-76.80242156982422;25.54209899902344;0 +-76.80209350585938;25.54672431945801;0 +-76.80191802978516;24.66283416748047;0 +-76.80184173583984;24.64057731628418;0 +-76.80152130126953;24.73510551452637;0 +-76.80035400390625;25.39035606384277;0 +-76.80001068115234;25.39112091064453;0 +-76.79985046386719;24.62700843811035;0 +-76.79970550537109;24.68597221374512;0 +-76.79909515380859;25.37725067138672;0 +-76.79905700683594;25.37916564941406;0 +-76.79898071289062;25.38298797607422;0 +-76.79798126220703;25.36942672729492;0 +-76.79767608642578;24.68708610534668;0 +-76.797607421875;25.54367256164551;0 +-76.79654693603516;24.6287899017334;0 +-76.79640960693359;25.37215614318848;0 +-76.79586029052734;25.4003849029541;0 +-76.79464721679688;25.3847541809082;0 +-76.79253387451172;25.40239524841309;0 +-76.79019927978516;25.40534210205078;0 +-76.79010009765625;25.41039085388184;0 +-76.78908538818359;25.4052791595459;0 +-76.78880310058594;25.39912033081055;0 +-76.78738403320312;25.3942756652832;0 +-76.78569793701172;24.52857971191406;0 +-76.78516387939453;24.54302406311035;0 +-76.78464508056641;25.40502166748047;0 +-76.78448486328125;25.5416202545166;0 +-76.78388214111328;25.54620361328125;0 +-76.78226470947266;24.56293487548828;0 +-76.78020477294922;24.55280685424805;0 +-76.77924346923828;24.56357383728027;0 +-76.77902984619141;25.4074535369873;0 +-76.776611328125;24.53141021728516;0 +-76.77535247802734;25.41450881958008;0 +-76.77525329589844;24.55543327331543;0 +-76.77368927001953;24.55224227905273;0 +-76.77328491210938;24.53423500061035;0 +-76.7706298828125;24.54209327697754;0 +-76.76982879638672;25.5526294708252;0 +-76.76972198486328;24.53726196289062;0 +-76.76878356933594;24.54665184020996;0 +-76.76753997802734;24.4952392578125;0 +-76.76627349853516;24.50852584838867;0 +-76.76571655273438;25.44121170043945;0 +-76.76548004150391;25.54199409484863;0 +-76.76526641845703;25.55278396606445;0 +-76.76488494873047;25.54657745361328;0 +-76.76483154296875;24.47982597351074;0 +-76.76293182373047;25.45636367797852;0 +-76.76292419433594;24.48759460449219;0 +-76.76230621337891;25.45975112915039;0 +-76.7606201171875;24.50269889831543;0 +-76.76029968261719;24.46782112121582;0 +-76.75965118408203;25.46613502502441;0 +-76.75924682617188;24.50840950012207;0 +-76.75887298583984;25.45441436767578;0 +-76.75878143310547;25.47163009643555;0 +-76.75847625732422;25.46152496337891;0 +-76.75800323486328;25.54898834228516;0 +-76.7579345703125;25.45072746276855;0 +-76.75712585449219;25.46586418151855;0 +-76.75705718994141;24.47969627380371;0 +-76.75698852539062;25.54394721984863;0 +-76.75681304931641;25.43073463439941;0 +-76.75614166259766;25.45184326171875;0 +-76.75424957275391;25.47063636779785;0 +-76.7532958984375;25.43228530883789;0 +-76.75315093994141;25.46212387084961;0 +-76.75297546386719;24.47045135498047;0 +-76.75255584716797;25.54247093200684;0 +-76.75243377685547;24.47250556945801;0 +-76.75119781494141;25.48399353027344;0 +-76.74810028076172;25.53757476806641;0 +-76.74503326416016;25.53890037536621;0 +-76.74465179443359;25.54532241821289;0 +-76.74277496337891;25.43692588806152;0 +-76.73743438720703;25.55186080932617;0 +-76.73600006103516;25.55987358093262;0 +-76.73549652099609;25.50958061218262;0 +-76.72989654541016;25.52102279663086;0 +-76.72713470458984;25.56018447875977;0 +-76.72618103027344;25.54478073120117;0 +-76.7254638671875;25.53007698059082;0 +-76.72504425048828;24.45024681091309;0 +-76.72473907470703;25.54062652587891;0 +-76.72444915771484;24.44244003295898;0 +-76.72353363037109;24.45067977905273;0 +-76.72211456298828;24.4463005065918;0 +-76.71718597412109;25.56345748901367;0 +-76.71648406982422;24.43955039978027;0 +-76.71357727050781;25.5294189453125;0 +-76.71260833740234;25.52710342407227;0 +-76.70931243896484;25.52750778198242;0 +-76.70896911621094;25.4450798034668;0 +-76.70841217041016;25.50935363769531;0 +-76.70732879638672;25.56260108947754;0 +-76.70709991455078;25.5118579864502;0 +-76.70529174804688;25.50103569030762;0 +-76.70510101318359;25.52284622192383;0 +-76.70485687255859;25.5347785949707;0 +-76.7047119140625;25.50469970703125;0 +-76.70442962646484;25.49390602111816;0 +-76.70211791992188;25.54483413696289;0 +-76.70101165771484;25.53723907470703;0 +-76.70065307617188;25.51358604431152;0 +-76.70058441162109;25.5330982208252;0 +-76.70028686523438;25.44505310058594;0 +-76.70002746582031;25.51081848144531;0 +-76.69976043701172;25.5117301940918;0 +-76.69903564453125;25.49748611450195;0 +-76.69882202148438;25.49587440490723;0 +-76.69752502441406;25.55899047851562;0 +-76.69719696044922;25.48850059509277;0 +-76.69438171386719;25.55881881713867;0 +-76.69425964355469;25.54538917541504;0 +-76.69252014160156;25.44502830505371;0 +-76.69017028808594;25.49779319763184;0 +-76.68970489501953;25.49594879150391;0 +-76.68820953369141;25.54413604736328;0 +-76.68537902832031;25.55832290649414;0 +-76.68517303466797;25.50689125061035;0 +-76.684326171875;25.49907112121582;0 +-76.68379211425781;25.48804092407227;0 +-76.68282318115234;25.51052474975586;0 +-76.68280029296875;25.54840660095215;0 +-76.68224334716797;25.50178909301758;0 +-76.68161010742188;25.4834098815918;0 +-76.68007659912109;25.48407363891602;0 +-76.67987060546875;25.49394226074219;0 +-76.67942810058594;25.44204902648926;0 +-76.67848968505859;25.51205635070801;0 +-76.67641448974609;25.51454734802246;0 +-76.6732177734375;25.5098991394043;0 +-76.673095703125;25.55237197875977;0 +-76.67181396484375;24.40482902526855;0 +-76.67084503173828;24.4032039642334;0 +-76.66914367675781;24.41281127929688;0 +-76.66908264160156;25.55191230773926;0 +-76.66841125488281;25.50958824157715;0 +-76.66682434082031;25.548583984375;0 +-76.66681671142578;25.4376277923584;0 +-76.66658782958984;25.548583984375;0 +-76.66635131835938;24.4022102355957;0 +-76.66621398925781;25.50564575195312;0 +-76.66611480712891;24.41367530822754;0 +-76.66605377197266;25.50335502624512;0 +-76.66602325439453;25.55155944824219;0 +-76.66543579101562;25.4946117401123;0 +-76.66339874267578;24.39986419677734;0 +-76.66290283203125;25.49456787109375;0 +-76.66188049316406;25.55585289001465;0 +-76.66062927246094;25.48236083984375;0 +-76.66006469726562;25.55788612365723;0 +-76.65873718261719;24.39473724365234;0 +-76.6580810546875;25.43456268310547;0 +-76.65806579589844;24.40321350097656;0 +-76.65743255615234;24.39723587036133;0 +-76.65652465820312;24.39263153076172;0 +-76.65573883056641;24.40661430358887;0 +-76.65531921386719;24.40247535705566;0 +-76.65391540527344;24.39786338806152;0 +-76.65312957763672;24.39922523498535;0 +-76.65299224853516;25.55707550048828;0 +-76.65055847167969;25.55221176147461;0 +-76.64875793457031;24.39272689819336;0 +-76.64764404296875;24.38605308532715;0 +-76.647216796875;25.43368148803711;0 +-76.646240234375;24.40529823303223;0 +-76.64535522460938;25.46234893798828;0 +-76.64482116699219;25.54820823669434;0 +-76.64370727539062;25.55301094055176;0 +-76.64178466796875;24.40246772766113;0 +-76.63912963867188;25.5056324005127;0 +-76.63864898681641;24.39667701721191;0 +-76.63833618164062;25.45901298522949;0 +-76.63816833496094;24.38359260559082;0 +-76.63726806640625;25.52213096618652;0 +-76.63619995117188;25.51247024536133;0 +-76.63617706298828;25.45901107788086;0 +-76.63594055175781;25.53703117370605;0 +-76.635498046875;25.54597854614258;0 +-76.63458251953125;24.38719940185547;0 +-76.63444519042969;24.39407920837402;0 +-76.63440704345703;25.53769302368164;0 +-76.63395690917969;25.52299118041992;0 +-76.63381195068359;25.54181671142578;0 +-76.63086700439453;25.51352310180664;0 +-76.63011932373047;25.47677612304688;0 +-76.62994384765625;24.38138198852539;0 +-76.62909698486328;24.38595581054688;0 +-76.62835693359375;25.48822402954102;0 +-76.62747955322266;24.36734390258789;0 +-76.62706756591797;25.47741317749023;0 +-76.62663269042969;25.43735504150391;0 +-76.6259765625;25.4691276550293;0 +-76.62548828125;25.48036766052246;0 +-76.62461090087891;25.47392463684082;0 +-76.62442016601562;25.45899772644043;0 +-76.62329864501953;24.36383056640625;0 +-76.62242889404297;24.38124656677246;0 +-76.62235260009766;25.46125602722168;0 +-76.61807250976562;24.36212921142578;0 +-76.61674499511719;25.43911743164062;0 +-76.61605834960938;25.45976638793945;0 +-76.61277770996094;24.35171508789062;0 +-76.61273956298828;24.37740707397461;0 +-76.61151885986328;25.44705772399902;0 +-76.61069488525391;25.43808937072754;0 +-76.60580444335938;24.34975433349609;0 +-76.60543823242188;24.36695289611816;0 +-76.60121154785156;24.33017539978027;0 +-76.60118865966797;24.35494804382324;0 +-76.60112762451172;24.34600067138672;0 +-76.60105895996094;25.4386157989502;0 +-76.60105133056641;24.33773994445801;0 +-76.5989990234375;25.42916107177734;0 +-76.59860229492188;24.34664344787598;0 +-76.59827423095703;24.3269100189209;0 +-76.59824371337891;24.36361122131348;0 +-76.59760284423828;25.42339515686035;0 +-76.59730529785156;24.34891319274902;0 +-76.59593200683594;24.32075309753418;0 +-76.59590148925781;24.32067489624023;0 +-76.59469604492188;24.34198570251465;0 +-76.59398651123047;24.35160636901855;0 +-76.59372711181641;24.3405933380127;0 +-76.59284973144531;24.33460998535156;0 +-76.59282684326172;24.34722900390625;0 +-76.59169769287109;24.35340118408203;0 +-76.59164428710938;25.40629959106445;0 +-76.59137725830078;25.41869163513184;0 +-76.58913421630859;25.42898368835449;0 +-76.58895111083984;25.41382598876953;0 +-76.58885192871094;24.33080291748047;0 +-76.58769226074219;24.32970428466797;0 +-76.58633422851562;24.34642219543457;0 +-76.58571624755859;24.34021949768066;0 +-76.58427429199219;24.33952331542969;0 +-76.58415985107422;24.33078575134277;0 +-76.58307647705078;25.40499877929688;0 +-76.58202362060547;24.34451866149902;0 +-76.58092498779297;24.33003616333008;0 +-76.58075714111328;24.33783340454102;0 +-76.58065795898438;24.31902313232422;0 +-76.58037567138672;24.34379196166992;0 +-76.57955169677734;24.32382011413574;0 +-76.57893371582031;24.34101295471191;0 +-76.57588195800781;24.33155250549316;0 +-76.57508850097656;24.33337211608887;0 +-76.57481384277344;25.42436408996582;0 +-76.57463073730469;24.31960105895996;0 +-76.57279205322266;24.32369804382324;0 +-76.57207489013672;24.33377647399902;0 +-76.57131958007812;24.31059646606445;0 +-76.568603515625;25.39578437805176;0 +-76.56458282470703;24.309326171875;0 +-76.56442260742188;25.39019966125488;0 +-76.56114196777344;25.39035987854004;0 +-76.55897521972656;24.31404113769531;0 +-76.55759429931641;25.39053344726562;0 +-76.55748748779297;24.29015922546387;0 +-76.55633544921875;25.4134693145752;0 +-76.5555419921875;24.2873706817627;0 +-76.55511474609375;24.29539108276367;0 +-76.55474090576172;24.2781810760498;0 +-76.55418395996094;24.30385971069336;0 +-76.55344390869141;24.28022193908691;0 +-76.55263519287109;24.30612564086914;0 +-76.55179595947266;24.29831123352051;0 +-76.55060577392578;24.2726001739502;0 +-76.55009460449219;25.38626670837402;0 +-76.54961395263672;24.30676078796387;0 +-76.54933166503906;24.28496170043945;0 +-76.54853820800781;24.26384544372559;0 +-76.54695129394531;24.2794132232666;0 +-76.54670715332031;24.30234718322754;0 +-76.54323577880859;24.30044746398926;0 +-76.54232788085938;24.26166725158691;0 +-76.54208374023438;24.28437232971191;0 +-76.54164123535156;24.2816104888916;0 +-76.54163360595703;24.29353713989258;0 +-76.54047393798828;24.26622009277344;0 +-76.53627777099609;24.28655624389648;0 +-76.53446197509766;24.26656723022461;0 +-76.53314971923828;24.28076362609863;0 +-76.53256225585938;25.39007759094238;0 +-76.53239440917969;24.26951217651367;0 +-76.53225708007812;24.25276565551758;0 +-76.53153991699219;24.27408599853516;0 +-76.53029632568359;24.25089454650879;0 +-76.5286865234375;24.26714897155762;0 +-76.52751159667969;24.25221824645996;0 +-76.52550506591797;24.24631118774414;0 +-76.52416229248047;24.26798057556152;0 +-76.52334594726562;24.25948143005371;0 +-76.52220916748047;24.26588249206543;0 +-76.51992797851562;24.23733139038086;0 +-76.51982879638672;24.23716735839844;0 +-76.51712036132812;24.23528289794922;0 +-76.51393127441406;24.25517654418945;0 +-76.51195526123047;24.25262641906738;0 +-76.51191711425781;25.37454605102539;0 +-76.50883483886719;25.35405731201172;0 +-76.50791931152344;24.23258781433105;0 +-76.50338745117188;24.23387908935547;0 +-76.50313568115234;24.22263526916504;0 +-76.50078582763672;24.23818588256836;0 +-76.49764251708984;24.21060562133789;0 +-76.49617004394531;24.20943069458008;0 +-76.49578094482422;24.23809432983398;0 +-76.49388122558594;24.15434455871582;0 +-76.49314117431641;25.36639213562012;0 +-76.49282836914062;24.15684700012207;0 +-76.49235534667969;24.21211051940918;0 +-76.49134063720703;24.23548698425293;0 +-76.49000549316406;25.36613845825195;0 +-76.48834991455078;24.21226501464844;0 +-76.48801422119141;24.15950775146484;0 +-76.48768615722656;24.2308292388916;0 +-76.48411560058594;25.34028053283691;0 +-76.48323822021484;24.20574760437012;0 +-76.48203277587891;25.3654956817627;0 +-76.48051452636719;24.22679710388184;0 +-76.48020935058594;24.15041542053223;0 +-76.47955322265625;25.34065246582031;0 +-76.47494506835938;24.15100479125977;0 +-76.47475433349609;24.21590614318848;0 +-76.47412872314453;25.3460636138916;0 +-76.47374725341797;24.1599292755127;0 +-76.47200775146484;25.36163520812988;0 +-76.47129821777344;24.20253944396973;0 +-76.46877288818359;24.15891265869141;0 +-76.46865081787109;24.20891189575195;0 +-76.46759033203125;24.21187400817871;0 +-76.46753692626953;24.20292663574219;0 +-76.46706390380859;24.15681648254395;0 +-76.46674346923828;24.20474624633789;0 +-76.46652984619141;25.34660911560059;0 +-76.46070098876953;24.19545745849609;0 +-76.46015167236328;24.19774055480957;0 +-76.45661926269531;24.19882011413574;0 +-76.45657348632812;24.18987464904785;0 +-76.4527587890625;24.19255447387695;0 +-76.44750213623047;25.33867263793945;0 +-76.44655609130859;24.19014167785645;0 +-76.44587707519531;25.33767890930176;0 +-76.44461822509766;24.16533470153809;0 +-76.44411468505859;24.17656135559082;0 +-76.43977355957031;25.33393478393555;0 +-76.43972778320312;24.18221473693848;0 +-76.43788909912109;24.16428756713867;0 +-76.43053436279297;25.33995819091797;0 +-76.42948913574219;24.15953826904297;0 +-76.42919921875;25.33212661743164;0 +-76.42758941650391;24.14390754699707;0 +-76.42747497558594;24.15995979309082;0 +-76.42639923095703;24.16337776184082;0 +-76.4263916015625;24.14182090759277;0 +-76.42514801025391;24.15234565734863;0 +-76.42372894287109;25.3281192779541;0 +-76.42243957519531;24.13967895507812;0 +-76.42138671875;24.15296363830566;0 +-76.4195556640625;24.13457679748535;0 +-76.41694641113281;25.33740234375;0 +-76.41489410400391;24.13058853149414;0 +-76.41432189941406;24.14479637145996;0 +-76.41361236572266;24.08790588378906;0 +-76.40924835205078;24.09286689758301;0 +-76.40840911865234;24.12977409362793;0 +-76.40742492675781;24.08549308776855;0 +-76.40739440917969;24.14145278930664;0 +-76.40550231933594;24.08201599121094;0 +-76.40204620361328;24.12391471862793;0 +-76.398681640625;24.1286678314209;0 +-76.39802551269531;25.33588981628418;0 +-76.39778137207031;24.12452125549316;0 +-76.39725494384766;24.11465072631836;0 +-76.39473724365234;24.11528778076172;0 +-76.38942718505859;24.10800933837891;0 +-76.38922882080078;24.07229423522949;0 +-76.38445281982422;24.06256866455078;0 +-76.38385009765625;25.33676147460938;0 +-76.37995910644531;24.09504699707031;0 +-76.37516784667969;25.34049606323242;0 +-76.37415313720703;24.03255271911621;0 +-76.37413024902344;24.07681465148926;0 +-76.37350463867188;24.04974174499512;0 +-76.37325286865234;24.08230018615723;0 +-76.37299346923828;24.07174682617188;0 +-76.37125396728516;25.32388877868652;0 +-76.37120819091797;24.03043174743652;0 +-76.37020111083984;25.34728622436523;0 +-76.36784362792969;24.0675163269043;0 +-76.36585235595703;25.34949684143066;0 +-76.36449432373047;25.34878730773926;0 +-76.36225891113281;24.02842140197754;0 +-76.36035919189453;25.34663391113281;0 +-76.35786437988281;24.02397727966309;0 +-76.35784912109375;24.04599380493164;0 +-76.35653686523438;24.0166130065918;0 +-76.35434722900391;24.01404571533203;0 +-76.35224151611328;24.04014778137207;0 +-76.35023498535156;25.31521224975586;0 +-76.34913635253906;24.03389358520508;0 +-76.34840393066406;24.01186370849609;0 +-76.34480285644531;25.3311767578125;0 +-76.34217834472656;24;0 +-76.34193420410156;24.83279228210449;0 +-76.34058380126953;24.836669921875;0 +-76.34033966064453;24.02569198608398;0 +-76.33999633789062;24.81898498535156;0 +-76.33830261230469;24.83753967285156;0 +-76.33485412597656;24.01457405090332;0 +-76.33439636230469;24.80051422119141;0 +-76.33320617675781;25.28434371948242;0 +-76.33212280273438;25.30084991455078;0 +-76.3304443359375;24.00000190734863;0 +-76.32987976074219;25.27831077575684;0 +-76.32913208007812;23.99297714233398;0 +-76.32884979248047;25.30032730102539;0 +-76.32573699951172;24.78358840942383;0 +-76.32391357421875;24.82876396179199;0 +-76.32340240478516;23.9921989440918;0 +-76.32267761230469;23.97682189941406;0 +-76.32203674316406;24.78076171875;0 +-76.31961822509766;25.25308036804199;0 +-76.31754302978516;25.2661247253418;0 +-76.31748962402344;23.9737606048584;0 +-76.31639862060547;25.28217124938965;0 +-76.31594848632812;23.97603225708008;0 +-76.31504821777344;24.82055282592773;0 +-76.31497955322266;25.25689315795898;0 +-76.314453125;24.78221702575684;0 +-76.31412506103516;25.25044441223145;0 +-76.31324768066406;24.78012657165527;0 +-76.313232421875;25.24560737609863;0 +-76.31244659423828;23.96221351623535;0 +-76.31240081787109;24.78400993347168;0 +-76.31189727783203;23.96541595458984;0 +-76.31038665771484;23.96585464477539;0 +-76.30860900878906;24.81111145019531;0 +-76.30825042724609;23.94586181640625;0 +-76.30694580078125;23.96304702758789;0 +-76.30638122558594;23.95248603820801;0 +-76.30535888671875;25.24751472473145;0 +-76.30412292480469;25.26746368408203;0 +-76.30362701416016;24.80379867553711;0 +-76.30284881591797;23.94050025939941;0 +-76.30233764648438;25.24699592590332;0 +-76.30190277099609;23.93773651123047;0 +-76.30059814453125;24.77275657653809;0 +-76.30028533935547;24.77504539489746;0 +-76.29795837402344;25.26114082336426;0 +-76.29716491699219;24.77957344055176;0 +-76.29691314697266;23.93766021728516;0 +-76.29689025878906;25.24229431152344;0 +-76.29666900634766;23.95095825195312;0 +-76.29611206054688;24.77242088317871;0 +-76.29189300537109;25.24012756347656;0 +-76.29146575927734;23.93527984619141;0 +-76.28990936279297;23.93846702575684;0 +-76.28841400146484;24.79821395874023;0 +-76.28752136230469;25.23292350769043;0 +-76.28529357910156;25.25216293334961;0 +-76.28447723388672;24.7738094329834;0 +-76.28377532958984;24.77149963378906;0 +-76.28359222412109;25.25010108947754;0 +-76.28311920166016;24.77791213989258;0 +-76.28268432617188;23.92367362976074;0 +-76.28249359130859;24.77262115478516;0 +-76.28213500976562;23.92641830444336;0 +-76.2821044921875;24.79900169372559;0 +-76.27890777587891;23.92544937133789;0 +-76.27838897705078;24.79663467407227;0 +-76.27817535400391;25.2435245513916;0 +-76.27658843994141;23.91577911376953;0 +-76.27625274658203;23.92059135437012;0 +-76.27480316162109;24.76810455322266;0 +-76.27268218994141;25.22022819519043;0 +-76.27238464355469;24.79536437988281;0 +-76.27202606201172;24.76850509643555;0 +-76.26922607421875;23.90900993347168;0 +-76.26902770996094;25.21464347839355;0 +-76.26716613769531;23.91218948364258;0 +-76.26654815673828;25.2336483001709;0 +-76.26557922363281;24.76493263244629;0 +-76.26548004150391;23.9089527130127;0 +-76.26543426513672;24.76033973693848;0 +-76.26118469238281;25.22550392150879;0 +-76.26042938232422;24.75955009460449;0 +-76.259765625;24.7866153717041;0 +-76.25914001464844;24.76066970825195;0 +-76.25634002685547;23.8899974822998;0 +-76.25579833984375;23.89251327514648;0 +-76.25444030761719;25.20194816589355;0 +-76.25409698486328;25.20561599731445;0 +-76.25379943847656;24.75298881530762;0 +-76.253662109375;23.88628578186035;0 +-76.25360870361328;24.75045967102051;0 +-76.25293731689453;25.20071220397949;0 +-76.25228881835938;23.89337539672852;0 +-76.25117492675781;24.74931716918945;0 +-76.25101470947266;25.21817779541016;0 +-76.25075531005859;24.75407409667969;0 +-76.25072479248047;25.19888877868652;0 +-76.24948120117188;25.18784523010254;0 +-76.24882507324219;23.89171409606934;0 +-76.24785614013672;24.75929260253906;0 +-76.24651336669922;23.88135528564453;0 +-76.24624633789062;25.18593978881836;0 +-76.24531555175781;24.75006103515625;0 +-76.24466705322266;24.78699493408203;0 +-76.24440765380859;24.74613761901855;0 +-76.24335479736328;23.87694358825684;0 +-76.24227905273438;24.75114440917969;0 +-76.24000549316406;23.85555839538574;0 +-76.23951721191406;25.21335411071777;0 +-76.23895263671875;23.85829734802246;0 +-76.23720550537109;24.78634643554688;0 +-76.2371826171875;25.18506813049316;0 +-76.23706817626953;23.87936973571777;0 +-76.23655700683594;24.7381763458252;0 +-76.23442840576172;23.86028671264648;0 +-76.23194885253906;23.84556579589844;0 +-76.23113250732422;23.87675094604492;0 +-76.23020172119141;23.87283706665039;0 +-76.22907257080078;23.83932495117188;0 +-76.22762298583984;24.73340225219727;0 +-76.22734832763672;24.78549003601074;0 +-76.2259521484375;23.85992240905762;0 +-76.22532653808594;23.8397274017334;0 +-76.22362518310547;23.86424446105957;0 +-76.22283935546875;23.86629676818848;0 +-76.22275543212891;23.85711860656738;0 +-76.22251892089844;23.84312057495117;0 +-76.22109985351562;23.85250473022461;0 +-76.21895599365234;25.16678619384766;0 +-76.21762084960938;23.86483764648438;0 +-76.21760559082031;25.16010093688965;0 +-76.21738433837891;24.71024131774902;0 +-76.21674346923828;24.70563888549805;0 +-76.21608734130859;23.85357093811035;0 +-76.21591949462891;24.88187217712402;0 +-76.21576690673828;24.88783645629883;0 +-76.21549987792969;23.8581485748291;0 +-76.21415710449219;24.79003524780273;0 +-76.21315002441406;24.8717155456543;0 +-76.21285247802734;25.18892669677734;0 +-76.21062469482422;25.15674209594727;0 +-76.21038055419922;23.85164451599121;0 +-76.20909118652344;23.85391807556152;0 +-76.20883941650391;24.90329742431641;0 +-76.20810699462891;24.82111930847168;0 +-76.20798492431641;24.69398307800293;0 +-76.20706176757812;24.82270431518555;0 +-76.20665740966797;24.81879425048828;0 +-76.20661926269531;24.91455078125;0 +-76.20396423339844;25.150634765625;0 +-76.20325469970703;24.68218040466309;0 +-76.20323181152344;24.85544204711914;0 +-76.20256805419922;25.18641662597656;0 +-76.20231628417969;24.80035591125488;0 +-76.20182037353516;24.8007926940918;0 +-76.19960021972656;24.81359100341797;0 +-76.19904327392578;24.95290184020996;0 +-76.19800567626953;24.81241607666016;0 +-76.19731903076172;24.80964851379395;0 +-76.19573211669922;24.82292556762695;0 +-76.195556640625;24.7492561340332;0 +-76.19512939453125;25.18098258972168;0 +-76.19468688964844;23.8371696472168;0 +-76.19362640380859;24.85708045959473;0 +-76.19287872314453;23.8405818939209;0 +-76.19278717041016;24.88047027587891;0 +-76.19264984130859;24.84558296203613;0 +-76.19226837158203;23.83300018310547;0 +-76.19216156005859;24.74413681030273;0 +-76.19211578369141;23.82795143127441;0 +-76.19175720214844;24.74022674560547;0 +-76.19142913818359;23.82426834106445;0 +-76.19135284423828;24.7363166809082;0 +-76.19131469726562;24.72759628295898;0 +-76.19064331054688;24.96672439575195;0 +-76.19056701660156;24.8485221862793;0 +-76.19041442871094;24.76383590698242;0 +-76.19027709960938;23.83273887634277;0 +-76.18979644775391;24.75831604003906;0 +-76.18900299072266;23.82078742980957;0 +-76.18882751464844;24.76678657531738;0 +-76.18839263916016;24.81451225280762;0 +-76.18839263916016;24.88519859313965;0 +-76.18796539306641;25.14456176757812;0 +-76.18750762939453;24.72912216186523;0 +-76.1871337890625;24.7137393951416;0 +-76.18527221679688;23.82026863098145;0 +-76.184814453125;24.66573143005371;0 +-76.18438720703125;25.17662620544434;0 +-76.18428802490234;23.8326416015625;0 +-76.18397521972656;24.82038497924805;0 +-76.18351745605469;24.70769691467285;0 +-76.18320465087891;24.77056884765625;0 +-76.18229675292969;24.88736534118652;0 +-76.18202209472656;24.82179641723633;0 +-76.18108367919922;24.65417671203613;0 +-76.18108367919922;24.88712882995605;0 +-76.18099975585938;23.82180595397949;0 +-76.17996215820312;23.8240852355957;0 +-76.17966461181641;24.78049850463867;0 +-76.17914581298828;24.78195762634277;0 +-76.17903137207031;23.75386238098145;0 +-76.177734375;23.75659561157227;0 +-76.17758178710938;23.75131607055664;0 +-76.17753601074219;24.65525245666504;0 +-76.17709350585938;25.17532730102539;0 +-76.17668914794922;25.17502403259277;0 +-76.17624664306641;23.7294979095459;0 +-76.17548370361328;23.75701713562012;0 +-76.17517852783203;24.65220642089844;0 +-76.17510986328125;24.7020149230957;0 +-76.17508697509766;23.81781005859375;0 +-76.17470550537109;24.7031364440918;0 +-76.17442321777344;23.81343841552734;0 +-76.17440795898438;25.14175415039062;0 +-76.17403411865234;24.7049732208252;0 +-76.17386627197266;24.64140701293945;0 +-76.17337799072266;23.7363338470459;0 +-76.17305755615234;24.64368438720703;0 +-76.17302703857422;24.88556289672852;0 +-76.17279052734375;23.82052612304688;0 +-76.17178344726562;24.69437026977539;0 +-76.17150115966797;23.80972099304199;0 +-76.17121124267578;24.64708709716797;0 +-76.17090606689453;23.72183799743652;0 +-76.17054748535156;24.64363098144531;0 +-76.1705322265625;24.78429985046387;0 +-76.17028045654297;23.75509834289551;0 +-76.17024230957031;23.71746826171875;0 +-76.17005157470703;24.88366508483887;0 +-76.16877746582031;24.63395500183105;0 +-76.16852569580078;23.72914123535156;0 +-76.16852569580078;23.82183265686035;0 +-76.16653442382812;23.71557235717773;0 +-76.16617584228516;25.13790702819824;0 +-76.16538238525391;23.75042915344238;0 +-76.164794921875;23.75500869750977;0 +-76.16470336914062;24.80330657958984;0 +-76.16465759277344;24.97811317443848;0 +-76.16449737548828;24.83443260192871;0 +-76.16426849365234;23.7299919128418;0 +-76.16423797607422;24.80482292175293;0 +-76.16395568847656;23.81281089782715;0 +-76.16364288330078;24.80576515197754;0 +-76.16357421875;23.82014465332031;0 +-76.16333770751953;23.75292205810547;0 +-76.16319274902344;24.6861572265625;0 +-76.16315460205078;24.92758560180664;0 +-76.16310882568359;23.80499839782715;0 +-76.16310882568359;24.91955184936523;0 +-76.16263580322266;23.81669235229492;0 +-76.16253662109375;23.71619415283203;0 +-76.1624755859375;25.16445732116699;0 +-76.16213989257812;24.93789291381836;0 +-76.16156768798828;23.8074951171875;0 +-76.16136932373047;24.8387279510498;0 +-76.16123199462891;24.93397331237793;0 +-76.16110992431641;24.93901824951172;0 +-76.16110229492188;25.12907600402832;0 +-76.16047668457031;23.71937370300293;0 +-76.16045379638672;24.91490364074707;0 +-76.15977478027344;24.85200500488281;0 +-76.15959930419922;23.72647285461426;0 +-76.15956115722656;24.95023155212402;0 +-76.15943908691406;24.8453426361084;0 +-76.15940856933594;24.94655609130859;0 +-76.15898895263672;24.81320190429688;0 +-76.15866088867188;23.72324562072754;0 +-76.15728759765625;23.71702766418457;0 +-76.15713500976562;24.95660781860352;0 +-76.15682983398438;24.93869781494141;0 +-76.15581512451172;25.12468528747559;0 +-76.15559387207031;24.62885665893555;0 +-76.15519714355469;25.10324096679688;0 +-76.15516662597656;24.93476104736328;0 +-76.15428161621094;23.71743583679199;0 +-76.15419006347656;24.91362571716309;0 +-76.15392303466797;24.9241771697998;0 +-76.15373229980469;25.10114479064941;0 +-76.15283966064453;24.91726875305176;0 +-76.15249633789062;23.70662307739258;0 +-76.15180969238281;24.95810127258301;0 +-76.15146636962891;25.12106704711914;0 +-76.15129089355469;24.9287109375;0 +-76.15015411376953;24.93373489379883;0 +-76.14997863769531;24.94084930419922;0 +-76.14945220947266;25.16050720214844;0 +-76.14830017089844;25.11663818359375;0 +-76.14826965332031;24.92887687683105;0 +-76.14779663085938;24.93758773803711;0 +-76.14779663085938;24.95732688903809;0 +-76.14762115478516;25.11341094970703;0 +-76.14735412597656;24.82580757141113;0 +-76.14734649658203;24.62730407714844;0 +-76.14678955078125;24.92402839660645;0 +-76.14604187011719;24.99677085876465;0 +-76.14588928222656;24.63507461547852;0 +-76.14493560791016;24.83172225952148;0 +-76.14486694335938;25.10256195068359;0 +-76.14482116699219;25;0 +-76.14479064941406;24.83745765686035;0 +-76.14403533935547;24.9666576385498;0 +-76.14350891113281;25.09656524658203;0 +-76.14312744140625;25.10160827636719;0 +-76.14225769042969;25.00678825378418;0 +-76.14174652099609;24.96752548217773;0 +-76.14090728759766;25.01605415344238;0 +-76.14083099365234;24.90438842773438;0 +-76.14058685302734;23.70367240905762;0 +-76.13993072509766;25.04897308349609;0 +-76.13981628417969;25.02349281311035;0 +-76.13980102539062;24.84561157226562;0 +-76.13968658447266;24.97573089599609;0 +-76.13861083984375;25.09095191955566;0 +-76.13851165771484;23.7077693939209;0 +-76.13832092285156;23.70478439331055;0 +-76.13816070556641;23.79196929931641;0 +-76.13809967041016;23.79518127441406;0 +-76.13754272460938;24.85543251037598;0 +-76.13751983642578;25.15359687805176;0 +-76.1373291015625;25.06200218200684;0 +-76.13720703125;25.07645988464355;0 +-76.13602447509766;24.87559700012207;0 +-76.13534545898438;23.79582405090332;0 +-76.13360595703125;25;0 +-76.13333129882812;25.00108909606934;0 +-76.13214111328125;23.7937068939209;0 +-76.13153839111328;23.78612518310547;0 +-76.13111877441406;25.14726257324219;0 +-76.12921905517578;23.77690887451172;0 +-76.12763977050781;25.10563850402832;0 +-76.12654113769531;23.77342414855957;0 +-76.12570190429688;23.77034187316895;0 +-76.12491607666016;23.76743125915527;0 +-76.12473297119141;25.04176330566406;0 +-76.12374114990234;25.09329223632812;0 +-76.12371826171875;25.02223014831543;0 +-76.12351226806641;25.10922241210938;0 +-76.12321472167969;23.69971656799316;0 +-76.12319183349609;25.03300857543945;0 +-76.12310028076172;25.05641746520996;0 +-76.12270355224609;23.76578903198242;0 +-76.12242126464844;23.70199775695801;0 +-76.12168884277344;25.04238510131836;0 +-76.12081909179688;25.12569236755371;0 +-76.12065887451172;25.0926342010498;0 +-76.12062072753906;25.05475997924805;0 +-76.12009429931641;23.77746200561523;0 +-76.11974334716797;23.7769832611084;0 +-76.11934661865234;25.04531860351562;0 +-76.11892700195312;23.76733207702637;0 +-76.11876678466797;25.02855110168457;0 +-76.11875915527344;25.09764289855957;0 +-76.11808013916016;23.77259635925293;0 +-76.11785888671875;25.06410980224609;0 +-76.11772918701172;25.05928802490234;0 +-76.11714172363281;25.07235908508301;0 +-76.11687469482422;25.12216377258301;0 +-76.11640930175781;25.07142448425293;0 +-76.11639404296875;25.03640365600586;0 +-76.11625671386719;25.09690093994141;0 +-76.11515045166016;23.78241157531738;0 +-76.114990234375;25.08746337890625;0 +-76.11489868164062;23.78387069702148;0 +-76.11466217041016;23.70370483398438;0 +-76.11459350585938;23.78561592102051;0 +-76.11444854736328;25.04957389831543;0 +-76.11443328857422;25.07964706420898;0 +-76.11431884765625;25.07436370849609;0 +-76.11415863037109;25.03143501281738;0 +-76.11302947998047;23.69794273376465;0 +-76.11289215087891;25.11014366149902;0 +-76.11245727539062;23.77984428405762;0 +-76.11234283447266;25.03346252441406;0 +-76.11179351806641;23.78855133056641;0 +-76.11090087890625;25.07956886291504;0 +-76.11083221435547;23.78871154785156;0 +-76.11021423339844;23.70179557800293;0 +-76.10884857177734;23.69488906860352;0 +-76.10857391357422;25.12107086181641;0 +-76.10803985595703;23.78917694091797;0 +-76.10703277587891;23.69875907897949;0 +-76.10684204101562;23.69531440734863;0 +-76.10254669189453;23.69868659973145;0 +-76.10152435302734;23.70004463195801;0 +-76.10028076171875;23.77757835388184;0 +-76.09908294677734;23.78788185119629;0 +-76.0986328125;23.6947193145752;0 +-76.09694671630859;23.78233909606934;0 +-76.09677124023438;23.70065498352051;0 +-76.09543609619141;23.77015495300293;0 +-76.09132385253906;23.69872856140137;0 +-76.09120941162109;23.69184303283691;0 +-76.08946228027344;23.69204330444336;0 +-76.08817291259766;23.69431495666504;0 +-76.08798980712891;23.76842498779297;0 +-76.08225250244141;23.7683277130127;0 +-76.08216094970703;23.76029396057129;0 +-76.08086395263672;23.75974464416504;0 +-76.0748291015625;23.76545143127441;0 +-76.07044219970703;23.76009750366211;0 +-76.06979370117188;23.75504112243652;0 +-76.06699371337891;23.70657920837402;0 +-76.06669616699219;23.68339729309082;0 +-76.066162109375;23.7240047454834;0 +-76.06555938720703;23.70357322692871;0 +-76.06509399414062;23.72765731811523;0 +-76.06508636474609;23.67648887634277;0 +-76.064453125;23.69620895385742;0 +-76.06233978271484;23.72806930541992;0 +-76.06230926513672;23.69135665893555;0 +-76.06203460693359;23.71796989440918;0 +-76.06201934814453;23.75743293762207;0 +-76.06187438964844;23.69915771484375;0 +-76.06089019775391;23.70028114318848;0 +-76.06082916259766;23.7032642364502;0 +-76.05965423583984;23.67410087585449;0 +-76.05901336669922;23.74545097351074;0 +-76.05814361572266;23.75163269042969;0 +-76.05667877197266;23.72430419921875;0 +-76.05424499511719;23.67011070251465;0 +-76.05357360839844;23.66619491577148;0 +-76.05293273925781;23.66090965270996;0 +-76.05271148681641;23.67214965820312;0 +-76.05253601074219;23.74488258361816;0 +-76.05172729492188;23.65859413146973;0 +-76.05091094970703;23.71342086791992;0 +-76.05086517333984;23.66477203369141;0 +-76.05075073242188;23.74691581726074;0 +-76.04669952392578;23.67388343811035;0 +-76.04603576660156;23.70783233642578;0 +-76.0435791015625;23.66763496398926;0 +-76.04324340820312;23.73554801940918;0 +-76.04280853271484;23.65614700317383;0 +-76.0426025390625;23.74310874938965;0 +-76.04178619384766;23.73391723632812;0 +-76.04119110107422;23.73849678039551;0 +-76.04108428955078;23.66781997680664;0 +-76.0406494140625;23.58818626403809;0 +-76.04041290283203;23.65128707885742;0 +-76.04037475585938;23.70383453369141;0 +-76.03940582275391;23.67697143554688;0 +-76.03936767578125;23.74259567260742;0 +-76.03860473632812;23.60375595092773;0 +-76.03804779052734;23.64482498168945;0 +-76.03771209716797;23.58560943603516;0 +-76.03750610351562;23.59593200683594;0 +-76.03716278076172;23.69001197814941;0 +-76.03661346435547;23.69229888916016;0 +-76.03660583496094;23.65466499328613;0 +-76.03587341308594;23.6792049407959;0 +-76.03531646728516;23.64431762695312;0 +-76.03506469726562;23.68240547180176;0 +-76.03468322753906;23.58762168884277;0 +-76.0343017578125;23.63236808776855;0 +-76.03401184082031;23.63465690612793;0 +-76.03354644775391;23.73446655273438;0 +-76.03325653076172;23.68558692932129;0 +-76.03227233886719;23.59630393981934;0 +-76.03219604492188;23.66353988647461;0 +-76.03208160400391;23.69474601745605;0 +-76.03176116943359;23.73649978637695;0 +-76.03170013427734;23.70162200927734;0 +-76.03076171875;23.69862365722656;0 +-76.03063201904297;23.67957496643066;0 +-76.03011322021484;23.63022994995117;0 +-76.03001403808594;23.64766693115234;0 +-76.02973175048828;23.67497062683105;0 +-76.02908325195312;23.65729141235352;0 +-76.02772521972656;23.59943771362305;0 +-76.02770233154297;23.63845062255859;0 +-76.02568054199219;23.69073486328125;0 +-76.02547454833984;23.62510299682617;0 +-76.02530670166016;23.60857772827148;0 +-76.02513885498047;23.69301986694336;0 +-76.02346038818359;23.67692947387695;0 +-76.02288818359375;23.69344139099121;0 +-76.02244567871094;23.62734603881836;0 +-76.02167510986328;23.60072326660156;0 +-76.02120971679688;23.63948631286621;0 +-76.02106475830078;23.64659881591797;0 +-76.02034759521484;23.63258743286133;0 +-76.01905059814453;23.6858024597168;0 +-76.01725006103516;23.68852615356445;0 +-76.01698303222656;23.61371231079102;0 +-76.01566314697266;23.68046760559082;0 +-76.01524353027344;23.4495849609375;0 +-76.01480102539062;23.44682312011719;0 +-76.01215362548828;23.6436939239502;0 +-76.01168823242188;23.67993927001953;0 +-76.01061248779297;23.62094688415527;0 +-76.01036071777344;23.44468307495117;0 +-76.01023864746094;23.45087432861328;0 +-76.00971221923828;23.6032600402832;0 +-76.00933074951172;23.68563842773438;0 +-76.00772857666016;23.64063262939453;0 +-76.00714874267578;23.68261528015137;0 +-76.00710296630859;23.63442611694336;0 +-76.00688171386719;23.62065315246582;0 +-76.00634002685547;23.67319297790527;0 +-76.00342559814453;23.4555778503418;0 +-76.00340270996094;23.4443302154541;0 +-76.00215911865234;23.63130187988281;0 +-76.00005340576172;23.67583847045898;0 +-75.99971008300781;23.45482635498047;0 +-75.99952697753906;23.61455726623535;0 +-75.99805450439453;23.450439453125;0 +-75.99775695800781;23.62853050231934;0 +-75.99765014648438;23.62141227722168;0 +-75.99657440185547;23.62506675720215;0 +-75.99569702148438;23.61931419372559;0 +-75.99521636962891;23.69342422485352;0 +-75.99442291259766;23.44509506225586;0 +-75.99435424804688;23.44876670837402;0 +-75.99406433105469;23.61354827880859;0 +-75.99391937255859;23.6959285736084;0 +-75.99315643310547;23.44644927978516;0 +-75.99260711669922;23.68672561645508;0 +-75.99079895019531;23.61509895324707;0 +-75.99069213867188;23.69469261169434;0 +-75.99041748046875;23.62151718139648;0 +-75.98699951171875;23.69328308105469;0 +-75.98695373535156;23.62030982971191;0 +-75.97505950927734;23.67953872680664;0 +-75.97345733642578;23.59758567810059;0 +-75.96617126464844;23.45195007324219;0 +-75.96561431884766;23.45492362976074;0 +-75.96478271484375;23.66995048522949;0 +-75.96347808837891;23.44960784912109;0 +-75.96089172363281;24.58373069763184;0 +-75.95928955078125;24.58713531494141;0 +-75.957275390625;23.46097564697266;0 +-75.95664215087891;23.66567802429199;0 +-75.95644378662109;24.58110427856445;0 +-75.95635986328125;23.59315872192383;0 +-75.95252227783203;23.4622688293457;0 +-75.95244598388672;23.45377540588379;0 +-75.95015716552734;24.58448791503906;0 +-75.95005035400391;23.4613094329834;0 +-75.9498291015625;24.58439254760742;0 +-75.94870758056641;24.57932090759277;0 +-75.94860076904297;23.4592170715332;0 +-75.94370269775391;24.56933975219727;0 +-75.94188690185547;23.45909881591797;0 +-75.94126892089844;24.58511734008789;0 +-75.94053649902344;24.57523345947266;0 +-75.94043731689453;23.45677947998047;0 +-75.93952941894531;24.57610702514648;0 +-75.93900299072266;23.46639442443848;0 +-75.93898773193359;24.57657432556152;0 +-75.93833923339844;23.64677238464355;0 +-75.93653869628906;24.5650463104248;0 +-75.93596649169922;23.46886444091797;0 +-75.93586730957031;23.58430671691895;0 +-75.93570709228516;24.57718658447266;0 +-75.93541717529297;24.56960868835449;0 +-75.93368530273438;23.45849609375;0 +-75.93202209472656;23.46673011779785;0 +-75.93025970458984;24.57453918457031;0 +-75.92961883544922;23.46255683898926;0 +-75.92798614501953;24.56576728820801;0 +-75.92726135253906;23.64015007019043;0 +-75.92704010009766;24.56608772277832;0 +-75.92545318603516;24.56662750244141;0 +-75.92486572265625;24.56041717529297;0 +-75.92388153076172;23.46314239501953;0 +-75.92332458496094;23.46634674072266;0 +-75.92254638671875;23.6391487121582;0 +-75.9222412109375;24.57389640808105;0 +-75.92218017578125;23.46127700805664;0 +-75.92160797119141;24.56172943115234;0 +-75.91939544677734;23.57369041442871;0 +-75.919189453125;24.57726860046387;0 +-75.91623687744141;24.56389045715332;0 +-75.91477203369141;23.64176368713379;0 +-75.91428375244141;23.62890625;0 +-75.91373443603516;23.47260475158691;0 +-75.91333770751953;23.62636566162109;0 +-75.91248321533203;23.63162803649902;0 +-75.91109466552734;23.6246223449707;0 +-75.90991973876953;24.56535148620605;0 +-75.90884399414062;23.46838569641113;0 +-75.90875244140625;23.47297477722168;0 +-75.90754699707031;23.47088813781738;0 +-75.90751647949219;24.56162643432617;0 +-75.90744781494141;24.57309341430664;0 +-75.90638732910156;23.63725662231445;0 +-75.90428924560547;23.56951904296875;0 +-75.90376281738281;23.6317024230957;0 +-75.90328216552734;24.56037902832031;0 +-75.90222930908203;23.63351249694824;0 +-75.89655303955078;23.56153297424316;0 +-75.89641571044922;23.61321449279785;0 +-75.89501953125;23.55994415283203;0 +-75.89437866210938;24.56476020812988;0 +-75.89263153076172;24.57132148742676;0 +-75.88663482666016;24.56320381164551;0 +-75.88388824462891;24.56449317932129;0 +-75.88383483886719;24.56451606750488;0 +-75.88368225097656;24.57024765014648;0 +-75.88224029541016;24.56768989562988;0 +-75.87543487548828;23.59172630310059;0 +-75.87369537353516;23.54327011108398;0 +-75.86692810058594;22.88375473022461;0 +-75.86621856689453;22.89407539367676;0 +-75.86544036865234;24.56883811950684;0 +-75.86542510986328;22.89635848999023;0 +-75.86525726318359;22.88050651550293;0 +-75.86428833007812;22.89128494262695;0 +-75.86274719238281;23.47100257873535;0 +-75.86199951171875;23.5308952331543;0 +-75.86197662353516;22.8953742980957;0 +-75.86104583740234;22.88043212890625;0 +-75.86088562011719;23.46477317810059;0 +-75.86021423339844;23.53315925598145;0 +-75.85958862304688;23.47920989990234;0 +-75.85767364501953;23.54757308959961;0 +-75.85670471191406;22.89826774597168;0 +-75.85604858398438;23.48190116882324;0 +-75.85551452636719;22.89595031738281;0 +-75.85536193847656;23.46696853637695;0 +-75.85456848144531;24.56624984741211;0 +-75.85446166992188;23.54636573791504;0 +-75.85195159912109;23.47540092468262;0 +-75.85155487060547;23.53047752380371;0 +-75.84958648681641;23.48155403137207;0 +-75.84837341308594;23.47992706298828;0 +-75.84809112548828;23.4695930480957;0 +-75.84614562988281;23.46726417541504;0 +-75.84549713134766;24.56840515136719;0 +-75.84452819824219;23.47343063354492;0 +-75.84419250488281;23.4775562286377;0 +-75.84391021728516;22.47534942626953;0 +-75.84329223632812;23.52068901062012;0 +-75.84272766113281;24.56775665283203;0 +-75.84172058105469;24.56538200378418;0 +-75.84145355224609;23.47750663757324;0 +-75.84129333496094;23.52088165283203;0 +-75.8409423828125;23.52569580078125;0 +-75.84043121337891;23.46692657470703;0 +-75.84025573730469;22.48447418212891;0 +-75.83941650390625;22.46516036987305;0 +-75.83895874023438;23.52542877197266;0 +-75.83811950683594;23.48203659057617;0 +-75.83726501464844;22.48556709289551;0 +-75.8358154296875;23.47350120544434;0 +-75.83541107177734;23.51664352416992;0 +-75.83526611328125;23.46408081054688;0 +-75.83376312255859;22.47562408447266;0 +-75.83271789550781;22.4661865234375;0 +-75.83259582519531;23.4752368927002;0 +-75.83246612548828;23.46701431274414;0 +-75.83036041259766;23.47248458862305;0 +-75.830078125;23.52159690856934;0 +-75.82939147949219;22.47163772583008;0 +-75.82887268066406;22.42544555664062;0 +-75.8282470703125;22.4435863494873;0 +-75.82819366455078;22.42221641540527;0 +-75.82744598388672;22.44632720947266;0 +-75.82666015625;22.43643379211426;0 +-75.82612609863281;23.47263717651367;0 +-75.82524871826172;23.49052429199219;0 +-75.82495880126953;22.44720077514648;0 +-75.82382965087891;23.47512054443359;0 +-75.82366180419922;22.42626762390137;0 +-75.82358551025391;23.52239608764648;0 +-75.82326507568359;23.51390075683594;0 +-75.82286834716797;23.49736595153809;0 +-75.82246398925781;23.46912574768066;0 +-75.82246398925781;23.48083114624023;0 +-75.82205963134766;22.44370269775391;0 +-75.82197570800781;23.51594161987305;0 +-75.82164001464844;23.52202224731445;0 +-75.82132720947266;22.4312801361084;0 +-75.82060241699219;23.51040840148926;0 +-75.82035827636719;23.5455207824707;0 +-75.82034301757812;23.49892997741699;0 +-75.81951904296875;23.46700668334961;0 +-75.81697082519531;23.50552177429199;0 +-75.81664276123047;23.50918579101562;0 +-75.81587982177734;22.396484375;0 +-75.81580352783203;23.47818756103516;0 +-75.81503295898438;23.50296211242676;0 +-75.81470489501953;23.48298645019531;0 +-75.81385040283203;22.39874458312988;0 +-75.81381225585938;23.48985481262207;0 +-75.81282043457031;22.38884544372559;0 +-75.81231689453125;22.37757682800293;0 +-75.81077575683594;23.51596641540527;0 +-75.81044006347656;23.51986122131348;0 +-75.80992126464844;23.49736022949219;0 +-75.80963134765625;23.54085350036621;0 +-75.80948638916016;23.51800918579102;0 +-75.80911254882812;23.48839378356934;0 +-75.80899810791016;22.3706226348877;0 +-75.80841827392578;22.39841461181641;0 +-75.80780029296875;23.50351715087891;0 +-75.80650329589844;22.39562225341797;0 +-75.80622100830078;22.38527679443359;0 +-75.80606842041016;23.46745109558105;0 +-75.80471038818359;23.47316360473633;0 +-75.80459594726562;23.50185203552246;0 +-75.8038330078125;23.53833198547363;0 +-75.80351257324219;23.47084617614746;0 +-75.80313110351562;22.36752700805664;0 +-75.80199432373047;22.37485694885254;0 +-75.80120849609375;23.53900718688965;0 +-75.80107116699219;23.49191856384277;0 +-75.80004119873047;22.36172294616699;0 +-75.79924774169922;23.49601745605469;0 +-75.79918670654297;22.35550308227539;0 +-75.79698944091797;22.35431289672852;0 +-75.79674530029297;23.49665832519531;0 +-75.79663848876953;23.47806549072266;0 +-75.79537963867188;23.45509147644043;0 +-75.79535675048828;22.34945869445801;0 +-75.7952880859375;23.47115516662598;0 +-75.79490661621094;23.50121688842773;0 +-75.79468536376953;23.49960708618164;0 +-75.79452514648438;22.36552810668945;0 +-75.79381561279297;23.54090309143066;0 +-75.79355621337891;23.45918846130371;0 +-75.79320526123047;23.45206642150879;0 +-75.79299163818359;23.47018814086914;0 +-75.79241180419922;22.34848594665527;0 +-75.78990173339844;22.36222457885742;0 +-75.78986358642578;22.35211372375488;0 +-75.78904724121094;23.46048164367676;0 +-75.78824615478516;22.3587474822998;0 +-75.78647613525391;23.4526309967041;0 +-75.78573608398438;23.42874526977539;0 +-75.78555297851562;23.42552757263184;0 +-75.78224182128906;22.30348587036133;0 +-75.78221893310547;23.46563529968262;0 +-75.78031921386719;23.42611885070801;0 +-75.77967071533203;23.43322372436523;0 +-75.77947998046875;23.54752159118652;0 +-75.77864837646484;22.29813385009766;0 +-75.77835083007812;23.46028518676758;0 +-75.7779541015625;23.54910087585449;0 +-75.77614593505859;23.45840835571289;0 +-75.77364349365234;23.43586730957031;0 +-75.77101898193359;23.54736709594727;0 +-75.77097320556641;23.43260383605957;0 +-75.77091217041016;23.43535614013672;0 +-75.77046203613281;22.29981803894043;0 +-75.76728057861328;23.51241111755371;0 +-75.76683044433594;22.30802345275879;0 +-75.76654815673828;22.29813766479492;0 +-75.76608276367188;23.54190254211426;0 +-75.76517486572266;22.3045482635498;0 +-75.76472473144531;23.53377723693848;0 +-75.76239013671875;23.53160095214844;0 +-75.76199340820312;22.32654571533203;0 +-75.76152801513672;23.53686332702637;0 +-75.76112365722656;22.30906677246094;0 +-75.76018524169922;23.50688743591309;0 +-75.75999450683594;24.67217826843262;0 +-75.75953674316406;22.31409072875977;0 +-75.75925445556641;23.5267219543457;0 +-75.75892639160156;24.67421913146973;0 +-75.75878143310547;22.32648468017578;0 +-75.75858306884766;22.28925514221191;0 +-75.75777435302734;22.29222679138184;0 +-75.75714111328125;22.32231903076172;0 +-75.75608062744141;22.30230712890625;0 +-75.75596618652344;23.49452781677246;0 +-75.75537109375;22.24277496337891;0 +-75.75527954101562;22.28183937072754;0 +-75.75518798828125;22.23978424072266;0 +-75.75435638427734;24.67594337463379;0 +-75.75431060791016;23.52525329589844;0 +-75.75425720214844;23.49266052246094;0 +-75.75387573242188;22.30134773254395;0 +-75.75353240966797;22.30616569519043;0 +-75.75312042236328;22.2905330657959;0 +-75.75307464599609;23.5013599395752;0 +-75.75298309326172;22.23882293701172;0 +-75.75222015380859;22.2978687286377;0 +-75.75209808349609;22.2804012298584;0 +-75.75179290771484;22.27166366577148;0 +-75.75167083740234;24.66440391540527;0 +-75.75119781494141;23.46439361572266;0 +-75.75072479248047;23.51830101013184;0 +-75.74979400634766;22.29575538635254;0 +-75.74971008300781;23.48431396484375;0 +-75.74887847900391;22.28103065490723;0 +-75.74856567382812;23.52606582641602;0 +-75.74840545654297;22.24494171142578;0 +-75.74791717529297;23.48657608032227;0 +-75.747802734375;23.49185180664062;0 +-75.74774169921875;22.27618217468262;0 +-75.7476806640625;22.20930671691895;0 +-75.74754333496094;22.28560066223145;0 +-75.74749755859375;22.24124717712402;0 +-75.74661254882812;22.21319389343262;0 +-75.74602508544922;23.48194885253906;0 +-75.74598693847656;22.25431823730469;0 +-75.74554443359375;22.27522277832031;0 +-75.74501800537109;22.27342414855957;0 +-75.74466705322266;23.48720359802246;0 +-75.74413299560547;23.48902893066406;0 +-75.74401092529297;23.5177173614502;0 +-75.74332427978516;24.67498779296875;0 +-75.74195098876953;22.20046424865723;0 +-75.74168395996094;22.21286964416504;0 +-75.74067687988281;22.23698234558105;0 +-75.74038696289062;22.1926212310791;0 +-75.738037109375;24.65810585021973;0 +-75.73786163330078;23.51438903808594;0 +-75.73731994628906;22.2091121673584;0 +-75.73716735839844;23.47719383239746;0 +-75.73703002929688;22.24587631225586;0 +-75.73635101318359;23.48061943054199;0 +-75.736328125;22.23253440856934;0 +-75.73600769042969;24.67595672607422;0 +-75.73526000976562;23.51961898803711;0 +-75.73471832275391;22.20377540588379;0 +-75.7342529296875;23.47392463684082;0 +-75.73410034179688;22.19796180725098;0 +-75.73388671875;23.51408576965332;0 +-75.73368835449219;22.19410514831543;0 +-75.73353576660156;22.21294784545898;0 +-75.73332977294922;23.5168285369873;0 +-75.73294830322266;23.00300598144531;0 +-75.73225402832031;22.23820114135742;0 +-75.73179626464844;24.64785575866699;0 +-75.73158264160156;22.21199035644531;0 +-75.73155212402344;22.17843627929688;0 +-75.73088073730469;24.6363582611084;0 +-75.73029327392578;22.99951171875;0 +-75.72927856445312;22.19241333007812;0 +-75.72883605957031;22.17861366271973;0 +-75.72857666015625;22.21400260925293;0 +-75.72832489013672;22.20250511169434;0 +-75.72829437255859;23.47312545776367;0 +-75.72817230224609;23.01761436462402;0 +-75.72805786132812;24.65556716918945;0 +-75.72750091552734;22.19490623474121;0 +-75.72679901123047;24.64505577087402;0 +-75.72665405273438;23.47366333007812;0 +-75.72618865966797;22.21028137207031;0 +-75.72592926025391;24.64243316650391;0 +-75.72588348388672;23.01986885070801;0 +-75.72579956054688;22.21670722961426;0 +-75.72579193115234;22.20567512512207;0 +-75.72544860839844;24.65022468566895;0 +-75.72531890869141;24.68074417114258;0 +-75.72377777099609;24.65592002868652;0 +-75.72377014160156;22.18472290039062;0 +-75.72261047363281;23.46324729919434;0 +-75.7215576171875;24.65448951721191;0 +-75.72088623046875;24.65171813964844;0 +-75.72076416015625;23.01563835144043;0 +-75.72042083740234;23.02022361755371;0 +-75.72019958496094;22.21292495727539;0 +-75.71905517578125;22.18601417541504;0 +-75.71854400634766;24.64569282531738;0 +-75.71805572509766;23.46306228637695;0 +-75.71776580810547;23.47660064697266;0 +-75.71743774414062;24.64062118530273;0 +-75.71701812744141;24.68948936462402;0 +-75.71511840820312;22.18524932861328;0 +-75.71410369873047;24.6430606842041;0 +-75.71389007568359;23.46000099182129;0 +-75.71369934082031;24.64833068847656;0 +-75.71197509765625;22.18220138549805;0 +-75.71152496337891;22.16863059997559;0 +-75.71125030517578;23.45582008361816;0 +-75.71113586425781;24.69301795959473;0 +-75.71068572998047;22.17321395874023;0 +-75.71012878417969;23.43858337402344;0 +-75.70881652832031;23.44177055358887;0 +-75.70866394042969;23.43717765808105;0 +-75.70860290527344;22.16696929931641;0 +-75.707763671875;22.18281173706055;0 +-75.70712280273438;22.17820167541504;0 +-75.70621490478516;22.18622779846191;0 +-75.70392608642578;23.43777656555176;0 +-75.70330810546875;23.45452117919922;0 +-75.70237731933594;24.69363975524902;0 +-75.70201110839844;23.44577407836914;0 +-75.70188903808594;23.47423553466797;0 +-75.70156860351562;24.69370079040527;0 +-75.70095062255859;22.17831611633301;0 +-75.70070648193359;22.16681861877441;0 +-75.70005035400391;24.63376617431641;0 +-75.69918060302734;23.44985389709473;0 +-75.69882202148438;23.43217277526855;0 +-75.69779968261719;23.44477653503418;0 +-75.69640350341797;23.44016075134277;0 +-75.69631958007812;22.17569732666016;0 +-75.69432067871094;23.43300437927246;0 +-75.69352722167969;22.1678295135498;0 +-75.69332885742188;23.47866439819336;0 +-75.69320678710938;23.47269439697266;0 +-75.69301605224609;23.43596458435059;0 +-75.6929931640625;23.44835662841797;0 +-75.6920166015625;22.15768814086914;0 +-75.69057464599609;23.47929954528809;0 +-75.69032287597656;23.4453239440918;0 +-75.68962860107422;22.16522789001465;0 +-75.68869781494141;23.43978500366211;0 +-75.68853759765625;22.15877151489258;0 +-75.68817138671875;23.4753532409668;0 +-75.68743133544922;23.4638614654541;0 +-75.68724822998047;22.16127586364746;0 +-75.68600463867188;23.43789672851562;0 +-75.68266296386719;23.45413017272949;0 +-75.67521667480469;24.68386840820312;0 +-75.67307281494141;23.46014785766602;0 +-75.67105102539062;23.43898963928223;0 +-75.66905212402344;24.67981338500977;0 +-75.66823577880859;23.46510314941406;0 +-75.66708374023438;23.47242736816406;0 +-75.66666412353516;24.61618232727051;0 +-75.665283203125;23.47491836547852;0 +-75.66525268554688;23.44232177734375;0 +-75.66411590576172;23.460205078125;0 +-75.66274261474609;24.67208290100098;0 +-75.66263580322266;23.44801139831543;0 +-75.66127777099609;23.4420166015625;0 +-75.66089630126953;23.43672943115234;0 +-75.66053771972656;23.47551536560059;0 +-75.65699768066406;23.46672439575195;0 +-75.65692138671875;23.44767189025879;0 +-75.65674591064453;23.4556999206543;0 +-75.65632629394531;23.45202255249023;0 +-75.65312957763672;23.43910598754883;0 +-75.65167236328125;23.4487190246582;0 +-75.65053558349609;23.46660232543945;0 +-75.64976501464844;24.66074180603027;0 +-75.64958190917969;23.4420223236084;0 +-75.64948272705078;23.46887588500977;0 +-75.64902496337891;23.44476699829102;0 +-75.64866638183594;23.46105766296387;0 +-75.6480712890625;23.45393180847168;0 +-75.64607238769531;23.46582794189453;0 +-75.64479827880859;23.45593070983887;0 +-75.644775390625;23.43435668945312;0 +-75.64445495605469;24.59428596496582;0 +-75.64421844482422;23.43686866760254;0 +-75.642822265625;23.43248176574707;0 +-75.64280700683594;23.46714210510254;0 +-75.64122772216797;23.43727111816406;0 +-75.64105224609375;24.53155326843262;0 +-75.64047241210938;24.52580642700195;0 +-75.63875579833984;23.44755363464355;0 +-75.63744354248047;24.58516120910645;0 +-75.63628387451172;24.58242416381836;0 +-75.63621520996094;23.46127891540527;0 +-75.63539123535156;23.44220733642578;0 +-75.63482666015625;23.43416404724121;0 +-75.63474273681641;23.43783569335938;0 +-75.6343994140625;24.57797050476074;0 +-75.63435363769531;24.54584312438965;0 +-75.63423919677734;24.65048408508301;0 +-75.63300323486328;23.46029663085938;0 +-75.63253021240234;24.56484413146973;0 +-75.63146209716797;23.42881965637207;0 +-75.62920379638672;24.64255714416504;0 +-75.6280517578125;23.42554092407227;0 +-75.6279296875;23.41980171203613;0 +-75.6263427734375;23.46039962768555;0 +-75.626220703125;23.41838836669922;0 +-75.62371826171875;23.41903114318848;0 +-75.62335968017578;23.43486022949219;0 +-75.62229919433594;23.42680740356445;0 +-75.62034606933594;24.63613319396973;0 +-75.619873046875;24.61019134521484;0 +-75.61980438232422;23.46050262451172;0 +-75.61970520019531;23.43134689331055;0 +-75.61963653564453;24.60698318481445;0 +-75.61872100830078;24.63173294067383;0 +-75.61827087402344;24.58834838867188;0 +-75.6136474609375;24.58341026306152;0 +-75.61336517333984;23.42571640014648;0 +-75.61265563964844;24.57443809509277;0 +-75.61145782470703;23.43302345275879;0 +-75.61134338378906;23.43807029724121;0 +-75.61014556884766;23.43598365783691;0 +-75.60954284667969;23.42977523803711;0 +-75.60951232910156;24.52892112731934;0 +-75.60678100585938;23.45290374755859;0 +-75.60474395751953;23.42164611816406;0 +-75.60045623779297;23.44658279418945;0 +-75.59799957275391;24.52771186828613;0 +-75.59699249267578;24.55270004272461;0 +-75.59679412841797;23.4212589263916;0 +-75.59159851074219;24.52364730834961;0 +-75.5849609375;24.54390144348145;0 +-75.58251190185547;23.42557334899902;0 +-75.58164215087891;24.51260948181152;0 +-75.58025360107422;23.42453384399414;0 +-75.57853698730469;24.53226280212402;0 +-75.57848358154297;24.50599479675293;0 +-75.57032012939453;24.48891258239746;0 +-75.5689697265625;23.41934013366699;0 +-75.5689697265625;24.52490425109863;0 +-75.56882476806641;24.48038482666016;0 +-75.56819152832031;23.4427375793457;0 +-75.56326293945312;24.51466178894043;0 +-75.55954742431641;23.43958473205566;0 +-75.55895233154297;23.41110801696777;0 +-75.55705261230469;24.49985122680664;0 +-75.55281829833984;24.46230316162109;0 +-75.54361724853516;24.46780204772949;0 +-75.54286956787109;24.4432315826416;0 +-75.53775787353516;23.41321563720703;0 +-75.53506469726562;24.41947937011719;0 +-75.53155517578125;24.15042495727539;0 +-75.52944946289062;24.14578247070312;0 +-75.52858734130859;23.41165542602539;0 +-75.52842712402344;24.15470314025879;0 +-75.52841949462891;24.39926147460938;0 +-75.52634429931641;23.42263031005859;0 +-75.5250244140625;24.14337539672852;0 +-75.52411651611328;24.39169311523438;0 +-75.52165985107422;24.13892555236816;0 +-75.51992034912109;24.15470886230469;0 +-75.51914978027344;24.38295745849609;0 +-75.51712036132812;24.42255210876465;0 +-75.51608276367188;23.40360260009766;0 +-75.5157470703125;24.37859535217285;0 +-75.51454162597656;24.1343822479248;0 +-75.51409149169922;23.40356254577637;0 +-75.51255035400391;23.40582847595215;0 +-75.50978851318359;24.41001892089844;0 +-75.50921630859375;24.12873649597168;0 +-75.50735473632812;23.40434455871582;0 +-75.50656127929688;23.40639686584473;0 +-75.50564575195312;24.36562728881836;0 +-75.50444793701172;23.40107536315918;0 +-75.49517822265625;24.12171745300293;0 +-75.49481964111328;23.39766883850098;0 +-75.49435424804688;24.16436195373535;0 +-75.49166107177734;24.38967704772949;0 +-75.49121856689453;24.12046432495117;0 +-75.48896789550781;24.1688060760498;0 +-75.48822784423828;24.38581848144531;0 +-75.48571014404297;24.3812370300293;0 +-75.48426818847656;23.40205001831055;0 +-75.48365020751953;23.39652633666992;0 +-75.48162078857422;24.17210006713867;0 +-75.48158264160156;24.37371253967285;0 +-75.47998809814453;23.40425682067871;0 +-75.47881317138672;24.1733570098877;0 +-75.47742462158203;24.33849906921387;0 +-75.47557067871094;23.39085388183594;0 +-75.47520446777344;24.32841682434082;0 +-75.47325134277344;24.31957626342773;0 +-75.47203063964844;23.40409851074219;0 +-75.47151184082031;24.31126976013184;0 +-75.47038269042969;23.38937187194824;0 +-75.47019195556641;24.12105560302734;0 +-75.46883392333984;24.31670570373535;0 +-75.46603393554688;24.30217742919922;0 +-75.46523284912109;24.11844635009766;0 +-75.46330261230469;24.117431640625;0 +-75.46293640136719;24.18509292602539;0 +-75.46201324462891;24.30252838134766;0 +-75.45845031738281;24.11271667480469;0 +-75.45824432373047;24.29485702514648;0 +-75.45790100097656;23.39118576049805;0 +-75.45611572265625;23.39321708679199;0 +-75.45568084716797;24.11333084106445;0 +-75.45504760742188;24.29293632507324;0 +-75.45365142822266;24.2929859161377;0 +-75.45357513427734;24.18851470947266;0 +-75.44949340820312;24.1191291809082;0 +-75.44633483886719;24.18786430358887;0 +-75.44466400146484;24.34451293945312;0 +-75.44377136230469;24.29332542419434;0 +-75.44365692138672;24.1297550201416;0 +-75.44345855712891;24.19191551208496;0 +-75.43614959716797;24.29656410217285;0 +-75.43439483642578;24.19350814819336;0 +-75.43412017822266;24.13890647888184;0 +-75.42965698242188;24.29593086242676;0 +-75.42951965332031;24.3399772644043;0 +-75.42800140380859;24.14241027832031;0 +-75.42471313476562;24.19898414611816;0 +-75.42385864257812;24.33541107177734;0 +-75.42018890380859;24.19955062866211;0 +-75.41970825195312;24.1437931060791;0 +-75.41880035400391;24.19607353210449;0 +-75.41656494140625;24.19555282592773;0 +-75.41590118408203;24.28753089904785;0 +-75.41426086425781;24.19709777832031;0 +-75.41217041015625;24.32597541809082;0 +-75.41211700439453;24.20162773132324;0 +-75.41017150878906;24.19997024536133;0 +-75.409912109375;24.27888298034668;0 +-75.40775299072266;24.14209365844727;0 +-75.4068603515625;24.20683670043945;0 +-75.40660858154297;24.20170974731445;0 +-75.40621948242188;24.19825744628906;0 +-75.40496063232422;24.14339637756348;0 +-75.40390014648438;24.13740348815918;0 +-75.40331268310547;24.3211498260498;0 +-75.40240478515625;24.13736343383789;0 +-75.40194702148438;24.14377403259277;0 +-75.40152740478516;24.21212577819824;0 +-75.39805603027344;24.3129768371582;0 +-75.39675903320312;24.21245384216309;0 +-75.39637756347656;24.20877075195312;0 +-75.39568328857422;24.22251892089844;0 +-75.39501953125;24.24337768554688;0 +-75.39389038085938;24.23164749145508;0 +-75.39190673828125;24.30699920654297;0 +-75.38931274414062;24.30448150634766;0 +-75.38316345214844;24.1446418762207;0 +-75.38166809082031;24.30083084106445;0 +-75.37590026855469;24.1449031829834;0 +-75.375244140625;24.28230285644531;0 +-75.36930847167969;24.147705078125;0 +-75.36205291748047;24.2720775604248;0 +-75.36080932617188;24.1474723815918;0 +-75.35457611083984;24.24778366088867;0 +-75.34889984130859;24.2373046875;0 +-75.34720611572266;24.15053939819336;0 +-75.34648895263672;23.61672401428223;0 +-75.34525299072266;23.61612510681152;0 +-75.3443603515625;23.62274551391602;0 +-75.34397888183594;23.67988204956055;0 +-75.34393310546875;23.63031005859375;0 +-75.34343719482422;23.68170547485352;0 +-75.34247589111328;24.23483467102051;0 +-75.34230041503906;23.67732238769531;0 +-75.34186553955078;23.60226821899414;0 +-75.34067535400391;23.59994888305664;0 +-75.34055328369141;23.66695785522461;0 +-75.33924102783203;23.68001365661621;0 +-75.33912658691406;23.66417503356934;0 +-75.33901977539062;24.15098762512207;0 +-75.33846282958984;23.60908317565918;0 +-75.33831024169922;23.61527633666992;0 +-75.33794403076172;23.67172431945801;0 +-75.33786010742188;23.67539405822754;0 +-75.33725738525391;23.62787437438965;0 +-75.33631134033203;23.61569213867188;0 +-75.336181640625;23.60031318664551;0 +-75.33596038818359;23.64047050476074;0 +-75.33489227294922;23.68451118469238;0 +-75.33333587646484;23.66657829284668;0 +-75.33285522460938;23.66757965087891;0 +-75.33266448974609;23.62227249145508;0 +-75.33229827880859;23.60643005371094;0 +-75.33217620849609;23.68353652954102;0 +-75.33216857910156;23.6117057800293;0 +-75.33202362060547;23.6693058013916;0 +-75.33193969726562;23.63166809082031;0 +-75.33184051513672;24.22307014465332;0 +-75.33101654052734;23.61833763122559;0 +-75.33041381835938;24.15145683288574;0 +-75.32921600341797;23.66167259216309;0 +-75.32865142822266;23.65408897399902;0 +-75.32843780517578;23.62172508239746;0 +-75.32814788818359;23.68528938293457;0 +-75.32777404785156;23.60816955566406;0 +-75.32776641845703;23.69055938720703;0 +-75.32767486572266;23.61207008361816;0 +-75.32729339599609;23.66897773742676;0 +-75.32719421386719;23.66300773620605;0 +-75.32691192626953;23.63339996337891;0 +-75.32672882080078;24.14929008483887;0 +-75.32604217529297;23.67950820922852;0 +-75.32593536376953;23.68409538269043;0 +-75.32448577880859;23.68199920654297;0 +-75.32431030273438;23.68934059143066;0 +-75.32422637939453;23.62094879150391;0 +-75.32382965087891;23.65789031982422;0 +-75.32313537597656;24.14460372924805;0 +-75.32184600830078;23.64706230163574;0 +-75.32109832763672;23.65737342834473;0 +-75.32087707519531;23.62546730041504;0 +-75.32029724121094;23.6596508026123;0 +-75.31990814208984;24.20530700683594;0 +-75.31986999511719;24.20522689819336;0 +-75.31985473632812;23.63669204711914;0 +-75.3189697265625;23.65328025817871;0 +-75.31848907470703;23.64148330688477;0 +-75.31710815429688;23.65728950500488;0 +-75.31684875488281;23.57580947875977;0 +-75.31647491455078;23.57052421569824;0 +-75.31546020507812;24.14209747314453;0 +-75.31490325927734;23.64553833007812;0 +-75.31462860107422;23.65700721740723;0 +-75.31398010253906;23.57070350646973;0 +-75.31378936767578;23.65056419372559;0 +-75.31229400634766;23.62987899780273;0 +-75.31036376953125;24.14315223693848;0 +-75.30940246582031;23.63624382019043;0 +-75.30859375;23.66950225830078;0 +-75.30765533447266;24.14371299743652;0 +-75.30624389648438;23.67381477355957;0 +-75.30616760253906;23.66670036315918;0 +-75.30586242675781;23.57695579528809;0 +-75.30542755126953;23.63570022583008;0 +-75.30429840087891;23.60010528564453;0 +-75.30291748046875;24.14312553405762;0 +-75.30288696289062;23.61705589294434;0 +-75.30287170410156;23.66892433166504;0 +-75.30278778076172;23.64184188842773;0 +-75.30200958251953;23.58169555664062;0 +-75.30197143554688;23.61027717590332;0 +-75.30178833007812;23.6110668182373;0 +-75.30124664306641;24.14102745056152;0 +-75.30056762695312;23.6408748626709;0 +-75.30014038085938;23.66840744018555;0 +-75.29873657226562;23.62385559082031;0 +-75.29856109619141;23.59011459350586;0 +-75.29764556884766;24.15146636962891;0 +-75.29752349853516;24.1551342010498;0 +-75.29619598388672;24.13467979431152;0 +-75.29603576660156;23.5916690826416;0 +-75.29545593261719;24.14957237243652;0 +-75.29361724853516;24.14252853393555;0 +-75.29190063476562;24.13593673706055;0 +-75.29006958007812;23.65415000915527;0 +-75.28713226318359;23.65000343322754;0 +-75.28601837158203;23.59398078918457;0 +-75.28060913085938;23.5706844329834;0 +-75.27785491943359;23.59151268005371;0 +-75.27640533447266;23.64036560058594;0 +-75.27555084228516;23.56146812438965;0 +-75.27508544921875;23.57240295410156;0 +-75.27452850341797;23.6357364654541;0 +-75.27445983886719;23.58777046203613;0 +-75.27321624755859;23.55721664428711;0 +-75.27284240722656;23.58268547058105;0 +-75.27134704589844;23.61294746398926;0 +-75.26643371582031;23.6002197265625;0 +-75.26344299316406;23.54943466186523;0 +-75.26209259033203;23.59439086914062;0 +-75.25452423095703;23.53753852844238;0 +-75.2545166015625;23.49736976623535;0 +-75.25304412841797;23.5875415802002;0 +-75.25285339355469;23.49434852600098;0 +-75.25267791748047;23.52142906188965;0 +-75.25174713134766;23.52898597717285;0 +-75.25003051757812;23.51770210266113;0 +-75.24954223632812;23.50736236572266;0 +-75.24891662597656;23.51239967346191;0 +-75.24610137939453;23.18312454223633;0 +-75.24542999267578;23.49235534667969;0 +-75.24430084228516;23.18561172485352;0 +-75.24318695068359;23.18053436279297;0 +-75.24250793457031;23.48976707458496;0 +-75.24117279052734;23.48331069946289;0 +-75.23648071289062;23.24077987670898;0 +-75.23429107666016;23.23866653442383;0 +-75.23330688476562;23.47923851013184;0 +-75.23317718505859;23.24346351623535;0 +-75.22894287109375;23.18367385864258;0 +-75.22836303710938;23.44791603088379;0 +-75.22835540771484;23.18733406066895;0 +-75.2276611328125;23.18548011779785;0 +-75.22628021240234;23.47151565551758;0 +-75.22586822509766;23.55826950073242;0 +-75.2255859375;23.17877769470215;0 +-75.22515869140625;23.45881843566895;0 +-75.22426605224609;23.18196487426758;0 +-75.223876953125;23.43817710876465;0 +-75.22347259521484;23.46456718444824;0 +-75.22324371337891;23.55385208129883;0 +-75.22321319580078;23.17436408996582;0 +-75.22249603271484;23.24323463439941;0 +-75.22233581542969;23.18331336975098;0 +-75.22209930419922;23.23932266235352;0 +-75.22080993652344;23.24113082885742;0 +-75.21981811523438;23.55055046081543;0 +-75.21693420410156;23.18708801269531;0 +-75.2156982421875;23.19670486450195;0 +-75.21408081054688;23.19184875488281;0 +-75.21340942382812;23.19895362854004;0 +-75.21232604980469;23.16856956481934;0 +-75.21205139160156;23.54305267333984;0 +-75.21145629882812;23.43722152709961;0 +-75.20972442626953;23.16718482971191;0 +-75.20849609375;23.19677925109863;0 +-75.20734405517578;23.20295333862305;0 +-75.20668792724609;23.19949531555176;0 +-75.20620727539062;23.40818214416504;0 +-75.205322265625;23.43387413024902;0 +-75.20445251464844;23.53829956054688;0 +-75.20430755615234;23.20541381835938;0 +-75.20306396484375;23.40444183349609;0 +-75.20110321044922;23.20419692993164;0 +-75.20097351074219;23.42850112915039;0 +-75.20048522949219;23.20110130310059;0 +-75.20034790039062;23.41356468200684;0 +-75.20025634765625;23.52673149108887;0 +-75.19867706298828;23.19197082519531;0 +-75.19837951660156;23.50236129760742;0 +-75.19794464111328;23.4201717376709;0 +-75.19711303710938;23.40362548828125;0 +-75.19480895996094;23.18775749206543;0 +-75.19419097900391;23.40126609802246;0 +-75.192138671875;23.48317527770996;0 +-75.19185638427734;23.47467422485352;0 +-75.19112396240234;23.18584060668945;0 +-75.19004058837891;23.15963935852051;0 +-75.18814849853516;23.46357727050781;0 +-75.18558502197266;23.39717674255371;0 +-75.18540954589844;23.40406036376953;0 +-75.18351745605469;23.40011405944824;0 +-75.18216705322266;23.39457702636719;0 +-75.18051147460938;23.39431953430176;0 +-75.17394256591797;23.18753242492676;0 +-75.17056274414062;23.43766212463379;0 +-75.16730499267578;23.1451358795166;0 +-75.16570281982422;23.18604850769043;0 +-75.16506958007812;23.39190864562988;0 +-75.16127014160156;23.42396545410156;0 +-75.1602783203125;23.38812446594238;0 +-75.15871429443359;23.1904125213623;0 +-75.15780639648438;23.18769645690918;0 +-75.1571044921875;23.19496917724609;0 +-75.15706634521484;23.35408020019531;0 +-75.15683746337891;23.3630313873291;0 +-75.15579986572266;23.38458633422852;0 +-75.15404510498047;23.13910293579102;0 +-75.15348815917969;23.13866424560547;0 +-75.15331268310547;23.35491943359375;0 +-75.15003204345703;23.41206169128418;0 +-75.14635467529297;23.19771957397461;0 +-75.14588165283203;23.36370849609375;0 +-75.14546966552734;23.3701286315918;0 +-75.14514923095703;23.38274765014648;0 +-75.14389801025391;23.19584655761719;0 +-75.14334106445312;23.40497589111328;0 +-75.14247894287109;23.38016510009766;0 +-75.14211273193359;23.1296558380127;0 +-75.1407470703125;23.2031078338623;0 +-75.13913726806641;23.2078914642334;0 +-75.13803863525391;23.19840049743652;0 +-75.13733673095703;23.23977088928223;0 +-75.13684844970703;23.22965621948242;0 +-75.13658905029297;23.24024772644043;0 +-75.13636016845703;23.36625480651855;0 +-75.13615417480469;23.22757530212402;0 +-75.13605499267578;23.25099182128906;0 +-75.13536071777344;23.24890899658203;0 +-75.13375091552734;23.23395156860352;0 +-75.1336669921875;23.36458778381348;0 +-75.13343048095703;23.12923431396484;0 +-75.13307952880859;23.21166229248047;0 +-75.13124084472656;23.22517013549805;0 +-75.13050079345703;23.21528053283691;0 +-75.12963104248047;23.22008323669434;0 +-75.12911987304688;23.25015068054199;0 +-75.12899780273438;23.24509811401367;0 +-75.12790679931641;23.24874687194824;0 +-75.12747192382812;23.35389137268066;0 +-75.12587738037109;23.12332916259766;0 +-75.12555694580078;23.83904266357422;0 +-75.12538146972656;23.26017189025879;0 +-75.12521362304688;23.84293365478516;0 +-75.12244415283203;23.31681632995605;0 +-75.12189483642578;23.31909942626953;0 +-75.12159729003906;23.11611175537109;0 +-75.12085723876953;23.31104278564453;0 +-75.12068176269531;23.36659812927246;0 +-75.11994171142578;23.82446098327637;0 +-75.11976623535156;23.8607120513916;0 +-75.11949920654297;23.29585838317871;0 +-75.11857604980469;23.26392364501953;0 +-75.11846160888672;23.86297607421875;0 +-75.11813354492188;23.85631561279297;0 +-75.11791229248047;23.31924247741699;0 +-75.11769866943359;23.31978416442871;0 +-75.11660766601562;23.29235076904297;0 +-75.11604309082031;23.32402229309082;0 +-75.11561584472656;23.30197143554688;0 +-75.11359405517578;23.10835456848145;0 +-75.11293792724609;23.81558990478516;0 +-75.10947418212891;23.81436538696289;0 +-75.10934448242188;23.29448509216309;0 +-75.10836791992188;23.85747718811035;0 +-75.10710906982422;23.2749195098877;0 +-75.10706329345703;23.83060455322266;0 +-75.10603332519531;23.85123252868652;0 +-75.10501098632812;23.10403251647949;0 +-75.1033935546875;23.29389381408691;0 +-75.10263061523438;23.83807754516602;0 +-75.10140991210938;23.28374671936035;0 +-75.10118865966797;23.34091186523438;0 +-75.10076904296875;23.28947257995605;0 +-75.09835815429688;23.1022777557373;0 +-75.09809112548828;23.33155250549316;0 +-75.09658813476562;23.84987449645996;0 +-75.09574127197266;23.84389114379883;0 +-75.09442138671875;23.84684371948242;0 +-75.09142303466797;23.29523468017578;0 +-75.08803558349609;23.3011302947998;0 +-75.08583068847656;23.22255516052246;0 +-75.08542633056641;23.24803352355957;0 +-75.08357238769531;23.29092788696289;0 +-75.08352661132812;23.2144947052002;0 +-75.08338928222656;23.09505271911621;0 +-75.07730102539062;23.2641544342041;0 +-75.07668304443359;23.26896095275879;0 +-75.07283782958984;23.17702865600586;0 +-75.06510162353516;23.1591739654541;0 +-75.06222534179688;23.15778923034668;0 +-75.06149291992188;23.15449905395508;0 +-75.05696868896484;23.08940887451172;0 +-75.0509033203125;23.14140129089355;0 +-75.03544616699219;23.08648681640625;0 +-75.03059387207031;23.12027549743652;0 +-75.02653503417969;23.08527755737305;0 +-75.01792144775391;23.11080169677734;0 +-75.01554107666016;23.11067199707031;0 +-75.01048278808594;23.11040306091309;0 +-75.00541687011719;23.08571434020996;0 +-75.00472259521484;23.11233901977539;0 +-75;23.08219337463379;0 +-75;23.11046600341797;0 +-74.99003601074219;23.07571792602539;0 +-74.98489379882812;23.11073875427246;0 +-74.97846984863281;23.07177925109863;0 +-74.97005462646484;23.07089614868164;0 +-74.96494293212891;23.06710433959961;0 +-74.96260833740234;23.10838890075684;0 +-74.95693206787109;23.10688018798828;0 +-74.95195007324219;23.05141639709473;0 +-74.95144653320312;23.09848594665527;0 +-74.94980621337891;23.67445755004883;0 +-74.94843292236328;23.67924499511719;0 +-74.94729614257812;23.09586143493652;0 +-74.94612121582031;23.68171691894531;0 +-74.94402313232422;23.65757179260254;0 +-74.94136047363281;23.65475463867188;0 +-74.94111633300781;23.09457206726074;0 +-74.93811798095703;23.6546802520752;0 +-74.93577575683594;23.09008407592773;0 +-74.93234252929688;23.02040100097656;0 +-74.92983245849609;23.68501281738281;0 +-74.92982482910156;23.0897159576416;0 +-74.92978668212891;23.65884971618652;0 +-74.92727661132812;23.68693161010742;0 +-74.92479705810547;23.09212684631348;0 +-74.92446136474609;23.68993759155273;0 +-74.92307281494141;23.65823554992676;0 +-74.92305755615234;23.69587326049805;0 +-74.91825866699219;23.66110610961914;0 +-74.91226196289062;23.66165542602539;0 +-74.91217803955078;22.98848342895508;0 +-74.90898132324219;23.07063102722168;0 +-74.90830993652344;23.69736671447754;0 +-74.90438842773438;23.066162109375;0 +-74.90345001220703;23.06560707092285;0 +-74.89730834960938;22.95092391967773;0 +-74.89460754394531;23.06042098999023;0 +-74.89426422119141;23.70331764221191;0 +-74.89419555664062;23.65687561035156;0 +-74.89393615722656;23.70345687866211;0 +-74.88822937011719;23.04832458496094;0 +-74.88770294189453;23.65741157531738;0 +-74.88470458984375;23.70370292663574;0 +-74.88130950927734;22.9039249420166;0 +-74.88092803955078;23.66160583496094;0 +-74.87984466552734;23.66227722167969;0 +-74.87979888916016;22.91008758544922;0 +-74.87897491455078;22.91305541992188;0 +-74.87675476074219;22.91254425048828;0 +-74.87500762939453;22.88540077209473;0 +-74.87480163574219;23.03078651428223;0 +-74.87306213378906;23.6641845703125;0 +-74.87297058105469;22.88741683959961;0 +-74.87288665771484;22.89040184020996;0 +-74.87136840820312;22.90070152282715;0 +-74.86940765380859;23.70701599121094;0 +-74.86869812011719;22.88961410522461;0 +-74.86825561523438;22.87834739685059;0 +-74.86660003662109;23.66357421875;0 +-74.86612701416016;22.8746223449707;0 +-74.86559295654297;23.70948028564453;0 +-74.86255645751953;23.7114429473877;0 +-74.85859680175781;22.86870193481445;0 +-74.85836791992188;23.65465927124023;0 +-74.85690307617188;22.85809516906738;0 +-74.85407257080078;22.85274314880371;0 +-74.85355377197266;22.98159217834473;0 +-74.85349273681641;23.71467399597168;0 +-74.85261535644531;22.9795036315918;0 +-74.85083770751953;23.00840187072754;0 +-74.84750366210938;23.00327110290527;0 +-74.84712219238281;22.99889755249023;0 +-74.84635925292969;22.9540901184082;0 +-74.84548950195312;22.85825729370117;0 +-74.84519195556641;22.97886848449707;0 +-74.84506988525391;22.94671058654785;0 +-74.84423828125;23.7158317565918;0 +-74.84372711181641;22.8593921661377;0 +-74.84271240234375;22.96800804138184;0 +-74.84226989746094;22.97673225402832;0 +-74.84192657470703;22.97098159790039;0 +-74.84168243408203;22.93445587158203;0 +-74.83885192871094;22.93829345703125;0 +-74.83849334716797;23.65235328674316;0 +-74.8369140625;23.71910285949707;0 +-74.83636474609375;22.92927742004395;0 +-74.83592224121094;22.91823768615723;0 +-74.83219146728516;22.86417007446289;0 +-74.83142852783203;23.65563201904297;0 +-74.83139801025391;22.91147041320801;0 +-74.83103179931641;23.65195083618164;0 +-74.82968139648438;23.71916198730469;0 +-74.82834625244141;23.65900039672852;0 +-74.82804870605469;23.65142059326172;0 +-74.82762908935547;23.63970565795898;0 +-74.82706451416016;22.87025260925293;0 +-74.82524871826172;23.71722030639648;0 +-74.82492828369141;22.87594223022461;0 +-74.82477569580078;23.65689659118652;0 +-74.82439422607422;23.65752792358398;0 +-74.82313537597656;23.63982772827148;0 +-74.82243347167969;23.65633773803711;0 +-74.82016754150391;23.64825057983398;0 +-74.81903076171875;23.66310501098633;0 +-74.81648254394531;23.66422653198242;0 +-74.81619262695312;23.64769554138184;0 +-74.81493377685547;23.72042083740234;0 +-74.81390380859375;23.64947509765625;0 +-74.81005096435547;23.71663093566895;0 +-74.80979919433594;23.66443061828613;0 +-74.8096923828125;23.64846038818359;0 +-74.80856323242188;23.65325355529785;0 +-74.80800628662109;23.66448593139648;0 +-74.80451202392578;23.71676635742188;0 +-74.80351257324219;23.64670753479004;0 +-74.80226135253906;23.65585899353027;0 +-74.80142211914062;23.65009880065918;0 +-74.80057525634766;23.71686363220215;0 +-74.79454803466797;23.65521430969238;0 +-74.79328918457031;23.65587043762207;0 +-74.79120635986328;23.71296882629395;0 +-74.79070281982422;23.66995239257812;0 +-74.78976440429688;23.67506790161133;0 +-74.78814697265625;23.70585441589355;0 +-74.78511810302734;23.69882392883301;0 +-74.78428649902344;23.69283676147461;0 +-74.56204223632812;23.95334434509277;0 +-74.56093597412109;23.94849967956543;0 +-74.55785369873047;23.95989227294922;0 +-74.55620574951172;23.94791984558105;0 +-74.55201721191406;23.96295738220215;0 +-74.54348754882812;23.95586013793945;0 +-74.54339599609375;23.97604751586914;0 +-74.53588104248047;24.06270790100098;0 +-74.53505706787109;24;0 +-74.53446960449219;24.05417060852051;0 +-74.53340148925781;24.0052661895752;0 +-74.53057861328125;24.08914375305176;0 +-74.52962493896484;24.08176803588867;0 +-74.52677917480469;24.01468086242676;0 +-74.52592468261719;24.03621864318848;0 +-74.52572631835938;24.09815788269043;0 +-74.52480316162109;24.02677345275879;0 +-74.52463531494141;23.9599723815918;0 +-74.51966094970703;23.95938873291016;0 +-74.51677703857422;23.95541572570801;0 +-74.51514434814453;24.11271667480469;0 +-74.51309204101562;23.9534854888916;0 +-74.51204681396484;24.1146354675293;0 +-74.50847625732422;24.11684989929199;0 +-74.50506591796875;24.12086486816406;0 +-74.50498962402344;23.95718002319336;0 +-74.50437164306641;23.9610652923584;0 +-74.49974822998047;24.12229156494141;0 +-74.49947357177734;23.95795822143555;0 +-74.49729156494141;23.95560836791992;0 +-74.49326324462891;23.95688056945801;0 +-74.49175262451172;23.96330451965332;0 +-74.49154663085938;23.96417999267578;0 +-74.4896240234375;23.97009658813477;0 +-74.48921966552734;23.96687507629395;0 +-74.48360443115234;23.97086143493652;0 +-74.48287963867188;23.95317649841309;0 +-74.48261260986328;23.96234703063965;0 +-74.48229217529297;23.97312164306641;0 +-74.48220062255859;23.96761322021484;0 +-74.48139190673828;23.98640632629395;0 +-74.47958374023438;23.95492935180664;0 +-74.47777557373047;24.12131690979004;0 +-74.47654724121094;23.98146438598633;0 +-74.47463226318359;23.97017288208008;0 +-74.47293853759766;23.98527145385742;0 +-74.47267150878906;24;0 +-74.47057342529297;23.97236442565918;0 +-74.46982574462891;23.99735260009766;0 +-74.46841430664062;23.97781562805176;0 +-74.46835327148438;24;0 +-74.46808624267578;23.98881912231445;0 +-74.46760559082031;24.12555885314941;0 +-74.46331024169922;23.99810218811035;0 +-74.46084594726562;24.12555885314941;0 +-74.45938873291016;24.00000190734863;0 +-74.45827484130859;24.12730598449707;0 +-74.45500946044922;24;0 +-74.45496368408203;24.13499450683594;0 +-74.45326232910156;24;0 +-74.45024108886719;24.01024627685547;0 +-74.44931030273438;24.12631225585938;0 +-74.44590759277344;24.12389945983887;0 +-74.44233703613281;24.11322402954102;0 +-74.44023895263672;24.0289478302002;0 +-74.43789672851562;24.10549926757812;0 +-74.43509674072266;24.08819580078125;0 +-74.43363952636719;24.05005836486816;0 +-74.43180847167969;24.05825614929199;0 +-74.43161773681641;24.03829002380371;0 +-74.42990112304688;24.07644462585449;0 +-74.42790222167969;24.06202125549316;0 +-74.4249267578125;24.06146049499512;0 +-74.42387390136719;24.06280136108398;0 +-73.20880126953125;20.9426155090332;0 +-73.20880126953125;28.44709968566895;0 +edge2=6742 +1;0;0 +0;7069;0 +7070;1;0 +3;2;0 +2;4;0 +6;3;0 +4;5;0 +5;7;0 +7;6;0 +8;9;0 +10;8;0 +9;11;0 +12;10;0 +11;13;0 +14;12;0 +13;15;0 +15;14;0 +16;17;0 +18;16;0 +17;19;0 +20;18;0 +19;22;0 +21;20;0 +23;21;0 +22;23;0 +24;25;0 +26;24;0 +25;27;0 +28;26;0 +27;29;0 +29;28;0 +31;30;0 +30;34;0 +35;31;0 +33;32;0 +32;38;0 +36;33;0 +34;43;0 +42;35;0 +41;36;0 +39;37;0 +37;45;0 +38;40;0 +44;39;0 +40;49;0 +54;41;0 +43;42;0 +52;44;0 +45;60;0 +47;46;0 +46;48;0 +51;47;0 +48;50;0 +49;53;0 +50;66;0 +58;51;0 +57;52;0 +53;55;0 +63;54;0 +55;61;0 +56;58;0 +59;56;0 +62;57;0 +65;59;0 +60;64;0 +61;75;0 +67;62;0 +84;63;0 +64;72;0 +66;65;0 +68;67;0 +78;68;0 +71;69;0 +69;77;0 +73;70;0 +70;79;0 +82;71;0 +72;85;0 +74;73;0 +91;74;0 +75;105;0 +79;76;0 +76;81;0 +77;87;0 +86;78;0 +80;82;0 +88;80;0 +81;86;0 +89;83;0 +83;92;0 +93;84;0 +85;94;0 +87;90;0 +90;88;0 +97;89;0 +92;91;0 +101;93;0 +94;96;0 +95;100;0 +102;95;0 +96;99;0 +100;97;0 +99;98;0 +98;107;0 +105;101;0 +104;102;0 +103;104;0 +106;103;0 +108;106;0 +107;108;0 +110;109;0 +109;111;0 +114;110;0 +111;112;0 +112;113;0 +113;115;0 +116;114;0 +115;117;0 +119;116;0 +117;118;0 +118;120;0 +121;119;0 +120;122;0 +123;121;0 +122;124;0 +125;123;0 +124;126;0 +128;125;0 +126;132;0 +127;129;0 +130;127;0 +131;128;0 +129;133;0 +135;130;0 +136;131;0 +132;134;0 +133;140;0 +134;144;0 +137;135;0 +149;136;0 +138;137;0 +142;138;0 +140;139;0 +139;141;0 +141;146;0 +145;142;0 +143;148;0 +150;143;0 +144;147;0 +151;145;0 +146;152;0 +147;150;0 +148;154;0 +158;149;0 +152;151;0 +153;155;0 +156;153;0 +154;156;0 +155;157;0 +157;160;0 +161;158;0 +160;159;0 +159;162;0 +163;161;0 +162;164;0 +174;163;0 +164;165;0 +165;166;0 +166;168;0 +168;167;0 +167;169;0 +169;170;0 +170;172;0 +172;171;0 +171;173;0 +173;175;0 +177;174;0 +175;176;0 +176;178;0 +179;177;0 +178;180;0 +191;179;0 +180;181;0 +181;183;0 +182;184;0 +187;182;0 +183;188;0 +184;190;0 +185;186;0 +189;185;0 +186;195;0 +190;187;0 +188;189;0 +246;191;0 +193;192;0 +192;194;0 +201;193;0 +194;199;0 +195;196;0 +196;208;0 +199;197;0 +197;203;0 +200;198;0 +198;214;0 +206;200;0 +217;201;0 +204;202;0 +202;205;0 +203;207;0 +210;204;0 +205;213;0 +212;206;0 +207;209;0 +208;223;0 +209;222;0 +216;210;0 +211;215;0 +241;211;0 +221;212;0 +213;225;0 +214;216;0 +215;224;0 +222;217;0 +219;218;0 +218;226;0 +239;219;0 +220;221;0 +229;220;0 +223;236;0 +224;232;0 +225;234;0 +226;230;0 +234;227;0 +227;238;0 +231;228;0 +228;237;0 +247;229;0 +230;243;0 +240;231;0 +232;242;0 +235;233;0 +233;264;0 +244;235;0 +236;248;0 +237;253;0 +238;251;0 +252;239;0 +257;240;0 +249;241;0 +242;249;0 +243;250;0 +251;244;0 +250;245;0 +245;252;0 +254;246;0 +248;247;0 +253;258;0 +269;254;0 +255;256;0 +260;255;0 +256;257;0 +258;263;0 +259;261;0 +262;259;0 +266;260;0 +261;265;0 +267;262;0 +263;272;0 +264;270;0 +265;279;0 +275;266;0 +271;267;0 +268;271;0 +274;268;0 +273;269;0 +270;276;0 +272;283;0 +294;273;0 +278;274;0 +276;275;0 +277;278;0 +280;277;0 +279;286;0 +281;280;0 +282;281;0 +288;282;0 +283;289;0 +284;287;0 +293;284;0 +285;290;0 +292;285;0 +286;288;0 +287;296;0 +289;297;0 +290;291;0 +291;295;0 +298;292;0 +299;293;0 +311;294;0 +295;306;0 +296;310;0 +297;302;0 +301;298;0 +303;299;0 +300;304;0 +320;300;0 +308;301;0 +302;307;0 +307;303;0 +304;308;0 +305;309;0 +314;305;0 +306;315;0 +309;317;0 +310;318;0 +321;311;0 +312;313;0 +316;312;0 +313;322;0 +319;314;0 +315;319;0 +318;316;0 +317;320;0 +325;321;0 +322;323;0 +323;324;0 +324;328;0 +330;325;0 +326;327;0 +328;326;0 +327;329;0 +329;332;0 +331;330;0 +342;331;0 +332;335;0 +333;334;0 +335;333;0 +334;337;0 +338;336;0 +336;339;0 +337;340;0 +343;338;0 +339;346;0 +340;341;0 +341;344;0 +348;342;0 +345;343;0 +344;349;0 +347;345;0 +346;347;0 +351;348;0 +349;350;0 +350;355;0 +361;351;0 +352;353;0 +354;352;0 +353;356;0 +358;354;0 +355;359;0 +356;357;0 +357;360;0 +362;358;0 +359;363;0 +360;364;0 +369;361;0 +365;362;0 +363;367;0 +364;366;0 +368;365;0 +366;370;0 +367;371;0 +370;368;0 +372;369;0 +371;373;0 +379;372;0 +373;375;0 +375;374;0 +374;381;0 +376;377;0 +378;376;0 +377;380;0 +384;378;0 +387;379;0 +380;382;0 +381;390;0 +382;392;0 +383;384;0 +385;383;0 +406;385;0 +386;388;0 +389;386;0 +395;387;0 +388;411;0 +391;389;0 +390;403;0 +400;391;0 +392;397;0 +394;393;0 +393;396;0 +398;394;0 +448;395;0 +396;399;0 +397;401;0 +399;398;0 +401;400;0 +402;405;0 +427;402;0 +403;412;0 +404;408;0 +414;404;0 +405;417;0 +421;406;0 +409;407;0 +407;415;0 +408;430;0 +410;409;0 +426;410;0 +411;420;0 +412;414;0 +416;413;0 +413;439;0 +415;423;0 +428;416;0 +417;422;0 +424;418;0 +418;428;0 +422;419;0 +419;424;0 +420;431;0 +423;421;0 +425;432;0 +434;425;0 +438;426;0 +431;427;0 +433;429;0 +429;435;0 +430;437;0 +432;442;0 +440;433;0 +436;434;0 +435;449;0 +441;436;0 +437;451;0 +444;438;0 +439;450;0 +442;440;0 +446;441;0 +443;444;0 +459;443;0 +445;447;0 +452;445;0 +456;446;0 +447;455;0 +460;448;0 +449;459;0 +450;453;0 +451;456;0 +454;452;0 +453;454;0 +455;457;0 +457;458;0 +458;461;0 +466;460;0 +461;464;0 +462;463;0 +464;462;0 +463;471;0 +467;465;0 +465;469;0 +479;466;0 +468;467;0 +471;468;0 +469;470;0 +470;472;0 +472;475;0 +473;474;0 +475;473;0 +474;476;0 +476;477;0 +477;478;0 +478;482;0 +505;479;0 +480;483;0 +487;480;0 +484;481;0 +481;493;0 +482;488;0 +483;490;0 +489;484;0 +485;486;0 +491;485;0 +486;503;0 +488;487;0 +492;489;0 +490;502;0 +495;491;0 +504;492;0 +493;494;0 +494;497;0 +498;495;0 +499;496;0 +496;500;0 +497;501;0 +507;498;0 +514;499;0 +500;524;0 +501;506;0 +502;514;0 +503;507;0 +513;504;0 +521;505;0 +506;508;0 +508;515;0 +511;509;0 +509;512;0 +510;516;0 +528;510;0 +534;511;0 +512;520;0 +518;513;0 +515;523;0 +516;525;0 +519;517;0 +517;526;0 +523;518;0 +539;519;0 +520;536;0 +561;521;0 +531;522;0 +522;532;0 +524;530;0 +525;531;0 +526;540;0 +527;533;0 +535;527;0 +538;528;0 +532;529;0 +529;544;0 +530;552;0 +533;537;0 +545;534;0 +543;535;0 +536;547;0 +537;553;0 +546;538;0 +553;539;0 +540;543;0 +541;548;0 +556;541;0 +542;546;0 +549;542;0 +544;549;0 +547;545;0 +548;567;0 +550;551;0 +555;550;0 +551;554;0 +552;557;0 +554;563;0 +560;555;0 +564;556;0 +557;581;0 +558;562;0 +572;558;0 +559;565;0 +568;559;0 +563;560;0 +577;561;0 +562;569;0 +566;564;0 +565;575;0 +573;566;0 +567;571;0 +570;568;0 +569;574;0 +576;570;0 +571;573;0 +585;572;0 +574;578;0 +575;579;0 +584;576;0 +601;577;0 +578;600;0 +579;582;0 +582;580;0 +580;588;0 +581;586;0 +586;583;0 +583;592;0 +595;584;0 +592;585;0 +587;589;0 +590;587;0 +588;593;0 +589;591;0 +598;590;0 +591;594;0 +593;596;0 +594;597;0 +596;595;0 +597;602;0 +609;598;0 +600;599;0 +599;603;0 +623;601;0 +602;611;0 +603;610;0 +604;605;0 +607;604;0 +605;606;0 +606;608;0 +612;607;0 +608;616;0 +620;609;0 +610;613;0 +611;617;0 +614;612;0 +613;619;0 +615;614;0 +618;615;0 +616;632;0 +617;626;0 +624;618;0 +619;627;0 +628;620;0 +621;625;0 +635;621;0 +631;622;0 +622;633;0 +639;623;0 +625;624;0 +626;630;0 +627;634;0 +629;628;0 +650;629;0 +630;636;0 +648;631;0 +632;635;0 +633;642;0 +634;637;0 +636;638;0 +637;641;0 +638;640;0 +645;639;0 +640;644;0 +641;643;0 +642;649;0 +643;646;0 +644;652;0 +653;645;0 +646;647;0 +647;656;0 +660;648;0 +649;661;0 +654;650;0 +652;651;0 +651;655;0 +662;653;0 +655;654;0 +656;657;0 +657;658;0 +658;659;0 +659;663;0 +669;660;0 +661;665;0 +666;662;0 +663;664;0 +664;668;0 +665;667;0 +672;666;0 +667;670;0 +668;671;0 +676;669;0 +670;683;0 +671;673;0 +708;672;0 +673;678;0 +675;674;0 +674;685;0 +689;675;0 +680;676;0 +679;677;0 +677;680;0 +678;687;0 +684;679;0 +681;682;0 +686;681;0 +682;690;0 +683;688;0 +691;684;0 +685;694;0 +703;686;0 +687;693;0 +688;689;0 +690;692;0 +695;691;0 +692;697;0 +693;699;0 +694;696;0 +701;695;0 +696;707;0 +697;700;0 +700;698;0 +698;702;0 +699;705;0 +714;701;0 +702;704;0 +709;703;0 +704;706;0 +705;712;0 +706;710;0 +707;711;0 +760;708;0 +711;709;0 +710;713;0 +712;722;0 +713;715;0 +754;714;0 +715;721;0 +716;717;0 +718;716;0 +717;724;0 +719;718;0 +725;719;0 +720;723;0 +726;720;0 +721;725;0 +722;729;0 +723;730;0 +724;733;0 +731;726;0 +728;727;0 +727;739;0 +734;728;0 +729;737;0 +730;735;0 +736;731;0 +732;738;0 +740;732;0 +733;734;0 +735;753;0 +741;736;0 +737;749;0 +738;742;0 +739;755;0 +743;740;0 +747;741;0 +742;750;0 +744;743;0 +750;744;0 +745;746;0 +751;745;0 +746;758;0 +756;747;0 +748;752;0 +755;748;0 +749;759;0 +757;751;0 +752;761;0 +753;756;0 +763;754;0 +758;757;0 +759;764;0 +789;760;0 +761;767;0 +762;766;0 +767;762;0 +765;763;0 +764;768;0 +772;765;0 +766;776;0 +768;775;0 +769;771;0 +773;769;0 +770;774;0 +778;770;0 +771;786;0 +793;772;0 +777;773;0 +774;780;0 +775;778;0 +776;781;0 +782;777;0 +780;779;0 +779;783;0 +781;782;0 +783;785;0 +787;784;0 +784;788;0 +785;792;0 +786;790;0 +795;787;0 +788;791;0 +803;789;0 +790;800;0 +791;796;0 +792;794;0 +843;793;0 +794;802;0 +797;795;0 +796;811;0 +799;797;0 +798;801;0 +804;798;0 +806;799;0 +800;828;0 +801;815;0 +802;809;0 +814;803;0 +810;804;0 +808;805;0 +805;820;0 +812;806;0 +813;807;0 +807;819;0 +818;808;0 +809;823;0 +821;810;0 +811;813;0 +817;812;0 +816;814;0 +815;822;0 +849;816;0 +825;817;0 +827;818;0 +819;832;0 +820;831;0 +824;821;0 +822;826;0 +823;829;0 +834;824;0 +835;825;0 +826;836;0 +839;827;0 +828;853;0 +829;833;0 +832;830;0 +830;837;0 +831;840;0 +833;846;0 +845;834;0 +837;835;0 +836;838;0 +838;844;0 +841;839;0 +840;841;0 +847;842;0 +842;848;0 +876;843;0 +844;852;0 +854;845;0 +846;847;0 +848;850;0 +858;849;0 +850;855;0 +852;851;0 +851;856;0 +853;854;0 +855;857;0 +856;859;0 +857;864;0 +902;858;0 +859;865;0 +862;860;0 +860;868;0 +866;861;0 +861;869;0 +863;862;0 +867;863;0 +864;870;0 +865;882;0 +871;866;0 +877;867;0 +868;878;0 +869;874;0 +870;872;0 +873;871;0 +872;880;0 +875;873;0 +874;875;0 +879;876;0 +885;877;0 +878;946;0 +891;879;0 +880;889;0 +881;883;0 +884;881;0 +882;906;0 +883;888;0 +901;884;0 +893;885;0 +887;886;0 +886;890;0 +900;887;0 +888;892;0 +889;897;0 +890;898;0 +925;891;0 +892;895;0 +895;893;0 +894;896;0 +898;894;0 +896;913;0 +897;905;0 +899;900;0 +907;899;0 +904;901;0 +959;902;0 +916;903;0 +903;919;0 +909;904;0 +905;914;0 +906;908;0 +911;907;0 +908;923;0 +949;909;0 +910;911;0 +915;910;0 +913;912;0 +912;918;0 +914;921;0 +930;915;0 +927;916;0 +917;920;0 +922;917;0 +918;955;0 +919;929;0 +920;924;0 +921;934;0 +958;922;0 +923;928;0 +924;935;0 +926;925;0 +938;926;0 +948;927;0 +928;951;0 +929;940;0 +937;930;0 +931;933;0 +941;931;0 +932;936;0 +942;932;0 +933;943;0 +934;941;0 +935;952;0 +936;944;0 +954;937;0 +956;938;0 +945;939;0 +939;979;0 +940;945;0 +960;942;0 +943;947;0 +944;980;0 +946;950;0 +947;953;0 +966;948;0 +961;949;0 +950;962;0 +951;957;0 +952;986;0 +953;963;0 +982;954;0 +955;981;0 +993;956;0 +957;967;0 +991;958;0 +1023;959;0 +968;960;0 +970;961;0 +962;969;0 +963;965;0 +964;970;0 +971;964;0 +965;972;0 +1002;966;0 +967;968;0 +969;971;0 +972;974;0 +973;978;0 +996;973;0 +974;976;0 +978;975;0 +975;982;0 +976;983;0 +985;977;0 +977;987;0 +979;1021;0 +980;994;0 +981;991;0 +983;989;0 +984;988;0 +990;984;0 +988;985;0 +986;1005;0 +987;1000;0 +989;1009;0 +994;990;0 +992;995;0 +998;992;0 +1026;993;0 +995;1006;0 +1003;996;0 +997;999;0 +1001;997;0 +1032;998;0 +999;1007;0 +1000;1001;0 +1012;1002;0 +1008;1003;0 +1004;1010;0 +1011;1004;0 +1005;1014;0 +1006;1020;0 +1007;1008;0 +1009;1011;0 +1010;1013;0 +1016;1012;0 +1013;1015;0 +1014;1022;0 +1015;1017;0 +1018;1016;0 +1017;1019;0 +1024;1018;0 +1019;1025;0 +1020;1028;0 +1021;1046;0 +1022;1024;0 +1036;1023;0 +1025;1030;0 +1038;1026;0 +1027;1029;0 +1034;1027;0 +1028;1035;0 +1029;1040;0 +1030;1047;0 +1031;1039;0 +1042;1031;0 +1053;1032;0 +1035;1033;0 +1033;1044;0 +1041;1034;0 +1037;1036;0 +1054;1037;0 +1043;1038;0 +1039;1048;0 +1040;1045;0 +1045;1041;0 +1056;1042;0 +1044;1043;0 +1046;1052;0 +1047;1058;0 +1048;1051;0 +1049;1050;0 +1055;1049;0 +1050;1063;0 +1051;1056;0 +1052;1069;0 +1067;1053;0 +1075;1054;0 +1060;1055;0 +1059;1057;0 +1057;1065;0 +1058;1061;0 +1070;1059;0 +1076;1060;0 +1061;1064;0 +1062;1066;0 +1068;1062;0 +1063;1077;0 +1064;1074;0 +1065;1068;0 +1066;1081;0 +1072;1067;0 +1069;1073;0 +1085;1070;0 +1073;1071;0 +1071;1078;0 +1082;1072;0 +1074;1088;0 +1131;1075;0 +1079;1076;0 +1077;1079;0 +1078;1089;0 +1080;1084;0 +1087;1080;0 +1081;1085;0 +1083;1082;0 +1086;1083;0 +1084;1094;0 +1091;1086;0 +1102;1087;0 +1088;1092;0 +1089;1098;0 +1090;1091;0 +1093;1090;0 +1092;1097;0 +1096;1093;0 +1094;1110;0 +1097;1095;0 +1095;1100;0 +1108;1096;0 +1098;1104;0 +1100;1099;0 +1099;1103;0 +1101;1105;0 +1107;1101;0 +1106;1102;0 +1103;1121;0 +1104;1111;0 +1105;1117;0 +1109;1106;0 +1115;1107;0 +1113;1108;0 +1118;1109;0 +1110;1114;0 +1111;1112;0 +1112;1116;0 +1117;1113;0 +1114;1120;0 +1122;1115;0 +1116;1142;0 +1119;1118;0 +1120;1119;0 +1121;1124;0 +1123;1122;0 +1127;1123;0 +1124;1126;0 +1125;1129;0 +1140;1125;0 +1126;1133;0 +1129;1127;0 +1130;1128;0 +1128;1141;0 +1132;1130;0 +1152;1131;0 +1134;1132;0 +1133;1143;0 +1145;1134;0 +1137;1135;0 +1135;1138;0 +1138;1136;0 +1136;1140;0 +1139;1137;0 +1144;1139;0 +1141;1148;0 +1142;1146;0 +1143;1157;0 +1147;1144;0 +1146;1145;0 +1155;1147;0 +1148;1149;0 +1149;1150;0 +1150;1154;0 +1151;1153;0 +1156;1151;0 +1165;1152;0 +1153;1158;0 +1154;1159;0 +1160;1155;0 +1168;1156;0 +1157;1164;0 +1158;1161;0 +1159;1162;0 +1167;1160;0 +1161;1171;0 +1162;1176;0 +1163;1166;0 +1181;1163;0 +1164;1173;0 +1169;1165;0 +1166;1180;0 +1178;1167;0 +1188;1168;0 +1190;1169;0 +1172;1170;0 +1170;1191;0 +1171;1174;0 +1189;1172;0 +1173;1186;0 +1174;1182;0 +1175;1179;0 +1183;1175;0 +1176;1185;0 +1180;1177;0 +1177;1199;0 +1193;1178;0 +1179;1184;0 +1202;1181;0 +1182;1187;0 +1192;1183;0 +1184;1208;0 +1185;1194;0 +1186;1207;0 +1187;1201;0 +1212;1188;0 +1219;1189;0 +1220;1190;0 +1191;1200;0 +1210;1192;0 +1198;1193;0 +1194;1197;0 +1196;1195;0 +1195;1203;0 +1204;1196;0 +1197;1209;0 +1205;1198;0 +1199;1206;0 +1200;1231;0 +1201;1204;0 +1213;1202;0 +1203;1214;0 +1211;1205;0 +1206;1215;0 +1207;1236;0 +1208;1210;0 +1209;1218;0 +1222;1211;0 +1225;1212;0 +1223;1213;0 +1214;1229;0 +1215;1222;0 +1216;1217;0 +1221;1216;0 +1217;1224;0 +1218;1247;0 +1233;1219;0 +1294;1220;0 +1230;1221;0 +1235;1223;0 +1224;1241;0 +1227;1225;0 +1226;1227;0 +1228;1226;0 +1238;1228;0 +1229;1237;0 +1249;1230;0 +1231;1232;0 +1232;1248;0 +1244;1233;0 +1234;1242;0 +1246;1234;0 +1263;1235;0 +1236;1258;0 +1237;1245;0 +1278;1238;0 +1239;1240;0 +1243;1239;0 +1240;1251;0 +1241;1249;0 +1242;1277;0 +1252;1243;0 +1260;1244;0 +1245;1255;0 +1251;1246;0 +1247;1257;0 +1248;1265;0 +1250;1253;0 +1254;1250;0 +1266;1252;0 +1253;1261;0 +1276;1254;0 +1255;1295;0 +1256;1259;0 +1262;1256;0 +1257;1270;0 +1258;1271;0 +1259;1281;0 +1279;1260;0 +1261;1264;0 +1273;1262;0 +1275;1263;0 +1264;1284;0 +1265;1290;0 +1270;1266;0 +1268;1267;0 +1267;1273;0 +1272;1268;0 +1269;1274;0 +1285;1269;0 +1271;1282;0 +1287;1272;0 +1274;1293;0 +1297;1275;0 +1280;1276;0 +1277;1285;0 +1289;1278;0 +1288;1279;0 +1300;1280;0 +1281;1301;0 +1282;1302;0 +1283;1286;0 +1291;1283;0 +1284;1307;0 +1286;1312;0 +1292;1287;0 +1310;1288;0 +1296;1289;0 +1290;1318;0 +1299;1291;0 +1298;1292;0 +1293;1311;0 +1316;1294;0 +1295;1306;0 +1322;1296;0 +1308;1297;0 +1305;1298;0 +1301;1299;0 +1314;1300;0 +1302;1303;0 +1303;1304;0 +1304;1321;0 +1319;1305;0 +1306;1325;0 +1307;1337;0 +1313;1308;0 +1309;1328;0 +1339;1309;0 +1320;1310;0 +1311;1353;0 +1312;1315;0 +1331;1313;0 +1358;1314;0 +1315;1323;0 +1328;1316;0 +1317;1335;0 +1372;1317;0 +1318;1333;0 +1340;1319;0 +1335;1320;0 +1321;1329;0 +1330;1322;0 +1323;1336;0 +1338;1324;0 +1324;1364;0 +1325;1330;0 +1333;1326;0 +1326;1334;0 +1327;1332;0 +1350;1327;0 +1329;1343;0 +1351;1331;0 +1332;1342;0 +1334;1400;0 +1336;1350;0 +1337;1355;0 +1357;1338;0 +1370;1339;0 +1348;1340;0 +1344;1341;0 +1341;1345;0 +1342;1344;0 +1343;1362;0 +1345;1380;0 +1346;1352;0 +1361;1346;0 +1359;1347;0 +1347;1360;0 +1354;1348;0 +1349;1356;0 +1369;1349;0 +1356;1351;0 +1352;1371;0 +1353;1354;0 +1355;1363;0 +1368;1357;0 +1394;1358;0 +1404;1359;0 +1360;1551;0 +1382;1361;0 +1362;1377;0 +1363;1376;0 +1364;1374;0 +1366;1365;0 +1365;1405;0 +1383;1366;0 +1367;1379;0 +1387;1367;0 +1374;1368;0 +1392;1369;0 +1414;1370;0 +1371;1385;0 +1390;1372;0 +1373;1381;0 +1389;1373;0 +1378;1375;0 +1375;1387;0 +1376;1393;0 +1377;1384;0 +1471;1378;0 +1379;1401;0 +1380;1395;0 +1381;1382;0 +1384;1383;0 +1385;1388;0 +1386;1391;0 +1406;1386;0 +1388;1398;0 +1398;1389;0 +1415;1390;0 +1391;1418;0 +1402;1392;0 +1393;1399;0 +1419;1394;0 +1395;1408;0 +1396;1397;0 +1413;1396;0 +1397;1424;0 +1399;1403;0 +1400;1407;0 +1401;1409;0 +1412;1402;0 +1403;1416;0 +1645;1404;0 +1405;1410;0 +1456;1406;0 +1407;1433;0 +1408;1417;0 +1409;1451;0 +1410;1440;0 +1411;1422;0 +1426;1411;0 +1460;1412;0 +1423;1413;0 +1434;1414;0 +1432;1415;0 +1416;1436;0 +1417;1435;0 +1418;1427;0 +1477;1419;0 +1425;1420;0 +1420;1426;0 +1421;1428;0 +1429;1421;0 +1422;1430;0 +1438;1423;0 +1424;1474;0 +1442;1425;0 +1427;1443;0 +1428;1445;0 +1464;1429;0 +1430;1452;0 +1431;1439;0 +1447;1431;0 +1446;1432;0 +1433;1441;0 +1466;1434;0 +1435;1442;0 +1436;1475;0 +1437;1444;0 +1455;1437;0 +1507;1438;0 +1439;1468;0 +1440;1480;0 +1441;1494;0 +1443;1454;0 +1444;1501;0 +1445;1490;0 +1457;1446;0 +1482;1447;0 +1450;1448;0 +1448;1453;0 +1458;1449;0 +1449;1471;0 +1523;1450;0 +1451;1457;0 +1452;1459;0 +1453;1462;0 +1454;1469;0 +1472;1455;0 +1469;1456;0 +1531;1458;0 +1459;1476;0 +1467;1460;0 +1461;1502;0 +1518;1461;0 +1462;1532;0 +1463;1465;0 +1485;1463;0 +1498;1464;0 +1465;1491;0 +1470;1466;0 +1479;1467;0 +1468;1527;0 +1481;1470;0 +1558;1472;0 +1473;1486;0 +1494;1473;0 +1474;1492;0 +1475;1485;0 +1476;1495;0 +1535;1477;0 +1478;1483;0 +1488;1478;0 +1542;1479;0 +1480;1509;0 +1534;1481;0 +1548;1482;0 +1483;1504;0 +1505;1484;0 +1484;1519;0 +1486;1508;0 +1499;1487;0 +1487;1537;0 +1525;1488;0 +1489;1500;0 +1503;1489;0 +1490;1520;0 +1491;1496;0 +1492;1557;0 +1497;1493;0 +1493;1511;0 +1495;1505;0 +1496;1512;0 +1524;1497;0 +1522;1498;0 +1568;1499;0 +1500;1516;0 +1501;1565;0 +1502;1561;0 +1550;1503;0 +1504;1547;0 +1506;1513;0 +1543;1506;0 +1539;1507;0 +1508;1528;0 +1509;1521;0 +1513;1510;0 +1510;1538;0 +1511;1591;0 +1512;1530;0 +1514;1525;0 +1553;1514;0 +1515;1517;0 +1529;1515;0 +1516;1552;0 +1517;1544;0 +1607;1518;0 +1519;1536;0 +1520;1526;0 +1521;1546;0 +1526;1522;0 +1559;1523;0 +1540;1524;0 +1527;1631;0 +1528;1531;0 +1564;1529;0 +1530;1578;0 +1532;1622;0 +1541;1533;0 +1533;1563;0 +1562;1534;0 +1602;1535;0 +1536;1556;0 +1537;1611;0 +1538;1567;0 +1586;1539;0 +1576;1540;0 +1593;1541;0 +1589;1542;0 +1592;1543;0 +1544;1566;0 +1545;1549;0 +1579;1545;0 +1546;1560;0 +1547;1554;0 +1660;1548;0 +1549;1569;0 +1577;1550;0 +1551;1583;0 +1552;1555;0 +1554;1553;0 +1555;1641;0 +1556;1599;0 +1557;1623;0 +1630;1558;0 +1573;1559;0 +1560;1584;0 +1561;1585;0 +1662;1562;0 +1563;1570;0 +1635;1564;0 +1565;1610;0 +1566;1590;0 +1567;1625;0 +1628;1568;0 +1569;1598;0 +1570;1617;0 +1571;1606;0 +1629;1571;0 +1572;1580;0 +1608;1572;0 +1632;1573;0 +1581;1574;0 +1574;1616;0 +1575;1596;0 +1601;1575;0 +1591;1576;0 +1619;1577;0 +1578;1594;0 +1598;1579;0 +1580;1581;0 +1587;1582;0 +1582;1614;0 +1583;1615;0 +1584;1618;0 +1585;1639;0 +1723;1586;0 +1613;1587;0 +1588;1621;0 +1684;1588;0 +1595;1589;0 +1590;1650;0 +1652;1592;0 +1599;1593;0 +1594;1649;0 +1626;1595;0 +1596;1604;0 +1600;1597;0 +1597;1620;0 +1648;1600;0 +1627;1601;0 +1636;1602;0 +1625;1603;0 +1603;1675;0 +1604;1608;0 +1609;1605;0 +1605;1624;0 +1606;1654;0 +1763;1607;0 +1616;1609;0 +1610;1644;0 +1611;1643;0 +1617;1612;0 +1612;1666;0 +1714;1613;0 +1614;1710;0 +1615;1690;0 +1618;1627;0 +1646;1619;0 +1620;1699;0 +1621;1687;0 +1622;1672;0 +1623;1659;0 +1624;1661;0 +1647;1626;0 +1642;1628;0 +1654;1629;0 +1697;1630;0 +1631;1657;0 +1708;1632;0 +1633;1634;0 +1665;1633;0 +1634;1653;0 +1681;1635;0 +1651;1636;0 +1637;1638;0 +1682;1637;0 +1638;1658;0 +1639;1674;0 +1640;1646;0 +1678;1640;0 +1641;1707;0 +1655;1642;0 +1643;1655;0 +1644;1678;0 +1806;1645;0 +1680;1647;0 +1686;1648;0 +1649;1669;0 +1650;1744;0 +1706;1651;0 +1691;1652;0 +1653;1679;0 +1657;1656;0 +1656;1670;0 +1658;1685;0 +1659;1715;0 +1694;1660;0 +1661;1761;0 +1720;1662;0 +1700;1663;0 +1663;1750;0 +1664;1668;0 +1671;1664;0 +1698;1665;0 +1666;1696;0 +1673;1667;0 +1667;1688;0 +1668;1791;0 +1669;1673;0 +1670;1717;0 +1692;1671;0 +1672;1719;0 +1674;1700;0 +1675;1724;0 +1676;1677;0 +1696;1676;0 +1677;1731;0 +1679;1712;0 +1699;1680;0 +1711;1681;0 +1701;1682;0 +1688;1683;0 +1683;1689;0 +1734;1684;0 +1685;1704;0 +1831;1686;0 +1687;1730;0 +1689;1783;0 +1690;1866;0 +1703;1691;0 +1726;1692;0 +1693;1695;0 +1713;1693;0 +1741;1694;0 +1695;1702;0 +1779;1697;0 +1712;1698;0 +1729;1701;0 +1702;1743;0 +1727;1703;0 +1704;1716;0 +1715;1705;0 +1705;1721;0 +1807;1706;0 +1707;1740;0 +1770;1708;0 +1725;1709;0 +1709;1768;0 +1710;1781;0 +1787;1711;0 +1718;1713;0 +1736;1714;0 +1716;1718;0 +1717;1760;0 +1719;1764;0 +1756;1720;0 +1721;1824;0 +1728;1722;0 +1722;1739;0 +1733;1723;0 +1724;1737;0 +1753;1725;0 +1782;1726;0 +1737;1727;0 +1799;1728;0 +1747;1729;0 +1730;1742;0 +1731;1749;0 +1745;1732;0 +1732;1759;0 +1759;1733;0 +1742;1734;0 +1735;1745;0 +1777;1735;0 +1798;1736;0 +1738;1746;0 +1751;1738;0 +1739;1755;0 +1740;1795;0 +1768;1741;0 +1743;1754;0 +1744;1767;0 +1746;1772;0 +1776;1747;0 +1748;1757;0 +1762;1748;0 +1749;1752;0 +1750;1763;0 +1801;1751;0 +1752;1774;0 +1785;1753;0 +1754;1771;0 +1755;1775;0 +1818;1756;0 +1757;1790;0 +1758;1813;0 +1851;1758;0 +1760;1778;0 +1761;1784;0 +1797;1762;0 +1764;1802;0 +1766;1765;0 +1765;1786;0 +1834;1766;0 +1767;1787;0 +1773;1769;0 +1769;1789;0 +1819;1770;0 +1771;1788;0 +1772;1801;0 +1780;1773;0 +1774;1862;0 +1775;1792;0 +1790;1776;0 +1809;1777;0 +1778;1812;0 +1845;1779;0 +1816;1780;0 +1781;1793;0 +1852;1782;0 +1783;1835;0 +1784;1814;0 +1794;1785;0 +1786;1836;0 +1788;1804;0 +1789;1815;0 +1791;1882;0 +1792;1821;0 +1793;1904;0 +1839;1794;0 +1795;1823;0 +1796;1800;0 +1812;1796;0 +1805;1797;0 +1858;1798;0 +1808;1799;0 +1800;1844;0 +1802;1837;0 +1826;1803;0 +1803;1828;0 +1804;1817;0 +1869;1805;0 +1885;1806;0 +1849;1807;0 +1833;1808;0 +1919;1809;0 +1815;1810;0 +1810;1829;0 +1820;1811;0 +1811;1822;0 +1813;1886;0 +1814;1818;0 +1832;1816;0 +1817;1838;0 +1856;1819;0 +1854;1820;0 +1821;1840;0 +1822;1846;0 +1823;1910;0 +1824;1958;0 +1825;1842;0 +1848;1825;0 +1855;1826;0 +1827;1872;0 +1890;1827;0 +1828;1912;0 +1829;1863;0 +1830;1847;0 +1881;1830;0 +1932;1831;0 +1850;1832;0 +1843;1833;0 +1857;1834;0 +1835;1907;0 +1836;1868;0 +1837;1841;0 +1838;1891;0 +1865;1839;0 +1840;1860;0 +1841;1859;0 +1842;1871;0 +1847;1843;0 +1844;1865;0 +1853;1845;0 +1846;1864;0 +1889;1848;0 +1901;1849;0 +1883;1850;0 +1906;1851;0 +1878;1852;0 +1908;1853;0 +1918;1854;0 +1920;1855;0 +1877;1856;0 +1870;1857;0 +1902;1858;0 +1859;1879;0 +1860;1873;0 +1861;1888;0 +1897;1861;0 +1862;1867;0 +1863;1944;0 +1864;1876;0 +1866;2017;0 +1867;1945;0 +1868;1903;0 +1876;1869;0 +1873;1870;0 +1871;1908;0 +1872;1898;0 +1896;1874;0 +1874;1901;0 +1875;1877;0 +1913;1875;0 +1880;1878;0 +1879;1914;0 +1937;1880;0 +1892;1881;0 +1882;2016;0 +1964;1883;0 +1888;1884;0 +1884;1900;0 +1947;1885;0 +1886;1915;0 +1887;1890;0 +1905;1887;0 +1952;1889;0 +1891;1895;0 +1940;1892;0 +1917;1893;0 +1893;1927;0 +1916;1894;0 +1894;1922;0 +1895;1924;0 +1935;1896;0 +1948;1897;0 +1898;1905;0 +1899;1906;0 +1909;1899;0 +1900;1911;0 +2001;1902;0 +1903;1962;0 +1904;1921;0 +1907;1984;0 +1925;1909;0 +1910;1943;0 +1911;1950;0 +1912;2021;0 +1914;1913;0 +1915;1954;0 +1969;1916;0 +1949;1917;0 +1927;1918;0 +1953;1919;0 +1939;1920;0 +1921;1960;0 +1922;1942;0 +1923;1928;0 +1931;1923;0 +1924;1929;0 +1934;1925;0 +1926;1963;0 +1975;1926;0 +1928;1998;0 +1929;1951;0 +1930;1935;0 +1965;1930;0 +1976;1931;0 +1956;1932;0 +1933;1934;0 +1988;1933;0 +1936;1940;0 +2002;1936;0 +1946;1937;0 +1938;1946;0 +1973;1938;0 +2009;1939;0 +1943;1941;0 +1941;1993;0 +1942;1959;0 +1944;2048;0 +1945;2071;0 +2019;1947;0 +1968;1948;0 +1974;1949;0 +1950;1955;0 +1951;1961;0 +1980;1952;0 +1982;1953;0 +1954;1965;0 +1955;1957;0 +1962;1956;0 +1957;1985;0 +1958;1983;0 +1959;1986;0 +1960;2001;0 +1961;1978;0 +1963;1981;0 +2063;1964;0 +1966;1967;0 +1997;1966;0 +1967;1994;0 +1981;1968;0 +1979;1969;0 +1972;1970;0 +1970;2000;0 +2042;1972;0 +1992;1973;0 +1996;1974;0 +2007;1975;0 +2025;1976;0 +1977;2002;0 +2058;1977;0 +1978;2037;0 +1986;1979;0 +2115;1980;0 +1983;1982;0 +1984;2029;0 +1985;1999;0 +1987;1995;0 +2027;1987;0 +2018;1988;0 +1989;1991;0 +2004;1989;0 +1990;2013;0 +2026;1990;0 +1991;2020;0 +2005;1992;0 +1993;1997;0 +1994;2087;0 +1995;2038;0 +2012;1996;0 +1998;2030;0 +1999;2011;0 +2000;2005;0 +2011;2004;0 +2006;2008;0 +2126;2006;0 +2024;2007;0 +2008;2179;0 +2046;2009;0 +2015;2010;0 +2010;2039;0 +2028;2012;0 +2013;2049;0 +2034;2014;0 +2014;2036;0 +2052;2015;0 +2016;2033;0 +2017;2128;0 +2050;2018;0 +2044;2019;0 +2020;2032;0 +2021;2022;0 +2022;2047;0 +2023;2031;0 +2067;2023;0 +2043;2024;0 +2065;2025;0 +2035;2026;0 +2041;2027;0 +2051;2028;0 +2029;2074;0 +2030;2077;0 +2031;2091;0 +2032;2057;0 +2033;2056;0 +2081;2034;0 +2122;2035;0 +2036;2086;0 +2037;2073;0 +2038;2107;0 +2039;2060;0 +2040;2058;0 +2069;2040;0 +2079;2041;0 +2097;2042;0 +2055;2043;0 +2112;2044;0 +2045;2053;0 +2094;2045;0 +2054;2046;0 +2047;2054;0 +2048;2096;0 +2049;2221;0 +2061;2050;0 +2068;2051;0 +2066;2052;0 +2053;2085;0 +2075;2055;0 +2056;2083;0 +2057;2098;0 +2059;2068;0 +2088;2059;0 +2060;2072;0 +2149;2061;0 +2062;2076;0 +2095;2062;0 +2099;2063;0 +2129;2064;0 +2064;2138;0 +2127;2065;0 +2072;2066;0 +2121;2067;0 +2110;2069;0 +2082;2070;0 +2070;2092;0 +2071;2146;0 +2073;2090;0 +2074;2158;0 +2080;2075;0 +2076;2117;0 +2077;2109;0 +2084;2079;0 +2100;2080;0 +2113;2081;0 +2135;2082;0 +2083;2097;0 +2124;2084;0 +2085;2123;0 +2086;2113;0 +2087;2111;0 +2102;2088;0 +2092;2089;0 +2089;2134;0 +2090;2116;0 +2091;2161;0 +2105;2093;0 +2093;2106;0 +2154;2094;0 +2182;2095;0 +2096;2165;0 +2098;2119;0 +2132;2099;0 +2119;2100;0 +2108;2101;0 +2101;2125;0 +2137;2102;0 +2103;2104;0 +2155;2103;0 +2104;2193;0 +2173;2105;0 +2106;2166;0 +2107;2124;0 +2114;2108;0 +2109;2127;0 +2152;2110;0 +2111;2140;0 +2157;2112;0 +2222;2114;0 +2183;2115;0 +2116;2168;0 +2117;2169;0 +2120;2141;0 +2195;2120;0 +2143;2121;0 +2185;2122;0 +2123;2167;0 +2125;2142;0 +2164;2126;0 +2128;2201;0 +2159;2129;0 +2131;2147;0 +2225;2131;0 +2180;2132;0 +2133;2135;0 +2170;2133;0 +2134;2163;0 +2153;2137;0 +2138;2189;0 +2140;2162;0 +2141;2145;0 +2142;2178;0 +2240;2143;0 +2145;2160;0 +2146;2177;0 +2147;2171;0 +2148;2152;0 +2184;2148;0 +2188;2149;0 +2197;2153;0 +2172;2154;0 +2176;2155;0 +2217;2157;0 +2158;2229;0 +2192;2159;0 +2160;2198;0 +2161;2181;0 +2162;2199;0 +2163;2170;0 +2179;2164;0 +2165;2180;0 +2166;2204;0 +2167;2172;0 +2168;2194;0 +2169;2200;0 +2171;2206;0 +2214;2173;0 +2174;2175;0 +2350;2174;0 +2175;2205;0 +2196;2176;0 +2177;2274;0 +2178;2202;0 +2181;2223;0 +2236;2182;0 +2220;2183;0 +2209;2184;0 +2336;2185;0 +2239;2188;0 +2189;2210;0 +2211;2192;0 +2193;2213;0 +2194;2247;0 +2215;2195;0 +2238;2196;0 +2233;2197;0 +2198;2219;0 +2199;2265;0 +2200;2218;0 +2201;2285;0 +2202;2228;0 +2204;2214;0 +2205;2334;0 +2206;2268;0 +2253;2209;0 +2210;2245;0 +2245;2211;0 +2213;2238;0 +2219;2215;0 +2246;2217;0 +2218;2237;0 +2242;2220;0 +2221;2281;0 +2244;2222;0 +2223;2240;0 +2326;2225;0 +2228;2244;0 +2229;2272;0 +2247;2233;0 +2234;2282;0 +2311;2234;0 +2261;2236;0 +2237;2248;0 +2259;2239;0 +2316;2242;0 +2305;2246;0 +2248;2300;0 +2255;2252;0 +2252;2263;0 +2289;2253;0 +2345;2255;0 +2262;2257;0 +2257;2290;0 +2286;2259;0 +2266;2261;0 +2296;2262;0 +2263;2315;0 +2271;2264;0 +2264;2289;0 +2265;2304;0 +2322;2266;0 +2267;2270;0 +2354;2267;0 +2268;2313;0 +2270;2327;0 +2324;2271;0 +2272;2286;0 +2274;2308;0 +2275;2295;0 +2299;2275;0 +2309;2278;0 +2278;2386;0 +2304;2279;0 +2279;2312;0 +2280;2339;0 +2361;2280;0 +2281;2302;0 +2282;2325;0 +2284;2288;0 +2294;2284;0 +2285;2450;0 +2288;2319;0 +2290;2353;0 +2295;2292;0 +2292;2303;0 +2355;2294;0 +2366;2296;0 +2297;2298;0 +2337;2297;0 +2298;2352;0 +2330;2299;0 +2300;2322;0 +2302;2309;0 +2303;2320;0 +2370;2305;0 +2308;2402;0 +2310;2317;0 +2349;2310;0 +2358;2311;0 +2312;2331;0 +2313;2343;0 +2315;2390;0 +2367;2316;0 +2317;2323;0 +2319;2398;0 +2320;2346;0 +2323;2378;0 +2342;2324;0 +2325;2349;0 +2331;2326;0 +2327;2379;0 +2328;2338;0 +2362;2328;0 +2363;2330;0 +2348;2332;0 +2332;2351;0 +2359;2333;0 +2333;2408;0 +2334;2375;0 +2368;2336;0 +2347;2337;0 +2338;2399;0 +2339;2382;0 +2340;2341;0 +2364;2340;0 +2341;2360;0 +2464;2342;0 +2343;2357;0 +2376;2345;0 +2346;2356;0 +2430;2347;0 +2404;2348;0 +2393;2350;0 +2351;2451;0 +2352;2397;0 +2353;2389;0 +2453;2354;0 +2405;2355;0 +2356;2395;0 +2357;2374;0 +2439;2358;0 +2387;2359;0 +2360;2416;0 +2382;2361;0 +2388;2362;0 +2391;2363;0 +2452;2364;0 +2383;2366;0 +2417;2367;0 +2456;2368;0 +2435;2370;0 +2371;2404;0 +2413;2371;0 +2374;2401;0 +2375;2407;0 +2414;2376;0 +2377;2385;0 +2409;2377;0 +2378;2400;0 +2379;2445;0 +2394;2381;0 +2381;2427;0 +2420;2383;0 +2385;2396;0 +2386;2424;0 +2412;2387;0 +2415;2388;0 +2389;2406;0 +2390;2503;0 +2438;2391;0 +2419;2393;0 +2448;2394;0 +2395;2440;0 +2396;2425;0 +2397;2458;0 +2398;2465;0 +2399;2442;0 +2400;2428;0 +2401;2437;0 +2402;2431;0 +2410;2405;0 +2406;2436;0 +2407;2419;0 +2408;2412;0 +2482;2409;0 +2418;2410;0 +2426;2413;0 +2446;2414;0 +2447;2415;0 +2416;2418;0 +2494;2417;0 +2436;2420;0 +2433;2423;0 +2423;2479;0 +2424;2477;0 +2425;2449;0 +2429;2426;0 +2427;2486;0 +2428;2454;0 +2432;2429;0 +2520;2430;0 +2431;2441;0 +2469;2432;0 +2441;2433;0 +2476;2435;0 +2437;2459;0 +2493;2438;0 +2492;2439;0 +2440;2444;0 +2442;2447;0 +2444;2457;0 +2445;2517;0 +2496;2446;0 +2455;2448;0 +2449;2471;0 +2450;2472;0 +2451;2489;0 +2480;2452;0 +2460;2453;0 +2454;2494;0 +2478;2455;0 +2650;2456;0 +2457;2515;0 +2458;2521;0 +2459;2473;0 +2470;2460;0 +2467;2461;0 +2461;2475;0 +2468;2462;0 +2462;2512;0 +2473;2463;0 +2463;2544;0 +2525;2464;0 +2465;2487;0 +2474;2467;0 +2490;2468;0 +2524;2469;0 +2491;2470;0 +2471;2557;0 +2472;2509;0 +2483;2474;0 +2475;2519;0 +2498;2476;0 +2477;2511;0 +2485;2478;0 +2479;2540;0 +2529;2480;0 +2481;2484;0 +2504;2481;0 +2486;2482;0 +2495;2483;0 +2484;2562;0 +2535;2485;0 +2487;2532;0 +2489;2550;0 +2522;2490;0 +2505;2491;0 +2564;2492;0 +2582;2493;0 +2523;2495;0 +2547;2496;0 +2507;2498;0 +2506;2499;0 +2499;2530;0 +2503;2547;0 +2510;2504;0 +2527;2505;0 +2568;2506;0 +2552;2507;0 +2508;2514;0 +2541;2508;0 +2509;2516;0 +2546;2510;0 +2511;2576;0 +2512;2553;0 +2514;2543;0 +2515;2538;0 +2516;2639;0 +2517;2559;0 +2519;2578;0 +2545;2520;0 +2521;2545;0 +2575;2522;0 +2651;2523;0 +2530;2524;0 +2533;2525;0 +2526;2527;0 +2570;2526;0 +2538;2528;0 +2528;2539;0 +2577;2529;0 +2532;2542;0 +2615;2533;0 +2534;2536;0 +2565;2534;0 +2560;2535;0 +2536;2598;0 +2539;2554;0 +2540;2607;0 +2542;2541;0 +2543;2612;0 +2544;2573;0 +2556;2546;0 +2563;2548;0 +2548;2566;0 +2579;2549;0 +2549;2582;0 +2550;2564;0 +2561;2551;0 +2551;2610;0 +2590;2552;0 +2553;2575;0 +2554;2571;0 +2587;2555;0 +2555;2597;0 +2602;2556;0 +2557;2572;0 +2559;2583;0 +2581;2560;0 +2687;2561;0 +2562;2662;0 +2574;2563;0 +2572;2565;0 +2566;2604;0 +2699;2568;0 +2571;2569;0 +2569;2579;0 +2591;2570;0 +2573;2630;0 +2585;2574;0 +2576;2701;0 +2595;2577;0 +2578;2601;0 +2584;2580;0 +2580;2623;0 +2606;2581;0 +2583;2596;0 +2603;2584;0 +2626;2585;0 +2586;2600;0 +2634;2586;0 +2646;2587;0 +2607;2589;0 +2589;2616;0 +2620;2590;0 +2596;2591;0 +2604;2593;0 +2593;2636;0 +2611;2595;0 +2597;2603;0 +2598;2606;0 +2600;2635;0 +2601;2647;0 +2657;2602;0 +2613;2605;0 +2605;2629;0 +2610;2687;0 +2715;2611;0 +2612;2731;0 +2722;2613;0 +2614;2621;0 +2654;2614;0 +2622;2615;0 +2616;2619;0 +2617;2625;0 +2636;2617;0 +2619;2634;0 +2672;2620;0 +2621;2671;0 +2648;2622;0 +2623;2661;0 +2625;2675;0 +2671;2626;0 +2632;2628;0 +2628;2660;0 +2629;2696;0 +2630;2702;0 +2644;2631;0 +2631;2663;0 +2669;2632;0 +2635;2649;0 +2641;2637;0 +2637;2652;0 +2658;2638;0 +2638;2682;0 +2639;2717;0 +2655;2640;0 +2640;2659;0 +2667;2641;0 +2695;2644;0 +2767;2646;0 +2647;2680;0 +2670;2648;0 +2649;2664;0 +2705;2650;0 +2694;2651;0 +2652;2720;0 +2697;2653;0 +2653;2758;0 +2683;2654;0 +2726;2655;0 +2759;2657;0 +2718;2658;0 +2659;2684;0 +2660;2707;0 +2661;2667;0 +2662;2676;0 +2663;2690;0 +2664;2681;0 +2666;2688;0 +2692;2666;0 +2681;2668;0 +2668;2683;0 +2676;2669;0 +2708;2670;0 +2679;2672;0 +2675;2685;0 +2698;2679;0 +2680;2713;0 +2682;2755;0 +2684;2727;0 +2685;2706;0 +2688;2749;0 +2693;2689;0 +2689;2704;0 +2690;2721;0 +2827;2692;0 +2766;2693;0 +2713;2694;0 +2700;2695;0 +2696;2714;0 +2707;2697;0 +2714;2698;0 +2773;2699;0 +2724;2700;0 +2701;2705;0 +2702;2743;0 +2704;2797;0 +2706;2732;0 +2729;2708;0 +2711;2712;0 +2842;2711;0 +2712;2844;0 +2769;2715;0 +2717;2763;0 +2746;2718;0 +2720;2736;0 +2721;2747;0 +2748;2722;0 +2739;2724;0 +2734;2725;0 +2725;2753;0 +2727;2726;0 +2741;2729;0 +2731;2826;0 +2732;2735;0 +2750;2734;0 +2735;2745;0 +2736;2760;0 +2747;2739;0 +2781;2741;0 +2757;2742;0 +2742;2765;0 +2743;2806;0 +2745;2744;0 +2744;2761;0 +2871;2746;0 +2824;2748;0 +2749;2804;0 +2822;2750;0 +2753;2785;0 +2755;2818;0 +2776;2757;0 +2758;2777;0 +2801;2759;0 +2760;2784;0 +2761;2772;0 +2764;2762;0 +2762;2779;0 +2763;2807;0 +2800;2764;0 +2765;2768;0 +2799;2766;0 +2782;2767;0 +2768;2790;0 +2880;2769;0 +2772;2783;0 +2795;2773;0 +2775;2793;0 +2808;2775;0 +2790;2776;0 +2777;2809;0 +2787;2778;0 +2778;2795;0 +2779;2833;0 +2834;2781;0 +2830;2782;0 +2783;2831;0 +2784;2816;0 +2785;2876;0 +2786;2794;0 +2816;2786;0 +2839;2787;0 +2811;2791;0 +2791;2861;0 +2793;2820;0 +2794;2825;0 +2797;2799;0 +2804;2798;0 +2798;2847;0 +2841;2800;0 +2837;2801;0 +2805;2829;0 +2852;2805;0 +2806;2865;0 +2807;2955;0 +2814;2808;0 +2809;2811;0 +2819;2812;0 +2812;2821;0 +2829;2814;0 +2818;2886;0 +2845;2819;0 +2820;2862;0 +2821;2916;0 +2864;2822;0 +2832;2823;0 +2823;2834;0 +2869;2824;0 +2825;2838;0 +2826;2830;0 +2848;2827;0 +2831;2859;0 +2859;2832;0 +2833;2853;0 +2874;2837;0 +2838;2857;0 +2855;2839;0 +2840;2863;0 +2870;2840;0 +2853;2841;0 +2897;2842;0 +2844;2894;0 +2898;2845;0 +2847;2866;0 +2866;2848;0 +2862;2852;0 +2867;2855;0 +2857;2922;0 +2861;2903;0 +2863;2892;0 +2878;2864;0 +2865;2885;0 +2872;2867;0 +2911;2869;0 +2915;2870;0 +2886;2871;0 +2881;2872;0 +2913;2874;0 +2876;2878;0 +2879;2884;0 +2900;2879;0 +2907;2880;0 +2890;2881;0 +2884;2909;0 +2885;2931;0 +2895;2890;0 +2892;2900;0 +2894;2914;0 +2917;2895;0 +2914;2897;0 +2919;2898;0 +2901;2902;0 +2905;2901;0 +2902;2923;0 +2903;2925;0 +2934;2905;0 +2912;2907;0 +2909;2930;0 +2963;2911;0 +2953;2912;0 +2933;2913;0 +2929;2915;0 +2916;2919;0 +2950;2917;0 +2922;2935;0 +2923;2954;0 +2935;2924;0 +2924;2944;0 +2925;2941;0 +2946;2929;0 +2930;2952;0 +2931;3021;0 +2957;2933;0 +2966;2934;0 +2936;2945;0 +2975;2936;0 +2940;2950;0 +2960;2940;0 +2941;2959;0 +2944;2969;0 +2945;2965;0 +2994;2946;0 +2952;2993;0 +2978;2953;0 +2954;2961;0 +2955;3007;0 +2986;2957;0 +2959;2973;0 +2982;2960;0 +2961;2966;0 +2971;2963;0 +2964;2975;0 +2991;2964;0 +2965;2996;0 +2969;2989;0 +2987;2971;0 +2973;3014;0 +2989;2978;0 +3002;2982;0 +2997;2986;0 +3013;2987;0 +3069;2991;0 +2993;3000;0 +3000;2994;0 +2996;3018;0 +3019;2997;0 +3030;3002;0 +3007;3073;0 +3008;3013;0 +3026;3008;0 +3014;3048;0 +3015;3035;0 +3049;3015;0 +3018;3056;0 +3027;3019;0 +3021;3031;0 +3029;3026;0 +3051;3027;0 +3047;3029;0 +3035;3030;0 +3031;3034;0 +3034;3037;0 +3037;3053;0 +3043;3040;0 +3040;3093;0 +3042;3052;0 +3058;3042;0 +3059;3043;0 +3054;3047;0 +3048;3055;0 +3057;3049;0 +3053;3050;0 +3050;3067;0 +3052;3051;0 +3066;3054;0 +3055;3068;0 +3056;3098;0 +3081;3057;0 +3079;3058;0 +3104;3059;0 +3070;3065;0 +3065;3075;0 +3124;3066;0 +3067;3077;0 +3068;3091;0 +3101;3069;0 +3096;3070;0 +3071;3074;0 +3087;3071;0 +3078;3072;0 +3072;3080;0 +3073;3097;0 +3074;3094;0 +3075;3085;0 +3077;3115;0 +3100;3078;0 +3080;3079;0 +3099;3081;0 +3084;3087;0 +3092;3084;0 +3085;3139;0 +3091;3104;0 +3108;3092;0 +3093;3149;0 +3094;3099;0 +3119;3096;0 +3097;3113;0 +3098;3102;0 +3105;3100;0 +3109;3101;0 +3102;3106;0 +3110;3105;0 +3106;3109;0 +3117;3108;0 +3112;3110;0 +3118;3112;0 +3113;3136;0 +3115;3148;0 +3127;3117;0 +3128;3118;0 +3125;3119;0 +3121;3120;0 +3120;3127;0 +3129;3121;0 +3159;3124;0 +3132;3125;0 +3131;3128;0 +3145;3129;0 +3133;3131;0 +3158;3132;0 +3135;3133;0 +3141;3135;0 +3136;3142;0 +3139;3144;0 +3144;3141;0 +3142;3165;0 +3154;3145;0 +3152;3147;0 +3147;3153;0 +3148;3154;0 +3149;3169;0 +3153;3150;0 +3150;3157;0 +3167;3152;0 +3161;3155;0 +3155;3166;0 +3157;3163;0 +3186;3158;0 +3168;3159;0 +3175;3161;0 +3163;3172;0 +3165;3183;0 +3166;3174;0 +3181;3167;0 +3179;3168;0 +3169;3182;0 +3172;3185;0 +3174;3180;0 +3180;3175;0 +3205;3179;0 +3185;3181;0 +3182;3188;0 +3183;3198;0 +3187;3184;0 +3184;3190;0 +3192;3186;0 +3201;3187;0 +3188;3199;0 +3190;3204;0 +3197;3192;0 +3193;3200;0 +3207;3193;0 +3203;3197;0 +3198;3206;0 +3199;3212;0 +3200;3209;0 +3214;3201;0 +3211;3203;0 +3204;3208;0 +3272;3205;0 +3206;3216;0 +3213;3207;0 +3208;3217;0 +3209;3227;0 +3218;3211;0 +3212;3213;0 +3215;3214;0 +3224;3215;0 +3216;3223;0 +3217;3224;0 +3231;3218;0 +3223;3222;0 +3222;3240;0 +3225;3241;0 +3268;3225;0 +3227;3230;0 +3230;3238;0 +3245;3231;0 +3246;3232;0 +3232;3257;0 +3233;3235;0 +3244;3233;0 +3235;3248;0 +3236;3237;0 +3243;3236;0 +3237;3311;0 +3238;3246;0 +3239;3243;0 +3250;3239;0 +3240;3244;0 +3241;3258;0 +3281;3245;0 +3247;3256;0 +3292;3247;0 +3248;3340;0 +3254;3249;0 +3249;3290;0 +3266;3250;0 +3251;3255;0 +3259;3251;0 +3260;3253;0 +3253;3267;0 +3302;3254;0 +3255;3276;0 +3256;3261;0 +3257;3283;0 +3258;3280;0 +3277;3259;0 +3287;3260;0 +3261;3265;0 +3262;3269;0 +3275;3262;0 +3273;3264;0 +3264;3275;0 +3265;3279;0 +3271;3266;0 +3267;3282;0 +3278;3268;0 +3269;3286;0 +3293;3271;0 +3296;3272;0 +3288;3273;0 +3276;3274;0 +3274;3284;0 +3295;3277;0 +3280;3278;0 +3279;3301;0 +3285;3281;0 +3282;3285;0 +3283;3329;0 +3284;3289;0 +3286;3291;0 +3304;3287;0 +3291;3288;0 +3289;3298;0 +3290;3306;0 +3314;3292;0 +3303;3293;0 +3313;3295;0 +3324;3296;0 +3298;3379;0 +3301;3303;0 +3310;3302;0 +3321;3304;0 +3312;3305;0 +3305;3322;0 +3306;3317;0 +3315;3310;0 +3311;3359;0 +3320;3312;0 +3318;3313;0 +3333;3314;0 +3317;3315;0 +3322;3318;0 +3326;3320;0 +3354;3321;0 +3343;3324;0 +3327;3326;0 +3334;3327;0 +3328;3337;0 +3346;3328;0 +3329;3362;0 +3332;3330;0 +3330;3360;0 +3345;3331;0 +3331;3355;0 +3363;3332;0 +3347;3333;0 +3344;3334;0 +3335;3336;0 +3374;3335;0 +3336;3338;0 +3337;3358;0 +3338;3365;0 +3341;3339;0 +3339;3348;0 +3340;3351;0 +3375;3341;0 +3353;3343;0 +3352;3344;0 +3356;3345;0 +3349;3346;0 +3350;3347;0 +3348;3387;0 +3361;3349;0 +3357;3350;0 +3351;3389;0 +3388;3352;0 +3384;3353;0 +3370;3354;0 +3355;3366;0 +3366;3356;0 +3383;3357;0 +3358;3371;0 +3359;3396;0 +3360;3401;0 +3397;3361;0 +3362;3404;0 +3371;3363;0 +3365;3378;0 +3367;3372;0 +3381;3367;0 +3394;3370;0 +3372;3400;0 +3378;3374;0 +3440;3375;0 +3379;3390;0 +3402;3381;0 +3433;3383;0 +3386;3384;0 +3391;3386;0 +3387;3410;0 +3412;3388;0 +3389;3391;0 +3390;3408;0 +3393;3392;0 +3392;3403;0 +3411;3393;0 +3426;3394;0 +3396;3419;0 +3418;3397;0 +3400;3398;0 +3398;3407;0 +3401;3405;0 +3414;3402;0 +3403;3420;0 +3404;3421;0 +3405;3443;0 +3407;3427;0 +3408;3412;0 +3410;3437;0 +3424;3411;0 +3429;3414;0 +3416;3415;0 +3415;3448;0 +3423;3416;0 +3428;3417;0 +3417;3434;0 +3431;3418;0 +3419;3450;0 +3420;3428;0 +3421;3426;0 +3446;3423;0 +3449;3424;0 +3427;3439;0 +3439;3429;0 +3441;3431;0 +3458;3433;0 +3434;3442;0 +3437;3444;0 +3444;3440;0 +3464;3441;0 +3442;3452;0 +3443;3470;0 +3448;3446;0 +3452;3449;0 +3450;3461;0 +3468;3458;0 +3460;3462;0 +3465;3460;0 +3461;3501;0 +3462;3485;0 +3463;3474;0 +3488;3463;0 +3506;3464;0 +3479;3465;0 +3482;3468;0 +3470;3473;0 +3476;3472;0 +3472;3477;0 +3473;3480;0 +3474;3483;0 +3484;3476;0 +3477;3481;0 +3490;3479;0 +3480;3489;0 +3481;3493;0 +3486;3482;0 +3483;3495;0 +3494;3484;0 +3485;3490;0 +3496;3486;0 +3498;3488;0 +3489;3491;0 +3491;3499;0 +3493;3494;0 +3495;3497;0 +3500;3496;0 +3497;3511;0 +3502;3498;0 +3499;3536;0 +3509;3500;0 +3501;3505;0 +3507;3502;0 +3503;3510;0 +3520;3503;0 +3504;3508;0 +3512;3504;0 +3505;3530;0 +3514;3506;0 +3516;3507;0 +3508;3513;0 +3515;3509;0 +3510;3520;0 +3511;3516;0 +3518;3512;0 +3513;3527;0 +3517;3514;0 +3519;3515;0 +3523;3517;0 +3524;3518;0 +3529;3519;0 +3521;3525;0 +3527;3521;0 +3522;3523;0 +3526;3522;0 +3525;3524;0 +3544;3526;0 +3528;3529;0 +3531;3528;0 +3530;3573;0 +3535;3531;0 +3532;3533;0 +3538;3532;0 +3533;3537;0 +3537;3534;0 +3534;3540;0 +3539;3535;0 +3536;3543;0 +3541;3538;0 +3540;3539;0 +3542;3541;0 +3548;3542;0 +3543;3552;0 +3545;3544;0 +3549;3545;0 +3546;3547;0 +3551;3546;0 +3547;3550;0 +3558;3548;0 +3553;3549;0 +3550;3567;0 +3556;3551;0 +3552;3565;0 +3562;3553;0 +3554;3555;0 +3561;3554;0 +3555;3560;0 +3563;3556;0 +3557;3561;0 +3569;3557;0 +3559;3558;0 +3570;3559;0 +3560;3568;0 +3577;3562;0 +3567;3563;0 +3564;3566;0 +3575;3564;0 +3565;3572;0 +3566;3571;0 +3568;3579;0 +3583;3569;0 +3582;3570;0 +3571;3578;0 +3572;3603;0 +3573;3574;0 +3574;3586;0 +3580;3575;0 +3576;3580;0 +3581;3576;0 +3604;3577;0 +3578;3587;0 +3579;3589;0 +3591;3581;0 +3593;3582;0 +3592;3583;0 +3584;3585;0 +3589;3584;0 +3585;3599;0 +3586;3638;0 +3587;3591;0 +3588;3590;0 +3594;3588;0 +3590;3597;0 +3596;3592;0 +3595;3593;0 +3598;3594;0 +3606;3595;0 +3599;3596;0 +3597;3605;0 +3600;3598;0 +3605;3600;0 +3602;3601;0 +3601;3614;0 +3612;3602;0 +3603;3609;0 +3627;3604;0 +3610;3606;0 +3608;3607;0 +3607;3610;0 +3613;3608;0 +3609;3650;0 +3615;3611;0 +3611;3622;0 +3618;3612;0 +3631;3613;0 +3614;3618;0 +3628;3615;0 +3616;3617;0 +3621;3616;0 +3617;3644;0 +3620;3619;0 +3619;3625;0 +3630;3620;0 +3641;3621;0 +3622;3626;0 +3624;3623;0 +3623;3632;0 +3625;3624;0 +3626;3633;0 +3636;3627;0 +3629;3628;0 +3635;3629;0 +3663;3630;0 +3639;3631;0 +3632;3634;0 +3633;3646;0 +3634;3642;0 +3655;3635;0 +3647;3636;0 +3645;3637;0 +3637;3654;0 +3638;3645;0 +3669;3639;0 +3640;3648;0 +3661;3640;0 +3649;3641;0 +3642;3652;0 +3643;3651;0 +3659;3643;0 +3644;3649;0 +3646;3658;0 +3653;3647;0 +3648;3656;0 +3650;3666;0 +3651;3707;0 +3652;3659;0 +3660;3653;0 +3654;3682;0 +3667;3655;0 +3656;3664;0 +3657;3662;0 +3670;3657;0 +3658;3660;0 +3664;3661;0 +3662;3665;0 +3699;3663;0 +3665;3702;0 +3666;3668;0 +3679;3667;0 +3668;3671;0 +3673;3669;0 +3676;3670;0 +3671;3685;0 +3672;3673;0 +3680;3672;0 +3675;3674;0 +3674;3681;0 +3684;3675;0 +3686;3676;0 +3678;3677;0 +3677;3683;0 +3696;3678;0 +3711;3679;0 +3698;3680;0 +3681;3687;0 +3682;3694;0 +3683;3695;0 +3689;3684;0 +3685;3718;0 +3700;3686;0 +3687;3697;0 +3693;3688;0 +3688;3714;0 +3690;3689;0 +3697;3690;0 +3703;3691;0 +3691;3704;0 +3692;3693;0 +3706;3692;0 +3694;3751;0 +3695;3701;0 +3701;3696;0 +3710;3698;0 +3721;3699;0 +3716;3700;0 +3702;3736;0 +3719;3703;0 +3704;3720;0 +3705;3708;0 +3715;3705;0 +3709;3706;0 +3707;3724;0 +3708;3727;0 +3750;3709;0 +3717;3710;0 +3742;3711;0 +3712;3713;0 +3731;3712;0 +3713;3777;0 +3714;3726;0 +3722;3715;0 +3730;3716;0 +3729;3717;0 +3718;3746;0 +3752;3719;0 +3720;3741;0 +3723;3721;0 +3733;3722;0 +3743;3723;0 +3724;3738;0 +3732;3725;0 +3725;3808;0 +3726;3745;0 +3727;3740;0 +3737;3728;0 +3728;3739;0 +3749;3729;0 +3736;3730;0 +3734;3731;0 +3763;3732;0 +3774;3733;0 +3738;3734;0 +3735;3744;0 +3753;3735;0 +3792;3737;0 +3739;3755;0 +3740;3781;0 +3741;3752;0 +3770;3742;0 +3765;3743;0 +3744;3747;0 +3745;3750;0 +3746;3764;0 +3747;3756;0 +3757;3748;0 +3748;3790;0 +3759;3749;0 +3751;3791;0 +3762;3753;0 +3754;3761;0 +3769;3754;0 +3755;3831;0 +3756;3772;0 +3773;3757;0 +3761;3758;0 +3758;3804;0 +3760;3759;0 +3767;3760;0 +3772;3762;0 +3777;3763;0 +3764;3824;0 +3822;3765;0 +3766;3775;0 +3783;3766;0 +3788;3767;0 +3771;3768;0 +3768;3809;0 +3782;3769;0 +3796;3770;0 +3815;3771;0 +3786;3773;0 +3784;3774;0 +3775;3795;0 +3776;3779;0 +3799;3776;0 +3780;3778;0 +3778;3797;0 +3779;3817;0 +3825;3780;0 +3781;3787;0 +3801;3782;0 +3802;3783;0 +3787;3784;0 +3785;3793;0 +3807;3785;0 +3789;3786;0 +3797;3788;0 +3810;3789;0 +3790;3798;0 +3791;3885;0 +3803;3792;0 +3793;3816;0 +3794;3805;0 +3837;3794;0 +3795;3800;0 +3823;3796;0 +3798;3813;0 +3811;3799;0 +3800;3802;0 +3814;3801;0 +3819;3803;0 +3804;3812;0 +3805;3806;0 +3806;3807;0 +3808;3818;0 +3809;3841;0 +3828;3810;0 +3838;3811;0 +3812;3820;0 +3813;3827;0 +3830;3814;0 +3834;3815;0 +3816;3840;0 +3817;3826;0 +3818;3833;0 +3820;3819;0 +3821;3838;0 +3839;3821;0 +3869;3822;0 +3842;3823;0 +3824;3857;0 +3836;3825;0 +3826;3837;0 +3827;3853;0 +3835;3828;0 +3829;3832;0 +3845;3829;0 +3851;3830;0 +3831;3836;0 +3832;3843;0 +3833;3844;0 +3849;3834;0 +3848;3835;0 +3858;3839;0 +3840;3846;0 +3841;3850;0 +3872;3842;0 +3843;3865;0 +3844;3847;0 +3856;3845;0 +3846;3867;0 +3847;3852;0 +3853;3848;0 +3880;3849;0 +3850;3854;0 +3863;3851;0 +3852;3855;0 +3854;3877;0 +3855;3859;0 +3862;3856;0 +3857;3895;0 +3867;3858;0 +3859;3873;0 +3861;3860;0 +3860;3881;0 +3868;3861;0 +3864;3862;0 +3889;3863;0 +3866;3864;0 +3865;3866;0 +3876;3868;0 +3870;3869;0 +3887;3870;0 +3874;3871;0 +3871;3878;0 +3882;3872;0 +3873;3884;0 +3879;3874;0 +3883;3875;0 +3875;3890;0 +3894;3876;0 +3877;3886;0 +3878;3892;0 +3899;3879;0 +3891;3880;0 +3881;3903;0 +3917;3882;0 +3888;3883;0 +3884;3911;0 +3885;3893;0 +3886;3901;0 +3953;3887;0 +3906;3888;0 +3920;3889;0 +3890;3922;0 +3910;3891;0 +3892;3902;0 +3893;3898;0 +3939;3894;0 +3895;3990;0 +3898;3896;0 +3896;3907;0 +3897;3906;0 +3927;3897;0 +3914;3899;0 +3900;3908;0 +3912;3900;0 +3901;3929;0 +3902;3982;0 +3903;3928;0 +3904;3905;0 +3915;3904;0 +3905;3954;0 +3907;3913;0 +3908;3918;0 +3909;3920;0 +3930;3909;0 +3962;3910;0 +3911;3936;0 +3932;3912;0 +3913;3998;0 +3934;3914;0 +3952;3915;0 +3916;3921;0 +3944;3916;0 +3956;3917;0 +3918;3980;0 +3919;3924;0 +3935;3919;0 +3921;3933;0 +3922;3942;0 +3923;3925;0 +3926;3923;0 +3924;3992;0 +3925;3941;0 +3947;3926;0 +3941;3927;0 +3928;3986;0 +3929;3949;0 +3978;3930;0 +3938;3931;0 +3931;3943;0 +3950;3932;0 +3933;3967;0 +3937;3934;0 +3997;3935;0 +3936;3964;0 +3945;3937;0 +3981;3938;0 +3994;3939;0 +3948;3940;0 +3940;4022;0 +3942;3947;0 +3943;3957;0 +3975;3944;0 +3983;3945;0 +3946;3951;0 +3987;3946;0 +3963;3948;0 +3949;3968;0 +3973;3950;0 +3951;3991;0 +3996;3952;0 +3954;3953;0 +3955;3958;0 +3961;3955;0 +3993;3956;0 +3957;3972;0 +3958;3960;0 +3959;3971;0 +4018;3959;0 +3960;4028;0 +3974;3961;0 +3968;3962;0 +4043;3963;0 +3964;3987;0 +3965;3975;0 +3984;3965;0 +3970;3966;0 +3966;3994;0 +3967;3969;0 +3969;4000;0 +3988;3970;0 +3971;4015;0 +3972;3985;0 +3980;3973;0 +4007;3974;0 +3985;3976;0 +3976;4008;0 +3989;3977;0 +3977;4006;0 +4001;3978;0 +3979;4003;0 +4117;3979;0 +4023;3981;0 +3982;4002;0 +3999;3983;0 +4013;3984;0 +3986;4004;0 +4017;3988;0 +4012;3989;0 +3990;4014;0 +3991;4038;0 +3992;4026;0 +4039;3993;0 +3995;4005;0 +4024;3995;0 +4036;3996;0 +4009;3997;0 +3998;4065;0 +4033;3999;0 +4000;4019;0 +4031;4001;0 +4002;4009;0 +4003;4030;0 +4004;4011;0 +4005;4060;0 +4006;4021;0 +4022;4007;0 +4008;4046;0 +4016;4010;0 +4010;4040;0 +4011;4042;0 +4020;4012;0 +4044;4013;0 +4014;4025;0 +4015;4027;0 +4069;4016;0 +4027;4017;0 +4050;4018;0 +4019;4024;0 +4072;4020;0 +4021;4067;0 +4041;4023;0 +4025;4048;0 +4026;4053;0 +4028;4092;0 +4035;4029;0 +4029;4045;0 +4030;4091;0 +4034;4031;0 +4037;4032;0 +4032;4077;0 +4045;4033;0 +4057;4034;0 +4075;4035;0 +4052;4036;0 +4097;4037;0 +4038;4112;0 +4125;4039;0 +4040;4059;0 +4051;4041;0 +4042;4050;0 +4116;4043;0 +4062;4044;0 +4046;4051;0 +4049;4047;0 +4047;4079;0 +4048;4150;0 +4054;4049;0 +4058;4052;0 +4053;4111;0 +4073;4054;0 +4076;4055;0 +4055;4088;0 +4079;4056;0 +4056;4081;0 +4083;4057;0 +4070;4058;0 +4059;4066;0 +4060;4082;0 +4061;4070;0 +4084;4061;0 +4078;4062;0 +4063;4074;0 +4090;4063;0 +4064;4071;0 +4080;4064;0 +4065;4099;0 +4066;4130;0 +4067;4085;0 +4068;4072;0 +4085;4068;0 +4087;4069;0 +4071;4114;0 +4100;4073;0 +4074;4083;0 +4120;4075;0 +4086;4076;0 +4077;4109;0 +4103;4078;0 +4106;4080;0 +4081;4101;0 +4082;4086;0 +4094;4084;0 +4129;4087;0 +4088;4102;0 +4095;4089;0 +4089;4107;0 +4122;4090;0 +4091;4127;0 +4092;4096;0 +4093;4098;0 +4110;4093;0 +4137;4094;0 +4142;4095;0 +4096;4136;0 +4164;4097;0 +4098;4128;0 +4099;4146;0 +4143;4100;0 +4101;4113;0 +4102;4148;0 +4135;4103;0 +4104;4105;0 +4136;4104;0 +4105;4139;0 +4133;4106;0 +4107;4162;0 +4115;4108;0 +4108;4138;0 +4109;4190;0 +4159;4110;0 +4111;4121;0 +4112;4160;0 +4113;4137;0 +4114;4123;0 +4131;4115;0 +4187;4116;0 +4147;4117;0 +4118;4126;0 +4167;4118;0 +4119;4124;0 +4153;4119;0 +4154;4120;0 +4121;4226;0 +4149;4122;0 +4123;4144;0 +4124;4141;0 +4134;4125;0 +4126;4185;0 +4127;4147;0 +4128;4157;0 +4139;4129;0 +4130;4151;0 +4155;4131;0 +4132;4145;0 +4161;4132;0 +4156;4133;0 +4166;4134;0 +4144;4135;0 +4138;4186;0 +4140;4165;0 +4193;4140;0 +4141;4207;0 +4152;4142;0 +4183;4143;0 +4145;4202;0 +4146;4154;0 +4148;4168;0 +4174;4149;0 +4150;4216;0 +4151;4169;0 +4158;4152;0 +4184;4153;0 +4215;4155;0 +4175;4156;0 +4157;4195;0 +4180;4158;0 +4179;4159;0 +4160;4200;0 +4203;4161;0 +4162;4178;0 +4163;4171;0 +4177;4163;0 +4176;4164;0 +4165;4221;0 +4219;4166;0 +4192;4167;0 +4168;4245;0 +4169;4229;0 +4170;4203;0 +4231;4170;0 +4171;4206;0 +4182;4172;0 +4172;4204;0 +4173;4188;0 +4194;4173;0 +4253;4174;0 +4196;4175;0 +4190;4176;0 +4199;4177;0 +4178;4191;0 +4195;4179;0 +4189;4180;0 +4186;4181;0 +4181;4205;0 +4217;4182;0 +4235;4183;0 +4197;4184;0 +4185;4192;0 +4202;4187;0 +4188;4320;0 +4233;4189;0 +4191;4213;0 +4335;4193;0 +4227;4194;0 +4204;4196;0 +4200;4197;0 +4201;4198;0 +4198;4217;0 +4210;4199;0 +4211;4201;0 +4205;4212;0 +4206;4237;0 +4207;4251;0 +4225;4208;0 +4208;4228;0 +4212;4209;0 +4209;4223;0 +4214;4210;0 +4242;4211;0 +4213;4225;0 +4236;4214;0 +4223;4215;0 +4216;4230;0 +4222;4218;0 +4218;4261;0 +4230;4219;0 +4232;4220;0 +4220;4321;0 +4221;4255;0 +4252;4222;0 +4224;4244;0 +4249;4224;0 +4226;4275;0 +4263;4227;0 +4228;4241;0 +4229;4236;0 +4297;4231;0 +4243;4232;0 +4240;4233;0 +4234;4238;0 +4295;4234;0 +4289;4235;0 +4237;4247;0 +4238;4347;0 +4250;4239;0 +4239;4260;0 +4254;4240;0 +4241;4272;0 +4266;4242;0 +4273;4243;0 +4244;4323;0 +4245;4267;0 +4246;4248;0 +4257;4246;0 +4247;4294;0 +4248;4265;0 +4280;4249;0 +4277;4250;0 +4251;4298;0 +4274;4252;0 +4276;4253;0 +4260;4254;0 +4255;4269;0 +4256;4279;0 +4305;4256;0 +4307;4257;0 +4258;4262;0 +4318;4258;0 +4259;4286;0 +4313;4259;0 +4261;4293;0 +4262;4264;0 +4270;4263;0 +4264;4284;0 +4265;4313;0 +4283;4266;0 +4267;4299;0 +4268;4271;0 +4290;4268;0 +4269;4306;0 +4301;4270;0 +4271;4288;0 +4272;4291;0 +4316;4273;0 +4303;4274;0 +4275;4312;0 +4278;4276;0 +4340;4277;0 +4282;4278;0 +4279;4311;0 +4359;4280;0 +4281;4290;0 +4333;4281;0 +4304;4282;0 +4292;4283;0 +4284;4377;0 +4302;4285;0 +4285;4308;0 +4286;4292;0 +4327;4287;0 +4287;4328;0 +4288;4317;0 +4339;4289;0 +4291;4300;0 +4293;4301;0 +4294;4326;0 +4349;4295;0 +4299;4296;0 +4296;4309;0 +4329;4297;0 +4298;4375;0 +4300;4315;0 +4325;4302;0 +4308;4303;0 +4319;4304;0 +4324;4305;0 +4306;4391;0 +4343;4307;0 +4309;4353;0 +4314;4310;0 +4310;4350;0 +4311;4336;0 +4312;4354;0 +4355;4314;0 +4315;4381;0 +4338;4316;0 +4317;4340;0 +4346;4318;0 +4332;4319;0 +4320;4352;0 +4321;4338;0 +4334;4322;0 +4322;4357;0 +4323;4370;0 +4396;4324;0 +4376;4325;0 +4326;4345;0 +4360;4327;0 +4328;4342;0 +4345;4329;0 +4330;4341;0 +4344;4330;0 +4351;4331;0 +4331;4380;0 +4365;4332;0 +4348;4333;0 +4337;4334;0 +4347;4335;0 +4336;4371;0 +4358;4337;0 +4485;4339;0 +4341;4382;0 +4342;4351;0 +4362;4343;0 +4405;4344;0 +4424;4346;0 +4364;4348;0 +4389;4349;0 +4350;4444;0 +4352;4361;0 +4353;4383;0 +4354;4393;0 +4392;4355;0 +4361;4356;0 +4356;4369;0 +4357;4368;0 +4455;4358;0 +4386;4359;0 +4380;4360;0 +4363;4362;0 +4383;4363;0 +4368;4364;0 +4378;4365;0 +4373;4366;0 +4366;4403;0 +4367;4388;0 +4413;4367;0 +4369;4384;0 +4370;4452;0 +4371;4374;0 +4372;4379;0 +4397;4372;0 +4410;4373;0 +4374;4378;0 +4375;4481;0 +4400;4376;0 +4377;4430;0 +4379;4404;0 +4381;4390;0 +4382;4434;0 +4384;4385;0 +4385;4409;0 +4404;4386;0 +4387;4395;0 +4427;4387;0 +4388;4554;0 +4402;4389;0 +4390;4441;0 +4391;4457;0 +4425;4392;0 +4393;4421;0 +4394;4402;0 +4434;4394;0 +4395;4429;0 +4436;4396;0 +4415;4397;0 +4409;4398;0 +4398;4446;0 +4399;4408;0 +4414;4399;0 +4426;4400;0 +4401;4416;0 +4417;4401;0 +4403;4453;0 +4515;4405;0 +4454;4406;0 +4406;4461;0 +4407;4415;0 +4419;4407;0 +4408;4440;0 +4468;4410;0 +4422;4411;0 +4411;4432;0 +4435;4412;0 +4412;4439;0 +4493;4413;0 +4451;4414;0 +4416;4464;0 +4487;4417;0 +4429;4418;0 +4418;4431;0 +4447;4419;0 +4420;4438;0 +4499;4420;0 +4421;4467;0 +4469;4422;0 +4423;4425;0 +4531;4423;0 +4430;4424;0 +4475;4426;0 +4432;4427;0 +4442;4428;0 +4428;4492;0 +4431;4474;0 +4438;4433;0 +4433;4463;0 +4445;4435;0 +4458;4436;0 +4448;4437;0 +4437;4450;0 +4439;4472;0 +4440;4489;0 +4441;4455;0 +4479;4442;0 +4462;4443;0 +4443;4478;0 +4444;4456;0 +4449;4445;0 +4446;4475;0 +4505;4447;0 +4501;4448;0 +4476;4449;0 +4450;4502;0 +4488;4451;0 +4452;4497;0 +4453;4468;0 +4478;4454;0 +4456;4486;0 +4457;4465;0 +4551;4458;0 +4459;4471;0 +4484;4459;0 +4466;4460;0 +4460;4490;0 +4461;4494;0 +4519;4462;0 +4463;4520;0 +4464;4559;0 +4465;4507;0 +4525;4466;0 +4467;4516;0 +4477;4469;0 +4510;4470;0 +4470;4521;0 +4471;4506;0 +4472;4483;0 +4473;4477;0 +4495;4473;0 +4474;4495;0 +4498;4476;0 +4517;4479;0 +4480;4503;0 +4508;4480;0 +4481;4510;0 +4482;4491;0 +4504;4482;0 +4483;4498;0 +4524;4484;0 +4511;4485;0 +4486;4525;0 +4509;4487;0 +4512;4488;0 +4489;4538;0 +4490;4522;0 +4491;4531;0 +4492;4517;0 +4500;4493;0 +4494;4504;0 +4507;4496;0 +4496;4544;0 +4497;4523;0 +4542;4499;0 +4615;4500;0 +4506;4501;0 +4502;4514;0 +4503;4558;0 +4540;4505;0 +4529;4508;0 +4528;4509;0 +4530;4511;0 +4535;4512;0 +4520;4513;0 +4513;4532;0 +4514;4534;0 +4550;4515;0 +4516;4555;0 +4518;4536;0 +4541;4518;0 +4565;4519;0 +4521;4537;0 +4522;4527;0 +4523;4582;0 +4558;4524;0 +4543;4526;0 +4526;4553;0 +4527;4543;0 +4546;4528;0 +4547;4529;0 +4570;4530;0 +4532;4564;0 +4536;4533;0 +4533;4590;0 +4534;4548;0 +4556;4535;0 +4537;4561;0 +4538;4557;0 +4539;4545;0 +4549;4539;0 +4548;4540;0 +4569;4541;0 +4563;4542;0 +4544;4560;0 +4545;4566;0 +4588;4546;0 +4562;4547;0 +4567;4549;0 +4585;4550;0 +4583;4551;0 +4552;4556;0 +4568;4552;0 +4553;4581;0 +4554;4584;0 +4555;4607;0 +4557;4579;0 +4559;4578;0 +4560;4577;0 +4561;4574;0 +4577;4562;0 +4566;4563;0 +4564;4568;0 +4582;4565;0 +4575;4567;0 +4573;4569;0 +4600;4570;0 +4571;4572;0 +4604;4571;0 +4572;4591;0 +4586;4573;0 +4574;4580;0 +4594;4575;0 +4580;4576;0 +4576;4585;0 +4578;4598;0 +4579;4587;0 +4581;4602;0 +4596;4583;0 +4584;4605;0 +4589;4586;0 +4587;4589;0 +4591;4588;0 +4590;4593;0 +4595;4592;0 +4592;4597;0 +4593;4609;0 +4597;4594;0 +4628;4595;0 +4612;4596;0 +4598;4610;0 +4603;4599;0 +4599;4611;0 +4632;4600;0 +4601;4614;0 +4620;4601;0 +4602;4613;0 +4608;4603;0 +4613;4604;0 +4605;4712;0 +4610;4606;0 +4606;4617;0 +4607;4621;0 +4641;4608;0 +4609;4619;0 +4611;4623;0 +4631;4612;0 +4614;4656;0 +4663;4615;0 +4616;4620;0 +4630;4616;0 +4617;4636;0 +4623;4618;0 +4618;4626;0 +4619;4630;0 +4621;4647;0 +4627;4622;0 +4622;4629;0 +4624;4625;0 +4629;4624;0 +4625;4637;0 +4626;4627;0 +4638;4628;0 +4639;4631;0 +4640;4632;0 +4633;4640;0 +4654;4633;0 +4634;4635;0 +4656;4634;0 +4635;4653;0 +4636;4646;0 +4637;4648;0 +4650;4638;0 +4645;4639;0 +4660;4641;0 +4643;4642;0 +4642;4658;0 +4659;4643;0 +4649;4644;0 +4644;4655;0 +4651;4645;0 +4646;4667;0 +4647;4677;0 +4648;4652;0 +4665;4649;0 +4685;4650;0 +4672;4651;0 +4652;4654;0 +4653;4657;0 +4655;4671;0 +4657;4678;0 +4658;4668;0 +4691;4659;0 +4671;4660;0 +4666;4661;0 +4661;4670;0 +4664;4662;0 +4662;4674;0 +4703;4663;0 +4696;4664;0 +4681;4665;0 +4676;4666;0 +4667;4683;0 +4668;4673;0 +4669;4676;0 +4699;4669;0 +4670;4684;0 +4673;4672;0 +4674;4694;0 +4683;4675;0 +4675;4690;0 +4677;4686;0 +4678;4688;0 +4686;4679;0 +4679;4692;0 +4680;4682;0 +4687;4680;0 +4684;4681;0 +4682;4707;0 +4693;4685;0 +4706;4687;0 +4688;4695;0 +4689;4693;0 +4697;4689;0 +4690;4702;0 +4719;4691;0 +4692;4704;0 +4694;4698;0 +4695;4697;0 +4700;4696;0 +4698;4701;0 +4705;4699;0 +4701;4700;0 +4702;4710;0 +4728;4703;0 +4704;4725;0 +4708;4705;0 +4711;4706;0 +4707;4716;0 +4748;4708;0 +4713;4709;0 +4709;4714;0 +4710;4718;0 +4715;4711;0 +4712;4729;0 +4717;4713;0 +4714;4721;0 +4722;4715;0 +4716;4734;0 +4727;4717;0 +4718;4732;0 +4723;4719;0 +4720;4723;0 +4730;4720;0 +4721;4724;0 +4733;4722;0 +4724;4726;0 +4725;4731;0 +4726;4738;0 +4735;4727;0 +4765;4728;0 +4729;4754;0 +4740;4730;0 +4731;4736;0 +4732;4735;0 +4739;4733;0 +4734;4742;0 +4736;4737;0 +4737;4743;0 +4738;4744;0 +4741;4739;0 +4750;4740;0 +4752;4741;0 +4742;4747;0 +4743;4746;0 +4744;4745;0 +4745;4749;0 +4746;4753;0 +4747;4751;0 +4760;4748;0 +4749;4750;0 +4751;4758;0 +4757;4752;0 +4753;4756;0 +4754;4772;0 +4756;4755;0 +4755;4768;0 +4761;4757;0 +4758;4762;0 +4763;4759;0 +4759;4764;0 +4767;4760;0 +4764;4761;0 +4762;4770;0 +4766;4763;0 +4782;4765;0 +4769;4766;0 +4775;4767;0 +4768;4786;0 +4771;4769;0 +4770;4776;0 +4773;4771;0 +4772;4779;0 +4774;4773;0 +4784;4774;0 +4785;4775;0 +4776;4777;0 +4777;4781;0 +4778;4780;0 +4789;4778;0 +4779;4782;0 +4780;4788;0 +4781;4783;0 +4783;4792;0 +4792;4784;0 +4787;4785;0 +4786;4806;0 +4790;4787;0 +4788;4790;0 +4793;4789;0 +4791;4794;0 +4795;4791;0 +4804;4793;0 +4794;4801;0 +4798;4795;0 +4797;4796;0 +4796;4799;0 +4805;4797;0 +4800;4798;0 +4799;4808;0 +4802;4800;0 +4801;4802;0 +4803;4810;0 +4821;4803;0 +4842;4804;0 +4809;4805;0 +4806;4826;0 +4807;4811;0 +4812;4807;0 +4808;4814;0 +4814;4809;0 +4810;4815;0 +4811;4820;0 +4824;4812;0 +4816;4813;0 +4813;4819;0 +4815;4830;0 +4817;4816;0 +4841;4817;0 +4818;4827;0 +4828;4818;0 +4819;4838;0 +4820;4836;0 +4823;4821;0 +4829;4822;0 +4822;4831;0 +4834;4823;0 +4833;4824;0 +4831;4825;0 +4825;4832;0 +4826;4833;0 +4827;4846;0 +4839;4828;0 +4845;4829;0 +4830;4837;0 +4832;4851;0 +4843;4834;0 +4835;4840;0 +4844;4835;0 +4836;4877;0 +4837;4863;0 +4838;4871;0 +4846;4839;0 +4840;4848;0 +4849;4841;0 +4853;4842;0 +4850;4843;0 +4858;4844;0 +4856;4845;0 +4847;4855;0 +4863;4847;0 +4848;4854;0 +4861;4849;0 +4857;4850;0 +4851;4870;0 +4852;4864;0 +4873;4852;0 +4860;4853;0 +4854;4859;0 +4855;4860;0 +4877;4856;0 +4879;4857;0 +4867;4858;0 +4859;4873;0 +4870;4861;0 +4865;4862;0 +4862;4869;0 +4864;4880;0 +4878;4865;0 +4866;4867;0 +4875;4866;0 +4868;4872;0 +4874;4868;0 +4869;4881;0 +4871;4874;0 +4872;4876;0 +4880;4875;0 +4876;4884;0 +4883;4878;0 +4882;4879;0 +4881;4885;0 +4886;4882;0 +4888;4883;0 +4884;4887;0 +4885;4895;0 +4889;4886;0 +4887;4890;0 +4892;4888;0 +4899;4889;0 +4890;4897;0 +4891;4896;0 +4909;4891;0 +4898;4892;0 +4894;4893;0 +4893;4905;0 +4902;4894;0 +4895;4901;0 +4896;4915;0 +4897;4908;0 +4903;4898;0 +4900;4899;0 +4906;4900;0 +4901;4904;0 +4904;4902;0 +4907;4903;0 +4905;4910;0 +4913;4906;0 +4911;4907;0 +4908;4912;0 +4914;4909;0 +4910;4916;0 +4920;4911;0 +4912;4918;0 +4927;4913;0 +4923;4914;0 +4915;4924;0 +4916;4919;0 +4922;4917;0 +4917;4931;0 +4918;4921;0 +4919;4927;0 +4921;4920;0 +4928;4922;0 +4929;4923;0 +4924;4929;0 +4925;4926;0 +4930;4925;0 +4926;4934;0 +4932;4928;0 +4933;4930;0 +4931;4935;0 +4937;4932;0 +4936;4933;0 +4934;4938;0 +4935;4937;0 +4942;4936;0 +4938;4948;0 +4939;4942;0 +4943;4939;0 +4940;4944;0 +4945;4940;0 +4944;4941;0 +4941;4947;0 +4957;4943;0 +4946;4945;0 +4949;4946;0 +4947;4949;0 +4948;4951;0 +4951;4950;0 +4950;4952;0 +4952;4953;0 +4953;4954;0 +4954;4955;0 +4955;4956;0 +4956;4958;0 +4958;4957;0 +4960;4959;0 +4959;4961;0 +4962;4960;0 +4961;4963;0 +4966;4962;0 +4963;4965;0 +4967;4964;0 +4964;4968;0 +4965;4971;0 +4969;4966;0 +4970;4967;0 +4968;4974;0 +4973;4969;0 +4975;4970;0 +4971;4972;0 +4972;4977;0 +4976;4973;0 +4974;4978;0 +4979;4975;0 +4981;4976;0 +4977;4983;0 +4978;4980;0 +4980;4979;0 +4986;4981;0 +4984;4982;0 +4982;4988;0 +4983;4987;0 +4990;4984;0 +4985;4986;0 +4989;4985;0 +4987;4995;0 +4988;4993;0 +4991;4989;0 +4994;4990;0 +4992;4991;0 +4996;4992;0 +4993;5016;0 +5021;4994;0 +4995;4998;0 +4997;4996;0 +5003;4997;0 +4998;5004;0 +4999;5000;0 +5006;4999;0 +5000;5010;0 +5002;5001;0 +5001;5007;0 +5005;5002;0 +5013;5003;0 +5004;5025;0 +5022;5005;0 +5015;5006;0 +5007;5011;0 +5008;5009;0 +5024;5008;0 +5009;5015;0 +5010;5023;0 +5011;5014;0 +5012;5019;0 +5020;5012;0 +5025;5013;0 +5014;5029;0 +5016;5032;0 +5018;5017;0 +5017;5026;0 +5019;5018;0 +5027;5020;0 +5039;5021;0 +5034;5022;0 +5023;5024;0 +5026;5033;0 +5031;5027;0 +5030;5028;0 +5028;5040;0 +5029;5037;0 +5041;5030;0 +5033;5031;0 +5032;5046;0 +5045;5034;0 +5043;5035;0 +5035;5049;0 +5038;5036;0 +5036;5044;0 +5037;5045;0 +5048;5038;0 +5053;5039;0 +5040;5042;0 +5055;5041;0 +5042;5070;0 +5054;5043;0 +5044;5056;0 +5046;5047;0 +5047;5058;0 +5056;5048;0 +5049;5054;0 +5051;5050;0 +5050;5057;0 +5052;5051;0 +5059;5052;0 +5057;5053;0 +5069;5055;0 +5058;5060;0 +5065;5059;0 +5060;5064;0 +5061;5062;0 +5063;5061;0 +5062;5086;0 +5068;5063;0 +5064;5065;0 +5066;5067;0 +5075;5066;0 +5067;5072;0 +5074;5068;0 +5087;5069;0 +5070;5081;0 +5072;5071;0 +5071;5073;0 +5073;5077;0 +5076;5074;0 +5079;5075;0 +5106;5076;0 +5077;5078;0 +5078;5083;0 +5082;5079;0 +5080;5082;0 +5083;5080;0 +5081;5088;0 +5084;5085;0 +5092;5084;0 +5085;5097;0 +5086;5091;0 +5089;5087;0 +5088;5101;0 +5105;5089;0 +5090;5092;0 +5095;5090;0 +5091;5093;0 +5093;5100;0 +5097;5094;0 +5094;5104;0 +5111;5095;0 +5096;5099;0 +5103;5096;0 +5100;5098;0 +5098;5102;0 +5099;5114;0 +5101;5117;0 +5102;5107;0 +5108;5103;0 +5104;5113;0 +5112;5105;0 +5109;5106;0 +5107;5110;0 +5110;5108;0 +5118;5109;0 +5113;5111;0 +5115;5112;0 +5114;5121;0 +5116;5115;0 +5117;5116;0 +5136;5118;0 +5119;5120;0 +5124;5119;0 +5120;5123;0 +5121;5122;0 +5122;5125;0 +5123;5131;0 +5127;5124;0 +5125;5127;0 +5128;5126;0 +5126;5129;0 +5132;5128;0 +5129;5130;0 +5130;5132;0 +5131;5138;0 +5133;5134;0 +5145;5133;0 +5134;5135;0 +5135;5142;0 +5149;5136;0 +5139;5137;0 +5137;5143;0 +5138;5154;0 +5150;5139;0 +5143;5140;0 +5140;5152;0 +5141;5147;0 +5148;5141;0 +5142;5146;0 +5153;5144;0 +5144;5155;0 +5157;5145;0 +5146;5148;0 +5147;5151;0 +5158;5149;0 +5151;5150;0 +5152;5153;0 +5154;5156;0 +5155;5165;0 +5156;5162;0 +5161;5157;0 +5172;5158;0 +5160;5159;0 +5159;5164;0 +5171;5160;0 +5167;5161;0 +5162;5176;0 +5163;5166;0 +5168;5163;0 +5164;5168;0 +5165;5169;0 +5166;5173;0 +5182;5167;0 +5169;5170;0 +5170;5171;0 +5183;5172;0 +5173;5174;0 +5174;5175;0 +5175;5181;0 +5176;5180;0 +5178;5177;0 +5177;5179;0 +5185;5178;0 +5179;5187;0 +5180;5189;0 +5181;5186;0 +5184;5182;0 +5197;5183;0 +5189;5184;0 +5191;5185;0 +5186;5188;0 +5187;5201;0 +5188;5190;0 +5190;5192;0 +5198;5191;0 +5192;5194;0 +5193;5195;0 +5206;5193;0 +5194;5211;0 +5195;5205;0 +5196;5199;0 +5200;5196;0 +5209;5197;0 +5202;5198;0 +5199;5203;0 +5207;5200;0 +5201;5210;0 +5204;5202;0 +5203;5204;0 +5205;5213;0 +5212;5206;0 +5208;5207;0 +5218;5208;0 +5236;5209;0 +5210;5214;0 +5211;5217;0 +5222;5212;0 +5213;5223;0 +5214;5216;0 +5215;5220;0 +5230;5215;0 +5216;5225;0 +5217;5221;0 +5224;5218;0 +5220;5219;0 +5219;5227;0 +5221;5240;0 +5226;5222;0 +5223;5228;0 +5225;5224;0 +5228;5226;0 +5227;5229;0 +5229;5233;0 +5235;5230;0 +5231;5232;0 +5234;5231;0 +5232;5242;0 +5233;5238;0 +5241;5234;0 +5238;5235;0 +5245;5236;0 +5237;5239;0 +5243;5237;0 +5239;5246;0 +5240;5243;0 +5244;5241;0 +5242;5248;0 +5247;5244;0 +5250;5245;0 +5246;5249;0 +5251;5247;0 +5248;5252;0 +5249;5256;0 +5258;5250;0 +5255;5251;0 +5252;5261;0 +5253;5257;0 +5260;5253;0 +5261;5254;0 +5254;5263;0 +5259;5255;0 +5256;5274;0 +5257;5269;0 +5262;5258;0 +5263;5259;0 +5264;5260;0 +5273;5262;0 +5265;5264;0 +5286;5265;0 +5268;5266;0 +5266;5270;0 +5270;5267;0 +5267;5271;0 +5279;5268;0 +5269;5276;0 +5271;5278;0 +5272;5275;0 +5282;5272;0 +5275;5273;0 +5274;5292;0 +5276;5277;0 +5277;5281;0 +5278;5283;0 +5280;5279;0 +5285;5280;0 +5281;5284;0 +5297;5282;0 +5283;5287;0 +5284;5288;0 +5289;5285;0 +5288;5286;0 +5287;5289;0 +5290;5291;0 +5294;5290;0 +5291;5295;0 +5292;5304;0 +5293;5294;0 +5296;5293;0 +5295;5301;0 +5298;5296;0 +5299;5297;0 +5301;5298;0 +5300;5299;0 +5302;5300;0 +5313;5302;0 +5305;5303;0 +5303;5306;0 +5304;5328;0 +5315;5305;0 +5306;5311;0 +5307;5309;0 +5312;5307;0 +5308;5310;0 +5311;5308;0 +5309;5317;0 +5310;5314;0 +5316;5312;0 +5345;5313;0 +5314;5318;0 +5321;5315;0 +5320;5316;0 +5317;5322;0 +5318;5319;0 +5319;5323;0 +5324;5320;0 +5325;5321;0 +5322;5327;0 +5323;5325;0 +5326;5324;0 +5329;5326;0 +5327;5331;0 +5328;5344;0 +5331;5329;0 +5332;5330;0 +5330;5333;0 +5334;5332;0 +5333;5336;0 +5335;5334;0 +5339;5335;0 +5336;5338;0 +5338;5337;0 +5337;5342;0 +5340;5339;0 +5341;5340;0 +5346;5341;0 +5342;5343;0 +5343;5349;0 +5344;5354;0 +5362;5345;0 +5347;5346;0 +5348;5347;0 +5350;5348;0 +5349;5352;0 +5351;5350;0 +5356;5351;0 +5352;5357;0 +5353;5355;0 +5366;5353;0 +5354;5358;0 +5355;5360;0 +5359;5356;0 +5357;5361;0 +5358;5364;0 +5363;5359;0 +5360;5371;0 +5361;5365;0 +5367;5362;0 +5373;5363;0 +5364;5372;0 +5365;5369;0 +5368;5366;0 +5370;5367;0 +5378;5368;0 +5369;5376;0 +5380;5370;0 +5371;5374;0 +5372;5394;0 +5377;5373;0 +5374;5378;0 +5376;5375;0 +5375;5379;0 +5379;5377;0 +5386;5380;0 +5381;5382;0 +5384;5381;0 +5382;5383;0 +5383;5385;0 +5390;5384;0 +5385;5387;0 +5388;5386;0 +5387;5392;0 +5391;5388;0 +5389;5390;0 +5393;5389;0 +5396;5391;0 +5392;5399;0 +5395;5393;0 +5394;5406;0 +5398;5395;0 +5402;5396;0 +5400;5397;0 +5397;5401;0 +5399;5398;0 +5403;5400;0 +5401;5404;0 +5432;5402;0 +5405;5403;0 +5404;5408;0 +5407;5405;0 +5406;5417;0 +5411;5407;0 +5408;5413;0 +5409;5410;0 +5412;5409;0 +5410;5419;0 +5415;5411;0 +5414;5412;0 +5413;5416;0 +5422;5414;0 +5418;5415;0 +5416;5418;0 +5417;5424;0 +5419;5420;0 +5420;5421;0 +5421;5425;0 +5423;5422;0 +5429;5423;0 +5424;5426;0 +5425;5430;0 +5426;5434;0 +5427;5429;0 +5433;5427;0 +5430;5428;0 +5428;5431;0 +5431;5435;0 +5445;5432;0 +5438;5433;0 +5434;5436;0 +5435;5441;0 +5436;5437;0 +5437;5439;0 +5440;5438;0 +5439;5448;0 +5442;5440;0 +5441;5444;0 +5443;5442;0 +5447;5443;0 +5444;5446;0 +5457;5445;0 +5446;5452;0 +5449;5447;0 +5448;5458;0 +5461;5449;0 +5450;5451;0 +5453;5450;0 +5451;5454;0 +5452;5455;0 +5456;5453;0 +5454;5464;0 +5455;5459;0 +5463;5456;0 +5460;5457;0 +5458;5462;0 +5459;5465;0 +5469;5460;0 +5466;5461;0 +5462;5471;0 +5467;5463;0 +5464;5473;0 +5465;5472;0 +5470;5466;0 +5493;5467;0 +5468;5474;0 +5476;5468;0 +5474;5469;0 +5472;5470;0 +5471;5488;0 +5473;5483;0 +5475;5477;0 +5480;5475;0 +5478;5476;0 +5477;5494;0 +5487;5478;0 +5479;5481;0 +5486;5479;0 +5496;5480;0 +5481;5482;0 +5482;5485;0 +5483;5489;0 +5484;5486;0 +5490;5484;0 +5485;5499;0 +5491;5487;0 +5488;5495;0 +5489;5504;0 +5492;5490;0 +5498;5491;0 +5497;5492;0 +5500;5493;0 +5494;5507;0 +5495;5506;0 +5510;5496;0 +5502;5497;0 +5501;5498;0 +5499;5503;0 +5508;5500;0 +5505;5501;0 +5503;5502;0 +5504;5514;0 +5521;5505;0 +5506;5509;0 +5507;5512;0 +5512;5508;0 +5509;5517;0 +5550;5510;0 +5511;5513;0 +5518;5511;0 +5513;5515;0 +5514;5516;0 +5515;5519;0 +5516;5522;0 +5517;5527;0 +5524;5518;0 +5519;5526;0 +5520;5523;0 +5530;5520;0 +5525;5521;0 +5522;5533;0 +5523;5528;0 +5529;5524;0 +5538;5525;0 +5526;5529;0 +5527;5531;0 +5528;5534;0 +5532;5530;0 +5531;5545;0 +5534;5532;0 +5533;5554;0 +5535;5536;0 +5540;5535;0 +5536;5543;0 +5537;5538;0 +5542;5537;0 +5541;5539;0 +5539;5546;0 +5551;5540;0 +5544;5541;0 +5547;5542;0 +5543;5549;0 +5555;5544;0 +5545;5559;0 +5546;5553;0 +5548;5547;0 +5552;5548;0 +5549;5563;0 +5557;5550;0 +5556;5551;0 +5562;5552;0 +5553;5557;0 +5554;5561;0 +5564;5555;0 +5568;5556;0 +5558;5560;0 +5566;5558;0 +5559;5590;0 +5560;5565;0 +5561;5571;0 +5579;5562;0 +5563;5567;0 +5570;5564;0 +5565;5572;0 +5569;5566;0 +5567;5568;0 +5573;5569;0 +5582;5570;0 +5571;5588;0 +5572;5576;0 +5577;5573;0 +5574;5575;0 +5584;5574;0 +5575;5580;0 +5576;5578;0 +5578;5577;0 +5581;5579;0 +5580;5587;0 +5591;5581;0 +5583;5582;0 +5596;5583;0 +5592;5584;0 +5585;5586;0 +5589;5585;0 +5586;5594;0 +5587;5593;0 +5588;5604;0 +5602;5589;0 +5590;5603;0 +5600;5591;0 +5593;5592;0 +5594;5599;0 +5595;5597;0 +5598;5595;0 +5601;5596;0 +5597;5610;0 +5606;5598;0 +5599;5607;0 +5634;5600;0 +5638;5601;0 +5617;5602;0 +5603;5612;0 +5604;5605;0 +5605;5609;0 +5608;5606;0 +5607;5625;0 +5609;5608;0 +5610;5632;0 +5611;5619;0 +5629;5611;0 +5612;5639;0 +5613;5615;0 +5618;5613;0 +5616;5614;0 +5614;5626;0 +5615;5640;0 +5633;5616;0 +5626;5617;0 +5628;5618;0 +5619;5621;0 +5622;5620;0 +5620;5628;0 +5621;5623;0 +5630;5622;0 +5623;5635;0 +5635;5624;0 +5624;5636;0 +5625;5689;0 +5627;5629;0 +5631;5627;0 +5637;5630;0 +5643;5631;0 +5632;5641;0 +5644;5633;0 +5665;5634;0 +5636;5642;0 +5648;5637;0 +5646;5638;0 +5639;5656;0 +5640;5649;0 +5641;5645;0 +5642;5666;0 +5650;5643;0 +5647;5644;0 +5645;5690;0 +5655;5646;0 +5670;5647;0 +5649;5648;0 +5651;5650;0 +5677;5651;0 +5652;5653;0 +5654;5652;0 +5653;5659;0 +5686;5654;0 +5660;5655;0 +5656;5657;0 +5657;5703;0 +5658;5668;0 +5675;5658;0 +5659;5678;0 +5674;5660;0 +5663;5661;0 +5661;5672;0 +5664;5662;0 +5662;5671;0 +5666;5663;0 +5673;5664;0 +5685;5665;0 +5667;5669;0 +5681;5667;0 +5668;5682;0 +5669;5676;0 +5680;5670;0 +5671;5683;0 +5672;5697;0 +5699;5673;0 +5676;5674;0 +5679;5675;0 +5688;5677;0 +5678;5687;0 +5684;5679;0 +5712;5680;0 +5723;5681;0 +5682;5691;0 +5683;5695;0 +5702;5684;0 +5709;5685;0 +5696;5686;0 +5687;5696;0 +5692;5688;0 +5689;5746;0 +5690;5706;0 +5691;5713;0 +5694;5692;0 +5701;5693;0 +5693;5705;0 +5717;5694;0 +5695;5701;0 +5697;5747;0 +5698;5700;0 +5707;5698;0 +5705;5699;0 +5700;5711;0 +5710;5702;0 +5703;5737;0 +5704;5707;0 +5708;5704;0 +5706;5715;0 +5721;5708;0 +5722;5709;0 +5718;5710;0 +5711;5727;0 +5715;5712;0 +5713;5718;0 +5714;5716;0 +5720;5714;0 +5716;5736;0 +5743;5717;0 +5719;5726;0 +5731;5719;0 +5732;5720;0 +5725;5721;0 +5733;5722;0 +5744;5723;0 +5729;5724;0 +5724;5742;0 +5735;5725;0 +5726;5765;0 +5727;5730;0 +5730;5728;0 +5728;5734;0 +5749;5729;0 +5759;5731;0 +5741;5732;0 +5738;5733;0 +5734;5739;0 +5740;5735;0 +5736;5740;0 +5737;5770;0 +5742;5738;0 +5739;5745;0 +5752;5741;0 +5748;5743;0 +5747;5744;0 +5745;5758;0 +5746;5750;0 +5751;5748;0 +5754;5749;0 +5750;5755;0 +5762;5751;0 +5756;5752;0 +5753;5754;0 +5764;5753;0 +5755;5757;0 +5763;5756;0 +5757;5761;0 +5758;5773;0 +5766;5759;0 +5761;5760;0 +5760;5771;0 +5769;5762;0 +5775;5763;0 +5772;5764;0 +5765;5766;0 +5767;5768;0 +5778;5767;0 +5768;5774;0 +5773;5769;0 +5770;5779;0 +5771;5772;0 +5774;5777;0 +5776;5775;0 +5787;5776;0 +5777;5798;0 +5780;5778;0 +5779;5795;0 +5782;5780;0 +5781;5786;0 +5788;5781;0 +5783;5782;0 +5784;5783;0 +5792;5784;0 +5785;5790;0 +5791;5785;0 +5786;5807;0 +5802;5787;0 +5822;5788;0 +5789;5793;0 +5821;5789;0 +5790;5802;0 +5805;5791;0 +5801;5792;0 +5793;5815;0 +5794;5800;0 +5810;5794;0 +5795;5808;0 +5796;5803;0 +5818;5796;0 +5800;5797;0 +5797;5806;0 +5798;5799;0 +5799;5804;0 +5804;5801;0 +5803;5811;0 +5806;5805;0 +5807;5809;0 +5808;5830;0 +5809;5819;0 +5820;5810;0 +5811;5813;0 +5812;5814;0 +5823;5812;0 +5813;5826;0 +5814;5816;0 +5815;5828;0 +5816;5825;0 +5817;5824;0 +5826;5817;0 +5819;5818;0 +5824;5820;0 +5829;5821;0 +5830;5822;0 +5836;5823;0 +5825;5827;0 +5827;5831;0 +5828;5832;0 +5833;5829;0 +5831;5837;0 +5832;5833;0 +5834;5835;0 +5838;5834;0 +5835;5840;0 +5841;5836;0 +5837;5839;0 +5843;5838;0 +5839;5847;0 +5840;5842;0 +5846;5841;0 +5842;5845;0 +5844;5843;0 +5845;5844;0 +5848;5846;0 +5847;5850;0 +5849;5848;0 +5852;5849;0 +5850;5851;0 +5851;5863;0 +5868;5852;0 +5856;5853;0 +5853;5862;0 +5858;5854;0 +5854;5861;0 +5855;5857;0 +5862;5855;0 +5866;5856;0 +5857;5860;0 +5867;5858;0 +5861;5859;0 +5859;5864;0 +5860;5870;0 +5863;5869;0 +5864;5865;0 +5865;5866;0 +5903;5867;0 +5875;5868;0 +5869;5879;0 +5870;5877;0 +5872;5871;0 +5871;5874;0 +5878;5872;0 +5876;5873;0 +5873;5878;0 +5874;5880;0 +5879;5875;0 +5884;5876;0 +5877;5881;0 +5880;5882;0 +5881;5891;0 +5882;5888;0 +5886;5883;0 +5883;5887;0 +5890;5884;0 +5887;5885;0 +5885;5893;0 +5907;5886;0 +5888;5892;0 +5896;5889;0 +5889;5897;0 +5900;5890;0 +5891;5913;0 +5892;5901;0 +5893;5912;0 +5897;5894;0 +5894;5924;0 +5902;5895;0 +5895;5919;0 +5904;5896;0 +5899;5898;0 +5898;5908;0 +5911;5899;0 +5910;5900;0 +5901;5915;0 +5917;5902;0 +5908;5903;0 +5909;5904;0 +5905;5906;0 +5916;5905;0 +5906;5921;0 +5912;5907;0 +5920;5909;0 +5918;5910;0 +5914;5911;0 +5913;5914;0 +5915;5918;0 +5923;5916;0 +5931;5917;0 +5919;5926;0 +5929;5920;0 +5921;5930;0 +5922;5925;0 +5933;5922;0 +5928;5923;0 +5924;5935;0 +5925;5927;0 +5926;5950;0 +5927;5934;0 +5932;5928;0 +5944;5929;0 +5930;5932;0 +5939;5931;0 +5936;5933;0 +5934;5945;0 +5935;5941;0 +5940;5936;0 +5938;5937;0 +5937;5943;0 +5942;5938;0 +5946;5939;0 +5947;5940;0 +5941;5949;0 +5952;5942;0 +5943;5951;0 +5975;5944;0 +5945;5947;0 +5948;5946;0 +5953;5948;0 +5949;5956;0 +5950;5954;0 +5951;5955;0 +5963;5952;0 +5958;5953;0 +5954;5968;0 +5955;5957;0 +5956;5965;0 +5957;5964;0 +5960;5958;0 +5959;5960;0 +5961;5959;0 +5971;5961;0 +5962;5966;0 +5968;5962;0 +5967;5963;0 +5964;5967;0 +5965;5969;0 +5966;5970;0 +5969;5973;0 +5970;5972;0 +5973;5971;0 +5972;5974;0 +5974;5978;0 +5985;5975;0 +5976;5977;0 +5979;5976;0 +5977;5982;0 +5978;5983;0 +5987;5979;0 +5980;5981;0 +5984;5980;0 +5981;5988;0 +5982;5986;0 +5983;6001;0 +5991;5984;0 +6004;5985;0 +5986;5989;0 +5992;5987;0 +5988;5990;0 +5989;5992;0 +5990;5995;0 +5993;5991;0 +6002;5993;0 +5997;5994;0 +5994;5999;0 +5995;6023;0 +5998;5996;0 +5996;6006;0 +6007;5997;0 +6000;5998;0 +5999;6003;0 +6005;6000;0 +6001;6012;0 +6015;6002;0 +6003;6008;0 +6022;6004;0 +6009;6005;0 +6006;6011;0 +6010;6007;0 +6008;6010;0 +6019;6009;0 +6011;6013;0 +6012;6018;0 +6013;6014;0 +6014;6024;0 +6021;6015;0 +6016;6017;0 +6020;6016;0 +6017;6027;0 +6018;6025;0 +6031;6019;0 +6032;6020;0 +6024;6021;0 +6038;6022;0 +6023;6036;0 +6025;6037;0 +6026;6028;0 +6029;6026;0 +6027;6033;0 +6028;6030;0 +6039;6029;0 +6030;6043;0 +6035;6031;0 +6034;6032;0 +6033;6034;0 +6040;6035;0 +6036;6046;0 +6037;6041;0 +6042;6038;0 +6041;6039;0 +6045;6040;0 +6044;6042;0 +6043;6052;0 +6053;6044;0 +6047;6045;0 +6046;6050;0 +6048;6047;0 +6049;6048;0 +6051;6049;0 +6050;6051;0 +6052;6126;0 +6061;6053;0 +6058;6054;0 +6054;6059;0 +6055;6057;0 +6059;6055;0 +6072;6056;0 +6056;6080;0 +6057;6062;0 +6063;6058;0 +6064;6060;0 +6060;6066;0 +6065;6061;0 +6062;6068;0 +6070;6063;0 +6071;6064;0 +6067;6065;0 +6066;6069;0 +6073;6067;0 +6068;6070;0 +6069;6076;0 +6074;6071;0 +6086;6072;0 +6075;6073;0 +6077;6074;0 +6084;6075;0 +6076;6077;0 +6079;6078;0 +6078;6081;0 +6090;6079;0 +6080;6085;0 +6081;6082;0 +6082;6087;0 +6083;6091;0 +6092;6083;0 +6088;6084;0 +6085;6086;0 +6087;6096;0 +6089;6088;0 +6093;6089;0 +6098;6090;0 +6091;6095;0 +6100;6092;0 +6097;6093;0 +6101;6094;0 +6094;6112;0 +6095;6099;0 +6096;6102;0 +6104;6097;0 +6102;6098;0 +6099;6105;0 +6105;6100;0 +6103;6101;0 +6111;6103;0 +6116;6104;0 +6108;6106;0 +6106;6110;0 +6107;6109;0 +6110;6107;0 +6115;6108;0 +6109;6113;0 +6114;6111;0 +6112;6118;0 +6113;6121;0 +6120;6114;0 +6124;6115;0 +6123;6116;0 +6117;6122;0 +6125;6117;0 +6118;6127;0 +6128;6119;0 +6119;6132;0 +6134;6120;0 +6121;6124;0 +6122;6139;0 +6140;6123;0 +6130;6125;0 +6126;6142;0 +6127;6141;0 +6150;6128;0 +6129;6130;0 +6133;6129;0 +6131;6135;0 +6137;6131;0 +6132;6151;0 +6147;6133;0 +6136;6134;0 +6135;6146;0 +6144;6136;0 +6138;6137;0 +6145;6138;0 +6139;6143;0 +6143;6140;0 +6141;6158;0 +6142;6153;0 +6164;6144;0 +6155;6145;0 +6146;6148;0 +6152;6147;0 +6148;6149;0 +6149;6156;0 +6154;6150;0 +6151;6154;0 +6168;6152;0 +6153;6157;0 +6159;6155;0 +6156;6170;0 +6157;6171;0 +6158;6160;0 +6161;6159;0 +6160;6163;0 +6162;6161;0 +6166;6162;0 +6163;6169;0 +6167;6164;0 +6165;6172;0 +6173;6165;0 +6175;6166;0 +6174;6167;0 +6169;6168;0 +6170;6176;0 +6171;6197;0 +6172;6178;0 +6180;6173;0 +6184;6174;0 +6177;6175;0 +6176;6179;0 +6179;6177;0 +6178;6189;0 +6191;6180;0 +6182;6181;0 +6181;6186;0 +6185;6182;0 +6188;6183;0 +6183;6198;0 +6233;6184;0 +6194;6185;0 +6186;6192;0 +6187;6190;0 +6202;6187;0 +6196;6188;0 +6189;6191;0 +6190;6193;0 +6192;6195;0 +6193;6200;0 +6195;6194;0 +6199;6196;0 +6197;6207;0 +6198;6201;0 +6201;6199;0 +6200;6205;0 +6203;6202;0 +6210;6203;0 +6209;6204;0 +6204;6212;0 +6205;6238;0 +6206;6209;0 +6216;6206;0 +6207;6227;0 +6208;6211;0 +6232;6208;0 +6222;6210;0 +6211;6221;0 +6212;6215;0 +6213;6214;0 +6219;6213;0 +6214;6226;0 +6215;6225;0 +6224;6216;0 +6217;6223;0 +6227;6217;0 +6220;6218;0 +6218;6239;0 +6230;6219;0 +6228;6220;0 +6221;6254;0 +6234;6222;0 +6223;6241;0 +6225;6224;0 +6226;6229;0 +6245;6228;0 +6229;6235;0 +6237;6230;0 +6231;6242;0 +6248;6231;0 +6259;6232;0 +6301;6233;0 +6253;6234;0 +6235;6244;0 +6240;6236;0 +6236;6247;0 +6244;6237;0 +6238;6267;0 +6239;6248;0 +6251;6240;0 +6241;6252;0 +6242;6249;0 +6243;6246;0 +6255;6243;0 +6257;6245;0 +6246;6256;0 +6247;6264;0 +6249;6250;0 +6250;6263;0 +6252;6251;0 +6260;6253;0 +6254;6266;0 +6258;6255;0 +6256;6261;0 +6265;6257;0 +6279;6258;0 +6277;6259;0 +6271;6260;0 +6261;6268;0 +6264;6262;0 +6262;6269;0 +6263;6276;0 +6273;6265;0 +6266;6298;0 +6267;6274;0 +6268;6270;0 +6269;6286;0 +6270;6272;0 +6274;6271;0 +6272;6282;0 +6278;6273;0 +6281;6275;0 +6275;6287;0 +6276;6295;0 +6280;6277;0 +6284;6278;0 +6283;6279;0 +6311;6280;0 +6304;6281;0 +6282;6289;0 +6300;6283;0 +6292;6284;0 +6289;6285;0 +6285;6296;0 +6286;6291;0 +6287;6294;0 +6288;6297;0 +6299;6288;0 +6290;6293;0 +6297;6290;0 +6291;6310;0 +6296;6292;0 +6293;6308;0 +6294;6305;0 +6295;6306;0 +6298;6312;0 +6302;6299;0 +6307;6300;0 +6309;6301;0 +6303;6302;0 +6316;6303;0 +6305;6304;0 +6306;6328;0 +6313;6307;0 +6308;6314;0 +6315;6309;0 +6310;6333;0 +6314;6311;0 +6312;6320;0 +6317;6313;0 +6319;6315;0 +6337;6316;0 +6326;6317;0 +6318;6321;0 +6325;6318;0 +6330;6319;0 +6320;6331;0 +6321;6327;0 +6322;6323;0 +6324;6322;0 +6323;6332;0 +6329;6324;0 +6336;6325;0 +6328;6326;0 +6327;6335;0 +6339;6329;0 +6338;6330;0 +6331;6334;0 +6332;6340;0 +6333;6359;0 +6334;6360;0 +6335;6342;0 +6349;6336;0 +6366;6337;0 +6348;6338;0 +6343;6339;0 +6340;6341;0 +6341;6347;0 +6342;6344;0 +6347;6343;0 +6344;6352;0 +6346;6345;0 +6345;6350;0 +6356;6346;0 +6351;6348;0 +6354;6349;0 +6350;6355;0 +6353;6351;0 +6352;6357;0 +6358;6353;0 +6357;6354;0 +6355;6356;0 +6362;6358;0 +6359;6377;0 +6360;6363;0 +6361;6364;0 +6369;6361;0 +6373;6362;0 +6363;6370;0 +6364;6365;0 +6365;6367;0 +6391;6366;0 +6367;6374;0 +6371;6368;0 +6368;6372;0 +6375;6369;0 +6370;6382;0 +6378;6371;0 +6372;6376;0 +6379;6373;0 +6374;6384;0 +6381;6375;0 +6376;6380;0 +6377;6378;0 +6383;6379;0 +6380;6385;0 +6384;6381;0 +6382;6407;0 +6385;6383;0 +6386;6388;0 +6389;6386;0 +6387;6389;0 +6398;6387;0 +6388;6394;0 +6390;6392;0 +6393;6390;0 +6399;6391;0 +6392;6395;0 +6410;6393;0 +6394;6401;0 +6395;6403;0 +6397;6396;0 +6396;6406;0 +6433;6397;0 +6402;6398;0 +6400;6399;0 +6405;6400;0 +6401;6408;0 +6404;6402;0 +6403;6417;0 +6430;6404;0 +6409;6405;0 +6406;6409;0 +6407;6411;0 +6408;6414;0 +6412;6410;0 +6411;6419;0 +6413;6412;0 +6415;6413;0 +6414;6421;0 +6416;6415;0 +6418;6416;0 +6417;6422;0 +6422;6418;0 +6419;6424;0 +6420;6423;0 +6424;6420;0 +6421;6434;0 +6423;6425;0 +6425;6426;0 +6426;6428;0 +6427;6432;0 +6435;6427;0 +6428;6438;0 +6429;6431;0 +6432;6429;0 +6431;6430;0 +6437;6433;0 +6434;6436;0 +6439;6435;0 +6436;6451;0 +6440;6437;0 +6438;6441;0 +6442;6439;0 +6443;6440;0 +6441;6445;0 +6444;6442;0 +6446;6443;0 +6448;6444;0 +6445;6449;0 +6447;6446;0 +6450;6447;0 +6454;6448;0 +6449;6452;0 +6456;6450;0 +6451;6453;0 +6452;6455;0 +6453;6466;0 +6459;6454;0 +6455;6457;0 +6458;6456;0 +6457;6472;0 +6460;6458;0 +6463;6459;0 +6465;6460;0 +6462;6461;0 +6461;6464;0 +6467;6462;0 +6473;6463;0 +6464;6470;0 +6468;6465;0 +6466;6477;0 +6469;6467;0 +6471;6468;0 +6475;6469;0 +6470;6486;0 +6474;6471;0 +6472;6478;0 +6476;6473;0 +6482;6474;0 +6479;6475;0 +6477;6476;0 +6478;6487;0 +6484;6479;0 +6480;6481;0 +6483;6480;0 +6481;6492;0 +6498;6482;0 +6485;6483;0 +6488;6484;0 +6493;6485;0 +6486;6489;0 +6487;6490;0 +6505;6488;0 +6489;6494;0 +6490;6491;0 +6491;6495;0 +6492;6496;0 +6499;6493;0 +6494;6497;0 +6495;6522;0 +6496;6502;0 +6497;6510;0 +6500;6498;0 +6504;6499;0 +6501;6500;0 +6506;6501;0 +6502;6515;0 +6503;6506;0 +6507;6503;0 +6514;6504;0 +6508;6505;0 +6511;6507;0 +6509;6508;0 +6512;6509;0 +6510;6519;0 +6513;6511;0 +6516;6512;0 +6517;6513;0 +6515;6514;0 +6520;6516;0 +6518;6517;0 +6523;6518;0 +6519;6521;0 +6524;6520;0 +6521;6525;0 +6522;6530;0 +6526;6523;0 +6528;6524;0 +6525;6527;0 +6529;6526;0 +6527;6532;0 +6531;6528;0 +6538;6529;0 +6530;6533;0 +6535;6531;0 +6532;6534;0 +6533;6540;0 +6534;6536;0 +6544;6535;0 +6536;6537;0 +6537;6539;0 +6543;6538;0 +6539;6547;0 +6540;6550;0 +6542;6541;0 +6541;6545;0 +6546;6542;0 +6558;6543;0 +6548;6544;0 +6545;6553;0 +6555;6546;0 +6547;6556;0 +6552;6548;0 +6551;6549;0 +6549;6552;0 +6550;6554;0 +6562;6551;0 +6553;6557;0 +6554;6560;0 +6556;6555;0 +6557;6559;0 +6559;6558;0 +6560;6561;0 +6561;6563;0 +6564;6562;0 +6563;6565;0 +6566;6564;0 +6565;6567;0 +6568;6566;0 +6567;6569;0 +6571;6568;0 +6569;6570;0 +6570;6578;0 +6585;6571;0 +6573;6572;0 +6572;6574;0 +6590;6573;0 +6574;6576;0 +6575;6577;0 +6579;6575;0 +6576;6593;0 +6577;6583;0 +6578;6603;0 +6589;6579;0 +6581;6580;0 +6580;6586;0 +6592;6581;0 +6584;6582;0 +6582;6588;0 +6583;6617;0 +6595;6584;0 +6605;6585;0 +6586;6587;0 +6587;6591;0 +6588;6589;0 +6602;6590;0 +6591;6600;0 +6598;6592;0 +6593;6607;0 +6599;6594;0 +6594;6611;0 +6596;6595;0 +6601;6596;0 +6604;6597;0 +6597;6615;0 +6610;6598;0 +6609;6599;0 +6600;6612;0 +6613;6601;0 +6624;6602;0 +6603;6628;0 +6608;6604;0 +6616;6605;0 +6607;6606;0 +6606;6614;0 +6621;6608;0 +6618;6609;0 +6612;6610;0 +6611;6620;0 +6627;6613;0 +6614;6622;0 +6615;6630;0 +6623;6616;0 +6617;6619;0 +6619;6618;0 +6620;6646;0 +6626;6621;0 +6622;6625;0 +6636;6623;0 +6631;6624;0 +6625;6627;0 +6641;6626;0 +6628;6629;0 +6629;6664;0 +6630;6632;0 +6633;6631;0 +6632;6637;0 +6638;6633;0 +6635;6634;0 +6634;6650;0 +6639;6635;0 +6642;6636;0 +6637;6640;0 +6640;6638;0 +6648;6639;0 +6643;6641;0 +6645;6642;0 +6649;6643;0 +6646;6644;0 +6644;6647;0 +6651;6645;0 +6647;6653;0 +6655;6648;0 +6654;6649;0 +6650;6656;0 +6658;6651;0 +6657;6652;0 +6652;6661;0 +6653;6660;0 +6659;6654;0 +6662;6655;0 +6656;6657;0 +6665;6658;0 +6661;6659;0 +6660;6670;0 +6666;6662;0 +6664;6663;0 +6663;6667;0 +6669;6665;0 +6672;6666;0 +6667;6668;0 +6668;6669;0 +6670;6671;0 +6671;6675;0 +6674;6672;0 +6676;6673;0 +6673;6677;0 +6679;6674;0 +6675;6678;0 +6680;6676;0 +6677;6681;0 +6678;6682;0 +6681;6679;0 +6684;6680;0 +6682;6683;0 +6683;6685;0 +6686;6684;0 +6685;6688;0 +6691;6686;0 +6689;6687;0 +6687;6693;0 +6688;6710;0 +6696;6689;0 +6690;6691;0 +6692;6690;0 +6694;6692;0 +6693;6694;0 +6695;6697;0 +6698;6695;0 +6699;6696;0 +6697;6707;0 +6705;6698;0 +6700;6699;0 +6703;6700;0 +6702;6701;0 +6701;6704;0 +6720;6702;0 +6709;6703;0 +6704;6718;0 +6708;6705;0 +6706;6712;0 +6714;6706;0 +6707;6708;0 +6715;6709;0 +6710;6716;0 +6711;6713;0 +6717;6711;0 +6712;6715;0 +6713;6719;0 +6729;6714;0 +6716;6722;0 +6727;6717;0 +6718;6721;0 +6719;6723;0 +6721;6720;0 +6722;6728;0 +6723;6725;0 +6725;6724;0 +6724;6726;0 +6726;6731;0 +6730;6727;0 +6728;6736;0 +6735;6729;0 +6753;6730;0 +6731;6733;0 +6733;6732;0 +6732;6737;0 +6738;6734;0 +6734;6742;0 +6740;6735;0 +6736;6743;0 +6737;6739;0 +6747;6738;0 +6739;6741;0 +6746;6740;0 +6741;6744;0 +6742;6746;0 +6743;6745;0 +6744;6748;0 +6745;6750;0 +6749;6747;0 +6748;6752;0 +6756;6749;0 +6750;6751;0 +6751;6754;0 +6752;6760;0 +6762;6753;0 +6754;6761;0 +6755;6757;0 +6758;6755;0 +6757;6756;0 +6759;6758;0 +6764;6759;0 +6760;6763;0 +6761;6765;0 +6773;6762;0 +6763;6768;0 +6766;6764;0 +6765;6776;0 +6772;6766;0 +6768;6767;0 +6767;6769;0 +6769;6777;0 +6770;6771;0 +6775;6770;0 +6771;6779;0 +6780;6772;0 +6774;6773;0 +6784;6774;0 +6778;6775;0 +6776;6782;0 +6777;6781;0 +6791;6778;0 +6779;6783;0 +6783;6780;0 +6781;6787;0 +6782;6814;0 +6797;6784;0 +6785;6786;0 +6787;6785;0 +6786;6798;0 +6788;6790;0 +6795;6788;0 +6792;6789;0 +6789;6795;0 +6790;6803;0 +6796;6791;0 +6799;6792;0 +6794;6793;0 +6793;6808;0 +6802;6794;0 +6805;6796;0 +6806;6797;0 +6798;6800;0 +6801;6799;0 +6800;6801;0 +6804;6802;0 +6803;6804;0 +6824;6805;0 +6812;6806;0 +6807;6809;0 +6815;6807;0 +6808;6818;0 +6809;6820;0 +6810;6811;0 +6813;6810;0 +6811;6821;0 +6826;6812;0 +6825;6813;0 +6814;6838;0 +6827;6815;0 +6816;6819;0 +6820;6816;0 +6823;6817;0 +6817;6825;0 +6818;6831;0 +6819;6830;0 +6821;6822;0 +6822;6824;0 +6829;6823;0 +6834;6826;0 +6828;6827;0 +6832;6828;0 +6835;6829;0 +6830;6833;0 +6831;6837;0 +6836;6832;0 +6833;6842;0 +6840;6834;0 +6839;6835;0 +6843;6836;0 +6837;6839;0 +6838;6841;0 +6851;6840;0 +6841;6846;0 +6842;6844;0 +6844;6843;0 +6846;6845;0 +6845;6849;0 +6848;6847;0 +6847;6850;0 +6852;6848;0 +6849;6853;0 +6850;6854;0 +6858;6851;0 +6853;6852;0 +6854;6855;0 +6855;6856;0 +6856;6857;0 +6857;6859;0 +6860;6858;0 +6859;6861;0 +6862;6860;0 +6861;6863;0 +6866;6862;0 +6863;6864;0 +6864;6865;0 +6865;6867;0 +6868;6866;0 +6867;6869;0 +6870;6868;0 +6869;6871;0 +6872;6870;0 +6871;6875;0 +6873;6872;0 +6874;6873;0 +6877;6874;0 +6875;6876;0 +6876;6878;0 +6888;6877;0 +6878;6881;0 +6879;6880;0 +6883;6879;0 +6880;6882;0 +6881;6885;0 +6882;6889;0 +6884;6883;0 +6886;6884;0 +6885;6887;0 +6891;6886;0 +6887;6890;0 +6899;6888;0 +6889;6892;0 +6890;6893;0 +6895;6891;0 +6892;6894;0 +6893;6900;0 +6894;6896;0 +6897;6895;0 +6896;6901;0 +6898;6897;0 +6907;6898;0 +6904;6899;0 +6900;6902;0 +6901;6906;0 +6902;6903;0 +6903;6905;0 +6912;6904;0 +6905;6909;0 +6906;6908;0 +6910;6907;0 +6908;6911;0 +6909;6919;0 +6913;6910;0 +6911;6924;0 +6918;6912;0 +6914;6913;0 +6920;6914;0 +6916;6915;0 +6915;6922;0 +6917;6916;0 +6923;6917;0 +6921;6918;0 +6919;6938;0 +6927;6920;0 +6922;6921;0 +6925;6923;0 +6924;6929;0 +6926;6925;0 +6928;6926;0 +6932;6927;0 +6931;6928;0 +6929;6930;0 +6930;6936;0 +6933;6931;0 +6952;6932;0 +6934;6933;0 +6942;6934;0 +6935;6937;0 +6940;6935;0 +6936;6945;0 +6937;6943;0 +6938;6939;0 +6939;6940;0 +6941;6944;0 +6947;6941;0 +6946;6942;0 +6943;6948;0 +6944;6951;0 +6945;6953;0 +6956;6946;0 +6949;6947;0 +6948;6949;0 +6951;6950;0 +6950;6954;0 +6963;6952;0 +6953;6960;0 +6954;6955;0 +6955;6958;0 +6964;6956;0 +6957;6959;0 +6961;6957;0 +6958;6966;0 +6959;6962;0 +6960;6965;0 +6972;6961;0 +6962;6967;0 +6969;6963;0 +6966;6964;0 +6965;6975;0 +6967;6968;0 +6968;6970;0 +6983;6969;0 +6970;6971;0 +6971;6974;0 +6973;6972;0 +6978;6973;0 +6974;6976;0 +6975;6977;0 +6976;6979;0 +6977;6982;0 +6981;6978;0 +6979;6980;0 +6980;6984;0 +6987;6981;0 +6982;6986;0 +6985;6983;0 +6984;6985;0 +6986;6989;0 +6988;6987;0 +6990;6988;0 +6989;6992;0 +6991;6990;0 +6994;6991;0 +6992;6993;0 +6993;6994;0 +6996;6995;0 +6995;6997;0 +6998;6996;0 +6997;6999;0 +7000;6998;0 +6999;7001;0 +7012;7000;0 +7001;7003;0 +7004;7002;0 +7002;7007;0 +7003;7005;0 +7009;7004;0 +7005;7008;0 +7007;7006;0 +7006;7010;0 +7008;7011;0 +7011;7009;0 +7010;7015;0 +7013;7012;0 +7014;7013;0 +7016;7014;0 +7015;7017;0 +7031;7016;0 +7017;7018;0 +7018;7019;0 +7019;7022;0 +7021;7020;0 +7020;7023;0 +7028;7021;0 +7022;7037;0 +7023;7024;0 +7024;7025;0 +7025;7026;0 +7026;7027;0 +7027;7029;0 +7030;7028;0 +7029;7034;0 +7033;7030;0 +7036;7031;0 +7034;7032;0 +7032;7036;0 +7035;7033;0 +7041;7035;0 +7037;7047;0 +7039;7038;0 +7038;7040;0 +7042;7039;0 +7040;7043;0 +7045;7041;0 +7044;7042;0 +7043;7045;0 +7046;7044;0 +7048;7046;0 +7047;7049;0 +7050;7048;0 +7049;7051;0 +7052;7050;0 +7051;7053;0 +7054;7052;0 +7053;7056;0 +7055;7054;0 +7059;7055;0 +7056;7057;0 +7057;7058;0 +7058;7060;0 +7064;7059;0 +7060;7061;0 +7061;7065;0 +7063;7062;0 +7062;7064;0 +7066;7063;0 +7065;7068;0 +7067;7066;0 +7068;7067;0 +7069;7070;0 diff --git a/mesh2d/poly-data/lake-1-small.png b/mesh2d/poly-data/lake-1-small.png new file mode 100755 index 0000000000000000000000000000000000000000..7b7235fccaa6b5cb546a39086e2c317d32852b77 GIT binary patch literal 71105 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 literal 0 HcmV?d00001 diff --git a/mesh2d/poly-data/lake-2-small.png b/mesh2d/poly-data/lake-2-small.png new file mode 100755 index 0000000000000000000000000000000000000000..394f7e691eb1bb7ebe40cb33047855971b5e9e2c GIT binary patch literal 104675 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

t* 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

*^ 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 lCiC*kFJrOTHH&>K{1<g=+1), node = varargin{1}; end + if (nargin>=+2), PSLG = varargin{2}; end + if (nargin>=+3), part = varargin{3}; end + if (nargin>=+4), opts = varargin{4}; end + if (nargin>=+5), hfun = varargin{5}; end + if (nargin>=+6), harg = varargin(6:end); end + + [opts] = makeopt(opts); + +%---------------------------------------------- default EDGE + nnod = size(node,1); + + if (isempty(PSLG)) + PSLG = [(1:nnod-1)',(2:nnod)'; nnod,1] ; + end + +%---------------------------------------------- default PART + ncon = size(PSLG,1); + + if (isempty(part)), part{1} = (1:ncon)'; end + +%---------------------------------------------- basic checks + if (~isnumeric(node) || ~isnumeric(PSLG) || ... + ~iscell(part) || ~isstruct(opts)) + error('refine2:incorrectInputClass' , ... + 'Incorrect input class.') ; + end + +%---------------------------------------------- basic checks + if (ndims(node) ~= +2 || ndims(PSLG) ~= +2) + error('refine2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + if (size(node,2)~= +2 || size(PSLG,2)~= +2) + error('refine2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + +%---------------------------------------------- basic checks + if (min([PSLG(:)])<+1 || max([PSLG(:)])>nnod) + error('refine2:invalidInputs', ... + 'Invalid EDGE input array.') ; + end + + pmin = cellfun(@min,part); + pmax = cellfun(@max,part); + + if (min([pmin(:)])<+1 || max([pmax(:)])>ncon) + error('refine2:invalidInputs', ... + 'Invalid PART input array.') ; + end + +%-------------------------------- prune any non-unique topo. + [PSLG,ivec,jvec] = ... + unique(sort(PSLG,+2),'rows') ; + + for ppos = +1:length(part) + + if ( ~isnumeric(part{ppos}) ) + error ( ... + 'refine2:incorrectInputClass', ... + 'Incorrect input class. ') ; + end + + part{ppos} = ... + unique(jvec(part{ppos})) ; + + end + +%-------------------------------- check part "manifold-ness" + for ppos = +1:length(part) + + eloc = PSLG(part{ppos},:) ; + nadj = ... + accumarray(eloc(:),1) ; + + if (any(mod(nadj,2) ~= 0) ) + error('refine2:nonmanifoldInputs', ... + 'Non-manifold PART detected.') ; + end + + end + +%---------------------------------------------- output title + if (~isinf(opts.disp)) + fprintf(1,'\n') ; + fprintf(1,' Refine triangulation...\n') ; + fprintf(1,'\n') ; + fprintf(1,[... +' -------------------------------------------------------\n', ... +' |ITER.| |CDT1(X)| |CDT2(X)| \n', ... +' -------------------------------------------------------\n', ... + ] ) ; + end + +%-------------------------------- PASS 0: inflate box bounds + vert = node ; tria = []; tnum = []; + conn = PSLG ; iter = +0; + + vmin = min(vert,[],1); % inflate bbox for stability + vmax = max(vert,[],1); + + vdel = vmax - 1.*vmin; + vmin = vmin - .5*vdel; + vmax = vmax + .5*vdel; + + vbox = [ + vmin(1), vmin(2) + vmax(1), vmin(2) + vmax(1), vmax(2) + vmin(1), vmax(2) + ] ; + vert = [vert ; vbox] ; + +%-------------------------------- PASS 0: shield sharp feat. + [vert,conn,tria,tnum,iter] = ... + cdtbal0(vert,conn,tria,tnum, ... + node,PSLG,part,opts,hfun,harg,iter); + +%-------------------------------- PASS 1: refine 1-simplexes + [vert,conn,tria,tnum,iter] = ... + cdtref1(vert,conn,tria,tnum, ... + node,PSLG,part,opts,hfun,harg,iter); + +%-------------------------------- PASS 2: refine 2-simplexes + [vert,conn,tria,tnum,iter] = ... + cdtref2(vert,conn,tria,tnum, ... + node,PSLG,part,opts,hfun,harg,iter); + + if (~isinf(opts.disp)), fprintf(1,'\n'); end + +%-------------------------------- trim extra adjacency info. + tria = tria( :,1:3); + +%-------------------------------- trim vert. - deflate bbox. + keep = false(size(vert,1),1); + keep(tria(:)) = true ; + keep(conn(:)) = true ; + + redo = zeros(size(vert,1),1); + redo(keep) = ... + (+1:length(find(keep)))'; + + conn = redo(conn); + tria = redo(tria); + + vert = vert(keep,:); + +end + +function [vert,conn,tria,tnum,iter] = ... + cdtbal0(vert,conn,tria,tnum, ... + node,PSLG,part,opts,hfun,harg,iter) +%CDTBAL0 constrained Delaunay-refinement for "sharp" 0-dim. +%features at PSLG vertices. +% [...] = CDTBAL0(...) refines the set of 1-simplex eleme- +% nts incident to "sharp" features in the PSLG. Specifica- +% lly, edges that subtend "small" angles are split about a +% set of new "collar" vertices, equi-distributed about the +% centre of "sharp" features. Collar size is computed as a +% min. of the incident edge-len. and local mesh-size cons- +% traints. + + if (iter <= opts.iter) + + %------------------------------------- build current CDT + [vert,conn, ... + tria,tnum] = deltri2(vert,conn, ... + node,PSLG, ... + part, ... + opts.dtri) ; + + %------------------------------------- build current adj + [edge,tria] = tricon2(tria,conn) ; + + [feat,ftri] = isfeat2(vert,edge, ... + tria) ; + + apex = false(size(vert,1), 1) ; + apex(tria(ftri)) = true ; + + %------------------------------------- eval. length-fun. + if (~isempty(hfun)) + if (isnumeric(hfun)) + vlen = hfun * ... + ones(size(vert,1),1) ; + else + vlen = feval( ... + hfun,vert,harg{:}) ; + vlen = vlen(:) ; + end + else + vlen = +inf * ... + ones(size(vert,1),1) ; + end + + %------------------------------------- form edge vectors + evec = vert(conn(:,2),:) ... + - vert(conn(:,1),:) ; + elen = sqrt(sum(evec.^2,2)); + evec = evec./[elen,elen] ; + + %------------------------------------- min. adj. lengths + for epos = +1 : size(conn,1) + + ivrt = conn(epos,1) ; + jvrt = conn(epos,2) ; + + vlen(ivrt) = min( ... + vlen(ivrt), .67*elen(epos)) ; + vlen(jvrt) = min( ... + vlen(jvrt), .67*elen(epos)) ; + + end + + %------------------------------------- mark feature edge + iref = apex(conn(:,1)) ... %- refine at vert. 1 + & ~apex(conn(:,2)) ; + jref = apex(conn(:,2)) ... %- refine at vert. 2 + & ~apex(conn(:,1)) ; + dref = apex(conn(:,1)) ... %- refine at both! + & apex(conn(:,2)) ; + + keep =~apex(conn(:,1)) ... %- refine at neither + & ~apex(conn(:,2)) ; + + %------------------------------------- protecting collar + ilen = vlen(conn(iref,1)) ; + inew = vert(conn(iref,1),:) ... + + [ilen,ilen].*evec(iref,:) ; + + jlen = vlen(conn(jref,2)) ; + jnew = vert(conn(jref,2),:) ... + - [jlen,jlen].*evec(jref,:) ; + + Ilen = vlen(conn(dref,1)) ; + Inew = vert(conn(dref,1),:) ... + + [Ilen,Ilen].*evec(dref,:) ; + + Jlen = vlen(conn(dref,2)) ; + Jnew = vert(conn(dref,2),:) ... + - [Jlen,Jlen].*evec(dref,:) ; + + vnew = [inew; jnew; Inew; Jnew] ; + + %------------------------------------- add new vert/edge + iset = (1:size(inew,1))' ... + + size(vert,1) ; + + jset = (1:size(jnew,1))' ... + + size(inew,1) + ... + + size(vert,1) ; + + Iset = (1:size(Inew,1))' ... + + size(inew,1) + ... + + size(jnew,1) + ... + + size(vert,1) ; + + Jset = (1:size(Jnew,1))' ... + + size(inew,1) + ... + + size(jnew,1) + ... + + size(Inew,1) + ... + + size(vert,1) ; + + vert = [vert ; vnew] ; + + cnew = [conn(iref,1), iset ; + conn(iref,2), iset ; + conn(jref,2), jset ; + conn(jref,1), jset ; + conn(dref,1), Iset ; + conn(dref,2), Jset ; + Iset, Jset] ; + conn = [conn(keep,:); cnew ] ; + + end + +end + +function [vert,conn,tria,tnum,iter] = ... + cdtref1(vert,conn,tria,tnum, ... + node,PSLG,part,opts,hfun,harg,iter) +%CDTREF1 constrained Delaunay-refinement for 1-simplex elem- +%nts embedded in R^2. +% [...] = CDTREF1(...) refines the set of 1-simplex eleme- +% nts embedded in the triangulation until all constraints +% are satisfied. Specifically, edges are refined until all +% local mesh-spacing and encroachment conditions are met. +% Refinement proceeds according to either a Delaunay-refi- +% nement or Frontal-Delaunay type approach, depending on +% user-settings. In either case, new steiner vertices are +% introduced to split "bad" edges - those that violate the +% set of prescribed constraints. In the "-DR" type process +% edges are split about their circumballs (midpoints). In +% the "-FD" approach, new vertices are positioned such th- +% at mesh-spacing constraints are satisfied in a "locally- +% optimal" fashion. + + tcpu.full = +0. ; + tcpu.ball = +0. ; + tcpu.hfun = +0. ; + tcpu.encr = +0. ; + tcpu.offc = +0. ; + + vidx = (1:size(vert,1))'; %- "new" vert list to test + + tnow = tic ; + + ntol = +1.55; + + while (true) + + iter = iter + 1 ; + + if (iter>=opts.iter),break; end + + %------------------------------------- calc. circumballs + ttic = tic ; + + bal1 = cdtbal1(vert,conn) ; + + tcpu.ball = ... + tcpu.ball + toc(ttic) ; + + %------------------------------------- eval. length-fun. + ttic = tic ; + + if (~isempty(hfun)) + if (isnumeric(hfun)) + fun0 = hfun * ... + ones(size(vert,1),1); + fun1 = hfun ; + else + fun0(vidx) = ... + feval(hfun, ... + vert(vidx,:), harg{:}); + fun0 = fun0(:) ; + fun1 = fun0(conn(:,1))... + + fun0(conn(:,2)); + fun1 = fun1 / +2. ; + end + else + fun0 = +inf * ... + ones(size(vert,1),1); + fun1 = +inf ; + end + + siz1 = ... + +4. * bal1(:,3)./(fun1.*fun1) ; + + tcpu.hfun = ... + tcpu.hfun + toc(ttic) ; + + %------------------------------------- test encroachment + ttic = tic ; + + bal1(:,3) = ... + (1.-eps^.75) * bal1(:,3) ; + + [vp,vi] = ... + findball(bal1,vert(:,1:2)); + + %------------------------------------- near=>[vert,edge] + next = +0; + ebad = false(size(conn,1),1) ; + near = zeros(size(conn,1),1) ; + for ii = +1 : size(vp,1) + for ip = vp(ii,1):vp(ii,2) + jj = vi(ip); + if (ii ~= conn(jj,1) ... + && ii ~= conn(jj,2) ) + next = next + 1; + near(next,1) = ii; + near(next,2) = jj; + end + end + end + + near = near(1:next-0,:); + + if (~isempty(near)) + %-- mark edge "encroached" if there is a vert within its + %-- dia.-ball that is not joined to either of its vert's + %-- via an existing edge... + ivrt = conn(near(:,2),1); + jvrt = conn(near(:,2),2); + + pair = [near(:,1), ivrt]; + ivec = setset2(pair,conn) ; + + pair = [near(:,1), jvrt]; + jvec = setset2(pair,conn) ; + + okay = ~ivec & ~jvec ; + + ebad(near(okay,2))=true ; + + end + + tcpu.encr = ... + tcpu.encr + toc(ttic); + + %------------------------------------- refinement queues + ref1 = false(size(conn,1),1); + ref1(ebad) = true ; %- edge encroachment + ref1(siz1>opts.siz1* ... %- bad equiv. length + opts.siz1) = true ; + + num1 = find(ref1) ; + + %------------------------------------- dump-out progess! + if (mod(iter,opts.disp)==0) + numc = size(conn,1) ; + numt = size(tria,1) ; + fprintf(+1, ... + '%11i %18i %18i\n', ... + [iter,numc,numt]) ; + end + + %------------------------------------- nothing to refine + if (isempty(num1)), break; end + + %------------------------------------- refine "bad" tria + switch (lower(opts.kind)) + case 'delaunay' + %------------------------------------- do circ-ball pt's + new1 = bal1(ref1, 1:2) ; + + vidx = (1:size(new1,1))' ... + + size(vert,1) ; + + cnew = [conn( ref1,1), vidx + conn( ref1,2), vidx]; + conn = [conn(~ref1,:); cnew]; + + %------------------------------------- update vertex set + vert = [vert; new1(:,1:2)]; + + + case 'delfront' + %-- symmetric off-centre scheme:- refine edges from both + %-- ends simultaneously, placing new vertices to satisfy + %-- the worst of mesh-spacing and local voronoi constra- + %-- ints. + + ttic = tic ; + + evec = vert(conn(ref1,2),:) ... + - vert(conn(ref1,1),:) ; + elen = sqrt(sum(evec.^2,2)) ; + evec = evec ./ [elen, elen] ; + + %------------------------------------- "voro"-type dist. + vlen = sqrt(bal1(ref1,3)); + + %------------------------------------- "size"-type dist. + ihfn = fun0(conn(ref1,1)); + jhfn = fun0(conn(ref1,2)); + + %------------------------------------- bind "safe" dist. + ilen = min(vlen,ihfn) ; + jlen = min(vlen,jhfn) ; + + %------------------------------------- locate offcentres + inew = vert(conn(ref1,1),:) ... + + [ilen,ilen].*evec ; + jnew = vert(conn(ref1,2),:) ... + - [jlen,jlen].*evec ; + + %------------------------------------- iter. "size"-type + for ioff = +1 : +3 + %------------------------------------- eval. length-fun. + if (~isempty(hfun)) + if (isnumeric(hfun)) + iprj = hfun * ... + ones(size(inew,1),1); + jprj = hfun * ... + ones(size(jnew,1),1); + else + iprj = feval( ... + hfun,inew,harg{:}); + jprj = feval( ... + hfun,jnew,harg{:}); + iprj = iprj(:); + jprj = jprj(:); + end + else + iprj = +inf * ... + ones(size(inew,1),1); + jprj = +inf * ... + ones(size(jnew,1),1); + end + + iprj = 0.5*ihfn + 0.5*iprj; + jprj = 0.5*jhfn + 0.5*jprj; + + %------------------------------------- bind "safe" dist. + ilen = min(vlen,iprj) ; + jlen = min(vlen,jprj) ; + + %------------------------------------- locate offcentres + inew = vert(conn(ref1,1),:) ... + + [ilen,ilen].*evec ; + jnew = vert(conn(ref1,2),:) ... + - [jlen,jlen].*evec ; + + end + + %------------------------------------- merge i,j if near + near = ... + ilen+jlen>=vlen*ntol ; + + znew = inew(near,:) * .5 ... + + jnew(near,:) * .5 ; + + inew = inew(~near,1:2) ; + jnew = jnew(~near,1:2) ; + + %------------------------------------- split constraints + zset = (1:size(znew,1))' ... + + size(vert,1) ; + + iset = (1:size(inew,1))' ... + + size(znew,1) + ... + + size(vert,1) ; + + jset = (1:size(jnew,1))' ... + + size(znew,1) + ... + + size(inew,1) + ... + + size(vert,1) ; + + set1 = num1( near); + set2 = num1(~near); + + cnew = [conn( set1,1), zset + conn( set1,2), zset + conn( set2,1), iset + conn( set2,2), jset + iset, jset ] ; + conn = [conn(~ref1,:); cnew]; + + %------------------------------------- update vertex set + vert = [vert; znew(:,1:2)]; + vert = [vert; inew(:,1:2)]; + vert = [vert; jnew(:,1:2)]; + + vidx = [zset; iset; jset] ; + + tcpu.offc = ... + tcpu.offc + toc(ttic) ; + + + end % switch(lower(opts.kind)) + + end + + tcpu.full = ... + tcpu.full + toc(tnow) ; + + if (~isinf(opts.disp) ) + %------------------------------------- print final stats + numc = size(conn,1) ; + numt = size(tria,1) ; + fprintf(+1, ... + '%11i %18i %18i\n', ... + [iter,numc,numt]) ; + end + + if (opts.dbug) + %------------------------------------- print debug timer + fprintf(1,'\n') ; + fprintf(1,' 1-simplex REF. timer...\n'); + fprintf(1,'\n') ; + fprintf(1, ... + ' FULL: %f \n', tcpu.full); + fprintf(1, ... + ' BALL: %f \n', tcpu.ball); + fprintf(1, ... + ' HFUN: %f \n', tcpu.hfun); + fprintf(1, ... + ' ENCR: %f \n', tcpu.encr); + fprintf(1, ... + ' OFFC: %f \n', tcpu.offc); + fprintf(1,'\n') ; + end + +end + +function [vert,conn,tria,tnum,iter] = ... + cdtref2(vert,conn,tria,tnum, ... + node,PSLG,part,opts,hfun,harg,iter) +%CDTREF2 constrained Delaunay-refinement for 2-simplex elem- +%nts embedded in R^2. +% [...] = CDTREF2(...) refines the set of 2-simplex eleme- +% nts embedded in the triangulation until all constraints +% are satisfied. Specifically, triangles are refined until +% all local mesh-spacing and element-shape conditions are +% met. Refinement proceeds according to either a Delaunay- +% refinement or Frontal-Delaunay type approach, depending +% on user-settings. In either case, new steiner points are +% introduced to split "bad" triangles - those that violate +% the set of prescribed constraints. In the "-DR" type pr- +% ocess triangles are split about their circumballs. In +% the "-FD" approach, new vertices are positioned such th- +% at mesh-spacing and element-shape constraints are satis- +% fied in a "locally-optimal" fashion. + + tcpu.full = +0. ; + tcpu.dtri = +0. ; + tcpu.tcon = +0. ; + tcpu.ball = +0. ; + tcpu.hfun = +0. ; + tcpu.offc = +0. ; + tcpu.filt = +0. ; + + vidx = (1:size(vert,1))'; %- "new" vert list to test + + tnow = tic ; + + near = +.775; + + while (true) + + iter = iter + 1 ; + + %------------------------------------- build current CDT + ttic = tic ; + + nold = size(vert,1) ; + + [vert,conn, ... + tria,tnum]= deltri2(vert,conn, ... + node,PSLG, ... + part, .... + opts.dtri) ; + + nnew = size(vert,1) ; + + vidx = ... + [vidx; (nold:nnew)'] ; + + tcpu.dtri = ... + tcpu.dtri + toc(ttic) ; + + %------------------------------------- build current adj + ttic = tic ; + + [edge,tria]= tricon2(tria,conn) ; + + tcpu.tcon = ... + tcpu.tcon + toc(ttic) ; + + if (iter>=opts.iter),break; end + + %------------------------------------- calc. circumballs + ttic = tic ; + + bal1 = cdtbal1(vert,conn) ; + bal2 = cdtbal2(vert,edge,tria) ; + len2 = minlen2(vert,tria) ; + + rho2 = bal2(:,+3) ./ len2 ; + + %------------------------------------- refinement scores + scr2 = rho2 .* bal2(:,+3) ; + + tcpu.ball = ... + tcpu.ball + toc(ttic) ; + + %------------------------------------- eval. length-fun. + ttic = tic ; + + if (~isempty(hfun)) + if (isnumeric(hfun)) + fun0 = hfun * ... + ones(size(vert,1),1); + fun2 = hfun ; + else + fun0(vidx) = ... + feval(hfun, ... + vert(vidx,:), harg{:}); + fun0 = fun0(:) ; + fun2 = fun0(tria(:,1))... + + fun0(tria(:,2))... + + fun0(tria(:,3)); + fun2 = fun2 / +3. ; + end + else + fun0 = +inf * ... + ones(size(vert,1),1); + fun2 = +inf ; + end + + siz2 = ... + +3. * bal2(:,3)./(fun2.*fun2) ; + + tcpu.hfun = ... + tcpu.hfun + toc(ttic) ; + + %------------------------------------- refinement queues + ref1 = false(size(conn,1),1); + ref2 = false(size(tria,1),1); + + stri = isfeat2(vert,edge,tria) ; + + ref2(rho2>opts.rho2* ... %- bad rad-edge len. + opts.rho2) = true ; + ref2(stri) = false ; + ref2(siz2>opts.siz2* ... %- bad equiv. length + opts.siz2) = true ; + + num2 = find(ref2); + + %------------------------------------- dump-out progess! + if (mod(iter,opts.disp)==0) + numc = size(conn,1) ; + numt = size(tria,1) ; + fprintf(+1, ... + '%11i %18i %18i\n', ... + [iter,numc,numt]) ; + end + + %------------------------------------- nothing to refine + if (isempty(num2)), break; end + + [scr2,idx2] = sort( ... + scr2(num2),'descend'); + num2 = num2(idx2); + + %------------------------------------- refine "bad" tria + switch (lower(opts.kind)) + case 'delaunay' + %------------------------------------- do circ-ball pt's + new2 = zeros(length(num2),3); + new2(:,1:2) = bal2(num2,1:2); + + rmin = ... %- min. insert radii + len2(num2)*(1.-eps^.75)^2 ; + + new2(:, 3) = max( ... + bal2(num2,3)*near^2,rmin) ; + + + case 'delfront' + %-- off-centre scheme -- refine triangles by positioning + %-- new vertices along a local segment of the voronoi + %-- diagram, bounded by assoc. circmballs. New points + %-- are placed to satisfy the worst of local mesh-length + %-- and element-shape constraints. + + ttic = tic ; + + %------------------------------------- find frontal edge + [lmin,emin] = ... + minlen2(vert,tria(num2,:)) ; + + ftri = false(length(num2),1) ; + epos = zeros(length(num2),1) ; + tadj = zeros(length(num2),1) ; + + for ii = +1 : length(epos) + epos(ii) = tria( ... + num2(ii),emin(ii)+3) ; + end + + %------------------------------------- find frontal tria + for enum = +1 : +3 + + eidx = tria(num2,enum+3) ; + + ftri = ... + ftri | edge(eidx,5) > +0 ; + + ione = ... + num2 ~= edge(eidx,3) ; + itwo = ~ione ; + + tadj(ione) = ... + edge(eidx(ione),3); + tadj(itwo) = ... + edge(eidx(itwo),4); + + okay = tadj > +0 ; + tidx = tadj(okay); + + ftri(okay) = ... + ftri(okay) | ~ref2(tidx) ; + + end + + if (~any(ftri)) %- can this happen!? + ftri = true(length(num2),+1) ; + end + + %------------------------------------- locate offcentres + emid = vert(edge(epos,+1),:) ... + + vert(edge(epos,+2),:) ; + emid = emid * +0.50 ; + + elen = sqrt(lmin(:)); + + %------------------------------------- "voro"-type dist. + vvec = bal2(num2,1:2)-emid ; + vlen = sqrt(sum(vvec.^2,2)); + vvec = vvec ./ [vlen,vlen] ; + + hmid = fun0(edge(epos,+1),:) ... + + fun0(edge(epos,+2),:) ; + hmid = hmid * +0.50 ; + + %------------------------------------- "ball"-type dist. + rtri = elen * opts.off2 ; + rfac = elen * +0.50 ; + dsqr = rtri.^2 - rfac.^2; + doff = rtri + ... + sqrt(max(+0.,dsqr)) ; + + %------------------------------------- "size"-type dist. + dsiz = +sqrt(3.)/2. * hmid ; + + %------------------------------------- bind "safe" dist. + [dist,ioff] = ... + min([dsiz,doff,vlen],[],2) ; + + %------------------------------------- locate offcentres + off2 = ... + emid + [dist,dist] .* vvec ; + + %------------------------------------- iter. "size"-type + for isub = +1 : +3 + %------------------------------------- eval. length-fun. + if (~isempty(hfun)) + if (isnumeric(hfun)) + hprj = hfun * ... + ones(size(off2,1),1) ; + else + hprj = feval( ... + hfun,off2,harg{:}) ; + hprj = hprj(:) ; + end + else + hprj = +inf * ... + ones(size(off2,1),1) ; + end + + %------------------------------------- "size"-type dist. + hprj = .33*hmid + .67*hprj ; + + dsiz = +sqrt(3.)/2. * hprj ; + + dsiz(dsizvlen*.95) = +inf ; %- circ-ball limiter + + %------------------------------------- bind "safe" dist. + [dist,ioff] = ... + min([dsiz,doff,vlen],[],2) ; + + %------------------------------------- locate offcentres + off2 = ... + emid + [dist,dist] .* vvec ; + + end + + orad = ... + sqrt((elen*.5).^2 + dist.^2) ; + + %------------------------------------- do offcentre pt's + new2 = ... + zeros(length(find(ftri)),+3) ; + new2(:,1:2) = off2(ftri,1:2) ; + + rmin = ... %- min. insert radii + lmin(ftri)*(1.-eps^.75)^2 ; + + new2(:, 3) = max( ... + (orad(ftri)*near).^2,rmin); + + tcpu.offc = ... + tcpu.offc + toc (ttic) ; + + + end % switch(lower(opts.kind)) + + %------------------------------------- inter.-ball dist. + ttic = tic ; + + %------------------------------------- proximity filters + [vp,vi] = ... + findball(new2,new2(:,1:2)) ; + + keep = true (size(new2,1),1) ; + for ii = size(vp,1):-1:+1 + for ip = vp(ii,1) ... + : vp(ii,2) + jj = vi(ip); + if (keep(jj) && ... + keep(ii) && ... + jj < ii ) + + keep(ii) = false ; + break; + + end + end + end + + new2 = new2(keep,:); + + %------------------------------------- test encroachment + bal1(:,3) = ... + (1.-eps^.75) * bal1(:,3); + + [vp,vi] = ... + findball(bal1,new2(:,1:2)); + + keep = true (size(new2,1),1); + for ii = +1:+1:size(vp,1) + for ip = vp(ii,1) ... + : vp(ii,2) + jj = vi(ip); + ref1(jj) = true ; + keep(ii) = false ; + end + end + + %------------------------------------- leave sharp edges + ebnd = false(size(edge,1),1); + ebnd(tria(stri,4:6)) = true ; + + enot = ... + setset2(conn,edge(ebnd,1:2)); + + ref1(enot) = false ; + + %------------------------------------- refinement points + new2 = new2(keep,:); + new1 = bal1(ref1,:); + + tcpu.filt = ... + tcpu.filt + toc(ttic) ; + + %------------------------------------- split constraints + idx1 = ... + (1:size(new1))'+size(vert,1) ; + + idx2 = ... + (1:size(new2))'+size(new1,1) ... + +size(vert,1) ; + + cnew = [conn( ref1,1), idx1 + conn( ref1,2), idx1]; + conn = [conn(~ref1,:); cnew]; + + vidx = [idx1; idx2]; + + %------------------------------------- update vertex set + nold = size(vert,1); + vert = [vert; new1(:,1:2)]; + vert = [vert; new2(:,1:2)]; + nnew = size(vert,1); + + if (nnew == nold), break; end %- we *must* be done + + end + + tcpu.full = ... + tcpu.full + toc(tnow) ; + + if (~isinf(opts.disp) ) + %------------------------------------- print final stats + numc = size(conn,1) ; + numt = size(tria,1) ; + fprintf(+1, ... + '%11i %18i %18i\n', ... + [iter,numc,numt]) ; + end + + if (opts.dbug) + %------------------------------------- print debug timer + fprintf(1,'\n') ; + fprintf(1,' 2-simplex REF. timer...\n'); + fprintf(1,'\n') ; + fprintf(1, ... + ' FULL: %f \n', tcpu.full); + fprintf(1, ... + ' DTRI: %f \n', tcpu.dtri); + fprintf(1, ... + ' TCON: %f \n', tcpu.tcon); + fprintf(1, ... + ' BALL: %f \n', tcpu.ball); + fprintf(1, ... + ' HFUN: %f \n', tcpu.hfun); + fprintf(1, ... + ' OFFC: %f \n', tcpu.offc); + fprintf(1, ... + ' FILT: %f \n', tcpu.filt); + fprintf(1,'\n') ; + end + +end + +function [opts] = makeopt(opts) +%MAKEOPT setup the options structure for REFINE2. + + if (~isfield(opts,'dtri')) + opts.dtri = 'constrained'; + else + if (~strcmpi(opts.dtri, 'conforming') && ... + ~strcmpi(opts.dtri,'constrained') ) + error( ... + 'refine2:invalidOption','Invalid constraint KIND.'); + end + end + + if (~isfield(opts,'kind')) + opts.kind = 'delfront'; + else + if (~strcmpi(opts.kind, 'delfront') && ... + ~strcmpi(opts.kind, 'delaunay') ) + error( ... + 'refine2:invalidOption','Invalid refinement KIND.'); + end + end + + if (~isfield(opts,'iter')) + opts.iter = +inf; + else + if (~isnumeric(opts.iter)) + error('refine2:incorrectInputClass', ... + 'Incorrect input class.'); + end + if (numel(opts.iter)~= +1) + error('refine2:incorrectDimensions', ... + 'Incorrect input dimensions.') ; + end + if (opts.iter <= +0) + error('refine2:invalidOptionValues', ... + 'Invalid OPT.ITER selection.') ; + end + end + + if (~isfield(opts,'disp')) + opts.disp = +10 ; + else + if (~isnumeric(opts.disp)) + error('refine2:incorrectInputClass', ... + 'Incorrect input class.'); + end + if (numel(opts.disp)~= +1) + error('refine2:incorrectDimensions', ... + 'Incorrect input dimensions.') ; + end + if (opts.disp <= +0) + error('refine2:invalidOptionValues', ... + 'Invalid OPT.DISP selection.') ; + end + end + + if (~isfield(opts,'rho2')) + opts.rho2 = 1.025; + else + if (~isnumeric(opts.rho2)) + error('refine2:incorrectInputClass', ... + 'Incorrect input class.'); + end + if (numel(opts.rho2)~= +1) + error('refine2:incorrectDimensions', ... + 'Incorrect input dimensions.') ; + end + if (opts.rho2 < +1.) + error('refine2:invalidOptionValues', ... + 'Invalid OPT.RHO2 selection.') ; + end + end + + if (~isfield(opts,'off2')) + opts.off2 = 0.933; + else + if (~isnumeric(opts.off2)) + error('refine2:incorrectInputClass', ... + 'Incorrect input class.'); + end + if (numel(opts.off2)~= +1) + error('refine2:incorrectDimensions', ... + 'Incorrect input dimensions.') ; + end + if (opts.off2 < +.7) + error('refine2:invalidOptionValues', ... + 'Invalid OPT.OFF2 selection.') ; + end + end + + if (~isfield(opts,'siz1')) + opts.siz1 = 1.333; + else + if (~isnumeric(opts.siz1)) + error('refine2:incorrectInputClass', ... + 'Incorrect input class.'); + end + if (numel(opts.siz1)~= +1) + error('refine2:incorrectDimensions', ... + 'Incorrect input dimensions.') ; + end + if (opts.siz1 <= 0.) + error('refine2:invalidOptionValues', ... + 'Invalid OPT.SIZ1 selection.') ; + end + end + + if (~isfield(opts,'siz2')) + opts.siz2 = 1.300; + else + if (~isnumeric(opts.siz2)) + error('refine2:incorrectInputClass', ... + 'Incorrect input class.'); + end + if (numel(opts.siz2)~= +1) + error('refine2:incorrectDimensions', ... + 'Incorrect input dimensions.') ; + end + if (opts.siz2 <= 0.) + error('refine2:invalidOptionValues', ... + 'Invalid OPT.SIZ2 selection.') ; + end + end + + if (~isfield(opts,'dbug')) + opts.dbug = false; + else + if (~islogical(opts.dbug)) + error('refine2:incorrectInputClass', ... + 'Incorrect input class.'); + end + if (numel(opts.dbug)~= +1) + error('refine2:incorrectDimensions', ... + 'Incorrect input dimensions.') ; + end + end + +end + + + diff --git a/mesh2d/relhfn2.m b/mesh2d/relhfn2.m new file mode 100755 index 0000000..67c3ed8 --- /dev/null +++ b/mesh2d/relhfn2.m @@ -0,0 +1,61 @@ +function [hrel] = relhfn2(pp,tt,hv) +%RELHFN2 calc. relative edge-length for a 2-simplex triangu- +%lation embedded in the two-dimensional plane. +% [HREL] = RELHFN2(VERT,TRIA) returns the rel. edge-len., +% indicating conformance to the imposed mesh-spacing cons- +% traints, where HREL is a E-by-1 vector, VERT is a V-by-2 +% array of XY coordinates, and TRIA is a T-by-3 array of +% vertex indexing, where each row defines a triangle, such +% that VERT(TRIA(II,1),:), VERT(TRIA(II,2),:) and VERT( +% TRIA(II,3),:) are the coordinates of the II-TH triangle. +% +% See also TRISCR2, TRIAREA, TRIANG2, TRIBAL2 + +% Darren Engwirda : 2017 -- +% Email : de2363@columbia.edu +% Last updated : 11/07/2017 + +%---------------------------------------------- basic checks + if (~isnumeric(pp) || ~isnumeric(tt) || ... + ~isnumeric(hv) ) + error('relhfn2:incorrectInputClass' , ... + 'Incorrect input class.') ; + end + +%---------------------------------------------- basic checks + if (ndims(pp) ~= +2 || ndims(tt) ~= +2 ) + error('relhfn2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + if (size(pp,2)~= +2 || size(tt,2) < +3 ) + error('relhfn2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + if (size(hv,2)~= +1 || size(hv,1) ~= size(pp,1) ) + error('relhfn2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + + nnod = size(pp,1) ; + +%---------------------------------------------- basic checks + if (min(min(tt(:,1:3))) < +1 || ... + max(max(tt(:,1:3))) > nnod ) + error('relhfn2:invalidInputs', ... + 'Invalid TRIA input array.') ; + end + +%----------------------------------- compute rel. mesh-sizes + [ee,tt] = tricon2(tt); + + evec = pp(ee(:,2),:)-pp(ee(:,1),:) ; + + elen = sqrt(sum(evec.^2,+2)); + + hmid = hv(ee(:,2),:)+hv(ee(:,1),:) ; + hmid = hmid * +0.50 ; + hrel = elen ./ hmid ; + +end + + diff --git a/mesh2d/setset2.m b/mesh2d/setset2.m new file mode 100755 index 0000000..204bf46 --- /dev/null +++ b/mesh2d/setset2.m @@ -0,0 +1,60 @@ +function [same,sloc] = setset2(iset,jset) +%SETSET2 a (much) faster variant of ISMEMBER for edge lists. +% [IN] = SETSET2(ISET,JSET) returns an I-by-1 array IN, +% with IN(K) = TRUE if ISET(K,:) is present in JSET. This +% routine is essentially an optimised ISMEMBER variant de- +% signed for processing lists of edge indexing. ISET is an +% I-by-2 array of "query" edges, JSET is a J-by-2 array of +% edges to test against. +% +% See also ISMEMBER + +% Darren Engwirda : 2017 -- +% Email : engwirda@mit.edu +% Last updated : 29/01/2017 + +%---------------------------------------------- basic checks + if ( ~isnumeric(iset) || ~isnumeric(jset) ) + error('setset2:incorrectInputClass' , ... + 'Incorrect input class.') ; + end + +%---------------------------------------------- basic checks + if (ndims(iset) ~= +2 || ndims(jset) ~= +2) + error('setset2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + if (size(iset,2)~= +2 || size(jset,2)~= +2) + error('setset2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + +%---------------------------------------------- set v1 <= v2 + iset = sort(iset,2) ; + jset = sort(jset,2) ; + +%-- this is the slow, but easy-to-undertsand version of what +%-- is happening here... + + % if (nargout == +1) + % same = ismember(iset,jset,'rows') ; + % else + % [same,sloc] = ... + % ismember(iset,jset,'rows') ; + +%-- as above, the 'ROWS' based call to ISMEMBER can be sped +%-- up by casting the edge lists (i.e. pairs of UINT32 valu- +%-- es) to DOUBLE, and performing the sorted queries on vec- +%-- tor inputs! + if (nargout == +1) + same = ismember( ... + iset*[2^31;1], jset*[2^31;1]) ; + else + [same,sloc] = ismember( ... + iset*[2^31;1], jset*[2^31;1]) ; + end + +end + + + diff --git a/mesh2d/smooth2.m b/mesh2d/smooth2.m new file mode 100755 index 0000000..59b30d2 --- /dev/null +++ b/mesh2d/smooth2.m @@ -0,0 +1,645 @@ +function [vert,conn,tria,tnum] = smooth2(varargin) +%SMOOTH2 "hill-climbing" mesh-smoothing for two-dimensional, +%2-simplex triangulations. +% [VERT,EDGE,TRIA,TNUM] = SMOOTH2(VERT,EDGE,TRIA,TNUM) re- +% turns a "smoothed" triangulation {VERT,TRIA}, incorpora- +% ting "optimised" vertex coordinates and mesh topology. +% +% VERT is a V-by-2 array of XY coordinates in the triangu- +% lation, EDGE is an array of constrained edges, TRIA is a +% T-by-3 array of triangles, and TNUM is a T-by-1 array of +% part indices. Each row of TRIA and EDGE define an eleme- +% nt. VERT(TRIA(II,1),:), VERT(TRIA(II,2),:) and VERT(TRIA +% (II,3),:) are the coordinates of the II-TH triangle. The +% edges in EDGE are defined in a similar manner. NUM is an +% array of part indexing, such that TNUM(II) is the index +% of the part in which the II-TH triangle resides. +% +% [VERT,EDGE,TRIA,TNUM] = SMOOTH2(... ,OPTS) passes an ad- +% ditional options structure OPTS, containing user-defined +% parameters, including: +% +% - OPTS.VTOL = {+1.0E-02} -- relative vertex movement tole- +% rance, smoothing is converged when (VNEW-VERT) <= VTOL * +% VLEN, where VLEN is a local effective length-scale. +% +% - OPTS.ITER = {+32} -- max. number of smoothing iterations +% +% - OPTS.DISP = {+ 4} -- smoothing verbosity. Set to INF for +% quiet execution. +% +% See also REFINE2, DRAWSCR, TRIDEMO + +% This routine is loosely based on the DISTMESH algorithm, +% employing a "spring-based" analogy to redistribute mesh +% vertices. Such an approach is described in: P.O. Persson +% and Gilbert Strang. "A simple mesh generator in MATLAB." +% SIAM review 46(2) 2004, pp: 329--345. Details of the al- +% gorithm used here are somewhat different, with an alter- +% ative spring-based update employed, in addition to hill- +% climbing element quality guarantees, and vertex density +% controls. + +%----------------------------------------------------------- +% Darren Engwirda : 2017 -- +% Email : de2363@columbia.edu +% Last updated : 21/07/2017 +%----------------------------------------------------------- + + filename = mfilename('fullpath'); + filepath = fileparts( filename ); + + addpath([filepath,'/aabb-tree']); + +%---------------------------------------------- extract args + vert = []; conn = []; tria = []; tnum = [] ; + opts = []; hfun = []; harg = {}; + + if (nargin>=+1), vert = varargin{1}; end + if (nargin>=+2), conn = varargin{2}; end + if (nargin>=+3), tria = varargin{3}; end + if (nargin>=+4), tnum = varargin{4}; end + if (nargin>=+5), opts = varargin{5}; end + + [opts] = makeopt(opts) ; + +%---------------------------------------------- default CONN + if (isempty(conn)) + + [edge] = tricon2(tria); + + ebnd = edge(:,4) < +1; %-- use bnd edge + conn = edge(ebnd,1:2); + + end + +%---------------------------------------------- default TNUM + if (isempty(tnum)) + tnum = ones(size(tria, 1), 1) ; + end + +%---------------------------------------------- basic checks + if ( ~isnumeric(vert) || ... + ~isnumeric(conn) || ... + ~isnumeric(tria) || ... + ~isnumeric(tnum) || ... + ~isstruct (opts) ) + error('smooth2:incorrectInputClass' , ... + 'Incorrect input class.') ; + end + +%---------------------------------------------- basic checks + if (ndims(vert) ~= +2 || ... + ndims(conn) ~= +2 || ... + ndims(tria) ~= +2 || ... + ndims(tnum) ~= +2 ) + error('smooth2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + + if (size(vert,2)~= +2 || ... + size(conn,2)~= +2 || ... + size(tria,2)~= +3 || ... + size(tnum,2)~= +1 || ... + size(tria,1)~= size(tnum,1) ) + error('smooth2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + + nvrt = size(vert,1) ; + +%---------------------------------------------- basic checks + if (min(min(conn(:,1:2))) < +1 || ... + max(max(conn(:,1:2))) > nvrt ) + error('smooth2:invalidInputs', ... + 'Invalid EDGE input array.') ; + end + + if (min(min(tria(:,1:3))) < +1 || ... + max(max(tria(:,1:3))) > nvrt ) + error('smooth2:invalidInputs', ... + 'Invalid TRIA input array.') ; + end + +%---------------------------------------------- output title + if (~isinf(opts.disp)) + fprintf(1,'\n') ; + fprintf(1,' Smooth triangulation...\n') ; + fprintf(1,'\n') ; + fprintf(1,[... +' -------------------------------------------------------\n', ... +' |ITER.| |MOVE(X)| |DTRI(X)| \n', ... +' -------------------------------------------------------\n', ... + ] ) ; + end + +%---------------------------------------------- polygon bnds + node = vert; PSLG = conn; part = {}; + + pmax = max(tnum(:)); + for ppos = +1 : pmax + + tsel = tnum == ppos ; + tcur = tria(tsel,:) ; + + [ecur,tcur] ... + = tricon2 (tcur) ; + + ebnd = ecur(:,4)==0 ; + + same = setset2( ... + PSLG,ecur(ebnd,1:2)); + + part{ppos} = find(same) ; + + end + +%---------------------------------------------- inflate bbox + vmin = min(vert,[],1); + vmax = max(vert,[],1); + + vdel = vmax - 1.*vmin; + vmin = vmin - .5*vdel; + vmax = vmax + .5*vdel; + + vbox = [ + vmin(1), vmin(2) + vmax(1), vmin(2) + vmax(1), vmax(2) + vmin(1), vmax(2) + ] ; + vert = [vert ; vbox] ; + +%---------------------------------------------- DO MESH ITER + tnow = tic ; + + tcpu = struct('full',0.,'dtri',0., ... + 'tcon',0.,'iter',0.,'undo',0., ... + 'keep',0.) ; + + for iter = +1 : opts.iter + + %------------------------------------------ inflate adj. + ttic = tic ; + + [edge,tria] = tricon2(tria,conn) ; + + tcpu.tcon = ... + tcpu.tcon + toc(ttic) ; + + %------------------------------------------ compute scr. + oscr = triscr2(vert,tria) ; + + %------------------------------------------ vert. iter's + ttic = tic ; + + nvrt = size(vert,1); + nedg = size(edge,1); + + IMAT = sparse( ... + edge(:,1),(1:nedg)',+1,nvrt,nedg) ; + JMAT = sparse( ... + edge(:,2),(1:nedg)',+1,nvrt,nedg) ; + + EMAT = IMAT + JMAT ; + + vdeg = sum(EMAT,2) ; %-- vertex |deg| + free = (vdeg == 0) ; + + vold = vert ; + for isub = +1 : max(+2,min(+8,iter)) + + %-- compute HFUN at vert/midpoints + hvrt = evalhfn(vert, ... + edge,EMAT,hfun,harg) ; + + hmid = hvrt(edge(:,1),:) ... + + hvrt(edge(:,2),:) ; + hmid = hmid * +.5 ; + + %-- calc. relative edge extensions + evec = vert(edge(:,2),:) ... + - vert(edge(:,1),:) ; + elen = ... + sqrt(sum(evec.^2,2)) ; + + scal = +1.0-elen./hmid ; + scal = min (+1.0, scal); + scal = max (-1.0, scal); + + %-- projected points from each end + ipos = vert(edge(:,1),:) ... + -.67*[scal,scal].*evec; + jpos = vert(edge(:,2),:) ... + +.67*[scal,scal].*evec; + + %scal = ... %-- nlin. weight + % max(abs(scal).^.5,eps^.75); + scal = ... + max(abs(scal).^ 1,eps^.75); + + %-- sum contributions edge-to-vert + vnew = ... + IMAT*([scal,scal] .* ipos) ... + + JMAT*([scal,scal] .* jpos) ; + + vsum = max(EMAT*scal,eps^.75); + + vnew = vnew ./ [vsum,vsum] ; + + %-- fixed points. edge projection? + vnew(conn(:),1:2) = ... + vert(conn(:),1:2) ; + + vnew(vdeg==0,1:2) = ... + vert(vdeg==0,1:2) ; + + %-- reset for the next local iter. + vert = vnew ; + + end + + tcpu.iter = ... + tcpu.iter + toc(ttic) ; + + %------------------------------------------ hill-climber + ttic = tic ; + + %-- unwind vert. upadte if score lower + nscr = ones(size(tria,1),1); + btri = true(size(tria,1),1); + + umax = + 8 ; + + for undo = +1 : umax + + nscr(btri) = triscr2( ... + vert,tria(btri,:)) ; + + %-- TRUE if tria needs "unwinding" + smin = +.70 ; + smax = +.90 ; + sdel = .025 ; + + stol = smin+iter*sdel; + stol = min (smax,stol) ; + + btri = nscr <= stol ... + & nscr < oscr ; + + if (~any(btri)), break; end + + %-- relax toward old vert. coord's + ivrt = ... + unique(tria(btri,1:3)); + + bvrt = ... + false(size(vert,1),1) ; + bvrt(ivrt) = true; + + if (undo ~= umax) + bnew = +.75 ^ undo ; + bold = +1.0 - bnew ; + else + bnew = +0.0 ; + bold = +1.0 - bnew ; + end + + vert(bvrt,:) = ... + bold * vold(bvrt,:) ... + + bnew * vert(bvrt,:) ; + + btri = any( ... + bvrt(tria(:,1:3)),2) ; + + end + + oscr = nscr ; + + tcpu.undo = ... + tcpu.undo + toc(ttic) ; + + %------------------------------------- test convergence! + ttic = tic ; + + vdel = ... + sum((vert-vold).^2,2) ; + + evec = vert(edge(:,2),:) ... + - vert(edge(:,1),:) ; + elen = ... + sqrt(sum(evec.^2,2)) ; + + hvrt = evalhfn(vert, ... + edge,EMAT,hfun,harg) ; + + hmid = hvrt(edge(:,1),:) ... + + hvrt(edge(:,2),:) ; + hmid = hmid * 0.5 ; + scal = elen./hmid ; + + emid = vert(edge(:,1),:) ... + + vert(edge(:,2),:) ; + emid = emid * 0.5 ; + + %------------------------------------- |deg|-based prune + keep = false(size(vert,1),1); + keep(vdeg>+4) = true ; + + keep(conn(:)) = true ; + keep(free(:)) = true ; + + %------------------------------------- 'density' control + lmax = +5. / +4. ; + lmin = +1. / lmax ; + + less = scal<=lmin ; + more = scal>=lmax ; + + vbnd = false(size(vert,1),1); + vbnd(conn(:,1)) = true ; + vbnd(conn(:,2)) = true ; + + ebad = vbnd(edge(:,1)) ... %-- not at boundaries + | vbnd(edge(:,2)) ; + + less(ebad(:)) = false; + more(ebad(:)) = false; + + %------------------------------------- force as disjoint + lidx = find (less) ; + + for lpos = 1 : length(lidx) + epos = lidx(lpos,1); + inod = edge(epos,1); + jnod = edge(epos,2); + %--------------------------------- if still disjoint + if (keep(inod) && ... + keep(jnod) ) + + keep(inod) = false ; + keep(jnod) = false ; + + else + + less(epos) = false ; + + end + end + + ebad = ... + keep(edge(less,1)) ... + & keep(edge(less,2)) ; + + more(ebad(:)) = false ; + + %------------------------------------- reindex vert/tria + redo = ... + zeros(size(vert,1),1); + itop = ... + length(find(keep)); + iend = ... + length(find(less)); + + redo(keep) = (1:itop)'; + + redo(edge(less,1)) = ... %-- to new midpoints + (itop+1 : itop+iend)'; + redo(edge(less,2)) = ... + (itop+1 : itop+iend)'; + + vnew =[vert(keep,:) ; + emid(less,:) ; + ] ; + tnew = redo(tria(:,1:3)) ; + + ttmp = sort(tnew,2) ; %-- filter collapsed + okay = all( ... + diff(ttmp,1,2)~=0,2) ; + okay = ... + okay & ttmp(:,1) > 0 ; + tnew = tnew(okay,:) ; + + %------------------------------------- quality preserver + nscr = ... + triscr2 (vnew,tnew) ; + + stol = +0.80 ; + + tbad = nscr < stol ... + & nscr < oscr(okay) ; + + vbad = ... + false(size(vnew,1),1); + vbad(tnew(tbad,:)) = true; + + %------------------------------------- filter edge merge + lidx = find (less) ; + + ebad = ... + vbad(redo(edge(lidx,1))) | ... + vbad(redo(edge(lidx,2))) ; + + less(lidx(ebad)) = false ; + + keep(edge(... + lidx(ebad),1:2)) = true ; + + %------------------------------------- reindex vert/conn + redo = ... + zeros(size(vert,1),1); + itop = ... + length(find(keep)); + iend = ... + length(find(less)); + + redo(keep) = (1:itop)'; + + redo(edge(less,1)) = ... + (itop+1 : itop+iend)'; + redo(edge(less,2)) = ... + (itop+1 : itop+iend)'; + + vert =[vert(keep,:); + emid(less,:); + emid(more,:); + ] ; + conn = redo(conn(:,1:2)) ; + + tcpu.keep = ... + tcpu.keep + toc(ttic) ; + + %------------------------------------- build current CDT + ttic = tic ; + + [vert,conn,tria,tnum] = ... + deltri2 (vert, ... + conn,node,PSLG,part) ; + + tcpu.dtri = ... + tcpu.dtri + toc(ttic) ; + + %------------------------------------- dump-out progess! + vdel = vdel./(hvrt.*hvrt) ; + move = vdel > opts.vtol^2 ; + nmov = ... + length(find(move)); + + ntri = size(tria,1) ; + + if (mod(iter,opts.disp)==+0) + fprintf(+1, ... + '%11i %18i %18i\n', ... + [iter,nmov,ntri]) ; + end + + %------------------------------------- loop convergence! + if (nmov == +0), break; end + + end + + tria = tria( :,1:3); + +%----------------------------------------- prune unused vert + keep = false(size(vert,1),1); + keep(tria(:)) = true ; + keep(conn(:)) = true ; + + redo = zeros(size(vert,1),1); + redo(keep) = ... + (+1:length(find(keep)))'; + + conn = redo(conn); + tria = redo(tria); + + vert = vert(keep,:); + + tcpu.full = ... + tcpu.full + toc(tnow) ; + + if (opts.dbug) +%----------------------------------------- print debug timer + fprintf(1,'\n') ; + fprintf(1,' Mesh smoothing timer...\n'); + fprintf(1,'\n') ; + fprintf(1, ... + ' FULL: %f \n', tcpu.full); + fprintf(1, ... + ' DTRI: %f \n', tcpu.dtri); + fprintf(1, ... + ' TCON: %f \n', tcpu.tcon); + fprintf(1, ... + ' ITER: %f \n', tcpu.iter); + fprintf(1, ... + ' UNDO: %f \n', tcpu.undo); + fprintf(1, ... + ' KEEP: %f \n', tcpu.keep); + fprintf(1,'\n') ; + end + + if (~isinf(opts.disp)), fprintf(1,'\n'); end + +end + +function [hvrt] = evalhfn(vert,edge,EMAT,hfun,harg) +%EVALHFN eval. the spacing-fun. at mesh vertices. + + if (~isempty (hfun)) + if (isnumeric(hfun)) + hvrt = hfun * ... + ones(size(vert,1),1) ; + else + hvrt = feval( ... + hfun,vert,harg{:}) ; + end + else + +%-- no HFUN - HVRT is mean edge-len. at vertices! + evec = vert(edge(:,2),:) - ... + vert(edge(:,1),:) ; + elen = sqrt(sum(evec.^2,2)) ; + + hvrt = (EMAT*elen) ... + ./ max(sum(EMAT,2),eps) ; + + free = true(size(vert,1),1) ; + free(edge(:,1)) = false; + free(edge(:,2)) = false; + + hvrt(free) = +inf; + + end + +end + +function [opts] = makeopt(opts) +%MAKEOPT setup the options structure for SMOOTH2. + + if (~isfield(opts,'iter')) + opts.iter = +32; + else + if (~isnumeric(opts.iter)) + error('smooth2:incorrectInputClass', ... + 'Incorrect input class.'); + end + if (numel(opts.iter)~= +1) + error('smooth2:incorrectDimensions', ... + 'Incorrect input dimensions.') ; + end + if (opts.iter <= +0) + error('smooth2:invalidOptionValues', ... + 'Invalid OPT.ITER selection.') ; + end + end + + if (~isfield(opts,'disp')) + opts.disp = + 4; + else + if (~isnumeric(opts.disp)) + error('smooth2:incorrectInputClass', ... + 'Incorrect input class.'); + end + if (numel(opts.disp)~= +1) + error('smooth2:incorrectDimensions', ... + 'Incorrect input dimensions.') ; + end + if (opts.disp <= +0) + error('smooth2:invalidOptionValues', ... + 'Invalid OPT.DISP selection.') ; + end + end + + if (~isfield(opts,'vtol')) + opts.vtol = +1.0E-02; + else + if (~isnumeric(opts.vtol)) + error('smooth2:incorrectInputClass', ... + 'Incorrect input class.'); + end + if (numel(opts.vtol)~= +1) + error('smooth2:incorrectDimensions', ... + 'Incorrect input dimensions.') ; + end + if (opts.vtol <= 0.) + error('smooth2:invalidOptionValues', ... + 'Invalid OPT.VTOL selection.') ; + end + end + + if (~isfield(opts,'dbug')) + opts.dbug = false; + else + if (~islogical(opts.dbug)) + error('refine2:incorrectInputClass', ... + 'Incorrect input class.'); + end + if (numel(opts.dbug)~= +1) + error('refine2:incorrectDimensions', ... + 'Incorrect input dimensions.') ; + end + end + +end + + + diff --git a/mesh2d/triang2.m b/mesh2d/triang2.m new file mode 100755 index 0000000..04711c0 --- /dev/null +++ b/mesh2d/triang2.m @@ -0,0 +1,71 @@ +function [dcos] = triang2(pp,tt) +%TRIANG2 calc. enclosed angles for a 2-simplex triangulation +%embedded in the two-dimensional plane. +% [ADEG] = TRIANG2(VERT,TRIA) returns the enclosed angles +% associated with each triangle, where ADEG is a T-by-3 +% array of the angles subtended at each vertex, VERT is a +% V-by-2 array of XY coordinates, and TRIA is a T-by-3 ar- +% ray of vertex indexing, where each row defines a triang- +% le, such that VERT(TRIA(II,1),:), VERT(TRIA(II,2),:) and +% VERT(TRIA(II,3),:) are the coordinates of the II-TH tri- +% angle. Angles are returned in degrees. +% +% See also TRISCR2, TRIAREA, TRIBAL2 + +% Darren Engwirda : 2017 -- +% Email : engwirda@mit.edu +% Last updated : 17/01/2017 + +%---------------------------------------------- basic checks + if (~isnumeric(pp) || ~isnumeric(tt) ) + error('triang2:incorrectInputClass' , ... + 'Incorrect input class.') ; + end + +%---------------------------------------------- basic checks + if (ndims(pp) ~= +2 || ndims(tt) ~= +2 ) + error('triang2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + if (size(pp,2)~= +2 || size(tt,2) < +3 ) + error('triang2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + + nnod = size(pp,1) ; + +%---------------------------------------------- basic checks + if (min(min(tt(:,1:3))) < +1 || ... + max(max(tt(:,1:3))) > nnod ) + error('triang2:invalidInputs', ... + 'Invalid TRIA input array.') ; + end + +%----------------------------------- compute enclosed angles + dcos = zeros(size(tt,1),3) ; + + ev12 = pp(tt(:,2),:)-pp(tt(:,1),:); + ev23 = pp(tt(:,3),:)-pp(tt(:,2),:); + ev31 = pp(tt(:,1),:)-pp(tt(:,3),:); + + lv11 = sqrt(sum(ev12.^2,2)); + lv22 = sqrt(sum(ev23.^2,2)); + lv33 = sqrt(sum(ev31.^2,2)); + + ev12 = ev12 ./ ... + lv11(:,ones(1,size(pp,2))); + ev23 = ev23 ./ ... + lv22(:,ones(1,size(pp,2))); + ev31 = ev31 ./ ... + lv33(:,ones(1,size(pp,2))); + + dcos(:,1) = sum(-ev12.*ev23,2); + dcos(:,2) = sum(-ev23.*ev31,2); + dcos(:,3) = sum(-ev31.*ev12,2); + + dcos = acos(dcos) * 180. / pi ; + +end + + + diff --git a/mesh2d/triarea.m b/mesh2d/triarea.m new file mode 100755 index 0000000..2b7b9d1 --- /dev/null +++ b/mesh2d/triarea.m @@ -0,0 +1,66 @@ +function [area] = triarea(pp,tt) +%TRIAREA calc. triangle areas for a 2-simplex triangulation +%embedded in the two-dimensional plane. +% [AREA] = TRIAREA(VERT,TRIA) returns the signed triangle +% areas, where AREA is a T-by-1 vector, VERT is a V-by-2 +% array of XY coordinates, and TRIA is a T-by-3 array of +% vertex indexing, where each row defines a triangle, such +% that VERT(TRIA(II,1),:), VERT(TRIA(II,2),:) and VERT( +% TRIA(II,3),:) are the coordinates of the II-TH triangle. +% +% See also TRISCR2, TRIANG2, TRIBAL2 + +% Darren Engwirda : 2017 -- +% Email : engwirda@mit.edu +% Last updated : 17/01/2017 + +%---------------------------------------------- basic checks + if (~isnumeric(pp) || ~isnumeric(tt) ) + error('triarea:incorrectInputClass' , ... + 'Incorrect input class.') ; + end + +%---------------------------------------------- basic checks + if (ndims(pp) ~= +2 || ndims(tt) ~= +2 ) + error('triarea:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + if (size(pp,2)~= +2 || size(tt,2) < +3 ) + error('triarea:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + + nnod = size(pp,1) ; + +%---------------------------------------------- basic checks + if (min(min(tt(:,1:3))) < +1 || ... + max(max(tt(:,1:3))) > nnod ) + error('triarea:invalidInputs', ... + 'Invalid TRIA input array.') ; + end + +%--------------------------------------- compute signed area + ev12 = pp(tt(:,2),:)-pp(tt(:,1),:) ; + ev13 = pp(tt(:,3),:)-pp(tt(:,1),:) ; + + switch (size(pp,2)) + case +2 + + area = ev12(:,1).*ev13(:,2) ... + - ev12(:,2).*ev13(:,1) ; + area = 0.5 * area; + + case +3 + + avec = cross(ev12,ev13); + area = sqrt(sum(avec.^2,2)) ; + area = 0.5 * area; + + otherwise + error('Unsupported dimension.') ; + end + +end + + + diff --git a/mesh2d/tribal2.m b/mesh2d/tribal2.m new file mode 100755 index 0000000..a165d7e --- /dev/null +++ b/mesh2d/tribal2.m @@ -0,0 +1,56 @@ +function [bb] = tribal2(pp,tt) +%TRIBAL2 compute the circumballs associated with a 2-simplex +%triangulation embedded in R^2. +% [BB] = TRIBAL2(PP,TT) returns the circumscribing balls +% associated with the triangles in [PP,TT], such that BB = +% [XC,YC,RC.^2]. + +% Darren Engwirda : 2017 -- +% Email : engwirda@mit.edu +% Last updated : 29/04/2017 + +%---------------------------------------------- basic checks + if (~isnumeric(pp) || ... + ~isnumeric(tt) ) + error('tribal2:incorrectInputClass' , ... + 'Incorrect input class.') ; + end +%---------------------------------------------- basic checks + if (ndims(pp) ~= +2 || ndims(tt) ~= +2) + error('tribal2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + if (size(pp,2)~= +2 || size(tt,2) < +3) + error('tribal2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + +%------------------------------------------------ lhs matrix + ab = pp(tt(:,2),:)-pp(tt(:,1),:) ; + ac = pp(tt(:,3),:)-pp(tt(:,1),:) ; + +%------------------------------------------------ rhs vector + rv11 = sum(ab.*ab,2) ; + rv22 = sum(ac.*ac,2) ; + +%------------------------------------------------ solve sys. + dd = ab(:,1) .* ac(:,2) - ... + ab(:,2) .* ac(:,1) ; + + bb = zeros(size(tt,1),3) ; + bb(:,1) = (ac(:,2) .* rv11 - ... + ab(:,2) .* rv22 ) ... + ./ dd * +.5 ; + + bb(:,2) = (ab(:,1) .* rv22 - ... + ac(:,1) .* rv11 ) ... + ./ dd * +.5 ; + + bb(:,3) = sum(bb(:,1:2).^2,2) ; + bb(:,1:2) = ... + pp(tt(:,1),:) + bb(:,1:2) ; + +end + + + diff --git a/mesh2d/tricon2.m b/mesh2d/tricon2.m new file mode 100755 index 0000000..71a832b --- /dev/null +++ b/mesh2d/tricon2.m @@ -0,0 +1,155 @@ +function [ee,tt] = tricon2(varargin) +%TRICON2 edge-centred connectivity for a conforming 2-simpl- +%ex triangulation in the two-dimensional plane. +% [EE,TT] = TRICON2(TT,CC) returns the edge-based adjacen- +% cy for a mesh of 2-simlexes (triangles). EE = [V1,V2,T1, +% T2,CE] is the set of unique 1-simplexes (edges) in the +% mesh TT. Each row of {V1,V2} defines an edge, each row +% of {T1,T2} defines the two triangles adjacent to an edge +% and CE is a "constraint" flag, indicating which row in +% CC (if any) the edge matches. TT = [V1,V2,V3,E1,E2,E3], +% is the set of unique 2-simplexes in the mesh, where +% {E1,E2,E3} define the tria-to-edge mapping. Each row of +% {E1,E2,E3} are the indicies of the three edges that make +% up each triangle. + +% Darren Engwirda : 2014 -- +% Email : de2363@columbia.edu +% Last updated : 01/10/2017 + +%---------------------------------------------- extract args + tt = []; cc = []; + + if (nargin>=1), tt = varargin{1}; end + if (nargin>=2), cc = varargin{2}; end + +%---------------------------------------------- basic checks + if (~isnumeric(tt)) + error('tricon2:incorrectInputClass' , ... + 'Incorrect input class.') ; + end + if (~isnumeric(cc)) + error('tricon2:incorrectInputClass' , ... + 'Incorrect input class.') ; + end + +%---------------------------------------------- basic checks + if (ndims(tt) ~= +2 || size(tt,2) ~= +3) + error('tricon2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + if (min(tt(:)) < +1 ) + error('tricon2:invalidInputs', ... + 'Invalid TRIA input array.') ; + end + + if (~isempty(cc)) + if (ndims(cc) ~= +2 || size(cc,2) ~= +2) + error('tricon2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + end + + isoctave = ... + exist('OCTAVE_VERSION','builtin') > +0; + + nt = size(tt,1); + nc = size(cc,1); + +%------------------------------ assemble non-unique edge set + ee = zeros(nt*3,2); + ee((1:nt)+nt*0,:) = tt(:,[1,2]); + ee((1:nt)+nt*1,:) = tt(:,[2,3]); + ee((1:nt)+nt*2,:) = tt(:,[3,1]); + +%------------------------------ unique edges and re-indexing + %[ee, iv, jv] = ... + % unique(sort(ee, 2), 'rows'); + +%-- as a (much) faster alternative to the 'ROWS' based call +%-- to UNIQUE above, the edge list (i.e. pairs of UINT32 va- +%-- lues) can be cast to DOUBLE, and the sorted comparisons +%-- performed on vector inputs! + ee = sort(ee,2); + [ed,iv,jv] = unique(ee*[2^31;1]); + ee = ee (iv,:); + +%------------------- tria-to-edge indexing: 3 edges per tria + tt = [tt, zeros(nt*1,3)] ; + tt(:,4) = jv((1:nt)+nt*0); + tt(:,5) = jv((1:nt)+nt*1); + tt(:,6) = jv((1:nt)+nt*2); + +%------------------- edge-to-tria indexing: 2 trias per edge + + if (isoctave) + + %-- OCTAVE is *shockingly* bad at executing loops, so -- + %-- even though it involves far more operations! -- call + %-- the vectorised version below. + + ne = size(ee,1); + ee = [ee, zeros(ne*1,3)] ; + + ei = [tt(:,4);tt(:,5);tt(:,6)] ; + ti = [(+1:nt),(+1:nt),(+1:nt)]'; + + [ei,ix] = sort(ei,'ascend') ; + ti = ti (ix,:); + + ix = find(diff(ei)>=+1); + + ni = length(ti); + + ep = [+1; ix+1]; + ep = [ep; ni+1]; + + in = ep(2:ne+1)-ep(1:ne+0) > 1 ; + + ee( :,3) = ti(ep(1:ne)+0); + ee(in,4) = ti(ep( in)+1); + + else + + %-- MATLAB is actually pretty good at JIT-ing code these + %-- days, so use the asymptotically faster version based + %-- on the pre-computed ordering. + + ne = size(ee,1); + ee = [ee, zeros(ne*1,3)] ; + ep = +3 * ones (ne*1,1) ; + for ti = +1 : nt + ei = tt(ti,4) ; + ee(ei,ep(ei)) = ti; + ej = tt(ti,5) ; + ee(ej,ep(ej)) = ti; + ek = tt(ti,6) ; + ee(ek,ep(ek)) = ti; + + ep(ei) = ep(ei)+1 ; + ep(ej) = ep(ej)+1 ; + ep(ek) = ep(ek)+1 ; + end + + end + + if (isempty(cc)), return; end + +%------------------------------------ find constrained edges + %[ip,ip] = ismember( ... + % ee(:,1:2),sort(cc,2),'rows'); + +%-- as above, the 'ROWS' based call to ISMEMBER can be sped +%-- up by casting the edge lists (i.e. pairs of UINT32 valu- +%-- es) to DOUBLE, and performing the sorted queries on vec- +%-- tor inputs! + cc = sort(cc,2); + [ip,ip] = ismember(ed, cc*[2^31;+1]); + +%------------------------------------ mark constrained edges + ee(:,5) = ip; + +end + + + diff --git a/mesh2d/trideg2.m b/mesh2d/trideg2.m new file mode 100755 index 0000000..44be600 --- /dev/null +++ b/mesh2d/trideg2.m @@ -0,0 +1,57 @@ +function [vdeg] = trideg2(pp,tt) +%TRIDEG2 calc. topological degree for vertices in a 2-simpl- +%ex triangulation. +% [VDEG] = TRIDEG2(VERT,TRIA) returns the no. of triangles +% incident to each vertex. VDEG is a V-by-1 array of vert- +% ex degrees, VERT is a V-by-2 array of XY coordinates, +% and TRIA is a T-by-3 array of vertex indexing, where +% each row defines a triangle, +% such that VERT(TRIA(II,1),:), VERT(TRIA(II,2),:) and +% VERT(TRIA(II,3),:) are the coordinates of the II-TH tri- +% angle. +% +% See also TRISCR2, TRIAREA, TRIANG2, TRIBAL2 + +%----------------------------------------------------------- +% Darren Engwirda : 2017 -- +% Email : de2363@columbia.edu +% Last updated : 09/06/2017 +%----------------------------------------------------------- + +%---------------------------------------------- basic checks + if (~isnumeric(pp) || ~isnumeric(tt) ) + error('trideg2:incorrectInputClass' , ... + 'Incorrect input class.') ; + end + +%---------------------------------------------- basic checks + if (ndims(pp) ~= +2 || ndims(tt) ~= +2 ) + error('trideg2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + if (size(pp,2)~= +2 || size(tt,2) < +3 ) + error('trideg2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + + nvrt = size(pp,1) ; + ntri = size(tt,1) ; + +%---------------------------------------------- basic checks + if (min(min(tt(:,1:3))) < +1 || ... + max(max(tt(:,1:3))) > nvrt ) + error('trideg2:invalidInputs', ... + 'Invalid TRIA input array.') ; + end + +%------------------------------------- compute vertex degree + tvec = (+1 : ntri)'; + + sdeg = sparse(tt(:,1:3),[tvec,tvec,tvec],+1,nvrt,ntri) ; + + vdeg = ... + sdeg * ones(ntri,1); + +end + + diff --git a/mesh2d/tridemo.m b/mesh2d/tridemo.m new file mode 100755 index 0000000..a50d3d3 --- /dev/null +++ b/mesh2d/tridemo.m @@ -0,0 +1,961 @@ +function tridemo(demo) +%TRIDEMO run various triangulation demos for MESH2D. +% TRIDEMO(N) runs the N-TH demo problem. The following de- +% mo problems are currently available: +% +% - DEMO-0: very simple example to start with -- construct a +% mesh for a square domain with a square hold cut from its +% centre. +% +% - DEMO-1: explore the impact of the "radius-edge" thresho- +% ld (RHO2) on mesh density/quality. +% +% - DEMO-2: explore the impact of the "Frontal-Delaunay" vs. +% "Delaunay-refinement " algorithms. +% +% - DEMO-3: explore impact of user-defined mesh-size constr- +% aints. +% +% - DEMO-4: explore impact of "hill-climbing" mesh optimisa- +% tions. +% +% - DEMO-5: assemble triangulations for multi-part geometry +% definitions. +% +% - DEMO-6: assemble triangulations for geometries with int- +% ernal constraints. +% +% - DEMO-7: investigate the use of quadtree-type refinement. +% +% - DEMO-8: explore impact of user-defined mesh-size constr- +% aints. +% +% - DEMO-9: larger-scale problem, mesh refinement + optimis- +% ation. +% +% - DEMO10: medium-scale problem, mesh refinement + optimis- +% ation. +% +% See also REFINE2, SMOOTH2, TRIDIV2, FIXGEO2 + +%----------------------------------------------------------- +% Darren Engwirda : 2017 -- +% Email : de2363@columbia.edu +% Last updated : 09/06/2017 +%----------------------------------------------------------- + + close all; + + switch (demo) + case 0, demo0 (); + case 1, demo1 (); + case 2, demo2 (); + case 3, demo3 (); + case 4, demo4 (); + case 5, demo5 (); + case 6, demo6 (); + case 7, demo7 (); + case 8, demo8 (); + case 9, demo9 (); + case 10, demo10(); + + otherwise + error('tridemo:invalidSelection', 'Invalid selection!') ; + end + +end + +function demo0 +%DEMO0 a very simple example to start with -- mesh a square +%domain with a square hold cut from its centre. + + fprintf(1, [ ... +' A very simple example to start with -- construct a mesh for \n', ... +' a simple square domain with a square hole cut from its cen- \n', ... +' tre. The geometry is specified as a Planar Straight-Line \n', ... +' Graph (PSLG) -- a list of xy coordinates, or "nodes", and a \n', ... +' list of straight-line connections between nodes, or "edges".\n', ... +' The REFINE2 routine is used to build a triangulation of the \n', ... +' domain that: (a) conforms to the geometry, and (b) contains \n', ... +' only "nicely" shaped triangles. In the second panel, a mesh \n', ... +' that additionally satisfies "mesh-size" constrains is cons- \n', ... +' structed -- ' + ] ) ; + +%------------------------------------------- setup geometry + + node = [ % list of xy "node" coordinates + 0, 0 % outer square + 9, 0 + 9, 9 + 0, 9 + 4, 4 % inner square + 5, 4 + 5, 5 + 4, 5 ] ; + + edge = [ % list of "edges" between nodes + 1, 2 % outer square + 2, 3 + 3, 4 + 4, 1 + 5, 6 % inner square + 6, 7 + 7, 8 + 8, 5 ] ; + +%------------------------------------------- call mesh-gen. + [vert,etri, ... + tria,tnum] = refine2(node,edge) ; + +%------------------------------------------- draw tria-mesh + figure; + patch('faces',tria(:,1:3),'vertices',vert, ... + 'facecolor','w', ... + 'edgecolor',[.2,.2,.2]) ; + hold on; axis image off; + patch('faces',edge(:,1:2),'vertices',node, ... + 'facecolor','w', ... + 'edgecolor',[.1,.1,.1], ... + 'linewidth',1.5) ; + +%------------------------------------------- call mesh-gen. + hfun = +.5 ; % uniform "target" edge-lengths + + [vert,etri, ... + tria,tnum] = refine2(node,edge,[],[],hfun) ; + +%------------------------------------------- draw tria-mesh + figure; + patch('faces',tria(:,1:3),'vertices',vert, ... + 'facecolor','w', ... + 'edgecolor',[.2,.2,.2]) ; + hold on; axis image off; + patch('faces',edge(:,1:2),'vertices',node, ... + 'facecolor','w', ... + 'edgecolor',[.1,.1,.1], ... + 'linewidth',1.5) ; + + drawnow; + + set(figure(1),'units','normalized', ... + 'position',[.05,.50,.30,.35]) ; + set(figure(2),'units','normalized', ... + 'position',[.35,.50,.30,.35]) ; + +end + +function demo1 +%DEMO1 explore impact of RHO2 threshold on mesh density/qua- +%lity. + + filename = mfilename('fullpath'); + filepath = fileparts( filename ); + + meshfile = ... + [filepath,'/poly-data/lake.msh']; + + [node,edge] = triread( meshfile ); + + + + fprintf(1, [ ... +' The REFINE2 routine can be used to build guaranteed-quality \n', ... +' Delaunay triangulations for general polygonal geometries in \n', ... +' the two-dimensional plane. The "quality" of elements in the \n', ... +' triangulation can be controlled using the "radius-edge" bo- \n', ... +' und RHO2. \n', ... + ] ) ; + +%---------------------------------------------- RHO2 = +1.50 + fprintf(1, ' \n') ; + fprintf(1, [ ... +' Setting large values for RHO2, (RHO2 = 1.50 here) generates \n', ... +' sparse triangulations with poor worst-case angle bounds. \n', ... + ] ) ; + + opts.kind = 'delaunay'; + opts.rho2 = +1.50 ; + + [vert,etri, ... + tria,tnum] = refine2(node,edge,[] ,opts) ; + + figure; + patch('faces',tria(:,1:3),'vertices',vert, ... + 'facecolor','w', ... + 'edgecolor',[.2,.2,.2]) ; + hold on; axis image off; + patch('faces',edge(:,1:2),'vertices',node, ... + 'facecolor','w', ... + 'edgecolor',[.1,.1,.1], ... + 'linewidth',1.5) ; + title(['TRIA-MESH: RHO2<=+1.50, |TRIA|=' , ... + num2str(size(tria,1))]) ; + +%---------------------------------------------- RHO2 = +1.00 + fprintf(1, [ ... +' Setting small values for RHO2, (RHO2 = 1.00 here) generates \n', ... +' dense triangulations with good worst-case angle bounds. \n', ... + ] ) ; + + opts.kind = 'delaunay'; + opts.rho2 = +1.00 ; + + [vert,etri, ... + tria,tnum] = refine2(node,edge,[] ,opts) ; + + figure; + patch('faces',tria(:,1:3),'vertices',vert, ... + 'facecolor','w', ... + 'edgecolor',[.2,.2,.2]) ; + hold on; axis image off; + patch('faces',edge(:,1:2),'vertices',node, ... + 'facecolor','w', ... + 'edgecolor',[.1,.1,.1], ... + 'linewidth',1.5) ; + title(['TRIA-MESH: RHO2<=+1.00, |TRIA|=' , ... + num2str(size(tria,1))]) ; + + drawnow; + + set(figure(1),'units','normalized', ... + 'position',[.05,.50,.30,.35]) ; + set(figure(2),'units','normalized', ... + 'position',[.35,.50,.30,.35]) ; + +end + +function demo2 +%DEMO2 explore impact of refinement "KIND" on mesh quality/- +%density. + + filename = mfilename('fullpath'); + filepath = fileparts( filename ); + + meshfile = ... + [filepath,'/poly-data/lake.msh']; + + [node,edge] = triread( meshfile ); + + fprintf(1, [ ... +' The REFINE2 routine supports two Delaunay-based refinement \n', ... +' algorithms: a "standard" Delaunay-refinement type approach, \n', ... +' and a "Frontal-Delaunay" technique. For problems constrain- \n', ... +' ed by element "quality" alone, the Frontal-Delaunay approa- \n', ... +' ch typically produces sigificantly sparser meshes. in both \n', ... +' cases, the same worst-case element quality bounds are sati- \n', ... +' fied in a guaranteed manner. \n', ... + ] ) ; + +%---------------------------------------------- = "DELAUNAY" + opts.kind = 'delaunay'; + opts.rho2 = +1.00 ; + + [vert,etri, ... + tria,tnum] = refine2(node,edge,[] ,opts) ; + + figure; + patch('faces',tria(:,1:3),'vertices',vert, ... + 'facecolor','w', ... + 'edgecolor',[.2,.2,.2]) ; + hold on; axis image off; + patch('faces',edge(:,1:2),'vertices',node, ... + 'facecolor','w', ... + 'edgecolor',[.1,.1,.1], ... + 'linewidth',1.5) ; + hold on; axis image off; + title(['TRIA-MESH: KIND=DELAUNAY, |TRIA|=', ... + num2str(size(tria,1))]) ; + +%---------------------------------------------- = "DELFRONT" + opts.kind = 'delfront'; + opts.rho2 = +1.00 ; + + [vert,etri, ... + tria,tnum] = refine2(node,edge,[] ,opts) ; + + figure; + patch('faces',tria(:,1:3),'vertices',vert, ... + 'facecolor','w', ... + 'edgecolor',[.2,.2,.2]) ; + hold on; axis image off; + patch('faces',edge(:,1:2),'vertices',node, ... + 'facecolor','w', ... + 'edgecolor',[.1,.1,.1], ... + 'linewidth',1.5) ; + title(['TRIA-MESH: KIND=DELFRONT, |TRIA|=', ... + num2str(size(tria,1))]) ; + + drawnow; + + set(figure(1),'units','normalized', ... + 'position',[.05,.50,.30,.35]) ; + set(figure(2),'units','normalized', ... + 'position',[.35,.50,.30,.35]) ; + +end + +function demo3 +%DEMO3 explore impact of user-defined mesh-size constraints. + + filename = mfilename('fullpath'); + filepath = fileparts( filename ); + + meshfile = ... + [filepath,'/poly-data/airfoil.msh']; + + [node,edge] = triread( meshfile ); + + fprintf(1, [ ... +' Additionally, the REFINE2 routine supports size-driven ref- \n', ... +' inement, producing meshes that satisfy constraints on elem- \n', ... +' ent edge-lengths. The LFSHFN2 routine can be used to create \n', ... +' mesh-size functions based on an estimate of the "local-fea- \n', ... +' ture-size" associated with a polygonal domain. The Frontal- \n', ... +' Delaunay refinement algorithm discussed in DEMO-2 is espec- \n', ... +' ially good at generating high-quality triangulations in the \n', ... +' presence of mesh-size constraints. \n', ... + ] ) ; + +%---------------------------------------------- do size-fun. + olfs.dhdx = +0.15; + + [vlfs,tlfs, ... + hlfs] = lfshfn2(node,edge, ... + [] ,olfs) ; + + [slfs] = idxtri2(vlfs,tlfs) ; + + figure; + patch('faces',tlfs(:,1:3),'vertices',vlfs , ... + 'facevertexcdata' , hlfs, ... + 'facecolor','interp', ... + 'edgecolor','none') ; + hold on; axis image off; + title(['MESH-SIZE: KIND=DELAUNAY, |TRIA|=', ... + num2str(size(tlfs,1))]) ; + +%---------------------------------------------- do mesh-gen. + hfun = @trihfn2; + + [vert,etri, ... + tria,tnum] = refine2(node,edge,[],[],hfun , ... + vlfs,tlfs,slfs,hlfs); + + figure; + patch('faces',tria(:,1:3),'vertices',vert, ... + 'facecolor','w', ... + 'edgecolor',[.2,.2,.2]) ; + hold on; axis image off; + patch('faces',edge(:,1:2),'vertices',node, ... + 'facecolor','w', ... + 'edgecolor',[.1,.1,.1], ... + 'linewidth',1.5) ; + title(['TRIA-MESH: KIND=DELFRONT, |TRIA|=', ... + num2str(size(tria,1))]) ; + + drawnow; + + set(figure(1),'units','normalized', ... + 'position',[.05,.50,.30,.35]) ; + set(figure(2),'units','normalized', ... + 'position',[.35,.50,.30,.35]) ; + +end + +function demo4 +%DEMO4 explore impact of "hill-climbing" mesh optimisations. + + filename = mfilename('fullpath'); + filepath = fileparts( filename ); + + meshfile = ... + [filepath,'/poly-data/airfoil.msh']; + + [node,edge] = triread( meshfile ); + + fprintf(1, [ ... +' The SMOOTH2 routine provides iterative mesh "smoothing" ca- \n', ... +' pabilities, seeking to improve triangulation quality by ad- \n', ... +' justing the vertex positions and mesh topology. Specifical- \n', ... +' ly, a "hill-climbing" type optimisation is implemented, gu- \n', ... +' aranteeing that mesh-quality is improved monotonically. The \n', ... +' DRAWSCR routine provides detailed analysis of triangulation \n', ... +' quality, plotting histograms of various quality metrics. \n', ... + ] ) ; + +%---------------------------------------------- do size-fun. + olfs.dhdx = +0.15; + + [vlfs,tlfs, ... + hlfs] = lfshfn2(node,edge, ... + [] ,olfs) ; + + [slfs] = idxtri2(vlfs,tlfs) ; + +%---------------------------------------------- do mesh-gen. + hfun = @trihfn2; + + [vert,etri, ... + tria,tnum] = refine2(node,edge,[],[],hfun , ... + vlfs,tlfs,slfs,hlfs); + + figure; + patch('faces',tria(:,1:3),'vertices',vert, ... + 'facecolor','w', ... + 'edgecolor',[.2,.2,.2]) ; + hold on; axis image off; + patch('faces',edge(:,1:2),'vertices',node, ... + 'facecolor','w', ... + 'edgecolor',[.1,.1,.1], ... + 'linewidth',1.5) ; + title(['MESH-REF.: KIND=DELFRONT, |TRIA|=', ... + num2str(size(tria,1))]) ; + +%---------------------------------------------- do mesh-opt. + [vnew,enew, ... + tnew,tnum] = smooth2(vert,etri,tria,tnum) ; + + figure; + patch('faces',tnew(:,1:3),'vertices',vnew, ... + 'facecolor','w', ... + 'edgecolor',[.2,.2,.2]) ; + hold on; axis image off; + patch('faces',edge(:,1:2),'vertices',node, ... + 'facecolor','w', ... + 'edgecolor',[.1,.1,.1], ... + 'linewidth',1.5) ; + title(['MESH-OPT.: KIND=DELFRONT, |TRIA|=', ... + num2str(size(tnew,1))]) ; + + hvrt = trihfn2(vert,vlfs,tlfs,slfs,hlfs) ; + hnew = trihfn2(vnew,vlfs,tlfs,slfs,hlfs) ; + + drawscr(vert,etri,tria,tnum,hvrt) ; + drawscr(vnew,enew,tnew,tnum,hnew) ; + + drawnow; + + set(figure(1),'units','normalized', ... + 'position',[.05,.50,.30,.35]) ; + set(figure(2),'units','normalized', ... + 'position',[.35,.50,.30,.35]) ; + + set(figure(3),'units','normalized', ... + 'position',[.05,.05,.30,.35]) ; + set(figure(4),'units','normalized', ... + 'position',[.35,.05,.30,.35]) ; + +end + +function demo5 +%DEMO5 assemble triangulations for multi-part geometry defi- +%nitions. + + fprintf(1, [ ... +' Both the REFINE2 and SMOOTH2 routines also support "multi- \n', ... +' part" geometry definitions -- generating conforming triang- \n', ... +' ulations that conform to internal and external constraints. \n', ... + ] ) ; + +%---------------------------------------------- create geom. + nod1 = [ + -1., -1.; +1., -1. + +1., +1.; -1., +1. + ] ; + edg1 = [ + 1 , 2 ; 2 , 3 + 3 , 4 ; 4 , 1 + ] ; + edg1(:,3) = +0; + + + nod2 = [ + +.1, +0.; +.8, +0. + +.8, +.8; +.1, +.8 + ] ; + edg2 = [ + 1 , 2 ; 2 , 3 + 3 , 4 ; 4 , 1 + ] ; + edg2(:,3) = +1; + + + adel = 2.*pi / +64 ; + amin = 0.*pi ; + amax = 2.*pi - adel; + + xcir = +.33 * ... + cos(amin:adel:amax)'; + ycir = +.33 * ... + sin(amin:adel:amax)'; + xcir = xcir - .33; + ycir = ycir - .25; + ncir = [xcir,ycir] ; + numc = size(ncir,1); + + ecir(:,1) = ... + [(1:numc-1)'; numc] ; + ecir(:,2) = ... + [(2:numc-0)'; +1 ] ; + ecir(:,3) = +2; + + edg2(:,1:2) = ... + edg2(:,1:2)+size(nod1,1); + edge = [edg1; edg2]; + node = [nod1; nod2]; + + ecir(:,1:2) = ... + ecir(:,1:2)+size(node,1); + edge = [edge; ecir]; + node = [node; ncir]; + +%-- the PART argument is a cell array that defines individu- +%-- al polygonal "parts" of the overall geometry. Each elem- +%-- ent PART{I} is a list of edge indexes, indicating which +%-- edges make up the boundary of each region. + part{1} = [ ... + find(edge(:,3) == 0) + find(edge(:,3) == 1) + find(edge(:,3) == 2) + ] ; + part{2} = [ ... + find(edge(:,3) == 1) + ] ; + part{3} = [ ... + find(edge(:,3) == 2) + ] ; + + edge = edge(:,1:2) ; + +%---------------------------------------------- do size-fun. + hmax = +0.045 ; + + [vlfs,tlfs, ... + hlfs] = lfshfn2(node,edge, ... + part) ; + + hlfs = min(hmax,hlfs) ; + + [slfs] = idxtri2(vlfs,tlfs) ; + +%---------------------------------------------- do mesh-gen. + hfun = @trihfn2; + + [vert,etri, ... + tria,tnum] = refine2(node,edge,part, [], ... + hfun, ... + vlfs,tlfs,slfs,hlfs) ; + +%---------------------------------------------- do mesh-opt. + [vert,etri, ... + tria,tnum] = smooth2(vert,etri,tria,tnum) ; + + figure; + patch('faces',tria(tnum==1,1:3),'vertices',vert, ... + 'facecolor',[1.,1.,1.], ... + 'edgecolor',[.2,.2,.2]) ; + hold on; axis image off; + patch('faces',tria(tnum==2,1:3),'vertices',vert, ... + 'facecolor',[.9,.9,.9], ... + 'edgecolor',[.2,.2,.2]) ; + patch('faces',tria(tnum==3,1:3),'vertices',vert, ... + 'facecolor',[.8,.8,.8], ... + 'edgecolor',[.2,.2,.2]) ; + patch('faces',edge(:,1:2),'vertices',node, ... + 'facecolor','w', ... + 'edgecolor',[.1,.1,.1], ... + 'linewidth',1.5) ; + title(['MESH-OPT.: KIND=DELFRONT, |TRIA|=', ... + num2str(size(tria,1))]) ; + + figure; + patch('faces',tlfs(:,1:3),'vertices',vlfs , ... + 'facevertexcdata' , hlfs, ... + 'facecolor','interp', ... + 'edgecolor','none') ; + hold on; axis image off; + title(['MESH-SIZE: KIND=DELAUNAY, |TRIA|=', ... + num2str(size(tlfs,1))]) ; + + drawscr(vert,etri,tria,tnum); + + drawnow; + + set(figure(1),'units','normalized', ... + 'position',[.05,.50,.30,.35]) ; + set(figure(2),'units','normalized', ... + 'position',[.35,.50,.30,.35]) ; + set(figure(3),'units','normalized', ... + 'position',[.05,.05,.30,.35]) ; + +end + +function demo6 +%DEMO6 build triangulations for geometries with internal co- +%nstraints. + + fprintf(1, [ ... +' Both the REFINE2 and SMOOTH2 routines also support geometr- \n', ... +' ies containing "internal" constraints. \n', ... + ] ) ; + +%---------------------------------------------- create geom. + node = [ + -1., -1.; +1., -1. + +1., +1.; -1., +1. + +.0, +.0; +.2, +.7 + +.6, +.2; +.4, +.8 + +0., +.5; -.7, +.3 + -.1, +.1; -.6, +.5 + -.9, -.8; -.6, -.7 + -.3, -.6; +.0, -.5 + +.3, -.4; -.3, +.4 + -.1, +.3 + ] ; + edge = [ + 1 , 2 ; 2 , 3 + 3 , 4 ; 4 , 1 + 5 , 6 ; 5 , 7 + 5 , 8 ; 5 , 9 + 5 , 10 ; 5 , 11 + 5 , 12 ; 5 , 13 + 5 , 14 ; 5 , 15 + 5 , 16 ; 5 , 17 + 5 , 18 ; 5 , 19 + ] ; + +%-- the geometry must be split into its "exterior" and "int- +%-- erior" components using the optional PART argument. Each +%-- PART{I} specified should define the "exterior" boundary +%-- of a polygonal region. "Interior" constraints should not +%-- be referenced by any polygon in PART -- they are imposed +%-- as isolated edge constraints. + part{1} = [1,2,3,4] ; + +%---------------------------------------------- do size-fun. + hmax = +0.175 ; + +%---------------------------------------------- do mesh-gen. + opts.kind = 'delaunay' ; + + [vert,etri, ... + tria,tnum] = refine2(node,edge,part,opts, ... + hmax) ; + +%---------------------------------------------- do mesh-opt. + [vert,etri, ... + tria,tnum] = smooth2(vert,etri,tria,tnum) ; + + figure; + patch('faces',tria(:,1:3),'vertices',vert, ... + 'facecolor','w', ... + 'edgecolor',[.2,.2,.2]) ; + hold on; axis image off; + patch('faces',edge(:,1:2),'vertices',node, ... + 'facecolor','w', ... + 'edgecolor',[.1,.1,.1], ... + 'linewidth',2.0) ; + title(['MESH-OPT.: KIND=DELAUNAY, |TRIA|=', ... + num2str(size(tria,1))]) ; + + drawscr(vert,etri,tria,tnum); + + drawnow; + + set(figure(1),'units','normalized', ... + 'position',[.05,.50,.30,.35]) ; + set(figure(2),'units','normalized', ... + 'position',[.05,.05,.30,.35]) ; + +end + +function demo7 +%DEMO7 investigate the use of quadtree-type mesh refinement. + + filename = mfilename('fullpath'); + filepath = fileparts( filename ); + + meshfile = ... + [filepath,'/poly-data/wavy-channel.msh']; + + [node,edge] = triread( meshfile ); + + fprintf(1, [ ... +' The TRIDIV2 routine can also be used to refine existing tr- \n', ... +' angulations. Each triangle is split into four new sub-tria- \n', ... +' ngles, such that element shape is preserved. Combining the \n', ... +' TRIDIV2 and SMOOTH2 routines allows for hierarchies of high \n', ... +' quality triangulations to be generated. \n', ... + ] ) ; + +%---------------------------------------------- do size-fun. + [vlfs,tlfs, ... + hlfs] = lfshfn2(node,edge) ; + + [slfs] = idxtri2(vlfs,tlfs) ; + + pmax = max(node,[],1); + pmin = min(node,[],1); + + hmax = mean(pmax-pmin)/+17 ; + hlfs = min(hmax,hlfs); + +%---------------------------------------------- do mesh-gen. + hfun = @trihfn2; + + [vert,etri, ... + tria,tnum] = refine2(node,edge,[],[],hfun , ... + vlfs,tlfs,slfs,hlfs); + +%---------------------------------------------- do mesh-opt. + [vert,etri, ... + tria,tnum] = smooth2(vert,etri,tria,tnum) ; + + [vnew,enew, ... + tnew,tnum] = tridiv2(vert,etri,tria,tnum) ; + + [vnew,enew, ... + tnew,tnum] = smooth2(vnew,enew,tnew,tnum) ; + + figure; + patch('faces',tria(:,1:3),'vertices',vert, ... + 'facecolor','w', ... + 'edgecolor',[.2,.2,.2]) ; + hold on; axis image off; + patch('faces',edge(:,1:2),'vertices',node, ... + 'facecolor','w', ... + 'edgecolor',[.1,.1,.1], ... + 'linewidth',1.5) ; + title(['MESH-OPT.: KIND=DELFRONT, |TRIA|=', ... + num2str(size(tria,1))]) ; + + figure; + patch('faces',tnew(:,1:3),'vertices',vnew, ... + 'facecolor','w', ... + 'edgecolor',[.2,.2,.2]) ; + hold on; axis image off; + patch('faces',etri(:,1:2),'vertices',vert, ... + 'facecolor','w', ... + 'edgecolor',[.1,.1,.1], ... + 'linewidth',1.5) ; + title(['MESH-OPT.: KIND=DELFRONT, |TRIA|=', ... + num2str(size(tnew,1))]) ; + + drawscr(vert,etri,tria,tnum); + drawscr(vnew,enew,tnew,tnum); + + drawnow; + + set(figure(1),'units','normalized', ... + 'position',[.05,.50,.30,.35]) ; + set(figure(2),'units','normalized', ... + 'position',[.35,.50,.30,.35]) ; + + set(figure(3),'units','normalized', ... + 'position',[.05,.05,.30,.35]) ; + set(figure(4),'units','normalized', ... + 'position',[.35,.05,.30,.35]) ; + +end + +function demo8 +%DEMO8 explore impact of "hill-climbing" mesh optimisations. + +%---------------------------------------------- create geom. + node = [ + -1., -1.; +3., -1. + +3., +1.; -1., +1. + ] ; + edge = [ + 1 , 2 ; 2 , 3 + 3 , 4 ; 4 , 1 + ] ; + + adel = 2.*pi / +64 ; + amin = 0.*pi ; + amax = 2.*pi - adel; + + xcir = +.20 * ... + cos(amin:adel:amax)'; + ycir = +.20 * ... + sin(amin:adel:amax)'; + ncir = [xcir,ycir] ; + numc = size(ncir,1); + + ecir(:,1) = ... + [(1:numc-1)'; numc] ; + ecir(:,2) = ... + [(2:numc-0)'; +1 ] ; + + ecir = ecir+size(node,1); + edge = [edge; ecir]; + node = [node; ncir]; + +%---------------------------------------------- do mesh-gen. + hfun = @hfun8 ; + + [vert,etri, ... + tria,tnum] = refine2(node,edge,[],[],hfun); + +%---------------------------------------------- do mesh-opt. + [vert,etri, ... + tria,tnum] = smooth2(vert,etri,tria,tnum) ; + + figure; + patch('faces',tria(:,1:3),'vertices',vert, ... + 'facecolor','w', ... + 'edgecolor',[.2,.2,.2]) ; + hold on; axis image off; + patch('faces',edge(:,1:2),'vertices',node, ... + 'facecolor','w', ... + 'edgecolor',[.1,.1,.1], ... + 'linewidth',1.5) ; + title(['MESH-OPT.: KIND=DELFRONT, |TRIA|=', ... + num2str(size(tria,1))]) ; + + figure; + patch('faces',tria(:,1:3),'vertices',vert , ... + 'facevertexcdata' , hfun8(vert), ... + 'facecolor','interp', ... + 'edgecolor','none') ; + hold on; axis image off; + title('MESH-SIZE function.'); + + hvrt = feval(hfun,vert) ; + + drawscr(vert,etri,tria,tnum,hvrt) ; + + drawnow; + + set(figure(1),'units','normalized', ... + 'position',[.05,.50,.30,.35]) ; + set(figure(2),'units','normalized', ... + 'position',[.35,.50,.30,.35]) ; + set(figure(3),'units','normalized', ... + 'position',[.05,.05,.30,.35]) ; + +end + +function [hfun] = hfun8(test) +%HFUN8 user-defined mesh-size function for DEMO-8. + + hmax = +.05 ; + hmin = +.01 ; + + xmid = +0.0 ; + ymid = +0.0 ; + + hcir = exp( -.5*(test(:,1)-xmid).^2 ... + -2.*(test(:,2)-ymid).^2 ) ; + + hfun = hmax - (hmax-hmin) * hcir ; + + + +end + +function demo9 +%DEMO9 larger-scale problem, mesh refinement + optimisation. + + filename = mfilename('fullpath'); + filepath = fileparts( filename ); + + meshfile = ... + [filepath,'/poly-data/islands.msh']; + + [node,edge] = triread( meshfile ); + +%---------------------------------------------- do size-fun. + [vlfs,tlfs, ... + hlfs] = lfshfn2(node,edge) ; + + [slfs] = idxtri2(vlfs,tlfs) ; + +%---------------------------------------------- do mesh-gen. + hfun = @trihfn2; + + [vert,etri, ... + tria,tnum] = refine2(node,edge,[],[],hfun , ... + vlfs,tlfs,slfs,hlfs); + +%---------------------------------------------- do mesh-opt. + [vert,etri, ... + tria,tnum] = smooth2(vert,etri,tria,tnum) ; + + figure; + patch('faces',tria(:,1:3),'vertices',vert, ... + 'facecolor','w', ... + 'edgecolor',[.2,.2,.2]) ; + hold on; axis image off; + patch('faces',edge(:,1:2),'vertices',node, ... + 'facecolor','w', ... + 'edgecolor',[.1,.1,.1], ... + 'linewidth',1.5) ; + title(['MESH-OPT.: KIND=DELFRONT, |TRIA|=', ... + num2str(size(tria,1))]) ; + + drawscr(vert,etri,tria,tnum); + + drawnow; + + set(figure(1),'units','normalized', ... + 'position',[.05,.50,.30,.35]) ; + set(figure(2),'units','normalized', ... + 'position',[.05,.05,.30,.35]) ; + +end + +function demo10 +%DEMO10 medium-scale problem mesh refinement + optimisation. + + filename = mfilename('fullpath'); + filepath = fileparts( filename ); + + meshfile = ... + [filepath,'/poly-data/river.msh']; + + [node,edge] = triread( meshfile ); + +%---------------------------------------------- do size-fun. + [vlfs,tlfs, ... + hlfs] = lfshfn2(node,edge) ; + + [slfs] = idxtri2(vlfs,tlfs) ; + +%---------------------------------------------- do mesh-gen. + hfun = @trihfn2; + + [vert,etri, ... + tria,tnum] = refine2(node,edge,[],[],hfun , ... + vlfs,tlfs,slfs,hlfs); + +%---------------------------------------------- do mesh-opt. + [vert,etri, ... + tria,tnum] = smooth2(vert,etri,tria,tnum) ; + + figure; + patch('faces',tria(:,1:3),'vertices',vert, ... + 'facecolor','w', ... + 'edgecolor',[.2,.2,.2]) ; + hold on; axis image off; + patch('faces',edge(:,1:2),'vertices',node, ... + 'facecolor','w', ... + 'edgecolor',[.1,.1,.1], ... + 'linewidth',1.5) ; + title(['MESH-OPT.: KIND=DELFRONT, |TRIA|=', ... + num2str(size(tria,1))]) ; + + drawscr(vert,etri,tria,tnum); + + drawnow; + + set(figure(1),'units','normalized', ... + 'position',[.05,.50,.30,.35]) ; + set(figure(2),'units','normalized', ... + 'position',[.05,.05,.30,.35]) ; + +end + + + diff --git a/mesh2d/tridiv2.m b/mesh2d/tridiv2.m new file mode 100755 index 0000000..1d0a5b7 --- /dev/null +++ b/mesh2d/tridiv2.m @@ -0,0 +1,245 @@ +function [vert,conn,tria,tnum] = tridiv2(varargin) +%TRIDIV2 "quadtree" refinement for 2-simplex triangulations. +% [VERT,EDGE,TRIA,TNUM] = TRIDIV2(VERT,EDGE,TRIA,TNUM) re- +% turns a globally refined triangulation, in which all ed- +% ges are bisected about their midpoints. Such refinement +% splits each triangle into four new sub-triangles accord- +% ing to a shape-preserving scheme. +% +% VERT is a V-by-2 array of XY coordinates in the triangu- +% lation, EDGE is an array of constrained edges, TRIA is a +% T-by-3 array of triangles, and TNUM is a T-by-1 array of +% part indices. Each row of TRIA and EDGE define an eleme- +% nt. VERT(TRIA(II,1),:), VERT(TRIA(II,2),:) and VERT(TRIA +% (II,3),:) are the coordinates of the II-TH triangle. The +% edges in EDGE are defined in a similar manner. NUM is an +% array of part indexing, such that TNUM(II) is the index +% of the part in which the II-TH triangle resides. +% +% [VERT,EDGE,TRIA,TNUM] = TRIDIV2(... ,TDIV) returns a se- +% lectively refined mesh, where TDIV is a T-by-1 logical +% array, with TDIV(KK) = TRUE if TRIA(KK,:) is to be refi- +% ned. Such triangles are refined using the four-way split +% described above. Additionally, a "halo" of adjacent tri- +% angles are also refined to preseve compatibility of the +% mesh. Such triangles are refined using a two-way bisect- +% ion type scheme. + +% See also REFINE2, SMOOTH2 + +% Darren Engwirda : 2017 -- +% Email : engwirda@mit.edu +% Last updated : 29/01/2017 + +%---------------------------------------------- extract args + vert = []; conn = []; tria = []; tnum = [] ; + tdiv = []; + + if (nargin>=+1), vert = varargin{1}; end + if (nargin>=+2), conn = varargin{2}; end + if (nargin>=+3), tria = varargin{3}; end + if (nargin>=+4), tnum = varargin{4}; end + if (nargin>=+5), tdiv = varargin{5}; end + +%---------------------------------------------- default arg. + if (isempty(tnum)) + tnum = ones(size(tria,1),1) ; + end + if (isempty(tdiv)) + tdiv = true(size(tria,1),1) ; + end + +%---------------------------------------------- basic checks + if ( ~isnumeric(vert) || ... + ~isnumeric(conn) || ... + ~isnumeric(tria) || ... + ~isnumeric(tnum) || ... + ~islogical(tdiv) ) + error('tridiv2:incorrectInputClass' , ... + 'Incorrect input class.') ; + end + +%---------------------------------------------- basic checks + tnum = tnum(:) ; tdiv = tdiv(:) ; + if (ndims(vert) ~= +2 || ... + ndims(conn) ~= +2 || ... + ndims(tria) ~= +2 || ... + ndims(tnum) ~= +2 || ... + ndims(tdiv) ~= +2 ) + error('tridiv2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + if (size(vert,2)~= +2 || ... + size(conn,2)~= +2 || ... + size(tria,2)~= +3 || ... + size(tnum,2)~= +1 || ... + size(tria,1)~= size(tnum,1) ) + error('tridiv2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + + nvrt = size(vert,1) ; + +%---------------------------------------------- basic checks + if (min(min(conn(:,1:2))) < +1 || ... + max(max(conn(:,1:2))) > nvrt ) + error('tridiv2:invalidInputs', ... + 'Invalid EDGE input array.') ; + end + + if (min(min(tria(:,1:3))) < +1 || ... + max(max(tria(:,1:3))) > nvrt ) + error('tridiv2:invalidInputs', ... + 'Invalid TRIA input array.') ; + end + +%------------------------------ assemble extended adj. info. + [edge,tria] = tricon2(tria,conn) ; + + ediv = false(size(edge,1),1) ; + ediv(tria(tdiv,4:6)) = true ; + + snum = length(find(ediv)); + + while (true) + + %-------------------------- tria's with >= 2 edge splits + div3 = sum(double( ... + ediv(tria(:,4:6))),2)>=2; + + %-------------------------- expand onto adj. edge splits + ediv(tria(div3,4:6)) = true ; + + snew = length(find(ediv)) ; + + if (snew == snum), break; end + + snum = snew ; + + end + +%------------------------------ tria's with == 1 edge splits + div1 = sum( ... + double( ediv(tria(:,4:6))),2)==1; + +%------------------------------ indexing for mid-point vert. + ivec = zeros(size(edge,1),1); + ivec(ediv) = ... + (1:snum)' + size(vert,1); + +%------------------------------------------ update vert. set + emid = vert(edge(ediv,1),:) ... + + vert(edge(ediv,2),:) ; + vert =[vert ; emid * 0.5] ; + +%------------------------------------------ update edge. set + [cvec,eloc] = ... + setset2(conn,edge(ediv, 1:2)) ; + + epos = ivec(ediv); + epos = epos(eloc(eloc>0)) ; + + conn = [conn(~cvec,1:2) ; ... + conn(cvec,1) , epos ; ... + conn(cvec,2) , epos ] ; + +%------------------------------------ push 1-to-4 refinement + tr41 = ones(length(find(div3)),3) ; + tn41 = ones(length(find(div3)),1) ; + tn41(:,1) = tnum(div3,1); + tr41(:,1) = tria(div3,1); + tr41(:,2) = ivec(tria(div3,4)); + tr41(:,3) = ivec(tria(div3,6)); + + tr42 = ones(length(find(div3)),3) ; + tn42 = ones(length(find(div3)),1) ; + tn42(:,1) = tnum(div3,1); + tr42(:,1) = ivec(tria(div3,4)); + tr42(:,2) = tria(div3,2); + tr42(:,3) = ivec(tria(div3,5)); + + tr43 = ones(length(find(div3)),3) ; + tn43 = ones(length(find(div3)),1) ; + tn43(:,1) = tnum(div3,1); + tr43(:,1) = ivec(tria(div3,6)); + tr43(:,2) = ivec(tria(div3,5)); + tr43(:,3) = tria(div3,3); + + tr44 = ones(length(find(div3)),3) ; + tn44 = ones(length(find(div3)),1) ; + tn44(:,1) = tnum(div3,1); + tr44(:,1) = ivec(tria(div3,6)); + tr44(:,2) = ivec(tria(div3,4)); + tr44(:,3) = ivec(tria(div3,5)); + +%----------------------- push 1-to-2 refinement about edge 1 + tvec = false(size(tria,1), 1) ; + tvec(ediv(tria(:,4))&div1) = true ; + + tr21 = ones(length(find(tvec)),3) ; + tn21 = ones(length(find(tvec)),1) ; + tn21(:,1) = tnum(tvec,1); + tr21(:,1) = ivec(tria(tvec,4)); + tr21(:,2) = tria(tvec,3); + tr21(:,3) = tria(tvec,1); + + tr22 = ones(length(find(tvec)),3) ; + tn22 = ones(length(find(tvec)),1) ; + tn22(:,1) = tnum(tvec,1); + tr22(:,1) = ivec(tria(tvec,4)); + tr22(:,2) = tria(tvec,2); + tr22(:,3) = tria(tvec,3); + +%----------------------- push 1-to-2 refinement about edge 2 + tvec = false(size(tria,1), 1) ; + tvec(ediv(tria(:,5))&div1) = true ; + + tr23 = ones(length(find(tvec)),3) ; + tn23 = ones(length(find(tvec)),1) ; + tn23(:,1) = tnum(tvec,1); + tr23(:,1) = ivec(tria(tvec,5)); + tr23(:,2) = tria(tvec,1); + tr23(:,3) = tria(tvec,2); + + tr24 = ones(length(find(tvec)),3) ; + tn24 = ones(length(find(tvec)),1) ; + tn24(:,1) = tnum(tvec,1); + tr24(:,1) = ivec(tria(tvec,5)); + tr24(:,2) = tria(tvec,3); + tr24(:,3) = tria(tvec,1); + +%----------------------- push 1-to-2 refinement about edge 3 + tvec = false(size(tria,1), 1) ; + tvec(ediv(tria(:,6))&div1) = true ; + + tr25 = ones(length(find(tvec)),3) ; + tn25 = ones(length(find(tvec)),1) ; + tn25(:,1) = tnum(tvec,1); + tr25(:,1) = ivec(tria(tvec,6)); + tr25(:,2) = tria(tvec,2); + tr25(:,3) = tria(tvec,3); + + tr26 = ones(length(find(tvec)),3) ; + tn26 = ones(length(find(tvec)),1) ; + tn26(:,1) = tnum(tvec,1); + tr26(:,1) = ivec(tria(tvec,6)); + tr26(:,2) = tria(tvec,1); + tr26(:,3) = tria(tvec,2); + +%------------------------------------------ update tria. set + tria = [tria(~div1&~div3,1:3) ; ... + tr41 ; tr42 ; tr43 ; tr44 ; ... + tr21 ; tr22 ; + tr23 ; tr24 ; + tr25 ; tr26 ] ; + + tnum = [tnum(~div1&~div3,1:1) ; ... + tn41 ; tn42 ; tn43 ; tn44 ; ... + tn21 ; tn22 ; + tn23 ; tn24 ; + tn25 ; tn26 ] ; + +end + + + diff --git a/mesh2d/trihfn2.m b/mesh2d/trihfn2.m new file mode 100755 index 0000000..1937997 --- /dev/null +++ b/mesh2d/trihfn2.m @@ -0,0 +1,98 @@ +function [hval] = trihfn2(test,vert,tria,tree,hfun) +%TRIHFN2 evaluate a discrete mesh-size function defined on a +%2-simplex triangulation embedded in R^2. +% [HVAL] = TRIHFN2(TEST,VERT,TRIA,TREE,HFUN) returns an +% interpolation of the discrete mesh-size function HFUN to +% the queries points TEST. HVAL is a Q-by-1 array of func- +% tion values associated with the Q-by-2 array of XY coor- +% dinates TEST. {VERT,TRIA,HFUN} is a discrete mesh-size +% function, where VERT is a V-by-2 array of XY coordinates +% TRIA is a T-by-3 array of triangles and HFUN is a V-by-1 +% array of mesh-size values. Each row of TRIA defines a +% triangle, such that VERT(TRIA(II,1),:), +% VERT(TRIA(II,2),:) and VERT(TRIA(II,3),:) are the coord- +% inates of the II-TH triangle. TREE is a spatial indexing +% structure for {VERT,TRIA}, as returned by IDXTRI2. +% +% See also LFSHFN2, LIMHFN2, IDXTRI2 + +% Darren Engwirda : 2017 -- +% Email : engwirda@mit.edu +% Last updated : 07/04/2017 + +%---------------------------------------------- basic checks + if ( ~isnumeric(test) || ... + ~isnumeric(vert) || ... + ~isnumeric(tria) || ... + ~isnumeric(hfun) || ... + ~isstruct (tree) ) + error('trihfn2:incorrectInputClass' , ... + 'Incorrect input class.') ; + end + +%---------------------------------------------- basic checks + if (ndims(test) ~= +2 || ... + ndims(vert) ~= +2 || ... + ndims(tria) ~= +2 || ... + ndims(hfun) ~= +2 ) + error('trihfn2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + if (size(test,2)~= +2 || ... + size(vert,2)~= +2 || ... + size(tria,2) < +3 || ... + size(hfun,2)~= +1 || ... + size(vert,1)~= size(hfun,1) ) + error('trihfn2:incorrectDimensions' , ... + 'Incorrect input dimensions.'); + end + + nvrt = size(vert,1) ; + +%---------------------------------------------- basic checks + if (min(min(tria(:,1:3))) < +1 || ... + max(max(tria(:,1:3))) > nvrt ) + error('trihfn2:invalidInputs', ... + 'Invalid TRIA input array.') ; + end + +%-------------------------------------- test-to-tria queries + [tp,tj] = ... + findtria (vert,tria,test,tree); + + if (isempty(tp)) + in = false(size(test,1),1); + ti = []; + else + in = tp(:,1) > +0 ; + ti = tj(tp(in,+1)); + end + +%-------------------------------------- calc. linear interp. + hval = max(hfun) * ones(size(test,1),1) ; + + if (any(in)) + + d1 = test(in,:) - vert(tria(ti,1),:); + d2 = test(in,:) - vert(tria(ti,2),:); + d3 = test(in,:) - vert(tria(ti,3),:); + + a3 = abs(d1(:,1) .* d2(:,2) ... + - d1(:,2) .* d2(:,1) ) ; + a2 = abs(d1(:,1) .* d3(:,2) ... + - d1(:,2) .* d3(:,1) ) ; + a1 = abs(d3(:,1) .* d2(:,2) ... + - d3(:,2) .* d2(:,1) ) ; + + hval(in) = a1.*hfun(tria(ti,1)) ... + + a2.*hfun(tria(ti,2)) ... + + a3.*hfun(tria(ti,3)) ; + + hval(in) = hval(in)./(a1+a2+a3) ; + + end + +end + + + diff --git a/mesh2d/triread.m b/mesh2d/triread.m new file mode 100755 index 0000000..0d00161 --- /dev/null +++ b/mesh2d/triread.m @@ -0,0 +1,62 @@ +function [vert,edge,tria,tnum] = triread(name) +%TRIREAD read two-dimensional triangulation data from file. +% [VERT,EDGE,TRIA,TNUM] = TRIREAD(NAME) returns the 2-sim- +% plex triangulation {VERT,TRIA} contained in the mesh-fi- +% le NAME. +% +% VERT is a V-by-2 array of XY coordinates in the triangu- +% lation, EDGE is an array of constrained edges, TRIA is a +% T-by-3 array of triangles, and TNUM is a T-by-1 array of +% part indices. Each row of TRIA and EDGE define an eleme- +% nt. VERT(TRIA(II,1),:), VERT(TRIA(II,2),:) and VERT(TRIA +% (II,3),:) are the coordinates of the II-TH triangle. The +% edges in EDGE are defined in a similar manner. NUM is an +% array of part indexing, such that TNUM(II) is the index +% of the part in which the II-TH triangle resides. +% +% Data is returned non-empty if it is present in the file. +% +% See also TRISAVE + +% This routine borrows functionality from the JIGSAW pack- +% age: github.com/dengwirda/jigsaw-matlab. + +% Darren Engwirda : 2017 -- +% Email : de2363@columbia.edu +% Last updated : 01/10/2017 + + filename = mfilename('fullpath'); + filepath = fileparts( filename ); + + addpath([filepath,'/mesh-file']); + + vert = []; edge = []; tria = []; tnum = []; + +%---------------------------------------------- basic checks + if (~ischar(name)) + error('triread:incorrectInputClass' , ... + 'Incorrect input class.') ; + end + +%----------------------------------- borrow JIGSAW I/O func! + [mesh] = loadmsh(name) ; + +%----------------------------------- extract data if present + if (isfield(mesh,'point') && ... + isfield(mesh.point,'coord')) + vert = mesh.point.coord(:,1:2) ; + end + if (isfield(mesh,'edge2') && ... + isfield(mesh.edge2,'index')) + edge = mesh.edge2.index(:,1:2) ; + end + if (isfield(mesh,'tria3') && ... + isfield(mesh.tria3,'index')) + tria = mesh.tria3.index(:,1:3) ; + tnum = mesh.tria3.index(:, 4) ; + end + +end + + + diff --git a/mesh2d/triscr2.m b/mesh2d/triscr2.m new file mode 100755 index 0000000..06a7271 --- /dev/null +++ b/mesh2d/triscr2.m @@ -0,0 +1,36 @@ +function [tscr] = triscr2(pp,tt) +%TRISCR2 calc. area-len. ratios for triangles in a 2-simplex +%triangulation in the two-dimensional plane. +% [SCR2] = TRISCR2(VERT,TRIA) returns the area-len. ratios +% where SCR2 is a T-by-1 vector, VERT is a V-by-2 array of +% XY coordinates, and TRIA is a T-by-3 array of +% vertex indexing, where each row defines a triangle, such +% that VERT(TRIA(II,1),:), VERT(TRIA(II,2),:) and VERT( +% TRIA(II,3),:) are the coordinates of the II-TH triangle. +% +% See also TRIAREA, TRIANG2, TRIBAL2 + +% Darren Engwirda : 2017 -- +% Email : engwirda@mit.edu +% Last updated : 17/01/2017 + +%--------------------------- compute signed area-len. ratios + scal = 4.0 * sqrt(3.0) / 3.0; + + area = triarea(pp,tt) ; % also error checks! + + lrms = sum((pp(tt(:,2),:) ... + - pp(tt(:,1),:)).^2,2) ... + + sum((pp(tt(:,3),:) ... + - pp(tt(:,2),:)).^2,2) ... + + sum((pp(tt(:,3),:) ... + - pp(tt(:,1),:)).^2,2) ; + + lrms =(lrms / 3.0) .^ 1.00; + + tscr = scal * area ./ lrms; + +end + + + diff --git a/mesh2d/two_foci_demo.m b/mesh2d/two_foci_demo.m new file mode 100755 index 0000000..a6fce21 --- /dev/null +++ b/mesh2d/two_foci_demo.m @@ -0,0 +1,74 @@ +function two_foci_demo ( ) + +%*****************************************************************************80 +% +%% TWO_FOCI_DEMO demonstrates MESH2D on a box with two foci. +% +% Licensing: +% +% This code is distributed under the GNU LGPL license. +% +% Modified: +% +% 13 May 2017 +% +% Author: +% +% John Burkardt +% + fprintf ( 1, '\n' ); + fprintf ( 1, 'TWO_FOCI_DEMO:\n' ); + fprintf ( 1, ' MATLAB version\n' ); + fprintf ( 1, ' Demonstrate MESH2D on a the two foci problem.\n' ); + + warning off +% +% 1) Do the region. +% + figure ( ) + v = [ 0.0, 0.0; 1.0, 0.0; 1.0, 1.0; 0.0, 1.0 ]; + [ p, t ] = mesh2d ( v ); + print ( '-dpng', 'two_foci_1.png' ); +% +% 2) Do the region with a maximum H. +% + figure ( ) + v = [ 0.0, 0.0; 1.0, 0.0; 1.0, 1.0; 0.0, 1.0 ]; + hdata = []; + hdata.hmax = 0.1; + [ p, t ] = mesh2d ( v, [], hdata ); + print ( '-dpng', 'two_foci_2.png' ); +% +% 3) Do the region, with H specifying two special foci. +% + figure ( ) + v = [ 0.0, 0.0; 1.0, 0.0; 1.0, 1.0; 0.0, 1.0 ]; + hdata = []; + hdata.fun = @h_function; + [ p, t ] = mesh2d ( v, [], hdata ); + print ( '-dpng', 'two_foci_3.png' ); +% +% Terminate. +% + fprintf ( 1, '\n' ); + fprintf ( 1, 'TWO_FOCI_INTERIOR_DEMO:\n' ); + fprintf ( 1, ' Normal end of execution.\n' ); + + return +end +function h = h_function ( x, y ) + +%*****************************************************************************80 +% +%% H_FUNCTION is a size function for the two foci problem. +% +% Discussion: +% +% The mesh size is 0.01 near (0.25,1.0) and near (0.75,1.0). +% + h1 = 0.01 + 0.1 * sqrt ( ( x - 0.25 ).^2 + ( y - 1.0 ).^2 ); + h2 = 0.01 + 0.1 * sqrt ( ( x - 0.75 ).^2 + ( y - 1.0 ).^2 ); + h = min ( h1, h2 ); + + return +end \ No newline at end of file diff --git a/nshm2023_wus_v1.gps b/nshm2023_wus_v1.gps new file mode 100755 index 0000000..3db2666 --- /dev/null +++ b/nshm2023_wus_v1.gps @@ -0,0 +1,4993 @@ +%2023 NSHM Western US GPS Velocities Version: 1.0 +%Release Date : 2021/02/09 +% +%Start Field Description +%lon Longitude +%lat Latitude +%Ve East component of station velocity, mm/yr +%Vn North component of station velocity, mm/yr +%Se Standard deviation of East velocity, mm/yr +%Sn Standard deviation of North velocity, mm/yr +%Ren Correlation of North and East velocity +%End Field Description +% +% lon lat Ve Vn Se Sn Ren + 242.9068 34.1164 -15.189 16.558 0.523 0.496 0.001 + 242.5551 33.2743 -27.121 27.931 0.604 0.562 0.002 + 243.5706 34.5943 -6.496 7.152 0.272 0.393 -0.018 + 248.9363 42.7731 -0.249 -0.563 0.248 0.189 0.025 + 244.8415 37.3580 -2.574 0.494 0.192 0.197 0.006 + 236.5125 48.3898 6.547 4.376 0.457 0.730 0.007 + 241.3052 34.8245 -15.864 17.183 0.254 0.210 -0.008 + 239.3302 36.8896 -8.540 10.510 1.161 0.312 0.002 + 248.3798 40.5839 -0.224 0.134 0.175 0.176 0.011 + 240.6365 34.0150 -29.116 32.776 0.192 0.690 0.000 + 241.1697 34.1574 -27.453 29.839 0.313 0.288 -0.001 + 245.0682 36.3191 -2.397 0.923 0.198 0.194 -0.005 + 242.6751 33.3419 -26.287 27.229 0.214 0.242 -0.062 + 242.5235 33.3811 -26.325 27.552 0.220 0.239 -0.068 + 242.4781 36.0500 -6.610 6.831 0.191 0.193 0.008 + 237.8581 48.1741 4.370 2.971 0.217 0.256 0.000 + 239.8167 45.7082 1.638 1.846 0.205 0.194 -0.045 + 241.0895 35.2013 -14.879 10.749 0.337 0.897 0.002 + 247.3774 43.6670 -1.106 -0.991 0.198 0.188 -0.007 + 238.6315 43.8206 0.372 4.070 0.197 0.209 0.007 + 237.3298 42.1807 -1.558 6.868 0.256 0.196 0.006 + 243.8606 36.3459 -2.632 1.346 0.419 0.383 -0.002 + 242.6915 39.3904 -3.565 1.396 0.183 0.191 0.004 + 242.8460 34.4683 -12.564 13.330 0.352 0.249 0.008 + 248.9286 31.7300 -1.301 0.979 0.371 0.372 -0.001 + 247.3799 33.3695 -1.710 0.541 0.225 0.252 -0.002 + 248.4846 32.9837 -1.180 0.895 0.370 0.474 0.001 + 248.3430 35.1773 -1.369 0.441 0.162 0.178 0.020 + 249.2285 33.3954 -1.360 0.997 0.491 0.509 0.001 + 249.0897 33.0590 -1.077 0.658 0.505 0.232 0.004 + 247.7221 33.6927 -1.149 0.932 0.234 0.319 0.000 + 247.7444 33.5749 -0.738 1.295 0.386 0.717 0.004 + 248.5373 36.9087 -1.228 -0.315 0.205 0.482 0.015 + 247.5393 34.6086 -1.822 0.583 0.208 0.173 0.013 + 243.3703 33.5401 -19.896 21.438 0.210 0.319 -0.009 + 250.2881 32.8020 -0.877 0.783 0.197 0.168 0.001 + 248.7595 34.2650 -1.392 0.360 0.245 0.534 0.002 + 248.0623 33.4457 -1.089 0.721 0.374 0.194 -0.002 + 242.1035 34.1260 -24.077 22.396 0.276 0.238 -0.003 + 248.3800 33.4809 -1.362 1.141 0.306 0.291 0.000 + 249.2297 31.9541 -1.053 0.888 0.283 0.231 -0.005 + 247.3378 33.8593 -1.242 0.618 0.172 0.230 -0.001 + 241.0986 37.7835 -6.672 11.238 0.330 1.401 -0.000 + 234.8649 48.8353 9.766 6.639 0.262 0.211 0.013 + 242.7954 40.4128 -2.833 0.936 0.188 0.193 0.006 + 240.9703 33.4805 -29.619 33.391 0.240 0.188 -0.014 + 240.0185 34.5822 -29.200 31.232 0.574 0.260 0.002 + 248.4739 44.1850 -1.072 -1.826 0.214 0.195 -0.007 + 243.1158 34.2643 -11.313 14.837 0.314 0.443 -0.005 + 233.1574 50.5443 2.512 3.379 0.249 0.267 -0.046 + 240.5941 34.9205 -21.599 21.065 0.187 0.196 0.007 + 246.5941 44.3156 -0.435 -0.468 0.187 0.192 0.001 + 242.6501 48.9867 1.580 0.383 0.211 0.238 -0.012 + 243.3789 37.0399 -2.808 1.420 0.188 0.186 0.009 + 237.5210 48.7553 4.571 2.513 0.207 0.202 0.004 + 244.0018 34.0005 -4.780 5.078 0.225 0.251 -0.027 + 238.6848 44.0572 0.740 3.409 0.182 0.185 0.001 + 241.9259 35.8784 -8.580 10.187 0.225 0.204 0.002 + 237.8745 47.6174 4.882 2.925 0.290 0.363 0.004 + 241.8403 33.9671 -26.686 26.189 0.200 0.261 0.000 + 241.0112 47.9333 2.536 0.731 0.598 0.371 0.001 + 242.9354 33.5782 -23.617 24.646 0.202 0.352 -0.038 + 235.7475 47.5393 13.304 9.430 0.573 0.644 0.007 + 243.9196 35.2870 -3.372 1.238 0.241 0.268 0.005 + 241.9053 33.9623 -28.086 28.766 0.232 0.502 0.000 + 240.8906 35.1325 -13.999 13.536 0.605 0.806 0.000 + 250.4422 42.7671 0.046 0.394 0.279 0.330 -0.028 + 238.9509 42.4068 -2.563 4.243 0.183 0.187 -0.036 + 237.0725 48.0161 6.028 3.676 0.859 0.589 0.005 + 245.2852 33.6104 -1.959 1.298 0.244 0.238 -0.023 + 243.9470 34.2514 -2.561 4.043 0.427 0.196 -0.015 + 243.0153 33.9627 -14.786 19.565 0.396 0.311 -0.005 + 244.2703 33.3646 -8.492 7.952 1.334 2.399 0.000 + 241.7230 34.1849 -25.191 24.274 0.304 0.306 0.002 + 240.3174 48.1314 1.969 0.966 0.189 0.188 0.008 + 237.8475 37.9194 -14.846 16.715 0.487 0.547 0.003 + 236.9782 49.2751 4.549 2.998 0.262 0.233 0.029 + 241.4232 34.6823 -19.043 20.292 0.195 0.188 -0.019 + 247.4685 44.7396 -0.304 -0.533 0.307 0.267 0.009 + 242.9880 34.9186 -7.921 10.248 0.263 0.222 0.007 + 241.8118 34.2928 -23.816 22.669 0.206 0.190 0.009 + 243.1283 36.9176 -2.999 1.838 0.192 0.186 0.017 + 242.1564 42.7795 -1.471 1.215 0.298 0.325 -0.007 + 243.5491 36.7453 -2.754 1.367 0.187 0.186 0.007 + 240.6525 35.1573 -16.755 14.740 0.180 0.176 0.045 + 235.4367 42.8361 6.371 13.706 0.461 0.597 -0.015 + 244.0101 33.6551 -9.038 8.769 0.196 0.232 -0.014 + 239.5663 35.9394 -11.827 17.813 0.825 0.922 0.002 + 239.5692 35.8883 -21.326 27.877 0.566 0.634 -0.003 + 242.5960 33.4553 -25.495 27.245 0.580 0.555 -0.042 + 249.3227 39.1910 -0.119 0.321 0.202 0.189 0.029 + 241.5170 33.4458 -28.433 32.020 0.368 0.357 0.003 + 241.6662 33.3116 -28.681 31.898 0.214 0.187 0.008 + 236.6327 46.1973 6.349 7.080 0.260 0.262 -0.005 + 241.3702 34.1386 -26.840 28.489 0.182 0.204 -0.000 + 242.3288 35.5653 -8.132 10.348 0.201 0.191 -0.039 + 241.7888 33.8763 -24.824 28.841 0.626 0.188 -0.001 + 240.9865 34.8064 -21.191 19.876 0.196 0.222 0.000 + 243.6641 34.8295 -5.708 2.879 0.381 0.252 0.003 + 247.1395 40.6807 -2.471 -0.157 0.200 0.196 -0.006 + 242.0350 34.2440 -23.255 21.576 0.352 0.385 -0.006 + 237.8807 37.7241 -15.451 19.243 0.334 0.432 -0.000 + 237.2241 48.0106 5.602 3.720 0.232 0.204 -0.004 + 240.0101 47.8316 2.234 1.614 0.312 0.394 0.004 + 238.2142 43.2244 -0.554 4.328 0.197 0.212 0.007 + 241.9740 34.3334 -22.413 21.529 0.228 0.208 -0.003 + 243.2345 36.7465 -2.906 1.764 0.189 0.187 0.013 + 242.1723 34.6405 -12.883 15.891 0.313 0.239 0.006 + 239.7895 37.0849 -12.146 13.598 0.531 0.458 -0.005 + 237.9916 49.1566 3.502 2.025 0.189 0.195 -0.003 + 236.0219 45.4865 7.961 9.359 0.203 0.194 0.030 + 243.3342 31.8708 -29.111 30.400 0.210 0.209 0.037 + 238.8513 43.7509 -0.143 3.645 0.224 0.196 0.005 + 241.0627 34.1096 -28.032 30.210 0.190 0.183 -0.000 + 241.8727 34.1367 -23.910 23.470 0.316 0.376 0.001 + 242.5755 34.2712 -13.872 17.800 1.258 0.412 0.002 + 242.5206 34.3138 -16.606 17.704 0.211 0.219 0.057 + 241.8558 34.5303 -19.095 21.293 0.448 0.437 -0.003 + 242.2912 34.1099 -22.961 22.182 0.229 0.262 -0.007 + 242.6890 33.1354 -27.505 29.271 0.615 1.570 -0.003 + 237.9106 42.9760 -0.174 5.939 0.591 0.384 0.001 + 237.9837 42.9229 -0.297 5.002 0.807 0.879 0.001 + 245.1258 40.5584 -2.823 0.021 0.184 0.185 -0.003 + 235.8691 48.8203 7.026 4.918 0.331 0.302 0.004 + 239.6140 38.0342 -9.545 8.390 0.217 0.197 -0.015 + 235.6037 40.4417 -7.131 31.314 0.454 0.423 -0.002 + 239.0000 37.6413 -10.234 8.454 0.236 0.197 0.005 + 241.5886 34.3532 -24.535 23.677 0.237 0.269 -0.003 + 251.2104 40.0771 0.344 0.707 0.267 0.229 0.028 + 238.2507 48.5387 3.503 2.162 0.212 0.220 -0.003 + 242.3911 33.8576 -23.553 25.295 0.192 0.205 0.013 + 244.8766 32.8635 -1.727 1.362 0.605 0.631 0.022 + 244.2715 32.8505 -20.605 20.858 0.271 0.210 0.015 + 242.0967 48.5448 1.629 0.263 0.200 0.190 -0.001 + 239.8186 45.2379 0.830 2.061 0.180 0.186 -0.035 + 247.8790 40.6526 -1.731 -0.041 0.200 0.193 0.006 + 240.1205 34.4149 -29.436 30.242 0.196 0.411 0.002 + 236.6954 44.5855 4.444 7.042 0.190 0.200 0.000 + 248.1178 33.5687 -0.831 1.734 0.338 0.681 0.002 + 249.0281 32.2245 -0.743 0.984 0.233 0.179 -0.001 + 249.1691 32.2375 -1.129 0.799 0.169 0.293 -0.003 + 243.6131 33.7325 -14.617 17.213 0.206 0.323 0.013 + 237.7392 46.0592 4.055 3.455 0.531 0.399 -0.006 + 237.3144 48.2173 5.548 3.716 0.281 0.236 0.000 + 242.4270 35.0717 -7.878 12.732 0.242 0.223 0.000 + 239.6858 47.4302 2.841 1.799 0.452 0.519 0.010 + 237.7435 46.8401 4.234 4.182 0.220 0.195 0.004 + 243.1816 37.0812 -2.879 1.519 0.191 0.224 0.008 + 243.4308 36.8077 -2.708 1.462 0.189 0.185 0.012 + 247.3647 43.8303 -1.330 -1.151 0.187 0.188 -0.008 + 239.2492 35.7916 -25.540 33.274 0.261 0.209 0.018 + 242.9003 34.0391 -16.673 18.559 0.298 0.436 0.008 + 240.2752 35.2421 -19.007 19.617 0.438 0.507 0.015 + 241.7272 33.8235 -26.904 28.515 0.284 0.315 -0.002 + 237.0875 46.2746 4.518 5.515 0.286 0.194 0.000 + 244.2649 33.0698 -13.062 17.594 0.497 0.605 0.005 + 240.2153 34.0293 -29.755 34.381 0.286 0.340 0.029 + 240.9610 34.1684 -28.268 30.602 0.217 0.184 0.001 + 241.7433 33.8615 -27.556 28.035 0.328 0.221 -0.002 + 238.2676 46.8707 3.566 3.910 0.640 0.424 0.007 + 237.7642 47.3806 4.163 3.624 0.275 0.275 -0.000 + 241.4762 34.2535 -25.488 26.596 0.205 0.228 -0.001 + 240.6288 34.4081 -28.409 26.740 0.190 0.183 0.004 + 241.3868 34.5165 -22.875 21.597 0.195 0.191 -0.021 + 243.6296 34.1241 -5.793 10.989 0.232 0.299 -0.002 + 237.1060 42.3767 -1.592 7.598 0.203 0.195 0.011 + 240.3260 34.9426 -24.216 25.715 1.677 0.709 0.000 + 236.7801 47.4233 6.604 5.339 0.290 0.219 -0.010 + 242.0983 34.0820 -25.048 23.322 0.491 0.279 -0.001 + 237.5039 45.6109 4.379 5.447 0.209 0.228 -0.012 + 241.6031 34.3348 -24.058 23.528 0.444 0.242 -0.015 + 241.6026 34.3342 -24.680 23.303 0.723 0.552 -0.005 + 236.6585 43.2110 0.582 7.753 0.191 0.189 -0.019 + 248.4724 40.4128 0.045 0.331 0.186 0.185 0.008 + 241.0188 37.7442 -9.451 10.494 0.603 0.854 0.000 + 236.7558 43.1188 0.461 7.432 0.216 0.195 -0.014 + 244.2119 33.3898 -10.772 8.902 0.286 0.243 -0.012 + 238.0844 37.8786 -11.352 11.806 0.184 0.193 -0.001 + 238.1714 38.4687 -10.418 8.172 0.420 0.503 0.002 + 242.6928 33.4306 -26.451 27.367 0.545 0.543 -0.043 + 242.8363 48.1368 1.556 0.124 0.183 0.206 -0.007 + 240.3099 37.2643 -9.575 8.139 0.697 0.291 -0.004 + 240.3750 49.3226 1.956 0.747 0.326 0.332 -0.016 + 241.6515 34.0239 -25.587 27.008 0.229 0.279 0.003 + 242.7505 33.0365 -27.324 27.764 0.253 0.208 -0.017 + 243.2879 33.7333 -16.424 19.425 0.218 0.308 -0.005 + 242.1541 35.2675 -7.976 12.764 0.408 0.453 -0.003 + 242.1399 34.4134 -19.240 19.700 0.239 0.197 -0.032 + 241.8522 47.6561 1.971 0.331 0.186 0.209 0.002 + 237.9198 47.7741 4.373 3.384 0.763 0.958 -0.001 + 241.9607 37.7428 -3.884 3.570 0.191 0.198 -0.001 + 241.8725 33.9383 -27.234 25.635 0.198 0.241 0.001 + 241.8740 33.9380 -30.254 25.670 0.532 0.324 0.002 + 237.7162 37.8150 -18.182 24.496 0.243 0.278 0.003 + 241.6710 33.8867 -26.422 29.190 0.382 0.554 -0.000 + 242.5883 33.6477 -24.540 26.416 0.189 0.253 -0.056 + 245.7357 37.9155 -2.579 0.216 0.190 0.184 -0.005 + 241.1696 34.9462 -16.075 16.097 0.249 0.260 -0.010 + 245.0611 39.3452 -3.178 0.128 0.430 0.360 -0.013 + 232.8773 49.8731 7.240 5.663 0.249 0.258 -0.043 + 244.1828 40.9147 -3.259 0.495 0.184 0.183 0.000 + 241.8712 33.5835 -27.661 29.753 1.016 0.620 0.000 + 241.7916 34.0297 -25.615 24.272 0.213 0.217 0.002 + 242.5740 33.6491 -25.144 26.651 0.326 0.529 -0.021 + 237.2394 47.4976 5.754 4.202 0.263 0.269 -0.012 + 241.5743 34.7031 -15.379 17.134 0.516 0.506 0.000 + 241.5462 34.5993 -17.516 21.831 0.775 0.438 0.002 + 247.0725 44.0744 -0.743 -0.984 0.198 0.184 -0.006 + 242.7119 45.4313 0.704 0.521 0.193 0.187 0.008 + 238.0444 47.2062 3.717 5.172 0.372 0.751 0.002 + 248.0711 41.2532 -0.391 -0.070 0.193 0.186 -0.003 + 240.4553 47.3293 1.859 1.188 0.192 0.191 0.006 + 244.1773 33.1164 -16.503 14.961 0.264 0.380 0.005 + 242.4744 34.1042 -22.086 22.451 0.187 0.194 -0.024 + 236.9992 37.6972 -26.767 37.484 0.325 0.536 -0.013 + 247.5453 35.3419 -1.382 0.835 0.226 0.195 0.014 + 239.9906 34.7330 -29.632 31.012 0.183 0.188 0.014 + 243.0641 34.0935 -13.150 15.791 0.237 0.354 0.005 + 241.1059 34.4099 -25.907 25.290 0.187 0.275 0.000 + 241.1160 34.3563 -27.066 28.588 0.195 0.227 -0.000 + 246.1946 39.3694 -2.652 0.121 0.192 0.187 -0.007 + 248.6197 40.5119 -0.337 0.224 0.184 0.190 0.009 + 241.7595 34.7339 -14.305 17.777 1.012 0.668 0.002 + 247.5008 36.9883 -1.017 0.445 0.182 0.185 0.001 + 236.9819 48.5352 5.332 3.499 0.333 0.345 0.005 + 236.9460 48.5306 5.550 3.600 0.270 0.360 0.011 + 244.2001 32.9450 -20.307 20.938 0.476 0.795 0.005 + 236.0439 46.2049 10.126 8.652 0.567 0.645 -0.012 + 241.6405 34.0806 -29.112 25.523 0.328 0.328 0.004 + 241.1066 34.8002 -19.723 19.107 0.218 0.206 -0.034 + 240.6445 40.4165 -4.488 3.397 0.199 0.199 0.007 + 247.9356 43.9860 -1.273 -1.308 0.223 0.221 0.001 + 240.1363 35.1894 -23.158 25.449 0.180 0.189 0.009 + 242.6021 34.2039 -17.865 17.604 0.247 0.670 0.003 + 233.8727 49.6815 7.396 4.443 0.420 0.356 -0.027 + 244.4786 33.2748 -5.127 1.902 0.254 0.345 0.002 + 243.6174 34.2914 -5.325 9.027 0.411 0.436 -0.005 + 245.1727 33.0511 -1.900 2.030 0.245 0.270 0.030 + 244.3398 34.7840 -2.585 0.916 0.203 0.222 0.021 + 245.8105 34.3086 -1.523 1.758 0.229 0.277 -0.016 + 239.1853 45.8388 2.058 2.574 0.262 0.273 0.009 + 243.1107 35.4252 -4.910 6.969 0.255 0.253 0.002 + 245.8203 40.6402 -2.707 -0.037 0.186 0.185 -0.001 + 248.1035 39.9137 -2.136 0.720 0.317 0.271 0.007 + 239.5843 36.3990 -8.494 10.958 0.675 0.639 0.002 + 242.3354 48.1436 1.664 0.104 0.211 0.266 -0.001 + 236.9774 46.7955 5.541 5.559 0.256 0.210 0.010 + 237.8727 48.1947 3.419 2.958 0.278 0.267 0.001 + 248.5784 42.9378 -1.151 -0.741 0.202 0.193 0.010 + 239.2126 45.3644 1.540 2.604 0.186 0.190 0.062 + 236.7026 42.4345 -1.088 8.201 0.203 0.217 -0.025 + 246.7588 43.2441 -1.818 -0.368 0.263 0.216 -0.031 + 241.8871 34.0474 -25.923 24.261 0.235 0.199 0.002 + 238.6725 45.7826 2.879 2.943 0.356 0.429 0.012 + 238.2119 47.2908 3.691 3.209 0.251 0.266 0.011 + 242.7008 35.0115 -7.223 11.228 0.423 0.580 0.002 + 239.3179 34.4694 -30.645 35.324 0.403 0.443 0.004 + 241.7142 33.7836 -26.087 29.431 0.517 0.187 -0.008 + 243.5699 34.7548 -6.919 4.397 0.462 0.230 0.002 + 238.5301 40.8159 -6.042 5.387 0.218 0.213 0.004 + 248.6273 40.5141 -0.270 0.140 0.311 0.277 0.004 + 242.2005 34.7599 -11.425 15.190 0.203 0.193 0.010 + 245.5860 43.5626 -1.334 -0.460 0.187 0.187 0.000 + 236.8909 44.3776 3.496 6.399 0.232 0.227 0.005 + 242.9985 33.7081 -21.789 22.781 0.266 0.460 -0.016 + 244.3647 33.7050 -4.647 2.609 0.233 0.220 -0.026 + 239.5205 35.8667 -22.558 29.331 0.376 0.449 0.014 + 242.1548 34.4582 -17.633 18.702 0.451 0.393 0.007 + 231.8650 50.6404 1.840 2.446 0.366 0.519 -0.004 + 241.8318 33.9245 -26.359 25.841 0.394 0.513 -0.001 + 236.9253 38.9952 -17.845 21.879 0.209 0.223 -0.014 + 246.8999 43.7133 -1.501 -0.702 0.186 0.183 -0.018 + 239.5976 35.8808 -15.093 20.034 0.446 0.450 0.013 + 240.8125 34.4412 -27.281 24.635 0.190 0.186 0.002 + 245.1553 34.0650 -2.412 0.831 0.195 0.357 -0.003 + 246.9033 43.9275 -0.986 -0.773 0.199 0.188 -0.009 + 248.4349 41.6072 -0.149 0.113 0.250 0.188 -0.004 + 244.0885 34.7273 -2.792 1.248 0.190 0.279 0.014 + 247.0585 44.3303 -0.499 -0.678 0.196 0.199 0.002 + 247.9584 43.4816 -1.276 -1.301 0.239 0.171 -0.002 + 248.2164 43.8204 -1.212 -1.727 0.183 0.198 0.001 + 248.8897 43.7461 -1.182 -1.792 0.179 0.191 0.011 + 247.9480 43.5186 -1.601 -1.668 0.177 0.179 -0.004 + 248.7033 43.4095 -1.503 -0.952 0.229 0.280 0.009 + 243.8787 45.9397 0.682 0.630 0.334 0.268 0.009 + 243.7785 33.7968 -11.657 11.841 1.308 1.050 0.010 + 247.5682 42.8656 -1.879 -0.977 0.250 0.177 -0.025 + 243.7610 33.7680 -11.662 12.424 0.260 0.472 0.005 + 246.1031 45.1921 0.889 -0.456 0.783 0.749 0.001 + 248.4161 42.6863 -1.782 -0.283 0.193 0.189 0.010 + 243.7166 43.6529 -1.183 0.238 0.214 0.221 0.002 + 244.9682 32.7062 -2.722 2.795 0.249 0.201 0.049 + 244.8549 34.1576 -2.507 1.187 0.208 0.220 -0.015 + 241.5257 35.6623 -9.843 10.551 0.194 0.179 0.016 + 244.4932 32.8294 -13.355 20.126 0.560 0.257 0.009 + 242.0446 34.4491 -18.548 20.142 0.277 0.330 0.011 + 243.9010 36.4588 -2.513 1.180 0.184 0.186 0.000 + 241.8268 34.2048 -24.957 23.394 0.320 0.361 -0.016 + 237.7824 46.2751 4.084 4.949 0.386 0.623 0.008 + 237.7726 37.4062 -22.064 29.055 0.199 0.225 -0.007 + 240.9918 34.3985 -26.255 24.671 0.312 0.336 0.001 + 237.1039 46.1182 4.700 6.066 0.587 0.703 0.005 + 240.8414 46.1979 1.713 1.174 0.247 0.239 0.001 + 238.2161 42.2242 -2.390 5.515 0.197 0.191 -0.015 + 245.9585 35.1974 -1.846 0.884 0.209 0.213 -0.068 + 241.4418 46.6432 1.023 0.795 0.334 0.430 0.003 + 241.0208 37.6591 -9.432 7.699 0.814 0.594 0.000 + 243.1904 47.7707 1.643 0.249 0.277 0.340 -0.006 + 237.6790 47.8029 4.183 3.377 0.253 0.267 -0.001 + 237.2046 47.5473 5.638 4.062 0.192 0.185 -0.024 + 243.8266 33.9254 -7.309 8.318 0.275 0.302 0.010 + 244.2963 40.8508 -3.051 0.322 0.179 0.187 -0.001 + 239.5267 35.8998 -22.772 29.944 0.945 0.921 0.004 + 241.4254 34.1819 -26.388 28.154 0.190 0.195 -0.001 + 241.6935 33.9278 -25.743 27.924 0.457 0.415 -0.002 + 241.8628 33.8321 -25.936 27.576 0.333 0.281 0.002 + 241.8268 33.7916 -26.115 28.558 0.400 0.410 -0.002 + 241.7967 33.7878 -27.819 29.351 0.548 0.403 -0.001 + 236.8933 44.6343 4.097 6.656 0.201 0.192 0.010 + 243.5672 34.2673 -5.155 10.869 0.262 0.360 -0.003 + 243.7909 34.6994 -4.321 1.689 0.210 0.430 0.005 + 241.6783 34.1346 -26.122 24.638 0.306 0.424 0.002 + 235.8923 43.9836 5.713 9.026 0.349 0.212 -0.000 + 241.5872 34.0951 -26.414 25.810 0.188 0.184 0.023 + 242.2355 33.6406 -26.387 27.850 0.541 0.574 0.019 + 239.4615 47.0003 2.369 1.873 0.252 0.218 0.005 + 241.8608 34.6620 -14.536 17.700 0.280 0.190 0.003 + 243.6918 36.7459 -2.575 1.158 0.190 0.189 0.003 + 241.1323 34.8075 -18.934 18.553 0.227 0.236 -0.015 + 238.1691 47.9444 3.834 2.764 0.446 0.449 0.009 + 243.2412 33.2360 -24.920 25.334 1.180 0.614 0.002 + 249.5998 44.5651 -0.168 -1.224 0.427 0.645 0.002 + 242.1650 34.4855 -16.414 18.133 0.219 0.182 0.030 + 242.1621 34.5860 -13.956 16.431 0.273 0.209 0.014 + 247.0665 43.7225 -1.535 -0.984 0.206 0.200 -0.010 + 242.6087 33.7442 -23.579 25.240 0.290 0.329 -0.012 + 242.5549 33.8174 -23.012 24.890 0.285 0.431 -0.025 + 248.0717 40.2614 -1.959 0.067 0.277 0.305 0.001 + 237.2417 47.2188 5.420 4.792 0.201 0.188 -0.015 + 243.0603 35.0903 -6.801 8.557 0.298 0.254 -0.003 + 245.9031 46.7629 1.112 -0.388 0.260 0.237 -0.002 + 241.9966 34.1119 -25.153 22.653 0.350 0.648 -0.001 + 242.2459 34.1333 -23.141 22.233 0.202 0.203 -0.017 + 239.4057 35.8287 -24.407 32.119 0.247 0.218 0.012 + 242.4536 34.3149 -16.839 18.469 0.804 0.977 0.018 + 242.0433 34.0268 -26.525 25.222 0.455 0.455 -0.000 + 236.9099 44.0512 2.857 6.493 0.226 0.209 0.001 + 241.9700 34.5271 -17.285 18.289 0.294 0.382 0.005 + 238.3104 47.6952 3.625 2.751 0.216 0.227 0.001 + 242.8361 47.2824 1.348 0.218 0.180 0.196 -0.002 + 247.7532 41.5921 -1.148 -0.574 0.233 0.186 -0.005 + 238.1348 37.2868 -19.344 24.236 0.198 0.249 0.002 + 240.8963 34.7336 -23.403 21.376 0.186 0.187 0.003 + 244.8087 36.1595 -1.862 0.223 0.255 0.270 -0.003 + 235.9462 46.2781 10.870 9.653 0.306 0.332 -0.005 + 242.9977 46.3732 1.083 0.113 0.209 0.181 0.002 + 239.5569 35.8326 -22.221 29.057 0.395 0.494 0.002 + 242.5632 33.8568 -22.726 24.816 0.208 0.212 -0.034 + 249.3107 44.9734 1.087 0.202 0.282 0.230 -0.015 + 251.4719 39.0912 -0.974 -0.338 0.185 0.192 -0.005 + 251.5099 39.0147 0.415 -1.171 0.205 0.238 -0.002 + 251.2694 39.1899 -0.923 0.577 0.301 0.526 -0.001 + 251.0262 38.6842 -0.130 0.634 0.180 0.166 -0.019 + 251.9270 38.7396 -0.727 0.720 0.690 0.436 -0.001 + 251.1483 39.2225 -1.280 0.544 0.554 0.446 -0.001 + 251.4418 38.2432 -0.867 0.280 0.219 0.314 -0.010 + 237.0443 44.9737 5.047 6.646 0.817 0.272 0.015 + 238.7784 42.4183 -2.240 4.682 0.201 0.207 -0.023 + 238.8696 44.6640 1.117 3.529 0.187 0.221 -0.011 + 239.2414 36.1869 -9.863 12.080 0.317 0.409 0.013 + 239.2332 36.1805 -27.752 32.611 0.282 0.258 0.020 + 244.0210 36.6325 -2.394 1.044 0.195 0.202 -0.007 + 238.3573 37.3415 -12.319 11.845 0.488 0.340 -0.003 + 237.5057 37.8423 -19.332 26.551 0.550 0.274 0.001 + 238.2888 45.3287 2.848 3.777 0.222 0.193 0.006 + 239.5412 35.9219 -12.742 18.753 1.153 1.197 0.002 + 248.0928 40.6211 -0.637 -0.193 0.171 0.187 0.012 + 239.6486 34.0383 -30.292 36.047 0.189 0.178 0.000 + 241.8737 34.1368 -24.384 24.137 0.268 0.340 0.003 + 238.1659 37.4490 -15.752 17.783 0.193 0.276 0.003 + 243.9045 40.1484 -2.693 0.520 0.191 0.187 -0.003 + 240.9391 37.6538 -9.441 9.204 0.745 0.397 0.007 + 242.4495 33.7145 -24.924 26.614 0.288 0.208 -0.030 + 235.4108 48.3707 10.738 6.805 0.447 0.327 0.004 + 242.6820 33.9184 -21.841 24.038 0.195 0.204 -0.023 + 239.5659 35.9695 -11.331 17.457 0.323 0.337 0.015 + 239.6972 41.9023 -3.362 3.945 0.193 0.198 -0.041 + 244.5879 40.7107 -2.970 0.216 0.180 0.184 -0.003 + 238.1331 37.4853 -15.140 16.875 0.194 0.185 0.002 + 243.5777 32.8919 -26.780 26.638 0.236 0.214 -0.019 + 248.3344 41.0462 0.096 0.532 0.237 0.258 0.003 + 248.3664 40.0156 -0.535 0.167 0.211 0.197 0.010 + 241.1220 34.2955 -27.396 29.147 0.190 0.187 -0.001 + 242.1183 34.1752 -23.716 21.911 0.193 0.186 -0.018 + 238.2580 46.7853 3.398 3.603 0.234 0.213 -0.008 + 243.3520 34.0385 -11.232 15.098 0.219 0.241 0.002 + 240.7262 47.1307 1.893 0.934 0.262 0.312 0.004 + 242.7899 34.2308 -15.135 15.457 0.217 0.370 0.009 + 245.8911 46.9294 1.130 -0.237 0.229 0.215 0.001 + 241.7545 34.0552 -27.181 23.790 0.570 0.403 0.002 + 248.0064 46.5885 1.097 -0.508 0.229 0.265 0.004 + 251.3998 45.7464 0.824 -0.927 0.175 0.200 -0.001 + 245.6732 48.2275 1.300 -0.591 0.240 0.222 -0.008 + 243.3528 33.1992 -26.776 25.129 0.799 0.541 0.001 + 247.4900 45.9378 0.735 -0.418 0.213 0.246 0.003 + 250.5573 47.0542 0.898 -0.665 0.167 0.181 -0.001 + 250.3134 48.5410 1.124 -1.055 0.235 0.243 -0.000 + 248.9550 45.6612 0.929 -0.076 0.178 0.195 0.003 + 246.5276 46.9500 0.424 -0.586 0.352 0.204 -0.004 + 240.6906 37.1699 -9.439 9.033 0.274 0.274 -0.012 + 241.0553 37.6405 -9.843 6.740 0.345 0.722 -0.000 + 249.9516 40.1027 0.236 1.292 0.195 0.197 0.026 + 247.7704 41.0157 -1.257 -0.212 0.592 0.656 0.000 + 235.9135 49.2948 6.174 4.210 0.237 0.280 0.002 + 243.8519 34.5084 -1.950 3.181 0.444 0.339 0.003 + 245.3814 34.7677 -2.482 0.270 0.520 0.731 -0.011 + 235.3751 48.2979 11.270 7.783 0.267 0.266 0.001 + 235.9383 44.5851 7.687 9.365 0.373 0.482 0.008 + 242.4911 39.6856 -3.326 0.899 0.345 0.351 0.001 + 240.8587 34.4987 -26.313 23.456 0.184 0.191 0.002 + 238.2029 47.4951 3.228 3.219 0.363 0.363 0.006 + 242.4304 33.9197 -22.775 24.470 0.216 0.198 0.007 + 248.3702 45.5969 1.181 -0.563 0.253 0.189 -0.008 + 244.0150 35.9695 -2.850 1.377 0.361 0.724 0.001 + 241.6520 33.9797 -25.466 27.154 0.377 0.332 0.001 + 247.1721 43.5972 -1.346 -0.849 0.219 0.211 -0.006 + 249.3223 44.7148 0.344 -2.415 0.420 0.337 -0.002 + 233.3834 49.5924 9.023 6.744 0.225 0.268 -0.032 + 244.8425 35.9698 -2.611 0.147 0.204 0.183 -0.001 + 245.1868 36.0697 -2.549 0.316 0.202 0.188 -0.005 + 244.5044 35.9563 -2.593 1.307 0.210 0.242 0.002 + 237.0245 45.3001 4.561 6.540 0.214 0.181 -0.063 + 243.9323 34.1410 -3.751 4.481 0.422 0.369 -0.013 + 237.5554 43.7383 1.544 5.560 0.201 0.186 0.000 + 236.9019 44.0660 2.698 6.660 0.236 0.195 0.001 + 235.8403 46.9524 13.926 12.301 0.467 0.259 0.006 + 242.6533 33.2407 -27.215 28.682 0.574 0.598 -0.001 + 249.1687 44.4512 -1.234 -1.515 0.547 0.514 -0.001 + 237.1048 47.0448 6.634 5.618 0.306 0.223 -0.013 + 235.9255 44.5145 7.771 9.660 0.394 0.233 0.014 + 244.0819 34.3699 -1.849 2.365 0.437 0.228 -0.004 + 243.6945 34.4277 -3.958 7.120 0.296 0.374 -0.008 + 243.9166 34.3671 -1.774 3.910 0.460 0.238 0.004 + 243.8505 34.4301 -1.792 3.903 0.590 0.196 0.006 + 243.7077 34.5330 -4.756 5.667 0.194 0.286 0.004 + 239.7214 34.7391 -28.461 34.033 0.215 0.230 0.008 + 238.3306 42.2888 -2.941 4.967 0.199 0.207 -0.014 + 243.1849 34.6749 -9.675 10.229 0.469 0.258 0.009 + 240.9413 44.1642 -0.092 1.787 0.191 0.187 -0.003 + 238.4997 39.5546 -9.453 7.103 0.200 0.191 0.020 + 240.8581 34.3274 -27.471 28.375 0.205 0.205 0.000 + 237.5757 37.4994 -24.258 32.389 0.251 0.186 -0.012 + 241.7927 34.1288 -25.458 24.140 0.185 0.185 0.011 + 237.7952 47.4746 4.050 3.302 0.393 0.240 0.001 + 240.6466 34.6834 -26.522 23.906 0.195 0.186 0.005 + 247.1983 31.9494 -1.575 0.735 0.364 0.215 0.066 + 242.8135 39.5211 -3.055 0.900 0.182 0.183 0.007 + 245.9950 32.7225 -1.942 1.318 0.362 0.212 0.033 + 247.8480 34.7844 -1.776 0.345 0.206 0.190 0.008 + 244.7214 39.9102 -2.948 0.179 0.202 0.186 -0.012 + 245.5431 36.1542 -1.809 0.894 0.241 0.289 -0.045 + 245.1803 41.7242 -2.603 -0.007 0.194 0.187 0.008 + 248.8699 36.1428 -0.992 0.488 0.185 0.191 0.017 + 247.7773 38.4799 -1.558 0.233 0.187 0.197 0.010 + 246.2687 34.6673 -1.983 0.780 0.293 0.398 -0.030 + 250.4808 36.1498 -0.698 0.516 0.208 0.193 0.008 + 250.6662 38.0974 -0.610 0.231 0.179 0.189 -0.014 + 242.6700 41.4287 -2.581 0.983 0.184 0.185 0.007 + 248.9014 31.9729 -0.955 0.790 0.244 0.201 -0.006 + 249.9905 34.2638 -1.004 0.558 0.179 0.174 0.008 + 247.6386 40.0781 -2.450 -0.043 0.182 0.202 0.013 + 240.0645 41.2759 -3.964 3.862 0.185 0.193 -0.011 + 242.9354 42.9817 -1.526 0.617 0.189 0.185 -0.002 + 244.6883 43.3002 -1.653 -0.159 0.189 0.190 0.000 + 241.4342 47.0022 1.328 0.758 0.185 0.185 0.002 + 241.2697 48.6747 1.759 0.813 0.188 0.239 0.003 + 241.9862 45.2318 0.537 0.954 0.197 0.187 0.004 + 243.8970 44.8984 0.638 0.281 0.260 0.195 0.014 + 244.1576 47.5622 1.526 -0.264 0.290 0.192 -0.008 + 243.7125 48.7310 1.787 -0.206 0.258 0.192 -0.015 + 249.4872 41.7498 -0.063 0.314 0.271 0.218 -0.012 + 247.3828 45.3829 0.715 -0.596 0.248 0.187 0.018 + 246.6683 47.0296 1.396 -0.557 0.254 0.192 -0.002 + 246.7803 48.4213 1.845 -0.705 0.253 0.188 0.002 + 248.7958 45.6530 1.019 0.168 0.265 0.189 -0.001 + 249.0938 47.3500 1.237 -0.624 0.251 0.189 -0.001 + 248.7516 48.8095 1.478 -0.723 0.234 0.188 -0.000 + 251.4539 45.8066 0.892 -0.332 0.243 0.188 -0.003 + 247.3769 41.7566 -1.758 -0.425 0.196 0.190 -0.005 + 235.9246 40.8763 1.774 17.027 0.248 0.241 -0.002 + 236.2738 38.9283 -24.961 35.961 0.184 0.197 -0.002 + 237.5851 40.9976 -5.818 6.535 0.205 0.206 -0.002 + 235.9860 42.9674 1.794 9.679 0.226 0.225 -0.015 + 238.9093 43.1124 -1.268 4.039 0.190 0.188 0.013 + 239.0538 44.9227 1.304 2.800 0.189 0.187 -0.015 + 236.5123 47.9698 7.375 4.796 0.278 0.347 -0.015 + 239.0669 46.8440 2.791 2.232 0.186 0.192 -0.018 + 243.8302 32.6165 -28.160 27.026 0.653 0.351 0.007 + 238.9970 35.5518 -27.591 36.117 0.282 0.733 0.023 + 242.0152 39.3056 -3.620 1.715 0.191 0.187 0.006 + 242.3951 39.2879 -3.254 1.170 0.183 0.185 0.006 + 242.5988 39.3465 -3.199 1.043 0.187 0.181 0.004 + 243.2591 39.5215 -3.028 0.776 0.182 0.181 0.005 + 243.5755 39.5005 -2.964 0.603 0.185 0.188 0.005 + 243.9504 39.5464 -2.836 0.484 0.182 0.187 0.004 + 244.1112 39.3742 -2.954 0.371 0.182 0.184 0.004 + 244.4874 39.5361 -2.847 0.237 0.183 0.191 0.004 + 244.5682 39.3886 -3.033 0.246 0.190 0.186 0.004 + 242.1202 40.4334 -4.150 1.752 0.182 0.184 0.011 + 245.3083 39.2552 -2.628 0.351 0.207 0.206 -0.007 + 245.7228 39.1194 -2.830 0.163 0.186 0.193 -0.006 + 246.1287 39.0673 -2.808 0.215 0.182 0.185 -0.002 + 246.4948 39.2689 -2.674 0.064 0.181 0.184 0.004 + 242.5324 40.3206 -3.233 1.051 0.182 0.183 0.008 + 246.9460 40.4940 -2.697 -0.154 0.181 0.184 0.005 + 243.2638 40.4955 -2.927 0.382 0.181 0.185 0.002 + 247.7179 40.6488 -1.836 -0.045 0.186 0.192 0.005 + 243.7207 40.3632 -2.920 0.548 0.182 0.185 0.000 + 248.2771 40.7718 -0.509 -0.118 0.215 0.246 0.005 + 248.5850 40.8073 -0.265 0.254 0.209 0.205 0.004 + 240.2001 39.5728 -6.814 5.388 0.207 0.189 0.009 + 242.4685 36.6143 -4.628 4.083 0.193 0.200 0.014 + 242.5932 36.8042 -4.073 3.428 0.188 0.190 0.017 + 242.0059 36.6060 -6.591 6.487 0.205 0.210 0.016 + 242.2958 37.2008 -4.387 3.308 0.188 0.215 0.008 + 240.4631 39.6984 -6.323 4.726 0.185 0.186 0.011 + 240.6944 39.7956 -5.464 3.854 0.240 0.219 0.011 + 241.1261 39.8388 -5.250 3.176 0.198 0.189 0.009 + 241.3156 39.8889 -5.013 2.828 0.186 0.187 0.011 + 241.8407 39.2123 -3.751 2.682 0.186 0.197 -0.002 + 246.7058 41.8568 -2.615 -0.363 0.194 0.191 -0.000 + 248.7640 41.6923 -0.116 0.039 0.206 0.187 -0.011 + 244.4440 39.9249 -3.040 0.257 0.181 0.194 -0.016 + 246.9579 39.3451 -2.587 0.008 0.184 0.194 0.009 + 247.2829 39.1861 -2.305 0.165 0.185 0.190 0.014 + 247.4959 39.3875 -2.447 0.449 0.178 0.189 0.016 + 247.7377 39.4590 -2.562 0.177 0.181 0.185 0.020 + 248.0555 39.5889 -1.745 0.288 0.181 0.185 0.024 + 248.3492 39.5975 -0.897 0.292 0.219 0.183 0.018 + 248.4289 39.7152 -0.901 0.202 0.254 0.195 0.011 + 246.9878 41.8173 -2.499 -0.389 0.211 0.188 -0.003 + 248.5500 39.8169 -0.565 0.230 0.184 0.186 0.026 + 246.7220 40.6713 -2.761 -0.179 0.181 0.184 0.003 + 247.4724 40.6340 -2.392 -0.205 0.183 0.186 0.007 + 247.5720 40.4744 -2.428 -0.119 0.183 0.190 0.006 + 247.9858 40.4340 -2.002 -0.149 0.184 0.189 0.009 + 248.2486 40.4352 -1.914 -0.411 0.260 0.186 0.014 + 248.6501 40.6355 -0.398 0.174 0.184 0.184 0.010 + 248.7423 40.7318 -0.299 0.152 0.179 0.186 0.007 + 247.3017 41.8034 -2.071 -0.489 0.191 0.186 -0.006 + 247.6681 41.6354 -1.354 -0.576 0.199 0.182 -0.005 + 248.0426 41.5576 -0.727 -0.135 0.189 0.288 -0.003 + 248.1011 41.5890 -0.850 -0.282 0.274 0.197 -0.002 + 248.2195 41.5832 -0.145 -0.124 0.296 0.191 -0.002 + 240.4001 39.4992 -6.465 5.206 0.187 0.188 0.010 + 240.9314 39.4861 -5.404 4.098 0.188 0.192 0.024 + 241.5504 39.1339 -4.327 3.466 0.190 0.194 0.004 + 241.0622 39.2680 -5.403 4.261 0.270 0.223 0.022 + 241.6487 39.4547 -4.730 2.912 0.184 0.186 0.008 + 241.9951 38.7288 -3.680 2.598 0.196 0.205 -0.011 + 241.5398 38.7246 -4.510 4.035 0.190 0.207 0.003 + 241.0696 38.9809 -5.681 5.197 0.188 0.200 0.014 + 240.9846 38.7046 -6.263 5.936 0.194 0.252 0.010 + 240.5415 38.7614 -7.311 6.831 0.195 0.198 0.010 + 240.5232 40.7798 -4.419 3.355 0.189 0.185 0.022 + 240.9898 40.2422 -4.896 3.150 0.181 0.192 0.016 + 240.2775 39.9082 -6.343 4.721 0.181 0.184 0.016 + 239.3068 38.8292 -9.579 7.803 0.179 0.190 0.001 + 239.6144 39.0466 -9.313 7.706 0.185 0.185 0.022 + 240.1893 39.1235 -8.254 6.977 0.207 0.199 0.031 + 240.2352 38.7602 -8.840 7.624 0.185 0.193 0.032 + 239.1070 39.4667 -9.266 7.267 0.189 0.188 0.009 + 240.3757 41.3577 -3.918 3.390 0.185 0.186 0.028 + 239.4627 39.3375 -8.951 7.374 0.189 0.193 0.006 + 239.7156 39.9374 -7.395 5.841 0.185 0.195 0.011 + 239.1940 40.4186 -6.269 5.609 0.195 0.229 0.009 + 239.8950 39.6021 -7.662 5.995 0.209 0.192 0.007 + 239.9661 39.2924 -8.656 6.672 0.262 0.191 0.004 + 239.9227 40.2889 -6.049 4.869 0.189 0.191 0.015 + 236.6400 41.8071 -1.749 8.704 0.201 0.223 0.005 + 236.8112 41.2724 -3.519 8.216 0.299 0.203 0.004 + 236.0939 40.0244 -19.731 24.357 0.218 0.209 0.001 + 235.6919 40.2475 -18.813 32.737 0.207 0.198 0.006 + 235.8928 40.4225 -5.275 22.678 0.219 0.279 0.005 + 235.7172 40.5048 -2.558 26.658 0.283 0.255 0.005 + 235.8667 40.5513 -2.420 21.298 0.267 0.200 0.011 + 235.7869 40.6374 0.746 21.705 0.263 0.208 0.011 + 235.7630 40.6911 2.611 21.329 0.268 0.207 -0.000 + 235.9427 40.2196 -14.299 24.748 0.236 0.209 0.014 + 236.3067 40.1193 -14.525 15.869 0.208 0.185 -0.010 + 236.1467 40.2455 -11.426 18.278 0.245 0.201 -0.011 + 236.1372 40.4352 -5.786 16.604 0.219 0.209 -0.005 + 236.1198 40.5437 -3.759 15.865 0.226 0.210 -0.006 + 236.1185 40.6686 -1.404 15.092 0.239 0.266 -0.005 + 236.0323 40.7911 0.580 15.978 0.241 0.194 -0.004 + 236.1367 40.8802 -1.313 12.280 0.382 0.351 -0.001 + 238.2075 36.4855 -27.990 36.034 0.358 0.382 -0.002 + 238.2328 36.2281 -28.870 36.396 0.228 0.337 -0.002 + 238.7097 35.9457 -28.135 35.239 0.192 0.183 0.009 + 238.9491 36.3022 -27.602 34.153 0.238 0.225 0.009 + 238.8651 36.4259 -27.667 34.369 0.243 0.209 0.007 + 237.6429 37.4718 -23.908 31.281 0.213 0.191 -0.009 + 237.5049 37.5282 -24.817 33.624 0.200 0.248 -0.007 + 237.6676 37.5345 -22.321 28.449 0.257 0.212 -0.007 + 236.3144 42.0990 -0.576 9.278 0.208 0.221 -0.002 + 238.5968 36.2928 -27.746 35.090 0.205 0.181 0.006 + 237.6232 37.9145 -18.657 24.645 0.195 0.192 0.004 + 236.8188 38.4950 -21.143 32.490 0.183 0.185 0.007 + 236.9311 38.3137 -22.194 33.707 0.204 0.189 0.010 + 236.2911 39.1172 -23.101 30.823 0.216 0.220 0.001 + 236.2507 39.2613 -22.856 29.556 0.187 0.192 0.003 + 236.4819 39.1502 -20.879 26.362 0.194 0.196 -0.000 + 236.3975 39.3525 -22.840 24.082 0.323 0.258 0.008 + 236.7704 38.6679 -20.016 30.186 0.193 0.194 -0.007 + 236.6516 38.9874 -20.287 27.036 0.203 0.193 -0.000 + 236.7960 39.2420 -16.871 18.108 0.206 0.220 0.002 + 236.3677 42.2754 -0.616 8.730 0.187 0.214 -0.011 + 236.8948 39.3197 -15.227 15.241 0.197 0.197 0.003 + 237.0919 38.1229 -22.701 33.301 0.196 0.192 0.021 + 237.1837 38.1857 -19.518 28.966 0.190 0.196 0.024 + 237.0407 38.6647 -16.873 26.587 0.255 0.229 0.008 + 237.2574 38.2981 -17.242 26.080 0.190 0.192 0.031 + 237.2326 38.4286 -16.141 26.387 0.292 0.260 0.009 + 237.3925 38.2599 -16.575 23.969 0.316 0.223 0.011 + 237.4966 38.2637 -14.324 20.689 0.200 0.204 0.015 + 237.5483 38.2398 -14.699 20.025 0.195 0.199 0.018 + 237.3416 38.5598 -12.648 19.080 0.189 0.186 0.020 + 237.5040 38.4236 -13.746 18.504 0.209 0.203 0.017 + 237.0830 38.8661 -15.565 16.877 0.821 0.244 -0.000 + 237.2895 38.6665 -12.349 19.218 0.193 0.193 0.013 + 237.0369 39.3981 -14.260 13.864 0.229 0.232 0.003 + 237.4242 38.7778 -11.343 15.979 0.199 0.191 0.011 + 237.2814 39.2600 -11.586 7.793 0.190 0.218 0.003 + 237.6961 39.1093 -9.987 7.545 0.188 0.192 0.002 + 237.8733 37.0693 -26.217 33.972 0.192 0.193 -0.003 + 238.2682 36.8161 -27.357 33.051 0.194 0.188 -0.002 + 238.3020 36.8792 -26.691 32.015 0.201 0.196 -0.001 + 238.1373 36.9620 -25.937 32.603 0.197 0.210 -0.005 + 238.0092 37.2017 -21.520 28.424 0.184 0.186 -0.002 + 238.2034 37.0010 -24.255 30.519 0.204 0.214 0.002 + 238.2370 37.0488 -21.872 27.143 0.215 0.237 -0.001 + 238.2738 37.0024 -22.679 28.171 0.227 0.191 -0.002 + 238.3494 37.1045 -19.748 23.301 0.202 0.206 -0.002 + 238.2860 37.2035 -19.720 23.268 0.384 0.250 0.000 + 237.7152 37.3425 -23.684 32.028 0.600 0.310 -0.005 + 237.7857 37.3299 -23.364 30.691 0.192 0.188 -0.011 + 237.9010 37.3370 -21.055 27.946 0.196 0.191 -0.006 + 237.9167 37.5392 -19.660 24.366 0.215 0.198 -0.004 + 237.9002 37.7221 -15.471 18.883 0.204 0.191 -0.001 + 237.7809 37.8639 -14.769 19.323 0.204 0.193 0.002 + 237.9417 37.7139 -15.334 18.117 0.201 0.218 -0.003 + 238.1744 37.3368 -19.085 24.214 0.510 0.281 0.001 + 238.2104 37.5330 -11.947 13.418 0.212 0.228 0.001 + 238.3131 37.6018 -11.191 11.549 0.205 0.206 0.002 + 238.0220 37.7494 -13.947 16.054 0.194 0.188 -0.001 + 238.2136 37.8190 -10.430 9.599 0.216 0.226 0.002 + 238.0946 36.6217 -28.014 35.301 0.259 0.327 -0.002 + 238.4210 36.7240 -27.400 34.684 0.197 0.202 0.000 + 238.5797 36.8004 -17.296 25.871 0.215 0.229 -0.000 + 238.4088 36.8585 -26.409 32.165 0.198 0.190 -0.001 + 238.4585 36.8143 -26.643 34.105 0.203 0.204 0.000 + 238.4455 36.9035 -21.301 25.468 0.199 0.199 -0.000 + 238.6132 36.6370 -27.398 34.388 0.209 0.191 0.003 + 238.5472 36.8491 -17.091 25.469 0.478 0.372 0.000 + 238.4522 36.9625 -19.740 23.100 0.221 0.310 0.001 + 238.4580 37.0078 -19.397 23.049 0.216 0.304 0.000 + 238.4257 37.2130 -12.593 12.694 0.331 0.229 -0.001 + 238.5368 36.9539 -18.867 22.506 0.214 0.339 0.001 + 238.6649 36.9182 -12.070 10.964 0.203 0.191 0.002 + 238.6455 37.0108 -12.450 10.150 0.195 0.200 0.003 + 240.2939 37.7131 -9.628 9.165 0.211 0.217 -0.004 + 238.8116 36.5595 -27.114 34.278 0.415 0.434 0.005 + 238.1313 37.9756 -10.658 10.430 0.197 0.193 0.001 + 238.9356 36.6116 -9.195 10.941 0.505 0.413 0.001 + 238.7316 36.9500 -11.535 10.362 0.210 0.198 0.002 + 238.6521 36.8115 -12.049 13.980 0.193 0.205 0.003 + 238.9423 37.1696 -10.596 8.793 0.194 0.196 0.004 + 238.3470 37.4785 -11.440 11.563 0.187 0.206 0.003 + 238.5308 37.4896 -10.678 9.853 0.210 0.225 0.001 + 238.6751 37.5819 -10.330 9.430 0.197 0.200 0.004 + 238.3952 37.9320 -10.517 8.875 0.203 0.188 -0.003 + 238.5360 37.7553 -10.669 9.038 0.192 0.224 0.002 + 238.7167 37.3854 -10.330 8.898 0.246 0.206 0.001 + 238.8994 37.4330 -9.528 8.723 0.262 0.246 0.000 + 238.9160 37.7112 -10.336 8.208 0.387 0.407 0.004 + 237.7825 38.1530 -11.867 14.970 0.282 0.291 0.003 + 237.9039 38.0251 -12.881 15.580 0.247 0.233 0.000 + 237.5708 38.5777 -11.901 15.521 0.198 0.193 0.020 + 237.8047 38.4442 -10.979 11.302 0.212 0.198 0.014 + 238.0458 38.5302 -10.084 8.568 0.215 0.192 0.005 + 238.1565 38.1840 -10.224 8.950 0.200 0.192 0.000 + 238.1768 38.3803 -9.464 8.780 0.218 0.289 -0.000 + 238.3536 38.4735 -11.128 8.060 0.255 0.204 -0.006 + 237.6454 38.9995 -8.680 8.465 0.208 0.199 0.009 + 237.9448 39.2438 -9.895 7.091 0.189 0.188 0.005 + 238.2854 38.6574 -10.588 7.063 0.259 0.344 -0.005 + 238.0569 39.1455 -9.050 6.533 0.221 0.266 0.007 + 238.6119 38.1158 -10.273 7.915 0.256 0.344 -0.002 + 238.5395 38.2831 -11.105 7.813 0.316 0.403 -0.001 + 238.7854 38.3215 -10.222 7.983 0.190 0.186 -0.022 + 238.9048 38.6453 -9.937 7.889 0.186 0.187 -0.002 + 237.6331 37.1924 -26.868 35.812 0.193 0.186 -0.011 + 238.9392 35.7113 -28.057 34.563 0.384 0.501 0.005 + 238.9380 35.7906 -27.646 34.226 0.208 0.182 0.016 + 239.6524 35.5441 -24.263 30.115 0.182 0.183 -0.002 + 239.6105 35.8411 -18.770 26.753 0.602 0.817 0.002 + 239.6548 35.8378 -15.136 20.019 0.582 0.356 0.013 + 239.7148 35.8067 -14.710 19.493 0.513 0.210 0.008 + 239.0932 35.9333 -26.526 32.648 0.242 0.252 0.006 + 239.0185 36.4172 -11.010 13.679 0.216 0.222 0.012 + 239.1469 36.5159 -9.523 11.078 0.217 0.255 0.006 + 239.3022 36.0248 -26.566 33.000 0.218 0.208 0.016 + 239.1211 36.1402 -27.531 33.441 0.205 0.190 0.020 + 239.2512 36.1068 -27.285 33.134 0.254 0.186 0.031 + 239.2717 36.1789 -8.833 11.629 0.214 0.241 0.032 + 239.3552 35.9228 -24.889 32.902 0.198 0.209 0.015 + 239.5247 36.0075 -9.775 16.645 0.332 0.501 0.002 + 239.4570 36.0894 -9.256 14.045 0.244 0.244 0.018 + 239.5601 36.1232 -8.792 13.644 0.182 0.212 0.018 + 239.1576 35.6971 -26.476 33.726 0.235 0.300 0.009 + 239.6364 36.0517 -8.891 14.845 0.192 0.194 0.010 + 239.4482 35.9741 -23.746 31.438 0.895 0.783 0.003 + 239.7059 36.0158 -9.176 14.536 0.198 0.205 0.009 + 239.2898 36.2568 -9.080 12.024 0.837 0.618 0.004 + 239.7230 36.3044 -6.105 13.025 0.939 0.677 0.001 + 239.2569 36.8063 -9.164 9.548 0.191 0.206 0.009 + 239.3814 36.6347 -6.056 10.953 0.722 0.372 0.006 + 239.2947 37.0544 -9.973 9.927 0.186 0.227 0.009 + 239.6434 36.7390 -10.418 9.117 0.222 0.400 0.008 + 239.8032 37.3522 -9.849 8.968 0.192 0.208 -0.012 + 239.3555 37.7952 -10.224 8.589 0.206 0.194 -0.004 + 239.9421 36.9473 -12.558 10.813 0.201 0.197 -0.036 + 240.1598 37.9011 -9.682 8.811 0.200 0.192 -0.002 + 239.0488 38.0900 -10.590 8.375 0.222 0.186 -0.006 + 239.6657 38.7356 -9.481 7.887 0.191 0.191 0.031 + 241.4802 37.1776 -7.584 8.614 0.223 0.350 -0.001 + 236.3016 39.5292 -22.444 24.973 0.193 0.205 0.001 + 236.4355 39.5543 -21.734 22.504 0.191 0.214 0.004 + 236.4182 39.6857 -22.230 19.909 0.198 0.197 0.013 + 236.2831 39.8636 -21.323 20.803 0.208 0.194 0.008 + 235.9139 41.5591 -0.003 10.553 0.265 0.286 0.002 + 236.4482 39.9057 -17.517 14.498 0.270 0.227 -0.008 + 236.6281 39.4524 -17.770 15.165 0.203 0.203 0.006 + 236.7049 39.7071 -17.563 9.661 0.224 0.299 0.003 + 236.8132 39.4928 -16.992 14.403 0.207 0.215 0.006 + 236.6051 39.8972 -14.681 16.252 0.225 0.255 -0.008 + 236.8175 39.9621 -10.857 8.100 0.229 0.223 -0.010 + 236.3443 40.2568 -10.782 14.410 0.267 0.202 -0.007 + 236.1174 41.1517 -0.333 10.827 0.232 0.208 0.001 + 236.3011 40.5753 -5.771 9.835 0.261 0.210 -0.003 + 236.4269 40.4788 -7.669 9.577 0.386 0.268 0.000 + 236.5480 40.0822 -13.876 12.934 0.223 0.215 -0.007 + 236.8644 40.3241 -8.803 7.956 0.253 0.198 -0.006 + 236.6759 40.7329 -5.750 8.470 0.242 0.209 -0.003 + 236.8255 40.5466 -7.456 7.804 0.244 0.204 -0.004 + 237.0242 39.6214 -11.415 8.334 0.211 0.203 -0.010 + 237.2641 39.4936 -10.531 7.753 0.223 0.192 -0.009 + 237.1264 39.7262 -10.456 7.856 0.216 0.214 -0.005 + 237.5695 39.5281 -9.647 7.136 0.212 0.187 -0.001 + 237.1312 40.2962 -8.930 7.324 0.334 0.331 -0.001 + 237.0770 40.7476 -6.655 7.518 0.232 0.193 -0.001 + 237.3317 40.0341 -9.267 7.327 0.206 0.204 -0.004 + 237.3931 40.6507 -7.235 7.094 0.214 0.207 -0.003 + 236.6658 40.8871 -4.786 8.572 0.257 0.212 -0.002 + 237.9720 39.9291 -9.499 7.035 0.195 0.187 0.008 + 237.7292 40.2712 -8.799 6.925 0.204 0.203 0.001 + 239.1325 39.7947 -9.009 7.051 0.238 0.233 0.020 + 239.0515 41.1833 -5.020 4.927 0.191 0.192 -0.003 + 238.1720 40.9055 -6.508 5.723 0.192 0.190 0.001 + 237.6806 40.7311 -6.972 6.490 0.192 0.234 0.000 + 245.1372 43.5328 -1.452 -0.521 0.255 0.195 -0.001 + 245.2808 43.8744 -1.156 -0.429 0.261 0.193 0.000 + 245.9039 43.8491 -1.350 -0.735 0.256 0.186 -0.009 + 246.0212 44.0545 -1.173 -0.641 0.273 0.195 -0.008 + 246.0211 44.1085 -0.940 -0.487 0.272 0.192 -0.007 + 246.2779 44.2179 -0.583 -0.224 0.196 0.190 -0.001 + 249.5109 43.8166 -0.557 -0.820 0.277 0.201 0.010 + 246.4181 44.2271 -0.430 -0.334 0.261 0.191 -0.001 + 248.4705 43.4825 -1.395 -1.693 0.288 0.191 0.006 + 248.5493 44.3179 -1.342 -2.362 0.270 0.207 -0.001 + 248.5603 44.5603 -1.319 -2.669 0.426 0.293 -0.001 + 235.7742 42.2091 1.644 10.650 0.287 0.291 -0.002 + 235.9460 42.8601 1.929 9.801 0.215 0.262 -0.016 + 235.5907 43.0903 5.725 12.282 0.237 0.259 -0.014 + 235.7465 43.3955 4.764 10.375 0.208 0.217 -0.012 + 236.0204 43.6143 4.083 9.370 0.346 0.265 -0.002 + 236.6166 42.5035 -0.978 8.279 0.196 0.209 -0.019 + 236.5705 43.1401 0.712 7.903 0.206 0.205 -0.015 + 237.3436 42.1910 -1.823 6.869 0.193 0.198 0.004 + 236.9421 43.3633 1.002 6.953 0.198 0.201 -0.008 + 242.7483 45.4281 0.815 0.500 0.187 0.196 0.006 + 236.6667 43.6225 2.003 7.336 0.198 0.208 -0.004 + 236.4094 44.3819 4.202 7.686 0.222 0.204 0.005 + 236.5730 44.6893 5.127 7.539 0.199 0.266 0.009 + 236.8977 44.9412 4.351 6.994 0.192 0.194 0.015 + 237.1129 44.0521 2.636 5.931 0.197 0.194 0.001 + 237.0691 44.5350 3.661 6.169 0.191 0.196 0.007 + 237.4230 44.4965 3.040 5.521 0.196 0.192 0.004 + 238.2203 42.2597 -2.295 5.070 0.194 0.200 -0.015 + 240.0482 43.0018 -0.992 2.852 0.208 0.199 0.024 + 238.2304 43.1771 -0.660 4.685 0.193 0.207 0.005 + 237.7828 44.3422 2.165 4.850 0.187 0.190 0.001 + 237.5172 44.8411 3.434 5.585 0.228 0.226 0.003 + 238.0542 44.4348 2.005 4.328 0.198 0.193 0.001 + 241.0322 44.4028 -0.082 1.523 0.187 0.186 -0.003 + 238.4255 44.2968 1.721 3.664 0.257 0.190 -0.001 + 239.6224 42.4688 -2.427 3.593 0.187 0.190 0.037 + 239.3966 43.8120 -0.147 3.019 0.188 0.235 0.005 + 241.0715 43.0340 -1.534 1.837 0.188 0.191 0.025 + 241.5875 42.2546 -2.194 1.676 0.186 0.189 0.017 + 240.9990 43.4468 -1.232 1.397 0.258 0.256 -0.003 + 242.1080 43.2345 -1.166 0.880 0.235 0.188 0.004 + 242.2004 44.8349 0.403 0.807 0.189 0.187 0.004 + 236.1425 45.0223 7.111 8.906 0.226 0.222 0.014 + 236.1771 45.3095 7.555 9.244 0.232 0.199 0.023 + 236.2008 46.4216 8.287 8.094 0.236 0.212 -0.006 + 236.0839 46.9258 10.650 8.622 0.189 0.197 0.005 + 236.3870 47.4339 8.921 6.223 0.238 0.225 -0.032 + 236.1875 47.5133 9.975 6.512 0.298 0.258 -0.035 + 235.4429 47.9372 15.753 9.737 0.217 0.217 0.009 + 235.6941 47.7662 14.271 9.530 0.191 0.226 0.014 + 235.8591 48.0623 10.337 7.863 0.283 0.261 0.009 + 236.6097 45.1585 5.372 7.577 0.189 0.208 0.021 + 236.3562 45.6293 6.955 8.084 0.245 0.193 0.018 + 236.8477 45.1904 4.913 6.979 0.228 0.236 0.016 + 236.0690 45.9547 11.931 8.478 0.201 0.202 -0.008 + 236.6234 46.2005 6.246 6.952 0.191 0.198 -0.008 + 236.7605 45.8513 5.845 6.968 0.187 0.206 -0.023 + 236.9214 46.1111 5.527 6.636 0.259 0.236 -0.004 + 236.8426 45.5380 5.342 6.746 0.196 0.209 -0.033 + 237.4109 45.2211 4.038 5.715 0.204 0.196 -0.018 + 239.8504 48.4265 2.444 1.119 0.203 0.193 -0.006 + 237.3072 45.8349 4.992 5.684 0.240 0.191 -0.009 + 236.2701 46.6560 8.191 7.757 0.315 0.256 0.000 + 238.4031 47.0399 3.392 3.333 0.202 0.211 -0.010 + 236.7021 46.5747 5.989 6.475 0.189 0.187 0.011 + 236.5922 47.2366 7.378 6.120 0.196 0.206 -0.043 + 236.6335 47.4093 7.593 5.634 0.225 0.220 -0.031 + 237.1337 46.5886 4.885 5.492 0.250 0.206 0.009 + 237.5708 46.5319 4.479 5.022 0.214 0.198 0.004 + 243.0203 46.7979 1.489 0.151 0.267 0.192 -0.001 + 237.0588 47.2879 5.743 5.094 0.234 0.233 -0.020 + 237.1253 47.8232 6.186 3.910 0.231 0.227 -0.006 + 237.1546 46.4527 4.816 5.572 0.267 0.189 0.005 + 237.4854 47.8027 5.230 3.523 0.219 0.193 -0.001 + 237.6594 45.4302 3.696 5.201 0.200 0.199 -0.011 + 238.1227 45.6761 2.790 4.546 0.267 0.212 0.006 + 236.5638 47.0038 7.045 6.389 0.199 0.191 -0.028 + 238.0116 46.5721 3.983 4.262 0.215 0.209 0.000 + 238.3168 46.6229 3.236 3.417 0.190 0.189 -0.006 + 240.1280 44.5325 0.283 2.034 0.190 0.204 -0.010 + 238.9244 47.7402 3.087 1.980 0.197 0.199 0.022 + 236.4967 48.0596 7.540 4.970 0.254 0.256 -0.008 + 236.8656 48.0453 6.162 4.366 0.219 0.197 -0.010 + 237.5408 48.0018 5.110 3.310 0.219 0.210 -0.002 + 237.3297 48.4191 5.117 3.171 0.225 0.196 0.001 + 237.0907 48.7082 5.293 3.373 0.232 0.198 0.010 + 237.5067 48.8562 4.554 2.744 0.206 0.226 0.003 + 237.8604 48.9160 3.885 1.984 0.196 0.212 -0.002 + 238.3844 48.2605 3.223 1.982 0.311 0.276 0.004 + 238.7144 48.5096 3.193 1.931 0.204 0.257 -0.006 + 238.9324 48.7302 3.083 1.830 0.210 0.221 -0.025 + 239.3278 45.5901 1.648 2.593 0.197 0.192 0.044 + 237.1072 46.1157 5.132 6.033 0.233 0.193 -0.006 + 240.3099 45.4528 0.939 1.434 0.189 0.189 -0.036 + 239.9948 45.9106 1.746 1.524 0.187 0.193 -0.002 + 240.3690 46.2598 1.570 1.536 0.185 0.194 0.000 + 240.4558 45.9533 1.350 1.738 0.185 0.189 -0.001 + 240.9586 46.7928 1.564 1.059 0.185 0.187 0.002 + 240.5127 47.4035 1.784 0.984 0.182 0.186 0.008 + 241.2546 47.7592 1.612 0.498 0.204 0.209 0.003 + 241.0074 47.9538 1.828 0.717 0.188 0.192 0.005 + 247.2715 44.4856 -0.247 -0.864 0.263 0.194 0.004 + 248.7749 44.8635 1.416 0.937 0.288 0.192 -0.009 + 248.7274 45.0412 0.827 0.741 0.306 0.232 -0.004 + 248.6985 44.7657 0.191 -1.375 0.272 0.192 -0.006 + 249.2542 43.7483 -0.530 -1.576 0.268 0.212 0.008 + 248.9714 45.1400 1.085 0.624 0.225 0.188 -0.017 + 249.2413 45.3543 1.167 0.203 0.241 0.186 -0.018 + 243.3713 36.0713 -3.186 2.264 0.336 0.458 0.006 + 242.8353 36.0225 -4.803 5.080 0.372 0.505 0.005 + 242.5900 36.1590 -5.673 5.672 0.327 0.445 0.009 + 241.8676 36.4667 -8.056 9.163 0.477 0.424 0.001 + 242.2105 36.5312 -5.993 5.447 0.193 0.210 0.010 + 241.9094 36.5702 -7.332 8.156 0.194 0.201 0.013 + 241.8816 36.9757 -6.174 6.065 0.199 0.206 0.001 + 242.0642 37.2314 -5.072 4.175 0.192 0.215 0.004 + 242.6061 34.4624 -12.941 15.220 0.220 0.299 0.044 + 242.4591 33.5621 -25.617 27.423 0.440 0.316 -0.061 + 242.8953 32.8892 -27.693 27.976 0.341 0.342 -0.018 + 243.0505 32.7338 -28.119 28.125 0.442 0.330 -0.012 + 242.7513 33.3552 -26.157 26.917 0.257 0.244 -0.051 + 242.7561 32.6664 -29.121 29.526 0.554 0.486 -0.016 + 242.8103 33.4397 -25.388 26.212 0.252 0.323 -0.031 + 242.8866 33.5028 -24.575 26.137 0.498 0.240 -0.030 + 242.9284 33.2357 -26.549 26.646 0.291 0.369 -0.032 + 243.2171 33.4933 -22.842 23.433 0.343 0.242 -0.016 + 243.6515 32.9760 -26.397 25.274 0.335 0.340 0.002 + 243.9892 32.8222 -24.798 24.734 0.493 0.536 0.015 + 243.3286 33.2402 -25.331 24.845 0.299 0.359 -0.001 + 243.4307 33.0592 -26.686 25.936 0.339 0.285 -0.002 + 243.3792 33.3756 -23.455 22.917 0.302 0.397 -0.001 + 243.5910 33.2102 -24.806 23.125 0.406 0.560 0.000 + 243.6777 33.2602 -22.812 21.717 0.366 0.416 0.000 + 243.8169 33.2135 -21.429 20.318 0.526 0.545 0.002 + 243.9212 33.2010 -19.609 18.035 0.481 0.521 0.003 + 243.8884 33.2962 -17.163 16.101 0.536 0.653 -0.001 + 243.5741 33.5235 -17.129 17.798 0.428 0.430 0.005 + 243.7732 33.5747 -14.771 14.376 0.411 0.502 0.018 + 244.0305 32.8871 -23.881 24.156 0.552 0.690 0.013 + 244.1751 32.9547 -20.872 21.872 0.532 0.765 0.012 + 244.2679 32.7597 -21.754 22.336 1.106 1.581 0.001 + 244.3716 33.0450 -10.687 15.410 0.760 0.714 0.006 + 244.4230 32.8347 -15.541 18.830 0.488 1.708 0.011 + 244.4304 32.8984 -12.950 17.562 0.466 1.314 0.004 + 244.5121 32.9796 -5.940 5.526 0.524 0.935 0.004 + 244.7001 32.6900 -5.613 5.920 0.828 1.365 0.009 + 244.6021 32.8758 -2.585 4.778 0.394 1.044 0.007 + 244.5781 32.9825 -3.795 2.614 0.456 0.880 0.012 + 244.2798 32.9489 -16.736 18.708 0.525 0.930 0.003 + 244.2342 33.5164 -7.914 4.725 0.424 0.404 -0.010 + 244.3130 33.4239 -5.428 3.251 0.606 0.462 -0.006 + 244.4898 33.0814 -5.045 2.544 0.606 0.807 0.001 + 244.5713 33.2478 -4.038 1.714 0.428 0.568 0.002 + 244.7061 32.8907 -2.143 2.775 0.860 0.716 0.010 + 244.6567 33.1436 -3.083 1.543 0.492 0.645 0.007 + 244.7039 33.8869 -3.466 1.340 0.305 0.429 -0.031 + 240.3056 37.5626 -9.335 9.179 0.217 0.194 -0.004 + 239.3498 34.9073 -29.697 35.249 0.196 0.227 0.019 + 239.5902 35.0107 -28.585 33.311 0.317 0.271 0.011 + 239.7601 34.8706 -29.371 31.912 0.227 0.231 0.032 + 239.6166 35.1062 -27.579 32.946 0.248 0.205 0.027 + 241.8224 34.3764 -22.395 22.024 0.418 0.576 0.008 + 239.9247 35.0200 -27.259 30.098 0.254 0.294 0.018 + 240.2076 34.5078 -29.586 30.116 0.229 0.199 0.005 + 240.3836 34.6305 -29.128 27.547 0.267 0.231 0.002 + 240.1846 34.8886 -27.202 28.300 0.214 0.192 0.005 + 240.4639 35.0866 -19.044 19.467 0.210 0.184 0.089 + 239.1397 35.3044 -28.261 35.530 0.193 0.208 0.024 + 239.4091 35.1661 -28.289 34.483 0.322 0.269 0.013 + 239.1918 35.4258 -27.627 35.235 0.203 0.205 0.020 + 239.1303 35.6360 -26.383 33.193 0.440 0.553 0.000 + 239.3952 35.7541 -25.790 31.517 0.325 0.205 0.002 + 239.4546 35.3278 -26.656 33.412 0.181 0.188 -0.019 + 239.6462 35.4405 -25.225 30.819 0.189 0.208 -0.006 + 239.5196 35.6248 -24.723 32.175 0.184 0.297 0.001 + 239.4634 35.7927 -24.527 31.718 0.213 0.191 0.008 + 239.7330 35.6338 -21.710 26.606 0.184 0.266 0.002 + 239.6290 35.7479 -21.932 28.571 0.180 0.274 0.002 + 237.7624 37.0612 -26.975 35.174 0.188 0.187 -0.011 + 239.8986 35.2351 -25.281 28.948 0.180 0.181 -0.000 + 239.9750 35.2798 -23.894 27.322 0.180 0.176 0.005 + 240.0647 35.3168 -21.673 24.764 0.184 0.176 0.010 + 239.8875 35.5342 -20.980 24.055 0.180 0.190 0.001 + 239.8179 35.7027 -16.079 20.123 0.256 0.189 0.003 + 239.8694 35.8013 -12.141 15.957 0.200 0.205 0.004 + 239.9993 35.6867 -12.907 16.024 0.186 0.181 0.002 + 239.7074 35.6889 -21.331 26.774 0.190 0.218 0.003 + 240.2868 35.3190 -16.037 18.512 0.194 0.204 0.019 + 240.2620 35.7313 -10.290 12.307 0.263 0.242 0.000 + 240.4642 35.4998 -11.421 12.664 0.276 0.199 0.004 + 239.8451 35.9279 -9.817 14.900 0.196 0.180 0.006 + 240.0906 35.9347 -9.669 13.398 0.236 0.216 -0.001 + 240.4960 34.4668 -28.821 27.464 0.230 0.258 0.002 + 240.6737 34.5996 -27.439 24.137 0.186 0.196 0.004 + 240.8854 34.6601 -24.816 22.056 0.192 0.195 0.002 + 240.8454 34.8562 -20.660 20.303 0.200 0.207 0.001 + 239.7550 35.6867 -20.329 25.483 0.185 0.208 0.002 + 241.1210 34.8351 -18.172 18.226 0.289 0.280 -0.013 + 241.1520 34.7923 -20.391 18.393 0.321 0.372 -0.008 + 241.3306 34.6950 -19.908 21.369 0.599 0.735 -0.007 + 241.4545 34.7711 -16.165 19.299 0.651 0.951 -0.002 + 241.3444 34.9444 -13.610 15.126 0.461 0.266 -0.002 + 241.3884 35.1386 -12.212 13.176 0.185 0.208 0.007 + 241.3824 34.8389 -14.721 16.837 0.648 0.575 -0.005 + 241.4591 34.8218 -14.284 17.198 0.223 0.458 -0.007 + 241.6010 34.6185 -18.739 20.351 0.361 0.306 0.004 + 241.8112 34.9822 -10.163 14.638 0.326 0.361 -0.002 + 240.5788 35.4187 -10.744 12.264 0.376 0.321 0.002 + 240.6506 35.6229 -9.552 14.236 0.393 0.346 0.000 + 240.7633 35.7439 -12.845 11.257 0.328 0.301 -0.001 + 240.7707 36.3245 -11.124 9.295 0.216 0.180 -0.013 + 241.2464 35.4209 -11.363 11.037 0.210 0.178 0.023 + 241.8735 35.2543 -9.584 12.342 0.696 0.361 -0.001 + 241.8762 35.3780 -9.830 11.778 0.380 0.386 -0.004 + 241.7400 35.6673 -9.325 10.597 0.184 0.225 0.002 + 241.2333 36.2314 -9.073 10.038 0.194 0.186 0.005 + 241.0454 36.5855 -8.925 9.912 0.185 0.188 -0.008 + 241.7395 36.0931 -8.829 10.190 0.411 0.628 0.003 + 242.3661 34.2868 -19.605 19.963 0.788 0.841 -0.018 + 242.4578 34.2155 -21.200 20.684 0.534 0.851 -0.006 + 239.0300 35.6697 -27.509 34.444 0.499 0.889 0.001 + 242.6811 34.3046 -14.365 15.583 0.336 0.314 0.018 + 239.7610 35.6943 -18.639 23.490 0.187 0.204 0.002 + 241.9942 35.0388 -9.138 14.268 0.300 0.344 0.001 + 242.8078 35.6209 -6.281 7.590 0.395 0.439 0.001 + 242.2710 34.5097 -14.594 16.972 0.292 0.323 0.035 + 242.4511 34.6343 -11.754 15.289 0.375 0.617 0.007 + 242.4566 34.9870 -8.351 13.097 0.233 0.492 0.007 + 243.0484 33.8926 -16.470 19.236 0.213 0.330 -0.009 + 243.4543 34.0193 -10.910 13.959 0.474 0.368 0.000 + 242.7195 34.5348 -11.554 14.134 0.368 0.352 0.032 + 241.9687 34.3322 -22.803 21.743 0.480 0.477 -0.005 + 242.7324 34.7854 -9.240 12.466 0.280 0.337 0.020 + 242.8898 34.6207 -9.946 12.336 0.299 0.361 0.018 + 242.6353 35.1168 -7.356 11.799 0.344 0.768 -0.005 + 241.9835 35.1525 -8.632 13.595 0.264 0.297 -0.001 + 242.6968 35.2386 -6.489 10.763 0.445 0.479 -0.016 + 242.7949 35.3879 -5.534 9.436 0.458 0.460 -0.036 + 242.6099 35.8967 -5.980 7.028 0.337 0.347 0.002 + 242.5972 35.6976 -6.586 8.273 0.416 0.368 -0.001 + 243.1105 35.9982 -4.243 3.906 0.298 0.449 0.004 + 243.1116 35.7106 -4.687 5.229 0.284 0.437 0.002 + 243.2897 34.1925 -10.444 14.309 0.469 0.464 0.000 + 243.4625 34.2172 -8.223 12.106 0.426 0.557 -0.002 + 243.7881 33.8658 -9.160 9.765 0.369 0.355 0.013 + 243.9198 33.9593 -6.533 6.567 0.560 0.389 0.007 + 239.7721 35.7292 -15.665 20.342 0.239 0.203 0.003 + 243.9705 34.7169 -3.739 2.644 0.567 0.782 0.018 + 243.3286 34.9368 -6.238 6.436 0.394 0.795 0.004 + 242.0633 34.3411 -21.703 21.229 0.433 0.492 -0.016 + 243.1204 34.4621 -10.232 12.185 0.350 0.305 0.013 + 244.1794 33.7410 -5.971 4.279 0.454 0.411 -0.023 + 244.3134 33.9941 -4.260 2.761 0.537 0.598 -0.039 + 243.1072 34.0627 -12.790 16.407 0.436 0.435 -0.002 + 244.2363 34.4257 -2.970 2.068 0.526 0.429 -0.007 + 244.3502 35.2048 -3.041 1.266 0.408 0.406 0.022 + 242.6845 34.1874 -17.507 17.649 0.312 0.345 0.006 + 242.9500 34.1962 -12.550 16.279 0.556 0.732 0.001 + 244.7497 34.7318 -2.813 0.923 0.363 0.582 -0.021 + 243.2371 35.2046 -5.391 6.658 0.251 0.539 0.002 + 242.1067 35.4246 -8.765 11.420 0.483 0.513 -0.014 + 243.4284 35.3206 -4.239 3.991 0.310 0.533 0.005 + 243.8961 35.1419 -3.661 1.954 0.388 0.435 0.010 + 243.8782 35.5259 -3.074 1.453 0.229 0.277 0.010 + 243.8551 35.7854 -3.147 2.009 0.376 0.452 0.004 + 244.4561 35.4728 -2.558 1.329 0.279 0.367 0.007 + 244.6341 35.1630 -2.599 1.179 0.359 0.412 0.018 + 245.4006 34.1889 -2.452 1.061 0.335 0.317 -0.007 + 245.0349 34.8444 -2.614 1.225 0.362 0.425 -0.029 + 244.7617 35.2911 -2.573 1.104 0.354 0.387 0.014 + 241.6215 37.9731 -4.160 5.542 0.190 0.205 -0.001 + 240.7507 37.9342 -9.773 9.984 0.448 0.821 -0.000 + 240.8206 37.3759 -9.526 8.852 0.217 0.208 -0.005 + 240.9996 37.6130 -10.682 7.426 0.263 0.435 -0.001 + 241.0841 37.6053 -7.807 4.441 0.236 0.652 -0.001 + 240.9139 37.7857 -9.964 10.506 0.378 0.234 -0.001 + 240.9670 37.9135 -9.169 11.189 0.351 0.282 0.000 + 240.9742 37.6966 -10.393 10.018 0.503 0.239 0.000 + 240.8620 37.8393 -10.245 10.410 0.414 0.209 0.000 + 240.8533 37.9628 -9.729 9.602 0.369 0.222 0.000 + 240.9163 37.9141 -9.422 10.519 0.443 0.383 0.000 + 241.0565 37.7343 -9.996 13.591 0.321 0.449 -0.000 + 241.1313 37.6546 -3.773 6.490 0.383 0.356 -0.000 + 241.0396 37.8917 -7.831 11.033 0.209 0.360 0.000 + 241.1481 37.8782 -5.730 11.453 0.319 0.316 0.000 + 241.1833 37.5914 -6.180 5.724 0.369 0.587 0.000 + 241.3018 37.5616 -5.233 6.908 0.227 0.401 -0.001 + 241.3156 37.4954 -6.265 6.530 0.305 0.376 -0.000 + 241.4065 37.5413 -5.730 6.880 0.199 0.276 -0.001 + 241.1800 37.6770 -2.443 8.134 0.474 0.228 -0.000 + 241.2323 37.7544 -3.597 9.997 0.374 0.330 0.001 + 240.9808 37.8000 -9.781 10.290 0.445 0.738 -0.006 + 241.2638 37.9035 -4.687 9.433 0.244 0.292 0.000 + 241.4451 37.8913 -4.135 7.174 0.220 0.215 -0.000 + 241.6130 37.5631 -5.174 5.865 0.195 0.209 -0.001 + 241.7616 37.5892 -4.741 4.750 0.256 0.351 0.000 + 241.5283 37.7375 -4.469 6.419 0.216 0.206 -0.001 + 240.8498 38.0579 -9.273 9.171 0.242 0.205 0.001 + 237.7937 41.2945 -4.830 6.029 0.203 0.210 0.000 + 237.7061 41.3812 -4.056 6.260 0.202 0.191 -0.001 + 237.8091 41.4792 -4.067 5.863 0.192 0.206 -0.002 + 237.9073 41.4537 -4.372 5.510 0.293 0.307 0.001 + 237.9323 41.4096 -4.293 5.706 0.380 0.241 0.006 + 237.6873 41.4636 -3.959 6.073 0.195 0.189 -0.001 + 237.8471 41.5319 -4.060 5.915 0.215 0.202 -0.000 + 238.5042 40.4732 -6.221 7.653 0.372 0.389 0.011 + 238.4855 40.4653 -5.622 9.061 0.248 0.448 0.002 + 238.5326 40.4658 -9.643 9.196 0.367 1.216 0.001 + 238.3962 40.4921 -6.051 6.284 0.233 0.221 0.014 + 238.4228 40.5399 -6.016 5.009 0.203 0.203 0.003 + 238.5718 40.4091 -9.607 10.033 0.260 0.284 0.015 + 238.4931 41.7116 -3.919 4.656 0.187 0.196 -0.011 + 238.3870 41.5858 -2.800 5.718 0.231 0.210 -0.006 + 238.5100 41.6163 -5.325 4.581 0.186 0.192 -0.010 + 247.2812 42.2122 -1.870 -0.664 0.295 0.187 -0.007 + 248.6620 44.6542 -0.909 -2.407 0.303 0.328 -0.001 + 246.1317 42.8789 -2.101 -0.612 0.190 0.185 0.005 + 247.1954 43.4490 -1.452 -0.988 0.253 0.189 -0.018 + 246.6935 44.0398 -0.700 -0.568 0.277 0.191 -0.004 + 248.9012 44.5984 -0.813 -2.568 0.245 0.197 -0.004 + 247.3635 44.3998 -0.508 -1.075 0.261 0.199 0.002 + 249.0925 42.5033 0.338 -0.110 0.327 0.184 0.017 + 248.2655 42.8267 -1.094 -1.337 0.205 0.193 0.003 + 248.5495 43.9191 -1.224 -1.808 0.246 0.191 0.003 + 248.1698 44.0679 -1.150 -1.785 0.267 0.191 -0.000 + 248.8450 44.2521 -1.715 -2.001 0.317 0.198 -0.001 + 237.6454 46.1096 4.284 4.859 0.311 0.322 -0.007 + 237.8358 46.0301 4.005 3.715 0.237 0.215 -0.000 + 237.6394 46.1896 3.681 5.050 0.249 0.196 -0.000 + 237.8101 46.1800 4.105 5.470 0.401 0.451 -0.001 + 237.7730 46.2315 3.648 5.352 0.270 0.316 0.001 + 237.8158 46.2245 5.202 4.521 0.323 0.383 -0.000 + 237.7977 46.2103 5.966 3.834 0.410 0.388 0.000 + 237.8181 46.2997 3.993 5.011 0.607 1.282 0.001 + 237.8357 46.1990 4.777 4.346 0.704 0.417 -0.000 + 237.8483 46.1969 4.523 4.530 0.334 0.286 -0.001 + 237.8393 46.1735 4.613 3.957 0.328 0.333 -0.001 + 237.7826 46.1781 3.845 4.411 0.283 0.280 0.000 + 237.8667 46.1946 4.766 4.555 0.355 0.268 0.000 + 237.6544 46.3003 3.955 5.292 0.302 0.264 0.000 + 237.8038 46.1453 4.286 3.194 0.317 0.519 -0.000 + 237.6894 46.1730 3.641 4.908 0.302 0.262 -0.002 + 247.4759 45.0435 0.479 -0.556 0.231 0.186 0.011 + 248.1628 44.7188 -0.500 -1.315 0.190 0.191 -0.001 + 249.7140 44.3918 0.576 -0.157 0.279 0.190 -0.006 + 249.2679 44.0958 -0.489 -1.348 0.304 0.217 0.003 + 249.1389 44.6356 0.099 -1.057 0.842 0.402 -0.000 + 248.9276 44.9575 0.947 0.849 0.252 0.250 -0.009 + 249.2556 44.8958 1.233 0.901 0.364 0.235 -0.011 + 250.3102 43.5008 0.396 -0.155 0.300 0.194 0.031 + 249.4885 44.7183 -0.148 -0.736 0.561 0.284 -0.001 + 250.1027 44.4854 0.570 -0.270 0.329 0.199 -0.012 + 250.6237 44.7531 0.687 -0.162 0.263 0.194 -0.001 + 248.2110 45.2178 0.550 -0.228 0.247 0.191 -0.003 + 249.6937 44.9431 0.873 0.180 0.233 0.202 -0.020 + 249.9980 45.0029 1.078 -0.026 0.244 0.192 -0.000 + 250.4290 45.4572 1.102 -0.238 0.339 0.314 -0.002 + 241.2752 37.3804 -6.806 7.591 0.606 0.492 0.001 + 241.4389 37.4395 -6.575 7.083 0.202 0.272 -0.001 + 240.2544 37.0889 -9.495 9.724 0.191 0.191 -0.017 + 241.8533 37.2805 -5.720 5.071 0.192 0.209 0.001 + 241.5332 37.2736 -7.516 7.508 0.190 0.226 -0.001 + 240.9039 34.2631 -28.753 28.750 0.587 0.290 0.000 + 239.1718 41.3592 -4.532 4.706 0.188 0.195 -0.008 + 239.5272 41.3325 -4.339 4.409 0.191 0.193 -0.009 + 236.1086 43.3925 2.664 8.980 0.278 0.312 -0.005 + 235.5867 42.4420 3.930 12.202 0.203 0.220 -0.003 + 235.7067 42.0766 1.696 11.156 0.241 0.239 -0.001 + 236.7690 42.6916 -0.630 7.552 0.229 0.203 -0.005 + 238.1199 42.5798 -1.708 5.455 0.188 0.220 -0.005 + 237.3904 42.7271 -0.857 6.312 0.198 0.193 0.003 + 240.3413 42.5461 -2.221 2.755 0.186 0.190 0.033 + 242.2746 42.0202 -2.438 1.190 0.202 0.194 0.006 + 243.4040 33.5982 -18.118 18.959 0.367 0.502 -0.003 + 243.4690 33.5575 -17.951 18.781 0.522 0.606 0.005 + 243.3974 33.4955 -20.977 21.257 0.362 0.446 0.000 + 244.4916 32.8294 -11.246 20.273 0.681 1.339 0.010 + 238.9284 37.6990 -10.570 8.437 0.234 0.213 0.004 + 239.7838 35.6938 -17.587 22.414 0.276 0.195 0.002 + 237.5795 41.8308 -2.729 6.339 0.473 0.217 0.001 + 236.0192 41.8455 0.340 10.670 0.229 0.270 -0.001 + 238.4192 36.7995 -26.951 33.582 0.207 0.196 -0.002 + 238.5212 36.7443 -27.097 34.250 0.283 0.205 0.001 + 239.5283 35.9466 -11.994 17.958 0.212 0.201 0.010 + 239.4846 35.9291 -23.320 30.802 0.224 0.214 0.006 + 237.0362 39.8457 -10.613 7.959 0.394 0.426 -0.003 + 245.2406 32.4979 -2.328 2.606 1.125 0.511 0.027 + 243.4075 33.5373 -19.961 19.543 0.683 0.706 0.002 + 249.0394 43.7960 -0.722 -1.770 0.315 0.204 0.006 + 241.6509 34.0217 -25.721 27.855 0.583 0.661 0.001 + 241.3785 34.8360 -14.488 16.899 0.183 0.195 -0.012 + 235.9461 42.8619 1.950 9.930 1.140 0.900 0.016 + 235.7954 47.2128 14.780 11.342 0.279 0.312 -0.001 + 242.9682 33.3890 -26.531 25.992 0.657 0.614 -0.007 + 243.9362 31.5591 -30.596 30.148 0.341 0.234 0.059 + 238.7276 35.7090 -28.244 36.428 0.214 0.190 0.009 + 237.5810 37.8531 -21.111 22.576 1.391 0.842 0.001 + 242.0774 34.5082 -16.880 18.212 0.199 0.189 0.024 + 237.4292 47.1721 5.086 4.406 0.264 0.216 -0.003 + 241.2431 45.6659 1.057 1.214 0.306 0.222 0.001 + 237.3908 45.5969 4.327 5.113 0.254 0.188 -0.018 + 243.3136 36.9018 -2.845 1.589 0.191 0.187 0.012 + 237.7178 47.8985 4.958 2.962 0.243 0.209 -0.001 + 236.5489 48.6485 6.219 3.979 0.200 0.207 0.011 + 242.9661 36.9804 -2.990 1.844 0.188 0.225 0.013 + 244.4496 32.4901 -20.395 24.769 0.663 0.280 0.029 + 242.3055 34.9254 -9.294 13.896 0.217 0.201 0.011 + 251.8811 34.3015 -0.323 0.493 0.274 0.242 -0.004 + 248.9814 32.2280 -1.034 0.893 0.261 0.185 -0.009 + 243.5420 33.6122 -15.052 17.239 0.816 0.479 0.003 + 244.1163 32.4170 -27.519 27.815 0.853 0.674 0.032 + 239.4584 35.9452 -23.328 31.443 0.881 0.649 -0.013 + 241.7671 34.0716 -25.625 24.624 0.234 0.278 0.005 + 238.3230 46.5998 3.592 3.543 0.321 0.226 -0.009 + 242.7570 32.6654 -28.428 29.265 0.505 0.347 -0.022 + 244.8487 31.5886 -26.388 28.864 0.490 0.342 0.015 + 245.8861 47.6638 1.225 -0.483 0.365 0.344 -0.006 + 244.5691 31.8163 -27.768 28.981 0.463 0.417 0.072 + 238.3132 43.9907 1.779 2.992 0.209 0.198 0.002 + 241.8463 33.9026 -26.807 26.946 0.187 0.190 -0.001 + 240.9431 37.8314 -8.930 10.191 0.284 0.228 -0.002 + 239.1535 44.3129 0.544 3.057 0.175 0.165 -0.010 + 243.0762 33.6871 -22.238 22.890 0.438 0.436 -0.005 + 243.8802 36.5796 -2.474 1.090 0.196 0.189 -0.000 + 242.3683 46.4799 1.255 0.344 0.228 0.238 0.003 + 239.5216 35.9199 -23.010 28.437 1.354 0.850 0.002 + 242.8179 33.8357 -21.554 23.707 0.187 0.226 -0.027 + 237.6100 37.1870 -27.269 35.760 0.478 0.617 -0.004 + 245.7066 50.8713 1.595 -1.242 0.593 0.566 -0.003 + 237.3905 47.3914 4.780 3.838 0.192 0.191 -0.011 + 240.2092 46.2157 1.489 1.910 0.229 0.197 0.002 + 243.5060 33.8192 -13.082 17.046 0.188 0.241 0.005 + 242.1929 34.0918 -23.965 23.054 0.182 0.203 -0.014 + 237.6797 47.4514 4.887 4.094 0.356 0.245 -0.001 + 237.5105 42.7548 -0.818 6.373 0.190 0.214 -0.005 + 244.1646 31.3131 -31.084 30.483 0.384 0.393 0.037 + 236.5056 48.1169 7.168 4.635 0.350 0.463 -0.004 + 235.1390 49.2563 7.068 5.032 0.216 0.206 0.011 + 244.5437 32.3775 -19.844 26.556 0.316 0.327 0.024 + 243.4788 32.2885 -29.452 28.482 0.489 0.248 -0.001 + 247.6281 42.8696 -1.999 -1.115 0.227 0.216 -0.008 + 236.9813 37.9962 -25.446 36.441 0.200 0.190 0.020 + 235.5869 48.5443 9.039 5.617 0.535 0.382 0.003 + 235.7448 41.7827 3.083 12.016 0.217 0.205 -0.000 + 240.3902 45.9392 1.064 1.625 0.286 0.249 0.001 + 249.1913 39.5992 -0.049 -0.072 0.188 0.189 0.023 + 237.9919 47.4996 3.541 3.134 0.234 0.245 0.005 + 241.5957 33.7433 -27.662 29.709 0.301 0.742 -0.024 + 241.6278 33.7795 -27.797 29.311 0.223 0.219 -0.022 + 241.6794 33.7739 -27.306 29.246 0.196 0.181 -0.024 + 247.6740 44.3381 -1.187 -1.568 0.250 0.267 0.002 + 238.8626 36.1611 -27.776 34.503 0.651 0.419 0.007 + 241.7552 34.6287 -16.285 18.899 0.259 0.198 0.001 + 239.0344 47.7751 2.994 1.694 0.201 0.233 0.023 + 234.6692 50.1325 4.429 4.058 0.206 0.223 0.010 + 239.0556 39.9746 -8.271 6.805 0.214 0.228 -0.001 + 243.8485 34.6831 -4.050 1.510 0.480 0.558 0.007 + 242.3167 35.3387 -7.082 11.807 0.208 0.182 -0.015 + 240.5513 36.6649 -9.453 8.868 0.441 0.547 -0.006 + 240.1713 36.7591 -8.674 9.807 0.541 0.535 -0.000 + 248.1912 40.7811 -0.691 0.236 0.357 0.377 -0.000 + 240.2800 34.5000 -29.635 29.294 0.213 0.300 -0.001 + 242.4135 33.4441 -28.289 29.123 1.347 0.996 -0.007 + 243.3753 34.6439 -8.890 8.664 0.552 0.240 -0.000 + 241.1021 37.6771 -6.723 8.281 0.305 0.214 -0.002 + 238.8521 44.2598 0.675 3.200 0.198 0.212 -0.009 + 235.8922 43.7010 5.592 10.085 0.547 0.235 -0.003 + 243.4457 36.7154 -2.761 1.460 0.189 0.190 0.008 + 243.5317 36.8406 -2.697 1.387 0.239 0.227 0.007 + 251.9562 34.6671 -0.854 0.515 0.203 0.251 0.008 + 251.6436 32.5525 -0.702 0.729 0.224 0.166 0.008 + 251.7686 33.9855 -0.590 0.468 0.517 0.276 0.009 + 241.9738 34.0191 -25.428 24.996 0.218 0.237 0.000 + 240.5870 48.9644 2.119 0.681 0.199 0.253 0.012 + 242.3906 33.6741 -24.750 22.281 1.121 0.775 -0.002 + 242.4447 33.4858 -26.281 27.559 0.549 0.543 -0.052 + 239.4752 35.9000 -23.442 30.836 0.520 0.429 0.009 + 243.3902 33.6110 -17.851 20.555 0.710 0.590 -0.004 + 241.3236 34.2357 -26.310 28.331 0.366 0.299 -0.000 + 245.3360 36.8396 -1.854 0.897 0.337 0.418 -0.054 + 237.6252 47.3875 4.640 3.840 0.562 0.628 -0.001 + 241.8071 34.8751 -11.122 15.781 0.194 0.185 0.002 + 240.8156 34.5415 -26.486 23.557 0.185 0.195 0.003 + 242.6467 34.0891 -19.444 22.082 0.424 0.207 0.000 + 244.8772 40.6172 -2.814 0.170 0.179 0.181 -0.006 + 244.1315 36.2569 -2.478 1.192 0.189 0.251 -0.002 + 245.0220 32.9723 -1.574 1.281 0.618 0.595 0.015 + 243.3499 36.3163 -2.872 1.991 0.184 0.184 0.007 + 236.2696 46.6841 7.893 7.704 0.265 0.201 0.002 + 238.4417 37.6665 -10.650 9.631 0.196 0.194 0.001 + 245.8674 51.0794 1.669 -1.763 0.158 0.219 0.007 + 248.5791 41.9337 -0.337 -0.021 0.283 0.259 -0.010 + 249.0387 29.0821 -0.313 1.634 0.339 0.302 0.094 + 248.0479 33.4465 -1.507 0.727 0.249 0.186 -0.002 + 249.0461 32.2298 -1.212 1.428 0.326 0.282 -0.002 + 248.1390 31.9181 -1.612 0.398 0.675 0.334 -0.001 + 237.9668 47.5399 4.186 3.449 0.298 0.251 0.000 + 238.5528 36.7653 -27.594 34.778 0.236 0.243 -0.014 + 241.0468 37.6899 -9.047 8.470 0.757 0.222 -0.001 + 242.3385 33.5530 -26.166 27.877 0.196 0.212 -0.063 + 237.5894 37.6863 -20.632 28.238 0.307 0.309 -0.001 + 239.2754 46.9509 2.300 2.035 0.282 0.190 0.033 + 236.9924 48.5462 5.453 3.389 0.311 0.238 0.006 + 236.2943 47.8166 8.868 5.988 0.297 0.414 -0.036 + 236.2959 48.9232 6.397 4.064 0.208 0.198 0.026 + 237.9979 37.6518 -14.938 18.476 0.214 0.425 0.001 + 242.6117 34.6074 -11.689 14.364 0.221 0.189 0.038 + 241.5121 32.9144 -30.217 33.441 0.211 0.209 0.009 + 243.7211 34.2550 -4.323 7.529 0.292 0.372 -0.009 + 236.0776 45.9842 9.801 8.507 0.309 0.236 -0.010 + 237.6905 47.6540 4.706 3.465 0.315 0.305 -0.007 + 237.7762 48.5216 4.156 2.585 0.395 0.450 0.000 + 241.2455 34.4598 -24.657 23.961 0.187 0.219 -0.002 + 242.1383 34.2056 -22.925 21.582 0.283 0.366 -0.009 + 241.8910 34.0886 -24.524 23.976 0.557 0.186 0.001 + 244.2736 32.6493 -23.028 22.644 0.558 0.569 0.016 + 243.3043 33.9125 -13.757 17.681 0.263 0.339 -0.001 + 246.4297 37.1132 -1.310 0.456 0.302 0.254 0.000 + 239.7750 40.5917 -5.521 4.682 0.260 0.262 0.021 + 240.9843 41.8684 -2.933 2.362 0.185 0.184 0.040 + 243.7010 35.9713 -2.884 1.746 0.186 0.204 0.003 + 248.1380 45.0991 0.105 -0.377 0.338 0.349 0.004 + 241.0544 37.6249 -8.999 6.260 0.489 0.890 -0.000 + 243.9844 34.6243 -4.614 2.232 0.488 0.863 0.002 + 241.7361 34.1029 -26.351 24.239 0.244 0.375 0.003 + 242.7496 32.8647 -28.142 28.871 0.981 0.918 -0.012 + 243.7894 36.7305 -2.603 1.153 0.191 0.189 0.001 + 241.5214 34.4386 -22.355 22.222 0.602 0.652 -0.004 + 237.7957 37.4165 -22.033 28.280 0.207 0.199 -0.007 + 248.0450 40.7722 -0.796 -0.237 0.293 0.200 0.005 + 243.7459 33.1926 -21.582 22.874 0.313 0.339 0.003 + 240.1157 39.3143 -7.756 6.486 0.275 0.268 0.001 + 244.0222 33.2922 -12.264 15.473 0.198 0.293 -0.001 + 237.6549 47.5236 4.527 3.668 0.267 0.221 -0.002 + 247.1551 39.4256 -2.382 0.027 0.187 0.181 0.023 + 244.4125 36.3196 -2.518 0.904 0.194 0.192 -0.007 + 240.4756 33.2479 -30.758 34.660 0.270 0.197 -0.017 + 243.1922 34.0352 -12.910 15.399 0.444 0.611 -0.001 + 238.6117 47.3913 3.014 2.581 0.247 0.247 0.012 + 238.0745 37.1664 -21.284 27.410 0.416 0.618 0.001 + 240.9357 34.3199 -27.097 29.086 0.191 0.208 0.001 + 242.4397 33.3807 -27.215 28.394 0.541 0.541 -0.035 + 247.8725 39.3062 -2.430 0.373 0.181 0.189 0.030 + 241.3539 34.0593 -27.405 28.791 0.235 0.289 0.000 + 242.4974 47.6277 1.686 0.378 0.239 0.200 -0.001 + 242.1512 33.9927 -24.494 24.134 0.183 0.232 0.000 + 242.5764 47.5184 1.243 0.114 0.330 0.514 -0.001 + 242.0247 47.3099 1.322 0.529 0.206 0.184 0.000 + 237.7330 37.8744 -17.397 23.766 0.220 0.256 0.002 + 247.7722 33.4506 -1.353 0.954 0.202 0.256 -0.001 + 239.9348 34.0043 -30.008 35.231 0.186 0.188 0.001 + 237.6848 47.6823 4.789 2.887 0.298 0.278 -0.002 + 237.1791 44.8307 3.911 6.051 0.197 0.192 0.009 + 237.2658 44.3962 3.558 5.851 0.276 0.250 0.003 + 243.6622 36.6446 -2.562 1.372 0.189 0.186 0.004 + 236.6712 42.9869 -0.049 7.723 0.304 0.240 -0.010 + 238.1794 39.2058 -9.960 7.100 0.199 0.197 0.001 + 237.4737 38.0332 -19.061 24.662 0.197 0.199 0.013 + 238.6446 43.6727 -0.094 4.283 0.203 0.189 0.005 + 237.4117 37.9279 -20.448 27.005 0.241 0.291 0.005 + 242.3217 34.3818 -17.799 18.403 0.280 0.325 -0.009 + 237.5285 47.2289 4.786 4.079 0.417 0.318 -0.008 + 243.4257 36.9316 -2.636 1.366 0.191 0.189 0.010 + 239.6397 35.9174 -12.936 17.280 0.322 0.338 0.007 + 246.5218 43.6192 -1.497 -0.641 0.199 0.206 -0.014 + 238.8705 45.6077 2.657 3.567 0.244 0.242 0.023 + 241.5302 35.1431 -10.337 12.362 0.295 0.365 0.003 + 234.0922 49.1541 11.124 6.866 0.285 0.354 -0.016 + 237.8077 46.2192 4.707 4.198 0.279 0.290 0.000 + 237.8260 46.2752 4.535 6.217 0.329 0.316 0.001 + 241.5854 35.1582 -11.029 12.917 0.175 0.182 0.005 + 243.9227 33.6506 -11.130 11.349 1.090 0.876 -0.004 + 242.2332 33.5496 -27.273 28.497 0.592 0.552 0.004 + 237.7115 47.1058 4.468 3.928 0.218 0.229 -0.001 + 237.5524 37.8909 -19.196 25.203 0.206 0.261 0.005 + 236.1692 45.4551 7.375 8.435 0.350 0.266 0.026 + 243.7703 36.9348 -2.627 1.065 0.188 0.194 -0.002 + 239.8674 34.4835 -29.887 33.397 0.185 0.189 0.012 + 243.8395 33.6412 -12.834 13.972 0.222 0.275 -0.007 + 238.8554 43.6018 -0.394 3.872 0.217 0.207 0.006 + 246.4527 28.9719 -33.116 29.318 0.308 0.305 0.108 + 249.0297 29.0813 -0.053 0.836 0.295 0.299 0.135 + 246.3684 31.3355 -1.961 0.872 0.262 0.268 0.109 + 242.9506 39.5422 -3.002 0.829 0.183 0.187 0.007 + 242.8160 38.0972 -3.104 1.375 0.182 0.189 -0.003 + 241.6694 33.7978 -27.107 28.988 0.181 0.187 -0.021 + 241.1633 34.2480 -26.864 29.753 0.189 0.288 0.000 + 242.2351 35.8086 -8.476 9.458 0.644 0.513 0.003 + 241.7714 34.8789 -11.340 15.812 0.284 0.484 -0.002 + 236.2316 46.2074 8.676 7.879 0.204 0.196 -0.019 + 242.1966 33.6179 -26.268 27.995 0.238 0.284 -0.008 + 237.3841 37.9974 -20.171 26.465 0.359 0.477 0.004 + 235.8491 41.0539 2.963 16.342 0.228 0.207 0.014 + 243.4695 34.8386 -6.689 4.905 0.532 0.676 -0.002 + 249.4025 43.6741 -0.647 -0.943 0.246 0.188 0.015 + 237.0878 46.9843 5.580 5.496 0.250 0.235 -0.031 + 241.7425 40.4032 -4.434 2.074 0.311 0.333 0.006 + 237.0771 47.0159 5.432 5.200 0.217 0.199 -0.024 + 237.8413 46.2129 3.584 5.065 0.486 0.423 0.001 + 242.2745 33.9725 -23.606 23.884 0.293 0.201 0.003 + 241.5581 34.0691 -26.114 26.268 0.264 0.356 0.002 + 234.4584 48.9256 10.924 7.376 0.356 0.382 -0.008 + 240.1562 34.4133 -29.188 30.313 0.226 0.200 0.005 + 237.5418 37.7630 -19.761 27.264 0.230 0.237 -0.000 + 237.3326 47.7550 5.954 3.826 0.614 0.365 -0.007 + 244.7573 36.2473 -2.194 0.518 0.253 0.438 -0.011 + 241.1977 39.6271 -5.368 3.338 0.183 0.181 0.018 + 241.7149 34.0239 -25.430 26.732 0.321 0.369 0.001 + 241.7227 34.0195 -26.116 25.486 0.333 0.471 0.003 + 243.9147 33.0301 -23.268 23.617 0.194 0.313 0.005 + 239.3389 35.3118 -27.652 34.363 0.198 0.234 0.033 + 250.3190 29.8217 -0.386 1.041 0.200 0.186 -0.008 + 239.4366 34.8266 -30.108 34.384 0.244 0.245 0.015 + 240.5161 34.8515 -24.475 23.861 0.316 0.187 0.002 + 238.0531 38.3945 -10.639 9.563 0.262 0.405 0.002 + 237.4839 45.6176 4.181 5.400 0.263 0.215 -0.010 + 241.7800 34.1786 -24.826 24.066 0.208 0.187 0.017 + 241.4856 34.1264 -26.917 27.263 0.228 0.221 0.022 + 240.7623 34.2758 -29.033 28.690 0.351 0.290 0.001 + 241.5155 34.2932 -25.079 24.675 0.187 0.188 -0.011 + 239.3835 34.5563 -30.696 34.906 0.226 0.265 -0.016 + 241.8788 34.5015 -19.931 20.165 0.187 0.188 0.012 + 240.2680 46.6369 1.498 1.523 0.213 0.274 0.004 + 241.7062 33.7126 -27.526 29.705 0.218 0.213 -0.028 + 242.8068 33.2250 -26.709 27.233 0.603 0.616 0.000 + 242.0079 34.0309 -22.762 25.182 0.798 0.455 -0.000 + 237.0095 45.5231 5.289 6.616 0.217 0.251 -0.031 + 241.7419 46.0915 1.311 0.865 0.273 0.380 0.001 + 238.7264 45.2238 2.306 2.951 0.226 0.202 0.031 + 241.4430 35.7384 -9.947 10.956 0.719 0.653 0.023 + 238.1739 47.5266 3.597 3.209 0.491 0.661 0.004 + 241.3461 37.6643 -4.734 7.403 0.231 0.208 -0.004 + 242.0889 34.0619 -25.293 24.196 0.334 0.273 -0.001 + 237.1299 45.1709 4.839 6.115 0.352 0.326 -0.040 + 237.4594 40.5801 -7.790 6.506 0.514 0.626 0.054 + 241.0163 35.0108 -15.859 16.981 0.179 0.304 -0.002 + 241.9688 33.9799 -26.102 25.567 0.337 0.351 0.000 + 237.3039 48.3127 5.415 3.702 0.517 0.602 0.002 + 241.6480 35.6951 -9.618 9.592 0.510 0.533 0.006 + 243.6082 33.9348 -10.136 13.310 0.269 0.370 -0.005 + 237.8322 52.2369 0.729 0.272 0.287 0.299 0.000 + 237.8594 37.6526 -18.428 23.367 0.583 0.402 -0.005 + 241.2585 34.5685 -22.955 21.338 0.188 0.184 -0.030 + 241.9441 34.2261 -24.120 21.350 0.326 0.339 0.000 + 249.7133 44.6395 0.829 -1.327 0.345 0.301 -0.002 + 244.4181 33.0383 -12.429 6.503 0.587 0.545 0.002 + 238.4027 45.1313 2.172 3.387 0.193 0.209 0.019 + 241.9407 34.0432 -25.051 25.049 0.238 0.370 0.001 + 239.8270 48.4632 2.560 1.548 0.339 0.416 0.000 + 243.0683 34.6690 -10.282 11.471 0.370 0.196 0.015 + 241.5724 33.9582 -26.978 28.580 0.193 0.189 -0.006 + 237.0788 50.1265 3.964 1.736 0.198 0.188 0.013 + 244.4212 33.2788 -6.242 0.554 0.299 0.370 0.001 + 243.3461 33.9553 -12.674 16.534 0.227 0.318 -0.001 + 239.4949 46.6050 2.753 2.042 0.239 0.189 0.002 + 237.2893 41.7317 -2.432 7.021 0.205 0.196 -0.002 + 237.3943 46.9487 4.963 4.734 0.216 0.207 0.007 + 251.0804 28.3783 -0.709 0.932 0.211 0.232 0.124 + 236.7017 43.6341 2.040 7.371 0.427 0.243 -0.002 + 244.0778 32.6476 -26.860 25.901 0.315 0.421 0.023 + 241.9161 34.6035 -15.383 18.172 0.206 0.237 0.011 + 248.0478 40.7860 -1.434 0.209 0.272 0.398 0.002 + 237.9841 37.5430 -19.301 23.705 0.498 0.468 -0.001 + 237.8116 47.2870 4.625 3.893 0.226 0.248 0.002 + 243.4884 36.4035 -2.655 1.633 0.213 0.244 0.000 + 240.9547 35.4131 -12.776 13.242 0.292 0.436 0.000 + 241.9713 33.7995 -26.965 27.215 0.442 0.260 0.000 + 242.1351 33.8627 -25.939 26.759 0.448 0.389 0.000 + 247.2834 44.6477 -0.222 -0.913 0.304 0.321 0.002 + 238.3350 39.4327 -9.593 7.359 0.211 0.204 0.000 + 243.3326 31.8713 -28.675 29.956 0.342 0.312 -0.017 + 237.8508 42.9343 0.783 5.264 0.567 0.541 0.000 + 238.7215 37.8964 -11.880 8.306 0.329 0.331 0.000 + 242.7518 32.4154 -28.796 30.923 0.493 0.559 0.000 + 240.4320 36.1140 -10.206 10.608 0.520 0.353 0.000 + 240.9094 38.0515 -9.274 8.648 0.351 0.282 0.000 + 243.3582 32.8299 -27.395 26.885 0.455 0.252 0.000 + 240.7569 35.7500 -12.363 12.804 0.568 0.376 0.000 + 240.9820 36.6925 -9.350 8.787 0.347 0.313 0.000 + 238.1449 37.7276 -13.708 16.358 0.663 3.866 0.000 + 242.9993 33.7006 -21.905 23.133 0.547 0.858 0.000 + 242.9464 33.6911 -22.615 23.308 0.221 0.813 0.000 + 242.9326 33.6577 -22.812 24.311 0.200 0.260 0.000 + 243.0063 33.6935 -21.903 23.595 0.588 0.808 0.000 + 242.9339 33.6734 -22.361 25.394 2.453 0.381 0.000 + 243.0096 33.6808 -26.704 22.752 0.400 0.200 0.000 + 242.9340 33.6679 -22.703 23.954 2.237 0.347 0.000 + 243.0061 33.6748 -21.653 23.973 0.287 0.716 0.000 + 243.0090 33.6728 -20.906 27.552 0.300 0.400 0.000 + 242.9330 33.6818 -22.643 24.288 0.464 0.263 0.000 + 241.3903 34.5147 -24.263 19.875 0.800 0.600 0.000 + 242.0643 33.6623 -26.085 29.943 0.265 0.646 0.000 + 242.0836 38.9703 -3.298 1.651 0.207 0.224 -0.009 + 237.2841 39.6547 -10.021 7.272 0.427 0.472 0.000 + 241.7102 28.8841 -36.780 35.287 0.405 0.302 0.000 + 240.9770 36.6788 -9.021 10.258 0.366 0.345 0.000 + 243.0208 36.7236 -3.395 2.371 0.209 0.202 0.000 + 249.0328 29.0925 -0.016 0.823 0.723 0.291 0.000 + 241.1787 37.6586 -4.654 7.418 1.022 0.645 -0.012 + 246.4253 37.0639 -1.572 0.598 0.225 0.307 0.000 + 243.6322 35.8484 -3.110 1.775 0.271 0.415 0.000 + 239.1671 35.8732 -25.142 34.000 0.261 0.303 0.000 + 240.9153 37.7718 -9.585 9.615 0.382 0.338 -0.011 + 246.5391 35.1953 -1.750 0.653 0.203 0.339 0.000 + 241.1195 37.7133 -5.604 10.106 0.373 0.517 0.000 + 238.6880 43.7524 0.061 4.338 0.266 0.230 0.000 + 241.1281 34.8252 -19.297 18.594 1.661 0.968 0.000 + 243.1381 40.4035 -1.987 -0.259 0.200 0.201 0.000 + 243.5987 36.8566 -2.587 1.289 0.313 0.280 0.000 + 240.9827 37.6372 -8.606 9.799 0.328 0.217 0.000 + 238.6496 38.8465 -9.882 7.618 0.204 0.203 0.000 + 240.9421 36.3600 -9.479 10.080 0.252 0.209 0.000 + 239.5534 34.6909 -30.764 34.577 0.992 1.449 0.000 + 237.1198 38.1448 -22.286 31.045 1.189 0.523 0.000 + 241.7559 33.9391 -25.506 27.007 0.377 0.345 0.000 + 237.5572 38.8787 -10.287 13.441 0.268 0.254 0.000 + 237.5801 37.9466 -17.618 23.486 0.410 0.443 0.000 + 243.2844 39.1477 -2.879 0.747 0.201 0.200 0.000 + 238.0751 37.5563 -14.706 17.718 0.230 0.256 0.000 + 239.9084 36.5651 -8.819 9.872 0.582 0.392 0.000 + 240.9040 34.2616 -31.516 29.426 1.631 1.252 0.000 + 243.4747 33.2109 -24.452 24.498 0.206 0.210 0.000 + 243.6897 36.8503 -2.558 1.318 0.305 0.285 0.000 + 241.2892 39.4216 -5.082 3.710 0.999 0.627 0.000 + 238.7473 43.7389 -0.131 3.954 0.250 0.224 0.000 + 243.0273 32.5793 -28.037 28.420 0.509 0.237 0.000 + 241.3986 34.3300 -26.300 23.865 0.422 0.537 0.000 + 242.2559 33.7659 -26.022 27.468 0.231 0.275 0.000 + 242.9582 33.1306 -26.392 27.820 0.232 0.265 0.000 + 237.7270 38.0063 -14.052 17.817 0.269 0.243 0.000 + 240.9371 36.0274 -12.420 10.981 0.238 0.209 0.000 + 246.7593 44.4019 0.052 -0.355 0.312 0.217 -0.000 + 244.4041 32.7506 -18.541 20.614 2.505 4.143 0.000 + 237.8042 41.3448 -4.497 6.348 0.620 1.146 0.002 + 238.4743 40.4561 -5.136 9.520 0.372 0.542 0.000 + 238.5369 40.5090 -8.480 4.243 0.434 0.343 0.000 + 238.3273 45.3445 3.006 3.504 0.637 0.309 -0.001 + 237.8631 46.2446 4.115 4.242 0.817 0.589 0.000 + 243.1405 33.3572 -24.717 25.944 0.218 0.211 0.000 + 238.0646 38.2026 -10.115 9.227 0.208 0.223 0.000 + 243.4091 32.6184 -28.564 27.689 0.867 0.409 0.000 + 238.0558 38.2095 -10.744 8.983 0.353 0.671 0.000 + 243.0828 33.0422 -27.456 26.978 0.484 0.270 0.000 + 244.3352 38.2804 -2.672 0.507 0.218 0.202 0.000 + 243.5339 36.8491 -2.460 1.444 0.319 0.300 0.000 + 241.9866 34.0009 -25.710 24.272 0.506 0.811 0.000 + 240.1142 39.5379 -6.702 4.820 0.336 0.316 0.000 + 237.9370 37.8164 -14.287 16.717 0.599 0.532 0.000 + 242.9145 36.2179 -4.002 4.053 0.206 0.232 0.000 + 245.5043 32.6889 -0.697 2.341 1.074 0.258 0.000 + 242.1044 33.7432 -26.155 26.989 0.260 0.248 0.000 + 242.3654 33.4441 -26.158 27.573 0.258 0.397 0.000 + 237.7437 47.6870 3.688 4.315 0.474 0.372 0.000 + 239.6529 35.6742 -22.298 27.827 0.447 0.453 0.000 + 239.3287 35.2686 -27.340 33.723 0.545 0.539 0.000 + 240.0022 35.3511 -21.445 24.412 0.685 0.400 0.000 + 242.7503 32.8407 -27.834 28.651 0.366 0.274 0.000 + 242.0714 33.9273 -25.203 26.359 0.201 0.259 0.000 + 244.5341 31.0450 -31.287 29.714 0.239 0.238 -0.009 + 240.1163 39.6255 -6.937 5.486 0.378 0.215 0.000 + 237.8267 37.4269 -20.670 26.419 0.711 0.679 -0.002 + 248.1077 40.6750 -0.723 0.377 0.633 0.842 0.000 + 238.7467 43.6430 -0.254 4.084 0.299 0.295 0.000 + 237.5423 37.6117 -23.158 30.906 0.350 0.270 0.000 + 239.9304 34.6072 -32.655 29.462 2.397 1.352 0.000 + 240.5148 35.1565 -16.031 16.938 0.237 0.257 0.000 + 238.0645 37.3515 -19.013 24.018 0.531 0.398 0.000 + 241.1372 37.6189 -6.051 6.134 0.656 1.101 0.000 + 239.1714 37.4666 -9.483 9.238 0.294 0.269 0.000 + 238.2488 38.5362 -9.526 8.452 0.244 0.229 -0.018 + 242.6366 36.9953 -3.634 2.636 0.306 0.253 0.000 + 241.0610 34.9624 -16.855 17.523 0.393 0.363 0.000 + 243.3771 36.5941 -2.710 1.702 0.209 0.264 0.000 + 242.3565 33.6745 -25.586 27.445 0.257 0.206 0.000 + 241.5857 34.2594 -25.318 25.235 0.580 0.295 0.000 + 240.2466 39.4217 -6.799 5.258 0.250 0.352 0.000 + 247.8169 33.4311 -1.168 1.155 0.259 0.336 0.000 + 245.2409 37.5950 -2.385 0.260 0.200 0.200 0.000 + 246.0018 51.2867 1.814 -0.080 0.474 0.667 0.000 + 245.9958 50.9638 2.476 -0.891 0.573 0.693 0.000 + 245.5307 51.1896 2.944 -0.940 0.565 0.659 0.000 + 246.1262 50.5822 1.281 0.422 1.187 1.086 0.000 + 247.1647 49.7062 2.058 -0.969 0.535 0.493 0.000 + 249.3026 50.0219 1.226 -0.567 0.393 0.652 0.000 + 245.9130 51.0641 1.148 -0.337 1.130 0.686 0.000 + 246.0181 50.7261 2.486 -1.259 0.684 0.588 0.000 + 246.1829 52.2712 2.004 -1.218 0.434 0.495 0.000 + 245.0901 52.3719 0.279 -1.585 0.320 0.272 0.000 + 246.6127 51.0609 2.261 -0.713 0.350 0.561 0.000 + 247.2734 52.3254 1.225 -0.930 0.263 0.210 0.000 + 239.9933 42.1964 -2.802 2.695 0.683 0.605 0.000 + 248.0820 33.6893 -0.847 -0.387 0.213 0.583 0.000 + 242.8756 32.8075 -27.972 28.045 0.200 0.213 0.000 + 247.9415 34.2479 -1.393 0.566 0.200 0.200 0.000 + 242.1375 33.8492 -23.789 24.797 0.531 0.537 0.000 + 246.0017 51.2935 1.184 -1.039 0.228 0.230 0.000 + 242.9142 33.0239 -26.710 27.150 0.636 1.020 0.000 + 242.8646 46.1329 0.971 0.624 0.214 0.262 0.000 + 242.6291 39.8479 -3.230 1.129 0.200 0.200 0.000 + 241.8327 40.1459 -4.411 2.165 0.200 0.200 0.000 + 239.7187 39.6425 -8.333 5.963 0.359 0.236 0.000 + 245.5146 32.6794 -1.907 1.815 0.293 0.293 0.000 + 250.2430 38.8804 -0.441 0.074 0.200 0.221 0.000 + 246.0206 51.2860 1.920 -0.173 0.516 1.006 0.000 + 241.5618 38.4977 -4.777 4.472 0.200 0.200 0.000 + 240.5911 38.9999 -6.422 5.991 0.373 0.200 0.000 + 247.0277 35.9372 -2.025 0.318 0.200 0.215 0.000 + 248.7947 32.4772 -1.580 0.867 0.227 0.242 0.000 + 248.1081 33.7745 -1.479 0.818 0.244 0.202 0.000 + 247.8459 34.0569 -1.225 0.840 0.303 0.406 0.000 + 245.3950 35.1075 -2.012 0.369 0.200 0.200 0.000 + 249.1985 32.2590 -0.821 0.917 0.200 0.222 0.000 + 248.0562 33.8324 -1.562 1.034 0.200 0.200 0.000 + 250.0709 31.3911 -0.842 0.891 0.200 0.200 0.000 + 248.1064 33.6600 -1.428 0.924 0.400 0.448 0.000 + 250.4466 31.3453 -1.098 0.774 0.200 0.215 0.000 + 245.6408 35.5331 -2.799 0.636 0.212 0.209 0.000 + 245.4049 34.8522 -2.326 0.527 0.200 0.200 0.000 + 247.2852 32.9473 -0.604 0.951 0.200 0.207 0.000 + 247.6456 33.4535 -2.281 2.023 0.315 0.311 0.000 + 248.2733 33.3129 -1.092 0.862 0.254 0.203 0.000 + 249.1669 33.4431 -0.770 0.086 0.252 0.200 0.000 + 245.7457 35.2544 -2.950 0.431 0.207 0.200 0.000 + 245.6529 34.5083 -2.408 1.621 0.200 0.293 0.000 + 245.8463 35.3706 -1.437 0.738 0.622 0.557 0.000 + 245.4037 32.6758 -1.533 2.724 0.375 0.433 0.000 + 245.7082 34.1452 -1.943 0.819 0.217 0.200 0.000 + 247.6819 34.5879 -1.357 1.326 0.350 0.206 0.000 + 247.9527 33.4991 -1.576 0.565 0.200 0.200 0.000 + 245.7727 33.6656 -2.997 0.766 0.724 0.665 0.000 + 248.8169 32.1345 -1.197 -0.521 0.245 0.239 0.000 + 248.3647 33.1678 -1.126 0.615 0.200 0.201 0.000 + 247.1263 33.4916 -1.479 0.924 0.203 0.200 0.000 + 249.0363 32.1901 -1.001 1.222 0.448 0.452 0.000 + 247.2552 33.9583 -1.808 0.841 0.373 0.256 0.000 + 245.8530 34.8793 -2.098 0.608 0.200 0.200 0.000 + 245.4729 32.6583 -0.645 1.203 0.200 0.200 0.000 + 245.3578 32.6837 -1.164 1.973 0.524 0.523 0.000 + 240.9792 35.3519 -12.467 10.779 0.312 0.221 0.000 + 242.7911 40.5159 -2.739 0.545 0.200 0.200 0.000 + 241.7050 41.4388 -3.188 1.738 0.401 0.325 0.000 + 242.3470 49.3119 1.540 0.116 0.200 0.200 0.000 + 237.2089 49.2786 4.787 3.008 0.654 0.635 0.000 + 231.8895 52.1580 -0.160 1.134 0.315 0.373 0.000 + 236.5713 48.4293 6.552 4.012 0.213 0.206 0.000 + 238.5593 49.3787 3.627 1.604 0.653 0.811 0.000 + 243.9714 50.5092 2.301 -0.705 0.200 0.350 0.000 + 240.5046 49.8848 3.768 1.227 0.539 0.902 0.000 + 237.3426 49.1038 4.026 2.310 0.272 0.264 0.000 + 236.8529 49.1151 5.952 3.785 0.202 0.223 0.000 + 237.4615 49.2212 4.598 1.890 0.236 0.257 0.000 + 236.0468 49.1839 5.637 4.421 0.989 1.086 0.000 + 232.6246 50.6856 1.856 3.356 0.652 0.979 -0.004 + 240.7205 50.7003 2.104 0.201 0.689 0.869 0.000 + 236.2369 49.4722 5.552 4.180 0.688 0.850 0.000 + 237.1399 49.1921 4.810 3.225 0.200 0.210 0.000 + 240.3558 49.5654 2.233 0.785 0.200 0.228 0.000 + 236.2005 48.5595 7.154 4.120 0.301 0.238 0.000 + 240.3183 49.6022 2.404 1.840 0.555 0.490 0.000 + 236.9172 49.0060 5.447 3.953 0.366 0.446 0.000 + 236.9106 49.2758 5.134 3.147 0.200 0.226 0.000 + 236.6084 48.4807 5.816 5.727 0.566 0.768 0.000 + 240.7688 50.2413 2.799 1.269 0.557 0.730 0.000 + 237.9356 52.1874 0.750 0.220 0.200 0.270 0.000 + 237.0454 50.1313 4.077 3.021 0.661 0.795 0.000 + 245.9196 37.5182 -2.461 0.025 0.200 0.209 0.000 + 240.1717 39.8248 -6.496 5.009 0.200 0.200 0.000 + 242.2173 35.5581 -7.931 10.985 0.200 0.224 0.000 + 242.2905 39.2672 -3.304 1.155 0.226 0.200 0.000 + 239.5525 39.6022 -7.362 6.692 1.243 0.845 0.000 + 240.1713 40.7288 -4.865 4.196 0.217 0.234 0.000 + 240.3241 38.8539 -8.220 7.329 0.250 0.236 0.000 + 239.8820 39.3786 -8.305 6.620 0.200 0.200 0.000 + 241.6617 37.1678 -7.457 7.391 0.828 0.650 0.000 + 243.1751 39.2860 -2.952 0.940 0.202 0.234 0.000 + 240.7053 39.7965 -5.492 4.000 0.200 0.200 0.000 + 233.4108 52.3883 0.477 2.014 0.309 0.441 0.000 + 241.4960 37.7580 -4.420 6.484 0.200 0.203 0.000 + 238.1502 44.2458 1.748 5.481 0.947 0.828 0.000 + 240.9067 40.7697 -4.075 2.847 0.200 0.264 0.000 + 241.9525 40.9492 -3.815 1.655 0.200 0.211 0.000 + 238.6925 44.0894 1.584 3.717 0.351 0.497 0.000 + 242.7639 33.2581 -26.739 27.543 0.204 0.206 0.000 + 243.0180 39.4480 -2.832 0.960 0.201 0.200 0.000 + 239.9550 39.4109 -8.250 6.204 0.222 0.214 0.000 + 241.0310 38.2165 -7.413 7.143 0.200 0.264 0.000 + 240.6177 40.2723 -4.966 3.484 0.256 0.235 0.000 + 242.8232 37.2250 -3.514 1.996 0.200 0.200 0.000 + 239.5718 39.5311 -8.261 6.596 0.536 0.468 0.000 + 240.0441 39.4756 -7.422 6.193 0.200 0.206 0.000 + 245.2123 35.9067 -2.626 0.686 0.200 0.236 0.000 + 239.6729 46.8832 2.158 1.946 0.317 0.416 0.005 + 248.1759 33.3717 -1.839 1.464 0.309 0.268 0.000 + 240.9485 39.7774 -5.346 3.479 0.200 0.200 0.000 + 244.4782 32.9784 -6.267 5.354 0.203 0.295 0.000 + 239.8909 41.2303 -4.213 4.048 0.492 0.239 0.000 + 240.9972 39.8093 -8.294 3.845 1.730 0.545 0.000 + 240.9914 39.7813 -4.670 3.494 0.505 0.334 0.000 + 240.6890 38.2070 -8.809 8.684 0.285 0.284 0.000 + 236.9844 49.2699 4.960 3.198 0.346 0.357 0.000 + 242.0574 39.1688 -3.428 1.644 0.200 0.200 0.000 + 248.1014 50.5639 1.262 -1.036 0.200 0.200 0.000 + 239.9587 38.4942 -10.563 7.401 0.765 0.570 0.000 + 249.2471 44.6609 -1.123 -2.309 1.194 0.417 0.000 + 247.1371 44.5784 -0.195 -0.642 0.241 0.234 0.004 + 237.8677 47.5542 4.927 4.141 0.247 0.327 0.000 + 237.2026 45.4858 4.742 6.068 0.308 0.267 0.000 + 247.3723 44.6963 -0.437 -0.953 0.274 0.247 0.002 + 242.7338 40.3614 -3.132 0.866 0.200 0.200 0.000 + 240.1610 40.5189 -5.558 4.633 0.201 0.224 0.000 + 241.4451 37.3464 -7.228 7.482 0.200 0.200 0.000 + 240.1593 41.4789 -3.722 3.747 0.206 0.200 0.000 + 239.7628 39.5654 -8.124 6.202 0.397 0.333 0.000 + 238.2911 37.9587 -10.072 7.927 0.391 1.092 0.000 + 241.4464 34.4126 -24.266 22.258 0.200 0.200 0.000 + 243.9480 34.1360 -4.144 5.156 1.052 1.591 0.000 + 241.1033 37.6446 -11.108 4.434 0.317 0.796 0.000 + 239.3460 35.4715 -26.270 33.293 0.882 1.172 0.000 + 242.7166 34.1043 -19.318 18.477 1.159 1.252 0.000 + 241.0312 35.3507 -14.056 10.609 0.250 0.276 0.000 + 242.9500 34.8945 -8.379 10.788 0.710 1.225 0.000 + 240.4540 35.5000 -11.659 12.390 0.719 0.332 0.000 + 243.5944 33.7992 -13.137 14.461 0.289 0.262 0.000 + 242.0107 35.0998 -8.515 14.196 0.314 0.250 0.000 + 235.8157 41.7456 1.689 11.688 0.320 0.407 0.000 + 237.9597 38.0107 -9.543 12.837 1.000 1.266 0.000 + 238.1947 39.7141 -9.144 7.777 0.455 0.319 0.000 + 243.5247 32.6246 -29.416 28.322 0.373 0.326 0.000 + 244.4734 32.6718 -15.559 20.880 0.914 1.365 0.000 + 240.7562 35.7594 -10.024 12.987 0.386 0.546 0.000 + 237.4950 37.7280 -20.323 28.732 0.288 0.298 0.000 + 244.7700 34.7512 -2.368 0.598 0.200 0.200 0.000 + 244.4351 32.7914 -17.904 17.724 0.237 0.207 0.000 + 238.6349 38.3811 -10.307 7.837 0.202 0.207 0.000 + 239.2971 40.4217 -6.457 5.593 0.334 0.462 0.000 + 237.9321 38.2491 -10.649 9.997 0.200 0.200 0.000 + 238.5689 41.0179 -4.981 5.475 1.140 0.754 0.000 + 240.2525 36.8144 -10.325 9.606 0.200 0.200 0.000 + 238.0752 37.4700 -17.826 24.690 1.441 1.181 0.000 + 242.1730 34.1284 -23.441 23.686 0.200 0.402 0.000 + 245.0568 32.7121 -2.454 1.762 0.312 0.532 0.000 + 240.3772 36.3234 -11.714 10.424 0.473 0.610 0.000 + 237.5096 37.5062 -24.639 33.648 0.208 0.213 0.000 + 242.8734 32.5748 -29.097 28.955 0.200 0.200 0.000 + 241.5127 35.6027 -10.020 9.993 0.635 0.509 0.000 + 240.0326 36.0080 -10.697 9.136 1.215 0.582 0.000 + 241.7582 34.1083 -25.525 24.187 0.302 0.388 0.000 + 241.1284 34.8061 -18.197 18.648 0.443 0.608 0.000 + 241.8712 38.5963 -3.991 3.007 0.315 0.424 0.000 + 239.2983 37.0983 -10.916 10.780 0.251 0.261 0.000 + 242.2857 33.6355 -25.761 27.589 0.372 0.322 0.000 + 243.2260 39.6878 -2.650 0.990 0.200 0.200 0.000 + 241.8529 34.6488 -14.768 17.923 0.265 0.272 0.000 + 240.9269 38.7922 -6.037 5.881 0.200 0.200 0.000 + 239.9208 36.9755 -11.545 10.037 0.277 0.583 0.000 + 238.1797 36.5796 -27.902 34.511 0.200 0.200 0.000 + 244.4828 33.2375 -5.737 0.245 1.241 0.721 0.000 + 239.1622 37.7694 -10.154 8.455 0.200 0.200 0.000 + 242.6219 33.1978 -27.227 27.951 0.200 0.200 0.000 + 238.3902 39.4963 -8.846 8.893 0.294 0.261 0.000 + 240.8263 34.1908 -33.039 31.397 1.404 0.784 0.000 + 237.7779 37.7142 -18.883 24.610 0.380 0.448 0.000 + 238.9322 37.4303 -12.311 9.149 0.729 0.318 0.000 + 237.8495 37.3949 -20.472 27.929 0.981 0.726 0.000 + 241.7199 33.7466 -27.080 29.405 0.222 0.200 0.000 + 238.0984 37.6956 -13.737 15.170 0.239 0.375 0.000 + 239.1758 38.6973 -10.269 8.729 1.235 1.010 0.000 + 243.1333 33.0427 -26.935 26.537 0.200 0.248 0.000 + 248.6809 38.5150 -0.872 0.545 0.202 0.200 0.000 + 238.6874 38.7904 -9.764 7.464 0.200 0.200 0.000 + 240.2006 39.1449 -8.038 6.865 0.262 0.241 0.000 + 242.0870 33.7595 -27.992 26.959 0.557 0.384 0.000 + 248.2111 32.8887 -0.866 1.161 0.492 0.533 0.000 + 242.8776 32.8143 -28.774 28.196 0.213 0.200 0.000 + 240.7628 40.8327 -4.582 3.185 0.222 0.242 0.000 + 243.0286 33.8073 -17.943 21.402 0.219 0.200 0.000 + 241.5283 34.0177 -26.443 28.071 0.200 0.200 0.000 + 240.1547 34.4157 -29.102 31.447 0.200 0.200 0.000 + 237.2530 38.4407 -16.451 25.458 0.360 0.266 0.000 + 237.9454 36.9590 -27.082 33.861 0.207 0.205 0.000 + 242.8219 33.5142 -26.231 26.078 0.283 0.317 0.000 + 240.5402 35.1492 -15.017 19.270 0.299 0.301 0.000 + 239.8300 39.3355 -8.031 7.526 1.683 0.867 0.000 + 242.6771 34.5113 -12.477 14.222 0.200 0.200 0.000 + 237.7843 39.5216 -9.600 7.281 0.310 0.465 0.000 + 240.8962 36.4003 -9.366 10.523 0.260 0.240 0.000 + 241.1672 34.1593 -27.386 29.950 0.240 0.259 0.000 + 238.3574 39.1453 -9.461 7.864 0.200 0.200 0.000 + 242.6824 33.1213 -27.230 28.620 0.200 0.200 0.000 + 234.7531 50.0015 5.340 4.091 0.274 0.292 0.000 + 242.0214 46.3212 1.447 -0.042 0.400 0.421 0.000 + 237.5995 37.7488 -19.668 26.938 0.296 0.247 0.000 + 244.9613 36.1102 -2.252 0.134 0.200 0.200 0.000 + 240.6523 39.1024 -5.945 5.821 0.200 0.200 0.000 + 245.9591 35.4646 -2.645 0.597 0.495 0.393 0.000 + 242.1791 36.5364 -6.025 5.487 0.267 0.303 0.000 + 241.7930 37.8382 -4.423 4.626 0.222 0.233 0.000 + 250.6336 32.0057 -0.768 0.963 0.206 0.200 0.000 + 242.9381 39.7203 -2.879 0.836 0.209 0.200 0.000 + 239.2652 35.3327 -28.069 34.363 0.564 0.302 0.000 + 237.0904 46.6122 5.049 5.864 0.971 0.931 0.000 + 238.0462 49.1529 3.520 1.868 0.290 0.296 0.000 + 241.1152 39.8053 -5.009 3.207 0.200 0.213 0.000 + 247.9094 34.7869 -1.567 0.730 0.200 0.200 0.000 + 237.8640 42.8959 -0.561 4.917 0.393 0.320 0.000 + 250.5831 32.8460 -0.878 0.761 0.200 0.200 0.000 + 239.4506 39.7675 -8.152 6.680 0.362 0.379 0.000 + 244.7418 36.2146 -2.744 1.172 0.200 0.228 0.000 + 244.6502 36.1820 -1.971 0.630 0.773 0.665 0.000 + 243.4735 32.6866 -28.380 26.116 0.304 0.349 0.000 + 241.6539 40.2502 -4.576 2.275 0.200 0.200 0.000 + 240.7594 39.6050 -5.085 3.140 1.096 1.431 0.000 + 242.1491 39.4110 -3.363 1.383 0.200 0.200 0.000 + 241.9460 38.0888 -3.651 3.091 0.374 0.608 0.000 + 240.8277 38.1248 -8.766 8.611 0.200 0.227 0.000 + 248.4825 32.9773 -1.168 0.614 0.200 0.200 0.000 + 241.8031 39.9150 -4.576 2.197 0.200 0.200 0.000 + 248.5671 52.0916 1.561 -1.481 0.200 0.200 0.000 + 242.1190 36.0634 -5.682 8.499 0.237 0.236 0.000 + 237.3094 49.1025 5.679 4.051 0.594 0.717 0.000 + 240.6582 41.5907 -3.285 3.260 0.200 0.200 0.000 + 235.0044 49.6896 6.872 4.484 0.265 0.332 0.000 + 247.1562 38.6235 -1.760 -0.821 0.234 0.273 0.000 + 241.2069 37.9100 -5.181 9.500 0.396 0.678 0.000 + 245.3793 32.7012 -1.481 1.671 0.247 0.287 0.000 + 246.0807 50.8329 0.872 -0.204 0.544 0.551 0.000 + 238.7668 43.7221 -0.516 4.232 0.350 0.424 0.000 + 244.2311 49.5221 1.744 -0.293 0.288 0.360 0.000 + 244.3305 49.6002 1.935 -1.157 1.224 0.751 0.000 + 249.7428 31.3479 -0.858 1.054 0.311 0.234 0.000 + 242.4965 38.7344 -3.355 1.179 0.200 0.200 0.000 + 239.9903 39.2491 -8.451 6.914 0.294 0.246 0.000 + 238.1401 37.3190 -19.258 24.465 0.200 0.200 0.000 + 242.3425 49.2582 1.737 0.357 0.375 0.383 0.000 + 245.8350 50.9189 0.533 -0.957 1.089 1.026 0.000 + 244.5808 32.2245 -26.258 27.972 0.343 0.256 0.000 + 239.2285 35.2543 -28.329 34.968 0.210 0.223 0.000 + 239.4215 39.9564 -7.167 5.840 0.322 0.536 0.000 + 239.1549 35.2115 -28.599 35.688 0.246 0.229 0.000 + 237.5200 48.7527 4.172 2.383 0.399 0.517 0.000 + 236.0739 47.4688 11.011 7.223 0.333 0.403 0.000 + 241.9528 37.3426 -5.258 4.814 0.265 0.234 0.000 + 245.5162 35.9169 -2.179 0.128 0.200 0.231 0.000 + 243.7203 36.4376 -2.634 1.558 0.258 0.310 0.000 + 239.5275 40.2042 -7.163 5.569 0.239 0.229 0.000 + 249.6202 37.9143 -0.778 0.148 0.200 0.209 0.000 + 242.7831 32.9277 -27.935 28.035 0.305 0.536 0.000 + 246.9419 37.7102 -4.705 -0.513 0.362 0.406 0.000 + 240.2366 39.1562 -9.132 8.567 1.700 2.142 0.000 + 239.8527 40.0259 -7.159 5.230 0.254 0.232 0.000 + 247.3950 51.4753 1.160 -0.447 0.275 0.203 0.000 + 242.6700 38.6068 -2.833 1.335 0.200 0.200 0.000 + 240.1479 40.4015 -6.033 4.224 0.329 0.276 0.000 + 243.2085 35.2478 -5.013 6.593 0.379 0.413 0.000 + 242.6911 37.3136 -3.922 2.082 0.489 0.337 0.000 + 240.2299 38.7636 -9.051 7.507 0.267 0.245 0.000 + 245.9614 44.3830 -1.186 -0.261 0.655 0.677 0.000 + 243.6331 36.1916 -3.176 1.875 0.429 0.423 0.000 + 250.6074 51.2215 1.141 -1.371 0.468 0.620 0.000 + 240.1841 38.5476 -9.026 7.937 0.816 0.743 0.000 + 242.6853 40.9010 -3.681 1.672 0.321 0.207 0.000 + 238.9418 38.6054 -10.365 9.704 0.988 1.045 0.000 + 245.4781 37.3546 -2.653 0.128 0.699 0.384 0.000 + 242.0716 45.5649 0.481 0.552 0.715 0.384 0.000 + 243.7717 43.5591 -1.018 -0.302 0.200 0.224 0.000 + 239.4628 39.4615 -8.832 7.207 0.677 0.506 0.000 + 245.7695 51.0657 1.244 -0.031 0.510 0.617 0.000 + 242.1193 37.9197 -3.482 2.641 0.200 0.204 0.000 + 242.8817 33.1289 -27.048 27.327 0.200 0.200 0.000 + 239.4173 41.8646 -4.491 3.965 0.315 0.303 0.000 + 241.3619 38.6927 -5.054 4.568 0.259 0.322 0.000 + 241.2659 40.5130 -4.440 2.872 0.200 0.200 0.000 + 247.8382 52.4582 1.372 -1.500 0.281 0.325 0.000 + 239.6917 40.0765 -6.620 6.339 0.324 0.457 0.000 + 241.7407 34.0508 -27.736 27.620 0.687 1.100 0.000 + 240.9101 39.9036 -5.327 3.347 0.200 0.200 0.000 + 241.9935 37.5671 -4.040 4.124 0.200 0.200 0.000 + 241.9075 40.3321 -4.346 2.057 0.204 0.200 0.000 + 239.4108 42.0221 -3.370 4.366 0.339 0.205 0.000 + 248.3511 35.2021 -1.322 1.101 0.219 0.268 0.000 + 240.1799 40.1583 -5.884 4.685 0.200 0.200 0.000 + 241.5369 38.3040 -4.388 4.578 0.210 0.231 0.000 + 239.7202 40.4180 -6.002 5.073 0.200 0.200 0.000 + 241.2363 39.4666 -5.345 3.699 0.200 0.200 0.000 + 248.5596 49.4758 1.067 -1.090 0.200 0.200 0.000 + 239.2080 41.1089 -4.976 4.689 0.200 0.219 0.000 + 240.5274 40.5752 -5.273 3.388 0.695 0.705 0.012 + 239.5288 37.3135 -10.226 8.651 0.318 0.418 0.000 + 239.7778 39.8838 -7.104 5.457 0.273 0.425 0.000 + 238.0401 47.0077 3.548 3.694 0.402 0.356 0.000 + 241.3654 39.3963 -4.076 3.809 1.162 0.887 0.000 + 241.3634 39.3566 -4.832 4.363 1.302 1.498 0.000 + 241.2934 39.3822 -4.445 4.002 0.911 1.133 0.000 + 241.3027 39.3892 -5.279 2.657 1.288 0.949 0.000 + 249.1757 44.5779 -0.363 -2.382 1.109 0.544 0.000 + 242.7784 44.2919 -0.217 0.528 0.225 0.201 0.000 + 245.2610 36.2191 -2.473 0.785 0.200 0.200 0.000 + 245.0588 36.1611 -2.239 0.627 0.200 0.270 0.000 + 241.0207 40.6256 -4.304 2.832 0.200 0.200 0.000 + 245.9714 51.0884 1.866 0.011 0.428 0.632 0.000 + 238.5607 44.5646 1.366 3.654 0.541 0.596 0.000 + 238.4347 44.5592 1.922 3.839 0.533 0.718 0.000 + 238.2874 44.5484 1.683 4.157 0.615 0.538 0.000 + 237.8979 44.5681 2.609 4.712 0.528 0.555 0.000 + 237.7640 44.6021 3.299 4.720 0.552 0.600 0.000 + 238.5771 44.4249 1.011 3.608 1.117 0.682 0.000 + 247.8708 36.0480 -1.663 0.034 0.288 0.356 0.000 + 240.2990 39.3837 -6.117 5.928 0.548 0.397 0.000 + 242.7015 37.7450 -3.211 1.662 0.200 0.200 0.000 + 242.8381 39.0895 -3.075 1.395 0.361 0.234 0.000 + 243.3123 38.2223 -3.004 0.841 0.200 0.200 0.000 + 240.6391 40.6498 -4.551 3.157 0.266 0.236 0.000 + 241.4915 38.6729 -4.826 4.217 0.229 0.213 0.000 + 239.9948 39.6284 -7.491 5.923 0.433 0.435 0.000 + 242.7817 34.0693 -19.333 19.668 1.784 0.815 0.000 + 248.3789 37.0364 -0.905 0.433 0.207 0.200 0.000 + 243.0157 51.3005 2.348 -0.799 0.907 1.361 0.000 + 238.7113 46.0199 2.823 3.033 0.420 0.373 0.000 + 245.9322 36.5267 -1.743 -0.268 0.852 0.200 0.000 + 242.3995 40.4618 -3.272 1.386 0.200 0.200 0.000 + 239.1975 45.8287 2.270 2.427 0.265 0.220 0.001 + 247.6364 33.4647 -0.784 0.678 0.354 0.271 0.000 + 240.9509 40.0869 -5.006 3.200 0.212 0.200 0.000 + 239.3948 41.3499 -3.568 5.366 0.506 0.807 0.000 + 240.3078 38.9125 -8.856 6.825 0.222 0.209 0.000 + 244.4760 33.2776 -4.486 0.579 0.520 0.402 0.000 + 249.2523 44.8017 0.048 0.371 0.571 1.162 0.000 + 248.5958 37.7995 -0.974 0.388 0.200 0.200 0.000 + 240.5170 42.0157 -3.257 2.745 0.482 0.644 0.000 + 246.1980 37.2903 -1.657 0.352 0.200 0.200 0.000 + 249.5315 44.6667 0.723 -2.360 0.947 0.598 0.000 + 242.9002 44.8724 0.273 0.443 0.204 0.215 0.000 + 248.0565 51.6398 1.514 -1.294 0.221 0.235 0.000 + 241.6517 38.9738 -3.879 3.189 0.200 0.200 0.000 + 243.1019 38.0978 -3.380 1.254 0.200 0.200 0.000 + 246.7306 33.3472 -1.158 1.248 0.200 0.200 0.000 + 240.9520 39.5868 -5.692 3.604 0.200 0.200 0.000 + 239.2714 40.7828 -5.570 5.291 0.369 0.646 0.000 + 239.4662 39.5182 -9.025 6.668 0.514 0.428 0.000 + 242.6741 34.5105 -11.840 14.279 0.235 0.289 0.000 + 237.0789 47.0193 6.048 5.483 0.387 0.410 0.000 + 241.4688 38.8410 -4.605 4.048 0.200 0.200 0.000 + 243.8472 36.2831 -2.213 1.704 0.418 0.419 0.000 + 244.8225 37.6968 -2.675 0.339 0.200 0.200 0.000 + 239.5382 35.2713 -27.344 32.695 0.228 0.245 0.000 + 242.5849 35.8838 -7.249 6.651 0.823 0.554 0.000 + 242.2837 33.6503 -25.887 28.032 0.216 0.279 0.000 + 243.1613 38.5031 -3.095 1.042 0.200 0.200 0.000 + 245.0987 35.0478 -1.681 1.394 0.462 0.663 0.000 + 240.0633 40.0800 -6.224 4.796 0.200 0.246 0.000 + 243.2146 33.1051 -24.279 24.441 0.638 0.574 0.000 + 239.5048 40.5923 -5.462 5.354 0.420 0.467 0.000 + 242.5258 41.1544 -3.071 1.797 0.200 0.200 0.000 + 240.4358 42.2470 -3.092 3.414 0.706 0.443 0.000 + 237.6306 37.5921 -21.159 28.435 0.250 0.216 0.000 + 238.5923 38.5372 -9.672 8.612 0.382 0.406 0.000 + 245.9811 35.7392 -2.175 0.427 0.200 0.232 0.000 + 240.2462 39.6893 -6.886 4.989 0.220 0.200 0.000 + 249.4640 44.6136 -0.826 -0.800 0.611 1.199 0.000 + 243.2428 39.4251 -2.995 0.501 0.203 0.200 0.000 + 246.4865 37.6713 -1.991 0.282 0.200 0.281 0.000 + 239.6602 39.5563 -8.170 6.367 0.471 0.411 0.000 + 243.0547 37.1934 -2.907 1.862 0.200 0.200 0.000 + 240.8516 42.1183 -2.355 2.654 0.503 0.602 0.000 + 242.2627 38.8817 -3.371 1.371 0.203 0.208 0.000 + 242.7017 37.4663 -3.708 2.375 0.200 0.277 0.000 + 248.5451 44.0817 -1.346 -2.043 0.277 0.364 0.000 + 247.6459 43.1926 -1.657 -1.683 0.263 0.321 0.000 + 243.6814 43.6117 -1.108 0.127 0.248 0.277 0.000 + 243.2035 47.7416 1.401 0.061 0.373 0.509 0.000 + 245.7799 44.5151 0.525 -0.433 1.122 1.135 0.000 + 247.7641 44.1742 -0.862 -0.937 0.996 1.066 0.000 + 247.8743 42.4234 -2.990 -0.877 0.429 0.575 0.000 + 243.0839 44.0092 0.217 0.656 0.296 0.327 0.000 + 246.6565 44.6654 -0.202 -0.176 0.340 0.349 0.000 + 242.9738 46.4089 1.258 0.678 0.368 0.421 0.000 + 246.3972 43.9074 -1.422 -0.679 0.475 0.371 0.000 + 243.2988 43.7057 -2.100 0.447 1.061 0.778 0.000 + 243.4300 43.5823 -1.261 0.208 0.325 0.434 0.000 + 246.9909 43.5482 -1.879 -0.905 0.217 0.226 0.000 + 247.5506 42.8729 -1.747 -0.718 0.648 0.423 0.000 + 248.0640 42.2091 -1.471 -0.726 0.462 0.346 0.000 + 245.5524 42.5364 -2.079 0.311 1.129 0.599 0.000 + 249.0387 29.0676 -1.479 1.199 1.682 0.840 0.000 + 243.3837 31.8619 -30.307 29.526 0.200 0.200 0.000 + 241.7531 36.7976 -6.835 8.448 0.318 0.282 0.000 + 241.6961 38.6501 -4.290 3.422 0.200 0.256 0.000 + 242.9830 38.7359 -3.251 1.199 0.200 0.200 0.000 + 240.0295 39.2521 -9.358 6.685 0.257 0.257 0.000 + 243.0702 47.7144 1.467 -0.154 0.294 0.304 0.000 + 242.9701 48.1880 2.377 0.001 0.894 0.950 0.000 + 235.9606 46.3059 11.341 8.872 0.489 0.429 0.000 + 241.8134 39.6625 -4.548 2.365 0.249 0.218 0.000 + 243.1559 40.8660 -2.634 0.805 0.334 0.743 0.000 + 241.5937 38.1140 -4.286 5.429 0.505 0.356 0.000 + 242.9366 41.1520 -3.066 2.096 0.353 0.357 0.000 + 239.2772 39.7351 -8.833 6.887 0.395 0.473 0.000 + 243.0119 32.8279 -27.824 28.361 0.788 0.533 0.000 + 244.8221 35.8510 -2.270 0.690 0.239 0.225 0.000 + 242.5623 40.2780 -2.950 0.961 0.200 0.200 0.000 + 237.5627 48.5624 4.295 2.929 0.312 0.288 0.000 + 245.7982 37.1522 -1.798 0.491 0.200 0.200 0.000 + 241.8257 34.2016 -24.414 23.330 0.236 0.270 0.000 + 241.8221 34.2018 -24.773 24.257 0.361 0.425 0.000 + 241.9215 43.7438 -1.546 1.551 0.813 0.694 0.000 + 241.5883 40.9078 -3.816 2.345 0.200 0.200 0.000 + 240.9317 40.3230 -4.796 3.067 0.200 0.200 0.000 + 241.4427 46.6411 1.720 0.556 0.386 0.386 0.000 + 239.6747 50.6902 2.379 1.301 0.320 0.431 0.000 + 240.5640 48.9555 3.333 0.582 0.681 0.744 0.000 + 240.5425 49.8759 2.004 0.780 0.427 0.499 0.000 + 245.5352 35.6115 -2.556 0.112 0.273 0.223 0.000 + 241.7987 36.0357 -9.357 9.923 0.297 0.295 0.000 + 245.9977 35.2311 -1.951 0.021 0.286 0.238 0.000 + 250.8430 51.4701 0.904 -2.014 0.200 0.231 0.000 + 240.1487 38.9606 -8.652 6.983 0.331 0.311 0.000 + 242.0877 40.0626 -4.064 1.898 0.200 0.200 0.000 + 240.4192 49.8693 2.128 1.607 0.672 0.655 0.000 + 250.8365 51.5040 1.434 -1.808 0.946 0.535 0.000 + 248.0107 37.5199 -0.903 0.479 0.200 0.200 0.000 + 241.0302 40.4435 -4.410 3.018 0.200 0.200 0.000 + 251.9632 50.8346 0.691 -0.309 0.244 0.200 0.000 + 242.1452 40.4014 -4.004 1.711 0.200 0.200 0.000 + 238.4940 43.6646 -0.132 3.760 0.217 0.202 0.000 + 239.5583 39.4575 -9.047 7.157 0.472 0.513 0.000 + 240.6247 39.9361 -5.492 3.819 0.234 0.213 0.000 + 241.8725 34.6724 -14.314 17.362 0.406 0.521 0.000 + 240.5111 38.5147 -8.562 7.719 0.265 0.200 0.000 + 241.6956 39.3941 -4.504 2.842 0.200 0.200 0.000 + 241.8193 37.0295 -6.578 6.402 0.324 0.336 0.000 + 241.7077 37.3931 -5.435 5.782 0.279 0.337 0.000 + 242.7697 32.8861 -29.685 26.872 0.344 0.606 0.000 + 239.6923 39.5809 -8.389 6.465 0.215 0.251 0.000 + 247.3990 49.5916 1.282 -0.872 0.615 0.200 0.000 + 249.3424 44.2240 -0.746 -0.452 0.401 0.406 0.000 + 239.5568 41.2278 -5.339 5.100 0.357 0.411 0.000 + 238.0973 44.1786 0.734 6.290 0.647 0.670 0.000 + 238.2979 37.7030 -11.276 10.633 1.804 0.280 0.000 + 244.2577 40.8599 -2.619 -0.134 0.359 0.267 0.000 + 239.6533 42.1721 -3.934 2.798 0.290 0.373 0.000 + 239.7153 46.3694 1.890 1.986 0.330 0.240 0.000 + 240.1869 39.5385 -7.251 5.464 0.243 0.298 0.000 + 237.2967 49.0581 4.961 2.158 0.231 0.279 0.000 + 240.2476 41.7852 -3.481 3.668 0.200 0.208 0.000 + 241.2899 41.4766 -3.504 1.919 0.200 0.200 0.000 + 239.3848 40.6607 -5.568 5.503 0.358 0.391 0.000 + 241.8846 36.5526 -7.796 9.017 0.576 0.375 0.000 + 238.8138 38.8346 -10.024 7.301 0.447 0.826 0.000 + 240.2262 41.0739 -4.519 3.845 0.217 0.312 0.000 + 237.7141 37.9132 -19.292 23.666 0.681 1.335 0.000 + 246.5011 44.2420 -0.728 -0.168 0.351 0.319 0.001 + 250.3045 52.1446 0.930 0.200 0.718 0.744 0.000 + 247.1668 49.6939 1.523 -0.739 0.200 0.200 0.000 + 241.2311 38.4236 -6.544 5.316 0.252 0.200 0.000 + 240.7154 38.9877 -6.256 5.884 0.225 0.200 0.000 + 239.4993 39.6291 -8.901 6.539 0.356 0.480 0.000 + 246.5248 38.0079 -2.391 0.250 0.200 0.200 0.000 + 240.7677 40.5145 -4.615 3.278 0.249 0.200 0.000 + 240.6224 41.0704 -4.174 3.325 0.269 0.320 0.000 + 239.8150 39.6690 -7.065 5.446 0.725 0.584 0.000 + 248.9540 32.3646 -0.189 0.422 0.349 0.268 0.000 + 239.5644 41.0352 -4.351 4.552 0.200 0.256 0.000 + 241.5634 40.7070 -3.874 1.977 0.200 0.200 0.000 + 246.8775 34.3898 -1.735 0.748 0.200 0.200 0.000 + 242.8193 38.5031 -3.163 1.119 0.200 0.200 0.000 + 250.2823 40.9962 0.575 -0.352 0.346 0.325 0.000 + 248.2199 36.4504 -1.400 0.262 0.224 0.236 0.000 + 240.1994 38.6769 -9.173 7.794 0.393 0.289 0.000 + 240.4520 41.6051 -3.378 3.107 0.200 0.200 0.000 + 240.8368 39.0742 -6.475 5.903 0.200 0.200 0.000 + 240.8726 38.8931 -6.158 6.088 0.282 0.280 0.000 + 237.8095 39.2739 -10.961 5.461 1.152 0.617 0.000 + 242.2162 40.2085 -3.796 1.655 0.200 0.200 0.000 + 242.4100 40.1179 -3.186 1.067 0.200 0.200 0.000 + 250.5352 49.9783 0.958 -1.224 0.379 0.228 0.000 + 249.2758 50.0085 1.555 -0.876 0.231 0.325 0.000 + 245.9171 36.0855 -2.353 0.960 0.200 0.200 0.000 + 249.3259 50.0388 1.429 -0.922 0.200 0.200 0.000 + 244.2962 35.6939 -3.633 0.278 0.371 0.494 0.000 + 244.5243 32.6330 -14.899 20.241 0.581 0.425 0.000 + 241.0885 38.5218 -6.267 6.162 0.200 0.200 0.000 + 246.8447 38.3069 -2.207 0.076 0.307 0.556 0.000 + 241.9361 40.6518 -4.005 1.936 0.200 0.200 0.000 + 242.5581 38.1199 -3.106 1.104 0.200 0.200 0.000 + 241.8449 38.4196 -3.735 3.379 0.295 0.416 0.000 + 237.7124 49.1592 4.618 1.993 0.238 0.286 0.000 + 245.7550 37.6865 -2.586 0.427 0.200 0.200 0.000 + 239.5994 39.6247 -8.164 6.377 0.278 0.260 0.000 + 240.0737 39.5252 -7.054 3.827 0.395 0.571 0.000 + 239.3958 39.6845 -9.158 6.377 0.259 0.300 0.000 + 241.7549 38.2462 -3.906 4.212 0.295 0.388 0.000 + 236.3965 46.9829 8.239 6.608 0.596 0.391 0.000 + 240.8796 37.8978 -9.725 10.352 0.367 0.247 0.000 + 242.2916 38.0778 -3.318 2.027 0.200 0.200 0.000 + 239.9346 40.4474 -5.650 4.733 0.209 0.233 0.000 + 242.9305 40.3034 -2.314 0.763 0.200 0.200 0.000 + 250.5317 49.9898 0.724 -0.828 0.702 1.682 0.000 + 238.4077 39.1483 -9.724 9.808 0.333 1.532 0.000 + 245.3064 36.3936 -2.641 0.580 0.200 0.200 0.000 + 240.3523 39.8782 -6.351 4.604 0.200 0.200 0.000 + 244.5261 32.6435 -13.500 17.470 0.751 1.428 0.000 + 234.4293 49.5510 7.542 5.512 0.800 1.243 0.000 + 240.7808 39.9966 -5.180 3.535 0.200 0.200 0.000 + 236.0619 49.1638 6.515 4.252 0.265 0.307 0.000 + 236.1032 49.1072 6.622 3.437 0.419 0.611 0.000 + 240.7168 39.2546 -5.823 5.169 0.219 0.209 0.000 + 249.4678 36.6865 -0.790 0.367 0.200 0.200 0.000 + 244.7045 32.3243 -13.207 24.916 0.450 0.246 0.000 + 245.9420 51.0891 1.771 -0.229 0.387 0.473 0.000 + 236.2801 48.8239 6.196 4.299 0.278 0.267 0.000 + 245.2041 35.7140 -2.710 -0.017 0.829 0.509 0.000 + 240.5953 42.3063 -2.784 4.309 0.591 0.587 0.000 + 239.4617 35.0909 -28.485 35.253 0.537 0.485 0.000 + 240.6797 38.8860 -6.697 6.114 0.200 0.200 0.000 + 242.4642 39.5821 -3.056 1.035 0.200 0.200 0.000 + 244.8410 37.3699 -2.743 0.847 0.200 0.266 0.000 + 244.8279 36.2198 -3.197 0.698 0.200 0.200 0.000 + 245.1080 36.7954 -1.391 0.958 0.200 0.259 0.000 + 241.2019 39.4746 -4.305 2.970 0.945 0.836 0.000 + 244.9793 36.1118 -2.309 1.406 0.520 0.527 0.000 + 245.4772 36.6734 -2.088 -0.460 0.292 0.255 0.000 + 244.3537 36.5777 -2.108 0.436 0.336 0.413 0.000 + 245.4202 35.1706 -2.302 0.424 0.200 0.200 0.000 + 244.8151 36.0835 -3.139 1.204 1.329 1.380 0.000 + 245.5889 36.5329 -1.737 0.727 0.335 0.405 0.000 + 245.5491 37.9370 -2.844 0.183 0.200 0.200 0.000 + 245.0783 36.0246 -2.017 0.075 0.493 0.471 0.000 + 245.0786 35.4659 -2.309 0.745 0.200 0.200 0.000 + 245.5973 38.9168 -2.961 0.053 0.226 0.200 0.000 + 244.6710 36.0992 -2.508 0.796 0.200 0.200 0.000 + 245.2845 36.7250 -3.253 0.270 0.243 0.211 0.000 + 242.9519 48.1777 1.561 -0.175 0.246 0.344 0.000 + 244.8409 35.4911 -3.101 0.921 0.722 0.584 0.000 + 243.2092 37.0367 -3.115 1.565 0.200 0.256 0.000 + 242.7545 32.7450 -28.451 28.817 0.200 0.200 0.000 + 239.8425 40.7354 -4.773 3.247 0.359 0.921 0.000 + 236.9992 44.8967 4.224 6.533 0.258 0.262 0.000 + 240.4485 48.3734 1.871 0.817 0.249 0.407 0.000 + 237.0915 46.9612 4.974 5.347 0.294 0.262 0.000 + 245.9067 51.7921 1.752 -0.995 0.202 0.224 0.000 + 240.4546 49.1795 2.176 1.063 0.206 0.228 0.000 + 242.0955 36.2101 -6.687 8.235 0.396 0.567 0.000 + 243.0465 32.5603 -29.695 29.180 1.064 0.351 0.000 + 239.7319 40.9638 -4.606 4.628 0.214 0.200 0.000 + 239.7975 45.7186 2.178 2.151 0.477 0.444 0.000 + 238.6981 44.0943 1.900 3.501 0.428 0.510 0.000 + 239.8194 45.2270 1.566 1.744 0.447 1.060 0.000 + 239.5193 34.8504 -29.167 35.237 0.353 0.416 0.000 + 237.1841 45.2341 5.524 6.769 0.693 0.378 0.000 + 236.8381 44.0450 4.365 7.242 0.471 0.420 0.000 + 235.8887 43.9864 8.174 10.794 0.467 0.491 0.000 + 237.5841 45.4976 4.350 5.176 0.580 0.351 0.000 + 236.8456 44.2898 5.281 7.575 0.525 0.434 0.000 + 236.9747 45.5191 5.384 7.268 0.624 0.533 0.000 + 240.6789 45.8052 1.442 1.755 0.400 0.456 0.000 + 240.4348 45.3607 1.326 1.956 0.478 0.556 0.000 + 238.1913 42.1434 -3.721 6.077 0.775 0.818 0.000 + 238.8590 44.6016 1.696 4.117 0.862 0.678 0.000 + 238.3866 42.0285 -2.088 7.522 0.806 1.448 0.000 + 237.1155 42.3799 -1.074 7.941 0.540 0.566 0.000 + 237.3980 45.1545 3.179 6.706 0.503 0.558 0.000 + 236.7909 45.1879 6.131 9.117 0.561 0.749 0.000 + 235.9388 44.6748 7.477 10.168 0.974 0.472 0.000 + 237.5147 43.7464 2.302 5.986 0.629 0.751 0.000 + 241.1498 45.6709 1.297 1.382 0.417 0.509 0.000 + 237.3272 45.5070 4.760 6.150 0.409 0.534 0.000 + 236.6508 43.2984 -1.270 6.966 0.817 0.549 0.000 + 235.9512 44.6253 9.157 9.892 0.910 0.603 0.000 + 237.2724 44.3977 3.357 5.949 0.502 0.541 0.000 + 236.8889 44.5583 4.936 7.874 0.655 0.458 0.000 + 236.1538 45.4856 7.684 9.273 1.201 0.519 0.000 + 239.3134 45.5864 1.886 2.755 0.454 0.519 0.000 + 243.0678 32.6080 -28.200 27.718 0.314 0.413 0.000 + 240.8321 46.8226 1.456 1.412 0.310 0.329 0.002 + 243.0324 32.7238 -30.234 27.437 0.817 0.659 0.000 + 237.6631 48.4179 4.482 2.872 0.234 0.239 0.000 + 241.9450 36.7425 -5.991 6.080 0.431 0.463 0.000 + 249.5161 51.3557 1.278 -1.325 0.226 0.200 0.000 + 244.3876 33.2000 -8.862 -4.051 0.477 0.788 0.000 + 242.1970 38.6420 -3.379 1.716 0.200 0.200 0.000 + 244.2554 36.1394 -1.830 1.144 0.350 0.372 0.000 + 242.8897 40.0728 -2.820 1.045 0.200 0.228 0.000 + 242.5814 36.2397 -5.390 4.980 0.200 0.200 0.000 + 239.3565 34.5787 -32.879 34.918 0.506 0.486 0.000 + 247.3238 38.0337 -1.833 0.092 0.200 0.211 0.000 + 242.3020 41.3242 -3.218 1.847 0.215 0.358 0.000 + 244.3076 32.6479 -21.770 22.903 0.277 0.255 0.000 + 244.1104 32.6139 -27.844 26.450 0.206 0.231 0.000 + 236.6721 44.9191 5.174 6.673 0.267 0.319 0.000 + 240.0600 38.2226 -10.294 7.329 0.572 0.887 0.000 + 238.7170 35.6650 -28.600 36.667 0.291 0.212 0.000 + 237.4185 45.5665 5.901 5.116 1.016 1.055 0.000 + 242.0974 35.8552 -8.272 10.527 0.262 0.221 0.000 + 249.8836 44.9157 0.608 -0.154 0.341 0.359 0.000 + 250.2036 35.0802 -0.939 0.407 0.200 0.200 0.000 + 239.6196 40.0343 -7.141 5.487 0.648 0.647 0.000 + 239.6771 39.4193 -9.260 7.235 0.263 0.336 0.000 + 237.7919 47.9817 4.220 4.099 0.585 0.530 0.000 + 239.6684 39.4885 -9.009 7.513 0.500 0.784 0.000 + 240.0003 39.7504 -6.708 5.340 0.383 0.236 0.000 + 241.9115 38.9325 -3.494 2.364 0.200 0.200 0.000 + 242.2275 39.0830 -3.225 1.375 0.200 0.263 0.000 + 248.5824 32.6288 -1.414 1.195 0.200 0.200 0.000 + 240.0032 40.8718 -4.208 4.368 0.551 0.200 0.000 + 242.0149 38.2697 -3.762 2.553 0.370 0.377 0.000 + 241.4251 34.4522 -23.892 22.266 0.236 0.342 0.000 + 240.9479 38.6454 -6.649 6.199 0.249 0.200 0.000 + 245.1179 35.3853 -2.242 0.991 0.613 0.984 0.000 + 238.4363 45.5183 2.860 3.640 0.280 0.302 0.001 + 243.8419 31.2552 -31.800 30.727 0.357 0.349 0.000 + 240.2459 39.3359 -6.836 6.530 0.200 0.200 0.000 + 240.0332 44.1321 -0.178 2.109 0.231 0.200 0.000 + 238.2374 38.6850 -9.970 7.287 0.406 0.246 0.000 + 236.5847 48.1015 6.229 4.738 0.432 0.448 0.000 + 241.2085 45.6696 1.141 1.169 0.390 0.394 0.000 + 240.4061 49.5008 2.218 0.872 0.202 0.250 0.000 + 240.5135 38.9185 -6.845 6.185 0.207 0.200 0.000 + 239.1554 44.3121 0.520 3.061 0.200 0.200 0.000 + 237.7209 37.7957 -17.944 24.346 0.304 0.219 0.000 + 241.5285 40.3792 -4.457 2.431 0.200 0.200 0.000 + 240.9810 39.2790 -5.549 4.396 0.200 0.200 0.000 + 240.7405 39.4548 -5.765 4.887 0.211 0.219 0.000 + 237.9602 44.0969 0.897 5.924 0.563 0.484 0.000 + 245.7061 50.8710 1.797 -0.843 0.241 0.298 0.000 + 250.5906 50.8534 0.026 -1.336 0.705 0.661 0.000 + 240.2956 34.4260 -30.216 30.333 0.293 0.414 0.000 + 249.2384 39.5939 -0.756 0.635 0.260 0.246 0.000 + 241.0643 38.9065 -5.934 5.501 0.200 0.200 0.000 + 249.3480 44.4515 -0.278 -0.477 0.545 0.539 0.000 + 244.8468 32.5492 -4.298 0.005 0.259 0.238 0.000 + 235.5570 49.3459 6.794 4.495 0.423 0.509 0.000 + 241.4487 39.3782 -4.672 3.455 0.200 0.200 0.000 + 241.2473 39.4896 -4.982 3.681 0.200 0.200 0.000 + 240.4642 39.1884 -6.244 5.846 0.226 0.229 0.000 + 242.8405 33.5289 -24.046 25.393 0.213 0.233 0.000 + 246.1855 52.2664 1.434 -0.893 0.200 0.275 0.000 + 240.2354 39.3899 3.101 -3.906 0.690 0.740 0.000 + 241.0039 39.3971 -5.418 3.868 0.215 0.220 0.000 + 237.6261 40.6253 -8.938 7.803 0.532 0.519 0.000 + 246.1363 52.3022 1.318 -1.036 0.315 0.347 0.000 + 240.0086 39.8945 -6.729 5.743 0.216 0.271 0.000 + 242.6748 39.1590 -3.113 0.875 0.200 0.207 0.000 + 240.0833 39.5103 -7.855 6.438 0.221 0.260 0.000 + 241.8024 50.9892 1.619 -0.840 0.640 0.667 0.000 + 239.5369 39.9821 -7.247 6.009 0.454 0.449 0.000 + 242.4255 38.4246 -3.070 1.653 0.200 0.200 0.000 + 240.7223 46.2774 1.324 1.313 0.203 0.203 0.001 + 242.8943 39.8841 -2.657 0.802 0.200 0.200 0.000 + 244.3766 36.4931 -2.827 0.626 0.437 0.382 0.000 + 240.5674 38.6256 -7.656 7.253 0.250 0.223 0.000 + 238.4392 37.0185 -19.016 23.112 0.200 0.200 0.000 + 239.2077 46.7495 2.678 2.263 0.256 0.266 0.000 + 242.4537 38.5767 -3.137 1.313 0.200 0.204 0.000 + 238.2210 36.9312 -27.066 33.100 0.756 0.626 0.000 + 241.2875 40.8041 -3.791 2.501 0.200 0.200 0.000 + 241.0130 38.4034 -6.826 6.746 0.200 0.200 0.000 + 242.3934 38.2626 -3.343 1.691 0.200 0.200 0.000 + 242.4012 33.5277 -25.998 27.222 0.429 0.509 0.000 + 242.5872 39.3586 -3.074 1.125 0.200 0.214 0.000 + 241.2659 48.6493 1.594 0.179 0.317 0.298 0.000 + 236.6406 43.2350 0.932 7.700 0.321 0.316 0.000 + 241.2399 39.2230 -4.703 4.141 0.206 0.200 0.000 + 242.5834 33.9209 -22.356 23.868 0.318 0.406 0.000 + 243.7380 48.2175 1.466 -0.322 0.271 0.329 0.000 + 241.5763 40.5544 -4.155 2.276 0.200 0.306 0.000 + 246.4721 31.2952 -2.320 -0.118 0.232 0.572 0.000 + 246.5035 31.2913 -1.525 1.357 0.449 0.423 0.000 + 236.5793 48.5667 7.888 5.426 0.629 0.669 0.000 + 238.6458 38.6550 -8.834 6.914 0.421 0.322 0.000 + 239.2884 40.9124 -5.352 5.176 0.200 0.309 0.000 + 240.6383 50.6629 2.287 1.075 1.653 1.102 0.000 + 246.2983 33.8651 -1.897 0.979 0.226 0.237 0.000 + 242.9184 38.2445 -3.105 1.209 0.200 0.200 0.000 + 241.6217 39.2751 -4.231 2.921 0.200 0.200 0.000 + 239.8543 39.5127 -8.028 6.251 0.327 0.317 0.000 + 236.4588 46.9656 7.082 7.192 0.919 0.693 0.002 + 239.3404 39.5798 -9.141 5.574 0.239 0.425 0.000 + 245.9926 50.8753 1.199 -1.553 0.260 0.277 0.000 + 241.6446 41.1297 -3.563 1.838 0.272 0.343 0.000 + 240.0317 38.7669 -8.958 7.614 0.332 0.270 0.000 + 249.7219 44.5225 0.360 0.242 0.951 0.478 0.000 + 237.7611 48.5042 4.160 2.117 0.311 0.344 0.000 + 248.2064 34.8627 -1.327 0.413 0.200 0.200 0.000 + 238.6457 37.9818 -10.174 8.475 0.200 0.200 0.000 + 238.7106 37.9895 -8.834 6.767 0.563 0.678 0.000 + 247.4113 32.9370 -1.299 0.896 0.200 0.200 0.000 + 236.8865 48.0914 5.972 4.636 0.303 0.357 0.000 + 241.1519 40.3068 -4.524 2.775 0.200 0.200 0.000 + 242.3713 40.6761 -3.528 1.519 0.200 0.241 0.000 + 246.5440 36.5048 -1.805 0.380 0.200 0.200 0.000 + 242.2710 39.8822 -3.429 1.312 0.200 0.200 0.000 + 239.8055 38.6240 -10.680 8.626 0.650 0.561 0.000 + 241.2346 34.2491 -26.597 28.304 0.414 0.477 0.000 + 239.9655 40.2784 -6.036 4.887 0.200 0.200 0.000 + 238.1160 45.6942 3.611 4.384 0.426 0.388 0.001 + 241.2918 41.0316 -3.762 2.331 0.200 0.200 0.000 + 241.8097 39.0847 -3.773 2.640 0.200 0.200 0.000 + 241.4283 39.2872 -4.436 4.931 0.200 0.200 0.000 + 242.0686 41.1602 -3.163 1.620 0.200 0.200 0.000 + 240.3522 40.6213 -5.225 3.795 0.200 0.200 0.000 + 244.1608 32.9582 -22.551 20.141 0.317 0.330 0.000 + 244.9669 36.2596 -0.463 1.015 0.545 0.498 0.000 + 239.5658 34.9116 -30.625 35.936 0.516 0.879 0.000 + 243.0291 32.8306 -27.562 27.299 0.285 0.211 0.000 + 241.9196 33.9407 -29.692 26.578 0.226 0.307 0.000 + 242.2718 40.8531 -3.799 1.525 0.224 0.230 0.000 + 240.2911 39.6370 -6.538 7.725 0.582 0.725 0.000 + 240.2899 39.5408 -6.548 5.258 0.211 0.200 0.000 + 240.2880 39.5415 -6.751 7.052 0.311 0.556 0.000 + 242.7285 47.6774 1.378 0.014 0.392 0.455 0.000 + 240.2237 44.8267 0.503 1.978 0.207 0.213 0.000 + 240.2900 39.5121 -7.015 4.623 0.200 0.306 0.000 + 242.7429 32.8669 -27.677 28.576 0.212 0.200 0.000 + 238.3495 44.1924 1.889 4.097 0.590 0.578 0.000 + 236.8979 48.0824 6.007 4.467 0.439 0.284 0.000 + 236.8583 49.7252 4.376 2.597 0.283 0.458 0.000 + 240.4401 40.8440 -4.884 3.544 0.379 0.207 0.000 + 239.6633 38.9245 -9.181 6.979 1.419 0.507 0.000 + 239.0428 35.8184 -27.229 33.849 0.233 0.254 0.000 + 240.2774 39.6207 -6.570 4.697 0.200 0.200 0.000 + 239.5344 40.3791 -8.116 7.246 1.197 1.191 0.000 + 240.5345 39.3335 -6.249 5.271 0.225 0.203 0.000 + 240.2118 39.3639 -7.221 6.654 0.294 0.225 0.000 + 244.0900 36.5101 -2.282 1.359 0.212 0.321 0.000 + 240.7931 40.2308 -4.898 3.213 0.200 0.200 0.000 + 246.4129 51.0484 1.664 -1.628 0.325 0.335 0.000 + 244.5489 36.4151 -2.658 1.056 0.200 0.200 0.000 + 246.5963 51.0390 1.191 -0.609 0.260 0.295 0.000 + 242.3158 37.2212 -4.257 3.485 0.253 0.279 0.000 + 240.4088 39.0507 -6.871 6.485 0.211 0.227 0.000 + 247.3066 36.5766 -1.467 0.426 0.200 0.200 0.000 + 239.9310 41.6618 -3.324 3.722 0.219 0.200 0.000 + 237.3081 49.0742 4.815 2.806 0.862 0.639 0.000 + 237.3049 49.1746 3.959 2.832 0.402 0.371 0.000 + 239.4366 40.4493 -6.357 5.694 0.213 0.296 0.000 + 244.4816 35.8055 -2.021 0.910 0.743 0.681 0.000 + 240.7993 38.5187 -6.979 7.020 0.214 0.200 0.000 + 239.9542 42.0489 -3.842 2.876 0.712 0.726 0.000 + 245.9315 52.3093 1.309 -0.575 0.357 0.620 0.000 + 242.2555 37.4525 -4.380 2.617 0.200 0.223 0.000 + 242.2884 36.3513 -4.662 4.987 1.222 0.791 0.000 + 242.8238 46.7146 1.094 0.538 0.296 0.313 0.000 + 242.4447 33.8852 -19.259 23.368 0.424 0.532 0.000 + 239.5016 40.8627 -5.007 5.104 0.200 0.251 0.000 + 241.6472 35.0327 -10.766 14.402 0.303 0.307 0.000 + 240.1617 39.4018 -7.278 6.324 0.286 0.245 0.000 + 242.6250 37.9429 -3.348 1.440 0.200 0.200 0.000 + 238.3804 44.0898 1.990 3.670 0.721 0.639 0.000 + 245.5461 35.1831 -2.191 0.825 0.270 0.251 0.000 + 241.3699 40.6467 -4.163 2.478 0.200 0.200 0.000 + 241.2883 40.0786 -4.569 2.053 0.388 0.296 0.000 + 248.0795 43.3057 -1.709 -1.627 0.285 0.282 0.001 + 241.6362 38.8088 -4.174 3.428 0.200 0.200 0.000 + 239.5513 39.7946 -7.844 6.386 0.320 0.343 0.000 + 242.7074 38.3582 -3.093 1.396 0.200 0.200 0.000 + 248.8905 33.6473 -1.107 0.566 0.258 0.295 0.000 + 240.4576 38.7098 -8.037 7.254 0.255 0.221 0.000 + 243.0113 38.9281 -2.828 0.938 0.200 0.200 0.000 + 242.7644 38.9107 -3.099 0.996 0.200 0.200 0.000 + 240.5199 39.5322 -6.131 4.996 0.305 0.324 0.000 + 242.2900 49.0981 1.900 0.164 0.281 0.339 0.000 + 245.7936 36.2758 -1.471 0.467 0.285 0.204 0.000 + 241.3638 40.2899 -4.584 2.633 0.200 0.200 0.000 + 239.7723 39.2958 -8.397 7.032 0.344 0.294 0.000 + 245.1894 30.9339 -30.063 27.680 0.554 0.451 0.000 + 249.0564 32.2138 -0.349 1.124 0.436 0.267 0.000 + 239.9771 41.0178 -4.656 4.216 0.403 0.330 0.000 + 239.5833 39.8588 -8.029 6.096 0.382 0.447 0.000 + 239.9173 40.1032 -5.679 5.585 0.610 0.567 0.000 + 237.7881 46.1979 5.757 3.325 0.334 0.391 0.000 + 239.8783 48.3655 2.127 1.959 0.477 0.604 0.000 + 245.8661 51.0800 1.600 -1.317 0.209 0.350 0.000 + 237.9404 36.9983 -26.597 33.828 0.487 0.527 0.000 + 242.8910 37.3988 -3.492 1.998 0.200 0.200 0.000 + 241.0634 45.1328 0.526 1.021 0.229 0.254 0.000 + 245.9456 36.7734 -2.421 1.109 0.280 0.283 0.000 + 250.8536 52.4336 1.086 -1.106 0.235 0.208 0.000 + 246.3481 37.7063 -1.953 -0.425 0.400 0.350 0.000 + 246.9132 37.7042 -2.334 -0.211 0.296 0.570 0.000 + 248.0432 40.6710 -1.426 0.282 0.383 0.337 0.000 + 247.4214 39.3535 -2.691 0.097 0.336 0.294 0.000 + 249.5999 40.1717 -0.417 0.715 0.315 0.328 0.000 + 248.7536 41.0811 -0.259 -1.151 0.281 0.354 0.000 + 248.4238 37.7569 -1.041 0.874 0.372 0.346 0.000 + 247.8976 39.9588 -2.121 0.616 0.318 0.338 0.000 + 247.6757 38.9679 -2.032 0.116 0.280 0.335 0.000 + 245.9659 38.9379 -2.475 1.162 0.392 0.675 0.000 + 247.5134 40.6049 -2.770 -0.627 0.373 0.503 0.000 + 249.8428 38.9961 -0.367 0.895 0.251 0.424 0.000 + 249.2787 38.3748 -0.530 0.252 0.276 0.446 0.000 + 248.5966 40.5069 0.005 0.416 0.515 0.391 0.000 + 246.7013 37.1857 -1.589 -0.012 0.643 0.943 0.000 + 247.9674 40.5154 -2.435 0.224 0.271 0.317 0.000 + 248.2892 41.2605 -0.856 -0.823 0.354 0.384 0.000 + 247.7792 38.2448 -1.109 0.366 0.328 0.380 0.000 + 247.4723 37.0496 -1.186 0.159 0.284 0.328 0.000 + 248.7234 40.6362 0.027 0.593 0.227 0.359 0.000 + 248.1214 40.4224 -1.430 0.228 0.430 0.301 0.000 + 248.1633 41.7370 -1.710 -0.404 0.872 0.727 0.000 + 248.3567 38.4018 -1.112 -0.263 0.375 0.426 0.000 + 248.6872 41.8277 0.051 0.770 0.438 0.328 0.000 + 248.3637 39.2679 -1.077 0.632 0.233 0.273 0.000 + 250.4515 38.5739 0.028 0.120 0.224 0.257 0.000 + 250.6940 37.2602 -0.156 0.244 0.379 0.248 0.000 + 246.9875 38.3967 -1.610 0.543 0.558 0.471 0.000 + 248.4044 40.1444 -2.177 0.424 1.355 0.796 0.000 + 249.8229 36.9991 0.155 0.418 0.351 0.359 0.000 + 248.1644 39.7106 -1.554 0.652 0.285 0.384 0.000 + 248.0288 41.2196 -0.554 -0.587 0.237 0.272 0.000 + 248.3135 40.2986 -1.710 0.200 0.481 0.472 0.000 + 248.5054 40.6442 -0.297 0.238 0.390 0.365 0.000 + 246.6674 41.8166 -3.030 -0.961 0.274 0.300 0.000 + 248.0193 41.2634 -0.235 0.555 0.286 0.290 0.000 + 248.8156 41.6650 0.104 0.239 0.332 0.353 0.000 + 250.0051 40.2941 0.228 1.176 0.283 0.397 0.000 + 247.8351 41.7877 -1.722 -1.551 0.308 0.507 0.000 + 246.3869 37.0131 -1.556 0.262 0.273 0.329 0.000 + 247.7021 40.5324 -2.306 0.355 0.387 1.271 0.000 + 249.2932 40.3516 -0.003 0.357 0.381 0.326 0.000 + 247.9160 37.6275 -0.509 0.146 0.285 0.309 0.000 + 250.4742 40.4567 0.348 0.621 0.262 0.288 0.000 + 248.5902 40.8021 0.347 -0.460 0.318 0.343 0.000 + 237.6643 47.6006 4.980 5.151 0.619 0.967 0.000 + 240.8004 34.2497 -28.217 28.907 0.335 0.458 0.000 + 240.7278 50.2812 2.018 0.699 0.347 0.589 0.000 + 248.8758 52.0427 0.681 -0.919 1.106 1.548 0.000 + 245.4710 36.5008 -1.874 0.366 0.200 0.236 0.000 + 236.4575 48.4534 7.365 5.437 0.669 0.825 0.000 + 242.8208 39.5579 -2.986 0.876 0.200 0.203 0.000 + 240.3631 39.3459 -6.352 5.868 0.322 0.213 0.000 + 240.5074 39.7307 -6.091 4.645 0.200 0.234 0.000 + 242.7112 40.7113 -4.546 1.205 0.478 0.559 0.000 + 240.0381 39.5244 -7.814 5.324 0.599 0.432 0.000 + 240.7234 50.2636 1.564 -0.142 0.210 0.271 0.000 + 246.7276 50.4088 1.645 -0.918 0.200 0.200 0.000 + 240.2197 48.1004 2.064 0.497 0.337 0.355 0.000 + 240.7407 39.1578 -5.934 5.193 0.200 0.200 0.000 + 240.7066 47.6115 2.681 0.531 0.412 0.431 0.000 + 237.0300 46.6754 5.290 5.190 0.368 0.315 0.000 + 242.6676 46.9545 1.136 -0.425 0.429 0.690 0.000 + 242.4053 47.5637 1.681 0.714 0.514 0.509 0.000 + 239.4530 46.9835 3.090 1.797 0.449 0.431 0.000 + 237.4449 48.8284 5.011 3.362 0.366 0.418 0.000 + 236.9814 48.5327 6.367 4.790 1.015 1.324 0.000 + 240.4861 41.2916 -3.869 3.352 0.205 0.276 0.000 + 246.5869 38.6457 -2.733 -0.273 0.335 0.741 0.000 + 237.8125 47.7088 4.465 3.197 0.353 0.291 0.000 + 237.1105 46.1135 5.036 4.600 0.598 0.538 0.000 + 241.2360 38.7587 -5.839 5.245 0.235 0.235 0.000 + 240.2812 41.2485 -4.064 4.563 0.200 0.305 0.000 + 237.7263 46.5547 3.490 4.877 0.717 0.643 0.000 + 236.3976 46.9776 9.432 7.368 0.491 0.596 0.000 + 237.6669 48.3845 4.653 2.983 0.562 0.487 0.000 + 240.0677 46.7618 2.302 2.064 0.537 0.595 0.000 + 237.1562 47.0465 6.842 6.229 0.567 0.407 0.000 + 240.8264 46.8104 1.523 1.345 0.407 0.436 0.000 + 237.1611 47.0479 5.114 4.961 0.680 0.338 0.000 + 237.4308 47.8035 5.181 3.834 0.297 0.362 0.000 + 240.1621 47.2351 2.344 1.268 0.333 0.465 0.000 + 239.7569 39.1484 -9.155 7.358 0.200 0.200 0.000 + 237.8633 47.6807 5.648 3.753 0.634 0.487 0.000 + 241.6168 47.1211 1.676 0.996 0.422 0.456 0.000 + 242.5794 47.6657 1.653 0.262 0.447 0.366 0.000 + 239.9786 46.3038 2.025 2.017 0.429 0.436 0.000 + 241.1056 38.7297 -5.969 5.623 0.200 0.200 0.000 + 241.0299 39.0364 -5.793 5.076 0.200 0.200 0.000 + 242.9324 47.2279 1.595 0.521 0.355 0.634 0.000 + 249.5627 44.8010 1.105 -0.949 0.445 0.667 0.000 + 237.4372 45.7796 3.828 5.792 0.464 0.307 0.000 + 242.4311 37.8500 -3.544 1.848 0.200 0.200 0.000 + 237.7953 47.9769 5.615 1.170 0.685 1.323 0.000 + 241.9655 33.9738 -23.287 27.401 0.529 0.534 0.000 + 247.4863 33.6110 -1.501 0.876 0.200 0.200 0.000 + 242.1223 40.5581 -4.128 1.775 0.200 0.200 0.000 + 241.5324 40.0246 -4.737 2.638 0.200 0.200 0.000 + 237.8392 52.1660 0.734 1.526 0.390 0.416 0.000 + 240.1760 39.9625 -5.475 4.739 0.792 0.485 0.000 + 238.9958 35.9726 -27.101 34.269 0.217 0.213 0.000 + 245.0246 41.1669 -2.809 -0.030 0.483 0.586 0.000 + 244.3875 33.0719 -7.241 6.463 0.472 0.654 0.000 + 237.8604 52.1290 0.053 0.820 0.318 0.299 0.000 + 242.1171 37.6083 -4.196 3.009 0.300 0.200 0.000 + 241.9193 39.3808 -3.812 2.047 0.200 0.202 0.000 + 233.3951 50.2124 4.743 3.388 0.330 0.444 0.000 + 247.2524 44.6291 0.169 -0.660 0.291 0.281 0.001 + 239.5953 41.5571 -4.026 4.266 0.211 0.200 0.000 + 248.6633 35.5121 -1.383 0.509 0.235 0.200 0.000 + 236.7489 49.3517 4.226 2.609 0.616 1.668 0.000 + 240.1740 39.9438 -6.733 4.666 0.253 0.238 0.000 + 240.2971 39.5202 -6.646 5.044 0.393 0.340 0.000 + 249.1506 43.5010 -1.358 -1.105 0.556 0.505 0.000 + 249.4631 41.7814 0.977 0.687 0.423 0.555 0.000 + 250.7917 41.5811 -0.342 -1.067 0.555 0.608 0.000 + 251.2382 41.0604 -0.356 -0.252 0.627 0.564 0.000 + 250.7326 45.1221 0.537 -0.261 0.652 0.793 0.000 + 240.8377 38.9920 -6.006 6.202 0.200 0.200 0.000 + 242.4830 38.9504 -3.034 1.035 0.200 0.200 0.000 + 243.0302 34.0057 -15.072 16.134 0.247 0.275 0.000 + 244.8008 32.0277 -24.939 26.248 0.238 0.222 0.000 + 251.4631 45.8038 0.273 -0.577 0.307 0.306 0.000 + 246.8750 37.3558 -1.543 0.005 0.200 0.217 0.000 + 242.5098 37.5582 -3.939 1.738 0.304 0.218 0.000 + 242.6908 33.8374 -22.369 24.313 0.207 0.210 -0.066 + 242.8608 34.0138 -17.572 19.937 0.213 0.216 -0.053 + 241.1117 34.2850 -27.693 29.203 0.226 0.226 -0.021 + 241.7062 37.2326 -7.202 6.242 0.638 0.564 -0.026 + 241.7164 37.2320 -6.818 6.200 0.423 0.491 -0.025 + 237.5478 39.0280 -9.736 8.685 0.558 0.831 -0.020 + 242.7832 34.0182 -19.624 20.273 0.246 0.265 -0.017 + 239.9819 35.4876 -19.305 22.717 0.640 0.694 -0.022 + 236.7959 39.1326 -18.570 22.590 0.358 0.375 -0.021 + 239.7432 34.7985 -29.232 33.064 0.395 0.402 -0.022 + 241.1707 34.2891 -27.457 28.939 0.251 0.256 -0.032 + 236.9662 39.1880 -15.593 15.844 0.503 0.475 -0.020 + 237.3299 39.6671 -9.658 6.967 0.365 0.386 -0.014 + 239.3024 35.3858 -26.463 34.655 0.378 0.372 -0.020 + 238.7155 35.6646 -28.999 37.049 0.915 0.777 -0.018 + 241.1136 34.2145 -28.416 28.400 0.254 0.256 0.002 + 241.3995 34.1379 -27.748 28.250 0.255 0.265 0.035 + 239.5424 34.8993 -29.525 33.285 0.670 0.596 -0.002 + 241.2637 37.4562 -7.180 7.210 0.383 0.411 -0.014 + 245.1932 30.9305 -29.881 27.404 0.258 0.240 -0.051 + 236.9827 39.4263 -15.191 13.226 0.464 0.420 -0.021 + 239.5469 35.5518 -25.013 32.443 0.443 0.558 -0.019 + 237.4047 38.1860 -17.295 24.026 0.441 0.421 -0.022 + 238.2274 36.5897 -28.379 36.433 0.783 1.348 0.001 + 239.7267 35.7083 -20.510 25.883 0.410 0.515 -0.023 + 244.8900 41.0994 -2.382 0.391 1.074 0.983 -0.019 + 237.5932 38.4411 -11.899 15.387 0.893 0.885 -0.024 + 240.9447 37.8564 -9.000 11.043 1.096 0.372 -0.017 + 247.0799 43.5082 -1.309 -0.956 0.327 0.283 -0.008 + 242.7268 34.1835 -16.285 17.100 0.264 0.278 -0.005 + 242.9855 34.3510 -11.935 13.161 0.264 0.263 -0.024 + 237.7837 37.3123 -23.966 30.610 0.351 0.368 -0.021 + 239.9309 34.6050 -29.955 32.533 0.478 0.628 -0.010 + 238.1554 37.1096 -21.069 26.543 0.464 0.473 -0.020 + 241.3671 37.5445 -5.259 6.977 0.402 0.393 -0.021 + 237.4015 37.9232 -20.924 26.843 0.486 0.462 -0.023 + 237.8328 37.3245 -22.420 29.306 0.385 0.366 -0.021 + 240.9395 37.6560 -10.383 9.017 0.650 0.453 -0.020 + 243.5928 34.0551 -7.620 10.506 0.269 0.272 -0.023 + 237.6405 37.2284 -26.896 34.850 0.471 0.371 -0.022 + 236.1180 41.1534 1.358 11.438 0.516 0.629 -0.020 + 236.1648 39.7769 -27.430 26.200 1.654 0.591 -0.020 + 239.7003 34.9599 -28.709 32.425 0.433 0.416 -0.012 + 239.9329 35.0756 -26.738 29.936 0.422 0.420 -0.019 + 237.1313 38.0797 -23.467 32.705 0.458 0.507 -0.016 + 237.6338 37.8100 -18.540 24.832 0.349 0.353 -0.028 + 236.7617 39.4547 -17.340 15.944 0.367 0.378 -0.016 + 238.1302 37.5413 -14.092 18.232 0.447 0.433 -0.021 + 239.4746 34.6086 -30.532 34.381 0.432 0.397 -0.021 + 239.6487 35.7456 -20.832 27.037 0.481 0.630 -0.019 + 237.1170 38.3132 -18.791 28.085 0.276 0.291 -0.059 + 238.1287 37.4989 -14.438 16.600 0.492 0.588 -0.023 + 247.0540 42.0777 -1.993 -0.830 0.533 0.529 -0.003 + 240.9555 37.9169 -8.872 10.676 0.443 0.511 -0.016 + 236.9851 37.9964 -25.971 36.641 0.424 0.522 -0.023 + 237.2635 38.0927 -19.672 28.092 0.471 0.539 -0.023 + 239.6498 35.8307 -13.992 20.524 0.924 0.622 -0.016 + 236.5992 38.6533 -23.762 34.089 0.372 0.385 -0.047 + 237.7271 38.5086 -11.387 14.319 0.280 0.292 -0.067 + 238.0058 37.0586 -25.321 33.209 0.280 0.281 -0.034 + 242.8719 34.3440 -12.707 14.214 0.280 0.282 -0.025 + 236.7990 39.7954 -12.400 8.690 0.408 0.407 -0.018 + 239.9612 39.7909 -7.575 5.172 0.500 0.558 -0.015 + 240.5210 33.2318 -30.196 34.901 0.281 0.253 -0.090 + 237.8466 37.2902 -23.054 29.663 0.496 0.377 -0.023 + 239.2924 35.9489 -24.660 33.194 0.413 0.611 -0.018 + 239.3594 35.2360 -28.741 34.845 0.851 1.606 0.014 + 238.0390 37.0731 -23.995 32.037 0.283 0.284 -0.031 + 240.2396 35.0363 -25.610 25.040 0.548 0.496 -0.016 + 240.8849 37.8475 -9.893 10.292 0.458 0.519 -0.017 + 242.8611 33.9469 -18.947 20.194 0.445 0.485 0.006 + 238.4441 37.4773 -11.659 9.590 0.473 0.541 -0.020 + 239.7333 34.6858 -29.256 33.292 0.433 0.424 -0.016 + 241.7637 37.5722 -4.377 4.545 0.285 0.285 -0.028 + 242.1161 38.7599 -3.130 1.419 0.417 0.418 -0.016 + 236.0222 40.3064 -10.233 21.410 0.821 0.540 -0.022 + 241.1060 37.8752 -5.885 11.673 0.385 0.410 -0.014 + 242.4869 34.0182 -22.662 23.227 0.287 0.281 -0.017 + 237.8076 39.7685 -10.253 7.556 0.785 0.950 -0.005 + 242.8307 34.1339 -15.692 16.071 0.288 0.294 -0.038 + 237.6055 37.1830 -27.554 35.247 0.412 0.411 -0.027 + 237.8050 37.1469 -25.921 33.522 0.367 0.451 -0.024 + 238.0039 37.1852 -21.484 28.007 0.289 0.293 -0.027 + 240.6573 34.2983 -29.014 29.061 0.556 0.649 0.007 + 246.7492 44.5039 0.190 -0.133 0.488 0.490 0.029 + 237.1873 38.0873 -21.947 29.891 0.435 0.598 -0.028 + 237.7408 38.3239 -11.812 14.612 0.496 0.519 -0.022 + 238.1900 37.5940 -11.864 12.869 0.479 0.403 -0.020 + 243.1639 33.4841 -22.740 25.772 0.290 0.289 -0.047 + 237.5419 37.6094 -23.172 30.806 0.458 0.447 -0.024 + 237.9484 36.9498 -27.143 34.087 0.391 0.426 -0.022 + 237.9772 37.2170 -21.239 28.124 0.291 0.295 -0.031 + 239.4040 36.0789 -9.047 13.460 0.803 0.442 -0.019 + 240.7559 38.9881 -6.036 5.833 0.499 0.550 -0.017 + 241.8480 37.2707 -6.255 4.447 0.291 0.293 -0.025 + 235.8826 40.9750 3.470 16.490 0.490 0.788 -0.029 + 238.5982 36.8933 -13.720 12.450 0.395 0.525 -0.009 + 241.6916 38.4564 -4.003 3.481 0.586 0.476 -0.015 + 242.9321 34.4538 -11.533 12.967 0.292 0.295 -0.005 + 246.0733 44.1787 -0.808 -0.348 0.253 0.367 -0.042 + 235.7340 40.2568 -19.869 31.750 1.212 0.790 -0.021 + 236.8506 38.4635 -20.909 32.359 0.293 0.315 -0.084 + 239.7349 35.7563 -16.594 21.208 0.555 0.405 -0.017 + 241.0414 37.8963 -5.766 10.677 2.022 0.591 -0.015 + 243.3382 33.5560 -19.758 22.954 0.293 0.312 -0.030 + 246.9443 43.6646 -1.230 -0.827 0.255 0.260 -0.027 + 239.4596 35.9566 -25.344 32.485 0.473 0.448 -0.024 + 240.1624 35.0031 -25.417 27.667 0.597 0.430 -0.019 + 240.2337 35.4136 -14.211 16.683 0.735 0.631 -0.017 + 241.1909 37.9791 -6.563 9.992 0.488 0.486 -0.018 + 237.4707 38.3914 -13.270 18.518 0.295 0.317 -0.065 + 237.4725 38.2364 -15.525 21.818 0.518 0.443 -0.024 + 240.0056 40.2450 -6.344 4.793 0.739 0.598 -0.016 + 240.7677 37.5184 -10.068 8.837 0.479 0.459 -0.014 + 242.6196 34.0036 -21.353 23.134 0.295 0.313 -0.014 + 237.7454 38.0302 -13.927 16.646 1.752 0.906 -0.035 + 237.8971 38.3979 -10.358 8.590 0.512 0.475 -0.018 + 238.0232 37.2057 -20.672 26.683 0.296 0.303 -0.024 + 238.0762 36.9823 -26.771 32.401 0.923 1.007 -0.034 + 238.1675 37.0116 -24.359 31.170 0.296 0.300 -0.027 + 238.5287 40.8176 -6.371 5.441 0.777 0.781 -0.032 + 238.6428 36.9258 -11.372 9.826 0.533 0.517 -0.009 + 247.0500 43.5952 -1.483 -1.121 0.288 0.298 0.015 + 236.1174 40.6690 -1.836 14.396 0.726 0.597 -0.026 + 236.4765 40.4602 -8.908 8.641 0.909 0.749 -0.024 + 246.1909 41.4297 -2.653 -0.407 0.562 0.591 -0.005 + 247.2428 43.9596 -0.609 -1.006 0.287 0.472 -0.014 + 236.4455 40.3340 -10.302 10.052 0.514 0.655 -0.026 + 239.2789 38.3397 -9.981 7.144 0.516 0.568 -0.023 + 239.5648 35.9094 -12.650 18.700 0.550 0.436 -0.023 + 242.7790 34.0051 -18.309 22.701 0.298 0.319 -0.035 + 238.1910 37.0690 -21.223 27.486 0.486 0.448 -0.016 + 239.6209 40.1757 -6.641 5.318 0.299 0.309 -0.013 + 236.3068 40.1203 -15.343 16.565 0.559 0.519 -0.018 + 237.1199 38.6262 -16.279 24.974 0.301 0.329 -0.058 + 238.0053 38.4167 -8.361 8.540 0.717 0.566 -0.021 + 239.5578 35.8850 -23.019 29.197 0.407 0.413 -0.023 + 239.8219 35.6861 -16.332 21.029 0.511 0.534 -0.016 + 240.0980 35.1334 -25.060 27.021 0.662 0.682 -0.020 + 247.9320 43.4810 -1.562 -1.303 0.289 0.371 -0.034 + 236.1346 40.8820 -2.483 12.177 1.665 0.951 -0.024 + 238.0801 37.0042 -25.151 32.718 0.302 0.301 -0.026 + 238.0913 37.1039 -22.302 28.888 0.394 0.394 -0.012 + 236.0252 40.7266 0.624 15.102 0.751 0.636 -0.038 + 238.0263 37.4801 -19.117 23.541 0.601 0.415 -0.021 + 238.0853 37.8819 -11.705 11.952 0.565 0.530 -0.030 + 238.6250 37.5083 -10.536 8.667 0.399 0.403 -0.025 + 241.0465 37.8393 -9.210 10.594 1.378 0.404 -0.023 + 247.7699 43.8390 -1.138 -1.651 0.450 0.472 -0.013 + 239.4268 35.4557 -26.120 32.906 0.618 0.449 -0.012 + 242.6038 34.0383 -20.836 23.027 0.304 0.311 -0.013 + 242.6611 34.2171 -16.195 17.438 0.304 0.309 -0.007 + 237.8767 37.3627 -20.734 26.608 0.576 0.499 -0.040 + 241.3023 34.1482 -26.757 29.478 0.305 0.319 0.046 + 242.2877 34.1066 -21.756 21.046 0.305 0.303 -0.025 + 245.0563 44.2264 -0.779 -0.192 0.415 0.278 0.052 + 237.7348 37.8718 -17.572 22.986 0.400 0.605 -0.020 + 241.1729 37.8897 -3.281 10.106 2.209 0.469 -0.022 + 242.6580 34.2124 -17.696 18.893 0.306 0.305 -0.023 + 237.1016 38.1726 -21.179 30.980 0.307 0.329 -0.081 + 237.4961 37.5091 -25.690 34.058 0.453 0.425 -0.018 + 237.7968 38.3126 -11.848 14.185 0.453 0.681 -0.007 + 237.5443 38.2232 -15.195 19.164 0.500 0.671 -0.007 + 237.8248 38.3507 -10.638 10.956 0.519 0.451 -0.009 + 237.9385 37.8150 -13.714 15.847 0.523 0.563 -0.025 + 239.8233 38.6334 -9.531 7.906 0.598 0.584 -0.004 + 244.8698 38.8899 -2.324 -0.005 0.533 0.622 -0.012 + 249.6065 44.5522 0.025 0.575 0.309 0.314 -0.013 + 238.2174 37.1864 -19.667 22.571 0.677 0.643 -0.029 + 236.3185 42.1045 -0.617 8.974 0.596 0.503 -0.049 + 237.0636 40.3696 -9.244 7.159 0.918 0.579 -0.043 + 237.7006 38.2711 -12.514 15.427 0.737 0.819 -0.047 + 239.6939 35.8956 -11.670 16.895 0.589 0.487 -0.015 + 241.0319 37.5444 -8.939 5.098 0.925 0.475 -0.015 + 238.8221 37.4642 -9.550 7.735 0.466 0.793 -0.023 + 249.8069 44.6481 -0.380 0.151 0.319 0.718 -0.006 + 236.2216 43.0019 1.229 8.507 0.279 0.293 -0.021 + 237.7780 37.8836 -14.483 18.743 0.401 0.549 -0.026 + 237.9308 37.7324 -15.224 17.396 0.677 0.591 -0.023 + 240.0773 39.1108 -8.243 6.950 0.511 0.529 -0.023 + 240.9119 37.2912 -9.395 7.721 0.521 0.455 -0.005 + 242.3590 36.3069 -5.743 5.320 0.396 0.510 -0.015 + 244.0421 31.9730 -26.792 29.980 0.615 0.265 -0.013 + 245.0465 39.2897 -3.286 0.211 0.536 0.650 -0.011 + 235.7980 40.7154 3.113 20.431 0.634 0.738 -0.023 + 238.5467 36.8722 -15.771 22.092 0.889 0.634 -0.007 + 240.2471 33.9948 -28.294 33.566 0.315 0.266 -0.058 + 238.2776 37.9540 -10.763 8.318 0.425 0.798 -0.025 + 241.5706 37.7113 -4.292 6.038 0.649 0.434 -0.019 + 248.9796 39.2933 0.206 0.029 0.537 0.610 -0.005 + 240.9090 37.8867 -9.354 10.398 0.498 0.536 -0.038 + 243.8391 40.0836 -3.103 0.224 0.474 0.509 -0.016 + 237.2318 48.1408 5.242 4.156 0.333 0.357 -0.023 + 241.0939 37.6284 -8.125 9.592 0.442 0.853 -0.016 + 241.1812 37.6312 -6.167 9.214 0.500 0.481 -0.013 + 241.4718 37.3692 -7.092 6.988 0.458 0.443 -0.034 + 241.8643 36.0233 -8.948 9.718 0.469 0.521 -0.010 + 243.8391 31.2568 -30.864 31.234 0.271 0.277 -0.010 + 245.3480 39.9017 -2.507 -0.412 0.531 0.607 -0.009 + 246.4805 31.3538 -1.155 1.287 0.319 0.280 -0.049 + 247.5295 43.2229 -1.794 -0.989 0.267 0.350 -0.009 + 238.4337 37.7553 -10.458 8.708 0.389 0.653 -0.024 + 240.8396 38.0452 -9.336 11.194 0.453 0.453 -0.023 + 249.5661 44.7977 1.911 -1.235 0.320 0.332 -0.030 + 236.4029 42.7188 0.252 8.311 0.391 0.499 -0.021 + 237.0147 46.6707 4.599 5.220 0.560 0.276 -0.006 + 239.5353 35.9428 -11.333 17.871 0.413 0.412 -0.025 + 247.3667 43.8304 -1.311 -1.227 0.270 0.352 -0.004 + 237.0924 46.9669 5.374 5.141 0.542 0.332 -0.017 + 238.5058 36.8411 -17.030 24.275 0.812 0.860 -0.009 + 239.3176 36.0297 -26.151 33.485 0.722 0.643 -0.011 + 239.9479 34.5348 -29.680 32.458 0.629 0.404 -0.009 + 240.0406 35.5034 -16.496 19.983 0.525 0.527 -0.014 + 242.7800 34.2862 -13.374 14.796 0.322 0.324 -0.001 + 243.7880 31.1008 -31.221 31.751 0.374 0.361 -0.013 + 244.6570 32.3559 -19.820 25.748 0.840 0.600 -0.005 + 246.8067 43.5578 -1.417 -1.202 0.364 0.596 0.051 + 238.2125 37.1371 -20.723 24.519 0.372 0.684 -0.016 + 241.0548 37.6416 -9.568 6.334 1.676 2.649 -0.015 + 242.8257 36.2941 -3.826 3.609 0.679 0.787 -0.010 + 244.4812 33.2309 -3.760 1.705 0.323 0.336 -0.038 + 244.6690 41.0543 -3.114 -0.452 1.483 0.995 -0.007 + 246.4404 44.2661 -0.562 -0.258 0.282 0.319 0.001 + 249.6461 44.4132 -0.409 0.220 0.723 0.778 -0.005 + 237.7760 40.1599 -8.581 6.878 0.324 0.362 -0.055 + 238.0982 39.1433 -9.270 5.840 0.324 0.340 0.003 + 239.8578 39.3577 -8.842 6.735 0.572 0.587 -0.003 + 241.7304 29.0258 -36.027 35.712 0.324 0.305 -0.023 + 243.2645 33.5454 -20.675 24.615 0.324 0.323 -0.027 + 235.4347 42.8366 6.331 13.469 0.295 0.366 -0.048 + 239.1683 35.3587 -27.868 35.747 0.564 0.462 -0.014 + 239.4159 35.9704 -24.566 32.257 0.503 0.748 -0.017 + 241.2402 37.5727 -5.961 7.407 0.813 0.854 -0.019 + 237.5651 40.9571 -6.512 6.156 1.000 1.101 -0.031 + 238.1612 37.0501 -23.170 29.338 0.814 0.622 -0.017 + 239.6528 35.9137 -11.555 17.931 0.796 0.560 -0.018 + 243.3681 32.1179 -27.929 30.538 0.366 0.370 -0.014 + 243.7200 44.9742 -0.023 -0.693 0.321 0.415 0.013 + 244.2802 33.6637 -4.746 2.157 0.328 0.302 -0.053 + 244.6131 31.7719 -25.534 28.483 0.504 0.491 -0.013 + 246.3333 38.7947 -2.556 0.042 0.457 0.399 -0.012 + 236.3025 40.5789 -5.580 9.295 0.622 0.531 -0.025 + 237.7706 38.0427 -14.679 17.719 1.001 1.312 -0.014 + 237.8163 37.6908 -18.729 22.844 0.385 0.651 -0.021 + 238.3790 36.8918 -25.797 31.762 0.329 0.332 -0.014 + 240.9743 37.8692 -8.657 11.140 0.578 0.500 -0.019 + 243.2543 39.0562 -2.957 0.414 0.555 0.575 -0.009 + 243.6937 39.5337 -2.582 0.416 0.534 0.639 -0.013 + 244.2401 31.4930 -29.002 30.285 0.616 0.275 -0.005 + 249.0504 43.8898 -1.585 -1.959 0.446 0.693 -0.002 + 240.0642 34.5265 -29.878 31.654 0.907 0.424 -0.007 + 240.7410 35.8191 -11.575 10.740 0.330 0.338 0.025 + 242.0128 37.0924 -5.332 4.783 0.330 0.331 -0.012 + 247.4063 38.6023 -1.981 0.096 0.398 0.529 -0.012 + 249.7429 44.7441 -0.990 -1.604 0.330 0.340 -0.007 + 238.5685 40.2713 -8.832 7.603 0.772 1.037 -0.016 + 239.7394 35.6050 -22.535 26.964 0.524 0.535 -0.014 + 244.2612 30.9799 -30.919 31.300 0.394 0.387 -0.013 + 249.3858 44.6123 0.767 -1.095 0.338 0.527 -0.005 + 239.6335 40.7992 -5.537 4.736 0.547 1.107 -0.018 + 236.9691 39.7289 -11.698 7.734 0.494 0.432 -0.009 + 237.4232 40.6476 -8.125 6.038 1.311 0.666 -0.071 + 239.5017 35.9496 -22.607 25.435 0.679 0.878 -0.024 + 240.7498 37.9315 -9.604 9.462 0.811 0.493 -0.022 + 241.7107 28.8851 -36.038 35.091 0.333 0.279 -0.046 + 238.2075 37.9215 -10.736 8.623 0.393 0.450 -0.032 + 238.5156 35.9922 -28.515 34.861 1.009 1.069 -0.007 + 240.6060 35.3985 -12.847 11.450 0.334 0.279 0.006 + 241.9537 37.7370 -4.096 3.733 0.334 0.335 -0.024 + 244.0624 31.5515 -28.660 30.489 0.334 0.332 -0.015 + 240.0432 35.4411 -19.278 21.971 0.335 0.332 -0.025 + 243.7769 31.1915 -31.224 31.609 0.335 0.333 -0.018 + 244.9457 31.4924 -26.096 27.579 0.335 0.332 -0.014 + 247.3022 43.3256 -1.797 -0.900 0.351 0.274 -0.017 + 249.5270 44.5200 -0.189 -1.664 0.335 0.341 -0.003 + 236.1637 42.7918 1.120 9.050 0.321 0.391 -0.087 + 246.3228 43.2924 -1.827 -0.308 0.403 0.381 -0.018 + 237.7959 38.3986 -10.569 11.671 0.337 0.382 -0.087 + 238.0534 37.1103 -24.659 28.347 0.337 0.338 -0.018 + 239.5375 35.8877 -22.507 29.988 0.462 0.592 -0.022 + 239.6750 39.3179 -9.175 6.832 0.616 0.642 -0.016 + 241.8678 36.4661 -8.312 8.755 0.337 0.337 -0.021 + 243.9915 33.6120 -9.705 8.208 0.337 0.344 -0.044 + 239.7775 35.7878 -14.115 18.742 0.431 0.412 -0.014 + 243.6780 31.3610 -30.499 31.833 0.441 0.371 -0.007 + 235.7213 47.3042 15.146 12.099 0.502 0.411 -0.017 + 236.5971 48.1398 6.346 4.247 0.312 0.335 0.000 + 242.1897 37.5237 -3.975 2.750 0.339 0.341 -0.005 + 249.3644 43.8049 -0.642 -0.588 0.325 1.000 -0.014 + 249.4308 44.4050 -1.598 -1.332 0.339 0.363 -0.031 + 235.8248 43.1236 2.806 10.275 0.350 0.565 -0.031 + 238.1979 38.7172 -11.020 9.176 0.340 0.351 -0.026 + 238.4317 36.8734 -21.104 27.282 0.791 0.637 -0.005 + 240.9422 39.5793 -5.201 3.873 0.582 0.600 -0.007 + 243.6956 31.4625 -30.186 31.535 0.340 0.340 -0.014 + 245.9760 44.1978 -1.064 -0.462 0.287 0.361 0.050 + 241.7171 39.3959 -4.078 2.438 0.581 0.605 -0.006 + 244.2009 39.3806 -2.519 0.190 0.551 0.700 -0.005 + 245.7465 40.8855 -2.279 -0.037 0.997 0.931 -0.014 + 246.3703 39.0813 -2.530 0.192 0.545 0.641 0.001 + 248.7847 45.0956 1.019 -0.072 0.341 0.367 -0.017 + 248.9248 44.9639 0.939 1.333 0.504 0.444 -0.001 + 238.3246 37.6942 -11.797 9.026 0.569 0.697 -0.026 + 235.4012 48.3702 10.270 7.297 0.355 0.389 -0.004 + 239.5048 34.7665 -29.949 34.828 0.794 0.404 -0.007 + 247.7579 39.1399 -2.284 0.278 0.572 0.635 0.004 + 235.5724 42.4207 4.890 12.648 0.332 0.500 -0.053 + 235.7055 40.4977 -2.697 28.793 1.132 0.526 -0.015 + 240.3020 39.5330 -6.378 5.277 0.598 0.626 -0.005 + 241.1562 37.4905 -8.517 5.894 0.439 1.260 -0.015 + 241.2368 37.6995 -4.457 8.365 1.126 0.557 -0.019 + 242.8553 33.4302 -24.890 27.030 0.344 0.352 -0.026 + 236.5065 40.8153 -4.729 8.595 0.895 0.967 -0.047 + 240.1491 35.3581 -18.258 20.793 0.703 0.703 -0.007 + 241.1888 37.6149 -4.602 7.372 1.655 1.511 -0.023 + 244.4816 32.7984 -14.021 20.752 0.345 0.357 -0.040 + 248.7644 44.8012 0.013 -0.191 0.331 0.555 -0.010 + 236.5241 41.4002 -0.968 9.540 0.958 0.854 -0.028 + 239.7648 39.8094 -9.641 6.339 0.346 0.347 0.030 + 240.0349 34.7229 -29.578 30.007 0.346 0.341 -0.012 + 241.8990 36.9141 -6.103 5.951 0.786 0.674 -0.009 + 246.0129 44.0075 -1.439 -0.567 0.473 0.476 -0.027 + 236.8587 47.2366 5.568 5.594 0.642 0.491 -0.010 + 242.7344 34.0632 -18.678 19.359 0.347 0.382 0.015 + 249.5451 44.6406 1.723 -1.039 0.347 0.378 -0.025 + 236.6447 43.2456 0.470 7.055 0.356 0.356 -0.031 + 236.9351 43.3723 1.278 6.880 0.345 0.408 -0.043 + 238.0059 40.5014 -7.441 5.888 0.348 0.384 -0.047 + 238.0181 41.2597 -5.338 5.640 0.701 0.632 -0.007 + 241.2968 39.9954 -4.998 2.414 0.854 0.932 -0.009 + 241.8805 36.6026 -7.597 8.152 0.426 0.463 -0.015 + 249.3872 43.7613 -1.036 -1.121 0.348 0.361 -0.019 + 235.9668 41.5218 3.738 10.973 0.902 0.882 -0.054 + 238.1260 36.9461 -26.741 33.145 0.349 0.357 0.071 + 242.0143 38.8202 -3.519 1.645 0.531 0.511 -0.022 + 244.0239 39.5432 -2.928 0.666 0.556 0.668 -0.003 + 245.7958 39.0968 -2.444 0.029 0.559 0.629 -0.007 + 236.5909 47.9392 6.454 4.039 0.424 0.397 0.003 + 241.3563 34.2636 -26.192 28.484 0.350 0.355 -0.005 + 248.0797 43.6572 -1.364 -1.505 0.347 0.409 -0.026 + 248.8886 38.8326 -0.331 0.522 0.558 0.729 0.003 + 238.2053 41.6434 -2.946 5.286 0.560 0.473 0.002 + 238.2620 37.2192 -19.288 21.719 0.670 0.621 -0.024 + 238.8629 46.2269 2.674 2.523 0.324 0.356 -0.014 + 242.2132 36.5377 -6.489 4.797 0.611 0.593 -0.013 + 242.3079 35.3370 -8.295 11.575 1.139 0.917 -0.008 + 243.3581 33.9249 -11.992 18.204 0.353 0.370 -0.036 + 249.3011 44.7382 0.250 0.515 0.407 0.695 -0.015 + 249.5608 44.6306 1.117 -0.612 0.353 0.387 -0.013 + 237.2617 43.3435 0.141 6.125 0.413 0.425 -0.097 + 237.6178 37.5922 -21.304 27.802 0.530 0.545 -0.021 + 237.8854 38.3312 -11.917 10.146 1.554 0.615 -0.037 + 240.2099 39.3673 -8.288 6.552 0.558 0.574 -0.010 + 243.3787 39.4768 -2.539 0.637 0.581 0.729 -0.002 + 246.9542 39.2829 -2.126 0.110 0.560 0.597 0.004 + 248.3208 45.2324 0.752 -0.056 0.464 0.460 0.011 + 249.3563 44.4336 -0.816 -0.755 0.354 0.389 -0.022 + 236.7404 47.9550 6.067 4.984 0.383 0.363 -0.004 + 237.5358 43.1600 0.697 5.630 0.341 0.454 -0.035 + 237.8718 37.9369 -12.667 16.166 0.421 0.556 -0.014 + 242.4535 36.7594 -3.953 3.230 0.355 0.356 -0.017 + 243.4359 34.1499 -7.222 12.446 0.355 0.357 0.020 + 248.8955 44.7954 0.277 1.156 0.355 0.396 -0.005 + 238.1557 37.1110 -20.428 25.976 0.791 0.760 -0.032 + 238.3123 43.6824 -0.388 4.624 0.407 0.415 -0.065 + 239.2605 36.6979 -9.332 9.282 0.356 0.358 -0.032 + 246.2614 42.5666 -2.572 -0.456 0.373 0.308 0.006 + 246.7783 43.5792 -1.676 -0.944 0.348 0.450 0.009 + 249.7238 44.5172 0.221 0.453 0.356 0.373 -0.028 + 239.3347 36.6111 -9.322 9.040 0.357 0.358 -0.034 + 243.0055 33.8712 -16.332 20.116 0.357 0.362 0.007 + 235.8800 40.4164 -7.007 24.150 0.879 0.545 -0.060 + 237.7838 37.0282 -27.148 35.072 0.358 0.387 -0.020 + 241.2521 37.6366 -5.337 8.365 0.460 0.509 -0.009 + 243.1091 35.3315 -6.046 6.943 0.483 0.454 -0.007 + 249.5142 44.6776 2.316 -0.874 0.358 0.387 -0.024 + 239.7362 35.8777 -13.189 16.995 0.437 0.447 -0.016 + 241.2107 37.6551 -6.608 8.859 0.555 0.510 -0.010 + 242.0934 36.2035 -7.321 7.084 0.359 0.365 0.001 + 246.1131 39.0445 -2.717 0.006 0.557 0.667 0.001 + 248.6190 38.7549 -0.009 0.202 0.557 0.618 0.004 + 249.5359 44.6629 1.759 -1.825 0.359 0.396 -0.012 + 249.6132 44.5995 0.677 -0.527 0.359 0.400 -0.015 + 241.4104 37.6568 -4.003 6.649 0.698 0.680 -0.007 + 244.1651 31.6238 -28.212 29.767 0.354 0.289 0.004 + 249.2788 43.8657 -1.006 -1.622 0.360 0.372 0.002 + 249.5051 44.7227 1.746 -0.682 0.360 0.395 -0.017 + 249.2742 43.7501 -0.878 -1.320 0.361 0.384 -0.022 + 238.3837 36.9798 -19.288 22.913 0.362 0.365 -0.009 + 238.5376 41.4273 -4.374 5.280 0.464 0.489 0.004 + 240.1465 35.6035 -12.443 15.260 0.362 0.363 -0.048 + 240.9973 37.6154 -10.479 8.787 1.900 1.741 -0.009 + 241.1822 38.2799 -6.592 6.250 0.602 0.667 -0.012 + 246.7764 39.2538 -1.776 0.082 0.569 0.569 0.006 + 248.6410 38.4828 -0.762 0.716 0.563 0.638 -0.007 + 248.7504 45.2693 0.713 0.653 0.520 0.469 -0.116 + 236.0627 41.9861 0.596 10.038 0.520 0.569 -0.038 + 236.4710 47.9903 7.137 5.563 0.441 0.376 -0.002 + 240.4561 39.0830 -6.704 5.530 0.585 0.602 -0.007 + 241.9433 39.2045 -3.691 1.276 0.613 0.573 -0.018 + 238.7167 44.0605 0.642 3.277 0.456 0.451 -0.050 + 241.9432 39.4093 -4.477 1.624 0.996 0.573 -0.012 + 242.4997 36.8649 -3.821 3.096 0.634 0.623 -0.010 + 242.8393 33.9637 -19.221 20.131 0.364 0.378 0.013 + 237.1996 38.0579 -22.287 31.167 0.365 0.392 -0.102 + 242.5208 36.5724 -4.332 3.455 0.789 0.658 -0.011 + 243.3110 33.5550 -20.105 23.711 0.365 0.363 -0.021 + 243.6509 34.0295 -6.976 9.769 0.365 0.375 -0.008 + 246.4696 39.0864 -2.628 0.294 0.571 0.627 0.006 + 249.4893 43.8403 -1.317 0.446 0.776 1.003 -0.015 + 242.9474 36.3570 -3.961 2.957 0.603 0.610 -0.012 + 235.6281 40.3924 -10.130 30.624 1.874 0.844 -0.026 + 236.2670 40.8747 -2.884 9.286 0.838 0.604 -0.027 + 243.7900 31.8451 -28.883 31.775 0.696 1.525 -0.011 + 249.2675 44.8882 0.855 0.125 0.367 0.408 -0.047 + 235.7319 42.0462 2.772 11.757 0.802 0.777 -0.015 + 240.9480 37.8110 -9.759 11.294 1.187 0.518 -0.045 + 241.8330 39.3861 -3.556 2.180 0.573 0.574 0.002 + 242.6402 36.9922 -3.170 1.886 0.614 0.655 -0.012 + 248.9543 44.1493 -1.620 -2.213 0.519 0.632 0.002 + 237.5208 42.0647 -2.296 5.935 0.340 0.392 -0.061 + 242.0259 38.3430 -3.428 2.349 0.570 0.559 -0.012 + 242.2619 33.9138 -24.776 25.420 0.369 0.325 -0.046 + 243.8311 32.4669 -26.824 28.958 0.444 0.430 -0.004 + 239.4158 35.0842 -29.113 33.412 0.370 0.392 0.012 + 241.2727 36.1847 -9.698 9.796 0.370 0.373 -0.015 + 244.6037 32.7814 -3.236 9.135 0.370 0.366 -0.024 + 248.0854 38.9613 -0.780 0.873 0.571 0.668 0.010 + 244.4912 33.0823 -4.795 4.026 0.371 0.387 0.016 + 249.3654 44.2675 -1.198 -0.605 0.516 0.773 -0.049 + 249.7546 44.9030 1.274 -0.587 0.371 0.416 -0.023 + 237.5438 37.5268 -24.830 32.107 0.655 0.758 -0.012 + 242.3876 36.4972 -5.493 4.401 0.623 0.675 -0.007 + 245.0856 32.2514 -6.984 6.504 0.372 0.378 0.006 + 238.4573 36.8382 -28.050 34.843 0.373 0.378 -0.006 + 241.5445 37.8854 -4.187 4.981 0.739 0.762 -0.007 + 242.5507 37.0193 -3.543 2.665 0.607 0.661 -0.012 + 237.5015 43.7518 1.678 5.613 0.348 0.394 -0.049 + 239.5308 35.7633 -23.421 30.190 0.660 0.626 -0.018 + 242.5757 36.3396 -5.148 4.312 0.460 0.672 -0.009 + 243.0482 34.0028 -15.231 16.436 0.374 0.390 0.013 + 244.3756 40.9503 -2.856 -0.451 0.903 0.930 -0.019 + 244.7541 32.6291 -7.665 7.240 0.617 0.598 -0.020 + 244.9381 32.7092 -2.499 2.368 0.374 0.403 0.033 + 249.2128 45.1022 1.638 -0.260 0.896 1.004 -0.001 + 244.2038 32.7901 -21.831 26.148 0.849 0.419 -0.022 + 244.7169 32.6963 -5.313 11.069 0.375 0.402 -0.048 + 247.9017 39.2410 -1.711 0.836 0.584 0.647 0.009 + 248.4632 38.8391 -0.749 0.425 0.562 0.745 0.010 + 249.0441 44.4132 -0.394 -1.871 0.376 0.387 -0.008 + 249.5112 44.6793 2.099 -1.440 0.376 0.421 -0.041 + 237.2174 39.0699 -14.132 11.556 0.377 0.465 -0.114 + 244.4055 32.7998 -17.910 22.452 0.377 0.390 -0.048 + 235.8416 41.9325 1.850 10.852 0.809 0.656 -0.006 + 237.0581 40.6521 -6.747 7.366 0.569 0.637 -0.043 + 240.3031 39.2847 -6.606 5.648 0.606 0.611 -0.022 + 241.4123 35.7450 -10.263 9.993 0.434 0.532 -0.008 + 244.4588 32.9417 -7.515 13.191 0.378 0.394 0.007 + 249.7402 44.6681 0.214 -0.492 0.378 0.391 -0.003 + 242.2697 33.5145 -27.004 30.835 0.379 0.310 -0.064 + 242.3007 38.3281 -3.702 1.827 1.301 0.551 -0.018 + 235.5143 42.8011 5.135 12.285 0.441 0.476 -0.050 + 240.3579 38.3346 -9.191 8.169 0.651 0.700 0.002 + 241.0612 39.5131 -4.736 3.806 0.582 0.589 -0.011 + 243.0262 34.2808 -11.314 13.688 0.380 0.384 0.016 + 246.6152 39.0238 -2.668 0.086 0.577 0.615 -0.003 + 237.7509 47.6857 4.613 2.648 0.363 0.399 -0.033 + 241.8736 39.0032 -3.549 1.851 0.576 0.572 -0.019 + 242.1765 38.5312 -3.601 1.522 0.622 0.548 -0.021 + 243.0687 32.9118 -26.929 28.583 0.381 0.392 -0.026 + 249.6754 44.5941 -0.482 0.998 0.381 0.394 -0.009 + 238.2861 37.2289 -19.365 22.390 0.465 0.812 -0.010 + 240.0759 38.7773 -10.471 7.966 0.610 0.852 -0.029 + 240.1243 39.5135 -7.601 4.628 0.663 0.929 -0.006 + 240.2423 36.6984 -9.583 9.697 0.509 0.506 0.018 + 247.9585 39.0784 -1.896 0.578 0.616 0.793 0.002 + 241.8565 39.6740 -4.109 1.990 1.111 0.571 -0.001 + 239.2007 35.8548 -26.386 33.509 0.385 0.408 0.025 + 240.7438 37.9291 -9.347 9.578 0.385 0.406 -0.031 + 235.6697 43.3500 6.036 11.144 0.363 0.469 -0.092 + 238.4149 36.8874 -21.738 28.785 0.386 0.393 -0.008 + 241.5529 38.4038 -4.610 4.066 0.607 0.545 -0.043 + 243.3871 33.5502 -18.723 22.397 0.386 0.390 -0.025 + 243.4118 34.5424 -8.920 10.348 0.811 0.520 -0.003 + 242.7683 33.7964 -21.801 23.446 0.387 0.412 0.021 + 236.9619 38.3240 -21.454 31.639 0.388 0.406 -0.048 + 237.1031 41.4626 -3.603 7.831 0.388 0.435 -0.125 + 237.4294 44.1456 2.396 5.448 0.521 0.532 -0.045 + 239.3997 43.8138 0.046 3.099 0.492 0.445 -0.019 + 240.3416 39.8479 -7.014 4.804 0.598 0.664 -0.023 + 242.2941 34.7430 -12.833 14.552 0.388 0.386 -0.019 + 249.6252 44.6620 1.377 -0.302 0.388 0.405 0.001 + 238.4441 44.3057 1.562 3.621 0.518 0.677 -0.045 + 237.9651 37.4263 -19.318 23.749 0.497 0.850 -0.019 + 241.8086 38.0652 -3.668 3.589 0.638 0.571 -0.018 + 237.5449 37.8053 -20.309 25.660 1.454 0.845 -0.019 + 240.2258 39.1014 -8.239 6.618 0.575 0.615 -0.005 + 247.1628 39.3166 -2.224 0.483 0.579 0.667 0.006 + 239.3322 40.4182 -6.475 5.730 0.602 0.608 -0.025 + 240.5677 34.9597 -21.042 19.953 0.508 0.504 -0.020 + 242.7002 36.3490 -4.264 3.727 0.460 0.474 0.007 + 242.4172 36.2317 -5.966 5.196 0.446 0.515 -0.007 + 242.7616 37.7435 -2.467 1.398 0.873 0.675 0.007 + 236.5887 43.1286 0.727 8.214 0.555 0.636 -0.049 + 240.3939 34.4205 -28.849 27.201 0.447 0.782 0.007 + 242.4038 40.1124 -3.076 1.437 0.974 0.927 -0.016 + 244.3530 33.3603 -5.239 2.298 0.394 0.394 -0.033 + 238.7128 39.2015 -8.502 7.472 0.395 0.440 -0.028 + 241.9644 39.0359 -2.587 1.758 0.780 0.578 -0.011 + 242.5572 34.0324 -22.392 23.530 0.395 0.397 -0.042 + 249.3846 44.5522 0.890 -2.196 0.395 0.412 0.004 + 241.0012 34.3879 -26.875 27.014 0.981 1.078 -0.023 + 241.8567 39.5402 -4.624 1.574 0.591 0.604 -0.040 + 241.4815 32.9268 -29.985 34.506 0.397 0.327 -0.071 + 241.6893 39.2738 -3.859 3.231 0.627 0.642 0.012 + 242.2743 34.1370 -23.614 21.541 0.397 0.395 -0.024 + 243.0740 34.1605 -13.180 15.352 0.397 0.412 0.001 + 249.3568 43.9381 -0.441 -0.632 0.411 0.727 0.082 + 242.7882 36.5425 -3.613 2.864 0.484 0.656 0.010 + 236.9960 44.3249 4.113 5.585 0.414 0.598 -0.020 + 240.2865 34.8229 -27.016 28.731 0.921 0.689 -0.016 + 242.8527 36.6064 -3.401 2.349 0.518 0.596 0.009 + 248.7944 38.8076 -0.501 0.658 0.399 0.454 0.034 + 236.8070 41.8415 -1.959 8.175 0.716 0.772 -0.018 + 241.7939 39.1092 -3.624 2.390 1.182 0.583 -0.018 + 242.9832 33.7366 -22.096 23.239 0.401 0.420 0.011 + 243.0090 32.2745 -28.332 30.106 0.401 0.402 -0.029 + 244.1104 42.4659 -1.970 -0.179 0.357 0.449 0.007 + 244.1121 33.1768 -14.574 16.546 0.401 0.423 -0.057 + 237.6441 37.9892 -16.633 21.634 0.567 0.630 -0.054 + 239.4994 41.5097 -3.526 4.010 0.492 0.498 0.016 + 249.6102 44.8900 1.477 0.454 0.444 0.734 -0.013 + 242.1362 34.9845 -9.500 13.791 0.403 0.415 -0.012 + 242.8012 35.6146 -5.806 6.924 0.403 0.411 -0.009 + 243.5569 31.7210 -29.388 31.768 0.885 1.838 -0.009 + 238.7007 36.9000 -9.896 9.729 0.978 0.717 -0.002 + 238.9400 37.0798 -10.605 8.139 0.562 0.709 -0.004 + 241.7117 36.9791 -7.153 7.021 0.405 0.428 -0.026 + 242.7205 36.4016 -4.109 3.198 0.448 0.747 -0.014 + 236.4477 44.5045 5.474 7.105 0.450 0.393 -0.032 + 237.6620 38.2578 -12.622 15.926 0.478 0.499 -0.015 + 238.2975 37.6218 -10.876 10.441 0.545 0.443 -0.090 + 243.0583 39.4022 -2.843 0.543 0.574 0.622 0.007 + 243.6937 34.0108 -7.027 8.893 0.406 0.416 0.009 + 239.9112 35.6059 -16.874 20.258 0.519 0.633 -0.009 + 244.7020 32.9673 -1.619 2.067 0.407 0.424 -0.020 + 241.0966 34.3999 -26.382 25.275 0.408 0.421 0.105 + 248.1484 41.0820 0.317 -1.140 0.408 0.418 -0.013 + 242.2935 35.4703 -7.607 10.587 0.409 0.422 0.003 + 238.4400 36.8204 -28.724 33.802 0.945 0.704 0.008 + 242.8512 35.5223 -5.108 7.155 0.410 0.421 -0.010 + 243.4429 34.5744 -8.760 8.533 0.705 0.677 -0.004 + 247.8903 41.1109 -1.370 -0.478 0.411 0.418 -0.020 + 242.4432 35.5694 -7.971 9.197 0.412 0.426 0.001 + 244.4936 32.6645 -21.374 26.873 0.412 0.400 -0.034 + 237.7094 40.4195 -8.139 7.431 1.240 1.211 -0.054 + 242.0389 35.4258 -9.247 10.198 0.413 0.425 -0.011 + 246.6546 43.6187 -1.222 -0.094 0.343 0.352 0.017 + 238.1952 43.1334 -2.411 6.586 0.415 0.442 -0.094 + 241.9176 35.2251 -9.281 11.930 0.415 0.427 -0.008 + 242.1297 35.5838 -9.191 10.088 0.415 0.430 -0.004 + 235.9003 46.9028 12.128 11.032 0.884 0.945 -0.026 + 242.3567 40.0271 -3.968 0.668 0.754 0.587 -0.036 + 242.4501 36.2791 -6.126 4.684 0.477 0.674 -0.009 + 249.6700 42.7136 0.356 -0.500 0.361 0.438 -0.026 + 235.8954 43.7031 5.206 9.938 0.472 0.481 -0.062 + 236.4998 46.5414 6.132 7.298 0.583 0.539 -0.008 + 239.4919 34.7940 -30.204 34.826 0.418 0.411 -0.017 + 240.7579 34.4983 -29.045 24.567 0.418 0.434 -0.092 + 241.8995 35.4945 -9.490 10.405 0.419 0.433 -0.003 + 242.1023 35.1155 -8.433 12.839 0.419 0.431 -0.006 + 243.7432 34.0884 -4.455 8.715 0.419 0.434 0.006 + 238.0482 37.8063 -12.911 12.684 0.452 0.620 -0.009 + 238.4365 36.8610 -27.015 31.333 0.902 0.527 -0.001 + 241.4983 38.2679 -4.804 5.074 0.613 0.553 -0.023 + 239.0768 36.7944 -10.019 10.300 0.421 0.425 -0.023 + 239.0663 36.6852 -8.515 9.875 0.422 0.425 -0.025 + 240.8328 37.9302 -10.871 9.596 1.629 0.680 0.072 + 242.3858 35.3662 -7.748 11.211 0.499 0.464 -0.021 + 238.9995 36.5373 -8.456 9.517 0.423 0.424 -0.024 + 239.5651 35.9694 -9.061 17.890 0.632 0.669 -0.020 + 242.6665 35.4337 -6.185 8.635 0.423 0.439 -0.011 + 238.0051 37.7383 -13.882 16.109 0.424 0.437 0.000 + 242.5993 35.7685 -5.643 7.012 0.424 0.438 -0.008 + 244.2388 32.9506 -21.757 24.060 0.424 0.404 -0.053 + 238.9359 36.6095 -12.008 9.531 0.425 0.428 -0.029 + 239.1294 41.4302 -4.283 4.363 0.846 0.515 0.024 + 239.4583 34.7261 -30.198 34.863 0.761 0.721 -0.007 + 239.1056 36.4530 -8.647 10.916 0.426 0.427 -0.026 + 238.0811 37.5067 -15.945 16.414 0.640 0.682 -0.012 + 238.7421 41.6705 -4.453 3.970 0.608 0.585 -0.012 + 241.8428 35.0871 -10.749 13.265 0.427 0.427 -0.039 + 243.2481 34.3887 -10.297 12.849 0.685 0.603 -0.004 + 244.4912 33.1690 -4.728 1.688 0.427 0.419 -0.052 + 237.7159 37.2737 -25.681 33.731 1.110 0.739 -0.029 + 239.4627 35.9250 -23.753 31.739 0.512 0.474 -0.032 + 244.9251 32.5586 -5.808 0.730 0.428 0.434 -0.005 + 239.6545 34.5310 -30.154 33.155 0.430 0.447 0.052 + 238.0623 37.0470 -23.168 32.265 1.182 1.315 0.021 + 241.7403 38.2796 -3.618 3.870 0.594 0.578 -0.083 + 242.1165 34.0425 -24.714 23.569 0.432 0.440 -0.032 + 243.4830 33.5710 -16.861 19.683 0.433 0.441 -0.003 + 244.4998 32.7380 -19.432 20.400 0.433 0.433 -0.020 + 246.7983 43.5639 -1.642 -1.280 0.517 0.686 0.038 + 247.3854 45.2317 0.213 -0.539 0.372 0.394 0.022 + 238.1124 37.5403 -13.802 16.926 0.434 0.493 -0.002 + 249.1808 44.4540 0.234 -2.866 0.434 0.484 -0.024 + 235.9344 44.8303 8.313 9.382 0.372 0.446 -0.034 + 242.8215 36.0348 -4.543 4.424 0.435 0.449 -0.013 + 238.7122 37.0078 -11.044 9.982 0.677 0.825 -0.003 + 239.0181 36.4167 -8.594 15.733 0.436 0.446 -0.050 + 243.5345 42.6563 -1.687 0.289 0.500 0.610 -0.019 + 244.0361 33.6772 -7.943 8.821 0.436 0.423 -0.019 + 247.7649 41.0419 -1.175 -0.877 0.436 0.447 -0.019 + 243.1516 35.3891 -5.490 6.350 0.963 0.638 -0.005 + 235.8835 44.1700 6.404 9.710 0.356 0.794 -0.034 + 237.7250 41.5321 -3.752 5.905 0.585 0.544 -0.035 + 241.5951 33.4070 -28.871 32.951 0.438 0.363 -0.002 + 241.4448 34.2328 -23.700 28.087 2.010 0.435 -0.006 + 242.7109 35.9132 -5.114 5.133 0.439 0.451 -0.013 + 243.6708 34.7341 -6.087 3.181 0.676 1.207 0.002 + 241.4386 34.6931 -18.872 17.904 0.588 0.539 -0.008 + 238.2527 42.2090 -2.711 5.113 0.475 0.511 -0.080 + 242.7458 32.7006 -27.566 29.548 0.441 0.450 -0.020 + 245.0661 32.1431 -8.058 7.740 0.665 0.451 -0.012 + 239.4201 36.4735 -8.911 10.250 0.442 0.447 -0.028 + 239.9811 41.5515 -3.357 3.609 0.512 0.692 0.031 + 242.0776 34.5121 -17.644 17.711 0.443 0.441 -0.014 + 242.4958 34.2115 -19.285 20.661 0.444 0.446 -0.032 + 237.1231 42.3226 -1.270 7.224 0.460 0.610 -0.031 + 243.4259 33.5533 -18.203 21.159 0.446 0.447 -0.023 + 244.6370 32.8114 -1.926 4.830 0.446 0.472 -0.044 + 241.3987 34.3304 -26.543 23.624 1.165 1.108 0.001 + 242.4526 33.8842 -24.266 24.923 0.448 0.451 -0.047 + 247.4824 45.9679 0.860 -0.982 0.379 0.430 -0.022 + 238.5385 41.9458 -2.625 5.137 0.539 0.610 0.032 + 240.0667 42.9299 -1.280 2.792 0.391 0.467 -0.058 + 243.4035 35.4531 -5.226 3.470 0.486 0.963 -0.002 + 243.4107 33.5270 -19.496 22.224 0.449 0.456 -0.036 + 244.7569 33.6807 -2.766 1.463 0.449 0.446 -0.026 + 237.4087 41.9558 -2.194 6.715 0.873 0.678 0.009 + 239.8943 33.9509 -29.662 36.093 0.450 0.350 0.072 + 235.8218 47.1143 14.170 12.331 0.584 0.612 -0.049 + 238.9858 38.0360 -10.330 7.551 0.496 0.794 -0.016 + 239.5192 36.4455 -8.702 11.023 0.452 0.462 -0.026 + 241.6144 37.5277 -4.488 5.396 0.452 0.463 -0.010 + 242.9833 34.8240 -11.015 11.443 1.676 0.875 -0.003 + 243.3021 34.3905 -9.965 12.843 0.649 1.100 -0.004 + 244.7270 32.5882 -11.608 10.559 0.620 0.591 -0.009 + 238.5696 40.6738 -7.691 4.847 0.711 0.687 -0.025 + 235.9350 44.6016 7.944 9.114 0.352 0.459 -0.033 + 239.6823 39.3172 -8.321 6.890 0.455 0.497 -0.032 + 241.4977 37.5011 -5.624 6.127 0.455 0.465 -0.010 + 242.2907 33.4642 -27.829 29.293 0.455 0.463 -0.037 + 242.4390 33.9344 -23.766 25.523 0.455 0.443 -0.026 + 245.1573 39.2932 -2.884 -0.160 0.456 0.468 -0.016 + 243.4294 35.3231 -5.372 2.807 0.603 0.898 -0.003 + 237.1879 38.6709 -12.369 22.946 0.458 0.494 -0.065 + 240.7728 35.2668 -12.833 11.565 0.696 0.779 -0.026 + 237.6961 37.9350 -18.198 22.865 0.460 0.488 0.023 + 242.4020 33.8473 -23.441 25.855 0.460 0.447 -0.060 + 243.5449 35.5146 -3.543 1.921 0.568 0.755 -0.002 + 236.0338 45.1343 8.738 8.811 1.111 0.816 -0.026 + 237.9975 37.5920 -19.027 22.104 0.462 0.476 -0.080 + 236.2095 39.6691 -23.278 25.058 0.637 0.591 -0.009 + 240.8546 34.8128 -21.893 20.906 0.463 0.456 -0.035 + 241.5133 35.0333 -13.631 12.763 0.463 0.437 -0.002 + 241.9989 37.4124 -4.994 3.658 0.463 0.474 -0.020 + 242.9894 34.0907 -13.936 17.415 0.463 0.482 -0.001 + 243.3314 35.6704 -4.488 4.070 0.704 0.567 0.001 + 237.2133 47.5486 6.231 4.287 0.412 0.441 -0.025 + 243.5132 34.6179 -7.873 6.787 0.525 0.724 -0.008 + 238.0598 37.6430 -14.604 16.166 0.466 0.530 0.038 + 239.2710 36.5034 -9.031 10.340 0.466 0.500 -0.012 + 239.8873 35.5204 -21.520 24.656 0.466 0.452 -0.007 + 246.3612 48.3260 1.500 -0.594 0.829 0.727 -0.006 + 239.9215 35.8551 -11.267 14.884 0.602 0.719 0.004 + 242.0185 37.2389 -5.302 3.516 0.467 0.478 -0.014 + 243.1979 32.8444 -26.824 27.355 0.468 0.502 -0.089 + 247.8517 41.7950 -1.496 -0.562 0.468 0.490 -0.025 + 238.2010 36.7491 -28.462 35.890 1.067 0.800 0.000 + 242.3195 33.4693 -27.468 28.147 0.469 0.475 -0.045 + 238.5965 41.0509 -5.337 5.589 0.827 0.675 -0.037 + 239.4788 47.0121 2.233 1.594 0.364 0.574 0.010 + 241.3297 35.1381 -13.274 12.084 1.120 1.359 -0.012 + 242.5455 38.3444 -3.496 1.569 0.471 0.486 -0.011 + 243.5152 35.4188 -3.583 2.637 0.609 0.647 -0.004 + 243.1722 34.1782 -11.310 15.185 0.472 0.482 0.064 + 238.4816 36.8227 -28.339 35.445 0.667 0.794 -0.004 + 241.9646 35.6678 -8.195 9.281 0.474 0.509 0.024 + 237.8488 37.7101 -19.382 22.763 1.893 1.002 -0.022 + 238.2797 37.9541 -10.219 9.236 0.955 0.953 -0.009 + 240.7178 44.9746 0.210 1.297 0.384 0.388 0.001 + 242.5178 35.9250 -6.628 6.037 0.477 0.494 -0.011 + 243.8807 45.9421 1.002 -0.092 0.467 0.496 -0.037 + 237.4674 41.1844 -4.605 6.478 0.652 0.524 -0.010 + 238.0511 44.4341 2.011 3.736 0.484 0.552 -0.047 + 242.7080 34.2814 -17.017 17.877 0.478 0.499 -0.005 + 236.3298 48.1504 6.969 4.409 0.629 0.694 -0.001 + 238.6012 36.9613 -12.619 11.810 0.479 0.534 -0.012 + 244.4354 33.2677 -6.015 1.111 0.479 0.503 0.023 + 241.1345 34.4777 -24.552 24.019 0.819 0.497 -0.034 + 236.4669 46.9908 7.201 5.513 0.457 0.499 -0.120 + 240.0229 35.9616 -9.805 11.967 1.663 1.196 -0.004 + 241.4922 35.0858 -11.686 14.142 1.210 0.759 -0.004 + 243.3763 34.5267 -9.253 10.755 0.904 0.655 -0.004 + 243.5339 35.2185 -5.054 2.430 0.979 0.675 -0.004 + 237.0634 38.1035 -24.780 34.549 1.333 0.934 -0.009 + 242.4597 36.5317 -4.787 3.898 0.836 0.762 -0.007 + 243.4861 34.3439 -8.552 12.344 0.483 0.481 -0.034 + 238.8045 36.4476 -26.865 33.557 0.485 0.487 -0.054 + 242.2045 34.0032 -24.023 23.923 0.485 0.469 -0.007 + 248.0914 41.6505 -1.469 0.231 0.485 0.504 -0.058 + 237.9981 37.5929 -15.278 16.802 0.522 0.573 -0.043 + 238.0755 41.9536 -2.755 5.175 0.547 1.003 0.017 + 249.5432 44.6421 1.051 -1.210 0.487 0.554 -0.041 + 239.1839 36.1883 -27.512 31.717 0.488 0.479 0.002 + 239.4792 35.9202 -25.634 32.948 1.418 1.106 -0.010 + 242.1947 34.1558 -23.315 22.584 0.488 0.468 -0.002 + 243.2973 33.3819 -23.308 25.330 0.488 0.516 -0.048 + 236.6235 47.0146 5.925 5.880 0.535 0.635 -0.049 + 239.9997 41.1622 -4.191 3.691 0.748 0.493 0.007 + 242.6725 35.8127 -4.939 6.170 0.489 0.502 -0.023 + 244.3536 32.8000 -19.597 26.330 1.007 0.855 0.022 + 237.1153 48.4199 5.400 3.700 0.519 0.494 -0.004 + 242.5462 36.0529 -5.072 4.893 0.490 0.522 -0.007 + 243.6713 33.9165 -8.833 11.554 0.492 0.491 0.029 + 246.6649 41.5647 -1.913 -0.605 0.660 0.702 0.015 + 243.3310 34.5015 -9.968 11.191 0.792 0.933 0.002 + 243.3808 32.8239 -25.516 27.192 0.493 0.502 -0.034 + 235.9059 42.8151 2.198 9.195 0.521 0.525 -0.048 + 238.2596 40.8747 -6.224 5.130 0.563 0.595 -0.009 + 240.6995 34.6358 -26.045 24.447 0.495 0.439 -0.054 + 243.0231 40.3591 -2.397 0.526 0.651 0.692 0.007 + 243.1090 35.5348 -4.434 5.776 0.582 0.533 -0.004 + 235.8006 40.7446 3.700 19.314 0.496 0.563 -0.103 + 236.4501 44.0385 3.674 7.523 0.564 0.766 -0.073 + 243.3067 33.2338 -25.474 26.349 0.497 0.542 -0.103 + 243.4503 34.4048 -9.427 14.889 0.497 0.513 -0.051 + 251.5217 43.0661 0.624 -0.203 0.639 0.662 0.013 + 242.0305 35.8453 -7.732 9.860 0.499 0.539 -0.001 + 243.2105 34.2338 -8.843 12.243 0.499 0.488 -0.028 + 238.3583 39.2212 -10.306 6.654 0.500 0.564 -0.007 + 243.5793 34.7850 -5.541 3.576 0.500 0.494 -0.032 + 237.6440 37.9912 -15.193 17.593 0.502 0.551 -0.046 + 237.1203 44.9900 4.033 6.452 0.388 0.555 -0.069 + 247.9359 41.5393 -1.703 -0.774 0.503 0.580 0.037 + 242.7230 33.1295 -27.901 29.741 0.504 0.532 -0.107 + 235.9240 46.3004 10.693 9.880 0.405 0.587 -0.019 + 242.3645 34.1324 -23.105 22.959 0.505 0.508 -0.015 + 242.0560 36.0446 -8.908 9.867 0.755 0.520 0.002 + 242.3106 34.2163 -22.220 21.680 0.506 0.503 -0.005 + 242.4152 35.4288 -6.757 9.699 0.507 0.545 0.021 + 241.4393 40.0716 -4.431 2.055 0.570 0.539 -0.001 + 243.2990 33.5427 -20.839 23.475 0.508 0.510 -0.015 + 246.8588 48.4790 1.524 -0.635 0.621 0.979 0.017 + 242.7477 32.8678 -26.910 27.942 0.509 0.444 -0.049 + 243.3052 35.3948 -4.230 3.378 0.680 0.648 -0.003 + 238.3747 47.1375 3.185 2.599 0.591 0.740 0.132 + 236.7518 39.7711 -15.689 10.774 1.062 0.612 0.027 + 239.2569 37.0547 -9.479 8.983 0.513 0.532 -0.063 + 237.3703 47.7297 5.725 3.168 0.505 0.569 -0.091 + 237.5308 37.8073 -19.589 26.062 0.556 0.639 -0.001 + 241.4466 34.8183 -14.259 14.771 0.922 0.854 -0.009 + 247.9932 40.4353 -2.634 -0.565 0.514 0.523 -0.024 + 242.3952 34.1719 -21.868 23.014 0.515 0.547 -0.094 + 243.4670 33.7758 -13.401 17.834 0.515 0.526 0.009 + 243.0607 35.0908 -8.596 8.060 0.516 0.521 -0.001 + 243.8667 34.0265 -5.285 6.653 0.516 0.526 -0.002 + 242.4511 33.9752 -23.493 25.000 0.517 0.507 -0.122 + 242.0826 45.5333 0.812 1.099 0.430 0.491 0.014 + 243.5412 33.6092 -16.310 16.263 0.519 0.441 -0.067 + 240.8065 39.4291 -5.578 4.773 0.634 0.738 0.000 + 242.7605 46.0455 1.059 -0.068 0.421 0.645 0.010 + 242.1408 39.2838 -3.361 1.188 0.658 1.074 -0.009 + 243.1118 35.3315 -5.622 6.170 0.522 0.364 -0.070 + 243.3961 35.1831 -4.951 3.832 0.629 0.644 0.002 + 239.9994 35.5745 -15.043 18.188 0.873 0.701 -0.019 + 242.3115 34.1213 -23.364 22.566 0.523 0.533 -0.026 + 243.9662 34.0744 -2.863 5.021 0.523 0.530 0.001 + 237.5839 37.9588 -18.807 23.640 0.524 0.536 -0.018 + 241.7727 38.5320 -3.682 3.866 0.653 0.648 -0.007 + 241.9569 33.7738 -27.289 27.929 0.524 0.528 -0.046 + 241.6475 33.7968 -25.039 31.718 0.525 0.495 -0.018 + 242.4348 33.3753 -27.901 29.123 0.525 0.534 -0.052 + 243.3589 31.8680 -29.534 31.261 0.350 0.739 -0.002 + 245.6930 41.1425 -3.033 -0.491 0.722 0.890 0.064 + 247.5884 39.2064 -2.581 -0.335 0.789 0.810 0.010 + 238.5376 36.9088 -16.856 20.114 0.999 0.831 -0.004 + 245.4153 47.8332 1.318 -0.337 0.619 0.656 -0.007 + 247.9967 41.7567 -1.343 -1.543 0.526 0.559 -0.080 + 237.7529 37.8786 -15.579 17.544 0.527 0.552 -0.041 + 247.3991 44.8970 -0.174 -0.279 0.577 0.565 0.005 + 241.8272 39.2861 -3.456 2.687 0.635 0.755 0.002 + 244.8718 47.0669 0.518 0.542 0.572 0.689 0.012 + 237.0444 44.5660 3.815 6.021 0.405 0.737 -0.034 + 243.2824 33.5497 -20.907 24.205 0.531 0.554 -0.048 + 240.5110 34.9278 -23.221 22.053 0.535 0.571 -0.064 + 243.3348 34.4538 -9.373 11.877 0.681 0.921 -0.001 + 243.4779 34.5889 -8.648 8.046 1.154 0.759 0.005 + 238.9586 40.3034 -7.024 6.972 0.669 0.744 -0.004 + 241.5906 35.1336 -10.321 12.173 0.537 0.539 -0.008 + 242.2337 34.2217 -23.304 21.307 0.537 0.521 -0.006 + 242.4649 33.7088 -25.297 25.828 0.537 0.529 -0.028 + 236.2055 40.0942 -15.130 17.669 0.538 0.578 -0.037 + 237.9887 37.6454 -15.194 17.150 0.538 0.563 0.052 + 238.0149 47.5086 3.325 2.523 0.522 0.491 -0.025 + 243.7185 46.4548 1.144 0.043 0.552 0.718 0.009 + 243.8507 34.1079 -3.438 6.778 0.538 0.550 0.000 + 244.5936 32.9168 -2.916 3.601 0.538 0.525 -0.022 + 239.9965 35.3512 -22.143 25.247 0.658 0.718 -0.012 + 242.7464 32.7041 -27.487 29.379 0.539 0.544 0.000 + 240.3504 40.6218 -5.543 3.730 0.667 0.772 0.008 + 245.8707 41.2957 -2.534 -0.404 0.788 0.888 0.084 + 242.1882 35.6474 -9.833 10.861 0.541 0.562 -0.028 + 244.4975 32.8269 -14.237 18.843 0.541 0.528 -0.028 + 240.1565 35.3335 -19.156 21.191 0.801 0.724 0.022 + 242.7476 45.3491 0.254 0.450 0.426 0.572 -0.002 + 246.0110 47.9905 1.318 -0.274 0.598 0.773 -0.009 + 247.7395 45.0608 -0.005 0.017 0.513 0.616 0.026 + 240.9608 34.3257 -28.811 29.306 0.543 0.501 -0.045 + 241.1326 39.4934 -5.576 3.542 0.780 0.768 -0.002 + 243.9223 34.0246 -4.595 5.483 0.543 0.552 -0.001 + 241.3591 34.2569 -27.477 26.361 0.586 2.618 -0.001 + 241.4045 34.0630 -26.500 29.838 0.828 0.591 -0.012 + 241.8152 34.3869 -24.079 21.411 0.546 0.567 -0.009 + 244.0861 33.5033 -12.074 7.100 0.546 0.539 -0.019 + 241.1973 34.8005 -19.269 16.854 0.859 0.713 0.002 + 236.0757 46.9722 10.700 8.083 0.550 0.939 -0.021 + 240.8247 38.0843 -8.400 9.535 0.560 0.995 -0.002 + 236.2105 41.9931 1.247 8.995 0.944 0.937 0.022 + 236.2980 38.9107 -24.673 33.939 0.549 0.657 0.064 + 241.2341 38.4201 -5.839 6.169 0.650 0.868 -0.002 + 240.7023 45.7715 0.939 1.253 0.485 0.496 -0.006 + 242.7511 32.6970 -28.139 29.714 0.551 0.559 -0.011 + 243.4421 32.2447 -27.347 28.243 0.550 0.559 0.009 + 243.5883 33.1311 -24.671 24.841 0.550 0.559 -0.007 + 243.8179 34.0249 -5.692 7.936 0.550 0.560 -0.002 + 241.4463 34.1023 -27.487 30.215 0.551 0.551 -0.032 + 238.0410 38.3752 -8.178 7.984 0.552 0.572 -0.083 + 237.8334 37.4444 -20.536 25.231 0.553 0.546 -0.049 + 238.0338 37.2472 -19.677 25.180 0.553 0.603 -0.024 + 240.8767 34.3058 -26.788 28.260 0.553 0.572 -0.012 + 242.6756 33.9677 -21.682 23.195 0.553 0.569 0.011 + 243.3694 33.5578 -18.506 22.226 0.553 0.588 -0.004 + 244.1761 31.6382 -28.017 29.490 0.416 0.482 -0.003 + 244.5936 32.8063 -3.911 7.345 0.553 0.578 0.010 + 243.3200 33.6190 -18.951 20.180 0.554 0.582 -0.014 + 243.6355 45.4931 0.818 -0.084 0.401 0.460 -0.004 + 242.7925 34.9748 -10.059 12.066 2.342 0.955 0.004 + 242.9915 32.6883 -27.761 28.054 0.555 0.549 -0.008 + 236.8369 44.0786 3.507 6.495 0.568 0.719 -0.122 + 237.6519 42.6193 -0.842 5.099 0.564 0.632 -0.223 + 243.7501 33.8858 -7.519 11.226 0.556 0.571 0.006 + 243.8362 33.9729 -6.354 8.242 0.556 0.568 0.000 + 240.7726 34.8906 -19.288 21.438 0.557 0.590 -0.055 + 248.9532 42.0016 -0.281 -1.596 0.558 0.567 0.053 + 240.7122 36.2893 -10.879 10.210 0.560 0.594 0.039 + 241.0801 38.3283 -6.260 7.219 0.715 0.671 -0.001 + 242.7254 35.3411 -7.369 9.618 0.546 0.590 -0.002 + 242.9678 32.8133 -27.120 28.047 0.560 0.565 -0.021 + 243.0192 34.9039 -9.225 8.532 0.560 0.547 -0.033 + 243.7530 33.1598 -22.035 23.752 0.560 0.578 -0.015 + 241.9450 34.2249 -24.998 22.620 0.561 0.491 -0.080 + 239.4970 40.6300 -5.319 5.588 0.652 0.790 0.001 + 241.1319 34.8252 -19.188 18.121 0.563 0.597 -0.023 + 241.7940 34.9920 -10.023 12.902 0.563 0.596 0.021 + 241.9834 39.2748 -3.845 1.213 0.749 0.735 -0.004 + 243.3508 33.5992 -17.515 21.009 0.563 0.590 0.008 + 244.1168 32.6747 -27.642 26.290 3.301 0.827 -0.004 + 244.3225 33.4270 -5.192 2.812 0.563 0.576 0.014 + 250.4293 43.5109 0.767 -0.194 0.843 0.570 0.045 + 241.1083 37.6777 -3.934 8.216 1.001 0.996 -0.004 + 242.4634 43.8789 -0.716 0.123 0.435 0.579 0.001 + 243.0043 46.4282 0.761 0.284 0.541 0.642 0.036 + 239.9400 35.4827 -21.758 23.903 0.750 0.623 -0.013 + 240.4497 39.2822 -5.992 5.984 0.647 0.699 -0.012 + 242.8772 46.1479 1.045 0.384 0.466 0.573 0.027 + 243.3610 33.5721 -18.418 18.941 0.567 0.629 -0.023 + 247.9775 40.7267 -2.302 -0.788 0.567 0.646 -0.010 + 248.9527 42.1948 -0.991 -1.061 0.567 0.605 0.004 + 236.9440 38.3190 -22.003 31.883 0.568 0.584 -0.013 + 237.0755 46.0401 4.416 7.323 0.905 1.015 -0.016 + 238.0273 37.1803 -21.401 26.904 0.568 0.579 -0.007 + 242.4622 34.1725 -21.446 22.908 0.570 0.568 -0.008 + 244.2359 33.8341 -4.244 2.737 0.570 0.560 0.001 + 245.0195 32.0977 -22.927 19.273 0.570 0.552 0.011 + 244.5996 33.7151 -2.761 2.037 0.571 0.547 -0.070 + 239.6437 42.1891 -3.647 4.519 0.614 0.721 -0.033 + 243.5578 44.7521 0.847 0.390 0.614 0.701 0.004 + 243.9982 32.7338 -27.569 29.001 0.573 0.568 -0.040 + 241.8638 34.3794 -23.411 21.332 0.574 0.616 -0.082 + 243.2294 34.5442 -12.677 12.249 0.574 0.666 -0.167 + 243.8266 45.7488 1.406 0.340 0.572 0.649 0.008 + 248.0519 42.3910 -1.193 -0.857 0.704 0.674 0.055 + 241.3543 34.1401 -27.546 28.749 0.575 0.539 -0.037 + 241.9260 38.6925 -3.148 2.729 0.667 0.693 -0.004 + 241.6817 34.3862 -24.414 21.071 0.576 0.645 0.049 + 241.2097 34.6877 -21.764 20.102 0.591 0.754 -0.032 + 237.6949 37.9373 -18.503 22.636 0.578 0.669 -0.010 + 241.5118 34.2917 -24.520 24.007 0.703 0.941 -0.001 + 241.9448 33.9167 -25.463 24.612 0.578 0.582 -0.023 + 242.2604 35.6597 -8.687 8.825 0.578 0.604 0.017 + 243.4294 33.5613 -17.609 19.887 0.578 0.606 0.006 + 241.1014 34.4326 -27.531 25.002 0.579 0.566 -0.008 + 240.9374 45.0036 0.313 1.605 0.454 0.529 -0.049 + 242.2836 33.5543 -28.349 29.299 0.580 0.531 -0.004 + 243.6968 45.5657 0.325 0.390 0.471 0.579 0.068 + 244.4992 33.0375 -3.634 2.881 0.580 0.561 0.007 + 245.6645 47.8356 1.393 -0.089 0.633 0.849 0.019 + 244.1665 33.4294 -10.157 8.094 0.581 0.592 0.029 + 236.8876 47.0330 5.625 6.041 0.467 0.526 -0.013 + 237.6600 37.9344 -17.928 23.517 0.582 0.725 -0.039 + 238.0737 37.1669 -21.252 26.266 0.582 0.594 0.000 + 240.5882 39.3479 -5.522 5.781 0.978 1.118 -0.077 + 240.9146 46.3644 1.125 0.830 0.493 0.498 -0.002 + 241.0933 40.7775 -4.598 2.712 0.740 0.727 0.012 + 237.0285 38.2124 -22.467 32.888 0.584 0.617 0.010 + 243.2841 34.6763 -9.883 7.594 0.584 0.585 -0.032 + 240.5314 38.3621 -8.669 8.722 0.695 0.876 0.002 + 241.7272 33.7198 -27.463 30.497 0.585 0.607 -0.114 + 243.6693 33.8167 -9.127 13.464 0.585 0.604 0.023 + 240.2210 41.0030 -4.670 3.755 0.761 0.943 0.000 + 244.0014 33.9741 -4.430 5.018 0.586 0.575 -0.006 + 248.9511 45.7075 1.104 -0.046 0.624 0.686 0.015 + 241.3747 35.2742 -12.677 11.852 0.587 0.577 0.006 + 248.2122 42.5413 -1.482 -0.644 0.683 0.703 0.104 + 240.5247 34.7541 -27.293 23.903 0.752 1.393 -0.015 + 241.3313 34.4963 -23.609 21.815 0.588 0.491 -0.074 + 245.7826 44.5199 -0.261 0.026 0.518 0.564 -0.003 + 237.9033 37.5629 -19.228 23.130 0.591 0.542 -0.034 + 244.1844 33.4310 -8.622 7.110 0.591 0.603 0.014 + 241.2545 40.8616 -3.711 2.319 0.666 0.813 0.012 + 243.4044 33.5675 -17.586 21.264 0.592 0.638 0.003 + 241.9226 43.7438 -0.746 1.357 0.410 0.475 -0.006 + 243.2897 35.2057 -5.353 4.832 0.714 0.675 -0.002 + 250.3766 42.8548 0.694 -0.013 0.727 0.777 0.062 + 240.8213 35.0025 -16.576 16.690 0.745 0.639 -0.021 + 243.5535 33.5742 -16.148 18.036 0.597 0.649 -0.068 + 239.8544 35.3872 -23.944 28.263 0.613 0.636 -0.015 + 243.3066 44.5553 -0.361 0.147 0.570 0.575 -0.004 + 238.1496 37.7024 -12.089 13.323 0.599 0.589 -0.112 + 241.5280 39.2989 -4.725 2.746 0.801 0.726 0.002 + 244.8558 32.7288 -5.549 2.411 0.599 0.601 -0.030 + 238.1073 36.6015 -26.731 37.865 0.600 0.569 -0.022 + 242.0043 35.3362 -9.276 12.090 0.597 0.619 -0.010 + 243.1635 33.8837 -14.778 21.364 0.602 0.663 -0.120 + 244.0661 33.9253 -4.414 4.634 0.602 0.613 0.003 + 249.9188 42.9261 0.612 -0.343 0.595 0.629 0.049 + 244.0684 34.1364 -1.140 3.201 0.603 0.601 -0.041 + 237.6911 41.2219 -4.979 5.798 0.895 0.658 -0.002 + 235.8063 40.6302 0.988 16.785 0.804 0.827 -0.050 + 242.2349 34.4927 -17.541 16.746 0.605 0.551 -0.071 + 248.8403 45.4337 0.965 -0.180 0.661 0.799 0.096 + 241.8289 34.0632 -24.963 23.645 0.607 0.662 -0.020 + 242.8950 32.5363 -27.108 29.223 0.607 0.612 -0.004 + 243.7013 45.1230 -0.443 0.387 0.607 0.747 0.004 + 243.2272 46.4689 1.171 0.830 0.633 0.846 0.005 + 243.2967 35.4611 -4.007 5.543 0.696 0.733 -0.001 + 236.1557 41.8744 1.294 10.140 0.835 0.891 -0.031 + 241.3536 39.3976 -4.891 3.849 0.673 0.743 -0.005 + 248.2169 45.6925 0.408 -0.275 0.844 0.705 0.023 + 240.0752 40.5532 -5.337 3.691 0.728 0.958 0.014 + 242.5489 34.3472 -14.127 15.238 0.612 0.614 -0.023 + 239.5089 35.4008 -24.704 31.058 1.443 1.667 -0.001 + 236.1679 46.1734 7.936 8.233 0.522 0.547 -0.065 + 248.1571 42.2152 -1.437 -0.299 0.514 0.565 0.007 + 239.9530 35.8893 -8.365 14.879 0.616 0.653 -0.007 + 242.6454 33.6200 -24.236 26.729 0.616 0.683 -0.127 + 243.5232 32.6067 -26.361 28.155 0.616 0.639 -0.078 + 248.9882 43.0477 -0.604 -0.456 0.741 0.815 0.095 + 246.1770 47.8519 1.292 -0.376 0.754 0.921 0.029 + 242.3469 33.8492 -24.667 25.807 0.618 0.562 -0.206 + 238.5576 37.6897 -11.004 7.837 0.736 0.669 0.001 + 239.7333 37.9972 -12.318 7.403 0.619 0.584 0.017 + 241.4466 40.8819 -3.618 1.902 0.703 0.688 0.007 + 241.4599 34.4071 -25.479 22.489 1.113 2.897 -0.005 + 244.5930 33.1962 -2.508 2.992 0.619 0.610 -0.054 + 247.9535 39.6622 -1.920 -0.041 0.619 0.561 0.003 + 247.9726 40.5879 -2.247 -0.277 0.620 0.659 -0.031 + 244.2168 33.4405 -8.650 6.505 0.621 0.613 -0.015 + 236.7813 40.6588 -6.562 9.927 1.083 1.296 -0.001 + 237.3467 43.5858 1.265 6.943 0.656 0.849 -0.079 + 241.5917 34.2636 -26.373 25.039 0.622 0.635 -0.066 + 237.4654 48.7912 4.182 2.990 0.567 0.581 0.023 + 241.8064 40.1218 -4.717 2.339 0.691 0.759 0.032 + 243.7856 45.8816 0.498 0.008 0.764 0.904 0.024 + 251.3303 44.0131 0.464 0.620 0.663 0.810 0.078 + 242.0005 34.0776 -26.576 23.730 0.624 0.660 0.026 + 237.9432 37.9874 -12.835 14.769 0.645 0.907 0.007 + 243.3970 33.5646 -17.835 20.500 0.625 0.702 0.003 + 243.5689 33.8704 -10.830 13.327 0.625 0.616 -0.002 + 245.7611 39.0978 -2.571 0.037 0.883 0.869 0.014 + 237.7491 37.8701 -16.862 23.719 0.627 0.680 -0.038 + 241.0684 43.9603 -0.546 1.478 0.518 0.522 -0.004 + 241.3947 37.4950 -9.242 17.376 0.627 0.639 -0.021 + 243.7093 35.6326 -3.473 0.756 0.580 0.687 -0.020 + 243.9392 33.4408 -12.814 15.936 0.627 0.643 0.016 + 241.2585 46.7961 1.154 1.099 0.527 0.658 0.001 + 243.4663 35.5224 -3.892 3.003 0.715 0.707 0.008 + 241.8247 33.9303 -27.545 27.173 0.629 0.646 -0.053 + 247.2876 44.7255 0.286 -0.400 0.565 0.757 0.040 + 237.0209 37.9963 -25.123 37.291 0.630 0.585 -0.020 + 240.8998 34.6412 -25.932 23.126 0.630 0.635 -0.002 + 241.3396 35.0890 -13.458 13.385 0.731 1.151 -0.020 + 243.1750 34.0992 -12.164 13.196 0.632 0.638 0.001 + 240.9220 38.1602 -7.637 7.705 0.691 0.738 0.007 + 242.4580 35.7401 -6.501 6.857 0.634 0.685 0.021 + 243.6012 44.8243 0.664 0.511 0.568 0.655 -0.007 + 248.0896 40.5313 -1.535 -1.193 0.634 0.653 -0.027 + 241.0422 45.1377 0.538 1.316 0.446 0.519 -0.011 + 243.2038 33.6692 -19.088 22.380 0.635 0.706 -0.030 + 242.8373 35.3748 -5.363 8.605 0.637 0.677 0.024 + 243.4289 32.9145 -28.679 27.183 0.637 0.691 -0.072 + 243.8417 33.7403 -9.194 8.234 0.637 0.575 -0.071 + 245.1360 47.4451 0.872 0.125 0.722 0.817 0.046 + 246.5866 44.2512 -0.297 -0.443 0.692 0.748 0.066 + 237.7481 37.8711 -15.975 23.028 0.638 0.690 -0.038 + 239.6184 35.6741 -23.574 30.828 1.010 1.307 -0.012 + 243.5281 44.5985 -0.609 -0.022 0.487 0.597 0.007 + 241.9678 40.9395 -4.270 1.658 0.793 0.788 -0.002 + 246.4431 47.9562 0.632 -0.421 0.721 0.827 0.070 + 242.2526 35.8232 -6.869 8.436 0.641 0.678 0.015 + 242.4950 35.2133 -7.801 10.009 0.641 0.708 0.051 + 246.6442 48.3171 1.632 -1.178 0.665 0.752 -0.017 + 249.1491 43.4984 -0.851 -0.537 0.642 0.788 0.011 + 236.3509 46.3339 7.574 7.472 0.536 0.604 0.010 + 237.7296 46.5506 3.679 4.758 0.658 0.577 -0.012 + 243.5803 33.6086 -14.511 18.196 0.643 0.709 -0.020 + 238.7041 41.6292 -3.037 5.011 0.973 0.608 -0.004 + 239.0702 44.2564 0.811 3.060 0.729 0.730 -0.002 + 241.2142 34.0858 -25.682 26.670 0.707 0.645 -0.105 + 241.8202 33.9513 -26.240 26.659 0.644 0.679 -0.042 + 251.2100 45.7138 1.036 -0.336 0.601 0.651 0.111 + 243.1591 32.6007 -28.148 28.428 0.645 0.733 -0.026 + 243.5254 33.9251 -11.223 15.457 0.645 0.651 -0.011 + 244.2745 32.6481 -21.117 27.669 0.646 0.658 0.006 + 242.0577 33.7928 -27.577 27.865 0.647 0.579 -0.063 + 242.3154 43.7943 -0.672 0.733 0.467 0.533 -0.006 + 239.4301 40.5472 -5.667 4.905 0.699 0.765 0.012 + 240.3216 43.5389 -0.299 2.159 0.514 0.558 -0.010 + 240.5156 34.8525 -23.968 25.327 0.648 0.628 0.025 + 244.6925 32.4183 -10.969 24.456 0.648 0.585 -0.013 + 243.2682 33.9378 -14.362 16.623 0.649 0.663 -0.002 + 241.5814 33.9722 -30.337 33.481 0.650 0.660 0.008 + 244.2304 33.4271 -8.702 5.798 0.650 0.615 0.000 + 238.2046 36.7743 -28.055 34.383 0.837 0.698 0.001 + 239.7548 40.1254 -6.189 5.358 0.719 0.833 0.021 + 243.7757 33.9777 -6.207 9.057 0.652 0.670 -0.001 + 243.9738 33.5915 -11.269 9.903 0.653 0.659 0.002 + 238.9385 43.1248 -0.811 4.359 0.563 0.521 -0.067 + 245.0112 33.6092 -1.595 0.266 0.655 0.642 -0.015 + 239.3850 40.4508 -6.184 5.488 0.710 0.874 0.009 + 243.0559 44.1193 -0.771 0.682 0.492 0.687 -0.011 + 238.0475 37.5324 -16.010 19.260 0.756 0.781 0.041 + 240.6034 45.6575 0.687 0.973 0.483 0.589 0.013 + 240.8127 46.0614 0.453 0.541 0.558 0.637 0.033 + 243.6102 34.1531 -6.055 8.810 0.659 0.653 -0.054 + 244.7545 32.2446 -18.619 25.194 0.659 0.683 -0.002 + 251.7863 43.5856 1.205 0.816 0.800 0.893 0.079 + 243.5019 33.5711 -15.927 19.867 0.661 0.729 -0.014 + 237.5976 37.9423 -19.086 25.072 0.662 0.688 -0.010 + 239.8168 39.9198 -7.227 5.000 0.702 0.828 0.016 + 241.9971 33.9917 -27.386 24.732 0.662 0.602 -0.023 + 244.3907 33.0300 -7.934 13.076 0.662 0.693 0.003 + 242.1848 44.8327 -0.192 0.117 0.551 0.572 -0.002 + 243.9947 46.2126 1.269 0.046 0.450 0.572 0.021 + 244.3177 33.9719 -3.078 2.610 0.664 0.677 0.004 + 249.6454 44.3300 -1.051 -1.206 0.664 0.715 0.003 + 236.5389 45.7968 6.054 6.982 0.731 0.756 0.005 + 237.4588 41.4397 -3.562 6.767 0.821 0.633 -0.004 + 242.6833 35.2139 -7.303 9.064 0.668 0.748 0.059 + 240.7358 34.5655 -28.100 23.751 1.100 0.605 0.034 + 242.6571 33.9549 -21.426 24.083 0.669 0.805 0.159 + 243.4021 33.0743 -25.728 30.736 0.673 0.664 -0.020 + 235.8682 40.5540 -4.912 20.214 1.133 1.133 -0.014 + 238.8655 35.6052 -28.269 37.201 1.468 0.816 -0.002 + 244.1682 31.6460 -28.056 29.003 0.558 0.565 -0.017 + 237.0770 38.2038 -18.499 29.073 0.676 0.751 0.017 + 240.9336 43.5855 -0.513 1.519 0.430 0.528 -0.008 + 241.7842 34.2107 -25.057 24.410 0.677 0.692 -0.052 + 242.4430 36.0022 -6.345 4.632 0.677 0.733 0.026 + 247.8928 45.2385 0.980 -0.229 0.660 0.707 0.084 + 239.5859 34.7306 -29.870 36.835 0.682 0.502 -0.070 + 241.5967 33.9965 -27.624 29.805 0.682 0.594 0.037 + 243.7667 33.2583 -21.289 21.688 0.682 0.621 -0.009 + 238.2741 41.5077 -2.806 7.075 0.696 1.244 0.004 + 235.6231 40.4516 -7.023 33.381 1.630 1.430 -0.080 + 236.2968 46.9727 8.207 6.819 0.860 0.795 -0.030 + 238.1086 41.3464 -3.432 6.163 0.767 0.887 -0.007 + 238.9805 39.7298 -8.701 6.656 0.745 0.830 0.018 + 240.3508 40.9227 -4.521 3.193 0.723 0.764 0.009 + 244.1522 33.9057 -3.490 3.746 0.684 0.700 0.002 + 245.9098 46.9244 0.992 -0.534 0.684 0.738 0.073 + 240.9587 33.4721 -31.182 35.283 0.685 0.571 -0.054 + 236.0397 45.8617 8.393 8.159 0.846 0.759 -0.017 + 241.6071 38.5428 -4.319 3.635 0.714 0.841 0.018 + 243.2245 33.9159 -14.184 18.143 0.686 0.704 0.018 + 235.8843 40.8048 3.530 18.393 0.688 0.775 0.013 + 236.5489 48.1237 6.267 3.662 0.613 0.850 0.005 + 241.6178 47.1272 1.385 0.507 0.478 0.607 -0.016 + 242.9528 46.2923 0.486 -0.463 0.543 0.700 0.015 + 241.3459 43.6187 -0.337 0.644 0.540 0.665 0.002 + 237.0750 38.2059 -20.025 31.051 0.692 0.846 0.017 + 239.6586 40.5588 -5.914 4.403 0.713 0.781 0.016 + 240.5000 40.7897 -4.394 3.277 0.797 0.790 0.019 + 244.2706 32.7890 -21.466 26.551 0.661 0.593 -0.018 + 251.9719 44.4931 0.856 0.220 0.693 0.750 0.026 + 242.9575 35.1678 -7.814 7.788 0.694 0.780 0.053 + 241.0373 34.0528 -28.214 29.958 0.695 0.759 -0.075 + 244.4989 33.2790 -2.489 1.912 0.696 0.718 0.020 + 236.2121 45.9072 6.585 8.241 1.526 0.971 -0.095 + 241.4230 38.6061 -4.865 4.314 0.775 0.701 0.016 + 242.4085 35.0829 -8.367 10.714 0.698 0.770 0.054 + 246.3498 41.4626 -2.203 -0.551 0.774 0.940 0.091 + 242.4079 35.8751 -6.619 6.690 0.699 0.754 0.039 + 242.4536 36.0668 -5.779 4.620 0.700 0.759 0.000 + 240.5945 39.3498 -6.092 5.814 1.169 1.169 -0.022 + 241.6055 33.8773 -27.332 29.620 0.701 0.705 -0.006 + 237.0811 46.2833 4.119 6.057 0.943 0.756 -0.016 + 238.0650 37.5128 -15.059 18.165 0.918 1.009 -0.087 + 249.6475 42.9966 0.769 0.352 0.819 0.857 0.104 + 237.4340 45.5467 3.189 5.369 0.939 0.760 -0.025 + 238.7577 38.7861 -8.382 8.386 0.708 0.812 -0.052 + 242.6336 43.9394 -0.701 -0.195 0.504 0.654 0.008 + 248.0084 46.5864 1.253 -0.606 0.709 0.754 0.116 + 239.3811 44.3070 0.367 3.530 0.703 0.854 0.001 + 243.7263 33.6386 -12.792 13.514 0.711 0.723 -0.027 + 243.8092 34.0827 -5.204 7.652 0.711 0.742 -0.012 + 244.1801 46.6339 0.161 0.894 0.729 0.961 0.035 + 235.7824 40.7669 4.501 19.912 0.712 0.742 -0.032 + 237.7143 37.9107 -17.977 22.897 0.714 0.735 -0.056 + 241.7054 35.1208 -10.649 12.975 0.639 1.181 0.004 + 242.6966 34.1122 -19.887 20.176 0.718 0.778 -0.033 + 237.9411 37.0994 -23.324 34.084 0.719 0.773 -0.030 + 242.2225 34.1109 -24.766 23.270 0.719 0.752 -0.081 + 236.3249 40.4390 -8.314 13.396 0.776 0.807 -0.007 + 244.2479 33.4124 -9.206 6.283 0.726 0.749 -0.005 + 245.9619 39.0596 -3.079 -0.285 0.726 0.850 -0.079 + 250.9920 43.2286 -0.411 -0.574 0.803 0.907 0.109 + 238.0642 37.5121 -18.245 21.937 0.727 0.706 -0.088 + 238.7258 41.4779 -3.967 5.154 0.691 0.690 0.007 + 235.9049 41.1917 1.731 12.474 1.102 0.841 0.002 + 240.9640 44.5350 0.432 1.726 0.540 0.627 -0.027 + 244.1729 31.6248 -27.862 30.135 0.921 0.570 -0.006 + 244.1777 31.6340 -28.272 29.274 0.590 0.588 0.030 + 238.0388 37.5431 -12.822 17.719 0.734 0.792 -0.050 + 238.8503 39.6307 -8.711 6.826 0.749 0.846 0.020 + 239.0638 39.8222 -8.825 6.685 0.899 0.796 0.015 + 243.0168 32.5685 -26.162 28.459 0.736 0.712 -0.161 + 238.0501 38.5327 -9.258 9.288 0.853 0.887 -0.012 + 242.2936 35.5130 -7.312 9.594 0.737 0.750 -0.019 + 242.7644 43.9830 -0.375 1.059 0.743 0.788 0.010 + 247.1754 44.5526 -0.021 -0.504 0.585 0.631 0.037 + 241.9117 33.7375 -26.693 29.372 0.740 0.572 0.029 + 240.0930 41.0886 -4.447 3.603 0.786 0.941 0.022 + 241.0602 34.3938 -29.878 26.287 0.741 0.674 0.037 + 241.7540 40.9350 -4.100 2.069 0.776 0.791 0.020 + 237.9478 36.9928 -25.223 34.034 0.742 0.833 -0.034 + 241.4378 34.1793 -26.249 28.788 0.680 1.273 -0.001 + 242.0002 34.3460 -23.703 21.234 0.745 0.751 -0.033 + 242.5411 35.5843 -6.613 8.225 0.746 0.840 0.091 + 236.3775 40.9439 -2.145 9.444 0.786 0.848 -0.022 + 236.2026 40.4721 -4.991 14.702 0.753 0.843 -0.028 + 238.9574 35.5294 -27.528 36.898 0.779 1.448 -0.007 + 241.8908 34.5436 -18.902 19.539 0.756 0.887 -0.095 + 242.8959 34.0222 -15.895 17.758 0.759 0.797 -0.080 + 237.6382 38.2832 -13.160 18.718 1.059 1.737 -0.036 + 241.1229 34.3280 -27.130 27.584 0.762 0.739 -0.002 + 243.6085 33.6878 -13.395 14.236 0.764 0.823 -0.027 + 240.0005 42.9537 -1.728 3.119 0.493 0.574 -0.004 + 241.6642 33.7472 -27.204 33.285 0.765 0.826 -0.055 + 241.7439 43.7846 -0.930 0.131 0.795 1.032 0.029 + 238.1567 38.9277 -9.407 6.918 0.766 0.848 -0.051 + 243.2229 33.7945 -16.643 20.992 0.767 0.765 -0.062 + 245.7969 32.9391 -0.466 1.046 0.767 0.638 0.058 + 239.1581 40.3666 -7.076 6.198 0.790 0.963 0.009 + 243.8288 33.7490 -10.617 9.210 0.768 0.773 -0.003 + 238.6694 37.7301 -10.743 8.188 0.720 0.759 -0.064 + 241.4401 34.1301 -26.951 32.326 0.994 0.918 -0.027 + 241.5926 34.7491 -15.909 15.695 0.776 0.777 -0.012 + 238.5147 36.9359 -12.622 20.876 1.161 1.047 0.009 + 242.0296 40.1158 -5.508 2.685 0.980 0.879 0.037 + 243.0684 33.4678 -24.176 25.224 0.782 0.825 -0.045 + 241.1142 34.1955 -28.888 29.761 0.785 0.768 -0.252 + 235.7444 40.5890 1.039 23.475 1.026 1.098 -0.006 + 237.0798 47.3893 4.626 1.296 0.789 0.914 -0.098 + 237.9441 36.9780 -27.866 33.285 0.790 0.896 -0.031 + 242.8111 33.5052 -26.136 27.254 0.792 0.777 -0.034 + 242.1145 38.0309 -3.997 2.747 0.758 0.799 -0.013 + 246.1969 48.2083 1.503 -0.697 0.893 1.112 0.027 + 243.3205 33.8147 -13.638 18.712 0.794 0.803 0.010 + 244.1014 32.7795 -23.578 25.878 0.803 0.905 0.002 + 244.1698 31.6368 -28.236 29.645 0.630 0.611 -0.007 + 241.7393 37.1830 -5.586 6.212 0.797 0.817 -0.010 + 242.6713 35.9779 -5.158 4.616 0.798 0.803 -0.014 + 237.2748 37.9675 -21.484 30.198 0.801 0.504 -0.422 + 237.8423 48.1616 3.605 3.441 1.048 0.995 -0.005 + 243.7014 33.2957 -21.690 20.255 0.802 0.843 -0.037 + 241.6742 34.1370 -26.044 25.498 0.803 0.831 -0.056 + 238.3043 36.7823 -27.909 33.789 0.887 0.978 -0.018 + 241.1378 37.6189 -6.541 7.052 0.808 0.926 -0.043 + 238.0716 41.6567 -1.289 4.875 0.812 0.891 0.015 + 241.1499 34.3580 -27.436 28.808 0.819 0.667 -0.110 + 240.2730 37.2499 -7.925 9.918 0.822 0.587 0.034 + 241.7077 28.8827 -35.551 36.152 0.823 0.809 -0.003 + 235.9196 40.0300 -21.083 32.093 0.772 0.824 -0.035 + 235.8162 41.7460 1.705 11.267 0.831 0.920 -0.091 + 243.4138 33.9880 -11.299 13.777 0.837 0.987 0.009 + 237.4532 39.3517 -10.054 7.255 0.807 1.085 0.038 + 240.7978 34.4399 -31.617 26.995 0.839 0.845 -0.013 + 236.7945 46.1052 5.166 6.276 0.846 0.869 -0.055 + 240.6452 34.6830 -28.166 22.186 0.840 0.922 -0.077 + 243.8136 34.3484 -1.845 4.403 0.842 0.854 0.012 + 239.5841 44.3971 0.323 2.931 0.834 1.138 0.037 + 242.1749 41.3978 -2.911 1.765 0.951 1.005 -0.017 + 243.7771 34.8910 -5.391 1.406 0.852 0.864 0.005 + 237.9045 37.5510 -17.436 23.682 0.854 0.964 0.027 + 238.3941 41.3308 -4.340 5.250 0.744 0.778 -0.012 + 238.1774 38.4751 -9.211 8.568 0.961 0.954 -0.012 + 239.2938 35.5653 -26.073 35.083 0.838 1.324 0.006 + 241.0677 35.2229 -13.007 10.397 0.866 0.906 -0.042 + 239.4419 40.2614 -7.381 6.851 0.867 0.838 -0.027 + 237.6694 44.1738 1.271 4.960 0.908 1.101 -0.043 + 244.2575 34.5586 -2.337 0.891 0.871 0.864 0.038 + 236.6749 40.8145 -6.158 8.507 1.398 1.153 0.038 + 241.5865 39.2762 -4.092 4.178 1.098 1.205 -0.069 + 241.5590 34.0687 -22.097 27.544 0.882 0.807 -0.034 + 243.7006 33.7143 -13.165 13.445 0.882 0.930 -0.013 + 243.5703 33.5842 -16.971 18.095 0.884 1.002 -0.041 + 236.5551 46.1002 5.710 7.198 1.085 1.279 0.117 + 241.7642 45.3311 -0.102 1.311 0.643 0.783 0.026 + 236.2276 40.8964 -2.813 11.023 0.979 1.322 -0.002 + 239.9674 39.2384 -9.159 6.728 0.947 0.902 -0.073 + 237.6603 41.4857 -4.126 6.236 0.930 0.913 -0.009 + 241.7199 34.2151 -24.645 24.552 0.905 0.978 -0.011 + 241.8537 34.7541 -14.092 15.568 0.907 0.704 0.135 + 242.8296 34.8335 -10.597 12.210 0.909 0.987 -0.052 + 238.9252 36.4880 -12.389 13.893 0.912 1.005 0.043 + 241.6266 34.2223 -25.705 24.831 0.923 1.070 -0.038 + 237.6543 39.0656 -9.729 7.635 0.884 1.053 0.046 + 240.1767 34.5131 -29.667 31.786 0.934 0.978 -0.012 + 241.5018 34.0905 -24.427 29.122 0.935 0.980 0.001 + 248.3031 38.9082 -0.097 0.371 0.937 1.106 -0.070 + 244.1383 33.1791 -14.545 15.007 0.938 1.000 0.024 + 237.8478 37.7544 -17.467 21.561 0.939 0.921 -0.011 + 244.6564 32.1616 -23.909 26.154 0.939 0.961 0.036 + 241.4574 34.2020 -26.111 28.382 0.845 1.101 0.020 + 241.7969 34.0847 -26.105 25.023 0.946 0.911 -0.018 + 243.1787 33.4938 -24.678 25.098 0.949 0.950 -0.055 + 238.1061 41.5031 -3.776 4.724 2.033 1.349 0.011 + 239.0035 36.4097 -12.705 9.924 0.958 1.078 0.053 + 235.8794 40.4172 -7.970 25.148 0.960 1.120 -0.122 + 241.1933 34.0016 -26.424 29.850 0.972 0.748 -0.114 + 243.5511 33.9150 -9.725 13.529 0.972 1.176 0.103 + 238.3818 41.4899 -3.691 6.650 0.801 0.904 -0.043 + 243.3300 33.4925 -22.048 22.386 0.974 1.077 0.066 + 241.5231 34.1259 -28.228 27.715 0.981 1.112 0.039 + 241.7174 34.1612 -26.421 23.751 0.983 1.056 0.003 + 239.8563 34.5188 -32.589 34.242 0.986 1.026 0.066 + 241.7446 34.5033 -25.278 21.394 0.987 0.858 -0.097 + 241.9467 34.1139 -24.662 24.821 0.987 1.212 -0.021 + 244.9642 32.2991 -6.755 7.806 0.992 0.989 -0.032 + 241.4871 34.1288 -24.825 28.135 1.002 0.974 0.056 + 241.5704 34.3522 -25.888 24.674 1.002 0.961 -0.069 + 242.7582 34.5367 -12.193 11.664 1.009 1.213 -0.146 + 238.4696 38.5711 -11.560 9.007 1.011 1.193 -0.060 + 243.2880 33.7143 -17.968 18.289 1.011 1.158 -0.023 + 242.3952 34.3616 -16.527 20.113 1.020 1.030 0.003 + 239.3202 39.2934 -11.598 9.241 1.021 1.051 0.009 + 243.1523 33.6303 -21.752 20.668 1.031 1.240 -0.029 + 241.8153 36.7808 -7.493 7.464 1.033 0.612 -0.012 + 238.5494 37.8055 -10.611 9.681 0.827 0.894 -0.014 + 244.2759 32.5711 -23.156 21.513 1.036 1.066 0.052 + 242.0914 33.7483 -27.151 29.367 1.038 1.075 -0.186 + 239.5437 35.9504 -10.887 17.344 0.857 0.960 0.012 + 243.4169 33.5652 -19.474 18.869 1.045 1.246 -0.048 + 237.5084 39.3011 -10.201 6.792 1.050 1.174 -0.124 + 239.5094 35.9435 -21.993 27.769 0.857 2.062 -0.001 + 236.4410 38.7879 -24.045 34.521 0.924 1.061 -0.040 + 238.2290 36.8456 -26.972 33.274 1.060 1.284 0.066 + 243.5381 33.6204 -17.013 14.165 1.065 1.246 -0.063 + 235.8812 40.5589 -14.378 14.464 1.066 1.118 -0.074 + 241.7840 33.8682 -27.654 30.286 1.068 1.184 -0.131 + 241.0766 34.2776 -27.868 28.480 1.071 0.957 0.032 + 244.2127 33.4271 -7.006 7.485 1.080 1.101 0.017 + 243.2905 33.5491 -20.557 23.149 1.083 1.216 0.103 + 241.3298 34.2788 -27.241 26.762 1.084 1.202 0.010 + 243.5281 33.6836 -16.872 20.608 1.091 1.149 -0.013 + 240.7040 34.2849 -32.913 33.325 1.096 1.239 0.030 + 241.4889 34.2576 -25.274 24.888 1.456 0.996 0.010 + 243.4096 33.6460 -15.677 19.082 1.102 1.169 0.054 + 237.0241 39.4344 -12.537 11.757 1.112 1.202 0.018 + 242.5816 34.9481 -9.668 11.552 1.115 1.012 -0.035 + 240.5273 34.4191 -28.665 28.105 1.120 1.164 0.043 + 240.9792 37.6874 -13.953 10.630 1.120 1.230 -0.031 + 242.4886 35.5746 -7.679 9.345 1.058 0.908 0.002 + 243.5621 33.5986 -16.398 17.709 1.122 1.255 -0.028 + 237.7020 37.9976 -15.537 16.658 1.123 1.342 0.030 + 237.0090 45.5244 3.976 6.318 0.865 0.939 -0.109 + 244.7571 31.9882 -24.823 27.150 1.121 1.031 0.014 + 242.9982 33.9421 -15.129 19.209 1.139 1.220 0.017 + 243.2077 35.2481 -7.564 5.843 1.157 1.185 -0.016 + 243.8250 33.8102 -10.202 6.950 1.161 0.967 0.010 + 238.4131 36.9211 -20.238 25.647 1.162 1.321 0.029 + 239.5474 35.9639 -9.177 16.123 0.932 1.050 0.005 + 243.6214 34.5550 -7.068 5.752 1.173 1.189 0.013 + 241.0239 37.6547 -7.701 8.967 1.205 1.388 -0.168 + 241.5671 33.9282 -26.844 28.661 1.185 0.749 0.102 + 242.9138 33.6357 -23.276 26.082 1.187 1.299 -0.124 + 243.3661 33.5567 -19.451 19.718 1.197 1.519 0.007 + 240.6690 34.3006 -28.888 27.442 1.202 1.150 0.018 + 242.1495 35.4192 -9.056 10.483 1.045 0.936 0.002 + 243.7194 33.7504 -12.243 11.635 1.202 1.217 0.019 + 244.6569 32.3534 -21.795 27.875 1.202 1.225 0.050 + 237.7494 37.8720 -13.566 19.398 1.204 1.329 0.182 + 237.3393 47.4462 5.234 4.001 1.217 1.534 -0.088 + 238.1874 39.3221 -9.565 8.053 1.210 1.258 -0.112 + 238.2941 37.1838 -19.028 21.539 1.221 1.252 0.021 + 241.2390 34.1464 -28.617 29.442 1.223 1.389 -0.033 + 243.1941 35.2995 -6.520 5.947 1.224 1.268 -0.020 + 239.4989 37.4936 -8.324 9.100 1.226 0.684 0.013 + 243.0032 33.9331 -16.817 18.603 1.239 1.312 -0.015 + 241.6691 34.1479 -26.946 23.017 1.252 1.469 -0.059 + 243.8402 33.6280 -12.890 13.493 1.267 1.253 0.077 + 239.7013 35.3460 -24.771 31.255 1.181 0.892 -0.010 + 243.9568 33.3970 -13.814 12.010 1.295 1.451 -0.261 + 237.7887 37.8258 -19.242 21.106 1.322 1.449 -0.019 + 241.5574 34.0696 -24.747 30.344 1.338 1.206 -0.035 + 243.3529 34.3696 -10.747 14.118 1.346 1.395 -0.160 + 245.1518 32.5041 -2.276 2.699 1.361 1.356 0.051 + 242.7886 35.4767 -6.276 8.280 1.326 1.092 0.002 + 239.8090 35.7252 -14.203 19.015 1.372 1.114 0.013 + 241.3542 35.1393 -12.629 14.030 1.403 1.405 -0.009 + 242.1836 33.6023 -28.308 31.156 1.436 1.391 -0.037 + 251.1490 45.0383 0.330 -1.162 0.980 1.000 0.007 + 250.8492 44.8378 1.166 0.467 0.703 0.761 0.052 + 250.1386 46.3682 1.221 -0.318 0.677 0.780 0.093 + 249.9371 44.9794 0.994 -0.858 0.430 0.930 -0.021 + 249.8054 42.2709 0.331 0.169 0.320 0.360 0.050 + 249.3327 44.0996 -2.389 -0.276 0.720 0.960 -0.005 + 249.0664 42.7070 0.091 -0.462 0.290 0.330 0.034 + 248.9538 45.6631 1.011 0.084 0.200 0.200 0.004 + 248.8943 43.7379 -1.136 -1.843 0.200 0.200 -0.005 + 248.6952 44.3171 -1.445 -2.703 0.320 0.620 -0.014 + 248.6438 44.6555 -1.021 -2.900 0.480 0.540 0.002 + 248.5560 42.9187 -0.745 -0.803 0.729 0.824 0.068 + 248.5214 44.8302 0.341 -0.714 0.200 0.200 0.005 + 248.4858 44.5983 -1.306 -3.152 0.200 0.200 -0.049 + 248.4158 42.6535 -1.806 0.111 0.504 0.727 -0.008 + 248.4080 44.9018 -0.324 -1.418 0.860 0.600 -0.009 + 248.1948 43.8362 -1.771 -1.386 0.250 0.260 -0.022 + 248.1195 42.6500 -2.246 -1.352 0.720 0.910 0.174 + 248.0419 44.5984 -0.657 -1.418 0.200 0.200 -0.027 + 247.9953 44.8824 0.183 -0.656 0.260 0.280 0.001 + 247.9886 44.3488 -1.455 -1.195 0.420 0.420 0.002 + 247.7970 44.6002 0.213 -1.435 0.580 0.690 0.000 + 247.7964 47.8339 1.546 0.378 0.947 0.980 0.030 + 247.7875 42.0359 -1.100 -0.625 0.670 0.430 -0.047 + 247.7780 42.6960 -1.583 -1.114 0.350 0.410 -0.087 + 247.7645 44.0680 -1.315 -1.324 0.200 0.200 -0.027 + 247.6623 43.5398 -1.043 -2.228 0.410 1.190 0.015 + 247.6424 44.9062 0.010 -0.678 0.467 0.468 0.003 + 247.5986 42.8263 -1.515 -1.145 0.310 0.360 -0.098 + 247.5768 42.8550 -2.173 -1.124 0.250 0.280 -0.040 + 247.5394 44.6028 -0.278 -0.682 0.530 0.280 0.006 + 247.4618 44.1281 -0.772 -1.548 0.390 0.250 -0.004 + 247.3653 43.4447 -1.951 -0.843 0.790 0.750 0.084 + 247.2123 46.1842 0.734 -0.905 0.290 0.350 -0.012 + 247.0641 42.7094 -1.674 -0.707 0.660 0.410 -0.043 + 247.0321 44.6129 0.081 -0.615 0.240 0.250 0.004 + 247.0192 44.2361 -0.366 -0.904 0.200 0.200 0.012 + 246.9704 44.6029 -0.167 -0.524 0.590 0.532 0.000 + 246.9362 44.4656 0.160 -0.340 0.460 0.490 0.013 + 246.8524 43.5915 -1.662 -0.526 0.480 0.490 0.004 + 246.8211 43.9977 -0.663 -0.764 0.470 0.360 0.005 + 246.7363 43.4959 -2.109 -1.250 0.730 0.750 0.014 + 246.6937 43.6214 -1.512 -0.375 0.530 0.952 0.026 + 246.6731 44.6371 0.182 0.024 0.350 0.370 -0.021 + 246.5932 43.8026 -1.728 -0.122 0.430 0.490 0.028 + 246.5267 43.7234 -0.564 -0.049 0.420 0.450 -0.002 + 246.4680 45.6292 0.732 -0.366 0.330 0.260 -0.012 + 246.3700 44.2137 -0.884 -0.162 0.547 0.601 0.005 + 246.2445 47.3648 1.274 -0.654 0.260 0.320 -0.041 + 246.1484 44.2036 -0.829 0.039 0.746 0.580 0.010 + 246.1171 45.1138 0.444 -0.447 0.200 0.200 -0.025 + 246.0848 46.8842 1.379 -0.285 0.200 0.210 -0.005 + 246.0280 47.1734 0.910 -0.742 0.240 0.270 -0.053 + 245.9704 43.4327 -1.687 -0.139 0.250 0.540 0.042 + 245.9466 46.3028 0.678 -0.528 0.380 0.420 0.029 + 245.8319 46.7256 1.097 0.488 0.370 0.370 0.001 + 245.8309 47.1694 0.899 -0.762 0.210 0.230 0.019 + 245.8261 47.9238 0.789 -0.307 0.879 1.012 0.004 + 245.7061 43.7469 -1.456 -0.446 0.430 0.480 -0.247 + 245.6496 43.6466 -2.173 -0.503 0.440 0.480 -0.129 + 245.5835 42.9359 -1.754 -0.299 0.350 0.370 -0.005 + 245.5502 42.6236 -2.036 0.083 0.290 0.500 -0.048 + 245.5241 42.4801 -2.167 -0.106 0.260 0.300 -0.052 + 245.3398 43.1411 -2.000 -0.096 0.260 0.300 -0.033 + 245.2988 41.9047 -2.938 -0.104 0.230 0.240 -0.002 + 245.1657 44.0539 -1.533 -0.358 0.609 0.621 -0.017 + 245.0897 43.3426 -2.136 0.530 0.709 0.687 0.062 + 245.0884 42.9235 -1.877 0.037 0.280 0.320 -0.056 + 245.0692 44.2160 -0.745 -0.222 0.260 0.300 -0.050 + 244.8975 42.0866 -2.667 -0.033 0.310 0.320 -0.049 + 244.7856 43.3185 -1.472 -0.147 0.511 0.531 0.041 + 244.6854 46.3387 1.064 0.528 0.290 0.360 -0.096 + 244.4512 43.2525 -1.816 0.057 0.667 0.649 0.012 + 244.4419 43.4898 -1.650 0.011 0.260 0.290 -0.049 + 244.3856 44.0827 -1.098 0.424 0.560 0.350 -0.051 + 244.2690 43.1312 -1.891 -0.018 0.481 0.496 0.005 + 244.1682 41.5111 -3.002 0.025 0.250 0.280 0.034 + 244.1617 42.8803 -1.364 0.135 0.260 0.290 -0.029 + 244.1361 43.8158 -2.218 0.307 0.480 0.560 0.033 + 243.9512 43.4260 -1.407 0.896 0.270 0.300 -0.039 + 243.8974 44.8961 0.388 0.329 0.230 0.570 0.010 + 243.8245 47.5459 1.185 0.103 0.510 0.620 -0.058 + 243.8126 41.9624 -2.661 0.044 0.470 0.290 -0.005 + 243.7950 43.9130 -1.063 0.604 0.510 0.620 0.067 + 243.7697 43.6339 -1.713 0.766 0.490 0.620 -0.169 + 243.7417 48.7313 1.829 -0.443 0.510 0.650 -0.060 + 243.7319 43.0445 -1.816 0.097 0.503 0.530 0.027 + 243.7087 45.6564 0.941 0.399 0.270 0.330 -0.054 + 243.6869 44.2539 -0.339 0.890 0.360 0.470 -0.116 + 243.6269 46.1419 1.345 0.263 0.310 0.380 -0.038 + 243.5980 46.8568 1.775 0.155 0.560 0.690 -0.065 + 243.5877 43.0754 -1.293 0.515 0.270 0.300 -0.062 + 243.5511 44.6692 0.070 0.487 0.260 0.300 -0.061 + 243.4784 43.5810 -0.998 0.091 0.260 0.300 -0.029 + 243.4537 46.5149 0.948 0.375 0.777 1.190 0.027 + 243.2036 47.7432 1.086 -0.395 0.410 0.460 -0.014 + 243.2019 44.4449 -0.348 0.325 0.310 0.370 -0.068 + 243.1879 44.4398 -1.304 0.908 0.677 0.686 -0.004 + 243.0451 43.8351 -0.583 0.184 0.310 0.370 -0.045 + 242.9944 44.0196 -0.406 -0.202 0.362 0.469 0.018 + 242.9505 46.4259 1.631 -0.432 0.590 0.710 -0.075 + 242.9467 42.9796 -1.614 0.699 0.200 0.200 -0.010 + 242.9413 48.1792 1.505 -0.041 0.470 0.610 -0.031 + 242.8681 47.2744 1.960 0.833 0.630 0.810 -0.043 + 242.7571 42.9271 -1.609 0.610 0.665 0.845 -0.015 + 242.7510 45.9288 0.874 0.119 0.370 0.430 -0.051 + 242.6454 45.9271 0.377 0.298 0.990 1.049 0.031 + 242.5427 44.5776 -0.313 0.740 0.330 0.410 -0.031 + 242.4308 46.4857 1.282 1.345 0.560 0.690 -0.055 + 242.4175 44.2586 -0.836 1.726 0.950 0.710 0.042 + 242.2978 45.9370 -0.098 0.452 0.510 0.610 -0.023 + 242.2842 42.0131 -3.706 0.173 0.530 0.600 -0.062 + 242.1920 42.3075 -2.745 1.365 0.819 0.648 0.019 + 242.1799 45.2968 1.166 0.429 0.600 0.760 -0.049 + 242.1786 45.7691 0.694 0.121 0.334 0.387 -0.007 + 242.1125 48.5415 1.885 0.302 0.360 0.420 -0.041 + 242.0759 46.7946 1.361 0.044 0.450 0.540 -0.018 + 242.0198 45.4060 1.865 0.030 0.509 0.656 0.012 + 241.9927 42.9228 -1.474 0.758 0.310 0.350 -0.060 + 241.8798 43.0219 -2.338 0.230 0.794 0.943 -0.009 + 241.7175 46.0883 1.119 0.293 0.380 0.440 -0.010 + 241.6986 43.1657 -1.789 0.520 0.844 0.895 -0.026 + 241.6380 45.2735 -0.012 0.236 0.478 0.522 -0.011 + 241.6290 40.0154 -5.086 2.306 0.680 0.677 -0.032 + 241.5850 42.6598 -2.063 1.558 0.545 0.585 0.013 + 241.5830 43.7520 0.278 1.683 0.475 0.441 0.019 + 241.5489 43.2165 -1.146 1.801 0.280 0.320 -0.057 + 241.5291 45.8126 0.858 1.012 0.200 0.210 0.016 + 241.4698 45.5995 0.742 1.035 0.330 0.240 -0.001 + 241.4457 45.1762 0.768 0.762 0.405 0.553 0.002 + 241.4271 42.0941 -2.116 2.138 0.330 0.360 -0.009 + 241.4205 42.1010 -2.116 2.138 0.330 0.360 -0.009 + 241.4110 46.9729 1.098 0.702 0.328 0.314 -0.002 + 241.3850 42.4498 -2.211 1.870 0.450 0.820 -0.011 + 241.3582 42.7389 -0.681 1.741 0.640 0.730 0.121 + 241.3408 48.6975 1.500 1.072 0.550 0.680 -0.030 + 241.2872 47.7607 1.504 0.855 0.290 0.400 0.051 + 241.2861 45.1704 0.423 0.511 0.721 0.522 0.002 + 241.2708 40.8478 -4.655 2.876 0.800 0.890 0.059 + 241.1198 46.2512 1.226 1.953 0.620 0.740 -0.056 + 241.0387 44.4099 -0.075 1.538 0.200 0.200 -0.002 + 241.0145 47.9714 1.707 0.679 0.240 0.290 0.018 + 241.0116 42.7153 -1.968 1.809 0.772 0.781 0.008 + 240.9935 46.6212 1.143 1.009 0.316 0.297 0.007 + 240.9685 45.4989 0.732 1.501 0.200 0.220 0.028 + 240.8830 47.8670 1.888 0.296 0.250 0.300 -0.013 + 240.7410 45.8274 0.343 1.183 0.430 0.440 -0.005 + 240.7324 46.1952 1.225 1.141 0.429 0.513 -0.004 + 240.6996 45.9445 1.301 0.807 0.291 0.334 0.031 + 240.6916 47.6196 1.949 0.966 0.340 0.410 0.029 + 240.6793 46.7747 2.130 1.296 0.200 0.200 0.018 + 240.6622 47.1852 1.149 1.417 0.200 0.200 -0.008 + 240.6398 47.6124 1.789 1.118 0.200 0.200 -0.008 + 240.6376 39.8203 -6.372 3.769 0.590 0.640 0.003 + 240.5814 41.1732 -4.147 1.582 0.620 0.690 -0.026 + 240.5484 48.6943 2.374 0.733 0.770 1.030 -0.040 + 240.5392 46.5981 2.016 1.394 0.200 0.200 0.029 + 240.4510 45.3441 0.846 1.944 0.225 0.386 0.008 + 240.4358 39.9127 -6.377 4.129 0.600 0.650 -0.057 + 240.4358 46.2475 1.501 1.769 0.500 0.590 0.047 + 240.4104 46.3914 2.001 1.510 0.340 0.360 0.003 + 240.3795 46.9630 2.041 1.752 0.200 0.200 0.009 + 240.3719 44.6226 0.235 2.172 0.200 0.210 0.044 + 240.3643 44.7715 0.344 1.322 0.410 0.512 -0.047 + 240.3288 46.8136 1.860 1.464 0.230 0.240 0.009 + 240.2725 46.5775 1.413 1.627 0.200 0.200 -0.005 + 240.2633 48.3943 0.571 0.928 0.700 0.840 -0.081 + 240.2146 41.5830 -4.141 1.990 0.580 0.650 -0.001 + 240.1912 44.5515 0.660 1.512 0.354 0.609 0.000 + 240.1894 47.2416 2.199 1.302 0.250 0.310 -0.010 + 240.1774 45.8133 1.678 1.832 0.200 0.200 0.014 + 240.1434 44.1185 0.308 2.914 0.420 0.480 -0.080 + 240.1018 46.4582 1.473 1.656 0.700 0.210 0.008 + 240.0575 48.5281 1.918 -0.102 0.700 1.650 0.007 + 240.0482 42.0983 -2.945 3.689 0.710 0.820 -0.101 + 240.0328 47.0244 2.102 1.460 0.240 0.290 0.001 + 240.0171 43.5900 -0.719 2.622 0.415 0.482 -0.017 + 239.9370 47.6564 2.316 1.405 0.200 0.230 0.001 + 239.9302 48.1574 1.981 1.395 0.440 0.560 0.020 + 239.8353 45.7498 1.711 2.040 0.350 0.320 0.018 + 239.8203 45.2433 1.175 2.371 0.270 0.330 -0.026 + 239.7848 45.7447 2.360 1.942 1.170 1.530 -0.074 + 239.7824 44.6306 1.021 2.643 0.220 0.250 0.049 + 239.7796 44.9998 1.347 2.303 0.260 0.330 0.068 + 239.7401 46.9788 1.997 1.665 0.200 0.200 0.002 + 239.6744 47.4800 2.521 1.578 0.210 0.240 -0.007 + 239.6176 48.5705 2.608 2.501 0.430 0.870 0.045 + 239.5993 47.7973 2.563 0.962 0.490 0.660 0.110 + 239.5748 48.5938 1.839 1.353 0.750 1.020 0.001 + 239.5495 46.6264 2.100 1.855 0.330 0.330 0.001 + 239.5406 46.3157 2.138 2.315 0.200 0.200 0.031 + 239.5228 46.6024 1.948 2.156 0.200 0.200 0.025 + 239.4906 44.3531 -0.361 2.588 0.930 1.150 0.008 + 239.4711 46.8397 2.315 2.109 0.200 0.200 -0.001 + 239.4549 47.1868 2.599 1.769 0.200 0.200 0.097 + 239.4512 42.7039 -1.307 3.290 0.680 0.930 -0.124 + 239.4079 47.5589 2.555 2.332 0.770 1.010 -0.075 + 239.3590 47.7481 1.918 1.134 0.210 0.230 0.031 + 239.3350 47.7680 2.319 1.516 0.200 0.240 -0.040 + 239.3340 46.9705 2.333 2.406 0.390 0.460 -0.002 + 239.3257 50.0856 2.281 1.156 0.200 0.230 -0.036 + 239.3017 46.7281 2.705 2.127 0.200 0.220 -0.006 + 239.2738 50.7508 1.188 0.929 0.210 0.260 -0.072 + 239.2695 45.7403 1.685 2.949 0.200 0.210 0.019 + 239.2565 45.4745 0.657 2.350 0.200 0.200 -0.005 + 239.2335 49.0723 2.490 1.321 0.210 0.260 -0.076 + 239.2264 43.0109 -1.744 3.803 0.647 0.613 -0.043 + 239.1350 44.3013 0.873 2.916 0.200 0.200 -0.016 + 239.0535 44.9204 1.276 2.830 0.200 0.200 -0.003 + 239.0341 47.1917 3.996 1.831 0.450 0.510 0.032 + 238.9835 49.6313 2.707 1.234 0.400 0.410 -0.035 + 238.9730 42.3931 -2.543 4.964 0.740 0.920 -0.068 + 238.9080 47.7511 2.774 2.377 0.360 0.500 -0.085 + 238.8721 44.6339 0.984 3.029 0.240 0.330 0.076 + 238.8667 46.6288 2.804 2.163 0.703 0.766 0.006 + 238.8652 45.2333 1.756 3.050 0.200 0.220 0.004 + 238.8249 43.3133 -0.819 4.254 0.549 0.599 -0.041 + 238.8248 45.6178 2.163 3.202 0.260 0.210 0.006 + 238.8026 44.2691 0.218 3.663 1.020 1.350 -0.134 + 238.7312 48.6737 3.457 2.437 0.560 0.750 -0.132 + 238.6998 46.8729 3.140 2.868 0.750 0.850 -0.174 + 238.6955 45.6801 2.386 3.458 0.200 0.200 0.004 + 238.6336 44.8226 1.665 3.512 0.200 0.220 -0.021 + 238.6077 47.3885 2.946 2.853 0.220 0.240 -0.036 + 238.5790 49.3870 2.306 1.244 0.270 0.350 0.048 + 238.5744 47.7354 3.640 2.515 0.200 0.230 0.011 + 238.4581 46.0001 2.647 3.931 0.200 0.200 -0.003 + 238.4498 45.7107 2.416 4.181 0.200 0.210 0.001 + 238.4064 48.4861 2.081 1.613 0.620 0.700 -0.034 + 238.3405 48.2732 3.485 2.007 0.710 0.810 -0.019 + 238.3303 45.3045 2.406 3.887 0.520 0.710 0.032 + 238.3255 48.8653 2.277 1.307 0.850 1.060 -0.105 + 238.3248 46.6068 3.210 3.332 0.441 0.504 -0.003 + 238.2881 45.3340 2.520 3.924 0.684 0.679 -0.014 + 238.2720 46.7683 3.639 4.500 0.540 0.740 -0.025 + 238.2315 46.3078 3.058 3.306 0.586 0.586 0.001 + 238.1790 45.9349 3.353 4.332 0.515 0.525 0.001 + 238.1408 48.5387 4.132 2.637 0.510 0.690 -0.037 + 238.1350 46.9335 3.247 3.723 1.153 1.226 0.004 + 238.1224 42.5737 -1.677 5.398 0.200 0.200 -0.003 + 238.1172 45.6922 2.989 4.248 0.587 0.500 -0.026 + 238.1027 42.3177 -2.746 6.159 0.580 0.660 -0.034 + 238.0945 46.5417 3.641 4.219 0.200 0.200 -0.001 + 238.0664 47.1419 2.473 3.221 0.510 0.530 -0.006 + 238.0562 43.5302 -0.111 5.421 0.640 0.770 -0.031 + 237.9691 45.7998 3.377 5.093 0.453 0.389 -0.020 + 237.9651 45.3762 2.536 5.123 0.530 0.533 0.004 + 237.9124 45.5327 2.519 5.509 0.730 0.730 0.000 + 237.9004 42.4733 -1.856 6.209 0.820 0.980 -0.075 + 237.8582 47.6361 3.156 3.981 0.850 1.040 -0.061 + 237.8568 48.9166 4.486 2.251 0.890 1.120 -0.100 + 237.8456 48.1703 4.363 3.752 0.530 0.670 -0.060 + 237.8360 47.4008 3.503 3.936 0.578 0.557 -0.029 + 237.8238 47.4848 3.121 2.611 0.535 0.606 -0.027 + 237.7964 48.7107 5.321 3.504 1.000 1.280 -0.026 + 237.7817 46.7739 4.785 6.165 0.730 0.940 0.084 + 237.7758 48.5173 4.027 2.655 0.200 0.200 0.001 + 237.7720 48.5076 4.056 3.476 0.810 1.030 -0.097 + 237.7646 44.1188 2.598 6.196 1.060 1.250 0.034 + 237.7614 45.7461 4.563 5.049 0.509 0.510 -0.016 + 237.7278 47.9078 4.667 3.559 0.496 0.556 0.004 + 237.7100 47.1027 4.377 4.229 0.200 0.200 0.004 + 237.7013 47.6582 4.636 3.329 0.200 0.200 0.002 + 237.7003 47.6548 4.636 3.329 0.200 0.200 0.002 + 237.6862 43.9631 2.706 5.260 0.960 1.010 -0.021 + 237.6819 46.0262 2.761 4.490 0.270 0.310 -0.075 + 237.6674 45.2985 2.860 5.361 1.050 1.380 -0.080 + 237.6548 46.3009 4.280 4.852 0.214 0.224 0.002 + 237.6520 48.2393 4.386 3.982 0.590 0.720 -0.032 + 237.6390 45.2961 3.220 5.413 0.860 0.280 0.005 + 237.5762 48.3663 4.634 3.646 1.340 0.650 -0.009 + 237.5724 43.2279 -0.346 5.336 0.550 0.640 -0.047 + 237.5686 47.0827 5.054 4.296 0.330 0.330 -0.012 + 237.5200 44.7518 3.480 6.089 0.490 0.630 -0.083 + 237.4966 48.6558 4.144 1.770 0.800 0.480 0.026 + 237.4895 42.7407 -1.161 6.310 0.780 0.910 -0.193 + 237.4741 41.5550 -4.335 5.801 0.820 0.990 -0.075 + 237.4718 48.0995 3.255 2.921 0.920 0.950 0.008 + 237.4528 45.7810 4.328 5.352 0.437 0.434 -0.021 + 237.4457 46.9379 5.023 4.472 0.330 0.370 -0.010 + 237.4246 45.3260 2.470 5.684 1.130 1.510 -0.112 + 237.4207 48.5483 4.936 3.424 0.650 1.460 0.005 + 237.4092 45.2161 3.932 5.534 0.200 0.200 0.003 + 237.4010 48.5133 4.973 4.115 0.480 0.420 -0.018 + 237.3793 47.0942 4.938 4.726 0.312 0.339 0.031 + 237.3753 42.1422 -2.034 6.536 0.760 0.900 -0.076 + 237.3692 48.2680 4.505 1.996 0.410 0.490 0.025 + 237.3519 47.7347 6.298 3.927 0.670 0.890 -0.107 + 237.3401 47.4469 5.338 4.208 1.220 1.540 -0.094 + 237.3359 48.4019 5.944 3.608 0.450 0.560 -0.035 + 237.3191 47.9264 5.141 2.469 0.410 0.640 -0.033 + 237.3183 48.1605 3.167 3.409 0.560 0.600 -0.015 + 237.3175 47.9216 5.141 2.469 0.410 0.640 -0.033 + 237.3141 48.3415 3.990 1.769 0.400 0.490 0.035 + 237.3087 48.3130 5.598 4.129 0.200 0.250 0.003 + 237.2930 42.2157 -3.880 7.750 0.650 0.770 -0.048 + 237.2919 45.4986 4.180 5.710 0.240 0.280 -0.083 + 237.2799 46.5327 5.116 5.431 0.537 0.687 -0.019 + 237.2556 45.6719 5.502 6.322 0.250 0.280 0.072 + 237.2451 47.5007 5.660 5.763 0.840 0.610 0.004 + 237.2381 47.0313 5.207 4.933 0.270 0.290 0.002 + 237.1988 45.8569 4.595 6.105 0.220 0.230 -0.002 + 237.1929 46.4773 5.168 5.635 0.200 0.200 0.023 + 237.1906 48.0546 6.229 4.285 0.540 0.650 -0.052 + 237.1893 45.1794 4.767 5.936 1.060 1.310 -0.038 + 237.1739 44.7951 3.130 6.416 0.480 0.540 -0.085 + 237.1697 44.2076 2.029 5.397 0.420 0.450 0.002 + 237.1692 48.6773 5.292 1.696 1.160 1.350 -0.085 + 237.1259 45.2694 4.073 6.189 0.310 0.320 -0.016 + 237.1254 42.3357 -1.313 6.999 0.350 0.440 0.005 + 237.1247 46.0092 5.205 6.039 0.240 0.240 -0.109 + 237.1245 47.8242 4.856 3.281 1.549 0.708 0.004 + 237.1234 44.9806 4.402 7.099 0.240 0.260 -0.037 + 237.1155 48.7482 4.416 4.879 1.070 1.110 0.002 + 237.1123 47.8368 5.733 4.749 1.110 1.030 0.093 + 237.1080 48.4215 5.693 3.950 0.280 0.310 -0.016 + 237.0591 42.3970 0.201 7.392 0.880 1.080 -0.084 + 237.0309 44.5102 4.039 6.314 0.640 0.780 -0.177 + 237.0290 44.8765 3.934 6.884 0.240 0.260 -0.031 + 237.0135 45.2983 4.494 6.594 0.260 0.290 -0.022 + 237.0046 45.2215 4.348 6.575 0.230 0.250 -0.019 + 237.0042 49.0776 5.158 3.915 0.750 0.790 -0.038 + 236.9818 46.6436 5.918 5.346 0.250 0.300 -0.129 + 236.9302 45.6124 4.755 6.249 0.330 0.230 0.025 + 236.9001 44.6330 5.496 7.020 0.810 1.020 -0.215 + 236.8965 44.7798 4.646 6.530 0.250 0.280 -0.065 + 236.8902 44.4072 3.720 7.241 0.200 0.230 -0.025 + 236.8897 48.1813 5.608 3.938 0.851 0.508 -0.029 + 236.8872 47.3870 6.097 5.438 0.628 0.554 -0.011 + 236.8693 45.1905 3.705 7.352 0.730 0.810 -0.074 + 236.8606 45.0703 4.126 6.672 0.420 0.500 -0.140 + 236.8599 48.5753 4.752 1.792 0.510 0.900 0.002 + 236.8286 48.7741 5.735 3.724 0.720 0.850 -0.038 + 236.8031 45.6836 4.909 6.605 0.330 0.400 -0.079 + 236.8025 44.1494 2.421 6.445 0.210 0.240 -0.022 + 236.7961 45.4692 4.734 8.766 1.160 1.500 -0.141 + 236.7811 44.6892 4.229 7.526 0.200 0.200 -0.018 + 236.7731 48.4255 6.090 5.377 0.830 0.870 -0.050 + 236.7719 44.9250 4.345 7.327 0.210 0.240 -0.026 + 236.7624 43.7057 2.060 7.097 0.750 1.010 -0.031 + 236.7472 42.7991 0.546 8.508 0.630 0.800 -0.094 + 236.7467 49.3373 5.284 3.968 0.930 1.070 -0.041 + 236.7247 46.6313 5.534 5.919 0.200 0.200 -0.007 + 236.7089 44.3912 4.377 6.910 0.200 0.200 -0.010 + 236.6812 43.4653 1.722 7.691 0.670 0.830 -0.143 + 236.6809 43.9862 2.578 7.441 0.220 0.260 -0.019 + 236.6787 44.5853 3.690 7.952 0.750 0.910 0.008 + 236.6733 46.5533 5.748 6.312 0.420 0.510 -0.018 + 236.6611 42.4235 -0.081 8.653 0.550 0.660 -0.157 + 236.6532 48.4931 6.354 4.243 0.730 0.770 -0.031 + 236.6512 45.6108 4.942 6.543 0.390 0.490 0.133 + 236.6176 42.6211 -0.578 8.435 0.750 0.880 0.107 + 236.6154 46.2026 6.063 6.815 0.200 0.200 -0.002 + 236.6073 43.2424 -1.304 9.545 0.610 0.720 -0.047 + 236.5911 46.1616 6.530 8.036 0.250 0.200 -0.064 + 236.5882 45.0654 5.383 7.686 0.360 0.370 0.009 + 236.5449 43.1261 1.067 8.648 0.720 0.870 0.018 + 236.5400 46.2684 6.327 6.948 0.200 0.200 0.012 + 236.4528 44.5939 5.099 8.113 0.330 0.340 0.019 + 236.4326 44.1850 4.020 7.864 0.200 0.340 -0.006 + 236.4301 45.8849 6.719 7.774 0.250 0.270 0.039 + 236.4191 46.1462 6.947 7.565 0.240 0.230 0.058 + 236.4011 44.3768 4.073 7.676 0.200 0.200 -0.002 + 236.3745 46.6005 7.178 7.637 0.200 0.200 -0.038 + 236.3615 45.0824 5.462 7.198 0.380 0.410 -0.048 + 236.3492 48.3159 7.428 4.908 0.750 1.420 -0.028 + 236.3264 48.4654 7.088 4.429 0.780 0.850 -0.063 + 236.3031 45.4826 6.799 8.011 0.200 0.230 -0.048 + 236.2983 45.2904 6.896 8.381 0.260 0.280 -0.039 + 236.2969 48.9200 5.780 3.871 0.720 0.800 -0.061 + 236.2804 46.0888 8.142 7.962 0.240 0.270 -0.013 + 236.2744 43.6604 2.302 8.672 0.380 0.460 -0.071 + 236.2332 44.6122 5.908 9.074 0.330 0.410 -0.066 + 236.2330 46.2074 8.039 7.964 0.220 0.240 0.053 + 236.1940 45.1272 6.953 9.016 0.350 0.400 -0.084 + 236.1899 46.6630 7.670 9.142 0.877 0.989 -0.017 + 236.1803 49.2026 5.898 4.447 0.470 0.530 -0.037 + 236.1758 48.6121 6.957 4.237 0.800 0.890 -0.056 + 236.1758 45.4211 6.204 8.257 1.050 1.300 -0.024 + 236.1738 48.1598 8.525 6.797 1.140 1.350 -0.150 + 236.1655 44.7766 6.609 8.758 0.240 0.290 -0.015 + 236.1540 45.2140 7.019 8.918 0.220 0.240 0.017 + 236.1396 44.0186 4.485 8.989 0.750 0.490 -0.040 + 236.1227 49.5984 4.905 3.640 0.550 0.650 0.032 + 236.1217 45.9064 8.957 8.450 0.210 0.250 -0.023 + 236.0906 46.0162 9.915 8.521 0.200 0.200 -0.010 + 236.0833 46.0567 9.677 8.742 0.210 0.220 -0.003 + 236.0802 44.6462 6.449 9.202 0.260 0.290 -0.089 + 236.0791 48.3771 8.299 4.782 0.900 1.090 -0.043 + 236.0780 46.6322 9.058 8.602 0.350 0.420 0.109 + 236.0439 46.1502 9.533 9.274 0.200 0.230 0.014 + 236.0410 46.2065 9.887 9.024 0.200 0.200 0.003 + 236.0339 40.7903 0.528 15.844 0.280 0.200 0.000 + 236.0305 46.7050 9.962 9.744 0.250 0.260 0.008 + 236.0242 49.7528 4.595 3.234 0.410 0.490 -0.008 + 235.9917 45.0081 8.273 9.166 0.270 0.320 0.033 + 235.9547 44.6253 6.596 9.448 0.380 0.450 -0.016 + 235.9433 46.5159 10.764 10.708 0.614 0.601 -0.015 + 235.9411 42.5519 2.591 10.439 0.670 0.750 -0.065 + 235.9380 44.8101 4.329 7.949 1.060 1.490 -0.008 + 235.8965 48.4648 8.134 4.991 0.880 1.030 -0.031 + 235.8860 43.8846 5.213 10.432 0.430 0.270 -0.024 + 235.8810 48.1979 9.165 6.782 0.320 0.360 -0.136 + 235.8415 49.3474 5.864 4.414 0.490 0.560 0.017 + 235.8126 49.5346 5.787 3.785 0.440 0.510 -0.011 + 235.8009 43.3397 4.474 11.436 0.330 0.410 -0.044 + 235.7514 47.2996 15.391 11.418 0.200 0.200 0.027 + 235.7378 48.9011 7.292 5.319 0.370 0.390 -0.015 + 235.7359 49.2279 6.115 4.559 0.410 0.460 0.004 + 235.6801 49.5986 5.470 4.252 0.450 0.520 -0.012 + 235.6780 42.1833 3.052 13.802 0.630 0.730 -0.133 + 235.6680 47.5402 13.746 11.525 0.661 0.394 -0.007 + 235.6068 42.5855 -0.360 11.656 0.780 0.880 -0.003 + 235.6044 47.9367 13.453 9.156 0.430 0.540 -0.015 + 235.5716 42.4296 4.828 13.318 0.540 0.620 -0.016 + 235.5549 49.7095 4.496 4.168 0.480 0.570 0.002 + 235.5444 49.8067 5.203 2.979 0.510 0.620 0.012 + 235.4397 47.9346 15.914 9.722 0.294 0.241 0.003 + 235.4386 47.9368 15.742 9.764 0.200 0.200 0.006 + 235.4053 49.2238 7.281 4.686 0.480 0.570 -0.012 + 235.3357 49.4898 5.729 4.229 1.040 0.740 -0.006 + 235.2957 48.9955 8.294 5.681 0.480 0.570 -0.017 + 235.2849 49.1381 7.854 4.672 0.570 0.870 -0.003 + 235.2659 49.3640 6.319 3.773 0.530 0.620 -0.009 + 235.0799 49.4152 6.230 3.892 0.580 0.690 -0.007 + 235.0411 49.0693 7.506 5.304 0.450 0.540 -0.018 + 235.0013 49.9491 2.667 3.256 0.650 0.710 -0.014 + 234.9568 48.8648 9.381 5.858 0.460 0.530 0.007 + 234.8664 48.8282 9.677 6.363 0.250 0.220 -0.001 + 234.7765 49.6499 3.213 3.637 0.680 0.750 -0.034 + 234.7177 49.1917 8.051 4.950 0.440 0.520 -0.021 + 234.6847 50.4907 1.260 1.072 0.790 0.840 -0.008 + 234.6356 49.5522 3.315 2.315 0.670 0.720 -0.061 + 234.6026 50.0326 1.838 2.226 0.450 0.460 0.002 + 234.6005 49.8233 3.953 2.106 0.680 0.740 -0.052 + 234.5072 49.7380 3.966 3.931 1.020 1.050 -0.094 + 234.5031 50.2306 0.900 2.941 0.650 0.660 0.004 + 234.4931 48.9851 10.334 7.652 0.780 0.960 -0.006 + 234.4174 49.9948 1.823 3.026 0.700 0.770 -0.030 + 234.3600 50.1247 2.461 2.858 0.710 0.780 -0.003 + 234.3020 49.8828 2.623 2.511 0.710 0.780 -0.068 + 234.1593 50.3349 1.383 2.778 0.690 0.720 0.016 + 234.1587 49.0841 10.466 6.819 0.500 0.610 0.002 + 234.0422 49.9563 2.975 2.374 0.970 0.990 0.002 + 233.9418 50.1044 2.664 2.159 0.690 0.740 0.011 + 233.8781 49.6190 5.320 3.153 0.640 0.710 -0.015 + 233.4530 49.7890 3.916 4.224 0.650 0.720 0.025 + 232.8903 50.9614 -1.270 3.602 0.730 0.760 -0.045 + 232.8361 50.5727 0.942 3.665 1.130 1.140 -0.004 + 232.7203 51.4647 -1.448 2.580 0.410 0.230 0.001 + 232.6190 50.6983 0.328 3.385 0.510 0.520 0.018 + 232.4808 50.4579 1.249 3.012 0.570 0.580 0.006 + 232.3988 51.1861 -0.882 2.336 0.410 0.220 0.003 + 232.2286 51.8543 0.532 2.205 0.250 0.260 0.013 + 232.1906 50.7809 -0.652 2.887 0.950 0.960 -0.005 + 232.1006 50.4859 3.066 1.941 0.680 0.680 0.006 + 232.0461 51.5440 1.458 3.324 0.250 0.270 0.010 + 231.9924 50.6535 1.226 2.926 0.710 0.730 0.024 + 231.7349 50.6458 -1.078 4.089 0.710 0.760 -0.006 + 231.6733 50.6775 -0.087 4.042 0.680 0.700 0.002 + 231.4008 50.8135 -0.011 2.206 0.720 0.780 -0.013 + 245.0200 32.0980 -23.666 18.993 1.000 1.000 0.000 + 245.0860 32.2510 -7.370 5.990 0.800 0.800 0.000 + 244.6950 32.4190 -10.818 24.809 0.400 0.400 0.000 + 244.6930 32.4180 -12.218 24.209 0.200 0.200 0.000 + 244.9460 31.4920 -25.832 27.897 0.400 0.400 0.000 + 244.0620 31.5520 -28.717 30.639 0.200 0.200 0.000 + 244.6860 32.3870 -15.817 25.209 0.400 0.400 0.000 + 243.6960 31.4630 -30.845 31.556 0.400 0.400 0.000 + 243.0090 32.2740 -28.467 30.386 0.600 0.400 0.000 + 246.4800 31.3540 -1.383 1.518 0.400 0.400 0.000 + 243.3320 31.8720 -29.207 30.472 0.200 0.332 0.000 + 243.7770 31.1910 -31.319 31.453 0.400 0.400 0.000 + 245.1930 30.9310 -29.573 27.985 0.800 0.800 0.000 + 245.1930 30.9060 -29.772 27.485 0.200 0.200 0.000 + 244.1680 31.6310 -27.913 29.934 0.600 0.600 0.000 + 244.1750 31.6300 -28.412 29.634 0.400 0.400 0.000 + 244.1680 31.6320 -28.313 29.834 0.400 0.400 0.000 + 243.4420 31.2450 -27.953 29.168 0.400 0.400 0.000 + 244.7540 32.2450 -18.300 26.106 1.400 1.400 0.000 + 242.7341 39.9755 -3.119 0.671 0.750 0.750 0.000 + 242.3902 38.8821 -2.637 1.233 0.730 0.730 0.000 + 243.1657 39.9677 -2.949 1.590 0.770 0.770 0.000 + 240.9241 39.4645 -4.964 3.298 1.020 1.020 0.000 + 244.0889 36.5851 0.219 -0.484 1.050 1.050 0.000 + 242.0524 39.3003 -2.974 1.734 1.020 1.020 0.000 + 242.7792 38.0606 -2.502 0.441 0.840 0.840 0.000 + 243.5815 40.6599 -2.174 1.438 0.740 0.740 0.000 + 241.5475 41.6223 -3.139 1.736 0.760 0.760 0.000 + 240.7767 38.2594 -8.147 8.839 0.760 0.760 0.000 + 241.7965 41.4473 -2.540 1.895 0.760 0.760 0.000 + 244.0811 40.7661 -2.713 0.886 0.740 0.740 0.000 + 242.5334 39.0066 -2.536 1.282 0.730 0.730 0.000 + 241.5370 39.3284 -2.194 3.766 0.720 0.720 0.000 + 241.4214 41.8319 -2.618 1.706 0.760 0.760 0.000 + 242.1932 39.1459 -3.470 0.673 0.710 0.710 0.000 + 242.4259 41.0146 -2.453 1.263 0.730 0.730 0.000 + 242.2883 39.2637 -2.974 0.863 0.685 0.685 0.000 + 242.5885 39.3576 -2.834 1.312 0.700 0.700 0.000 + 242.8577 39.4866 -3.302 1.111 0.710 0.710 0.000 + 242.1966 40.9052 -4.013 0.993 0.550 0.550 0.000 + 241.8966 38.1501 -3.712 3.005 0.620 0.620 0.000 + 242.5127 40.1426 -4.308 1.722 0.750 0.750 0.000 + 240.7972 39.3582 -6.365 4.319 0.760 0.760 0.000 + 244.9947 40.6568 -1.963 -0.378 0.730 0.730 0.000 + 242.9638 40.0022 -2.449 0.230 0.750 0.750 0.000 + 244.4443 39.4021 -1.952 0.775 0.700 0.700 0.000 + 244.9184 39.4152 -2.012 0.143 0.720 0.720 0.000 + 245.3421 39.0330 -2.684 0.441 0.700 0.700 0.000 + 245.5465 39.0687 -1.914 1.140 0.700 0.700 0.000 + 240.5175 39.5521 -7.134 4.220 0.740 0.740 0.000 + 246.4152 39.5485 -1.430 -0.343 0.680 0.680 0.000 + 241.8487 39.2274 -1.925 2.135 1.200 1.200 0.000 + 247.4544 39.3670 -2.061 0.283 0.700 0.700 0.000 + 241.8388 38.6573 -4.414 2.340 0.640 0.640 0.000 + 240.7973 39.9437 -5.371 3.219 0.740 0.740 0.000 + 241.8961 38.7306 -4.218 2.075 0.680 0.680 0.000 + 241.4579 38.0339 -3.723 7.196 0.660 0.660 0.000 + 241.1216 38.1351 -6.093 7.503 0.560 0.560 0.000 + 243.5835 36.3044 -2.653 1.118 0.490 0.490 0.000 + 242.3221 40.1588 -3.598 1.333 0.750 0.750 0.000 + 245.5792 40.9847 -1.991 -0.230 0.570 0.570 0.000 + 242.3643 38.5230 -3.544 1.453 0.630 0.630 0.000 + 243.2540 36.8282 -2.860 1.609 0.480 0.480 0.000 + 240.3112 40.3483 -4.379 4.016 0.740 0.740 0.000 + 242.3089 41.2848 -1.771 1.413 0.740 0.740 0.000 + 241.9306 39.2913 -2.584 0.174 0.720 0.720 0.000 + 238.5544 39.4969 -9.596 6.208 0.730 0.730 0.000 + 241.2910 37.9129 -5.054 7.937 0.830 0.830 0.000 + 242.9724 37.2743 -2.394 -0.373 0.780 0.780 0.000 + 241.6755 39.0432 -2.836 1.535 0.720 0.720 0.000 + 242.8077 40.0342 -3.219 0.441 0.550 0.550 0.000 + 241.5775 39.1475 -4.936 2.966 0.720 0.720 0.000 + 241.9794 41.4098 -2.140 1.324 0.740 0.740 0.000 + 240.7826 38.5305 -7.395 6.239 0.550 0.550 0.000 + 240.8739 40.7653 -3.935 3.199 0.740 0.740 0.000 + 241.3679 38.5530 -6.030 4.127 1.100 1.100 0.000 + 242.3083 38.7732 -2.668 1.373 0.730 0.730 0.000 + 239.9147 35.1849 -24.943 29.982 0.830 0.830 0.000 + 239.8300 35.6513 -17.620 21.473 0.610 0.610 0.000 + 239.2440 35.1710 -28.433 36.265 0.520 0.520 0.000 + 239.5250 35.1612 -28.543 33.474 1.040 1.040 0.000 + 239.8867 35.4809 -21.831 25.972 0.860 0.860 0.000 + 240.1522 35.2500 -20.922 24.691 0.610 0.610 0.000 + 239.7689 35.6437 -20.510 26.383 0.610 0.610 0.000 + 239.5007 35.9571 -10.078 15.464 0.640 0.640 0.000 + 240.2360 35.2907 -18.142 20.341 0.850 0.850 0.000 + 240.0455 35.2600 -24.072 26.292 0.890 0.890 0.000 + 239.9684 35.3883 -21.611 26.112 0.620 0.620 0.000 + 239.9564 35.4438 -21.201 24.692 0.610 0.610 0.000 + 240.1918 35.1536 -22.283 25.041 0.610 0.610 0.000 + 239.8635 35.4394 -23.521 27.183 0.610 0.610 0.000 + 239.8399 35.5662 -21.600 24.733 0.860 0.860 0.000 + 240.0012 35.1255 -25.643 28.232 1.050 1.050 0.000 + 239.7970 35.6162 -20.860 25.103 0.610 0.610 0.000 + 241.2571 34.5675 -24.891 19.087 0.695 0.695 0.000 + 240.3184 35.3588 -9.231 15.161 0.590 0.590 0.000 + 239.9617 35.5332 -18.721 21.942 0.900 0.900 0.000 + 239.1539 35.5348 -24.521 34.105 0.670 0.670 0.000 + 239.7642 35.1823 -26.743 30.273 0.760 0.760 0.000 + 239.0494 35.4481 -26.972 39.626 0.920 0.920 0.000 + 238.9937 35.4676 -25.572 37.566 1.060 1.060 0.000 + 239.7487 35.0729 -27.474 32.043 0.830 0.830 0.000 + 240.1368 36.5543 -10.284 9.661 0.610 0.610 0.000 + 239.7114 35.6803 -21.390 26.723 0.610 0.610 0.000 + 239.9593 35.3516 -23.252 26.662 0.620 0.620 0.000 + 241.2567 34.7509 -19.815 19.067 0.520 0.520 0.000 + 239.8933 35.5567 -20.090 23.172 0.620 0.620 0.000 + 239.4305 34.9344 -27.855 35.194 0.900 0.900 0.000 + 239.6641 35.6887 -22.080 28.913 0.630 0.630 0.000 + 240.4385 36.8668 -9.512 9.670 0.610 0.610 0.000 + 240.0860 35.3424 -21.582 23.742 0.480 0.480 0.000 + 241.2482 34.2719 -26.928 29.027 0.540 0.540 0.000 + 239.7845 35.6528 -20.090 25.783 0.920 0.920 0.000 + 239.6542 35.6074 -23.420 29.723 0.630 0.630 0.000 + 240.2256 35.3336 -16.892 19.691 0.480 0.480 0.000 + 238.6549 35.7945 -30.290 33.267 1.260 1.260 0.000 + 239.5245 34.8491 -29.185 33.884 0.510 0.490 0.000 + 242.3247 36.1504 -7.285 5.263 0.480 0.480 0.000 + 243.4252 36.8088 -2.560 1.079 0.730 0.730 0.000 + 243.0224 36.7235 -3.011 1.350 0.480 0.480 0.000 + 243.1380 36.8576 -2.780 1.380 0.480 0.480 0.000 + 242.4388 36.5187 -4.092 3.052 0.770 0.770 0.000 + 242.1157 36.0625 -6.856 7.724 0.480 0.480 0.000 + 243.5247 36.3974 -2.433 0.838 0.800 0.800 0.000 + 242.9727 36.6379 -3.131 2.140 0.480 0.480 0.000 + 243.3826 34.2579 -6.947 15.359 0.930 0.930 0.000 + 243.8511 36.9940 -2.738 0.757 0.690 0.690 0.000 + 243.0708 36.7922 -3.000 1.670 0.480 0.480 0.000 + 242.7140 37.0607 -2.929 1.981 0.760 0.760 0.000 + 243.7389 36.9434 -1.839 0.977 0.690 0.690 0.000 + 242.1343 36.0614 -5.396 6.324 0.480 0.480 0.000 + 237.4392 45.9561 4.567 5.552 0.580 0.580 0.000 + 238.1057 46.2834 2.669 4.239 0.802 0.802 0.000 + 238.2863 46.9013 2.764 3.009 0.840 0.840 0.000 + 237.8651 46.2135 3.799 4.690 0.560 0.560 0.000 + 238.3971 45.4124 4.614 2.848 1.050 1.050 0.000 + 238.2464 46.8875 3.584 3.449 0.820 0.820 0.000 + 238.1313 45.3150 2.413 5.449 1.040 1.040 0.000 + 238.2984 45.4702 3.964 4.108 1.010 1.010 0.000 + 238.3392 46.8803 2.734 3.308 0.840 0.840 0.000 + 237.9685 46.2520 3.649 4.150 0.580 0.580 0.000 + 238.1716 46.7933 3.133 3.729 0.820 0.820 0.000 + 237.7027 46.2469 4.279 4.391 0.570 0.570 0.000 + 238.1774 45.4005 2.254 4.209 1.080 1.080 0.000 + 238.1451 46.8296 3.453 3.579 0.790 0.790 0.000 + 237.9088 46.1638 3.178 4.220 0.580 0.580 0.000 + 238.2772 46.8085 2.943 3.979 0.800 0.800 0.000 + 237.8069 46.0309 4.197 5.170 0.570 0.570 0.000 + 237.6428 46.1893 4.718 5.311 0.640 0.640 0.000 + 238.1809 46.8432 3.293 4.719 0.840 0.840 0.000 + 237.8721 46.1112 4.008 4.750 0.570 0.570 0.000 + 237.7963 46.2096 5.169 4.360 0.570 0.570 0.000 + 238.2491 46.9246 3.344 3.719 0.790 0.790 0.000 + 238.1990 46.8480 4.163 4.029 0.820 0.820 0.000 + 238.2184 46.8766 3.574 3.869 0.820 0.820 0.000 + 238.0617 45.6513 2.925 5.489 0.860 0.860 0.000 + 237.8235 46.1877 3.359 6.500 0.570 0.570 0.000 + 237.8883 46.2586 3.719 4.420 0.570 0.570 0.000 + 238.3579 46.9135 2.834 3.458 0.450 0.450 0.000 + 238.1370 46.8604 2.803 3.959 0.890 0.890 0.000 + 237.7671 46.2153 3.479 4.261 0.570 0.570 0.000 + 237.8484 46.4101 3.870 4.650 0.570 0.570 0.000 + 238.2607 45.4497 4.034 4.269 1.090 1.090 0.000 + 237.2602 45.9029 5.056 6.622 0.810 0.810 0.000 + 237.7966 46.1898 6.529 6.575 0.495 0.490 0.000 + 237.7894 46.1978 5.299 5.360 0.570 0.570 0.000 + 238.2538 45.3544 3.693 4.319 1.020 1.020 0.000 + 238.2946 45.3082 3.713 3.079 1.010 1.010 0.000 + 238.2675 45.4053 3.194 4.269 1.000 1.000 0.000 + 238.2847 45.4513 2.304 4.979 1.010 1.010 0.000 + 238.3524 45.3598 2.443 2.178 1.100 1.100 0.000 + 237.8462 46.2322 3.659 4.620 0.570 0.570 0.000 + 237.5294 46.2316 6.099 5.201 0.580 0.580 0.000 + 237.4182 46.3695 4.799 4.852 0.580 0.580 0.000 + 241.1544 37.6138 -5.866 8.407 0.620 0.620 0.000 + 241.1455 37.5887 -6.906 7.238 0.510 0.510 0.000 + 241.4203 37.7005 -4.895 7.296 0.530 0.530 0.000 + 241.4212 37.7268 -4.405 7.046 0.640 0.640 0.000 + 241.0955 37.5782 -7.956 7.708 0.640 0.640 0.000 + 241.0186 37.3694 -8.218 8.288 0.710 0.710 0.000 + 241.2153 37.5650 -5.046 7.777 0.510 0.510 0.000 + 241.3203 37.7974 -4.495 7.787 0.640 0.640 0.000 + 241.2965 37.5586 -5.206 7.547 0.690 0.690 0.000 + 241.0489 37.7030 -10.366 9.808 0.630 0.630 0.000 + 243.9418 37.8938 -3.742 -0.303 0.790 0.790 0.000 + 241.2824 37.4920 -5.897 6.977 0.510 0.510 0.000 + 241.3030 37.5599 -5.316 8.657 0.690 0.690 0.000 + 241.1096 37.7462 -6.055 12.868 0.430 0.430 0.000 + 241.2408 37.4804 -6.847 7.757 0.630 0.630 0.000 + 241.1791 37.5084 -8.007 7.807 0.630 0.630 0.000 + 242.9256 38.0754 -3.212 -0.169 0.790 0.790 0.000 + 241.2260 37.5504 -4.346 8.747 0.500 0.500 0.000 + 241.1086 37.5803 -8.986 4.828 0.540 0.540 0.000 + 241.0525 37.7287 -9.135 11.948 0.540 0.540 0.000 + 242.8668 38.5525 -2.679 0.071 0.840 0.840 0.000 + 240.9674 37.6306 -8.776 8.848 0.530 0.530 0.000 + 241.0185 37.7654 -8.645 9.858 0.520 0.520 0.000 + 241.0631 37.6598 -5.036 7.158 1.210 1.210 0.000 + 241.1223 37.5422 -7.597 8.228 0.720 0.720 0.000 + 241.1726 37.6138 -4.956 7.327 0.500 0.500 0.000 + 241.1965 37.5506 -6.266 7.777 0.510 0.510 0.000 + 240.9753 37.7578 -8.905 10.098 0.520 0.520 0.000 + 241.3812 37.4862 -5.957 7.287 0.640 0.640 0.000 + 241.3169 37.3669 -7.218 8.057 0.610 0.610 0.000 + 240.9192 37.6333 -8.056 9.458 0.480 0.480 0.000 + 241.0483 37.6896 -4.316 7.628 1.180 1.180 0.000 + 240.9964 37.3813 -8.378 7.998 0.800 0.800 0.000 + 241.2128 37.5619 -5.226 8.107 0.510 0.510 0.000 + 241.1527 37.7367 -5.535 9.687 0.480 0.480 0.000 + 241.3153 37.5027 -5.337 6.977 0.550 0.550 0.000 + 241.1686 37.6136 -6.156 8.277 0.690 0.690 0.000 + 241.2032 37.5941 -4.996 7.807 0.510 0.510 0.000 + 241.0832 37.6065 -7.416 9.238 0.690 0.690 0.000 + 241.0907 37.5856 -7.696 7.668 0.620 0.620 0.000 + 238.3080 48.8488 3.367 1.398 0.980 0.980 0.000 + 238.2952 48.7744 1.817 3.018 0.980 0.980 0.000 + 238.1872 48.7375 4.066 3.329 0.770 0.770 0.000 + 238.1594 48.7486 4.416 2.809 0.770 0.770 0.000 + 238.2154 48.7427 3.926 3.579 0.820 0.820 0.000 + 238.1302 48.7887 4.607 2.869 0.840 0.840 0.000 + 238.2546 48.7790 2.717 2.819 0.750 0.750 0.000 + 238.1438 48.7165 3.706 2.599 0.680 0.680 0.000 + 238.2045 48.7607 3.736 2.729 0.820 0.820 0.000 + 237.8008 38.1686 -13.895 14.880 0.870 0.870 0.000 + 236.8190 39.2835 -17.049 17.664 0.610 0.610 0.000 + 236.7250 39.2788 -19.269 23.265 0.920 0.920 0.000 + 237.3355 39.3474 -10.268 8.292 0.920 0.920 0.000 + 236.6606 39.3373 -20.818 22.225 0.790 0.790 0.000 + 237.3793 39.4097 -9.347 7.922 0.790 0.790 0.000 + 237.1435 39.4870 -8.887 8.553 0.590 0.590 0.000 + 236.2939 38.9813 -24.211 34.596 0.490 0.490 0.000 + 237.0888 39.4653 -10.887 8.113 1.040 1.040 0.000 + 236.7670 39.1166 -19.430 21.854 0.920 0.920 0.000 + 236.4768 39.0222 -21.261 28.995 0.490 0.490 0.000 + 237.0392 39.4536 -13.197 11.373 1.020 1.020 0.000 + 237.3957 39.3124 -10.448 8.022 0.630 0.630 0.000 + 237.2206 39.4397 -10.827 9.033 1.060 1.060 0.000 + 236.7783 39.1656 -18.069 23.274 0.760 0.760 0.000 + 236.7824 39.3130 -16.538 18.294 0.800 0.800 0.000 + 237.3180 39.5205 -10.457 7.502 1.040 1.040 0.000 + 237.1788 39.2542 -13.029 9.833 0.920 0.920 0.000 + 236.9895 39.3214 -13.918 14.634 0.650 0.650 0.000 + 236.7287 39.3239 -16.728 17.625 1.020 1.020 0.000 + 237.0505 39.4519 -12.447 8.843 0.890 0.890 0.000 + 237.0341 39.4493 -13.347 13.183 0.640 0.640 0.000 + 237.8685 38.1061 -14.485 16.060 1.120 1.120 0.000 + 236.3010 38.9007 -22.002 28.516 0.490 0.490 0.000 + 237.1918 39.2085 -13.439 10.593 0.930 0.930 0.000 + 237.0269 39.3066 -13.408 13.663 1.040 1.040 0.000 + 236.7927 39.4935 -16.567 15.394 0.960 0.960 0.000 + 237.0598 39.5242 -11.397 7.663 1.000 1.000 0.000 + 237.0458 39.2124 -14.539 14.703 0.790 0.790 0.000 + 236.6290 39.3694 -20.408 22.225 0.760 0.760 0.000 + 236.9897 39.5147 -9.717 8.784 1.210 1.210 0.000 + 236.6172 39.4081 -20.198 22.335 0.560 0.560 0.000 + 236.6947 39.1585 -18.680 23.395 0.840 0.840 0.000 + 237.1081 39.5810 -11.176 7.173 1.180 1.180 0.000 + 237.0880 39.3192 -13.528 12.803 1.050 1.050 0.000 + 237.4924 38.3399 -14.344 20.382 1.320 1.320 0.000 + 237.9034 38.5117 -11.283 7.670 0.800 0.800 0.000 + 236.9083 39.5169 -16.387 11.634 0.780 0.780 0.000 + 237.2860 39.1940 -13.249 9.312 0.690 0.690 0.000 + 237.0662 39.4977 -11.837 6.693 1.080 1.080 0.000 + 236.7572 39.1783 -18.069 23.674 0.900 0.900 0.000 + 236.6737 39.2174 -18.989 23.525 0.800 0.800 0.000 + 237.1521 39.2381 -13.369 10.253 0.890 0.890 0.000 + 237.0651 39.4517 -11.437 8.623 0.590 0.590 0.000 + 237.2381 39.1467 -14.019 10.383 1.050 1.050 0.000 + 236.5522 39.3931 -20.148 23.325 0.930 0.930 0.000 + 236.4721 38.9594 -21.491 30.085 0.490 0.490 0.000 + 237.1090 39.2282 -14.739 14.883 0.990 0.990 0.000 + 237.7033 38.5035 -14.373 10.761 1.360 1.360 0.000 + 236.5751 39.0535 -20.160 26.685 0.480 0.480 0.000 + 236.6577 39.4607 -18.048 15.605 0.440 0.440 0.000 + 236.8331 39.1605 -15.859 17.744 0.730 0.730 0.000 + 237.1465 41.5579 -2.623 8.323 0.940 0.940 0.000 + 236.5722 39.4940 -20.858 19.855 0.810 0.810 0.000 + 236.7263 39.1962 -18.449 22.445 0.920 0.920 0.000 + 237.1714 39.4472 -11.897 6.303 1.070 1.070 0.000 + 237.8363 38.1073 -13.815 12.140 1.190 1.190 0.000 + 237.0252 39.4335 -13.637 13.803 0.820 0.820 0.000 + 237.8137 38.2086 -12.255 15.420 1.120 1.120 0.000 + 237.2451 39.2823 -14.558 8.613 1.230 1.230 0.000 + 236.6121 39.3527 -21.158 21.675 0.760 0.760 0.000 + 237.2643 39.6160 -9.776 7.612 0.590 0.590 0.000 + 237.1203 39.3614 -12.948 8.233 0.950 0.950 0.000 + 237.6909 38.3210 -12.014 15.651 0.860 0.860 0.000 + 237.1929 39.2678 -12.188 10.493 0.890 0.890 0.000 + 236.5539 39.3617 -20.398 22.685 0.480 0.480 0.000 + 236.7862 39.4710 -17.207 14.704 0.620 0.620 0.000 + 237.6402 38.3968 -12.744 15.041 0.890 0.890 0.000 + 236.9685 39.4178 -13.548 14.524 1.040 1.040 0.000 + 236.9837 39.5084 -13.837 14.514 0.970 0.970 0.000 + 236.8100 39.0971 -17.770 22.814 0.770 0.770 0.000 + 237.0871 39.0163 -15.990 14.583 1.090 1.090 0.000 + 237.3853 39.0088 -14.470 11.192 0.800 0.800 0.000 + 236.5439 39.5418 -21.597 21.445 0.830 0.830 0.000 + 236.6534 39.6249 -20.997 14.215 1.070 1.070 0.000 + 237.8853 38.1137 -9.355 15.990 1.240 1.240 0.000 + 237.7544 38.4761 -10.743 11.551 1.040 1.040 0.000 + 236.3675 38.9935 -24.231 34.596 0.490 0.490 0.000 + 237.3295 39.2227 -8.579 12.212 0.910 0.910 0.000 + 237.7375 38.4589 -10.993 13.411 1.180 1.180 0.000 + 237.1343 39.4005 -11.558 8.553 1.060 1.060 0.000 + 237.6174 38.7759 -9.891 12.391 0.680 0.680 0.000 + 236.6877 39.4277 -17.908 15.685 0.710 0.710 0.000 + 237.5323 38.2452 -15.705 20.981 1.000 1.000 0.000 + 237.7465 38.1548 -12.925 15.801 0.760 0.760 0.000 + 237.8883 38.0871 -11.606 13.560 1.210 1.210 0.000 + 237.5215 38.3025 -15.294 19.352 1.000 1.000 0.000 + 237.6086 38.7725 -10.581 13.691 0.630 0.630 0.000 + 237.6447 38.7760 -9.621 11.481 0.670 0.670 0.000 + 237.7911 38.4790 -10.213 12.240 1.130 1.130 0.000 + 237.5778 38.7572 -10.491 14.181 0.630 0.630 0.000 + 237.8155 38.5144 -9.313 9.770 1.220 1.220 0.000 + 237.7085 38.4477 -10.453 16.491 1.180 1.180 0.000 + 237.9042 38.5126 -8.613 11.510 1.210 1.210 0.000 + 237.7619 38.7966 -9.871 9.381 0.640 0.640 0.000 + 236.6827 39.3673 -16.678 16.845 0.790 0.790 0.000 + 236.9090 39.0652 -16.320 17.304 0.490 0.490 0.000 + 237.8129 38.0869 -11.796 15.050 1.220 1.220 0.000 + 237.7090 39.1206 -10.059 7.301 0.750 0.750 0.000 + 236.8335 39.2104 -16.309 18.494 0.490 0.490 0.000 + 237.6332 39.0114 -9.280 7.881 0.750 0.750 0.000 + 237.5524 38.1514 -17.355 19.991 1.260 1.260 0.000 + 237.0168 38.9866 -15.820 16.723 0.620 0.620 0.000 + 236.8933 39.3724 -15.888 14.154 0.590 0.590 0.000 + 237.3765 38.9515 -13.850 13.522 0.800 0.800 0.000 + 236.6154 39.5875 -18.367 14.635 0.780 0.780 0.000 + 237.7128 38.1072 -16.346 18.391 1.320 1.320 0.000 + 237.0464 39.1746 -14.609 12.643 0.950 0.950 0.000 + 237.7827 39.1427 -9.819 7.270 0.750 0.750 0.000 + 236.7598 39.0596 -17.740 23.334 0.810 0.810 0.000 + 236.6549 39.6691 -20.326 14.395 0.810 0.810 0.000 + 235.8443 40.4481 -4.842 24.898 0.930 0.930 0.000 + 236.8620 39.0270 -18.090 23.184 0.860 0.860 0.000 + 237.1798 39.1125 -14.859 11.873 1.080 1.080 0.000 + 236.8017 39.1605 -17.649 22.004 0.810 0.810 0.000 + 237.2945 39.0209 -14.840 12.172 0.770 0.770 0.000 + 236.6271 39.4056 -20.048 22.625 1.060 1.060 0.000 + 236.7576 39.2706 -17.499 17.124 0.830 0.830 0.000 + 236.7074 39.2998 -19.879 19.885 0.810 0.810 0.000 + 237.4666 38.9905 -12.710 13.142 0.960 0.960 0.000 + 236.8740 39.2459 -15.179 17.944 0.830 0.830 0.000 + 236.6131 39.5122 -18.027 14.775 1.260 1.260 0.000 + 236.1920 39.4223 -23.128 30.357 0.590 0.590 0.000 + 236.9428 38.9068 -16.991 24.254 0.680 0.680 0.000 + 236.5375 39.6172 -18.577 13.215 0.930 0.930 0.000 + 239.8128 42.5743 -1.824 3.263 0.650 0.650 0.000 + 239.0499 41.1846 -4.724 5.066 0.580 0.580 0.000 + 240.3427 41.8386 -2.919 3.731 0.510 0.510 0.000 + 238.4247 41.5958 -2.382 5.428 0.600 0.600 0.000 + 237.8567 41.4106 -3.594 5.430 0.670 0.670 0.000 + 237.7805 41.3718 -3.724 5.620 0.660 0.660 0.000 + 238.4245 41.5534 -3.672 6.628 0.450 0.450 0.000 + 238.4403 40.4456 -4.830 8.938 0.570 0.570 0.000 + 238.5014 40.4611 -5.339 9.928 0.570 0.570 0.000 + 239.7393 41.5545 -4.551 3.663 0.580 0.580 0.000 + 238.2121 42.1924 -2.048 5.179 0.590 0.590 0.000 + 240.5271 41.9040 -2.788 3.050 0.510 0.510 0.000 + 238.5014 40.4893 -7.529 7.098 0.930 0.930 0.000 + 238.5350 40.5144 -9.509 5.038 0.570 0.570 0.000 + 237.3797 42.1478 -2.539 7.112 0.580 0.580 0.000 + 237.3272 41.4130 -3.214 6.722 0.560 0.560 0.000 + 237.7935 41.3707 -3.864 5.610 0.660 0.660 0.000 + 240.5192 42.0160 -2.577 2.630 0.590 0.590 0.000 + 240.2965 42.5682 -1.964 2.791 0.680 0.680 0.000 + 237.7685 41.6282 -3.002 6.141 0.550 0.550 0.000 + 238.4939 42.2495 -2.387 5.088 0.580 0.580 0.000 + 238.3416 41.5788 -1.972 5.718 0.600 0.600 0.000 + 239.9959 42.6753 -1.823 3.432 0.650 0.650 0.000 + 239.3048 41.4924 -3.742 4.895 0.570 0.570 0.000 + 237.5037 42.1535 -1.909 6.222 0.580 0.580 0.000 + 237.7573 42.1365 -1.959 5.851 0.570 0.570 0.000 + 238.4584 40.5448 -5.779 4.478 0.570 0.570 0.000 + 238.5208 40.4560 -6.149 9.668 0.980 0.980 0.000 + 238.5225 40.4589 -6.639 8.108 0.980 0.980 0.000 + 238.5098 40.4748 -6.439 7.818 0.570 0.570 0.000 + 240.6458 41.9970 -3.517 3.119 0.450 0.450 0.000 + 238.5085 40.4812 -6.849 6.618 0.570 0.570 0.000 + 240.2648 41.7287 -3.039 3.431 0.510 0.510 0.000 + 237.8072 41.5340 -3.193 5.940 0.660 0.660 0.000 + 238.8276 41.1031 -4.115 3.966 0.580 0.580 0.000 + 240.7617 41.8849 -2.418 2.699 0.570 0.570 0.000 + 238.5129 40.5276 -6.769 4.408 0.570 0.570 0.000 + 239.4101 42.1955 -2.757 4.014 0.740 0.740 0.000 + 238.7186 41.7050 -3.741 4.847 0.450 0.450 0.000 + 239.9303 42.2122 -2.616 3.362 0.570 0.570 0.000 + 237.8441 41.3942 -4.004 6.070 0.680 0.680 0.000 + 237.6284 42.1177 -2.559 5.451 0.590 0.590 0.000 + 238.4570 40.9828 -5.256 5.638 0.580 0.580 0.000 + 238.2913 41.5688 -0.942 5.289 0.600 0.600 0.000 + 238.5322 40.4708 -9.639 8.188 0.790 0.790 0.000 + 237.8192 41.3614 -3.874 5.840 0.680 0.680 0.000 + 238.0599 40.8032 -6.797 5.969 0.580 0.580 0.000 + 238.8996 42.4260 -2.296 4.426 0.580 0.580 0.000 + 237.7968 41.3611 -4.104 5.720 0.560 0.560 0.000 + 238.5549 40.4517 -10.819 9.988 0.630 0.630 0.000 + 238.4902 40.4839 -5.019 5.218 0.780 0.780 0.000 + 238.5730 40.4935 -10.419 5.407 0.620 0.620 0.000 + 238.4370 41.0742 -4.885 5.888 0.590 0.590 0.000 + 241.4215 42.6378 -1.852 1.516 0.690 0.690 0.000 + 240.6899 42.6883 -1.763 2.129 0.650 0.650 0.000 + 238.7866 42.4388 -2.186 4.537 0.580 0.580 0.000 + 237.7889 40.6595 -7.249 6.460 0.570 0.570 0.000 + 240.3435 42.0935 -2.557 3.231 0.540 0.540 0.000 + 240.1308 41.6334 -2.900 3.511 0.580 0.580 0.000 + 238.5343 40.4647 -9.459 9.468 0.570 0.570 0.000 + 237.7029 41.2873 -4.225 5.321 0.690 0.690 0.000 + 238.9607 41.5118 -4.142 6.296 1.210 1.210 0.000 + 238.4080 41.5857 -2.702 6.088 0.540 0.540 0.000 + 239.2786 42.2618 -2.527 4.375 0.590 0.590 0.000 + 238.4550 41.5170 -4.202 6.708 0.600 0.600 0.000 + 239.0726 42.3556 -2.146 4.466 0.760 0.760 0.000 + 240.6533 40.6543 -3.846 -2.871 0.560 0.560 0.000 + 240.9489 41.8762 -2.718 2.738 0.590 0.590 0.000 + 241.1499 41.8914 -2.498 2.127 0.570 0.570 0.000 + 241.3161 41.9435 -2.537 1.607 0.580 0.580 0.000 + 242.4427 42.8594 -1.720 0.392 0.550 0.550 0.000 + 238.6509 42.4050 -1.686 4.157 0.580 0.580 0.000 + 238.4742 41.7204 -3.561 5.028 0.800 0.800 0.000 + 240.1491 42.1186 -2.237 3.401 0.590 0.590 0.000 + 237.9878 42.1411 -2.299 5.840 0.580 0.580 0.000 + 239.7150 47.4044 1.189 0.673 0.200 0.200 0.000 + 237.8085 47.6142 5.718 4.130 0.230 0.210 0.000 + 237.8168 47.5992 4.648 7.810 0.430 0.420 0.000 + 236.9728 48.5306 5.094 3.354 0.370 0.350 0.000 + 238.1846 46.8998 4.804 3.479 0.210 0.200 0.000 + 242.8069 46.7339 1.677 0.191 0.240 0.200 0.000 + 237.8089 46.2003 12.319 13.430 0.530 0.510 0.000 + 238.4712 45.4643 1.004 5.528 0.470 0.450 0.000 + 238.3564 46.9146 6.924 4.608 0.230 0.210 0.000 + 239.6338 47.4449 2.679 2.133 1.390 0.200 0.000 + 239.8036 34.6129 -30.477 35.023 0.410 0.400 0.000 + 240.2302 34.4509 -29.897 30.361 0.390 0.380 0.000 + 241.6869 36.1521 2.095 0.355 0.440 0.420 0.000 + 241.7576 35.6956 -10.058 11.215 0.430 0.420 0.000 + 237.7563 37.8752 -18.372 13.916 0.270 0.250 0.000 + 237.7599 37.8780 -12.757 14.561 0.300 0.270 0.000 + 237.7537 37.9631 -15.046 24.931 0.330 0.310 0.000 + 236.9502 39.4093 -10.998 4.594 0.740 1.780 0.000 + 238.1697 38.0762 -10.075 9.389 0.530 0.530 0.000 + 239.0057 37.2604 -10.500 8.246 0.670 0.670 0.000 + 238.5633 37.2315 -12.511 10.218 1.060 1.060 0.000 + 238.3767 38.1380 -12.485 14.578 0.550 0.550 0.000 + 239.2789 37.3867 -10.409 8.665 0.670 0.670 0.000 + 238.9627 37.1079 -10.631 8.916 0.650 0.650 0.000 + 238.3057 38.1492 -8.165 8.509 0.530 0.530 0.000 + 238.6201 37.1435 -14.351 10.237 1.070 1.070 0.000 + 239.3107 43.1690 -0.980 3.625 0.550 0.550 0.000 + 238.4526 43.6165 0.032 4.808 0.520 0.520 0.000 + 238.2370 44.2902 0.846 5.859 0.750 0.750 0.000 + 238.5387 43.7529 -0.257 3.888 0.580 0.580 0.000 + 238.8475 43.8002 -0.127 3.586 0.580 0.580 0.000 + 237.9762 44.1907 -0.535 5.860 0.740 0.740 0.000 + 239.0041 43.6672 -0.207 3.406 0.580 0.580 0.000 + 239.4635 43.3850 -0.539 3.254 0.550 0.550 0.000 + 238.9468 43.6927 0.173 3.166 0.580 0.580 0.000 + 238.7907 43.8661 0.084 3.527 0.590 0.590 0.000 + 239.1571 43.6105 -0.708 4.375 0.860 0.860 0.000 + 239.0659 43.8168 0.454 3.886 0.870 0.870 0.000 + 238.9332 43.8909 0.214 3.696 0.590 0.590 0.000 + 239.3597 43.2885 -0.410 3.524 0.550 0.550 0.000 + 238.6312 43.7317 0.193 4.217 0.580 0.580 0.000 + 237.9764 44.0646 0.224 4.620 0.860 0.860 0.000 + 238.6480 44.2948 1.547 2.687 0.760 0.760 0.000 + 238.7563 43.7483 -0.567 4.117 0.590 0.590 0.000 + 238.7350 43.7309 -0.087 2.797 0.580 0.580 0.000 + 238.7588 43.7234 -0.047 3.887 0.580 0.580 0.000 + 238.8061 43.7279 0.083 3.837 0.570 0.570 0.000 + 238.7935 43.7357 0.003 4.157 0.570 0.570 0.000 + 238.8105 43.6565 -0.028 4.097 0.580 0.580 0.000 + 238.7887 43.7059 -0.467 4.047 0.860 0.860 0.000 + 238.7451 43.6892 -1.408 4.637 0.850 0.850 0.000 + 239.8835 43.4844 -0.528 3.182 0.550 0.550 0.000 + 238.7345 43.1096 -2.021 3.627 0.550 0.550 0.000 + 238.5234 43.0786 -0.962 4.778 0.550 0.550 0.000 + 238.6519 43.5234 -0.009 4.377 0.570 0.570 0.000 + 238.6528 43.8141 0.433 3.977 0.580 0.580 0.000 + 239.1332 43.1337 -0.781 4.075 0.550 0.550 0.000 + 238.8616 43.5429 -0.348 3.886 0.580 0.580 0.000 + 238.0214 44.1632 0.435 5.170 0.620 0.620 0.000 + 239.6940 43.4279 -0.778 3.073 0.550 0.550 0.000 + 245.8042 43.8698 -1.741 0.049 0.630 0.630 0.000 + 247.7752 42.3437 -2.090 -0.729 0.640 0.640 0.000 + 244.6331 46.8544 1.219 0.034 0.550 0.550 0.000 + 247.4108 42.8972 -2.087 -1.127 0.790 0.790 0.000 + 243.2763 43.0370 -1.518 1.089 0.740 0.740 0.000 + 245.7055 43.5042 -1.833 -0.890 0.640 0.640 0.000 + 244.0187 42.9471 -1.828 0.316 0.640 0.640 0.000 + 247.6417 42.1562 -1.562 -0.848 0.620 0.620 0.000 + 245.3721 47.5707 1.384 -0.249 0.560 0.560 0.000 + 250.4127 45.7115 1.054 -0.179 0.620 0.620 0.000 + 252.0035 45.9712 0.746 -0.686 0.310 0.280 0.000 + 256.7253 46.9052 -0.446 -0.575 0.340 0.310 0.000 + 252.7441 41.7417 1.237 0.161 0.200 0.200 0.000 + 252.6124 43.9529 1.913 -0.138 0.200 0.200 0.000 + 255.0894 42.0515 1.010 0.082 0.200 0.200 0.000 + 255.8143 43.8811 1.153 0.019 0.200 0.200 0.000 + 252.9813 47.3747 1.636 -0.310 0.200 0.200 0.000 + 252.2746 48.7261 1.766 -0.657 0.200 0.200 0.000 + 255.5586 45.8464 1.466 -0.100 0.200 0.200 0.000 + 255.3149 47.1167 1.645 -0.189 0.200 0.200 0.000 + 248.9533 44.8620 1.308 1.717 0.840 0.840 0.000 + 248.7978 44.7549 -0.793 -1.573 0.390 0.370 0.000 + 249.5518 44.8173 2.558 -0.216 0.700 0.690 0.000 + 255.4754 38.8031 -0.046 0.246 0.184 0.246 -0.000 + 252.0890 36.8398 -0.737 1.185 0.196 0.189 -0.061 + 252.0034 45.9712 0.781 -0.725 0.572 0.454 -0.002 + 253.6159 42.8192 -0.073 0.733 0.209 0.297 0.003 + 254.7390 39.9914 -0.008 -0.037 0.172 0.172 -0.003 + 253.8135 41.9036 -0.035 -0.105 0.249 0.241 0.003 + 255.9850 30.6805 -0.305 -0.214 0.277 0.428 0.016 + 254.8057 39.9494 -0.144 -0.164 0.180 0.192 -0.000 + 254.7375 39.9952 -0.056 -0.194 0.343 0.306 0.001 + 252.8051 32.6590 -0.629 0.528 0.193 0.255 0.005 + 254.1958 32.8019 -0.229 0.831 0.180 0.182 0.023 + 252.0916 36.0317 -0.570 0.455 0.184 0.195 0.004 + 252.0913 39.5155 1.089 -0.265 0.250 0.223 0.000 + 252.7441 41.7417 0.075 0.038 0.185 0.201 0.018 + 252.6125 43.9529 0.900 -0.230 0.192 0.189 0.025 + 253.5407 34.9456 -0.083 0.527 0.179 0.184 0.011 + 254.8164 34.6014 -0.320 0.701 0.178 0.176 0.014 + 254.7063 36.4203 -0.211 0.149 0.181 0.191 0.005 + 254.8953 38.4218 -0.077 0.205 0.172 0.178 0.004 + 256.5927 34.1473 -0.351 0.449 0.178 0.177 0.016 + 256.8460 36.4481 -0.237 0.515 0.169 0.176 0.031 + 255.0894 42.0515 0.118 -0.086 0.180 0.175 -0.010 + 255.8143 43.8811 0.350 -0.132 0.170 0.172 -0.020 + 256.7775 40.1718 -0.054 0.205 0.177 0.175 -0.010 + 252.9813 47.3747 0.772 -0.414 0.180 0.193 -0.007 + 252.2746 48.7261 0.954 -0.862 0.180 0.183 -0.006 + 255.5586 45.8463 0.513 -0.323 0.176 0.179 -0.008 + 255.3149 47.1167 0.648 -0.366 0.284 0.180 -0.007 + 255.3020 36.0448 -0.254 0.645 0.178 0.175 0.018 + 252.1200 35.1322 -0.695 0.463 0.176 0.183 0.009 + 254.3739 35.0075 -0.283 0.654 0.175 0.176 0.010 + 254.0892 36.6352 -0.467 0.284 0.175 0.178 -0.005 + 253.0260 39.1777 -0.215 0.050 0.178 0.179 -0.001 + 255.2741 40.1818 -0.138 -0.245 0.607 0.807 0.000 + 255.6545 38.2869 0.022 0.017 0.223 0.187 0.006 + 254.8458 33.6547 -0.285 0.789 0.176 0.180 0.019 + 254.7246 39.9782 -0.185 -0.092 0.354 0.443 0.000 + 254.8524 40.5878 -0.051 0.919 0.371 0.528 0.000 + 253.0335 34.0680 -0.366 -0.065 0.199 0.214 0.017 + 254.4111 40.0542 -0.214 0.257 0.224 0.234 0.001 + 256.3909 35.0850 -0.233 0.301 0.250 0.217 0.000 + 254.7673 40.1309 -0.394 0.399 0.508 0.723 0.001 + 256.6713 42.7394 0.369 0.072 0.190 0.207 -0.028 + 253.6502 32.4071 -0.064 0.444 0.312 0.347 0.007 + 253.5055 34.9573 -0.234 0.664 0.200 0.200 0.000 + 256.5813 50.7458 -0.153 -1.697 0.504 0.393 0.000 + 252.0516 49.6409 -0.762 -0.558 0.652 0.439 0.000 + 254.9122 39.8032 -0.082 -0.299 0.202 0.200 0.000 + 252.0321 51.9473 0.840 -1.396 0.350 0.282 0.000 + 253.2079 34.6604 -0.210 1.224 0.205 0.200 0.000 + 255.1308 50.9504 0.803 -1.519 0.476 0.641 0.000 + 255.6468 41.1880 0.242 0.147 0.200 0.230 0.000 + 253.2644 33.9529 -0.174 0.871 0.336 0.293 0.000 + 254.7552 38.4383 -0.097 -0.158 0.208 0.200 0.000 + 253.0302 34.2542 -0.423 0.654 0.160 0.179 0.016 + 252.0227 30.3651 0.787 0.898 0.404 0.343 0.000 + 255.1899 41.1176 0.111 -0.062 0.204 0.201 0.000 + 253.9133 28.6622 0.251 0.528 0.227 0.212 0.000 + 255.3621 40.4466 -0.775 -0.758 0.688 1.048 0.000 + 255.1791 41.7622 0.763 -0.407 0.314 0.249 0.000 + 253.3753 35.0764 -0.539 0.783 0.200 0.200 0.000 + 253.1454 39.1959 0.020 0.006 0.200 0.209 0.000 + 254.7968 40.0639 -0.625 -0.464 0.211 0.277 0.000 + 253.9523 39.5297 0.623 0.413 0.841 0.543 0.000 + 255.7823 39.7078 -0.442 -0.430 1.018 1.154 0.000 + 255.7023 39.0384 -0.326 0.498 0.200 0.200 0.000 + 255.3318 39.8251 -0.795 -0.006 0.200 0.200 0.000 + 254.8396 40.5934 -0.033 0.132 0.209 0.167 -0.002 + 256.1746 40.2678 -0.105 0.242 0.249 0.200 0.000 + 255.2957 40.3780 -0.274 0.383 0.200 0.238 0.000 + 255.1131 39.6101 -0.458 0.062 0.207 0.238 0.000 + 255.3858 38.2717 -0.271 -0.091 0.200 0.200 0.000 + 255.2191 38.9601 0.113 0.899 0.387 0.551 0.000 + 255.1857 38.9038 -0.137 -0.188 0.330 0.348 0.000 + 254.2139 39.9172 -0.608 -0.037 0.318 0.299 0.000 + 254.1918 51.0449 0.621 -1.315 0.200 0.200 0.000 + 254.8071 39.7215 0.064 0.216 0.178 0.171 0.001 + 254.7788 39.7401 -0.902 -0.289 0.315 0.241 0.000 + 255.4903 51.7498 0.766 -1.410 0.794 0.914 0.000 + 254.9455 50.6335 -0.164 -1.482 0.363 0.540 0.000 + 253.2022 35.1540 -0.501 0.259 0.317 0.270 0.000 + 253.1523 39.6518 -0.223 -0.174 0.206 0.177 0.004 + 253.6837 31.7485 -0.561 0.453 0.200 0.225 0.000 + 252.4325 40.5129 -0.134 -0.233 0.200 0.200 0.000 + 254.8967 40.1654 0.118 0.257 0.203 0.200 0.000 + 255.2999 38.6825 -0.176 0.112 0.200 0.200 0.000 + 255.1892 40.0827 0.078 -0.694 0.200 0.223 0.000 + 254.9237 41.1585 -0.099 -0.036 0.200 0.200 0.000 + 252.6725 39.5470 -0.215 0.310 0.165 0.166 0.003 + 254.9958 40.5751 -0.308 0.408 0.212 0.200 0.000 + 253.5541 31.7450 -0.439 1.701 0.214 0.200 0.000 + 256.3293 50.5339 0.281 -2.039 0.598 0.401 0.000 + 253.5209 49.1827 0.795 -0.924 0.533 0.394 0.000 + 255.6280 49.9188 0.945 -0.983 0.395 0.330 0.000 + 253.6960 35.8829 -0.483 0.358 0.633 0.467 0.000 + 252.1216 38.4556 0.293 0.335 0.263 0.319 -0.002 + 256.7254 46.9053 0.867 1.188 0.200 0.200 0.000 + 253.3869 34.9869 -0.225 1.256 0.345 0.329 0.000 + 254.8056 39.9476 -0.611 -0.185 0.286 0.253 0.000 + 255.4146 49.1650 1.004 -0.182 0.261 0.201 0.000 + 254.4364 50.4269 1.084 -1.563 0.201 0.200 0.000 + 255.8191 47.7106 1.287 -0.555 0.639 0.569 0.000 + 256.0669 48.6207 -0.561 -1.051 0.434 0.396 0.000 + 256.9279 49.0973 0.723 -1.137 0.200 0.291 0.000 + 256.9369 49.1017 0.599 -0.615 0.233 0.259 0.000 + 256.3390 41.8272 0.185 -0.424 0.165 0.179 -0.023 + 253.4023 35.0175 1.017 0.348 0.413 0.321 0.000 + 254.0469 32.9011 -0.594 0.347 0.266 0.598 0.000 + 253.4104 35.1726 -0.625 1.293 0.203 0.200 0.000 + 253.2240 34.6430 0.532 1.039 0.218 0.255 0.000 + 252.2421 32.2664 -0.322 0.527 0.251 0.223 0.000 + 252.2739 32.2673 -0.460 0.793 0.239 0.203 0.010 + 252.0699 35.2166 -0.450 0.727 0.183 0.186 0.008 + 256.8731 32.7048 -0.156 0.534 0.203 0.200 0.000 + 252.8381 32.6662 -1.056 0.236 0.320 0.320 0.000 + 253.2746 35.6107 -0.472 0.344 0.523 0.324 0.000 + 253.2449 32.2800 -0.382 0.839 0.215 0.200 0.000 + 252.6277 35.0400 -0.585 0.156 0.200 0.200 0.000 + 253.9568 34.9921 -0.095 0.818 0.200 0.200 0.000 + 255.4109 33.3950 -0.259 0.703 0.166 0.194 0.034 + 253.9803 35.6381 -0.802 0.539 0.300 0.230 0.000 + 254.0414 35.6738 0.208 0.497 0.170 0.163 0.010 + 253.2553 32.2743 -0.396 0.750 0.194 0.178 0.010 + 256.9165 49.1005 0.625 -0.747 0.200 0.211 0.000 + 256.9120 49.1065 0.037 -2.056 0.200 0.303 0.000 + 254.4095 40.0554 -0.231 -0.205 0.403 0.200 0.000 + 252.9544 51.4889 0.796 -1.292 0.200 0.200 0.000 + 255.3358 49.6431 0.628 -1.233 0.200 0.200 0.000 + 253.0791 34.0739 0.209 0.093 0.484 0.479 0.001 + 253.5861 31.7698 0.347 -0.596 0.389 0.446 0.000 + 253.1732 34.2113 0.747 0.351 0.157 0.167 0.019 + 253.7191 50.4539 1.288 -0.700 0.208 0.209 0.000 + 255.7151 38.4345 0.217 0.212 0.212 0.200 0.000 + 252.4091 38.6566 -0.127 0.027 0.185 0.161 -0.009 + 255.4606 51.4126 0.424 -0.922 0.200 0.253 0.000 + 252.0621 40.0425 0.629 -0.696 0.244 0.297 0.000 + 255.5058 50.4491 0.081 0.054 0.245 0.318 0.000 + 252.7735 34.6318 -0.556 0.559 0.188 0.194 0.007 + 254.3559 34.8244 -0.288 0.690 0.163 0.187 0.013 + 252.1352 32.6349 -0.521 0.640 0.244 0.201 0.011 + 253.1567 32.4965 -0.286 0.782 0.223 0.226 0.021 + 255.0059 32.7284 -0.218 0.855 0.158 0.182 0.039 + 252.9441 36.3046 -0.604 0.289 0.180 0.186 -0.025 + 253.4614 36.4512 -0.519 0.350 0.160 0.166 -0.024 + 254.2209 36.5232 -0.442 0.421 0.161 0.197 -0.004 + 255.0316 36.4586 -0.400 0.446 0.161 0.159 0.018 + 252.0265 39.9558 -0.277 0.139 0.224 0.180 0.004 + 253.2543 39.9091 0.369 -0.273 0.345 0.298 0.007 + 253.6515 39.8844 -0.127 0.125 0.168 0.165 0.004 + 254.3304 39.7618 -0.479 0.243 0.203 0.203 -0.009 + 253.5994 39.0650 -0.197 0.060 0.162 0.169 -0.001 + 254.4480 39.1901 -0.118 0.147 0.161 0.158 -0.006 + 252.3044 37.8923 -0.425 0.385 0.195 0.212 -0.007 + 252.8908 37.7678 -0.461 0.217 0.179 0.195 -0.014 + 253.6583 37.7940 -0.356 0.292 0.158 0.163 -0.010 + 254.5015 37.7439 -0.299 0.378 0.169 0.163 0.002 + 255.0332 37.9635 -0.241 0.372 0.178 0.166 0.009 + 253.2113 39.9095 -0.037 0.127 0.175 0.179 0.005 + 256.3872 50.3385 -0.098 -1.848 0.907 0.760 0.000 + 255.3861 50.4590 0.247 -1.367 0.200 0.200 0.000 + 254.7567 40.0352 -0.068 0.232 0.184 0.191 0.001 + 254.3322 41.3204 -0.730 -0.006 0.159 0.175 0.004 + 254.7591 40.0376 0.658 -0.213 0.468 0.541 0.000 + 253.5202 52.0452 -0.228 -1.733 0.410 0.776 0.000 + 253.3529 52.1653 0.675 -0.151 0.263 0.473 0.000 + 253.6017 52.1963 0.755 -1.454 0.175 0.158 -0.024 + 256.3878 43.7750 0.128 -0.306 0.654 0.526 0.000 + 255.9861 50.1698 0.606 -1.251 0.446 0.448 0.000 + 256.7744 44.0828 0.116 -0.498 0.200 0.209 0.000 + 256.9260 49.0865 -0.001 -1.329 0.200 0.202 0.000 + 252.7879 39.4003 -0.552 0.255 0.181 0.175 0.001 + 256.9301 49.0799 0.615 -1.799 0.200 0.346 0.000 + 256.9347 49.0738 0.218 -1.740 0.265 0.389 0.000 + 253.4937 31.7729 -0.113 0.724 0.164 0.168 0.034 + 256.9229 49.0924 0.598 -1.357 0.200 0.200 0.000 + 253.1350 40.5127 -0.853 -0.139 0.353 0.316 0.000 + 256.9787 49.6710 0.959 -1.116 0.200 0.307 0.000 + 256.9132 49.0881 0.087 -1.377 0.217 0.200 0.000 + 254.7671 40.1300 -0.962 -0.361 1.046 0.924 0.000 + 253.2059 28.4506 -0.498 0.549 0.243 0.303 0.136 + 253.0179 38.8709 -0.677 -0.425 0.461 0.380 0.000 + 253.4390 35.1798 0.048 1.074 0.200 0.226 0.000 + 253.1308 35.0206 -0.626 0.848 0.200 0.200 0.000 + 256.3308 30.3801 -0.390 0.916 0.212 0.200 0.000 + 253.4157 31.9820 -0.594 0.159 0.211 0.205 0.000 + 253.5536 31.7656 0.206 1.105 0.222 0.278 0.013 + 253.7284 31.6915 -0.213 0.216 0.162 0.269 0.024 + 253.9576 31.9265 -0.121 0.824 0.200 0.200 0.000 + 256.8913 31.8426 0.478 1.113 0.232 0.186 0.030 + 256.4843 31.4175 1.082 -0.241 0.379 0.305 0.000 + 255.6426 29.5586 -0.375 0.767 0.168 0.200 0.039 + 253.5573 31.8701 0.740 0.567 0.318 0.177 0.012 + 254.7944 40.0612 -0.049 0.105 0.191 0.177 0.002 + 252.2680 49.2441 1.117 -0.683 0.530 0.382 0.000 + 256.1648 49.6582 0.493 -1.166 0.200 0.203 0.000 + 256.7344 50.4155 0.452 -1.281 0.200 0.200 0.000 + 254.5471 51.6672 1.028 -1.536 0.539 0.519 0.000 + 256.1658 49.6596 0.177 0.936 0.464 0.475 0.000 + 255.2246 41.1045 0.089 0.197 0.163 0.162 -0.007 + 253.6726 42.8307 -0.528 0.569 0.179 0.264 0.012 + 253.4327 35.1736 -0.159 0.786 0.210 0.160 0.009 + 254.8728 40.1873 -0.032 -0.156 0.170 0.175 -0.001 + 252.2439 37.1529 -1.560 0.090 0.150 0.140 -0.040 + 255.7885 36.4913 -0.770 -0.660 0.120 0.170 0.035 diff --git a/plot_inversion_results.m b/plot_inversion_results.m new file mode 100755 index 0000000..28dbc7d --- /dev/null +++ b/plot_inversion_results.m @@ -0,0 +1,598 @@ +Exx_r = Exx_realizations; +Exy_r = Exy_realizations; +Eyy_r = Eyy_realizations; + +%compute maximum shear strain and dilation rate for all realizations +max_shear_realizations = sqrt((Exx_r-Eyy_r).^2 + Exy_r.^2); +dilatation_realizations = Exx_r+Eyy_r; + + +%mean ane std of all realizations +Exx_mean = mean(Exx_r,2); +Exy_mean = mean(Exy_r,2); +Eyy_mean = mean(Eyy_r,2); + +Exx_std = std(Exx_r,[],2); +Exy_std = std(Exy_r,[],2); +Eyy_std = std(Eyy_r,[],2); + +mean_maxshear = sqrt((Exx_mean-Eyy_mean).^2 + Exy_mean.^2); +std_maxshear = std(max_shear_realizations,[],2); + +mean_dilatation = Exx_mean + Eyy_mean; +std_dilatation = std(dilatation_realizations,[],2); + + + +%% color plot of strain rates +figure +subplot(121) +hh = trisurf(tri,nodes(:,1),nodes(:,2),0*nodes(:,2)); +set(gca,'CLim',[min(mean_maxshear), max(mean_maxshear)]); +set(hh,'FaceColor','flat',... + 'FaceVertexCData',mean_maxshear,... + 'CDataMapping','scaled'); +set(hh,'edgecolor','none'); +axis equal +view(2) +colormap(jet) +colorbar +title('Mean Maximum Shear Strain Rate (micro-strain/yr)') +set(gca,'ColorScale','log') +caxis([0.01 1]) + +hold on +if exist('SegEnds'); if ~isempty(SegEnds); plot(SegEnds(:,[1 3])',SegEnds(:,[2 4])','k'); end; end + + +subplot(122) +hh = trisurf(tri,nodes(:,1),nodes(:,2),0*nodes(:,2)); +set(gca,'CLim',[min(2*std_maxshear), max(2*std_maxshear)]); +set(hh,'FaceColor','flat',... + 'FaceVertexCData',2*std_maxshear,... + 'CDataMapping','scaled'); +set(hh,'edgecolor','none'); +axis equal +view(2) +colormap(jet) +colorbar +title('Two standard deviations (micro-strain/yr)') +set(gca,'ColorScale','log') +caxis([0.01 1]) + +hold on +if exist('SegEnds'); if ~isempty(SegEnds); plot(SegEnds(:,[1 3])',SegEnds(:,[2 4])','k'); end; end + +drawnow + + +%% dilatation rates +figure +subplot(121) +hh = trisurf(tri,nodes(:,1),nodes(:,2),0*nodes(:,2)); +set(gca,'CLim',[min(mean_dilatation), max(mean_dilatation)]); +set(hh,'FaceColor','flat',... + 'FaceVertexCData',mean_dilatation,... + 'CDataMapping','scaled'); +set(hh,'edgecolor','none'); +axis equal +view(2) +colormap(jet) +colorbar +title('Mean Dilatation Rate (micro-strain/yr)') +caxis([-.1 .1]) + +hold on +if exist('SegEnds'); if ~isempty(SegEnds); plot(SegEnds(:,[1 3])',SegEnds(:,[2 4])','k'); end; end + + +subplot(122) +hh = trisurf(tri,nodes(:,1),nodes(:,2),0*nodes(:,2)); +set(gca,'CLim',[min(2*std_dilatation), max(2*std_dilatation)]); +set(hh,'FaceColor','flat',... + 'FaceVertexCData',2*std_dilatation,... + 'CDataMapping','scaled'); +set(hh,'edgecolor','none'); +axis equal +view(2) +load cmap +colormap(flipud(cmap)) +colorbar +title('Two standard deviations (micro-strain/yr)') +caxis([-.1 .1]) + +hold on +if exist('SegEnds'); if ~isempty(SegEnds); plot(SegEnds(:,[1 3])',SegEnds(:,[2 4])','k'); end; end + +drawnow + +%% plot strain rates exceeding 2-sigma uncertainties +ind = mean_maxshear>2*std_maxshear; + +figure +subplot(121) +hh = trisurf(tri,nodes(:,1),nodes(:,2),0*nodes(:,2)); +set(gca,'CLim',[0, 2]); +set(hh,'FaceColor','flat',... + 'FaceVertexCData', double(ind),... + 'CDataMapping','scaled'); +set(hh,'edgecolor','none'); +axis equal +view(2) +colormap(flipud(hot)) + +title(' Maximum Shear Strain Rate exceeding 2\sigma uncertainties') + +hold on +if exist('SegEnds'); if ~isempty(SegEnds); plot(SegEnds(:,[1 3])',SegEnds(:,[2 4])','k'); end; end + + +ind = mean_maxshear>1*std_maxshear; +subplot(122) + +hh = trisurf(tri,nodes(:,1),nodes(:,2),0*nodes(:,2)); +set(gca,'CLim',[0, 2]); +set(hh,'FaceColor','flat',... + 'FaceVertexCData', double(ind),... + 'CDataMapping','scaled'); +set(hh,'edgecolor','none'); +axis equal +view(2) +colormap(flipud(hot)) + +title(' Maximum Shear Strain Rate exceeding 1\sigma uncertainties') + +hold on +if exist('SegEnds'); if ~isempty(SegEnds); plot(SegEnds(:,[1 3])',SegEnds(:,[2 4])','k'); end; end + +drawnow + + +%% plot ratio of std to mean +rat = abs(mean_maxshear)./std_maxshear; + +figure +hh = trisurf(tri,nodes(:,1),nodes(:,2),0*nodes(:,2)); +set(gca,'CLim',[0, 2]); +set(hh,'FaceColor','flat',... + 'FaceVertexCData', rat,... + 'CDataMapping','scaled'); +set(hh,'edgecolor','none'); +axis equal +view(2) +caxis([.5 5]) +colorbar +title(' STD divided by Mean Max Shear') + +hold on +if exist('SegEnds'); if ~isempty(SegEnds); plot(SegEnds(:,[1 3])',SegEnds(:,[2 4])','k'); end; end + +drawnow + +%% plot ratio of std to mean +rat = abs(mean_dilatation)./std_dilatation; + +figure +hh = trisurf(tri,nodes(:,1),nodes(:,2),0*nodes(:,2)); +set(gca,'CLim',[0, 2]); +set(hh,'FaceColor','flat',... + 'FaceVertexCData', rat,... + 'CDataMapping','scaled'); +set(hh,'edgecolor','none'); +axis equal +view(2) +caxis([.5 5]) +colorbar +title(' STD divided by Mean Dilatation') + +hold on +if exist('SegEnds'); if ~isempty(SegEnds); plot(SegEnds(:,[1 3])',SegEnds(:,[2 4])','k'); end; end + +drawnow + + + +%% plot dilatancy exceeding 2-sigma uncertainties +ind = abs(mean_dilatation)>2*std_dilatation; + +figure +subplot(121) +hh = trisurf(tri,nodes(:,1),nodes(:,2),0*nodes(:,2)); +set(gca,'CLim',[0, 2]); +set(hh,'FaceColor','flat',... + 'FaceVertexCData', double(ind),... + 'CDataMapping','scaled'); +set(hh,'edgecolor','none'); +axis equal +view(2) +colormap(flipud(hot)) + +title(' Dilatation Rate exceeding 2\sigma uncertainties') + +hold on +if exist('SegEnds'); if ~isempty(SegEnds); plot(SegEnds(:,[1 3])',SegEnds(:,[2 4])','k'); end; end + + + +ind = abs(mean_dilatation)>1*std_dilatation; +subplot(122) + +hh = trisurf(tri,nodes(:,1),nodes(:,2),0*nodes(:,2)); +set(gca,'CLim',[0, 2]); +set(hh,'FaceColor','flat',... + 'FaceVertexCData', double(ind),... + 'CDataMapping','scaled'); +set(hh,'edgecolor','none'); +axis equal +view(2) +colormap(flipud(hot)) + +title(' Dilatation Rate exceeding 1\sigma uncertainties') + +hold on +if exist('SegEnds'); if ~isempty(SegEnds); plot(SegEnds(:,[1 3])',SegEnds(:,[2 4])','k'); end; end + + +drawnow + + + + +%plot strain rate component exceeding 2-sigma uncertainties +ind = abs(Exx_mean)>2*Exx_std | abs(Exy_mean)>2*Exy_std | abs(Eyy_mean)>2*Eyy_std ; + +figure +subplot(121) +hh = trisurf(tri,nodes(:,1),nodes(:,2),0*nodes(:,2)); +set(gca,'CLim',[0, 2]); +set(hh,'FaceColor','flat',... + 'FaceVertexCData', double(ind),... + 'CDataMapping','scaled'); +set(hh,'edgecolor','none'); +axis equal +view(2) +colormap(flipud(hot)) + +title(' One Strain Rate Component exceeding 2\sigma uncertainties') + +hold on +if exist('SegEnds'); if ~isempty(SegEnds); plot(SegEnds(:,[1 3])',SegEnds(:,[2 4])','k'); end; end + + + +ind = abs(Exx_mean)>1*Exx_std | abs(Exy_mean)>1*Exy_std | abs(Eyy_mean)>1*Eyy_std ; +subplot(122) + +hh = trisurf(tri,nodes(:,1),nodes(:,2),0*nodes(:,2)); +set(gca,'CLim',[0, 2]); +set(hh,'FaceColor','flat',... + 'FaceVertexCData', double(ind),... + 'CDataMapping','scaled'); +set(hh,'edgecolor','none'); +axis equal +view(2) +colormap(flipud(hot)) + +title(' One Strain Rate Component exceeding 1\sigma uncertainties') + +hold on +if exist('SegEnds'); if ~isempty(SegEnds); plot(SegEnds(:,[1 3])',SegEnds(:,[2 4])','k'); end; end + + + +drawnow + + + +%% principal directions +for j=1:size(Exx_r,2) + + for k=1:size(Exx_r(:,j),1) + + E = [Exx_r(k,j) Exy_r(k,j); Exy_r(k,j) Eyy_r(k,j)]; + [vec,val] = eig(E); + + minVecs(:,k,j) = vec(:,1); + maxVecs(:,k,j) = vec(:,2); + minvals(k,j) = val(1,1); + maxvals(k,j) = val(2,2); + + end + +end + + + + +%show where principal strain rates exceed zero +ind1 = (abs(mean(minvals,2)) > std(minvals,[],2)) | (abs(mean(maxvals,2)) > std(maxvals,[],2)); +ind2 = (abs(mean(minvals,2)) > 1.5*std(minvals,[],2)) | (abs(mean(maxvals,2)) > 1.5*std(maxvals,[],2)); +ind3 = (abs(mean(minvals,2)) > 2*std(minvals,[],2)) | (abs(mean(maxvals,2)) > 2*std(maxvals,[],2)); + + +figure +subplot(131) +hh = trisurf(tri,nodes(:,1),nodes(:,2),0*nodes(:,2)); +set(gca,'CLim',[0, 2]); +set(hh,'FaceColor','flat',... + 'FaceVertexCData', double(ind3),... + 'CDataMapping','scaled'); +set(hh,'edgecolor','none'); +axis equal +view(2) +colormap(flipud(hot)) + +title('One Principal strain Rate exceeding 2\sigma uncertainties') + +hold on +if exist('SegEnds'); if ~isempty(SegEnds); plot(SegEnds(:,[1 3])',SegEnds(:,[2 4])','k'); end; end + + + +subplot(132) + +hh = trisurf(tri,nodes(:,1),nodes(:,2),0*nodes(:,2)); +set(gca,'CLim',[0, 2]); +set(hh,'FaceColor','flat',... + 'FaceVertexCData', double(ind2),... + 'CDataMapping','scaled'); +set(hh,'edgecolor','none'); +axis equal +view(2) +colormap(flipud(hot)) + +title(' One Principal Strain Rate exceeding 1.5\sigma uncertainties') + +hold on +if exist('SegEnds'); if ~isempty(SegEnds); plot(SegEnds(:,[1 3])',SegEnds(:,[2 4])','k'); end; end + + + +subplot(133) + +hh = trisurf(tri,nodes(:,1),nodes(:,2),0*nodes(:,2)); +set(gca,'CLim',[0, 2]); +set(hh,'FaceColor','flat',... + 'FaceVertexCData', double(ind1),... + 'CDataMapping','scaled'); +set(hh,'edgecolor','none'); +axis equal +view(2) +colormap(flipud(hot)) + +title(' One Principal Strain Rate exceeding 1\sigma uncertainties') + +hold on +if exist('SegEnds'); if ~isempty(SegEnds); plot(SegEnds(:,[1 3])',SegEnds(:,[2 4])','k'); end; end + +drawnow + +vecscale = 5; +figure +hold on +skip=2; +% for k=1:skip:size(Exx_r,1) +% +% angles_max = squeeze(atan(maxVecs(2,k,:)./maxVecs(1,k,:))*180/pi); +% [dip, p_value, xlow, xup] = HartigansDipSignifTest(angles_max, 50); +% if p_value<0.5 & mean(abs(angles_max))>45 +% angles_max(angles_max<0) = 180 + angles_max(angles_max<0); +% end +% angles_min = squeeze(atan(minVecs(2,k,:)./minVecs(1,k,:))*180/pi); +% [dip, p_value, xlow, xup] = HartigansDipSignifTest(angles_min, 50); +% if p_value<0.5 & mean(abs(angles_min))>45 +% angles_min(angles_min<0) = 180 + angles_min(angles_min<0); +% end +% +% if abs(mean(minvals(k,:))) > abs(mean(maxvals(k,:))) +% %plot maximum shortening rate direction +% angles = angles_min; +% sign_val = sign(mean(minvals(k,:))); +% mean_angle2 = mean(angles_max); +% sign_val2 = sign(mean(maxvals(k,:))); +% +% +% else +% angles = angles_max; +% sign_val = sign(mean(maxvals(k,:))); +% mean_angle2 = mean(angles_min); +% sign_val2 = sign(mean(minvals(k,:))); +% end +% +% std_angles = std(angles); +% +% +% if std_angles<40 +% +% +% +% %if abs(mean(minvals(k,:)))>2*std(minvals(k,:)) | abs(mean(maxvals(k,:)))>2*std(maxvals(k,:)) +% a1 = pi/180*(mean(angles) + 2*std_angles); +% a2 = pi/180*(mean(angles) - 2*std_angles); +% t = linspace(a1,a2,128); +% +% x0 = [0 vecscale*cos(t) 0]+tri_centroids(k,1); +% z0 = [0 vecscale*sin(t) 0]+tri_centroids(k,2); +% if sign_val<0 +% patch( x0, z0, 'r','FaceAlpha',.3 ,'EdgeColor','none'); +% else +% patch( x0, z0, 'b' ,'FaceAlpha',.3,'EdgeColor','none'); +% end +% +% x0 = [0 -vecscale*cos(t) 0]+tri_centroids(k,1); +% z0 = [0 -vecscale*sin(t) 0]+tri_centroids(k,2); +% +% if sign_val<0 +% patch( x0, z0, 'r', 'FaceAlpha',.3,'EdgeColor','none'); +% else +% patch( x0, z0, 'b', 'FaceAlpha',.3,'EdgeColor','none'); +% end +% +% end +% +% +% +% %plot tick in other direction +% xs = [tri_centroids(k,1)+vecscale*cos(mean_angle2*pi/180) tri_centroids(k,1)-vecscale*cos(mean_angle2*pi/180)]; +% ys = [tri_centroids(k,2)+vecscale*sin(mean_angle2*pi/180) tri_centroids(k,2)-vecscale*sin(mean_angle2*pi/180)]; +% +% if sign_val2>0 +% plot(xs,ys,'b') +% else +% plot(xs,ys,'r') +% end +% +% end +mean_minvals = mean(minvals,2); +mean_maxvals = mean(maxvals,2); + +for k=1:skip:size(Exx_r,1) + + %plot the larger magnitude principal direction + + if abs(mean_minvals(k))>abs(mean_maxvals(k)) + + bigvals = mean_minvals(k); + smallvals = mean_maxvals(k); + + bigVecs = squeeze(minVecs(:,k,:)); + smallVecs = squeeze(maxVecs(:,k,:)); + + + + else + + bigvals = mean_maxvals(k); + smallvals = mean_minvals(k); + + bigVecs = squeeze(maxVecs(:,k,:)); + smallVecs = squeeze(minVecs(:,k,:)); + + end + + mean_smallVecs = mean(smallVecs,2); + angles = squeeze(atan(bigVecs(2,:)./bigVecs(1,:))*180/pi); + + + %determin if bimodal. If so, add 180 to negative values + [dip, p_value, xlow, xup] = HartigansDipSignifTest(angles, 50); + if p_value<0.5 & mean(abs(angles))>45 + angles(angles<0) = 180 + angles(angles<0); + end + + std_angles = std(angles); + + if std_angles<40 + + a1 = pi/180*(mean(angles) + 2*std_angles); + a2 = pi/180*(mean(angles) - 2*std_angles); + t = linspace(a1,a2,128); + + + + x0 = [0 vecscale*cos(t) 0]+tri_centroids(k,1); + z0 = [0 vecscale*sin(t) 0]+tri_centroids(k,2); + if bigvals<0 + patch( x0, z0, 'r','FaceAlpha',.5 ,'EdgeColor','none'); + else + patch( x0, z0, 'b','FaceAlpha',.5 ,'EdgeColor','none'); + end + + x0 = [0 -vecscale*cos(t) 0]+tri_centroids(k,1); + z0 = [0 -vecscale*sin(t) 0]+tri_centroids(k,2); + + if bigvals<0 + patch( x0, z0, 'r','FaceAlpha',.5 ,'EdgeColor','none'); + else + patch( x0, z0, 'b','FaceAlpha',.5 ,'EdgeColor','none'); + end + + + + %plot smaller principal direction as a line + vx = [tri_centroids(k,1)-mean_smallVecs(1)*vecscale*abs(smallvals/bigvals) tri_centroids(k,1)+mean_smallVecs(1)*vecscale*abs(smallvals/bigvals)]; + vy = [tri_centroids(k,2)-mean_smallVecs(2)*vecscale*abs(smallvals/bigvals) tri_centroids(k,2)+mean_smallVecs(2)*vecscale*abs(smallvals/bigvals)]; + + + if smallvals<0 + plot(vx,vy,'r') + else + plot(vx,vy,'b') + end + + end + + style(k) = (bigvals+smallvals)/(abs(bigvals)+abs(smallvals)); + +end +grid on + +if exist('SegEnds'); if ~isempty(SegEnds); plot(SegEnds(:,[1 3])',SegEnds(:,[2 4])','k'); end; end + +axis equal + +title('2\sigma error wedges, maximum shortening rate direction') + + + +drawnow + + +%% plot only tick marks + + +vecscale = 5; +figure +hold on + +for k=1:2:size(Exx_r,1) + + + angles = squeeze(atan(minVecs(2,k,:)./minVecs(1,k,:))*180/pi); + + %determin if bimodal. If so, add 180 to negative values + [dip, p_value, xlow, xup] = HartigansDipSignifTest(angles, 50); + if p_value<0.5 & mean(abs(angles))>45 + angles(angles<0) = 180 + angles(angles<0); + end + + + angle = mean(angles); + + + xs = [tri_centroids(k,1)+vecscale*cos(angle*pi/180) tri_centroids(k,1)-vecscale*cos(angle*pi/180)]; + ys = [tri_centroids(k,2)+vecscale*sin(angle*pi/180) tri_centroids(k,2)-vecscale*sin(angle*pi/180)]; + + + plot(xs,ys,'b') + + + +end +grid on + + +if exist('SegEnds'); if ~isempty(SegEnds); plot(SegEnds(:,[1 3])',SegEnds(:,[2 4])','k'); end; end + +axis equal +title('Maximum shortening rate direction') + + + + +%plot style + +figure +hold on +scatter(tri_centroids(1:skip:end,1),tri_centroids(1:skip:end,2),50,-style(1:skip:end),'fill') +grid on +if exist('SegEnds'); if ~isempty(SegEnds); plot(SegEnds(:,[1 3])',SegEnds(:,[2 4])','k'); end; end + +axis equal +colormap(jet) +colorbar +title('Strain Rate Style') + + + + diff --git a/setup_mesh.m b/setup_mesh.m new file mode 100755 index 0000000..e3bfe80 --- /dev/null +++ b/setup_mesh.m @@ -0,0 +1,164 @@ + +clear all + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Input Section + + +%mat file for saving mesh info +savename = 'mesh_wus_creep'; + +%origin for Caresian coordinate system +%longitude needs to be -180 to 180 +origin = [34 -120]; + +%% +%load GPS data file +%format of columns: +% lon lat Ve Vn Se Sn Ren +data = load('nshm2023_wus_v1.gps'); + + +%% load creeping fault data + +%If there are no creeping faults, set creeping_faults = []; + +%format of columns: +% fault id, lon endpoint 1, lat endpoint 1, lon endpoint 2, lat endpoint 2, creep rate (mm/yr) +% NOTE: fault id is an integer, a unique identifier for each fault that section is considered to be a "continuous fault" +creeping_faults = load('creeping_faults.txt'); +%creeping_faults = []; +patchL = 10; %maximum patch length for creeping fault segments (smaller lengths might be desired for finer mesh) + + +%% mesh domain size +%nominal node spacing +nom_node_spacing = 100; %km +%longitude and latitude range of meshed domain +lon_range = [-125 -115]; +lat_rage = [30 42]; +%option to refine mesh in vicinity of GPS data +%specifiy level of refinement, integer from 0 to 4 +%level 0 means no refinement, 4 is maximum refinement +refine_mesh = 2; + + +%% End Input Section +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +addpath mesh2d +addpath tools + + +%longitude needs to be -180 to 180 +ind = data(:,1)>180; +data(ind,1) = data(ind,1)-360; + + + +%convert from lon,lat to local Cartesian +xy_gps = (llh2local(data(:,1:2)',fliplr(origin)))'; +Ve = data(:,3); %east component of velocity +Vn = data(:,4); %north component of velocity +Sige = data(:,5); %standard deviation, east component +Sign = data(:,6); %standard deviation, north component + + + +%% +bxy = llh2local([lon_range;lat_rage],fliplr(origin))'; +maxx = max(bxy(:,1)); +minx = min(bxy(:,1)); +maxy = max(bxy(:,2)); +miny = min(bxy(:,2)); + +nx = round((maxx - minx)/nom_node_spacing); +ny = round((maxy-miny)/nom_node_spacing); +x=linspace(minx,maxx,nx); +y=linspace(miny,maxy,ny); +[X,Y]=meshgrid(x,y); +nodes = [X(:) Y(:)]; + +ind_gps = xy_gps(:,1)minx & xy_gps(:,2)miny; + +%further refine in vicinity of GPS data by using nodes of voronoi cells in +%delaunay triangulation +[vx,vy]=voronoi(xy_gps(ind_gps,1),xy_gps(ind_gps,2)); +vx = vx(:); +vy = vy(:); +[y,i]=unique(vx); +vx = vx(i); +vy = vy(i); + +ind_vor = vxminx & vyminy; +nodes_refine =[vx(ind_vor) vy(ind_vor)]; + +if refine_mesh==4 + nodes = [nodes; xy_gps(ind_gps,:); nodes_refine]; +elseif refine_mesh==3 + nodes = [nodes; xy_gps(ind_gps,:); nodes_refine(1:2:end,:)]; +elseif refine_mesh==2 + nodes = [nodes; xy_gps(ind_gps,:); nodes_refine(1:3:end,:)]; +elseif refine_mesh==1 + nodes = [nodes; xy_gps(ind_gps,:); nodes_refine(1:5:end,:)]; +else + nodes = [nodes; xy_gps(ind_gps,:)]; +end + +%get nodes on creeping faults +if ~isempty(creeping_faults) + make_patches_creep +else + node_creep = []; + SegEnds = []; + PatchEnds = []; + PatchCreepRates = []; +end + +cnt = size(nodes,1); +nodes = [nodes;node_creep]; + +tri = delaunay(nodes(:,1),nodes(:,2)); + +[edge] = tricon2(tri); +ebnd = edge(:,4) < +1; %-- use bnd edge +conn = edge(ebnd,1:2); + +if ~isempty(creeping_faults) + edges = [conn;edge_creep+cnt]; +else + edges = conn; +end + +[nodes,etri, tri,tnum] = smooth2(nodes,edges,tri); + +%toss out GPS data outside of mesh domain +xy_gps(~ind_gps,:) = []; +Ve(~ind_gps) = []; +Vn(~ind_gps) = []; +Sige(~ind_gps) = []; +Sign(~ind_gps) = []; + + + +%plot GPS data +figure; +patch('faces',tri(:,1:3),'vertices',nodes, ... +'facecolor','w', ... +'edgecolor',[.6,.6,.6]) ; +hold on; +quiver(xy_gps(:,1),xy_gps(:,2),Ve,Vn,'r') +axis equal +if ~isempty(PatchEnds); plot(PatchEnds(:,[1 3])',PatchEnds(:,[2 4])','b','linewidth',2); end + +patch_stuff=make_triangular_patch_stuff(tri,[nodes 0*nodes(:,1)]); + +tri_areas = patch_stuff.area_faces; +tri_centroids = patch_stuff.centroids_faces; + +save(savename, 'tri', 'nodes', 'tri_areas', 'tri_centroids','origin','PatchEnds','PatchCreepRates','Patch_id','xy_gps','Ve','Vn','Sige','Sign') + + \ No newline at end of file diff --git a/tools/EdgeDisp_finite.m b/tools/EdgeDisp_finite.m new file mode 100755 index 0000000..d8414c8 --- /dev/null +++ b/tools/EdgeDisp_finite.m @@ -0,0 +1,44 @@ +function [u,v,exx] = EdgeDisp_finite(x_obs, disloc) +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Surface Displacements Due to Two Edge Dislocations +% (fault has finite length down dip) +% +% Paul Segall 1996 +% Input: +% x_obs = coordinates of the observation points +% disloc(1) = depth of updip end; +% disloc(2) = horizontal position of updip end +% disloc(3) = length downdip; +% disloc(4) = dip (degrees); +% disloc(5) = slip; +% modification by Kaj Johnson, May 2002 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +dip = disloc(4)*pi/180; +L = disloc(3); +d1 = disloc(1); +d2 = disloc(1) + L*sin(dip); +s_v = disloc(5)*sin(dip); +s_h = disloc(5)*cos(dip); +one = ones(size(x_obs)) ; + +x_obs=x_obs-disloc(2); %shift for horizontal position of updip end + +zeta_1 = x_obs / d1; +zeta_2 = (x_obs - L*cos(dip)*one) /d2; +denom_1 = one + zeta_1.^2; +denom_2 = one + zeta_2.^2; + +%vertical displacement +v = ( s_v*atan(zeta_1) + (s_h*one + s_v*zeta_1)./denom_1 ... + -s_v*atan(zeta_2) - (s_h*one + s_v*zeta_2)./denom_2 )/pi; + +%horizontal displacement +u = -( s_h*atan(zeta_1) + (s_v*one - s_h*zeta_1)./denom_1 ... + -s_h*atan(zeta_2) - (s_v*one - s_h*zeta_2)./denom_2 )/pi; + +% horizontal strain -NOTE normalized by d2 +exx = (d2/d1)*(s_v*zeta_1 - s_h*zeta_1.^2)./ denom_1.^2 ... + -(s_v*zeta_2 - s_h*zeta_2.^2)./ denom_2.^2; +exx = 2*exx/pi; diff --git a/tools/HartigansDipSignifTest.m b/tools/HartigansDipSignifTest.m new file mode 100755 index 0000000..d79e84c --- /dev/null +++ b/tools/HartigansDipSignifTest.m @@ -0,0 +1,47 @@ + +function [dip, p_value, xlow,xup]=HartigansDipSignifTest(xpdf,nboot,varargin) + +% function [dip, p_value, xlow,xup]=HartigansDipSignifTest(xpdf,nboot) +% +% calculates Hartigan's DIP statistic and its significance for the empirical p.d.f XPDF (vector of sample values) +% This routine calls the matlab routine 'HartigansDipTest' that actually calculates the DIP +% NBOOT is the user-supplied sample size of boot-strap +% Code by F. Mechler (27 August 2002) + +% calculate the DIP statistic from the empirical pdf + +plotid = 6; +plothist = 0; +j = 1; +while j < nargin -1 + if strncmpi(varargin{j},'plot',4) + plothist = 1; + if isnumber(varargin{j+1}) + plotid = varagin{j+1}; + j = j+1; + else + plotid = 1; + end + end + j = j+1; +end +[dip,xlow,xup, ifault, gcm, lcm, mn, mj]=HartigansDipTest(xpdf); +N=length(xpdf); + +% calculate a bootstrap sample of size NBOOT of the dip statistic for a uniform pdf of sample size N (the same as empirical pdf) +boot_dip=[]; +for i=1:nboot + unifpdfboot=sort(unifrnd(0,1,1,N)); + [unif_dip]=HartigansDipTest(unifpdfboot); + boot_dip=[boot_dip; unif_dip]; +end; +boot_dip=sort(boot_dip); +p_value=sum(dip0 flags an error) +% as well as the minorant and majorant fits GCM, LCM, and the corresponding support indices MN, and MJ + +% sort X in increasing order in column vector +x=sort(xpdf(:)); +N=length(x); +mn=zeros(size(x)); +mj=zeros(size(x)); +lcm=zeros(size(x)); +gcm=zeros(size(x)); +ifault=0; + +% Check that N is positive +if (N<=0) + ifault=1; + fprintf(1,'\nHartigansDipTest. InputError : ifault=%d\n',ifault); + return; +end; + +% Check if N is one +if (N==1) + xl=x(1); + xu=x(N); + dip=0.0; + ifault=2; + fprintf(1,'\nHartigansDipTest. InputError : ifault=%d\n',ifault); + return; +end; + +if (N>1) + % Check that X is sorted + if (x ~= sort(x)) + ifault=3; + fprintf(1,'\nHartigansDipTest. InputError : ifault=%d\n',ifault); + return; + end; + % Check for all values of X identical OR for case 1x(1)) & (4<=N)) + xl=x(1); + xu=x(N); + dip=0.0; + ifault=4; + fprintf(1,'\nHartigansDipTest. InputError : ifault=%d\n',ifault); + return; + end; +end; + +% Check if X is perfectly unimodal +% Hartigan's original DIPTST algorithm did not check for this condition +% and DIPTST runs into infinite cycle for a unimodal input +% The condition that the input is unimodal is equivalent to having +% at most 1 sign change in the second derivative of the input p.d.f. +xsign=-sign(diff(diff(x))); +% This condition check below works even +% if the unimodal p.d.f. has its mode in the very first or last point of the input +% because then the boolean argument is Empty Matrix, and ANY returns 1 for an Empty Matrix +posi=find(xsign>0); +negi=find(xsign<0); +if isempty(posi) | isempty(negi) | all(posi low) + igcm1=gcm(ic); + ic=ic+1; + gcm(ic)=mn(igcm1); +end; +icx=ic; + +% collect the change points for the LCM from LOW to HIGH +ic=1; +lcm(1)=low; +lcm1=lcm(ic); +ic=ic+1; +lcm(ic)=mj(lcm1); +while(lcm(ic) < high) + lcm1=lcm(ic); + ic=ic+1; + lcm(ic)=mj(lcm1); +end; +icv=ic; + +% ICX, IX, IG are counters for the convex minorant +% ICV, IV, IH are counters for the concave majorant +ig=icx; +ih=icv; + +% find the largest distance greater than 'DIP' between the GCM and the LCM from low to high +ix=icx-1; +iv=2; +d=0.0; + +% Either GOTO CODE BREAK POINT 65 OR ELSE GOTO CODE BREAK POINT 50; +if ~(icx~=2 | icv~=2) + d=1.0/fn; +else + iterate_BP50=1; + while iterate_BP50 + % CODE BREAK POINT 50 + igcmx=gcm(ix); + lcmiv=lcm(iv); + if ~(igcmx > lcmiv) + % if the next point of either the GCM or LCM is from the LCM then calculate distance here + % OTHERWISE, GOTO BREAK POINT 55 + lcmiv1=lcm(iv-1); + a=lcmiv-lcmiv1; + b=igcmx-lcmiv1-1; + dx=(x(igcmx)-x(lcmiv1))*a/(fn*(x(lcmiv)-x(lcmiv1)))-b/fn; + ix=ix-1; + if(dx < d) + goto60 = 1; + else + d=dx; + ig=ix+1; + ih=iv; + goto60 = 1; + end; + else + % if the next point of either the GCM or LCM is from the GCM then calculate distance here + % CODE BREAK POINT 55 + lcmiv=lcm(iv); + igcm=gcm(ix); + igcm1=gcm(ix+1); + a=lcmiv-igcm1+1; + b=igcm-igcm1; + dx=a/fn-((x(lcmiv)-x(igcm1))*b)/(fn*(x(igcm)-x(igcm1))); + iv=iv+1; + if ~(dx < d) + d=dx; + ig=ix+1; + ih=iv-1; + end; + goto60 = 1; + end; + + if goto60 + % CODE BREAK POINT 60 + if (ix < 1) ix=1; end; + if (iv > icv) iv=icv; end; + iterate_BP50 = (gcm(ix) ~= lcm(iv)); + end; + end; % End of WHILE iterate_BP50 +end; % End of ELSE (IF ~(icx~=2 | icv~=2)) i.e., either GOTO CODE BREAK POINT 65 OR ELSE GOTO CODE BREAK POINT 50 + +% CODE BREAK POINT 65 +itarate_flag = ~(d < dip); +if itarate_flag +% if itarate_flag is true, then continue calculations and the great iteration cycle +% if itarate_flag is NOT true, then stop calculations here, and break out of great iteration cycle to BREAK POINT 100 + +% calculate the DIPs for the corrent LOW and HIGH + +% the DIP for the convex minorant +dl=0.0; +% if not true, go to CODE BREAK POINT 80 +if (ig ~= icx) + icxa=icx-1; + for j=ig:icxa + temp=1.0/fn; + jb=gcm(j+1); + je=gcm(j); + % if not true either, go to CODE BREAK POINT 74 + if ~(je-jb <= 1) + if~(x(je)==x(jb)) + a=(je-jb); + const=a/(fn*(x(je)-x(jb))); + for jr=jb:je + b=jr-jb+1; + t=b/fn-(x(jr)-x(jb))*const; + if (t>temp) temp=t; end; + end; + end; + end; + % CODE BREAK POINT 74 + if (dl < temp) dl=temp; end; + end; +end; + +% the DIP for the concave majorant +% CODE BREAK POINT 80 +du=0.0; +% if not true, go to CODE BREAK POINT 90 +if ~(ih==icv) + icva=icv-1; + for k=ih:icva + temp=1.0/fn; + kb=lcm(k); + ke=lcm(k+1); + % if not true either, go to CODE BREAK POINT 86 + if ~(ke-kb <= 1) + if ~(x(ke)==x(kb)) + a=ke-kb; + const=a/(fn*(x(ke)-x(kb))); + for kr=kb:ke + b=kr-kb-1; + t=(x(kr)-x(kb))*const-b/fn; + if (t>temp) temp=t; end; + end; + end; + end; + % CODE BREAK POINT 86 + if (du < temp) du=temp; end; + end; +end; + +% determine the current maximum +% CODE BREAK POINT 90 +dipnew=dl; +if (du > dl) dipnew=du; end; +if (dip < dipnew) dip=dipnew; end; +low=gcm(ig); +high=lcm(ih); + +end; % end of IF(itarate_flag) CODE from BREAK POINT 65 + +% return to CODE BREAK POINT 40 or break out of great RECYCLE; +end; % end of WHILE of great RECYCLE + +% CODE BREAK POINT 100 +dip=0.5*dip; +xl=x(low); +xu=x(high); + diff --git a/tools/PointForce.m b/tools/PointForce.m new file mode 100755 index 0000000..9f66db4 --- /dev/null +++ b/tools/PointForce.m @@ -0,0 +1,50 @@ + +function [Ue_x,Ue_y,Un_x,Un_y,Exx_x,Exy_x,Eyy_x,Exx_y,Exy_y,Eyy_y] = PointForce(xs,ys,x,y,nu) + +%(xs,ys) is position of source +%(x,y) are data/observation coordinates +%nu is Poisson's ratio +%Ue_x is East component due to force in x-direction +%Ue_y is East component due to force in y-direction +%Un_x is North component due to force in x-direction +%Un_y is North component due to force in y-direction +% +% Exx_j, Exy_j, Eyy_j are strain components due to force in j-direction +% +%solution for displacements in a thin elastic sheet following +% Sandwell, D. T., & Wessel, P. (2016). Interpolation of 2?D vector data using constraints from elasticity. Geophysical Research Letters, 43(20), 10-703. + + +x = x-xs; +y = y-ys; +r = sqrt(x.^2 + y.^2); + +q = (3-nu)*log(r) + (1+nu)*y.^2./r.^2; +p = (3-nu)*log(r) + (1+nu)*x.^2./r.^2; +w = -(1+nu)*x.*y./r.^2; + +Ue_x = q; +Ue_y = w; + +Un_x = w; +Un_y = p; + + +%strain rates -- computed from analytical derivatives of above expressions +dq_dx = (3-nu)*x./r.^2 - 2*(1+nu)*y.^2.*x./r.^4; +dq_dy = (3-nu)*y./r.^2 + 2*(1+nu)*(-y.^3./r.^4 + y./r.^2); + +dp_dx = (3-nu)*x./r.^2 + 2*(1+nu)*(-x.^3./r.^4 + x./r.^2); +dp_dy = (3-nu)*y./r.^2 - 2*(1+nu)*x.^2.*y./r.^4; + +dw_dx = -(1+nu)*(-2*x.^2.*y./r.^4 + y./r.^2); +dw_dy = -(1+nu)*(-2*y.^2.*x./r.^4 + x./r.^2); + +Exx_x = dq_dx; +Eyy_x = dw_dy; +Exy_x = 0.5*(dw_dx + dq_dy); + +Exx_y = dw_dx; +Eyy_y = dp_dy; +Exy_y = 0.5*(dp_dx + dw_dy); + diff --git a/tools/assign_creep_segs_mesh.m b/tools/assign_creep_segs_mesh.m new file mode 100755 index 0000000..e3afe08 --- /dev/null +++ b/tools/assign_creep_segs_mesh.m @@ -0,0 +1,50 @@ + +creep_rate = creeping_faults(:,5); + +make_patches_creep + +[lia1,locb1] = ismember(pm_seg_num,1:length(creep_rate)); +pm_creep_rate = creep_rate(locb1); + +pm_id = GeoBounds(locb1,1); + +pm = pm(pm_creep_rate>0,:); +pm_id = pm_id(pm_creep_rate>0); +pm_creep_rate = pm_creep_rate(pm_creep_rate>0); + + +%make Garlock left-lateral (negative) +ind = [75:76 4:15 91:98]; +pm_creep_rate(ind) = -pm_creep_rate(ind); + + +segends1 = [pm(:,6)+ pm(:,1)/2.*cos((90-pm(:,5))*pi/180) pm(:,7)+ pm(:,1)/2.*sin((90-pm(:,5))*pi/180)]; +segends2 = [pm(:,6)- pm(:,1)/2.*cos((90-pm(:,5))*pi/180) pm(:,7)- pm(:,1)/2.*sin((90-pm(:,5))*pi/180)]; + +node_creep = zeros(size(segends1,1)+size(segends2,1),2); +node_creep(1:2:end) = segends1; +node_creep(2:2:end) = segends2; + +edge_creep = [(1:2:size(node_creep,1))' (2:2:size(node_creep,1))']; + + + +%need to remove repeated nodes because +%meshing algorithm doesn't like repeats +node_creep = round(node_creep,4); +[C,ia,ic] = unique(node_creep,'rows','stable'); +node_creep = C; + + +%need to renumber nodes values in edges to be consistent +%with unique node values +new_edge = edge_creep; +for k=1:length(ic) + new_edge(edge_creep==k)=ic(k); +end + +edge_creep = new_edge; + +%edge = edge(1:350,:); + +%node_creep = node_creep(1:max(max(edge_creep)),:); diff --git a/tools/assign_data_centroids.m b/tools/assign_data_centroids.m new file mode 100755 index 0000000..6919779 --- /dev/null +++ b/tools/assign_data_centroids.m @@ -0,0 +1,46 @@ +Ve_centroids = nan(size(tri,1),1); +Vn_centroids = nan(size(tri,1),1); + +Sige_centroids = nan(size(tri,1),1); +Sign_centroids = nan(size(tri,1),1); + + +for k=1:size(tri,1) + ind = (data_tri == k); + if sum(ind)>0 + + %weighted mean + W = 1./Sige(ind); + Ve_centroids(k) = sum(W.*Ve(ind)/sum(W)); + + W = 1./Sign(ind); + Vn_centroids(k) = sum(W.*Vn(ind)/sum(W)); + + + %propagate errors + Sige_centroids(k) = sqrt(sum(Sige(ind).^2)); + Sign_centroids(k) = sqrt(sum(Sign(ind).^2)); + + + end +end + +V_centroids = sqrt(Ve_centroids.^2 + Vn_centroids.^2); + +figure; +patch('faces',tri(:,1:3),'vertices',nodes, ... +'facecolor','w', ... +'edgecolor',[.6,.6,.6]) ; +hold on; + +for k=1:size(tri,1) + if num_data_tri(k)~=0 + fill(nodes(tri(k,:),1),nodes(tri(k,:),2),V_centroids(k)) + end +end +axis equal +colorbar +colormap(jet) + +title('observed velocities in each triangle') +set(gca,'fontsize',15) diff --git a/tools/buildG_PointForce.m b/tools/buildG_PointForce.m new file mode 100755 index 0000000..361bc79 --- /dev/null +++ b/tools/buildG_PointForce.m @@ -0,0 +1,21 @@ +function [Ge_x, Ge_y, Gn_x, Gn_y,GExx_x,GExy_x,GEyy_x,GExx_y,GExy_y,GEyy_y] = buildG_PointForce(xy_gps,nodes,nu) + +Ge_x = zeros(size(xy_gps,1),size(nodes,1)); +Ge_y = zeros(size(xy_gps,1),size(nodes,1)); +Gn_x = zeros(size(xy_gps,1),size(nodes,1)); +Gn_y = zeros(size(xy_gps,1),size(nodes,1)); +GExx_x = zeros(size(xy_gps,1),size(nodes,1)); +GEyy_x = zeros(size(xy_gps,1),size(nodes,1)); +GExy_x = zeros(size(xy_gps,1),size(nodes,1)); +GExx_y = zeros(size(xy_gps,1),size(nodes,1)); +GEyy_y = zeros(size(xy_gps,1),size(nodes,1)); +GExy_y = zeros(size(xy_gps,1),size(nodes,1)); + + +for k=1:size(nodes,1) + + [Ge_x(:,k), Ge_y(:,k), Gn_x(:,k), Gn_y(:,k), GExx_x(:,k),GExy_x(:,k),GEyy_x(:,k),GExx_y(:,k),GExy_y(:,k),GEyy_y(:,k)] = PointForce(nodes(k,1),nodes(k,2),xy_gps(:,1),xy_gps(:,2),nu); + + disp(['Completed ' num2str(k/size(nodes,1)*100) '% of body force Greens function calculations']) + +end diff --git a/tools/build_creepG.m b/tools/build_creepG.m new file mode 100755 index 0000000..ab85af6 --- /dev/null +++ b/tools/build_creepG.m @@ -0,0 +1,65 @@ + +%build Gcreep -- piecewise linear smoothing along faults +faultnums = unique(floor(Patch_id)); +cnt = 0; +Gcreep = zeros(2*length(ind),size(pm,1)); +GExx_creep = zeros(length(ind),size(pm,1)); +GExy_creep = zeros(length(ind),size(pm,1)); +GEyy_creep = zeros(length(ind),size(pm,1)); + +for k=1:length(faultnums) + + n = sum(floor(Patch_id)==faultnums(k)); + + if n==1 + + Gcreep(:,cnt+1) = [G1east_creep(:,cnt+1);G1north_creep(:,cnt+1)]; + GExx_creep(:,cnt+1) = G1Exx_creep(:,cnt+1); + GExy_creep(:,cnt+1) = G1Exy_creep(:,cnt+1); + GEyy_creep(:,cnt+1) = G1Eyy_creep(:,cnt+1); + + elseif n==2 + + Gcreep(:,cnt+1) = [G1east_creep(:,cnt+1)-G2east_creep(:,cnt+1);G1north_creep(:,cnt+1)-G2north_creep(:,cnt+1)]; + Gcreep(:,cnt+2) = [G2east_creep(:,cnt+1)+G1east_creep(:,cnt+2);G2north_creep(:,cnt+1)+G1north_creep(:,cnt+2)]; + + GExx_creep(:,cnt+1) = G1Exx_creep(:,cnt+1)-G2Exx_creep(:,cnt+1); + GExx_creep(:,cnt+2) = G2Exx_creep(:,cnt+1)+G1Exx_creep(:,cnt+2); + + GExy_creep(:,cnt+1) = G1Exy_creep(:,cnt+1)-G2Exy_creep(:,cnt+1); + GExy_creep(:,cnt+2) = G2Exy_creep(:,cnt+1)+G1Exy_creep(:,cnt+2); + + GEyy_creep(:,cnt+1) = G1Eyy_creep(:,cnt+1)-G2Eyy_creep(:,cnt+1); + GEyy_creep(:,cnt+2) = G2Eyy_creep(:,cnt+1)+G1Eyy_creep(:,cnt+2); + + else + + Gcreep(:,cnt+1) = [G1east_creep(:,cnt+1)-G2east_creep(:,cnt+1);G1north_creep(:,cnt+1)-G2north_creep(:,cnt+1)]; + GExx_creep(:,cnt+1) = G1Exx_creep(:,cnt+1)-G2Exx_creep(:,cnt+1); + GExy_creep(:,cnt+1) = G1Exy_creep(:,cnt+1)-G2Exy_creep(:,cnt+1); + GEyy_creep(:,cnt+1) = G1Eyy_creep(:,cnt+1)-G2Eyy_creep(:,cnt+1); + + for j=cnt+2:cnt+(n-1) + Gcreep(:,j) = [G2east_creep(:,j-1)+G1east_creep(:,j)-G2east_creep(:,j);G2north_creep(:,j-1)+G1north_creep(:,j)-G2north_creep(:,j)]; + GExx_creep(:,j) = G2Exx_creep(:,j-1)+G1Exx_creep(:,j)-G2Exx_creep(:,j); + GExy_creep(:,j) = G2Exy_creep(:,j-1)+G1Exy_creep(:,j)-G2Exy_creep(:,j); + GEyy_creep(:,j) = G2Eyy_creep(:,j-1)+G1Eyy_creep(:,j)-G2Eyy_creep(:,j); + + end + + Gcreep(:,cnt+n) = [G2east_creep(:,cnt+n-1)+G1east_creep(:,cnt+n);G2north_creep(:,cnt+n-1)+G1north_creep(:,cnt+n)]; + GExx_creep(:,cnt+n) = G2Exx_creep(:,cnt+n-1)+G1Exx_creep(:,cnt+n); + GExy_creep(:,cnt+n) = G2Exy_creep(:,cnt+n-1)+G1Exy_creep(:,cnt+n); + GEyy_creep(:,cnt+n) = G2Eyy_creep(:,cnt+n-1)+G1Eyy_creep(:,cnt+n); + + + end + + + + cnt = cnt+n; + +end + +Geast_creep = Gcreep(1:end/2,:); +Gnorth_creep = Gcreep(1+end/2:end,:); diff --git a/tools/cline.m b/tools/cline.m new file mode 100755 index 0000000..464a40d --- /dev/null +++ b/tools/cline.m @@ -0,0 +1,86 @@ +% +% Draw a color-coded line by using the edge of a patch with no facecolor +% +% SYNTAX +% ====== +% h = cline(x, y [, z, cdata]) +% +% INPUT +% ===== +% x vector with x-values +% y vector with y-values +% z (opt.) vector with z-values +% cdata (opt.) vector with color-data +% +% 2 input arguments => cdata = y; z=0 % s. Example 1 +% 3 input arguments => cdata = z % s. Example 2 +% 4 i.a. & z = [] => cdata = y; z=0 % s. Example 4 +% +% OUPUT +% ===== +% h Handle to line (i.e. patch-object !!!) +% +% Examples +% ======== +% t = 2*pi:.1:8*pi; +% +% cline(sqrt(t).*sin(t), sqrt(t).*cos(t)); view(3) % Example 1 +% cline(sqrt(t).*sin(t), sqrt(t).*cos(t), t); view(3) % Example 2 +% cline(sqrt(t).*sin(t), sqrt(t).*cos(t), t, rand(size(t))); view(3) % Example 3 +% cline(sqrt(t).*sin(t), sqrt(t).*cos(t), [], rand(size(t))); view(3) % Example 4 +% +% +% Author & Version +% ================ +% S. Hölz, TU-Berlin, seppel_mit_ppATweb.de +% V 1.0, 16.4.2007 +% Created using Matlab 7.0.4 (SP2) +% + +% Info +% ==== +% This function uses the edges of a patch to represent the colored 2D/3D-line. The marker-related +% properties (i.e. 'maker','markersize','markeredgecolor','markerfacecolor') can be used as with a +% regular line. +% +% !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +% The line-related properties (i.e. 'linestyle','linewidth') WILL HAVE NO EFFECT +% while displaying the line on screen, but will change the output when printing to file !!! +% !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!! +% +% This is not a flaw of this function but rather the way Matlab interprets the interpolated edges of +% a patch on screen and when printing. I do not know, if this behavior is consistent in other +% versions of Matlab. +% + +function h = cline(x, y, z, cdata) + + % Check input arguments + error(nargchk(2, 4, nargin)) + if ~isnumeric(x) || ~isnumeric(y) || ~isvector(x) || ~isvector(y) || length(x)~=length(y); + error('x and y must be numeric and conforming vectors'); + end + if (nargin == 3 && (~isnumeric(z) || ~isvector(z) || length(x)~=length(z))) || ... + (nargin == 4 && ~isempty(z) && (~isnumeric(z) || ~isvector(z) || length(x)~=length(z))) ... + (nargin == 4 && (~isnumeric(cdata) || ~isvector(cdata) || length(x)~=length(cdata))) + error('z (and cdata) must be a numeric vector and conforming to x and y'); + end + + % Draw line as patch + if nargin == 2 + p = patch([x(:)' nan], [y(:)' nan], 0); + cdata = [y(:)' nan]; + elseif nargin == 3 + p = patch([x(:)' nan], [y(:)' nan], [z(:)' nan], 0); + cdata = [z(:)' nan]; + elseif nargin == 4 + if isempty(z); z = zeros(size(x)); end + p = patch([x(:)' nan], [y(:)' nan], [z(:)' nan], 0); + cdata = [cdata(:)' nan]; + end + + set(p,'cdata', cdata, 'edgecolor','interp','facecolor','none','linewidth',3) + + + % Create output + if nargout == 1; h = p; end \ No newline at end of file diff --git a/tools/cmap.mat b/tools/cmap.mat new file mode 100755 index 0000000000000000000000000000000000000000..f3b7d2e87c17b27806c4548f6c1edb3dd6c1d8a7 GIT binary patch literal 422 zcmeZu4DoSvQZUssQ1EpO(M`+DN!3vZ$Vn_o%P-2c0*X0%nwjV*I2WZRmZYXA(mVx2O9ewyD-#PV149KP10auBzyJe`p1%A*wj3h^L&coO$q5Mt3CRfzN^E>= z9K1|x0`@Tr7&99xGjlr^@V?} zF#Xvj<$#aE-_Ac5nZLQFj!monV4apn)hX2#yR^UEUgw&+{%#fTs()>NOAWq@h1{3@ zE&qMh{r7+C_*eaJv<(mpc=AnoJmM6~ dU-5CrK{>JWJQ@iLF5f?JS=sa-<6imj6#$kEqKN +% ------------------------ data is correlated along +% | | | all rows for each column +% | | output | +% p | data matrix | data is independent along +% | | | all columns for a given row +% | | | +% < -------- nSamp ------> +% +% example: use following correlation matrix (output implicitly 3 rows) +% [1 0.2 0.2] +% [0.2 1 0.2] +% [0.2 0.2 1 ] +% +% and 1e5 samples to check function +% +%% +% n = 3; Rpp = repmat(0.2, [n,n]); Rpp(1:(n+1):n^2) = 1; +% disp(Rpp) +% nSamp = 1e5; +% [x, sampR] = correlatedGaussianNoise(Rpp, nSamp); +% disp(sampR) +% +%% ----------------------------------------------------- +% michaelB +% +%% algorithm +% check dimenions - add other checking as necessary... +if(ndims(Rpp) ~= 2), + result = []; + error('Rpp must be a real-valued symmetric matrix'); + return; +end +% symmeterize the correlation matrix +Rpp = 0.5 .*(double(Rpp) + double(Rpp')); +% eigen decomposition +[V,D] = eig(Rpp); +% check for positive definiteness +if(any(diag(D) <= 0)), + result = []; + error('Rpp must be a positive definite'); + return; +end +% form correlating filter +W = V*sqrt(D); +% form white noise dataset +n = randn(size(Rpp,1), nSamp); +% correlated (colored) noise +result = W * n; +% calculate the sample correlation matrix if necessary +if(nargout == 2), + sampRpp = 0; + for k1=1:nSamp, + sampRpp = sampRpp + result(:,k1) * (result(:,k1)'); + end + + % unbiased estimate + sampRpp = sampRpp ./ (nSamp - 1); +end + + diff --git a/tools/disloc3d.m b/tools/disloc3d.m new file mode 100755 index 0000000..bc62dd9 --- /dev/null +++ b/tools/disloc3d.m @@ -0,0 +1,605 @@ +function [displacement,gradient,Stress]= DisloOkada3mode(m,coordinates,shear_m,poission_ratio) +%This function is to derive displacements, displacement gradients and stresses anywhere in a half space. +%It is based on solutions provided by Y. Okada (1992) +%in April, 1992. Bulletin of the Seismological Society of America. Vol. +%82, No.2 pp. 1018-1040 + +%auther: Wen-Jeng Huang +%date: Nov. 9th. 2006 +%most recent modification: Nov. 12th. 2006 + + %parameters for DisloOkada3mode.m is equivalent to disloc3dR12 + %North_position and east_position refers to position of center of + % bottom edge of dislocation. + %depth referes to depth to bottom edge of dislocation + %m=[length width depth dip strike east_position north_position strike-slip dip-slip tensile] + %strike-slip (positive): left-lateral; + %dip-slip (positive): reverse fault; + %tensile (positive): opening: + %[displacement]=DisloOkadaDisplacement(m,[x; y; z],G,Nu); + % x,y,z: cooridnates + % G: shear modulus + % Nu: poission ratio + %results: U(1,:) = displacement in east(+); U(2,:) = displacement in north(+); U(3,:) = displacement upward(+); + +X = coordinates(1,:); +Y = coordinates(2,:); +Z = coordinates(3,:); + + + L = m(1); + W = m(2); + D = m(3); + angle = m(4); % dip in degree + + if D >= W*sin(angle/180*pi) && 1 == isequal(Z,-abs(Z))% A1 +strikeAngle = m(5); %closewise is positive + Xc = m(6); + Yc = m(7); + slip_str = m(8); + slip_dip = m(9); + tensile = m(10); + Gshear = shear_m; + nu = poission_ratio; + + % unit transformation and constants +delta = angle/180 *pi; +angle_Str = -strikeAngle/180 * pi; +if nu == 0.5 + nu = 0.4999; + youngs = 2 * Gshear * (1 +nu); + lambda = nu *youngs / ( (1 + nu) *(1 - 2*nu)); +else + youngs = 2 * Gshear * (1 +nu); + lambda = nu *youngs / ( (1 + nu) *(1 - 2*nu)); +end + mu = Gshear; +c = D; +% coordinate transformation +x = -sin(angle_Str) * (X - Xc) + cos(angle_Str) * (Y - Yc ) +1/2 *L; +y = -cos(angle_Str) * (X - Xc) - sin(angle_Str) * (Y - Yc); +z = Z; +%%%%%%%%%%%%%%%%% +%integating +d = c - z; +p = y * cos(delta) + d * sin(delta); + + xi = [x;x;x-L;x-L]; % + eta = [p;p-W;p;p-W];% + + q = ones(4,1)*y * sin(delta) - ones(4,1)*d * cos(delta); + alpha = (lambda + mu) / (lambda + 2* mu); + %alpha = 2/3; + Rsquare = xi.^2 + eta.^2 + q.^2; + R = sqrt(Rsquare); + y_ = eta * cos(delta) + q * sin(delta); + d_ = eta * sin(delta) - q * cos(delta); + c_ = d_ + ones(4,1)*z; + %%%%%% For displacement + X11 = 1./(R .* (R + xi)); + X32 = (2 .* R + xi )./ ( R.^3 .* ( R + xi ).^2 ); + X53 = (8*R.^2 + 9*R.*xi + 3*xi.^2) ./ (R.^5 .*( R + xi).^3 ); + Y11 = 1 ./ ( R.* ( R + eta ) ); + Y32 = (2 * R + eta ) ./ (R.^3 .* (R + eta).^2 ); + Y53 = (8*R.^2 + 9*R.*eta + 3*eta.^2) ./ (R.^5 .*( R + eta).^3 ); + h = q*cos(delta) - ones(4,1)*z; + Z32 = sin(delta)./R.^3 - h.*Y32; + Z53 = 3*sin(delta)./R.^5 - h.*Y53; + Y0 = Y11 - xi.^2.*Y32; + Z0 = Z32 - xi.^2.*Z53; + %%% + %%% Selecting a right root for theta is the most tricky problem + qsign = sign(q); + theta = atan2(xi .* eta, abs(q) .* R); + theta = qsign.* theta; + + X = sqrt( xi.^2 + q.^2); + if abs(cos(delta))< 0.000001 + I3 = 1/2 * ( eta ./ (R + d_) + y_.*q ./( (R + d_).^2 ) - log(R + eta) ); + I4 = 1/2 * ( xi.* y_ ./( (R + d_).^2) ); + else + I3 = 1/cos(delta) .* y_ ./ ( R + d_ ) - 1 ./cos(delta).^2 .*( log(R + eta) - sin(delta) .* log(R + d_)); + I4 = sin(delta)./cos(delta) .* xi./(R + d_) + 2./(cos(delta).^2) * atan2(eta.*(X + q.*cos(delta) )+ ... + X .* (R + X) * sin(delta), xi.* (R + X)* cos(delta)); + end + I1 = -(xi./(R +d_))*cos(delta) - I4 *sin(delta); + I2 = log(R + d_) + I3* sin(delta); + %%% ji + D11 = 1./(R.*(R + d_)); + if abs(cos(delta))< 0.000001 + K1 = (xi .* q) ./ (R + d_) .* D11; + K3 = sin(delta)./ (R + d_) .* (xi.^2 .* D11 - 1); + else + K1 = xi/cos(delta) .* (D11 - Y11*sin(delta)); + K3 = 1/cos(delta) .* (q .* Y11 - y_ .* D11); + end + K2 = 1./R + K3*sin(delta); + K4 = xi .* Y11 * cos(delta) - K1*sin(delta); + + J5 = -(d_ + y_.^2 ./ (R +d_) ) .* D11; + J2 = xi .* y_ ./ (R + d_) .* D11; + if abs(cos(delta))< 0.000001 + J6 = - y_ ./ (R + d_).^2 .* (xi.^2 .* D11 - 1/2); + J3 = - xi ./(R + d_).^2 .* (q.^2 .* D11 - 1/2); + else + J6 = 1./cos(delta).*(K3 - J5*sin(delta)); + J3 = 1./cos(delta).*(K1 - J2*sin(delta)); + end + J1 = J5*cos(delta) - J6*sin(delta); + J4 = -xi.*Y11 - J2*cos(delta) + J3*sin(delta); + %%% ki + E = sin(delta) ./ R - y_ .* q ./ R.^3; + F = d_ ./ R.^3 + xi.^2 .* Y32 * sin(delta); + G = 2 * X11 * sin(delta) - y_.* q.* X32; + H = d_ .* q .* X32 + xi .* q .* Y32 * sin(delta); + P = cos(delta) ./ R.^3 + q.* Y32 * sin(delta); + Q = 3 * c_ .* d_ ./ R.^5 - ( ones(4,1)*z.* Y32 + Z32 + Z0)* sin(delta); + % li + E_ = cos(delta)./R + d_ .* q ./ R.^3; + F_ = y_ ./ R.^3 + xi.^2 .* Y32 * cos(delta); + G_ = 2 * X11.* cos(delta) + d_.* q.* X32; + H_ = y_.* q.* X32 + xi.* q .* Y32 * cos(delta); + P_ = sin(delta) ./ R.^3 - q.* Y32 * cos(delta); + Q_ = (3 * c_ .* y_ )./ R.^5 + q.* Y32 - ( ones(4,1)* z.* Y32 + Z32 + Z0) * cos(delta); +if slip_str ~= 0 + %%%%%% strike-slip + %%% displacement + %%uA + Su1A = theta/2 + alpha / 2 * xi .* q .* Y11; + Su2A = alpha / 2 * q ./ R; + Su3A = (1 - alpha) / 2 * log( R + eta) - alpha / 2 * q.^2 .* Y11; + %% + %uB + Su1B = - xi .* q .* Y11 - theta - (1 - alpha) / alpha .* I1 * sin(delta); + Su2B = -q ./ R + (1 - alpha) / alpha * y_ ./ ( R + d_ ) * sin(delta); + Su3B = q.^2 .* Y11 - (1 - alpha) / alpha * I2 * sin(delta); + + %uC + Su1C = (1 - alpha) * xi .* Y11 * cos(delta) - alpha * xi .* q .* Z32; + Su2C = (1 - alpha) * ( cos(delta) ./ R + 2 * q .* Y11 * sin(delta) ) - alpha * c_ .* q ./ R.^3; + Su3C = (1 - alpha) * q .* Y11 * cos(delta) - alpha * ( c_ .* eta ./ R.^3 - ones(4,1)*z .* Y11 + xi.^2 .* Z32); + %%%%%% strike-slip + %%% displacement gradient + %jA + Sj1A = -(1 -alpha)/2 *q.*Y11 - alpha/2*(xi.^2).*q.*Y32; + Sj2A = - alpha/2 * xi.*q./R.^3; + Sj3A = (1 -alpha)/2 * xi.*Y11 + alpha/2 * xi.*q.^2.*Y32; + + %jB + Sj1B = xi.^2 .*q.* Y32 -(1-alpha)/alpha * J1* sin(delta); + Sj2B = xi.*q./R.^3 - (1-alpha)/alpha * J2 *sin(delta); + Sj3B = -xi.*q.^2.*Y32 -(1-alpha)/alpha * J3* sin(delta); + + %jC + Sj1C = (1 -alpha)* Y0*cos(delta) - alpha * q .* Z0; + Sj2C = -(1 -alpha)* xi.*(cos(delta)./R.^3 + 2*q.*Y32 *sin(delta)) + alpha * (3 * c_ .*xi .*q) ./ R.^5 ; + Sj3C = -(1 - alpha) * xi .* q .* Y32 * cos(delta) + alpha * xi.* ( (3 * c_ .* eta)./R.^5 - ones(4,1)*z.* Y32 - Z32 -Z0 ); + + %kA + Sk1A = (1 -alpha)/2 * xi.* Y11* sin(delta) + d_ / 2 .* X11 + alpha/2 * xi .* F; + Sk2A = alpha /2 * E; + Sk3A = (1 -alpha)/2 *( cos(delta)./R + q.* Y11* sin(delta) ) - alpha/2 * q .* F; + + %kB + Sk1B = -xi.* F - d_ .* X11 + (1 -alpha)/alpha .*( xi.* Y11 + J4) * sin(delta); + Sk2B = -E + (1 -alpha)/alpha * (1./R + J5).* sin(delta); + Sk3B = q.* F - (1 -alpha) /alpha * (q.*Y11 - J6) * sin(delta); + + %kC + Sk1C = -(1 - alpha).* xi.* P * cos(delta) - alpha.* xi.* Q; + Sk2C = 2 * (1 -alpha) * (d_./R.^3 - Y0 * sin(delta) ) * sin(delta) - y_ ./ R.^3 * cos(delta) - alpha* ( (c_ + d_)./R.^3 *sin(delta) - eta./R.^3 - 3*c_.* y_.* q./R.^5); + Sk3C = -(1 -alpha)* q./R.^3 + ( y_ ./ R.^3 - Y0*cos(delta))* sin(delta) + alpha * ( (c_ + d_)./ R.^3 * cos(delta) + 3 * c_ .* d_ .* q ./R.^5 - (Y0 * cos(delta) + q .* Z0)* sin(delta)); + + %lA + Sl1A = (1 -alpha)/2 * xi .* Y11 * cos(delta) + y_/2 .* X11 + alpha/2 * xi.* F_; + Sl2A = alpha/2 * E_; + Sl3A = - (1 - alpha)/2 * (sin(delta)./R - q.* Y11 * cos(delta)) - alpha/2 * q .* F_; + + %lB + Sl1B = -xi.* F_ - y_ .* X11 + (1 -alpha) / alpha * K1 * sin(delta); + Sl2B = - E_ + (1 -alpha)/alpha * y_ .* D11 * sin(delta); + Sl3B = q.* F_ + (1 -alpha)/alpha * K2 * sin(delta); + + %lC + Sl1C = (1 - alpha) * xi .* P_ * cos(delta) - alpha * xi.* Q_; + Sl2C = 2 * (1 -alpha) * ( y_ ./ R.^3 - Y0 * cos(delta) ) * sin(delta) + d_ ./ R.^3 * cos(delta) - alpha * ( (c_ + d_)./R.^3 * cos(delta) +3 *c_.*d_.*q./R.^5); + Sl3C = (y_./R.^3 - Y0 * cos(delta) ) * cos(delta) - alpha * ( (c_ + d_)./R.^3 * sin(delta) - 3*c_.*y_.*q./R.^5 - Y0* sin(delta)^2 + q.* Z0*cos(delta)); +end +if slip_dip ~= 0 % B2 + %%% %%% dip-slip + %%%%%%% displacement + %%uA + Du1A = alpha / 2 * q ./ R; + Du2A = theta/ 2 + alpha /2 * eta .* q .* X11; + Du3A = (1-alpha) /2 * log(R + xi) - alpha/2 * q.^2 .* X11; + %% + %uB + Du1B = - q./R + (1 -alpha)/alpha * I3 * sin(delta) * cos(delta); + Du2B = -eta .* q .* X11 - theta - (1 -alpha)/ alpha * xi ./ (R + d_) * sin(delta) * cos(delta); + Du3B = q.^2 .* X11 + (1 - alpha)/alpha * I4 * sin(delta) * cos(delta); + + %uC + Du1C = (1 - alpha)* cos(delta) ./ R - q .* Y11 * sin(delta) - alpha * c_ .* q ./ R.^3; + Du2C = (1 - alpha)* y_ .* X11 - alpha * c_ .* eta .* q .* X32; + Du3C = - d_ .* X11 - xi .* Y11 * sin(delta) - alpha * c_ .* ( X11 - q.^2 .* X32); + %%%%%%%%%%%% displacement gradient + %%% dip-slip + %jA + Dj1A = -alpha/2 * xi .* q ./ R.^3; + Dj2A = - q/2 .* Y11 - alpha/2 * eta .* q ./ R.^3; + Dj3A = (1 - alpha)/2 * 1./ R + alpha/2 .* q.^2 ./ R.^3; + + %jB + Dj1B = xi .* q ./ R.^3 + (1 - alpha) / alpha * J4 * sin(delta) * cos(delta); + Dj2B = eta .* q ./ R.^3 + q.* Y11 + ( 1 -alpha) / alpha * J5 * sin(delta) * cos(delta); + Dj3B = - q.^2 ./ R.^3 + (1 - alpha) / alpha * J6 * sin(delta)* cos(delta); + + %jC + Dj1C = - (1 - alpha) .* xi./R.^3 * cos(delta) + xi .* q .* Y32 * sin(delta) + alpha.* (3*c_.*xi.*q./R.^5); + Dj2C = - (1 - alpha) .* y_ ./ R.^3 + alpha * 3 * c_ .* eta .* q ./ R.^5; + Dj3C = d_ ./ R.^3 - Y0 .* sin(delta) + alpha * c_ ./ R.^3 .* ( 1 - 3 * q.^2 ./ R.^2); + + %kA + Dk1A = alpha / 2 * E; + Dk2A = (1 -alpha) / 2 * d_ .* X11 + xi/ 2 .* Y11 * sin(delta) + alpha/2 * eta .* G; + Dk3A = (1 -alpha) / 2 * y_ .* X11 - alpha/2 .* q .* G; + + %kB + Dk1B = -E + (1 - alpha)./ alpha .* J1 * sin(delta) * cos(delta); + Dk2B = -eta .* G - xi.* Y11 * sin(delta) + (1 - alpha) /alpha *J2 * sin(delta) * cos(delta); + Dk3B = q .* G + (1 - alpha)./ alpha .* J3 * sin(delta) * cos(delta); + + %kC + Dk1C = -(1 -alpha).* eta ./ R.^3 + Y0 * sin(delta).^2 - alpha * ( (c_ + d_) ./ R.^3 * sin(delta) - 3 * c_ .* y_ .* q ./ R.^5); + Dk2C = (1 - alpha) * (X11 - y_.^2 .* X32) - alpha* c_.* ( (d_ + 2* q *cos(delta) ).* X32 - y_ .* eta.* q.* X53); + Dk3C = xi .* P * sin(delta) + y_ .* d_.* X32 + alpha * c_ .* ( ( y_ + 2 * q * sin(delta) ).* X32 - y_ .* q.^2.* X53); + + %lA + Dl1A = alpha/2 * E_; + Dl2A = (1 - alpha)/2 .* y_ .* X11 + xi/2 .* Y11 * cos(delta) + alpha/2 * eta.* G_; + Dl3A = - (1 - alpha)/ 2 * d_ .* X11 - alpha /2 * q .* G_; + %lB + Dl1B = - E_ - (1 - alpha)/ alpha .* K3 .* sin(delta) .* cos(delta); + Dl2B = - eta .* G_ - xi.* Y11* cos(delta) - (1 -alpha)./alpha .* xi .* D11 * sin(delta) * cos(delta); + Dl3B = q.*G_ - (1 -alpha)/alpha * K4 .* sin(delta) * cos(delta); + %lB + Dl1C = -q./ R.^3 + Y0 * sin(delta) * cos(delta) - alpha * ( ( c_ + d_ )./ R.^3 * cos(delta) + 3* c_ .* d_ .* q ./ R.^5); + Dl2C = (1 - alpha) * y_ .* d_ .* X32 - alpha * c_.* ( ( y_ -2* q * sin(delta) ).* X32 + d_ .* eta .* q .* X53 ) ; + Dl3C = - xi.* P_ * sin(delta) + X11 - d_.^2.* X32 - alpha* c_ .* ( ( d_ - 2*q * cos(delta) ) .* X32 - d_ .* q.^2 .* X53); +end % B2 +if tensile ~= 0 + %%%tensile + %displacement + %%uA + Tu1A = -(1 - alpha) / 2 * log(R + eta) - alpha / 2 * q.^2 .* Y11; + Tu2A = -(1 - alpha) / 2 * log(R + xi) - alpha / 2 * q.^2 .* X11; + Tu3A = theta / 2 - alpha / 2 * q .* (eta .* X11 + xi .* Y11); + %% + %uB + Tu1B = q.^2 .* Y11 - (1 - alpha)/ alpha * I3 * sin(delta)^2; + Tu2B = q.^2 .* X11 + (1 - alpha)/ alpha * xi ./ (R + d_) * sin(delta)^2; + Tu3B = q .* (eta .* X11 + xi .* Y11) - theta - (1 - alpha) /alpha * I4 * sin(delta)^2; + + %uC + Tu1C = -(1 - alpha) * ( sin(delta)./ R + q .* Y11 * cos(delta) ) - alpha * ( ones(4,1)*z .* Y11 - q.^2 .* Z32); + Tu2C = (1 - alpha) * 2 * xi .* Y11 * sin(delta) + d_ .* X11 - alpha * c_ .* ( X11 - q.^2 .* X32); + Tu3C = (1 - alpha) * (y_ .* X11 + xi .* Y11 * cos(delta)) + alpha * q .* (c_ .* eta .* X32 + xi .* Z32); + %%%%%%%%%%%% displacement gradient + %%% tensile + %jA + Tj1A = - (1- alpha)/2 * xi .* Y11 + alpha/2 * xi.*q.^2.* Y32; + Tj2A = -(1-alpha)/2 * 1./R + alpha/2 * q.^2 ./R.^3; + Tj3A = -(1 -alpha)/2 * q.* Y11 - alpha/2 *q.^3.*Y32; + + %jB + Tj1B = -xi.* q.^2.* Y32 - (1-alpha)/alpha*J4*sin(delta)^2; + Tj2B = -q.^2./R.^3 -(1-alpha)/alpha*J5*sin(delta)^2; + Tj3B = q.^3.*Y32 - (1 -alpha)/alpha*J6*sin(delta)^2; + + %jC + Tj1C = (1 -alpha)*xi./R.^3* sin(delta) + xi.*q.*Y32*cos(delta) + alpha * xi.*(3*c_ .*eta./R.^5 - 2 * Z32 - Z0); + Tj2C = (1 -alpha).* 2 * Y0 * sin(delta) - d_./R.^3 + alpha.* c_./R.^3.*(1 - 3*q.^2./R.^2); + Tj3C = -(1 -alpha).*( y_./R.^3 - Y0*cos(delta)) - alpha* (3*c_.*eta.*q./R.^5 - q.* Z0); + %%%tensile + %kA + Tk1A = -(1 - alpha)/2 * (cos(delta)./R + q.*Y11*sin(delta)) - alpha/2 * q.* F; + Tk2A = -(1 - alpha)/2 * y_.*X11 - alpha/2 * q .* G ; + Tk3A = (1 - alpha)/2 * (d_.*X11 + xi.* Y11 * sin(delta) ) + alpha /2 * q .* H; + + %kB + Tk1B = q.*F - (1 -alpha)/alpha * J1 * sin(delta)^2; + Tk2B = q.*G - (1 -alpha)/alpha * J2 * sin(delta)^2; + Tk3B = -q.*H - (1 -alpha)/alpha * J3 * sin(delta)^2; + + %kC + Tk1C = (1 -alpha)* (q./R.^3 + Y0 * sin(delta) * cos(delta)) + alpha *( ones(4,1)*z./ R.^3 * cos(delta) + 3 * c_ .* d_ .* q ./ R.^5 - q.* Z0 * sin(delta) ); + Tk2C = -(1 -alpha) * 2 * xi .* P * sin(delta) - y_.* d_ .* X32 + alpha * c_ .* ( ( y_ +2 *q*sin(delta)).*X32 - y_.* q.^2 .*X53); + Tk3C = -(1 - alpha) * ( xi.* P * cos(delta) - X11 + y_.^2 .*X32) + alpha* c_ .* ( ( d_ + 2 * q * cos(delta)) .* X32 - y_.* eta .* q .* X53 ) + alpha * xi.* Q; + + %%%% tensile + Tl1A = (1 - alpha)/2 *( sin(delta)./R - q.* Y11 * cos(delta) ) - alpha/2 *q .* F_; + Tl2A = (1 - alpha)/2 * d_.* X11 - alpha/2 * q .* G_; + Tl3A = (1 - alpha)/2 * (y_ .* X11 + xi.* Y11 * cos(delta)) + alpha/2 * q .* H_; + + Tl1B = q.* F_ + (1 -alpha)/alpha * K3 * sin(delta)^2; + Tl2B = q.* G_ + (1 -alpha)/alpha * xi .* D11 * sin(delta)^2; + Tl3B = -q.* H_ + (1 -alpha)/alpha * K4 * sin(delta)^2; + + Tl1C = - eta./R.^3 + Y0* cos(delta)^2 - alpha *(ones(4,1)*z./R.^3 * sin(delta) - 3*c_.* y_.* q./R.^5 - Y0* sin(delta)^2 + q.*Z0 * cos(delta) ); + Tl2C = (1 - alpha)* 2* xi.* P_ *sin(delta) - X11 + d_.^2.*X32 -alpha * c_ .*( (d_ -2*q*cos(delta)).*X32 -d_.*q.^2.*X53); + Tl3C = (1 -alpha)* (xi.* P_ * cos(delta) + y_.* d_.* X32) + alpha.* c_ .* ((y_ - 2 * q * sin(delta) ).* X32 + d_.*eta.*q.*X53) + alpha*xi.* Q_; +end % B3 + %%%%%%%%%%%% + %%% for u1A_, + Z_ = -z; + d = c - Z_; + p = y * cos(delta) + d * sin(delta); + + xi = [x;x;x-L;x-L]; % + eta = [p;p-W;p;p-W];% + + q = ones(4,1)*y * sin(delta) - ones(4,1)*d * cos(delta); + %alpha = (lambda + mu) / (lambda + 2* mu); + %alpha = 2/3; + Rsquare = xi.^2 + eta.^2 + q.^2; + R = sqrt(Rsquare); + y_ = eta * cos(delta) + q * sin(delta); + d_ = eta * sin(delta) - q * cos(delta); + %% + X11 = 1./(R .* (R + xi)); + X32 = (2 * R + xi )./ ( R.^3 .* ( R + xi ).^2 ); + %X53 = (8*R.^2 + 9*R.*xi + 3*xi.^2) ./ (R.^5 *( R + xi).^3 ); + Y11 = 1 ./ ( R.* ( R + eta ) ); + Y32 = (2 * R + eta ) ./ (R.^3 .* (R + eta).^2 ); + %%% + %%% Selecting a right root for theta is the most tricky problem + qsign = sign(q); + theta = atan2(xi .* eta, abs(q) .* R); + theta = qsign.* theta; + + X = sqrt( xi.^2 + q.^2); + if abs(cos(delta))< 0.000001 + I3 = 1/2 * ( eta ./ (R + d_) + y_.*q ./( (R + d_).^2 ) - log(R + eta) ); + I4 = 1/2 * ( xi.* y_ ./( (R + d_).^2) ); + else + I3 = 1/cos(delta)* y_ ./ ( R + d_ ) - 1 /cos(delta)^2 *( log(R + eta) - sin(delta)* log(R + d_)); + I4 = sin(delta)/cos(delta) * xi./(R + d_) + 2/(cos(delta)^2) * atan2(eta.*(X + q*cos(delta) )... + + X .* (R + X) * sin(delta), xi.* (R + X)* cos(delta)); + end + + %%% ki + E = sin(delta) ./ R - y_ .* q ./ R.^3; + F = d_ ./ R.^3 + xi.^2 .* Y32 * sin(delta); + G = 2 * X11 * sin(delta) - y_.* q.* X32; + H = d_ .* q .* X32 + xi .* q .* Y32 * sin(delta); + + % li + E_ = cos(delta)./R + d_ .* q ./ R.^3; + F_ = y_ ./ R.^3 + xi.^2 .* Y32 * cos(delta); + G_ = 2 * X11.* cos(delta) + d_.* q.* X32; + H_ = y_.* q.* X32 + xi.* q .* Y32 * cos(delta); + + if slip_str ~= 0 + %%%%%% strike-slip + %displacement + % u1A_ + Su1A_ = theta/2 + alpha / 2 * xi .* q .* Y11; + Su2A_ = alpha / 2 * q ./ R; + Su3A_ = (1 - alpha) / 2 * log( R + eta) - alpha / 2 * q.^2 .* Y11; + %%%%%%%%% for displacement gradient + % jA_ + Sj1A_ = -(1 -alpha)/2 *q.*Y11 - alpha/2*xi.^2.*q.*Y32; + Sj2A_ = - alpha/2 * xi.*q./R.^3; + Sj3A_ = (1 -alpha)/2 .* xi.*Y11 + alpha/2 * xi.*q.^2.*Y32; + % kA + Sk1A_ =(1 -alpha)/2 * xi.* Y11* sin(delta) + d_ / 2 .* X11 + alpha/2 * xi .* F; + Sk2A_ = alpha /2 * E; + Sk3A_ = (1 -alpha)/2 *( cos(delta)./R + q.* Y11* sin(delta) ) - alpha/2 * q .* F; + %lA + Sl1A_ = (1 -alpha)/2 * xi .* Y11 * cos(delta) + y_/2 .* X11 + alpha/2 * xi.* F_; + Sl2A_ = alpha/2 * E_; + Sl3A_ = - (1 - alpha)/2 * (sin(delta)./R - q.* Y11 * cos(delta)) - alpha/2 * q .* F_; + end % B4 +if slip_dip ~= 0 + %%%%% dip-slip + %%% displacement + % u1A_ + Du1A_ = alpha / 2 * q ./ R; + Du2A_ = theta/ 2 + alpha /2 * eta .* q .* X11; + Du3A_ = (1-alpha) /2 * log(R + xi) - alpha/2 * q.^2 .* X11; + %%% displacement gradient + % jA_ + Dj1A_ = -alpha/2 * xi .* q ./ R.^3; + Dj2A_ = - q/2 .* Y11 - alpha/2 * eta .* q ./ R.^3; + Dj3A_ = (1 - alpha)/2 * 1./ R + alpha/2 .* q.^2 ./ R.^3; + %kA + Dk1A_ = alpha / 2 .* E; + Dk2A_ = (1 -alpha) / 2 * d_ .* X11 + xi/ 2 .* Y11 * sin(delta) + alpha/2 * eta .* G; + Dk3A_ = (1 -alpha) / 2 * y_ .* X11 - alpha/2 .* q .* G; + %lA + Dl1A_ = alpha/2 * E_; + Dl2A_ = (1 - alpha)/2 .* y_ .* X11 + xi/2 .* Y11 * cos(delta) + alpha/2 * eta.* G_; + Dl3A_ = - (1 - alpha)/ 2 * d_ .* X11 - alpha /2 * q .* G_; +end % B5 +if tensile ~= 0 % B6 + %%% tensile for u1A_ + %%%%%%%%%%%%%% displacement + Tu1A_ = -(1 - alpha) / 2 * log(R + eta) - alpha / 2 * q.^2 .* Y11; + Tu2A_ = -(1 - alpha) / 2 * log(R + xi) - alpha / 2 * q.^2 .* X11; + Tu3A_ = theta / 2 - alpha / 2 * q .* (eta .* X11 + xi .* Y11); + %%%%%%%%% displacement gradient + %%%tensile + % jA_ + Tj1A_ = - (1- alpha)/2 * xi .* Y11 + alpha/2 * xi.*q.^2.* Y32; + Tj2A_ =-(1-alpha)/2 * 1./R + alpha/2 * q.^2 ./R.^3; + Tj3A_ = -(1 -alpha)/2 * q.* Y11 - alpha/2 *q.^3.*Y32; + %kA + Tk1A_ =-(1 - alpha)/2 * (cos(delta)./R + q.*Y11*sin(delta)) - alpha/2 * q.* F; + Tk2A_ =-(1 - alpha)/2 * y_.*X11 - alpha/2 * q .* G ; + Tk3A_ = (1 - alpha)/2 * (d_.*X11 + xi.* Y11 * sin(delta) ) + alpha /2 * q .* H; + %lA + Tl1A_ =(1 - alpha)/2 *( sin(delta)./R - q.* Y11 * cos(delta) ) - alpha/2 *q .* F_; + Tl2A_ = (1 - alpha)/2 * d_.* X11 - alpha/2 * q .* G_; + Tl3A_ =(1 - alpha)/2 * (y_ .* X11 + xi.* Y11 * cos(delta)) + alpha/2 * q .* H_; +end % B6 +if slip_str ~= 0 % B7 + %%%%%% strike-slip + %% displacement + Sux = 1 / (2 * pi) * slip_str * (Su1A - Su1A_ + Su1B + ones(4,1)*z.* Su1C ); + Suy = 1 / (2 * pi) * slip_str * ( (Su2A - Su2A_ + Su2B + ones(4,1)*z.* Su2C) * cos(delta) - (Su3A - Su3A_ + Su3B + ones(4,1)*z .* Su3C) * sin(delta) ); + Suz = 1 / (2 * pi) * slip_str * ( (Su2A - Su2A_ + Su2B - ones(4,1)*z.* Su2C) * sin(delta) + (Su3A - Su3A_ + Su3B - ones(4,1)*z .* Su3C) * cos(delta) ); + + % displacement gradients + Sduxdx = 1 / (2 * pi) * slip_str * (Sj1A - Sj1A_ + Sj1B + ones(4,1)*z.* Sj1C ); + Sduydx = 1 / (2 * pi) * slip_str * ( (Sj2A - Sj2A_ + Sj2B + ones(4,1)*z.* Sj2C) * cos(delta) - (Sj3A - Sj3A_ + Sj3B + ones(4,1)*z .* Sj3C) * sin(delta) ); + Sduzdx = 1 / (2 * pi) * slip_str * ( (Sj2A - Sj2A_ + Sj2B - ones(4,1)*z.* Sj2C) * sin(delta) + (Sj3A - Sj3A_ + Sj3B - ones(4,1)*z .* Sj3C) * cos(delta) ); + + Sduxdy = 1 / (2 * pi) * slip_str * (Sk1A - Sk1A_ + Sk1B + ones(4,1)*z.* Sk1C ); + Sduydy = 1 / (2 * pi) * slip_str * ( (Sk2A - Sk2A_ + Sk2B + ones(4,1)*z.* Sk2C) * cos(delta) - (Sk3A - Sk3A_ + Sk3B + ones(4,1)*z .* Sk3C) * sin(delta) ); + Sduzdy = 1 / (2 * pi) * slip_str * ( (Sk2A - Sk2A_ + Sk2B - ones(4,1)*z.* Sk2C) * sin(delta) + (Sk3A - Sk3A_ + Sk3B - ones(4,1)*z .* Sk3C) * cos(delta) ); + + Sduxdz = 1 / (2 * pi) * slip_str * ( Sl1A + Sl1A_ + Sl1B + Su1C + ones(4,1)*z.* Sl1C ); + Sduydz = 1 / (2 * pi) * slip_str * ( (Sl2A + Sl2A_ + Sl2B + Su2C + ones(4,1)*z.* Sl2C) * cos(delta) - (Sl3A + Sl3A_ + Sl3B + Su3C + ones(4,1)*z .* Sl3C) * sin(delta) ); + Sduzdz = 1 / (2 * pi) * slip_str * ( (Sl2A + Sl2A_ + Sl2B - Su2C - ones(4,1)*z.* Sl2C) * sin(delta) + (Sl3A + Sl3A_ + Sl3B - Su3C - ones(4,1)*z .* Sl3C) * cos(delta) ); +else % B7 + Sux = 0; Suy = 0; Suz = 0; + Sduxdx = 0; Sduydx = 0; Sduzdx = 0; + Sduxdy = 0; Sduydy = 0; Sduzdy = 0; + Sduxdz = 0; Sduydz = 0; Sduzdz = 0; +end + %%%%% dip-slip + %%% displacement +if slip_dip ~= 0 % B8 + Dux = 1 / (2 * pi) * slip_dip * (Du1A - Du1A_ + Du1B + ones(4,1)*z.* Du1C ); + Duy = 1 / (2 * pi) * slip_dip * ( (Du2A - Du2A_ + Du2B + ones(4,1)*z.* Du2C) * cos(delta) - (Du3A - Du3A_ + Du3B + ones(4,1)*z .* Du3C) * sin(delta) ); + Duz = 1 / (2 * pi) * slip_dip * ( (Du2A - Du2A_ + Du2B - ones(4,1)*z.* Du2C) * sin(delta) + (Du3A - Du3A_ + Du3B - ones(4,1)*z .* Du3C) * cos(delta) ); + + % displacement gradients + Dduxdx = 1 / (2 * pi) * slip_dip * (Dj1A - Dj1A_ + Dj1B + ones(4,1)*z.* Dj1C ); + Dduydx = 1 / (2 * pi) * slip_dip * ( (Dj2A - Dj2A_ + Dj2B + ones(4,1)*z.* Dj2C) * cos(delta) - (Dj3A - Dj3A_ + Dj3B + ones(4,1)*z .* Dj3C) * sin(delta) ); + Dduzdx = 1 / (2 * pi) * slip_dip * ( (Dj2A - Dj2A_ + Dj2B - ones(4,1)*z.* Dj2C) * sin(delta) + (Dj3A - Dj3A_ + Dj3B - ones(4,1)*z .* Dj3C) * cos(delta) ); + + Dduxdy = 1 / (2 * pi) * slip_dip * (Dk1A - Dk1A_ + Dk1B + ones(4,1)*z.* Dk1C ); + Dduydy = 1 / (2 * pi) * slip_dip * ( (Dk2A - Dk2A_ + Dk2B + ones(4,1)*z.* Dk2C) * cos(delta) - (Dk3A - Dk3A_ + Dk3B + ones(4,1)*z .* Dk3C) * sin(delta) ); + Dduzdy = 1 / (2 * pi) * slip_dip * ( (Dk2A - Dk2A_ + Dk2B - ones(4,1)*z.* Dk2C) * sin(delta) + (Dk3A - Dk3A_ + Dk3B - ones(4,1)*z .* Dk3C) * cos(delta) ); + + Dduxdz = 1 / (2 * pi) * slip_dip * ( Dl1A + Dl1A_ + Dl1B + Du1C + ones(4,1)*z.* Dl1C ); + Dduydz = 1 / (2 * pi) * slip_dip * ( (Dl2A + Dl2A_ + Dl2B + Du2C + ones(4,1)*z.* Dl2C) * cos(delta) - (Dl3A + Dl3A_ + Dl3B + Du3C + ones(4,1)*z .* Dl3C) * sin(delta) ); + Dduzdz = 1 / (2 * pi) * slip_dip * ( (Dl2A + Dl2A_ + Dl2B - Du2C - ones(4,1)*z.* Dl2C) * sin(delta) + (Dl3A + Dl3A_ + Dl3B - Du3C - ones(4,1)*z .* Dl3C) * cos(delta) ); +else % B8 + Dux = 0; Duy = 0; Duz = 0; + Dduxdx = 0; Dduydx = 0; Dduzdx = 0; + Dduxdy = 0; Dduydy = 0; Dduzdy = 0; + Dduxdz = 0; Dduydz = 0; Dduzdz = 0; +end % B8 + if tensile ~= 0 + % tensile + %%%%%%%%%%% displacement + Tux = 1 / (2 * pi) * tensile * (Tu1A - Tu1A_ + Tu1B + ones(4,1)*z.* Tu1C ); + Tuy = 1 / (2 * pi) * tensile * ( (Tu2A - Tu2A_ + Tu2B + ones(4,1)*z.* Tu2C) * cos(delta) - (Tu3A - Tu3A_ + Tu3B + ones(4,1)*z .* Tu3C) * sin(delta) ); + Tuz = 1 / (2 * pi) * tensile * ( (Tu2A - Tu2A_ + Tu2B - ones(4,1)*z.* Tu2C) * sin(delta) + (Tu3A - Tu3A_ + Tu3B - ones(4,1)*z .* Tu3C) * cos(delta) ); + + %%%%%%%%%% displacement gradients + Tduxdx = 1 / (2 * pi) * tensile * (Tj1A - Tj1A_ + Tj1B + ones(4,1)*z.* Tj1C ); + Tduydx = 1 / (2 * pi) * tensile * ( (Tj2A - Tj2A_ + Tj2B + ones(4,1)*z.* Tj2C) * cos(delta) - (Tj3A - Tj3A_ + Tj3B + ones(4,1)*z .* Tj3C) * sin(delta) ); + Tduzdx = 1 / (2 * pi) * tensile * ( (Tj2A - Tj2A_ + Tj2B - ones(4,1)*z.* Tj2C) * sin(delta) + (Tj3A - Tj3A_ + Tj3B - ones(4,1)*z .* Tj3C) * cos(delta) ); + + Tduxdy = 1 / (2 * pi) * tensile * (Tk1A - Tk1A_ + Tk1B + ones(4,1)*z.* Tk1C ); + Tduydy = 1 / (2 * pi) * tensile * ( (Tk2A - Tk2A_ + Tk2B + ones(4,1)*z.* Tk2C) * cos(delta) - (Tk3A - Tk3A_ + Tk3B + ones(4,1)*z .* Tk3C) * sin(delta) ); + Tduzdy = 1 / (2 * pi) * tensile * ( (Tk2A - Tk2A_ + Tk2B - ones(4,1)*z.* Tk2C) * sin(delta) + (Tk3A - Tk3A_ + Tk3B - ones(4,1)*z .* Tk3C) * cos(delta) ); + + Tduxdz = 1 / (2 * pi) * tensile * ( Tl1A + Tl1A_ + Tl1B + Tu1C + ones(4,1)*z.* Tl1C ); + Tduydz = 1 / (2 * pi) * tensile * ( (Tl2A + Tl2A_ + Tl2B + Tu2C + ones(4,1)*z.* Tl2C) * cos(delta) - (Tl3A + Tl3A_ + Tl3B + Tu3C + ones(4,1)*z .* Tl3C) * sin(delta) ); + Tduzdz = 1 / (2 * pi) * tensile * ( (Tl2A + Tl2A_ + Tl2B - Tu2C - ones(4,1)*z.* Tl2C) * sin(delta) + (Tl3A + Tl3A_ + Tl3B - Tu3C - ones(4,1)*z .* Tl3C) * cos(delta) ); + else % B8 + Tux = 0; Tuy = 0; Tuz = 0; + Tduxdx = 0; Tduydx = 0; Tduzdx = 0; + Tduxdy = 0; Tduydy = 0; Tduzdy = 0; + Tduxdz = 0; Tduydz = 0; Tduzdz = 0; + end % B8 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + factor =[ones(1,size(xi,2)); -ones(1,size(xi,2)); -ones(1,size(xi,2)); ones(1,size(xi,2))]; + G1 = sum(factor.* (Sux + Dux + Tux)); + G2 = sum(factor.* (Suy + Duy + Tuy)); + G3 = sum(factor.* (Suz + Duz + Tuz)); + + Dg11 = sum(factor.*(Sduxdx + Dduxdx + Tduxdx)); + Dg12 = sum(factor.*(Sduxdy + Dduxdy + Tduxdy)); + Dg13 = sum(factor.*(Sduxdz + Dduxdz + Tduxdz)); + + Dg21 = sum(factor.*(Sduydx + Dduydx + Tduydx)); + Dg22 = sum(factor.*(Sduydy + Dduydy + Tduydy)); + Dg23 = sum(factor.*(Sduydz + Dduydz + Tduydz)); + + Dg31 = sum(factor.*(Sduzdx + Dduzdx + Tduzdx)); + Dg32 = sum(factor.*(Sduzdy + Dduzdy + Tduzdy)); + Dg33 = sum(factor.*(Sduzdz + Dduzdz + Tduzdz)); + +%%%%%%%%%%%%%%%%%%%% +% coordinate transformation +%Ux_y_ =[cos(angle_Str), -sin(angle_Str); sin(angle_Str),cos(angle_Str)] * U_; +Gx = cos(angle_Str)*(-G2) - sin(angle_Str)*G1; +Gy = sin(angle_Str)*(-G2) + cos(angle_Str)*G1; +Gz = G3; + +displacement=[Gx;Gy;Gz]; +%tempGrad1 = [Dg11,Dg12,Dg13;Dg21,Dg22,Dg23;Dg31,Dg32,Dg33] +Dg11_ = Dg22; +Dg12_ = -Dg21; +Dg13_ = -Dg23; + +Dg21_ = -Dg12; +Dg22_ = Dg11; +Dg23_ = Dg13; + +Dg31_ = -Dg32; +Dg32_ = Dg31; +Dg33_ = Dg33; + +%tempGrad2 = [Dg11_, Dg12_, Dg13_;Dg21_, Dg22_, Dg23_;Dg31_,Dg32_,Dg33_] + +Dgxx = (cos(angle_Str)*Dg11_ - sin(angle_Str)*Dg21_) * cos(angle_Str)... + + (cos(angle_Str)* Dg12_ - sin(angle_Str)*Dg22_ )* (-sin(angle_Str)); +Dgyx = (sin(angle_Str)*Dg11_ + cos(angle_Str)*Dg21_ ) * ( cos(angle_Str))... + - (sin(angle_Str)*Dg12_ + cos(angle_Str)*Dg22_ ) * sin(angle_Str); +Dgzx = Dg31_ * cos(angle_Str) - Dg32_ * sin(angle_Str); + +Dgxy = (cos(angle_Str)*Dg11_ - sin(angle_Str)*Dg21_) * sin(angle_Str)... + + (cos(angle_Str) * Dg12_ - sin(angle_Str) * Dg22_) * (cos(angle_Str)); +Dgyy = ( sin(angle_Str)*Dg11_ + cos(angle_Str)*Dg21_) * (sin(angle_Str))... + + (sin(angle_Str)*Dg12_ + cos(angle_Str)*Dg22_) * cos(angle_Str); +Dgzy = sin(angle_Str) *Dg31_ + cos(angle_Str) * Dg32_; + +Dgxz = cos(angle_Str)*Dg13_ - sin(angle_Str)* Dg23_; +Dgyz = sin(angle_Str)* Dg13_ + cos(angle_Str)* Dg23_ ; +Dgzz = Dg33_; + +gradient =[ Dgxx; Dgxy;Dgxz; Dgyx;Dgyy;Dgyz; Dgzx; Dgzy;Dgzz]; + +Ex = Dgxx; +Ey = Dgyy; +Ez = Dgzz; +Exy = 1/2*(Dgyx + Dgxy); +Eyz = 1/2*(Dgyz + Dgzy); +Ezx = 1/2*(Dgzx + Dgxz); + +Sx = youngs/((1 + nu)*(1 -2*nu))*(Ex + nu *(Ey + Ez - Ex)); +Sy = youngs/((1 + nu)*(1 -2*nu))*(Ey + nu *(Ex + Ez - Ey)); +Sz = youngs/((1 + nu)*(1 -2*nu))*(Ez + nu *(Ey + Ex - Ez)); +Sxy = 2*Gshear*Exy; +Syz = 2*Gshear*Eyz; +Szx = 2*Gshear*Ezx; + +Stress =[ Sx; Sxy; Szx; Sy; Syz; Sz]; + +else % A1 + if 1 == isequal(Z,-abs(Z))% A1 + fprintf('warning: physically impossible') + else + fprintf('warning: All z should be negtive.') + end + displacement = nan; + gradient = nan; + Stress = nan; +end % A1 \ No newline at end of file diff --git a/tools/error_ellipse.m b/tools/error_ellipse.m new file mode 100755 index 0000000..da49a53 --- /dev/null +++ b/tools/error_ellipse.m @@ -0,0 +1,278 @@ +function h=error_ellipse(varargin) +% ERROR_ELLIPSE - plot an error ellipse, or ellipsoid, defining confidence region +% ERROR_ELLIPSE(C22) - Given a 2x2 covariance matrix, plot the +% associated error ellipse, at the origin. It returns a graphics handle +% of the ellipse that was drawn. +% +% ERROR_ELLIPSE(C33) - Given a 3x3 covariance matrix, plot the +% associated error ellipsoid, at the origin, as well as its projections +% onto the three axes. Returns a vector of 4 graphics handles, for the +% three ellipses (in the X-Y, Y-Z, and Z-X planes, respectively) and for +% the ellipsoid. +% +% ERROR_ELLIPSE(C,MU) - Plot the ellipse, or ellipsoid, centered at MU, +% a vector whose length should match that of C (which is 2x2 or 3x3). +% +% ERROR_ELLIPSE(...,'Property1',Value1,'Name2',Value2,...) sets the +% values of specified properties, including: +% 'C' - Alternate method of specifying the covariance matrix +% 'mu' - Alternate method of specifying the ellipse (-oid) center +% 'conf' - A value betwen 0 and 1 specifying the confidence interval. +% the default is 0.5 which is the 50% error ellipse. +% 'scale' - Allow the plot the be scaled to difference units. +% 'style' - A plotting style used to format ellipses. +% 'clip' - specifies a clipping radius. Portions of the ellipse, -oid, +% outside the radius will not be shown. +% +% NOTES: C must be positive definite for this function to work properly. + +default_properties = struct(... + 'C', [], ... % The covaraince matrix (required) + 'mu', [], ... % Center of ellipse (optional) + 'conf', 0.5, ... % Percent confidence/100 + 'scale', 1, ... % Scale factor, e.g. 1e-3 to plot m as km + 'style', '', ... % Plot style + 'clip', inf); % Clipping radius + +if length(varargin) >= 1 & isnumeric(varargin{1}) + default_properties.C = varargin{1}; + varargin(1) = []; +end + +if length(varargin) >= 1 & isnumeric(varargin{1}) + default_properties.mu = varargin{1}; + varargin(1) = []; +end + +if length(varargin) >= 1 & isnumeric(varargin{1}) + default_properties.conf = varargin{1}; + varargin(1) = []; +end + +if length(varargin) >= 1 & isnumeric(varargin{1}) + default_properties.scale = varargin{1}; + varargin(1) = []; +end + +if length(varargin) >= 1 & ~ischar(varargin{1}) + error('Invalid parameter/value pair arguments.') +end + +prop = getopt(default_properties, varargin{:}); +C = prop.C; + +if isempty(prop.mu) + mu = zeros(length(C),1); +else + mu = prop.mu; +end + +conf = prop.conf; +scale = prop.scale; +style = prop.style; + +if conf <= 0 | conf >= 1 + error('conf parameter must be in range 0 to 1, exclusive') +end + +[r,c] = size(C); +if r ~= c | (r ~= 2 & r ~= 3) + error(['Don''t know what to do with ',num2str(r),'x',num2str(c),' matrix']) +end + +x0=mu(1); +y0=mu(2); + +% Compute quantile for the desired percentile +k = sqrt(qchisq(conf,r)); % r is the number of dimensions (degrees of freedom) + +hold_state = get(gca,'nextplot'); + +if r==3 & c==3 + z0=mu(3); + + % Make the matrix has positive eigenvalues - else it's not a valid covariance matrix! + if any(eig(C) <=0) + error('The covariance matrix must be positive definite (it has non-positive eigenvalues)') + end + + % C is 3x3; extract the 2x2 matricies, and plot the associated error + % ellipses. They are drawn in space, around the ellipsoid; it may be + % preferable to draw them on the axes. + Cxy = C(1:2,1:2); + Cyz = C(2:3,2:3); + Czx = C([3 1],[3 1]); + + [x,y,z] = getpoints(Cxy,prop.clip); + h1=plot3(x0+k*x,y0+k*y,z0+k*z,prop.style);hold on + [y,z,x] = getpoints(Cyz,prop.clip); + h2=plot3(x0+k*x,y0+k*y,z0+k*z,prop.style);hold on + [z,x,y] = getpoints(Czx,prop.clip); + h3=plot3(x0+k*x,y0+k*y,z0+k*z,prop.style);hold on + + + [eigvec,eigval] = eig(C); + + [X,Y,Z] = ellipsoid(0,0,0,1,1,1); + XYZ = [X(:),Y(:),Z(:)]*sqrt(eigval)*eigvec'; + + X(:) = scale*(k*XYZ(:,1)+x0); + Y(:) = scale*(k*XYZ(:,2)+y0); + Z(:) = scale*(k*XYZ(:,3)+z0); + h4=surf(X,Y,Z); + colormap gray + alpha(0.3) + camlight + if nargout + h=[h1 h2 h3 h4]; + end +elseif r==2 & c==2 + % Make the matrix has positive eigenvalues - else it's not a valid covariance matrix! + if any(eig(C) <=0) + error('The covariance matrix must be positive definite (it has non-positive eigenvalues)') + end + + [x,y,z] = getpoints(C,prop.clip); + h1=plot(scale*(x0+k*x),scale*(y0+k*y),prop.style); + set(h1,'zdata',z+1) + if nargout + h=h1; + end +else + error('C (covaraince matrix) must be specified as a 2x2 or 3x3 matrix)') +end +%axis equal + +set(gca,'nextplot',hold_state); + +%--------------------------------------------------------------- +% getpoints - Generate x and y points that define an ellipse, given a 2x2 +% covariance matrix, C. z, if requested, is all zeros with same shape as +% x and y. +function [x,y,z] = getpoints(C,clipping_radius) + +n=100; % Number of points around ellipse +p=0:pi/n:2*pi; % angles around a circle + +[eigvec,eigval] = eig(C); % Compute eigen-stuff +xy = [cos(p'),sin(p')] * sqrt(eigval) * eigvec'; % Transformation +x = xy(:,1); +y = xy(:,2); +z = zeros(size(x)); + +% Clip data to a bounding radius +if nargin >= 2 + r = sqrt(sum(xy.^2,2)); % Euclidian distance (distance from center) + x(r > clipping_radius) = nan; + y(r > clipping_radius) = nan; + z(r > clipping_radius) = nan; +end + +%--------------------------------------------------------------- +function x=qchisq(P,n) +% QCHISQ(P,N) - quantile of the chi-square distribution. +if nargin<2 + n=1; +end + +s0 = P==0; +s1 = P==1; +s = P>0 & P<1; +x = 0.5*ones(size(P)); +x(s0) = -inf; +x(s1) = inf; +x(~(s0|s1|s))=nan; + +for ii=1:14 + dx = -(pchisq(x(s),n)-P(s))./dchisq(x(s),n); + x(s) = x(s)+dx; + if all(abs(dx) < 1e-6) + break; + end +end + +%--------------------------------------------------------------- +function F=pchisq(x,n) +% PCHISQ(X,N) - Probability function of the chi-square distribution. +if nargin<2 + n=1; +end +F=zeros(size(x)); + +if rem(n,2) == 0 + s = x>0; + k = 0; + for jj = 0:n/2-1; + k = k + (x(s)/2).^jj/factorial(jj); + end + F(s) = 1-exp(-x(s)/2).*k; +else + for ii=1:numel(x) + if x(ii) > 0 + F(ii) = quadl(@dchisq,0,x(ii),1e-6,0,n); + else + F(ii) = 0; + end + end +end + +%--------------------------------------------------------------- +function f=dchisq(x,n) +% DCHISQ(X,N) - Density function of the chi-square distribution. +if nargin<2 + n=1; +end +f=zeros(size(x)); +s = x>=0; +f(s) = x(s).^(n/2-1).*exp(-x(s)/2)./(2^(n/2)*gamma(n/2)); + +%--------------------------------------------------------------- +function properties = getopt(properties,varargin) +%GETOPT - Process paired optional arguments as 'prop1',val1,'prop2',val2,... +% +% getopt(properties,varargin) returns a modified properties structure, +% given an initial properties structure, and a list of paired arguments. +% Each argumnet pair should be of the form property_name,val where +% property_name is the name of one of the field in properties, and val is +% the value to be assigned to that structure field. +% +% No validation of the values is performed. +% +% EXAMPLE: +% properties = struct('zoom',1.0,'aspect',1.0,'gamma',1.0,'file',[],'bg',[]); +% properties = getopt(properties,'aspect',0.76,'file','mydata.dat') +% would return: +% properties = +% zoom: 1 +% aspect: 0.7600 +% gamma: 1 +% file: 'mydata.dat' +% bg: [] +% +% Typical usage in a function: +% properties = getopt(properties,varargin{:}) + +% Process the properties (optional input arguments) +prop_names = fieldnames(properties); +TargetField = []; +for ii=1:length(varargin) + arg = varargin{ii}; + if isempty(TargetField) + if ~ischar(arg) + error('Propery names must be character strings'); + end + f = find(strcmp(prop_names, arg)); + if length(f) == 0 + error('%s ',['invalid property ''',arg,'''; must be one of:'],prop_names{:}); + end + TargetField = arg; + else + % properties.(TargetField) = arg; % Ver 6.5 and later only + properties = setfield(properties, TargetField, arg); % Ver 6.1 friendly + TargetField = ''; + end +end +if ~isempty(TargetField) + error('Property names and values must be specified in pairs.'); +end + diff --git a/tools/find_triangles_data.asv b/tools/find_triangles_data.asv new file mode 100755 index 0000000..e4c960d --- /dev/null +++ b/tools/find_triangles_data.asv @@ -0,0 +1,32 @@ + +data_tri = zeros(size(xy_gps,1),1); +num_data_tri = zeros(size(tri,1),1); +for k=1:size(tri,1) + + IN = inpolygon(xy_gps(:,1),xy_gps(:,2),nodes(tri(k,:),1),nodes(tri(k,:),2)); + + data_tri(IN) = k; + num_data_tri(k) = sum(IN); + +end + +figure; +patch('faces',tri(:,1:3),'vertices',nodes, ... +'facecolor','w', ... +'edgecolor',[.6,.6,.6]) ; +hold on; +colorbar +colormap(jet) + +for k=1:size(tri,1) + if num_data_tri(k)~=0 + fill(nodes(tri(k,:),1),nodes(tri(k,:),2),num_data_tri(k)) + end +end +title('number of data points in each triangle') +set(gca,'fontsize',15) + +axis equal + + + diff --git a/tools/find_triangles_data.m b/tools/find_triangles_data.m new file mode 100755 index 0000000..e4c960d --- /dev/null +++ b/tools/find_triangles_data.m @@ -0,0 +1,32 @@ + +data_tri = zeros(size(xy_gps,1),1); +num_data_tri = zeros(size(tri,1),1); +for k=1:size(tri,1) + + IN = inpolygon(xy_gps(:,1),xy_gps(:,2),nodes(tri(k,:),1),nodes(tri(k,:),2)); + + data_tri(IN) = k; + num_data_tri(k) = sum(IN); + +end + +figure; +patch('faces',tri(:,1:3),'vertices',nodes, ... +'facecolor','w', ... +'edgecolor',[.6,.6,.6]) ; +hold on; +colorbar +colormap(jet) + +for k=1:size(tri,1) + if num_data_tri(k)~=0 + fill(nodes(tri(k,:),1),nodes(tri(k,:),2),num_data_tri(k)) + end +end +title('number of data points in each triangle') +set(gca,'fontsize',15) + +axis equal + + + diff --git a/tools/llh2local.m b/tools/llh2local.m new file mode 100755 index 0000000..4ac1586 --- /dev/null +++ b/tools/llh2local.m @@ -0,0 +1,65 @@ +function xy=llh2local(llh,origin) +%llh2local xy=llh2local(llh,origin) +% +%Converts from longitude and latitude to local coorindates +%given an origin. llh (lon; lat; height) and origin should +%be in decimal degrees. Note that heights are ignored and +%that xy is in km. + +%------------------------------------------------------------- +% Record of revisions: +% +% Date Programmer Description of Change +% ==== ========== ===================== +% +% Sept 7, 2000 Peter Cervelli Original Code +% Oct 20, 2000 Jessica Murray Changed name from DM_llh2local to +% llh2local for use with non-DM functions; +% Added to help message to clarify order +% of 'llh' (i.e., lon, lat, height). +% Dec. 6, 2000 Jessica Murray Clarified help to show that llh +% is a column vector +% +% +%------------------------------------------------------------- + +%Set ellipsoid constants (WGS84) + + a=6378137.0; + e=0.08209443794970; + +%Convert to radians + + llh=llh*pi/180; + origin=origin*pi/180; + +%Do the projection + + z=llh(2,:)~=0; + + dlambda=llh(1,z)-origin(1); + + M=a*((1-e^2/4-3*e^4/64-5*e^6/256)*llh(2,z) - ... + (3*e^2/8+3*e^4/32+45*e^6/1024)*sin(2*llh(2,z)) + ... + (15*e^4/256 +45*e^6/1024)*sin(4*llh(2,z)) - ... + (35*e^6/3072)*sin(6*llh(2,z))); + + M0=a*((1-e^2/4-3*e^4/64-5*e^6/256)*origin(2) - ... + (3*e^2/8+3*e^4/32+45*e^6/1024)*sin(2*origin(2)) + ... + (15*e^4/256 +45*e^6/1024)*sin(4*origin(2)) - ... + (35*e^6/3072)*sin(6*origin(2))); + + N=a./sqrt(1-e^2*sin(llh(2,z)).^2); + E=dlambda.*sin(llh(2,z)); + + xy(1,z)=N.*cot(llh(2,z)).*sin(E); + xy(2,z)=M-M0+N.*cot(llh(2,z)).*(1-cos(E)); + +%Handle special case of latitude = 0 + + xy(1,~z)=a*dlambda(~z); + xy(2,~z)=-M0; + +%Convert to km + + xy=xy/1000; \ No newline at end of file diff --git a/tools/local2llh.m b/tools/local2llh.m new file mode 100755 index 0000000..a44b79e --- /dev/null +++ b/tools/local2llh.m @@ -0,0 +1,90 @@ +function llh=local2llh(xy,origin) +%local2llh llh=local2llh(xy,origin) +% +%Converts from local coorindates to longitude and latitude +%given the [lon, lat] of an origin. 'origin' should be in +%decimal degrees. Note that heights are ignored and that +%xy is in km. Output is [lon, lat, height] in decimal +%degrees. This is an iterative solution for the inverse of +%a polyconic projection. + +%------------------------------------------------------------- +% Record of revisions: +% +% Date Programmer Description of Change +% ==== ========== ===================== +% +% Aug 23, 2001 Jessica Murray Clarification to help. +% +% Apr 4, 2001 Peter Cervelli Added failsafe to avoid +% infinite loop because of +% covergence failure. +% Sep 7, 2000 Peter Cervelli Original Code +% +%------------------------------------------------------------- + +%Set ellipsoid constants (WGS84) + + a=6378137.0; + e=0.08209443794970; + +%Convert to radians / meters + + xy=xy*1000; + origin=origin*pi/180; + +%Iterate to perform inverse projection + + M0=a*((1-e^2/4-3*e^4/64-5*e^6/256)*origin(2) - ... + (3*e^2/8+3*e^4/32+45*e^6/1024)*sin(2*origin(2)) + ... + (15*e^4/256 +45*e^6/1024)*sin(4*origin(2)) - ... + (35*e^6/3072)*sin(6*origin(2))); + + z=xy(2,:)~=-M0; + + A=(M0+xy(2,z))/a; + B=xy(1,z).^2./a^2+A.^2; + + llh(2,z)=A; + + delta=Inf; + + c=0; + + while max(abs(delta))>1e-8 + + C=sqrt((1-e^2*sin(llh(2,z)).^2)).*tan(llh(2,z)); + + M=a*((1-e^2/4-3*e^4/64-5*e^6/256)*llh(2,z) - ... + (3*e^2/8+3*e^4/32+45*e^6/1024)*sin(2*llh(2,z)) + ... + (15*e^4/256 +45*e^6/1024)*sin(4*llh(2,z)) - ... + (35*e^6/3072)*sin(6*llh(2,z))); + + Mn=1-e^2/4-3*e^4/64-5*e^6/256 - ... + -2*(3*e^2/8+3*e^4/32+45*e^6/1024)*cos(2*llh(2,z)) + ... + 4*(15*e^4/256 +45*e^6/1024)*cos(4*llh(2,z)) + ... + -6*(35*e^6/3072)*cos(6*llh(2,z)); + + Ma=M/a; + + delta=-(A.*(C.*Ma+1)-Ma-0.5*(Ma.^2+B).*C)./ ... + (e^2*sin(2*llh(2,z)).*(Ma.^2+B-2*A.*Ma)./(4*C)+(A-Ma).*(C.*Mn-2./sin(2*llh(2,z)))-Mn); + + llh(2,z)=llh(2,z)+delta; + + c=c+1; + if c>100 + error('Convergence failure.') + end + end + + llh(1,z)=(asin(xy(1,z).*C/a))./sin(llh(2,z))+origin(1); + +%Handle special case of latitude = 0 + + llh(1,~z)=xy(1,~z)/a+origin(1); + llh(2,~z)=0; + +%Convert back to decimal degrees + + llh=llh*180/pi; \ No newline at end of file diff --git a/tools/make_dispG.m b/tools/make_dispG.m new file mode 100755 index 0000000..cec2b5c --- /dev/null +++ b/tools/make_dispG.m @@ -0,0 +1,33 @@ +function [Geast,Gnorth,GExx,GExy,GEyy] = make_dispG(pm,xystats) + +xloc=[xystats';zeros(1,size(xystats',2))]; + +npatches=size(pm,1); + +Geast = zeros(size(xystats,1),npatches); +Gnorth = zeros(size(xystats,1),npatches); +GExx = zeros(size(xystats,1),npatches); +GExy = zeros(size(xystats,1),npatches); +GEyy = zeros(size(xystats,1),npatches); + + +for k=1:npatches + m1=[pm(k,:) -1 0 0]'; + + [U1,D,S,flag]=disloc3d(m1,xloc,1,.25); + + Geast(:,k)=U1(1,:)'; + Gnorth(:,k)=U1(2,:)'; + + + Exx = D(1,:)'; + Exy = .5*(D(2,:)+D(4,:))'; + Eyy = D(5,:)'; + + GExx(:,k) = Exx; + GExy(:,k) = Exy; + GEyy(:,k) = Eyy; + + +end + diff --git a/tools/make_dispG_piecewise.m b/tools/make_dispG_piecewise.m new file mode 100755 index 0000000..b3b7661 --- /dev/null +++ b/tools/make_dispG_piecewise.m @@ -0,0 +1,84 @@ +function [G1east,G2east,G1north,G2north,G1Exx,G2Exx,G1Exy,G2Exy,G1Eyy,G2Eyy] = make_dispG_piecewise(pm,xystats,refine) + + +xloc=[xystats';zeros(1,size(xystats',2))]; + +npatches=size(pm,1); + +G1east = zeros(size(xystats,1),npatches); +G2east = zeros(size(xystats,1),npatches); +G1north = zeros(size(xystats,1),npatches); +G2north = zeros(size(xystats,1),npatches); +G1Exx = zeros(size(xystats,1),npatches); +G2Exx = zeros(size(xystats,1),npatches); +G1Exy = zeros(size(xystats,1),npatches); +G2Exy = zeros(size(xystats,1),npatches); +G1Eyy = zeros(size(xystats,1),npatches); +G2Eyy = zeros(size(xystats,1),npatches); + + +for k=1:npatches + + %divide into small segments + nhe = ceil(pm(k,1)/refine); + pf = patchfault(pm(k,:),nhe,1); + + east1 = zeros(size(xystats,1),1); + east2 = zeros(size(xystats,1),1); + north1 = zeros(size(xystats,1),1); + north2 = zeros(size(xystats,1),1); + Exx1 = zeros(size(xystats,1),1); + Exx2 = zeros(size(xystats,1),1); + Exy1 = zeros(size(xystats,1),1); + Exy2 = zeros(size(xystats,1),1); + Eyy1 = zeros(size(xystats,1),1); + Eyy2 = zeros(size(xystats,1),1); + + for j=1:nhe + + + m1=[pf(j,:) -1 0 0]'; + + [U1,D,S]=disloc3d(m1,xloc,1,.25); + + east1= east1 + U1(1,:)'; + north1 = north1 + U1(2,:)'; + + east2= east2 + (j-1)/nhe*U1(1,:)'; + north2 = north2 + (j-1)/nhe*U1(2,:)'; + + + Exx = D(1,:)'; + Exy = .5*(D(2,:)+D(4,:))'; + Eyy = D(5,:)'; + + Exx1 = Exx1 + Exx; + Exy1 = Exy1 + Exy; + Eyy1 = Eyy1 + Eyy; + + + Exx2 = Exx2 + (j-1)/nhe*Exx; + Exy2 = Exy2 + (j-1)/nhe*Exy; + Eyy2 = Eyy2 + (j-1)/nhe*Eyy; + + + end + + G1east(:,k) = east1; + G2east(:,k) = east2; + + G1north(:,k) = north1; + G2north(:,k) = north2; + + G1Exx(:,k) = Exx1; + G1Exy(:,k) = Exy1; + G1Eyy(:,k) = Eyy1; + + G2Exx(:,k) = Exx2; + G2Exy(:,k) = Exy2; + G2Eyy(:,k) = Eyy2; + + + disp(['Completed ' num2str(k/npatches*100) '% of creeping fault Greens function calculations']) +end + diff --git a/tools/make_patches_creep.m b/tools/make_patches_creep.m new file mode 100755 index 0000000..abb22e1 --- /dev/null +++ b/tools/make_patches_creep.m @@ -0,0 +1,65 @@ + + +%convert lat,long to x,y +x=creeping_faults(:,2:5); +llhx = x(:,1:2); +x1 = llh2local(llhx', fliplr(origin))'; +llhx = x(:,3:4); +x2 = llh2local(llhx', fliplr(origin))'; +SegEnds=[x1 x2]; + +rempatch = SegEnds(:,1)maxx | SegEnds(:,2)maxy; +rempatch = rempatch | SegEnds(:,3)maxx | SegEnds(:,4)maxy; +SegEnds(rempatch,:) = []; +creeping_faults(rempatch,:) = []; + +PatchEnds = []; +PatchCreepRates = []; +Patch_id = []; +for k=1:size(SegEnds,1) + + patchlength = sqrt((SegEnds(k,3)-SegEnds(k,1)).^2 + (SegEnds(k,4)-SegEnds(k,2)).^2); + numpatch = ceil(patchlength/patchL); + + xs = linspace(SegEnds(k,1),SegEnds(k,3),numpatch+1); + ys = linspace(SegEnds(k,2),SegEnds(k,4),numpatch+1); + + PatchEnds = [PatchEnds; [xs(1:end-1)' ys(1:end-1)' xs(2:end)' ys(2:end)']]; + PatchCreepRates = [ PatchCreepRates; creeping_faults(k,6)*ones(numpatch,1)]; + Patch_id = [Patch_id; creeping_faults(k,6)*ones(numpatch,1)]; + +end + + +segends1 = PatchEnds(:,1:2); +segends2 = PatchEnds(:,3:4); +node_creep = zeros(size(segends1,1)+size(segends2,1),2); + +node_creep(1:2:end) = segends1; +node_creep(2:2:end) = segends2; + +edge_creep = [(1:2:size(node_creep,1))' (2:2:size(node_creep,1))']; + + + +%need to remove repeated nodes because +%meshing algorithm doesn't like repeats +node_creep = round(node_creep,4); +[C,ia,ic] = unique(node_creep,'rows','stable'); +node_creep = C; + + +%need to renumber nodes values in edges to be consistent +%with unique node values +new_edge = edge_creep; +for k=1:length(ic) + new_edge(edge_creep==k)=ic(k); +end + +edge_creep = new_edge; + + + + + + \ No newline at end of file diff --git a/tools/make_triangular_patch_stuff.m b/tools/make_triangular_patch_stuff.m new file mode 100755 index 0000000..8fdb075 --- /dev/null +++ b/tools/make_triangular_patch_stuff.m @@ -0,0 +1,59 @@ +function patch_stuff=make_triangular_patch_stuff(tri,p) + +strikevec_faces=[]; +strike_faces=[]; +dipvec_faces=[]; +dip_faces=[]; +strike_faces=[]; +dip_faces=[]; +centroids_faces=[]; +normal_faces=[]; +area_faces=[]; + + +for j=1:size(tri,1) + + temp1{1}=p; + temp2{1}=tri(j,:); + + %get strike and dip and normal vectors and area for each triangular patch + vec1=p(temp2{1}(1),:)-p(temp2{1}(2),:); + vec2=p(temp2{1}(3),:)-p(temp2{1}(2),:); + cross_face=cross(vec1,vec2); + veclength=sqrt(cross_face(1).^2+cross_face(2).^2+cross_face(3).^2); + normal=cross_face/veclength; + strikevec=[1 -normal(1)/normal(2) 0]/norm([1 -normal(1)/normal(2) 0]); + dipvec=cross(normal,strikevec); + + %change signs + if dipvec(3)>0 + dipvec=-dipvec; + end + if normal(3)<0 + normal=-normal; + end + strikevec=cross(normal,dipvec); + + + + normal_faces=[normal_faces;normal]; + strikevec_faces=[strikevec_faces;strikevec]; + dipvec_faces=[dipvec_faces;dipvec]; + strike_faces=[strike_faces;90-atan2(strikevec(2),strikevec(1))*180/pi]; + dip_faces=[dip_faces;abs(atan(dipvec(3)/sqrt(dipvec(1)^2+dipvec(2)^2))*180/pi)]; + centroids_faces=[centroids_faces;[mean(temp1{1}(temp2{1},1)) mean(temp1{1}(temp2{1},2)) mean(temp1{1}(temp2{1},3))]]; + area_faces=[area_faces;.5*abs(norm(cross(vec1,vec2)))]; + + +end %j + + +patch_stuff.strikevec_faces=strikevec_faces; +patch_stuff.strike_faces=strike_faces; +patch_stuff.dipvec_faces=dipvec_faces; +patch_stuff.dip_faces=dip_faces; +patch_stuff.strike_faces=strike_faces; +patch_stuff.dip_faces=dip_faces; +patch_stuff.centroids_faces=centroids_faces; +patch_stuff.normal_faces=normal_faces; +patch_stuff.area_faces=area_faces; diff --git a/tools/p_poly_dist.m b/tools/p_poly_dist.m new file mode 100755 index 0000000..c0c5196 --- /dev/null +++ b/tools/p_poly_dist.m @@ -0,0 +1,376 @@ +function [d_min, varargout] = p_poly_dist(xp, yp, xv, yv, varargin) +%p_poly_dist Find minimum distances from points to a polyline or to a +% closed polygon. +% +% Description: +% Compute the distances from each one of a set of np points p(1), p(2),... +% p(np) on a 2D plane to a polyline or a closed polygon. Polyline is +% defined as a set of nv-1 segments connecting nv ordered vertices v(1), +% v(2), ..., v(nv). The polyline can optionally be treated as a closed +% polygon. +% Distance from point j to a segment k is defined as a distance from this +% point to a straight line passing through vertices v(k) and v(k+1), when +% the projection of point j on this line falls INSIDE segment k; and to +% the closest of v(k) or v(k+1) vertices, when the projection falls OUTSIDE +% segment k. Distance from point j to a polyline is defined as a minimum of +% this point's distances to all segments. +% In a case when the projected point fall OUTSIDE of all polyline segments, +% the distance to a closest vertex of the polyline is returned +% +% Input arguments: +% Required: +% [d_min, varargout] = p_poly_dist(xp, yp, xv, yv) +% xp - vector of points X coordinates (1 X np) +% yp - vector of points Y coordinates (1 X np) +% xv - vector of polygon vertices' X coordinates (1 X nv) +% yv - vector of polygon vertices' Y coordinates (1 X nv) +% +% Optional: +% [d_min, varargout] = p_poly_dist(xp, yp, xv, yv, find_in_out) +% +% find_in_out - logical flag. When true, the polyline is treated as a +% closed polygon, and each input point is checked wether it is inside or +% outside of this polygon. In such case, an open polyline is automatically +% closed by adding a last point identical to a first one. +% Note: when this function is called with ver. 1.0 signature, i.e: +% d = p_poly_dist(xp, yp, xv, yv) +% the flag find_in_out is assumed to be true, to keep the functionality +% compatible with a previous version. +% +% Output arguments: +% Required: +% d_min = p_poly_dist(xp, yp, xv, yv, varargin) +% +% d_min - vector of distances (1 X np) from points to polyline. This is +% defined as either a distance from a point to it's projection on a line +% that passes through a pair of consecutive polyline vertices, when this +% projection falls inside a segment; or as a distance from a point to a +% closest vertex, when the projection falls outside of a segment. When +% find_in_out input flag is true, the polyline is assumed to be a closed +% polygon, and distances of points INSIDE this polygon are defined as +% negative. +% +% Optional: +% [d_min, x_d_min, y_d_min, is_vertex, xc, yc, idx_c, Cer, Ppr] = +% p_poly_dist(xp, yp, xv, yv, varargin); +% +% x_d_min - vector (1 X np) of X coordinates of the closest points of +% polyline. +% +% y_d_min - vector (1 X np) of Y coordinates of the closest points of +% polyline. +% +% is_vertex - logical vector (1 X np). If is_vertex(j)==true, the closest +% polyline point to a point (xp(j), yp(j)) is a vertex. Otherwise, this +% point is a projection on polyline's segment. +% +% idx_c - vector (1 X np) of indices of segments that contain the closest +% point. For instance, idx_c(2) == 4 means that the polyline point closest +% to point 2 belongs to segment 4 +% +% xc - an array (np X nv-1) containing X coordinates of all projected +% points. xc(j,k) is an X coordinate of a projection of point j on a +% segment k +% +% yc - an array (np X nv-1) containing Y coordinates of all projected +% points. yc(j,k) is Y coordinate of a projection of point j on a +% segment k +% +% is_in_seg - logical array (np X nv-1). If is_in_seg(j,k) == true, the +% projected point j with coordinates (xc(j,k), yc(j,k)) lies INSIDE the +% segment k +% +% Cer - a 3D array (2 X 2 X nv-1). Each 2 X 2 slice represents a rotation +% matrix from an input Cartesian coordinate system to a system defined +% by polyline segments. +% +% Ppr - 3D array of size 2 X np X (nv-1). Ppr(1,j,k) is an X coordinate +% of point j in coordinate systems defined by segment k. Ppr(2,j,k) is its +% Y coordinate. +% +% Routines: p_poly_dist.m +% Revision history: +% Oct 2, 2015 - version 2.0 (Michael Yoshpe). The original ver. 1.0 +% function was completely redesigned. The main changes introduced in +% ver. 2.0: +% 1. Distances to polyline (instead of a closed polygon in ver. 1.0) are +% returned. The polyline can optionally be treated as a closed polygon. +% 2. Distances from multiple points to the same polyline can be found +% 3. The algorithm for finding the closest points is now based on +% coordinate system transformation. The new algorithm avoids numerical +% problems that ver. 1.0 algorithm could experience in "ill-conditioned" +% cases. +% 4. Many optional output variables were added. In particular, the closest +% points on polyline can be returned. +% 5. Added input validity checks +% 7/9/2006 - case when all projections are outside of polygon ribs +% 23/5/2004 - created by Michael Yoshpe +% Remarks: +%************************************************************************** + +find_in_out = false; + +if(nargin >= 5) + find_in_out = varargin{1}; +elseif((nargin==4) && (nargout==1)) % mimic ver. 1.0 functionality + find_in_out = true; +end + +% number of points and number of vertices in polyline +nv = length(xv); +np = length(xp); + +if(nv < 2) + error('Polyline must have at least 2 vertices'); +end + +if((find_in_out == true) && (nv < 3)) + error('Polygon must have at least 3 vertices'); +end + +% if finding wether the points are inside or outsite the polygon is +% required, make sure the verices represent a closed polygon +if(find_in_out) + % If (xv,yv) is not closed, close it. + nv = length(xv); + if ((xv(1) ~= xv(nv)) || (yv(1) ~= yv(nv))) + xv = [xv(:)' xv(1)]; + yv = [yv(:)' yv(1)]; + nv = nv + 1; + end +end + +% Cartesian coordinates of the polyline vertices +Pv = [xv(:) yv(:)]; + +% Cartesian coordinates of the given points +Pp = [xp(:) yp(:)]; + +% matrix of distances between all points and all vertices +% dpv(j,k) - distance from point j to vertex k +dpv(:,:) = hypot((repmat(Pv(:,1)', [np 1])-repmat(Pp(:,1), [1 nv])),... + (repmat(Pv(:,2)', [np 1])-repmat(Pp(:,2), [1 nv]))); + +% Find the vector of minimum distances to vertices. +[dpv_min, I_dpv_min] = min(abs(dpv),[],2); + +% coordinates of consecutive vertices +P1 = Pv(1:(end-1),:); +P2 = Pv(2:end,:); +dv = P2 - P1; + +% vector of distances between each pair of consecutive vertices +vds = hypot(dv(:,1), dv(:,2)); + +% check for identical points +idx = find(vds < 10*eps); +if(~isempty(idx)) + error(['Points ' num2str(idx) ' of the polyline are identical']); +end + +% check for a case when closed polygon's vertices lie on a stright line, +% i.e. the distance between the last and first vertices is equal to the sum +% of all segments except the last +if(find_in_out) + s = cumsum(vds); + if((s(end-1) - vds(end)) < 10*eps) + error('Polygon vertices should not lie on a straight line'); + end +end + +% Each pair of consecutive vertices P1(j), P2(j) defines a rotated +% coordinate system with origin at P1(j), and x axis along the vector +% (P2(j)-P1(j)). +% Build the rotation matrix Cer from original to rotated system +ctheta = dv(:,1)./vds; +stheta = dv(:,2)./vds; +Cer = zeros(2,2,nv-1); +Cer(1,1,:) = ctheta; +Cer(1,2,:) = stheta; +Cer(2,1,:) = -stheta; +Cer(2,2,:) = ctheta; + +% Build the origin translation vector P1r in rotated frame by rotating the +% P1 vector +P1r = [(ctheta.*P1(:,1) + stheta.*P1(:,2)),... + -stheta.*P1(:,1) + ctheta.*P1(:,2)]; + +Cer21 = zeros(2, nv-1); +Cer22 = zeros(2, nv-1); + +Cer21(:,:) = Cer(1,:,:); +Cer22(:,:) = Cer(2,:,:); + +% Ppr is a 3D array of size 2 * np * (nv-1). Ppr(1,j,k) is an X coordinate +% of point j in coordinate systems defined by segment k. Ppr(2,j,k) is its +% Y coordinate. + +% Rotation. Doing it manually, since Matlab cannot multiply 2D slices of ND +% arrays. +Ppr(1,:,:) = Pp*Cer21; +Ppr(2,:,:) = Pp*Cer22; + +% translation +Ppr(1,:,:) = Ppr(1,:,:) - permute(repmat(P1r(:,1), [1 1 np]), [2 3 1]); +Ppr(2,:,:) = Ppr(2,:,:) - permute(repmat(P1r(:,2), [1 1 np]), [2 3 1]); + +% Pcr is a 3D array of size 2 * np * (nv-1) that holds the projections of +% points on X axis of rotated coordinate systems. Pcr(1,j,k) is an X +% coordinate of point j in coordinate systems defined by segment k. +% Pcr(2,j,k) is its Y coordinate, which is identically zero for projected +% point. +Pcr = zeros(size(Ppr)); +Pcr(1, :, :) = Ppr(1,:,:); +Pcr(2, :, :) = 0; + +% Cre is a rotation matrix from rotated to original system +Cre = permute(Cer, [2 1 3]); + +% Pce is a 3D array of size 2 * np * (nv-1) that holds the projections of +% points on a segment in original coordinate systems. Pce(1,j,k) is an X +% coordinate of the projection of point j on segment k. +% Pce(2,j,k) is its Y coordinate +Pce = zeros(2,np,(nv-1)); +Pce(1,:,:) = Pcr(1,:,:).*repmat(Cre(1,1,:), [1 np 1]) + ... + Pcr(2,:,:).*repmat(Cre(1,2,:), [1 np 1]); +Pce(2,:,:) = Pcr(1,:,:).*repmat(Cre(2,1,:), [1 np 1]) + ... + Pcr(2,:,:).*repmat(Cre(2,2,:), [1 np 1]); + +% Adding the P1 vector +Pce(1,:,:) = Pce(1,:,:) + permute(repmat(P1(:,1), [1 1 np]), [2 3 1]); +Pce(2,:,:) = Pce(2,:,:) + permute(repmat(P1(:,2), [1 1 np]), [2 3 1]); + +% x and y coordinates of the projected (cross-over) points in original +% coordinate frame +xc = zeros(np, (nv-1)); +yc = zeros(np, (nv-1)); +xc(:,:) = Pce(1,:,:); +yc(:,:) = Pce(2,:,:); + +r = zeros(np,(nv-1)); +cr = zeros(np,(nv-1)); +r(:,:) = Ppr(1,:,:); +cr(:,:) = Ppr(2,:,:); + +% Find the projections that fall inside the segments +is_in_seg = (r>0) & (r 0); + +is_vertex = (cond1 | cond2); + +% build the minimum distances vector +d_min = cr_min; +d_min(is_vertex) = dpv_min(is_vertex); + +% mimic the functionality of ver. 1.0 - make all distances negative for +% points INSIDE the polygon +if(find_in_out) + in = inpolygon(xp, yp, xv, yv); + d_min(in) = -d_min(in); +end + +% initialize the vectors of minimum distances to the closest vertices +nz = max(np, nv); + +vtmp = zeros(nz, 1); +vtmp(1:nv) = xv(:); +x_d_min = vtmp(I_dpv_min); + +vtmp = zeros(nz, 1); +vtmp(1:nv) = yv(:); +y_d_min = vtmp(I_dpv_min); + +% replace the minimum distances with those to projected points that fall +% inside the segments +idx_pr = sub2ind(size(xc), find(~is_vertex), I_cr_min(~is_vertex)); +x_d_min(~is_vertex) = xc(idx_pr); +y_d_min(~is_vertex) = yc(idx_pr); + +% find the indices of segments that contain the closest points +% note that I_dpv_min contains indices of closest POINTS. To find the +% indices of closest SEGMENTS, we have to substract 1 +idx_c = I_dpv_min-1; +[ii,jj] = ind2sub(size(xc), idx_pr); +idx_c(ii) = jj; + +% assign optional outputs +switch nargout + case 0 + case 1 + case 2 + varargout{1} = x_d_min; + case 3 + varargout{1} = x_d_min; + varargout{2} = y_d_min; + case 4 + varargout{1} = x_d_min; + varargout{2} = y_d_min; + varargout{3} = is_vertex; + case 5 + varargout{1} = x_d_min; + varargout{2} = y_d_min; + varargout{3} = is_vertex; + varargout{4} = idx_c; + case 6 + varargout{1} = x_d_min; + varargout{2} = y_d_min; + varargout{3} = is_vertex; + varargout{4} = idx_c; + varargout{5} = xc; + case 7 + varargout{1} = x_d_min; + varargout{2} = y_d_min; + varargout{3} = is_vertex; + varargout{4} = idx_c; + varargout{5} = xc; + varargout{6} = yc; + case 8 + varargout{1} = x_d_min; + varargout{2} = y_d_min; + varargout{3} = is_vertex; + varargout{4} = idx_c; + varargout{5} = xc; + varargout{6} = yc; + varargout{7} = is_in_seg; + case 9 + varargout{1} = x_d_min; + varargout{2} = y_d_min; + varargout{3} = is_vertex; + varargout{4} = idx_c; + varargout{5} = xc; + varargout{6} = yc; + varargout{7} = is_in_seg; + varargout{8} = Cer; + case 10 + varargout{1} = x_d_min; + varargout{2} = y_d_min; + varargout{3} = is_vertex; + varargout{4} = idx_c; + varargout{5} = xc; + varargout{6} = yc; + varargout{7} = is_in_seg; + varargout{8} = Cer; + varargout{9} = Ppr; + otherwise + error('Invalid number of output arguments, must be between 1 and 9'); +end + +end \ No newline at end of file diff --git a/tools/p_poly_dist1.m b/tools/p_poly_dist1.m new file mode 100755 index 0000000..9793094 --- /dev/null +++ b/tools/p_poly_dist1.m @@ -0,0 +1,61 @@ +%******************************************************************************* +% function: p_poly_dist +% Description: distance from pont to polygon whose vertices are specified by the +% vectors xv and yv +% Input: +% x - point's x coordinate +% y - point's y coordinate +% xv - vector of polygon vertices x coordinates +% yv - vector of polygon vertices x coordinates +% Output: +% d - distance from point to polygon (defined as a minimal distance from +% point to any of polygon's ribs, positive if the point is outside the +% polygon and negative otherwise) +% Routines: p_poly_dist.m +% Revision history: +% 7/9/2006 - case when all projections are outside of polygon ribs +% 23/5/2004 - created by Michael Yoshpe +% Remarks: +%******************************************************************************* +function d = p_poly_dist1(x, y, xv, yv) + +% If (xv,yv) is not closed, close it. +xv = xv(:); +yv = yv(:); +Nv = length(xv); +if ((xv(1) ~= xv(Nv)) || (yv(1) ~= yv(Nv))) + xv = [xv ; xv(1)]; + yv = [yv ; yv(1)]; + Nv = Nv + 1; +end + +% linear parameters of segments that connect the vertices +A = -diff(yv); +B = diff(xv); +C = yv(2:end).*xv(1:end-1) - xv(2:end).*yv(1:end-1); + +% find the projection of point (x,y) on each rib +AB = 1./(A.^2 + B.^2); +vv = (A*x+B*y+C); +xp = x - (A.*AB).*vv; +yp = y - (B.*AB).*vv; + +% find all cases where projected point is inside the segment +idx_x = (((xp>=xv(1:end-1)) & (xp<=xv(2:end))) | ((xp>=xv(2:end)) & (xp<=xv(1:end-1)))); +idx_y = (((yp>=yv(1:end-1)) & (yp<=yv(2:end))) | ((yp>=yv(2:end)) & (yp<=yv(1:end-1)))); +idx = idx_x & idx_y; + +% distance from point (x,y) to the vertices +dv = sqrt((xv(1:end-1)-x).^2 + (yv(1:end-1)-y).^2); + +if(~any(idx)) % all projections are outside of polygon ribs + d = min(dv); +else + % distance from point (x,y) to the projection on ribs + dp = sqrt((xp(idx)-x).^2 + (yp(idx)-y).^2); + d = min(min(dv), min(dp)); +end + +if(inpolygon(x, y, xv, yv)) + d = -d; +end \ No newline at end of file diff --git a/tools/patchfault.m b/tools/patchfault.m new file mode 100755 index 0000000..51e665e --- /dev/null +++ b/tools/patchfault.m @@ -0,0 +1,84 @@ +function [pm]=patchfault(m,i,j); +%PATCHFAULT [pm]=patchfault(m,i,j) +% +%This functions discretizes a fault model into i*j distinct patches. +% +%INPUTS: +% +% m = 1x7 vector defined as follows +% +% m(1) = fault length along the strike direction (km) +% m(2) = fault width in dip direction (km) +% m(3) = depth of lower edge of fault (km) +% m(4) = dip angle, from the horizontal (degrees) +% m(5) = strike, clockwise from N (degrees) +% m(6) = East offset of midpoint of lower edge from origin (km) +% m(7) = North offset of midpoint of lower edge from origin (km) +% +% i = number of patches along fault length +% +% j = number of patches along fault width +% +%OUTPUTS: +% +% pm = mx7 matrix of patch models, where m=i*j +% +%Examples: +% m = [100, 10, 10, 90, 0, 0, 0] +% i = 2 +% j = 2 +% +% pm(1,:) = [50, 5, 5, 90, 0, 0, -25] +% pm(2,:) = [50, 5, 10, 90, 0, 0,-25] +% pm(3,:) = [50, 5, 5, 90, 0, 0, 25] +% pm(4,:) = [50, 5, 10, 90, 0, 0, 25] +% +% m = [100, 10, 10, 45, 75, 10, 10] +% i = 2 +% j = 2 +% +% pm(1,:) = [50, 5, 6.4645, 45, 75, -15.0632, 6.9446] +% pm(2,:) = [50, 5, 10, 45, 75, -14.1481, 3.5295] +% pm(3,:) = [50, 5, 6.4645, 45, 75, 33.2331, 19.8855] +% pm(4,:) = [50, 5, 10, 45, 75, 34.1481, 16.4705] + +%Set constants + + dip=m(4)*pi/180; + strike=-m(5)*pi/180; + sin_dip=sin(dip); + cos_dip=cos(dip); + iw=m(1)/i; + jw=m(2)/j; + is=(1:i); + js=(1:j)'; + n=i*j; + c1=-m(2)*cos_dip; + c2=0.5*(m(1)+iw); + c3=m(3)-j*jw*sin_dip; + +%Calculate midpoints, depths of each patch + + p=[cos_dip*(jw*js-m(2))]*ones(1,i); + q=ones(j,1)*[(iw*is)-0.5*(m(1)+iw)]; + r=[m(3)-jw*sin_dip*(j-js)]*ones(1,i); + mp=[p(:),q(:),r(:)]; + +%Adjust midpoints for strike + + R=[cos(strike),-sin(strike),0;sin(strike),cos(strike),0;0,0,1]; + mp=mp*R'; + +%Adjust midpoints for offset from origin + + mp(:,1)=mp(:,1)+m(6); + mp(:,2)=mp(:,2)+m(7); + +%Form patch-models + + pm(:,1)=ones(n,1)*iw; + pm(:,2)=ones(n,1)*jw; + pm(:,3)=mp(:,3); + pm(:,4:5)=ones(n,1)*m(4:5); + pm(:,6:7)=mp(:,1:2); + diff --git a/tools/plot_coast_xy.m b/tools/plot_coast_xy.m new file mode 100755 index 0000000..28e3be1 --- /dev/null +++ b/tools/plot_coast_xy.m @@ -0,0 +1,15 @@ +function plot_coast_xy(bbox,origin) +%bbox [minlon minlat;maxlon maxlat] + +S = shaperead('ne_10m_coastline','BoundingBox',bbox); + + + +for k=1:length(S) + + xy = llh2local([S(k).X; S(k).Y],[origin(1) ;origin(2)])'; + + + plot(xy(:,1),xy(:,2),'k') + +end diff --git a/tools/plotpatchslip3D.m b/tools/plotpatchslip3D.m new file mode 100755 index 0000000..7856e00 --- /dev/null +++ b/tools/plotpatchslip3D.m @@ -0,0 +1,85 @@ +function [] = plotpatchslip3D(pm,slip,nve) +% +% plotpatchslip1(pm,slip,nve) +% +% plots slip on fault patches on 2-D grid +% +% Input: +% pm = patchmodel (dislocation parameters) +% pm(:,1) = length; +% pm(:,2) = width; +% pm(:,3) = depth; +% pm(:,4) = dip; +% pm(:,5) = strike; +% pm(:,6) = East Offset; +% pm(:,7) = North Offset; +% slip = slip values +% nve = number of vertical elements +% + +depth=pm(:,3); + + +%slip components +ns=slip; %net slip + +dd1=zeros(size(depth)); +dd1(1:nve:end)=0*depth(1:nve:end); + +for k=2:nve + dd1(k:nve:end)=dd1(k-1:nve:end) + pm(1,2); + +end + + +y = -[dd1 + pm(:,2), dd1]; + + +x = zeros(size(y)); +nhe = size(pm,1)/nve; + +% for first nve elements + x(1:nve,2) = pm(1,1); +for k=2:nhe + index1 = nve*(k-1); + index2 = nve*(k-2); + x( index1+1:index1+nve , :) = ... + [x(index2+1:index2+nve,2), ... + x(index2+1:index2+nve,2) + pm(index1+1,1)*ones(nve,1)]; +end + + +strikevec=[cos((90-pm(:,5))*pi/180) sin((90-pm(:,5))*pi/180)]; +dipvec=[-strikevec(:,2) strikevec(:,1)]; +widthproject=pm(:,2).*cos(pm(:,4)*pi/180); + +xvert1=pm(:,6)-.5*pm(:,1).*cos((90-pm(:,5))*pi/180); +yvert1=pm(:,7)-.5*pm(:,1).*sin((90-pm(:,5))*pi/180); +zvert1=-pm(:,3); + +xvert2=pm(:,6)+.5*pm(:,1).*cos((90-pm(:,5))*pi/180); +yvert2=pm(:,7)+.5*pm(:,1).*sin((90-pm(:,5))*pi/180); +zvert2=-pm(:,3); + +xvert4=xvert1+dipvec(:,1).*widthproject; +yvert4=yvert1+dipvec(:,2).*widthproject; +zvert4=-pm(:,3)+pm(:,2).*sin(pm(:,4)*pi/180); + +xvert3=xvert2+dipvec(:,1).*widthproject; +yvert3=yvert2+dipvec(:,2).*widthproject; +zvert3=-pm(:,3)+pm(:,2).*sin(pm(:,4)*pi/180); + +xvert=[xvert1';xvert2';xvert3';xvert4']; +yvert=[yvert1';yvert2';yvert3';yvert4']; +zvert=[zvert1';zvert2';zvert3';zvert4']; + +% +h = patch(xvert,yvert,zvert,ns), axis('equal'); +set(h,'edgecolor','none'); + +%colormap(flipud(hot)) +colorbar +hold on + + +axis equal diff --git a/tools/plotpatchslip3D_edge.m b/tools/plotpatchslip3D_edge.m new file mode 100755 index 0000000..8e3dc46 --- /dev/null +++ b/tools/plotpatchslip3D_edge.m @@ -0,0 +1,85 @@ +function [] = plotpatchslip3D(pm,slip,nve) +% +% plotpatchslip1(pm,slip,nve) +% +% plots slip on fault patches on 2-D grid +% +% Input: +% pm = patchmodel (dislocation parameters) +% pm(:,1) = length; +% pm(:,2) = width; +% pm(:,3) = depth; +% pm(:,4) = dip; +% pm(:,5) = strike; +% pm(:,6) = East Offset; +% pm(:,7) = North Offset; +% slip = slip values +% nve = number of vertical elements +% + +depth=pm(:,3); + + +%slip components +ns=slip; %net slip + +dd1=zeros(size(depth)); +dd1(1:nve:end)=0*depth(1:nve:end); + +for k=2:nve + dd1(k:nve:end)=dd1(k-1:nve:end) + pm(1,2); + +end + + +y = -[dd1 + pm(:,2), dd1]; + + +x = zeros(size(y)); +nhe = size(pm,1)/nve; + +% for first nve elements + x(1:nve,2) = pm(1,1); +for k=2:nhe + index1 = nve*(k-1); + index2 = nve*(k-2); + x( index1+1:index1+nve , :) = ... + [x(index2+1:index2+nve,2), ... + x(index2+1:index2+nve,2) + pm(index1+1,1)*ones(nve,1)]; +end + + +strikevec=[cos((90-pm(:,5))*pi/180) sin((90-pm(:,5))*pi/180)]; +dipvec=[-strikevec(:,2) strikevec(:,1)]; +widthproject=pm(:,2).*cos(pm(:,4)*pi/180); + +xvert1=pm(:,6)-.5*pm(:,1).*cos((90-pm(:,5))*pi/180); +yvert1=pm(:,7)-.5*pm(:,1).*sin((90-pm(:,5))*pi/180); +zvert1=-pm(:,3); + +xvert2=pm(:,6)+.5*pm(:,1).*cos((90-pm(:,5))*pi/180); +yvert2=pm(:,7)+.5*pm(:,1).*sin((90-pm(:,5))*pi/180); +zvert2=-pm(:,3); + +xvert4=xvert1+dipvec(:,1).*widthproject; +yvert4=yvert1+dipvec(:,2).*widthproject; +zvert4=-pm(:,3)+pm(:,2).*sin(pm(:,4)*pi/180); + +xvert3=xvert2+dipvec(:,1).*widthproject; +yvert3=yvert2+dipvec(:,2).*widthproject; +zvert3=-pm(:,3)+pm(:,2).*sin(pm(:,4)*pi/180); + +xvert=[xvert1';xvert2';xvert3';xvert4']; +yvert=[yvert1';yvert2';yvert3';yvert4']; +zvert=[zvert1';zvert2';zvert3';zvert4']; + +% +h = patch(xvert,yvert,zvert,ns), axis('equal'); +set(h,'edgecolor',[.5 .5 .5]); + +%colormap(flipud(hot)) +colorbar +hold on + + +axis equal diff --git a/tools/trigradient.m b/tools/trigradient.m new file mode 100755 index 0000000..af19564 --- /dev/null +++ b/tools/trigradient.m @@ -0,0 +1,81 @@ +function [dfx,dfy]=trigradient(tri,x,y,z,opt) +%TRIGRADIENT Triangular Gradient. +% [dFx,dFy] = TRIGRADIENT(TRI,X,Y,Z) or TRIGRADIENT(TRI,X,Y,Z,'vertex') +% returns numerical gradients of the function z = F(x,y), dFx = dF/dx +% and DFy = dF/dy at the vertices of the triangles specified in TRI. +% dFx and dFy are column vectors having the same number of elements as X, +% Y, and Z. +% TRI, X, Y, and Z define a triangulation where the triangles are defined +% by the M-by-3 face matrix TRI, such as that returned by DELAUNAY. Each +% row of TRI contains indices into the X, Y, and Z vertex vectors to define +% a single triangular face. +% The gradients are computed by an inverse distance method, whereby the +% gradient at a vertex is computed by weighting the gradients of each +% triangle face sharing the vertex in proportion to the inverse distance +% from the center of each triangle to the vertex. +% +% [dFx,dFy] = TRIGRADIENT(TRI,X,Y,Z,'face') returns the numerical gradients +% that are constant over each triangle face. In this case, dFx and dFy are +% column vectors having M = size(TRI,1) elements. +% +% See also GRADIENT, DELAUNAY, TRIMESH, TRISURF, TRIPLOT. + +% D.C. Hanselman, University of Maine, Orono, ME 04469 +% MasteringMatlab@yahoo.com +% Mastering MATLAB 7 +% 2006-05-25, 2006-11-24 + +if nargin==4 + opt='vertex'; +elseif nargin<4 + error('Not Enough Input Arguments.') +end +if ~ischar(opt) + error('Fifth Input Argument Must be a String.') +end +x=x(:); % convert input data into column vectors +y=y(:); +z=z(:); +xlen=length(x); +if ~isequal(xlen,length(y),length(z)) + error('X, Y, and Z Must Have the Same Number of Elements.') +end +if size(tri,2)~=3 || any(tri(:)<0) || any(tri(:)>xlen) + error('TRI Must Be a Valid Triangulation of the Data in X, Y, Z.') +end + +t=tri(:,[1 2 3 1]); +dy=diff(y(t),1,2); % [y2-y1 y3-y2 y1-y3] +dx=diff(x(t),1,2); % [x2-x1 x3-x2 x1-x3] +delta=-sum(dy(:,[2 3 1]).*x(tri),2); % determinant +dxface=-sum(dy(:,[2 3 1]).*z(tri),2)./delta; % face gradient x +dyface= sum(dx(:,[2 3 1]).*z(tri),2)./delta; % face gradient y +if strncmpi(opt,'face',min(4,length(opt))) + dfx=dxface; + dfy=dyface; + return +end +% vertex gradient requested +dfx=zeros(xlen,1); % allocate space for results +dfy=zeros(xlen,1); +xc=sum(x(tri),2)/3; % centroids of all triangles +yc=sum(y(tri),2)/3; + +[vert,idx]=sort(tri(:)); % sort vertices in ascending order +tlen=size(tri,1); % number of triangles +tn=[1:tlen 1:tlen 1:tlen]'; % triangle number for each vertex +tn=tn(idx); % shuffle triangle number to match vertices + +last=find([diff(vert);1]); % index of last vertex element in tn +first=1; + +for k=1:xlen % find gradient vertex by vertex + + r=tn(first:last(k)); % triangles having k-th vertex + first=last(k)+1; % beginning index for next vertex + idist=1./hypot(x(k)-xc(r),y(k)-yc(r)); % inverse distances from vertex + w=idist.'./sum(idist); % inverse distance weightings + dfx(k)=w*dxface(r); + dfy(k)=w*dyface(r); +end + \ No newline at end of file